From d4b2a3153f62f0772980d7a65bed6a1bdd67c64a Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:39:19 -0300 Subject: [PATCH 01/85] feat: add v3 translator for w:aliases --- .../handlers/w/aliases/aliases-translator.js | 9 +++++ .../w/aliases/aliases-translator.test.js | 33 +++++++++++++++++++ .../v3/handlers/w/aliases/index.js | 1 + 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/aliases-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/aliases-translator.test.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/index.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/aliases-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/aliases-translator.js new file mode 100644 index 000000000..665b3c20d --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/aliases-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the aliases element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 618 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:aliases')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/aliases-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/aliases-translator.test.js new file mode 100644 index 000000000..afe0f2331 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/aliases-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './aliases-translator.js'; + +describe('w:aliases translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'Alias1,Alias2' } }] }); + expect(result).toBe('Alias1,Alias2'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:aliases element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { aliases: 'Alias1,Alias2' } } }); + expect(result).toEqual({ 'w:val': 'Alias1,Alias2' }); + }); + + it('returns undefined if aliases property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:aliases'); + expect(translator.sdNodeOrKeyName).toBe('aliases'); + }); +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/index.js new file mode 100644 index 000000000..a51a812f7 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/aliases/index.js @@ -0,0 +1 @@ +export * from './aliases-translator.js'; From 459abd37e589b179e4953a2c7a253a9022acd2f7 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:40:55 -0300 Subject: [PATCH 02/85] feat: add v3 translator for w:name --- .../v3/handlers/w/name/index.js | 1 + .../v3/handlers/w/name/name-translator.js | 9 +++++ .../handlers/w/name/name-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/name/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/name/name-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/name/name-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/name/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/name/index.js new file mode 100644 index 000000000..c02a15aab --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/name/index.js @@ -0,0 +1 @@ +export * from './name-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/name/name-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/name/name-translator.js new file mode 100644 index 000000000..de938baa2 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/name/name-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the name element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 391 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:name')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/name/name-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/name/name-translator.test.js new file mode 100644 index 000000000..d1106a1ad --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/name/name-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './name-translator.js'; + +describe('w:name translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'Name' } }] }); + expect(result).toBe('Name'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:name element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { name: 'Name' } } }); + expect(result).toEqual({ 'w:val': 'Name' }); + }); + + it('returns undefined if name property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:name'); + expect(translator.sdNodeOrKeyName).toBe('name'); + }); +}); From 35139722638417378b7885aa34e0d5fdf964c79b Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:41:33 -0300 Subject: [PATCH 03/85] feat: add v3 translator for w:basedOn --- .../handlers/w/basedOn/basedOn-translator.js | 9 +++++ .../w/basedOn/basedOn-translator.test.js | 33 +++++++++++++++++++ .../v3/handlers/w/basedOn/index.js | 1 + 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/basedOn-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/basedOn-translator.test.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/index.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/basedOn-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/basedOn-translator.js new file mode 100644 index 000000000..8c9d26a13 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/basedOn-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the basedOn element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 391 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:basedOn')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/basedOn-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/basedOn-translator.test.js new file mode 100644 index 000000000..f12c3843f --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/basedOn-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './basedOn-translator.js'; + +describe('w:basedOn translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'BaseStyle' } }] }); + expect(result).toBe('BaseStyle'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:basedOn element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { basedOn: 'BaseStyle' } } }); + expect(result).toEqual({ 'w:val': 'BaseStyle' }); + }); + + it('returns undefined if basedOn property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:basedOn'); + expect(translator.sdNodeOrKeyName).toBe('basedOn'); + }); +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/index.js new file mode 100644 index 000000000..b3e6f036d --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/basedOn/index.js @@ -0,0 +1 @@ +export * from './basedOn-translator.js'; From 40b17142722526b9b285b589f71448a19e199a78 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:42:11 -0300 Subject: [PATCH 04/85] feat: add v3 translator for w:link --- .../v3/handlers/w/link/index.js | 1 + .../v3/handlers/w/link/link-translator.js | 9 +++++ .../handlers/w/link/link-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/link/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/link/link-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/link/link-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/link/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/link/index.js new file mode 100644 index 000000000..43652ac35 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/link/index.js @@ -0,0 +1 @@ +export * from './link-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/link/link-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/link/link-translator.js new file mode 100644 index 000000000..fa5afcf6d --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/link/link-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the link element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 628 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:link')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/link/link-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/link/link-translator.test.js new file mode 100644 index 000000000..9b8b74149 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/link/link-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './link-translator.js'; + +describe('w:link translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'LinkedStyle' } }] }); + expect(result).toBe('LinkedStyle'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:link element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { link: 'LinkedStyle' } } }); + expect(result).toEqual({ 'w:val': 'LinkedStyle' }); + }); + + it('returns undefined if link property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:link'); + expect(translator.sdNodeOrKeyName).toBe('link'); + }); +}); From 7b64232a527eacfc08092dac2da4147a7da2622d Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:42:46 -0300 Subject: [PATCH 05/85] feat: add v3 translator for w:next --- .../v3/handlers/w/next/index.js | 1 + .../v3/handlers/w/next/next-translator.js | 9 +++++ .../handlers/w/next/next-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/next/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/next/next-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/next/next-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/next/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/next/index.js new file mode 100644 index 000000000..4fcb19fa1 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/next/index.js @@ -0,0 +1 @@ +export * from './next-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/next/next-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/next/next-translator.js new file mode 100644 index 000000000..00deedd96 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/next/next-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the next element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 391 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:next')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/next/next-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/next/next-translator.test.js new file mode 100644 index 000000000..a951cf251 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/next/next-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './next-translator.js'; + +describe('w:next translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'NextStyle' } }] }); + expect(result).toBe('NextStyle'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:next element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { next: 'NextStyle' } } }); + expect(result).toEqual({ 'w:val': 'NextStyle' }); + }); + + it('returns undefined if next property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:next'); + expect(translator.sdNodeOrKeyName).toBe('next'); + }); +}); From 8a8a276c6498372458a80e2a1d40f21d44c3a2c5 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:43:16 -0300 Subject: [PATCH 06/85] feat: register translators --- .../src/core/super-converter/v3/handlers/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 5cad99c8b..62090903f 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -9,7 +9,9 @@ import { translator as sd_totalPageNumber_translator } from './sd/totalPageNumbe import { translator as w_adjustRightInd_translator } from './w/adjustRightInd/adjustRightInd-translator.js'; import { translator as w_autoSpaceDE_translator } from './w/autoSpaceDE/autoSpaceDE-translator.js'; import { translator as w_autoSpaceDN_translator } from './w/autoSpaceDN/autoSpaceDN-translator.js'; +import { translator as w_aliases_translator } from './w/aliases/aliases-translator.js'; import { translator as w_b_translator } from './w/b/b-translator.js'; +import { translator as w_basedOn_translator } from './w/basedOn/basedOn-translator.js'; import { translator as w_bdr_translator } from './w/bdr/bdr-translator.js'; import { translator as w_bar_translator } from './w/bar/bar-translator.js'; import { translator as w_bCs_translator } from './w/bCs/bCs-translator.js'; @@ -64,8 +66,11 @@ import { translator as w_keepNext_translator } from './w/keepNext/keepNext-trans import { translator as w_kern_translator } from './w/kern/kern-translator.js'; import { translator as w_kinsoku_translator } from './w/kinsoku/kinsoku-translator.js'; import { translator as w_lang_translator } from './w/lang/lang-translator.js'; +import { translator as w_link_translator } from './w/link/link-translator.js'; import { translator as w_mirrorIndents_translator } from './w/mirrorIndents/mirrorIndents-translator.js'; import { translator as w_left_translator } from './w/left/left-translator.js'; +import { translator as w_name_translator } from './w/name/name-translator.js'; +import { translator as w_next_translator } from './w/next/next-translator.js'; import { translator as w_noProof_translator } from './w/noProof/noProof-translator.js'; import { translator as w_noWrap_translator } from './w/noWrap/noWrap-translator.js'; import { translator as w_numId_translator } from './w/numId/numId-translator.js'; @@ -169,9 +174,11 @@ const translatorList = Array.from( w_adjustRightInd_translator, w_autoSpaceDE_translator, w_autoSpaceDN_translator, + w_aliases_translator, w_b_translator, w_bar_translator, w_bCs_translator, + w_basedOn_translator, w_bdr_translator, w_bidiVisual_translator, w_bookmarkEnd_translator, @@ -221,7 +228,10 @@ const translatorList = Array.from( w_kinsoku_translator, w_lang_translator, w_left_translator, + w_link_translator, w_mirrorIndents_translator, + w_name_translator, + w_next_translator, w_noProof_translator, w_noWrap_translator, w_numId_translator, From 101e8d09ed1a4a7dd57d75e4ab683831f710640c Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:50:33 -0300 Subject: [PATCH 07/85] refactor: use utility functions in w:hidden translator --- .../v3/handlers/w/hidden/hidden-translator.js | 9 +--- .../w/hidden/hidden-translator.test.js | 45 +++++++++---------- .../handlers/w/trPr/trPr-translator.test.js | 1 - 3 files changed, 23 insertions(+), 32 deletions(-) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.js index c3798483c..8717c6469 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.js @@ -1,14 +1,9 @@ import { NodeTranslator } from '@translator'; -import { parseBoolean } from '@converter/v3/handlers/utils'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; /** * The NodeTranslator instance for the hidden element. * @type {import('@translator').NodeTranslator} * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 405 */ -export const translator = NodeTranslator.from({ - xmlName: 'w:hidden', - sdNodeOrKeyName: 'hidden', - encode: ({ nodes }) => parseBoolean(nodes[0].attributes?.['w:val'] ?? '1'), - decode: ({ node }) => (node.attrs.hidden ? { attributes: {} } : undefined), -}); +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:hidden')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.test.js index 07bc57086..d1fea6c68 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.test.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/hidden/hidden-translator.test.js @@ -1,35 +1,32 @@ import { describe, it, expect } from 'vitest'; + import { translator } from './hidden-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; -describe('w:hidden translator', () => { - describe('encode', () => { - it('returns true for "1", "true", or missing w:val', () => { - expect(translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] })).toBe(true); - expect(translator.encode({ nodes: [{ attributes: { 'w:val': 'true' } }] })).toBe(true); - expect(translator.encode({ nodes: [{ attributes: {} }] })).toBe(true); // defaults to '1' - }); +describe('w:hidden translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:hidden'); + expect(translator.sdNodeOrKeyName).toBe('hidden'); + expect(typeof translator.encode).toBe('function'); + }); - it('returns false for other values', () => { - expect(translator.encode({ nodes: [{ attributes: { 'w:val': '0' } }] })).toBe(false); - expect(translator.encode({ nodes: [{ attributes: { 'w:val': 'false' } }] })).toBe(false); - expect(translator.encode({ nodes: [{ attributes: { 'w:val': 'any other string' } }] })).toBe(false); - }); + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:hidden'); + expect(translator.sdNodeOrKeyName).toBe('hidden'); }); - describe('decode', () => { - it('creates a w:hidden element if hidden is true', () => { - const { attributes: result } = translator.decode({ node: { attrs: { hidden: true } } }); - expect(result).toEqual({}); + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); }); - it('returns undefined if hidden is false or missing', () => { - expect(translator.decode({ node: { attrs: { hidden: false } } })).toBeUndefined(); - expect(translator.decode({ node: { attrs: {} } })).toBeUndefined(); + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); }); }); - - it('has correct metadata', () => { - expect(translator.xmlName).toBe('w:hidden'); - expect(translator.sdNodeOrKeyName).toBe('hidden'); - }); }); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.test.js index 8fd3cdd8d..8cc30f0ad 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.test.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.test.js @@ -158,7 +158,6 @@ describe('w:trPr translator', () => { attrs: { tableRowProperties: { cantSplit: false, - hidden: false, repeatHeader: false, // other properties are undefined }, From 6408661de5283cad38b8ad5f9380f9ec9f92c29f Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:52:35 -0300 Subject: [PATCH 08/85] feat: add v3 translator for w:autoRedefine --- .../w/autoRedefine/autoRedefine-translator.js | 9 ++++++ .../autoRedefine-translator.test.js | 32 +++++++++++++++++++ .../v3/handlers/w/autoRedefine/index.js | 1 + 3 files changed, 42 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/autoRedefine-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/autoRedefine-translator.test.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/index.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/autoRedefine-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/autoRedefine-translator.js new file mode 100644 index 000000000..8f45c4139 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/autoRedefine-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the autoRedefine element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 619 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:autoRedefine')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/autoRedefine-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/autoRedefine-translator.test.js new file mode 100644 index 000000000..eeba79db7 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/autoRedefine-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './autoRedefine-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:autoRedefine translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:autoRedefine'); + expect(translator.sdNodeOrKeyName).toBe('autoRedefine'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:autoRedefine'); + expect(translator.sdNodeOrKeyName).toBe('autoRedefine'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/index.js new file mode 100644 index 000000000..7af077869 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/autoRedefine/index.js @@ -0,0 +1 @@ +export * from './autoRedefine-translator.js'; From adf18ed582fb5de7ee1db536546c9956ff04ccdd Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:53:18 -0300 Subject: [PATCH 09/85] feat: add v3 translator for w:locked --- .../v3/handlers/w/locked/index.js | 1 + .../v3/handlers/w/locked/locked-translator.js | 9 ++++++ .../w/locked/locked-translator.test.js | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/locked/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/locked/locked-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/locked/locked-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/index.js new file mode 100644 index 000000000..1f0e05974 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/index.js @@ -0,0 +1 @@ +export * from './locked-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/locked-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/locked-translator.js new file mode 100644 index 000000000..88985d3c0 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/locked-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the locked element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 629 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:locked')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/locked-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/locked-translator.test.js new file mode 100644 index 000000000..e525c0e8b --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/locked/locked-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './locked-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:locked translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:locked'); + expect(translator.sdNodeOrKeyName).toBe('locked'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:locked'); + expect(translator.sdNodeOrKeyName).toBe('locked'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); From 0ffa6d665bfe031a4dfd90e42e3652c68d5ea9c8 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:53:36 -0300 Subject: [PATCH 10/85] feat: add v3 translator for w:personal --- .../v3/handlers/w/personal/index.js | 1 + .../w/personal/personal-translator.js | 9 ++++++ .../w/personal/personal-translator.test.js | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personal/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personal/personal-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personal/personal-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/index.js new file mode 100644 index 000000000..863c4fec7 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/index.js @@ -0,0 +1 @@ +export * from './personal-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/personal-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/personal-translator.js new file mode 100644 index 000000000..62245e60e --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/personal-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the personal element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 636 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:personal')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/personal-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/personal-translator.test.js new file mode 100644 index 000000000..dc325e274 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personal/personal-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './personal-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:personal translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:personal'); + expect(translator.sdNodeOrKeyName).toBe('personal'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:personal'); + expect(translator.sdNodeOrKeyName).toBe('personal'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); From c7996252cd7c55a220c2a19b48d698c240549ba2 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:53:53 -0300 Subject: [PATCH 11/85] feat: add v3 translator for w:personalCompose --- .../v3/handlers/w/personalCompose/index.js | 1 + .../personalCompose-translator.js | 9 ++++++ .../personalCompose-translator.test.js | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/personalCompose-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/personalCompose-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/index.js new file mode 100644 index 000000000..9a6a2c87e --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/index.js @@ -0,0 +1 @@ +export * from './personalCompose-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/personalCompose-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/personalCompose-translator.js new file mode 100644 index 000000000..ba905f34e --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/personalCompose-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the personalCompose element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 636 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:personalCompose')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/personalCompose-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/personalCompose-translator.test.js new file mode 100644 index 000000000..2d53ea9e7 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalCompose/personalCompose-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './personalCompose-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:personalCompose translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:personalCompose'); + expect(translator.sdNodeOrKeyName).toBe('personalCompose'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:personalCompose'); + expect(translator.sdNodeOrKeyName).toBe('personalCompose'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); From a62b5d284dd93eadb21c8ac306a723a93696bcd5 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:54:05 -0300 Subject: [PATCH 12/85] feat: add v3 translator for w:personalReply --- .../v3/handlers/w/personalReply/index.js | 1 + .../personalReply/personalReply-translator.js | 9 ++++++ .../personalReply-translator.test.js | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/personalReply-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/personalReply-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/index.js new file mode 100644 index 000000000..481fa4c98 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/index.js @@ -0,0 +1 @@ +export * from './personalReply-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/personalReply-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/personalReply-translator.js new file mode 100644 index 000000000..52fe2c0bc --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/personalReply-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the personalReply element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 637 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:personalReply')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/personalReply-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/personalReply-translator.test.js new file mode 100644 index 000000000..ff5d9e882 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/personalReply/personalReply-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './personalReply-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:personalReply translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:personalReply'); + expect(translator.sdNodeOrKeyName).toBe('personalReply'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:personalReply'); + expect(translator.sdNodeOrKeyName).toBe('personalReply'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); From f0000850fa1fd3897581d98ed25d7e7650a07ef3 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:54:30 -0300 Subject: [PATCH 13/85] feat: add v3 translator for w:qFormat --- .../v3/handlers/w/qFormat/index.js | 1 + .../handlers/w/qFormat/qFormat-translator.js | 9 ++++++ .../w/qFormat/qFormat-translator.test.js | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/qFormat-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/qFormat-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/index.js new file mode 100644 index 000000000..798809fca --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/index.js @@ -0,0 +1 @@ +export * from './qFormat-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/qFormat-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/qFormat-translator.js new file mode 100644 index 000000000..ec5e5ff07 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/qFormat-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the qFormat element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 637 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:qFormat')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/qFormat-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/qFormat-translator.test.js new file mode 100644 index 000000000..4cdcd52ef --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/qFormat/qFormat-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './qFormat-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:qFormat translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:qFormat'); + expect(translator.sdNodeOrKeyName).toBe('qFormat'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:qFormat'); + expect(translator.sdNodeOrKeyName).toBe('qFormat'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); From 43929067e9861558d3c95fb81b667d95eff510d4 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:54:46 -0300 Subject: [PATCH 14/85] feat: add v3 translator for w:semiHidden --- .../v3/handlers/w/semiHidden/index.js | 1 + .../w/semiHidden/semiHidden-translator.js | 9 ++++++ .../semiHidden/semiHidden-translator.test.js | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/semiHidden-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/semiHidden-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/index.js new file mode 100644 index 000000000..b03a7f7a3 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/index.js @@ -0,0 +1 @@ +export * from './semiHidden-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/semiHidden-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/semiHidden-translator.js new file mode 100644 index 000000000..e36606809 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/semiHidden-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the semiHidden element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 639 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:semiHidden')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/semiHidden-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/semiHidden-translator.test.js new file mode 100644 index 000000000..6963745c9 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/semiHidden/semiHidden-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './semiHidden-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:semiHidden translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:semiHidden'); + expect(translator.sdNodeOrKeyName).toBe('semiHidden'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:semiHidden'); + expect(translator.sdNodeOrKeyName).toBe('semiHidden'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); From 79ecd58fb80fcc2da60656e194848d851e67240e Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:54:59 -0300 Subject: [PATCH 15/85] feat: add v3 translator for w:unhideWhenUsed --- .../v3/handlers/w/unhideWhenUsed/index.js | 1 + .../unhideWhenUsed-translator.js | 9 ++++++ .../unhideWhenUsed-translator.test.js | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/unhideWhenUsed-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/unhideWhenUsed-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/index.js new file mode 100644 index 000000000..223844f22 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/index.js @@ -0,0 +1 @@ +export * from './unhideWhenUsed-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/unhideWhenUsed-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/unhideWhenUsed-translator.js new file mode 100644 index 000000000..245e4fb99 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/unhideWhenUsed-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the unhideWhenUsed element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 646 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:unhideWhenUsed')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/unhideWhenUsed-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/unhideWhenUsed-translator.test.js new file mode 100644 index 000000000..91f85a29a --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/unhideWhenUsed/unhideWhenUsed-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './unhideWhenUsed-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:unhideWhenUsed translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:unhideWhenUsed'); + expect(translator.sdNodeOrKeyName).toBe('unhideWhenUsed'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:unhideWhenUsed'); + expect(translator.sdNodeOrKeyName).toBe('unhideWhenUsed'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); From c35c2ab6111c94543b2fdedf820ce0c383087090 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:56:16 -0300 Subject: [PATCH 16/85] feat: register translators --- .../core/super-converter/v3/handlers/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 62090903f..6ded6c51e 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -7,6 +7,7 @@ import { translator as sd_indexEntry_translator } from './sd/indexEntry/indexEnt import { translator as sd_autoPageNumber_translator } from './sd/autoPageNumber/autoPageNumber-translator.js'; import { translator as sd_totalPageNumber_translator } from './sd/totalPageNumber/totalPageNumber-translator.js'; import { translator as w_adjustRightInd_translator } from './w/adjustRightInd/adjustRightInd-translator.js'; +import { translator as w_autoRedefine_translator } from './w/autoRedefine/autoRedefine-translator.js'; import { translator as w_autoSpaceDE_translator } from './w/autoSpaceDE/autoSpaceDE-translator.js'; import { translator as w_autoSpaceDN_translator } from './w/autoSpaceDN/autoSpaceDN-translator.js'; import { translator as w_aliases_translator } from './w/aliases/aliases-translator.js'; @@ -66,6 +67,7 @@ import { translator as w_keepNext_translator } from './w/keepNext/keepNext-trans import { translator as w_kern_translator } from './w/kern/kern-translator.js'; import { translator as w_kinsoku_translator } from './w/kinsoku/kinsoku-translator.js'; import { translator as w_lang_translator } from './w/lang/lang-translator.js'; +import { translator as w_locked_translator } from './w/locked/locked-translator.js'; import { translator as w_link_translator } from './w/link/link-translator.js'; import { translator as w_mirrorIndents_translator } from './w/mirrorIndents/mirrorIndents-translator.js'; import { translator as w_left_translator } from './w/left/left-translator.js'; @@ -82,6 +84,9 @@ import { translator as w_overflowPunct } from './w/overflowPunct/overflowPunct-t import { translator as w_p_translator } from './w/p/p-translator.js'; import { translator as w_pageBreakBefore_translator } from './w/pageBreakBefore/pageBreakBefore-translator.js'; import { translator as w_pBdr_translator } from './w/pBdr/pBdr-translator.js'; +import { translator as w_personal_translator } from './w/personal/personal-translator.js'; +import { translator as w_personalCompose_translator } from './w/personalCompose/personalCompose-translator.js'; +import { translator as w_personalReply_translator } from './w/personalReply/personalReply-translator.js'; import { translator as w_position_translator } from './w/position/position-translator.js'; import { translator as w_pPr_translator } from './w/pPr/pPr-translator.js'; import { translator as w_pStyle_translator } from './w/pStyle/pStyle-translator.js'; @@ -94,6 +99,7 @@ import { translator as w_rStyle_translator } from './w/rStyle/rstyle-translator. import { translator as w_rtl_translator } from './w/rtl/rtl-translator.js'; import { translator as w_right_translator } from './w/right/right-translator.js'; import { translator as w_sdt_translator } from './w/sdt/sdt-translator.js'; +import { translator as w_semiHidden_translator } from './w/semiHidden/semiHidden-translator.js'; import { translator as w_shadow_translator } from './w/shadow/shadow-translator.js'; import { translator as w_shd_translator } from './w/shd/shd-translator.js'; import { translator as w_smallCaps_translator } from './w/smallCaps/smallCaps-translator.js'; @@ -133,6 +139,7 @@ import { translator as w_tr_translator } from './w/tr/tr-translator.js'; import { translator as w_trHeight_translator } from './w/trHeight/trHeight-translator.js'; import { translator as w_trPr_translator } from './w/trPr/trPr-translator.js'; import { translator as w_u_translator } from './w/u/u-translator.js'; +import { translator as w_unhideWhenUsed_translator } from './w/unhideWhenUsed/unhideWhenUsed-translator.js'; import { translator as w_w_translator } from './w/w/w-translator.js'; import { translator as w_wAfter_translator } from './w/wAfter/wAfter-translator.js'; import { translator as w_wBefore_translator } from './w/wBefore/wBefore-translator.js'; @@ -155,6 +162,7 @@ import { translator as w_vanish_translator } from './w/vanish/vanish-translator. import { translator as w_webHidden_translator } from './w/webHidden/webHidden-translator.js'; import { translator as w_widowControl_translator } from './w/widowControl/widowControl-translator.js'; import { translator as w_wordWrap_translator } from './w/wordWrap/wordWrap-translator.js'; +import { translator as w_qFormat_translator } from './w/qFormat/qFormat-translator.js'; import { translator as wp_anchor_translator } from './wp/anchor/anchor-translator.js'; import { translator as wp_inline_translator } from './wp/inline/inline-translator.js'; @@ -172,6 +180,7 @@ const translatorList = Array.from( sd_autoPageNumber_translator, sd_totalPageNumber_translator, w_adjustRightInd_translator, + w_autoRedefine_translator, w_autoSpaceDE_translator, w_autoSpaceDN_translator, w_aliases_translator, @@ -229,6 +238,7 @@ const translatorList = Array.from( w_lang_translator, w_left_translator, w_link_translator, + w_locked_translator, w_mirrorIndents_translator, w_name_translator, w_next_translator, @@ -243,6 +253,9 @@ const translatorList = Array.from( w_p_translator, w_pageBreakBefore_translator, w_pBdr_translator, + w_personal_translator, + w_personalCompose_translator, + w_personalReply_translator, w_position_translator, w_pPr_translator, w_pStyle_translator, @@ -255,6 +268,7 @@ const translatorList = Array.from( w_rtl_translator, w_right_translator, w_sdt_translator, + w_semiHidden_translator, w_shadow_translator, w_shd_translator, w_smallCaps_translator, @@ -306,6 +320,7 @@ const translatorList = Array.from( w_topLinePunct_translator, w_top_translator, w_u_translator, + w_unhideWhenUsed_translator, w_vAlign_translator, w_vanish_translator, w_vertAlign_translator, @@ -316,6 +331,7 @@ const translatorList = Array.from( w_webHidden_translator, w_widowControl_translator, w_wordWrap_translator, + w_qFormat_translator, wp_anchor_translator, wp_inline_translator, w_commentRangeStart_translator, From f94bac81d89c3b6558bcee28b1b4ccab729a306c Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 14:59:40 -0300 Subject: [PATCH 17/85] feat: add v3 translator for w:rsid --- .../v3/handlers/w/rsid/index.js | 1 + .../v3/handlers/w/rsid/rsid-translator.js | 9 +++++ .../handlers/w/rsid/rsid-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/rsid-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/rsid-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/index.js new file mode 100644 index 000000000..c9b3e6ece --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/index.js @@ -0,0 +1 @@ +export * from './rsid-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/rsid-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/rsid-translator.js new file mode 100644 index 000000000..06a2ed32b --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/rsid-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:rsid element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 638 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:rsid')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/rsid-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/rsid-translator.test.js new file mode 100644 index 000000000..eac10b83d --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/rsid/rsid-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './rsid-translator.js'; + +describe('w:rsid translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '42' } }] }); + expect(result).toBe(42); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:rsid element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { rsid: 42 } } }); + expect(result).toEqual({ 'w:val': '42' }); + }); + + it('returns undefined if rsid property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:rsid'); + expect(translator.sdNodeOrKeyName).toBe('rsid'); + }); +}); From e11a6a1398fc496e982cce9ce6c9825cba0525b9 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 15:00:09 -0300 Subject: [PATCH 18/85] feat: add v3 translator for w:uiPriority --- .../v3/handlers/w/uiPriority/index.js | 1 + .../w/uiPriority/uiPriority-translator.js | 9 +++++ .../uiPriority/uiPriority-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/uiPriority-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/uiPriority-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/index.js new file mode 100644 index 000000000..3f780823d --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/index.js @@ -0,0 +1 @@ +export * from './uiPriority-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/uiPriority-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/uiPriority-translator.js new file mode 100644 index 000000000..1f00d2df7 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/uiPriority-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:uiPriority element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 645 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:uiPriority')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/uiPriority-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/uiPriority-translator.test.js new file mode 100644 index 000000000..f7875b445 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/uiPriority/uiPriority-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './uiPriority-translator.js'; + +describe('w:uiPriority translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '5' } }] }); + expect(result).toBe(5); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:uiPriority element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { uiPriority: 5 } } }); + expect(result).toEqual({ 'w:val': '5' }); + }); + + it('returns undefined if uiPriority property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:uiPriority'); + expect(translator.sdNodeOrKeyName).toBe('uiPriority'); + }); +}); From b3c829fe60279841e4cfe81b89468c4cf052ee85 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 15:00:37 -0300 Subject: [PATCH 19/85] feat: register translators --- .../src/core/super-converter/v3/handlers/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 6ded6c51e..b78e5251a 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -96,6 +96,7 @@ import { translator as w_r_translator } from './w/r/r-translator.js'; import { translator as w_rFonts_translator } from './w/rFonts/rFonts-translator.js'; import { translator as w_rPr_translator } from './w/rpr/rpr-translator.js'; import { translator as w_rStyle_translator } from './w/rStyle/rstyle-translator.js'; +import { translator as w_rsid_translator } from './w/rsid/rsid-translator.js'; import { translator as w_rtl_translator } from './w/rtl/rtl-translator.js'; import { translator as w_right_translator } from './w/right/right-translator.js'; import { translator as w_sdt_translator } from './w/sdt/sdt-translator.js'; @@ -139,6 +140,7 @@ import { translator as w_tr_translator } from './w/tr/tr-translator.js'; import { translator as w_trHeight_translator } from './w/trHeight/trHeight-translator.js'; import { translator as w_trPr_translator } from './w/trPr/trPr-translator.js'; import { translator as w_u_translator } from './w/u/u-translator.js'; +import { translator as w_uiPriority_translator } from './w/uiPriority/uiPriority-translator.js'; import { translator as w_unhideWhenUsed_translator } from './w/unhideWhenUsed/unhideWhenUsed-translator.js'; import { translator as w_w_translator } from './w/w/w-translator.js'; import { translator as w_wAfter_translator } from './w/wAfter/wAfter-translator.js'; @@ -265,6 +267,7 @@ const translatorList = Array.from( w_rFonts_translator, w_rPr_translator, w_rStyle_translator, + w_rsid_translator, w_rtl_translator, w_right_translator, w_sdt_translator, @@ -320,6 +323,7 @@ const translatorList = Array.from( w_topLinePunct_translator, w_top_translator, w_u_translator, + w_uiPriority_translator, w_unhideWhenUsed_translator, w_vAlign_translator, w_vanish_translator, From 95868a180d04922025e8a2b23cc2811d33c24064 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 15:12:03 -0300 Subject: [PATCH 20/85] docs: fix typing --- .../super-editor/src/core/super-converter/v3/handlers/utils.js | 2 +- .../super-converter/v3/handlers/w/numPr/numPr-translator.js | 2 +- .../core/super-converter/v3/handlers/w/pBdr/pBdr-translator.js | 2 +- .../core/super-converter/v3/handlers/w/pPr/pPr-translator.js | 2 +- .../core/super-converter/v3/handlers/w/rpr/rpr-translator.js | 2 +- .../v3/handlers/w/tblBorders/tblBorders-translator.js | 2 +- .../super-converter/v3/handlers/w/tblPr/tblPr-translator.js | 2 +- .../v3/handlers/w/tcBorders/tcBorders-translator.js | 2 +- .../super-converter/v3/handlers/w/tcMar/tcMar-translator.js | 2 +- .../core/super-converter/v3/handlers/w/tcPr/tcPr-translator.js | 2 +- .../core/super-converter/v3/handlers/w/trPr/trPr-translator.js | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js index 90ec5503a..4387fde59 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js @@ -294,7 +294,7 @@ export function decodeProperties(params, translatorsBySdName, properties) { * Helper to create property handlers for nested properties (eg: w:tcBorders => borders) * @param {string} xmlName The XML element name (with namespace). * @param {string} sdName The SuperDoc attribute name (without namespace). - * @param {import('@translator').NodeTranslatorConfig[]} propertyTranslators An array of property translators to handle nested properties. + * @param {import('@translator').NodeTranslator[]} propertyTranslators An array of property translators to handle nested properties. * @param {object} [defaultEncodedAttrs={}] Optional default attributes to include during encoding. * @returns {import('@translator').NodeTranslatorConfig} The nested property handler config with xmlName, sdName, encode, and decode functions. */ diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numPr/numPr-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numPr/numPr-translator.js index 1b0904d47..b155f0905 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/numPr/numPr-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numPr/numPr-translator.js @@ -8,7 +8,7 @@ import { translator as wNumIdTranslator } from '../numId'; // Property translators for w:numPr child elements // Each translator handles a specific property of the numbering properties -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [mcAlternateContentTranslator, wIlvlTranslator, wInsTranslator, wNumIdTranslator]; /** diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/pBdr/pBdr-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/pBdr/pBdr-translator.js index 0e1a3a701..019f2fd3b 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/pBdr/pBdr-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/pBdr/pBdr-translator.js @@ -11,7 +11,7 @@ import { translator as wTop } from '../top'; // Property translators for w:pBdr child elements // Each translator handles a specific property of the paragraph borders -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [ mcAlternateContentTranslator, wBarTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/pPr/pPr-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/pPr/pPr-translator.js index 20a6153cf..212fe1060 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/pPr/pPr-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/pPr/pPr-translator.js @@ -39,7 +39,7 @@ import { translator as wRPrTranslator } from '../rpr'; // Property translators for w:pPr child elements // Each translator handles a specific property of the paragraph properties -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [ mcAlternateContentTranslator, wAdjustRightIndTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/rpr/rpr-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/rpr/rpr-translator.js index c287dd64a..738ff3464 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/rpr/rpr-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/rpr/rpr-translator.js @@ -42,7 +42,7 @@ import { translator as webHiddenTranslator } from '../webHidden/webHidden-transl // Property translators for w:rPr child elements // Each translator handles a specific property of the run properties -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ export const propertyTranslators = [ boldCsTranslator, boldTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblBorders/tblBorders-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblBorders/tblBorders-translator.js index 926ff9055..758798b52 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblBorders/tblBorders-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblBorders/tblBorders-translator.js @@ -11,7 +11,7 @@ import { translator as wTopTranslator } from '../top'; // Property translators for w:tblBorders child elements // Each translator handles a specific border property of the table -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [ wBottomTranslator, wEndTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblPr/tblPr-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblPr/tblPr-translator.js index e92cfd76f..d94481dbc 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblPr/tblPr-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblPr/tblPr-translator.js @@ -22,7 +22,7 @@ import { translator as tblCellMarTranslator } from '../tblCellMar'; // Property translators for w:tblPr child elements // Each translator handles a specific property of the table -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [ bidiVisualTranslator, jcTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tcBorders/tcBorders-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tcBorders/tcBorders-translator.js index 77b7723cd..61d0b4b68 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tcBorders/tcBorders-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tcBorders/tcBorders-translator.js @@ -13,7 +13,7 @@ import { translator as tr2blTranslator } from '@converter/v3/handlers/w/tr2bl'; // Property translators for w:tcBorders child elements // Each translator handles a specific border property of the table -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [ wTopTranslator, wStartTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tcMar/tcMar-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tcMar/tcMar-translator.js index d9207b00d..387995a5a 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tcMar/tcMar-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tcMar/tcMar-translator.js @@ -10,7 +10,7 @@ import { marginTopTranslator } from '../top/index.js'; // Property translators for w:tcMar child elements // Each translator handles a specific margin property of the table cell -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [ marginBottomTranslator, marginEndTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tcPr/tcPr-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tcPr/tcPr-translator.js index d7c57706e..666bf0b0a 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tcPr/tcPr-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tcPr/tcPr-translator.js @@ -17,7 +17,7 @@ import { translator as headersTranslator } from '@converter/v3/handlers/w/header // Property translators for w:tcPr child elements // Each translator handles a specific property of the table cell -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [ cnfStyleTranslator, tcWTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.js index e416a38d8..dd5cf5ed5 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/trPr/trPr-translator.js @@ -16,7 +16,7 @@ import { translator as trWBeforeTranslator } from '@converter/v3/handlers/w/wBef // Property translators for w:trPr child elements // Each translator handles a specific property of the table row -/** @type {import('@translator').NodeTranslatorConfig[]} */ +/** @type {import('@translator').NodeTranslator[]} */ const propertyTranslators = [ cantSplitTranslator, cnfStyleTranslator, From e76eb0c94c3a8ea0b070ce7870286f3d9f6868eb Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 15:42:33 -0300 Subject: [PATCH 21/85] feat: add support for attribute handlers in nested props translators --- .../core/super-converter/v3/handlers/utils.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js index 4387fde59..2653303aa 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js @@ -296,9 +296,16 @@ export function decodeProperties(params, translatorsBySdName, properties) { * @param {string} sdName The SuperDoc attribute name (without namespace). * @param {import('@translator').NodeTranslator[]} propertyTranslators An array of property translators to handle nested properties. * @param {object} [defaultEncodedAttrs={}] Optional default attributes to include during encoding. + * @param {import('@translator').AttrConfig[]} [attributeHandlers=[]] Optional additional attribute handlers for the nested element. * @returns {import('@translator').NodeTranslatorConfig} The nested property handler config with xmlName, sdName, encode, and decode functions. */ -export function createNestedPropertiesTranslator(xmlName, sdName, propertyTranslators, defaultEncodedAttrs = {}) { +export function createNestedPropertiesTranslator( + xmlName, + sdName, + propertyTranslators, + defaultEncodedAttrs = {}, + attributeHandlers = [], +) { const propertyTranslatorsByXmlName = {}; const propertyTranslatorsBySdName = {}; propertyTranslators.forEach((translator) => { @@ -310,20 +317,22 @@ export function createNestedPropertiesTranslator(xmlName, sdName, propertyTransl xmlName: xmlName, sdNodeOrKeyName: sdName, type: NodeTranslator.translatorTypes.NODE, - attributes: [], - encode: (params) => { + attributes: attributeHandlers, + encode: (params, encodedAttrs) => { const { nodes } = params; const node = nodes[0]; // Process property translators const attributes = { ...defaultEncodedAttrs, + ...encodedAttrs, ...encodeProperties({ ...params, nodes: [node] }, propertyTranslatorsByXmlName), }; return Object.keys(attributes).length > 0 ? attributes : undefined; }, - decode: (params) => { + decode: function (params) { + const decodedAttrs = this.decodeAttributes({ node: { ...params.node, attrs: params.node.attrs[sdName] || {} } }); const currentValue = params.node.attrs?.[sdName]; // Process property translators @@ -336,7 +345,7 @@ export function createNestedPropertiesTranslator(xmlName, sdName, propertyTransl const newNode = { name: xmlName, type: 'element', - attributes: {}, + attributes: decodedAttrs, elements: elements, }; From 1dd1f34ffd3faadcddc020d7bad263c1994e9be1 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 15:25:40 -0300 Subject: [PATCH 22/85] feat: add v3 translator for w:tblStylePr --- .../w/tblStylePr/tblStylePr-translator.js | 21 +- .../tblStylePr/tblStylePr-translator.test.js | 203 +++++++----------- 2 files changed, 94 insertions(+), 130 deletions(-) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStylePr/tblStylePr-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStylePr/tblStylePr-translator.js index 97d6543d9..a5b19291a 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStylePr/tblStylePr-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStylePr/tblStylePr-translator.js @@ -1,15 +1,24 @@ +// @ts-check import { NodeTranslator } from '@translator'; -import { translator as tblPrTranslator } from '@converter/v3/handlers/w/tblPr'; -import { translator as tcPrTranslator } from '@converter/v3/handlers/w/tcPr'; -import { createNestedPropertiesTranslator } from '@converter/v3/handlers/utils.js'; +import { createNestedPropertiesTranslator, createAttributeHandler } from '@converter/v3/handlers/utils.js'; -/** @type {import('@translator').NodeTranslatorConfig[]} */ -const propertyTranslators = [tblPrTranslator, tcPrTranslator]; +import { translator as wPPrTranslator } from '../../w/pPr'; +import { translator as wRPrTranslator } from '../../w/rpr'; +import { translator as wTblPrTranslator } from '../../w/tblPr'; +import { translator as wTrPrTranslator } from '../../w/trPr'; +import { translator as wTcPrTranslator } from '../../w/tcPr'; + +// Property translators for w:tblStylePr child elements +// Each translator handles a specific property +/** @type {import('@translator').NodeTranslator[]} */ +const propertyTranslators = [wPPrTranslator, wRPrTranslator, wTblPrTranslator, wTrPrTranslator, wTcPrTranslator]; + +const attributeHandlers = [createAttributeHandler('w:type')]; /** * The NodeTranslator instance for the w:tblStylePr element. * @type {import('@translator').NodeTranslator} */ export const translator = NodeTranslator.from( - createNestedPropertiesTranslator('w:tblStylePr', 'tableStyleProperties', propertyTranslators), + createNestedPropertiesTranslator('w:tblStylePr', 'tableStyleProperties', propertyTranslators, {}, attributeHandlers), ); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStylePr/tblStylePr-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStylePr/tblStylePr-translator.test.js index 4022be0f3..b1947cc5c 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStylePr/tblStylePr-translator.test.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStylePr/tblStylePr-translator.test.js @@ -1,172 +1,127 @@ import { describe, it, expect } from 'vitest'; -import { NodeTranslator } from '@translator'; import { translator } from './tblStylePr-translator.js'; +import { NodeTranslator } from '@translator'; describe('w:tblStylePr translator', () => { describe('config', () => { - it('exports a NodeTranslator instance', () => { - expect(translator).toBeDefined(); - expect(translator).toBeInstanceOf(NodeTranslator); + it('should have correct properties', () => { expect(translator.xmlName).toBe('w:tblStylePr'); expect(translator.sdNodeOrKeyName).toBe('tableStyleProperties'); + expect(translator).toBeInstanceOf(NodeTranslator); }); }); describe('encode', () => { - it('encodes nested and correctly', () => { - const params = { - nodes: [ + it('should encode nested table style properties correctly', () => { + const xmlNode = { + name: 'w:tblStylePr', + attributes: { 'w:type': 'wholeTable' }, + elements: [ + { + name: 'w:pPr', + elements: [{ name: 'w:keepNext' }, { name: 'w:pStyle', attributes: { 'w:val': 'Heading1' } }], + }, + { name: 'w:rPr', elements: [{ name: 'w:b' }] }, + { name: 'w:tblPr', elements: [{ name: 'w:tblStyle', attributes: { 'w:val': 'TableGrid' } }] }, { - name: 'w:tblStylePr', + name: 'w:trPr', elements: [ - { - name: 'w:tblPr', - elements: [ - { name: 'w:tblStyle', attributes: { 'w:val': 'TableGrid' } }, - { name: 'w:tblW', attributes: { 'w:w': '5000', 'w:type': 'pct' } }, - { name: 'w:jc', attributes: { 'w:val': 'center' } }, - ], - }, - { - name: 'w:tcPr', - elements: [ - { name: 'w:tcW', attributes: { 'w:w': '2000', 'w:type': 'dxa' } }, - { name: 'w:gridSpan', attributes: { 'w:val': '2' } }, - { name: 'w:noWrap' }, - ], - }, + { name: 'w:tblHeader' }, + { name: 'w:trHeight', attributes: { 'w:val': '240', 'w:hRule': 'atLeast' } }, ], }, + { name: 'w:tcPr', elements: [{ name: 'w:vAlign', attributes: { 'w:val': 'center' } }] }, ], }; - const result = translator.encode(params); + const result = translator.encode({ nodes: [xmlNode] }); expect(result).toEqual({ - tableProperties: { - tableStyleId: 'TableGrid', - tableWidth: { value: 5000, type: 'pct' }, - justification: 'center', - }, - tableCellProperties: { - cellWidth: { value: 2000, type: 'dxa' }, - gridSpan: 2, - noWrap: true, + paragraphProperties: { keepNext: true, styleId: 'Heading1' }, + runProperties: { bold: true }, + tableProperties: { tableStyleId: 'TableGrid' }, + tableRowProperties: { + cantSplit: false, + hidden: false, + repeatHeader: true, + rowHeight: { value: 240, rule: 'atLeast' }, }, + tableCellProperties: { vAlign: 'center' }, + type: 'wholeTable', }); }); - it('returns undefined when no nested properties are encoded', () => { - const params = { - nodes: [ - { - name: 'w:tblStylePr', - elements: [ - { name: 'w:tblPr', elements: [{ name: 'w:tblW', attributes: {} }] }, - { name: 'w:tcPr', elements: [{ name: 'w:tcW', attributes: {} }] }, - ], - }, - ], - }; - - expect(translator.encode(params)).toBeUndefined(); - }); - - it('encodes when at least one nested property group is present', () => { - const params = { - nodes: [ - { - name: 'w:tblStylePr', - elements: [ - { - name: 'w:tblPr', - elements: [{ name: 'w:tblStyle', attributes: { 'w:val': 'TableGrid' } }], - }, - ], - }, - ], - }; - - expect(translator.encode(params)).toEqual({ - tableProperties: { tableStyleId: 'TableGrid' }, - }); + it('should return undefined if no child properties are present', () => { + const xmlNode = { name: 'w:tblStylePr', elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toBeUndefined(); }); }); describe('decode', () => { - it('decodes a complex tableStyleProperties object correctly', () => { - const tableStyleProperties = { - tableProperties: { - tableStyleId: 'TableGrid', - tableWidth: { value: 5000, type: 'pct' }, - justification: 'center', - }, - tableCellProperties: { - cellWidth: { value: 2000, type: 'dxa' }, - gridSpan: 2, - noWrap: true, + it('should decode a tableStyleProperties object correctly', () => { + const superDocNode = { + attrs: { + tableStyleProperties: { + type: 'wholeTable', + paragraphProperties: { keepNext: true, styleId: 'Heading1' }, + runProperties: { bold: true }, + tableProperties: { tableStyleId: 'TableGrid' }, + tableRowProperties: { repeatHeader: true, rowHeight: { value: 240, rule: 'atLeast' } }, + tableCellProperties: { vAlign: 'center' }, + }, }, }; - const result = translator.decode({ node: { attrs: { tableStyleProperties } } }); + const result = translator.decode({ node: superDocNode }); - expect(result).toEqual({ - name: 'w:tblStylePr', - type: 'element', - attributes: {}, - elements: expect.arrayContaining([ + expect(result.name).toBe('w:tblStylePr'); + expect(result.attributes).toEqual({ 'w:type': 'wholeTable' }); + expect(result.elements).toEqual( + expect.arrayContaining([ + { + name: 'w:pPr', + type: 'element', + attributes: {}, + elements: [ + { name: 'w:keepNext', attributes: {} }, + { name: 'w:pStyle', attributes: { 'w:val': 'Heading1' } }, + ], + }, + { + name: 'w:rPr', + type: 'element', + attributes: {}, + elements: [{ name: 'w:b', attributes: {} }], + }, { name: 'w:tblPr', type: 'element', attributes: {}, - elements: expect.arrayContaining([ - { name: 'w:tblStyle', attributes: { 'w:val': 'TableGrid' } }, - { name: 'w:tblW', attributes: { 'w:w': '5000', 'w:type': 'pct' } }, - { name: 'w:jc', attributes: { 'w:val': 'center' } }, - ]), + elements: [{ name: 'w:tblStyle', attributes: { 'w:val': 'TableGrid' } }], + }, + { + name: 'w:trPr', + type: 'element', + attributes: {}, + elements: [ + { name: 'w:tblHeader', attributes: {} }, + { name: 'w:trHeight', attributes: { 'w:val': '240', 'w:hRule': 'atLeast' } }, + ], }, { name: 'w:tcPr', type: 'element', attributes: {}, - elements: expect.arrayContaining([ - { name: 'w:tcW', attributes: { 'w:w': '2000', 'w:type': 'dxa' } }, - { name: 'w:gridSpan', attributes: { 'w:val': '2' } }, - { name: 'w:noWrap', attributes: { 'w:val': '1' } }, - ]), + elements: [{ name: 'w:vAlign', attributes: { 'w:val': 'center' } }], }, ]), - }); - }); - - it('handles missing tableStyleProperties object', () => { - expect(translator.decode({ node: { attrs: {} } })).toBeUndefined(); - }); - - it('handles empty tableStyleProperties object', () => { - expect(translator.decode({ node: { attrs: { tableStyleProperties: {} } } })).toBeUndefined(); + ); }); - }); - - describe('round-trip', () => { - it('maintains consistency for a complex object', () => { - const tableStyleProperties = { - tableProperties: { - tableStyleId: 'TableGrid', - tableWidth: { value: 5000, type: 'pct' }, - justification: 'center', - }, - tableCellProperties: { - cellWidth: { value: 2000, type: 'dxa' }, - gridSpan: 2, - noWrap: true, - }, - }; - - const decodedResult = translator.decode({ node: { attrs: { tableStyleProperties } } }); - const encodedResult = translator.encode({ nodes: [decodedResult] }); - expect(encodedResult).toEqual(tableStyleProperties); + it('should return undefined if no tableStyleProperties are present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); }); }); }); From e6dd83d6ffc555f5d7ce33dc4afbc272f7c1b9b5 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 15:31:16 -0300 Subject: [PATCH 23/85] feat: add v3 translator for w:style --- .../v3/handlers/w/style/index.js | 1 + .../v3/handlers/w/style/style-translator.js | 72 +++++++++++++++++ .../handlers/w/style/style-translator.test.js | 81 +++++++++++++++++++ 3 files changed, 154 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/style/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/index.js new file mode 100644 index 000000000..0afc3517e --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/index.js @@ -0,0 +1 @@ +export * from './style-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js new file mode 100644 index 000000000..ad5df542c --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js @@ -0,0 +1,72 @@ +// @ts-check +import { NodeTranslator } from '@translator'; +import { + createNestedPropertiesTranslator, + createAttributeHandler, + createBooleanAttributeHandler, +} from '@converter/v3/handlers/utils.js'; +import { translator as wNameTranslator } from '../../w/name'; +import { translator as wAliasesTranslator } from '../../w/aliases'; +import { translator as wBasedOnTranslator } from '../../w/basedOn'; +import { translator as wNextTranslator } from '../../w/next'; +import { translator as wLinkTranslator } from '../../w/link'; +import { translator as wAutoRedefineTranslator } from '../../w/autoRedefine'; +import { translator as wHiddenTranslator } from '../../w/hidden'; +import { translator as wSemiHiddenTranslator } from '../../w/semiHidden'; +import { translator as wUnhideWhenUsedTranslator } from '../../w/unhideWhenUsed'; +import { translator as wQFormatTranslator } from '../../w/qFormat'; +import { translator as wLockedTranslator } from '../../w/locked'; +import { translator as wPersonalTranslator } from '../../w/personal'; +import { translator as wPersonalComposeTranslator } from '../../w/personalCompose'; +import { translator as wPersonalReplyTranslator } from '../../w/personalReply'; +import { translator as wUiPriorityTranslator } from '../../w/uiPriority'; +import { translator as wRsidTranslator } from '../../w/rsid'; +import { translator as wPPrTranslator } from '../../w/pPr'; +import { translator as wRPrTranslator } from '../../w/rpr'; +import { translator as wTblPrTranslator } from '../../w/tblPr'; +import { translator as wTrPrTranslator } from '../../w/trPr'; +import { translator as wTcPrTranslator } from '../../w/tcPr'; +import { translator as wTblStylePrTranslator } from '../../w/tblStylePr'; + +// Property translators for w:style child elements +// Each translator handles a specific property +/** @type {import('@translator').NodeTranslator[]} */ +const propertyTranslators = [ + wNameTranslator, + wAliasesTranslator, + wBasedOnTranslator, + wNextTranslator, + wLinkTranslator, + wAutoRedefineTranslator, + wHiddenTranslator, + wSemiHiddenTranslator, + wUnhideWhenUsedTranslator, + wQFormatTranslator, + wLockedTranslator, + wPersonalTranslator, + wPersonalComposeTranslator, + wPersonalReplyTranslator, + wUiPriorityTranslator, + wRsidTranslator, + wPPrTranslator, + wRPrTranslator, + wTblPrTranslator, + wTrPrTranslator, + wTcPrTranslator, + wTblStylePrTranslator, +]; + +const attributeHandlers = [ + createAttributeHandler('w:type'), + createAttributeHandler('w:styleId'), + createBooleanAttributeHandler('w:default'), + createBooleanAttributeHandler('w:customStyle'), +]; + +/** + * The NodeTranslator instance for the w:style element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from( + createNestedPropertiesTranslator('w:style', 'style', propertyTranslators, {}, attributeHandlers), +); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.test.js new file mode 100644 index 000000000..57b1a35fa --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.test.js @@ -0,0 +1,81 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './style-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:style translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:style'); + expect(translator.sdNodeOrKeyName).toBe('style'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode nested style properties correctly', () => { + const xmlNode = { + name: 'w:style', + attributes: { 'w:type': 'paragraph', 'w:styleId': 'CustomStyle' }, + elements: [ + { name: 'w:name', attributes: { 'w:val': 'Custom Style' } }, + { name: 'w:aliases', attributes: { 'w:val': 'Alias1,Alias2' } }, + { name: 'w:uiPriority', attributes: { 'w:val': '1' } }, + { name: 'w:pPr', elements: [{ name: 'w:keepNext' }] }, + { name: 'w:rPr', elements: [{ name: 'w:b' }] }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + type: 'paragraph', + styleId: 'CustomStyle', + name: 'Custom Style', + aliases: 'Alias1,Alias2', + uiPriority: 1, + paragraphProperties: { keepNext: true }, + runProperties: { bold: true }, + }); + }); + + it('should return undefined if no child properties are present', () => { + const xmlNode = { name: 'w:style', elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('should decode a style object correctly', () => { + const superDocNode = { + attrs: { + style: { + name: 'Custom Style', + aliases: 'Alias1,Alias2', + uiPriority: 1, + paragraphProperties: { keepNext: true }, + runProperties: { bold: true }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result.name).toBe('w:style'); + expect(result.elements).toEqual( + expect.arrayContaining([ + { name: 'w:name', attributes: { 'w:val': 'Custom Style' } }, + { name: 'w:aliases', attributes: { 'w:val': 'Alias1,Alias2' } }, + { name: 'w:uiPriority', attributes: { 'w:val': '1' } }, + { name: 'w:pPr', type: 'element', attributes: {}, elements: [{ name: 'w:keepNext', attributes: {} }] }, + { name: 'w:rPr', type: 'element', attributes: {}, elements: [{ name: 'w:b', attributes: {} }] }, + ]), + ); + }); + + it('should return undefined if no style properties are present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); From 24e16343a2f8880ac02f0cf50d5c644bd04e498b Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 16:11:32 -0300 Subject: [PATCH 24/85] feat: add v3 translator for w:docDefaults --- .../core/super-converter/v3/handlers/index.js | 2 + .../w/docDefaults/docDefaults-translator.js | 89 +++++++++++++++++++ .../docDefaults-translator.test.js | 82 +++++++++++++++++ .../v3/handlers/w/docDefaults/index.js | 1 + 4 files changed, 174 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/docDefaults-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/docDefaults-translator.test.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/index.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index b78e5251a..c491340e9 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -34,6 +34,7 @@ import { translator as w_contextualSpacing } from './w/contextualSpacing/context import { translator as w_cs } from './w/cs/cs-translator.js'; import { translator as w_del_translator } from './w/del/del-translator.js'; import { translator as w_divId_translator } from './w/divId/divId-translator.js'; +import { translator as w_docDefaults_translator } from './w/docDefaults/docDefaults-translator.js'; import { translator as w_drawing_translator } from './w/drawing/drawing-translator.js'; import { translator as w_dstrike_translator } from './w/dstrike/dstrike-translator.js'; import { translator as w_eastAsianLayout_translator } from './w/eastAsianLayout/eastAsianLayout-translator.js'; @@ -204,6 +205,7 @@ const translatorList = Array.from( w_cs, w_del_translator, w_divId_translator, + w_docDefaults_translator, w_drawing_translator, w_dstrike_translator, w_eastAsianLayout_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/docDefaults-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/docDefaults-translator.js new file mode 100644 index 000000000..fd33be575 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/docDefaults-translator.js @@ -0,0 +1,89 @@ +import { NodeTranslator } from '@translator'; +import { translator as wPPrTranslator } from '../../w/pPr'; +import { translator as wRPrTranslator } from '../../w/rpr'; + +/** + * The NodeTranslator instance for the w:docDefaults element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:docDefaults', + sdNodeOrKeyName: 'docDefaults', + type: NodeTranslator.translatorTypes.NODE, + attributes: [], + encode: (params) => { + const { nodes } = params; + const node = nodes[0]; + const result = {}; + + [ + { + wrapperName: 'w:rPrDefault', + propertyName: 'runProperties', + translator: wRPrTranslator, + }, + { + wrapperName: 'w:pPrDefault', + propertyName: 'paragraphProperties', + translator: wPPrTranslator, + }, + ].forEach(({ wrapperName, propertyName, translator }) => { + const defaultElement = node.elements?.find((el) => el.name === wrapperName); + const propertyElement = defaultElement?.elements?.find((el) => el.name === wrapperName.replace('Default', '')); + if (propertyElement) { + const props = translator.encode({ ...params, nodes: [propertyElement] }); + if (props) { + result[propertyName] = props; + } + } + }); + + return Object.keys(result).length > 0 ? result : undefined; + }, + decode: function (params) { + const currentValue = params.node.attrs?.['docDefaults']; + if (!currentValue) { + return undefined; + } + + const elements = []; + + [ + { + wrapperName: 'w:rPrDefault', + propertyName: 'runProperties', + translator: wRPrTranslator, + }, + { + wrapperName: 'w:pPrDefault', + propertyName: 'paragraphProperties', + translator: wPPrTranslator, + }, + ].forEach(({ wrapperName, propertyName, translator }) => { + const propertyValue = currentValue[propertyName]; + if (propertyValue) { + const decodedProperty = translator.decode({ ...params, node: { attrs: { [propertyName]: propertyValue } } }); + if (decodedProperty) { + elements.push({ + name: wrapperName, + type: 'element', + elements: [decodedProperty], + }); + } + } + }); + + if (elements.length === 0) { + return undefined; + } + + const newNode = { + name: 'w:docDefaults', + type: 'element', + attributes: {}, + elements: elements, + }; + + return newNode; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/docDefaults-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/docDefaults-translator.test.js new file mode 100644 index 000000000..d28dd2ba5 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/docDefaults-translator.test.js @@ -0,0 +1,82 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './docDefaults-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:docDefaults translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:docDefaults'); + expect(translator.sdNodeOrKeyName).toBe('docDefaults'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode default run and paragraph properties', () => { + const xmlNode = { + name: 'w:docDefaults', + elements: [ + { + name: 'w:rPrDefault', + elements: [{ name: 'w:rPr', elements: [{ name: 'w:b' }] }], + }, + { + name: 'w:pPrDefault', + elements: [{ name: 'w:pPr', elements: [{ name: 'w:keepNext' }] }], + }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + runProperties: { bold: true }, + paragraphProperties: { keepNext: true }, + }); + }); + + it('should return undefined if no default properties are present', () => { + const xmlNode = { name: 'w:docDefaults', elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('should decode docDefaults into wrapped properties', () => { + const superDocNode = { + attrs: { + docDefaults: { + runProperties: { bold: true }, + paragraphProperties: { keepNext: true }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result.name).toBe('w:docDefaults'); + expect(result.elements).toEqual( + expect.arrayContaining([ + { + name: 'w:rPrDefault', + type: 'element', + elements: [{ name: 'w:rPr', type: 'element', attributes: {}, elements: [{ name: 'w:b', attributes: {} }] }], + }, + { + name: 'w:pPrDefault', + type: 'element', + elements: [ + { name: 'w:pPr', type: 'element', attributes: {}, elements: [{ name: 'w:keepNext', attributes: {} }] }, + ], + }, + ]), + ); + }); + + it('should return undefined if no docDefaults are present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/index.js new file mode 100644 index 000000000..4e956dc2c --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/docDefaults/index.js @@ -0,0 +1 @@ +export * from './docDefaults-translator.js'; From c6f86219dc6138d0debe956df2e3983e6385731a Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 19:48:49 -0300 Subject: [PATCH 25/85] feat: add helper functions for encoding and decoding properties as map --- .../core/super-converter/v3/handlers/utils.js | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js index 2653303aa..dc8b907d7 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js @@ -290,6 +290,60 @@ export function decodeProperties(params, translatorsBySdName, properties) { return elements; } +/** + * Helper to encode properties by key (eg: w:style elements by styleId) + * @param {string} xmlName The XML element name (with namespace). + * @param {string} sdName The SuperDoc attribute name (without namespace). + * @param {import('@translator').NodeTranslator} translator The node translator to use for encoding. + * @param {import('@translator').SCEncoderConfig} params The encoding parameters containing the nodes to process. + * @param {object} node The XML node containing the elements to encode. + * @param {string} keyAttr The attribute name to use as the key in the resulting object. + * @returns {object} The encoded properties as an object keyed by the specified attribute. + */ +export function encodePropertiesByKey(xmlName, sdName, translator, params, node, keyAttr) { + const result = {}; + const elements = node.elements?.filter((el) => el.name === xmlName) || []; + if (elements.length > 0) { + const items = elements.map((el) => translator.encode({ ...params, nodes: [el] })).filter(Boolean); + if (items.length > 0) { + result[sdName] = items.reduce((acc, item) => { + if (item[keyAttr]) { + acc[item[keyAttr]] = item; + } + return acc; + }, {}); + } + } + + return result; +} + +/** + * Helper to decode properties by key (eg: w:style elements by styleId) + * @param {string} xmlName The XML element name (with namespace). + * @param {string} sdName The SuperDoc attribute name (without namespace). + * @param {import('@translator').NodeTranslator} translator The node translator to use for decoding. + * @param {import('@translator').SCDecoderConfig} params The decoding parameters containing the node to process. + * @param {object} attrs The attributes object containing the properties to decode. + * @param {string} keyAttr The attribute name to use as the key in the resulting object. + * @returns {Array} An array of decoded elements. + */ +export function decodePropertiesByKey(xmlName, sdName, translator, params, attrs) { + const elements = []; + if (attrs[sdName] != null) { + Object.values(attrs[sdName]).forEach((item) => { + const decoded = translator.decode({ + ...params, + node: { attrs: { [translator.sdNodeOrKeyName]: item } }, + }); + if (decoded) { + elements.push(decoded); + } + }); + } + return elements; +} + /** * Helper to create property handlers for nested properties (eg: w:tcBorders => borders) * @param {string} xmlName The XML element name (with namespace). From 063d59bcac5a9b621801984952578a5fc270bf4e Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Sat, 10 Jan 2026 08:26:21 -0300 Subject: [PATCH 26/85] feat: add v3 translator for w:lsdException --- .../core/super-converter/v3/handlers/index.js | 2 + .../v3/handlers/w/lsdException/index.js | 1 + .../w/lsdException/lsdException-translator.js | 31 +++++++ .../lsdException-translator.test.js | 87 +++++++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/lsdException-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/lsdException-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index c491340e9..de7d7e7a6 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -72,6 +72,7 @@ import { translator as w_locked_translator } from './w/locked/locked-translator. import { translator as w_link_translator } from './w/link/link-translator.js'; import { translator as w_mirrorIndents_translator } from './w/mirrorIndents/mirrorIndents-translator.js'; import { translator as w_left_translator } from './w/left/left-translator.js'; +import { translator as w_lsdException_translator } from './w/lsdException/lsdException-translator.js'; import { translator as w_name_translator } from './w/name/name-translator.js'; import { translator as w_next_translator } from './w/next/next-translator.js'; import { translator as w_noProof_translator } from './w/noProof/noProof-translator.js'; @@ -241,6 +242,7 @@ const translatorList = Array.from( w_kinsoku_translator, w_lang_translator, w_left_translator, + w_lsdException_translator, w_link_translator, w_locked_translator, w_mirrorIndents_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/index.js new file mode 100644 index 000000000..895f9af81 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/index.js @@ -0,0 +1 @@ +export * from './lsdException-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/lsdException-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/lsdException-translator.js new file mode 100644 index 000000000..e86b531a6 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/lsdException-translator.js @@ -0,0 +1,31 @@ +import { NodeTranslator } from '@translator'; +import { + createAttributeHandler, + createIntegerAttributeHandler, + createBooleanAttributeHandler, +} from '@converter/v3/handlers/utils.js'; + +/** + * The NodeTranslator instance for the w:lsdException element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:lsdException', + sdNodeOrKeyName: 'lsdException', + type: NodeTranslator.translatorTypes.NODE, + attributes: [ + createAttributeHandler('w:name'), + createBooleanAttributeHandler('w:locked'), + createBooleanAttributeHandler('w:qFormat'), + createBooleanAttributeHandler('w:semiHidden'), + createBooleanAttributeHandler('w:unhideWhenUsed'), + createIntegerAttributeHandler('w:uiPriority'), + ], + encode: (_, encodedAttrs) => { + return encodedAttrs; + }, + decode: function ({ node }) { + const decodedAttrs = this.decodeAttributes({ node: { ...node, attrs: node.attrs['lsdException'] || {} } }); + return Object.keys(decodedAttrs).length > 0 ? { name: 'w:lsdException', attributes: decodedAttrs } : undefined; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/lsdException-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/lsdException-translator.test.js new file mode 100644 index 000000000..929cbd73d --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lsdException/lsdException-translator.test.js @@ -0,0 +1,87 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './lsdException-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:lsdException translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:lsdException'); + expect(translator.sdNodeOrKeyName).toBe('lsdException'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode lsdException attributes correctly', () => { + const xmlNode = { + name: 'w:lsdException', + attributes: { + 'w:name': 'NoList', + 'w:locked': '1', + 'w:qFormat': '1', + 'w:semiHidden': '0', + 'w:unhideWhenUsed': '1', + 'w:uiPriority': '99', + }, + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + name: 'NoList', + locked: true, + qFormat: true, + semiHidden: false, + unhideWhenUsed: true, + uiPriority: 99, + }); + }); + + it('should return an empty object when no attributes are present', () => { + const xmlNode = { name: 'w:lsdException', attributes: {} }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toEqual({}); + }); + }); + + describe('decode', () => { + it('should decode a lsdException object correctly', () => { + const superDocNode = { + attrs: { + lsdException: { + name: 'NoList', + locked: true, + qFormat: true, + semiHidden: false, + unhideWhenUsed: true, + uiPriority: 99, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result).toEqual({ + name: 'w:lsdException', + attributes: { + 'w:name': 'NoList', + 'w:locked': '1', + 'w:qFormat': '1', + 'w:semiHidden': '0', + 'w:unhideWhenUsed': '1', + 'w:uiPriority': '99', + }, + }); + }); + + it('should return undefined if no lsdException is present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + + it('should return undefined if lsdException is empty', () => { + const result = translator.decode({ node: { attrs: { lsdException: {} } } }); + expect(result).toBeUndefined(); + }); + }); +}); From 32d9debba1a84ec7d0208375abcf33debd9ca58d Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Sat, 10 Jan 2026 09:14:35 -0300 Subject: [PATCH 27/85] feat: add v3 translator for w:latentStyles --- .../core/super-converter/v3/handlers/index.js | 2 + .../v3/handlers/w/latentStyles/index.js | 1 + .../w/latentStyles/latentStyles-translator.js | 65 ++++++++++ .../latentStyles-translator.test.js | 118 ++++++++++++++++++ 4 files changed, 186 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index de7d7e7a6..6722e4d11 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -68,6 +68,7 @@ import { translator as w_keepNext_translator } from './w/keepNext/keepNext-trans import { translator as w_kern_translator } from './w/kern/kern-translator.js'; import { translator as w_kinsoku_translator } from './w/kinsoku/kinsoku-translator.js'; import { translator as w_lang_translator } from './w/lang/lang-translator.js'; +import { translator as w_latentStyles_translator } from './w/latentStyles/latentStyles-translator.js'; import { translator as w_locked_translator } from './w/locked/locked-translator.js'; import { translator as w_link_translator } from './w/link/link-translator.js'; import { translator as w_mirrorIndents_translator } from './w/mirrorIndents/mirrorIndents-translator.js'; @@ -241,6 +242,7 @@ const translatorList = Array.from( w_kern_translator, w_kinsoku_translator, w_lang_translator, + w_latentStyles_translator, w_left_translator, w_lsdException_translator, w_link_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/index.js new file mode 100644 index 000000000..b4dda4411 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/index.js @@ -0,0 +1 @@ +export * from './latentStyles-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.js new file mode 100644 index 000000000..cfd72cff3 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.js @@ -0,0 +1,65 @@ +// @ts-check +import { NodeTranslator } from '@translator'; +import { + encodePropertiesByKey, + decodePropertiesByKey, + createBooleanAttributeHandler, +} from '@converter/v3/handlers/utils.js'; +import { translator as wLsdExceptionTranslator } from '../lsdException'; + +/** + * The NodeTranslator instance for the w:latentStyles element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:latentStyles', + sdNodeOrKeyName: 'latentStyles', + type: NodeTranslator.translatorTypes.NODE, + attributes: [ + createBooleanAttributeHandler('w:defLockedState'), + createBooleanAttributeHandler('w:defUIPriority'), + createBooleanAttributeHandler('w:defSemiHidden'), + createBooleanAttributeHandler('w:defUnhideWhenUsed'), + createBooleanAttributeHandler('w:defQFormat'), + ], + encode: (params, encodedAttrs) => { + const { nodes } = params; + const node = nodes[0]; + + const lsdExceptions = encodePropertiesByKey( + 'w:lsdException', + 'lsdExceptions', + wLsdExceptionTranslator, + params, + node, + 'name', + ); + + return { ...lsdExceptions, ...encodedAttrs }; + }, + decode: function (params) { + // @ts-expect-error The decode function is bound to the NodeTranslator instance. + const decodedAttrs = this.decodeAttributes({ + node: { ...params.node, attrs: params.node.attrs.latentStyles || {} }, + }); + const currentValue = params.node.attrs?.latentStyles; + if (!currentValue) { + return undefined; + } + const elements = decodePropertiesByKey( + 'w:lsdException', + 'lsdExceptions', + wLsdExceptionTranslator, + params, + currentValue, + ); + + const newNode = { + name: 'w:latentStyles', + attributes: decodedAttrs, + elements: elements, + }; + + return newNode; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.test.js new file mode 100644 index 000000000..c8b2b43ea --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.test.js @@ -0,0 +1,118 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './latentStyles-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:latentStyles translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:latentStyles'); + expect(translator.sdNodeOrKeyName).toBe('latentStyles'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode latentStyles attributes and exceptions', () => { + const xmlNode = { + name: 'w:latentStyles', + attributes: { + 'w:defLockedState': '1', + 'w:defUIPriority': '1', + 'w:defSemiHidden': '0', + 'w:defUnhideWhenUsed': '1', + 'w:defQFormat': '1', + }, + elements: [ + { + name: 'w:lsdException', + attributes: { + 'w:name': 'NoList', + 'w:locked': '1', + 'w:qFormat': '1', + 'w:semiHidden': '0', + 'w:unhideWhenUsed': '1', + 'w:uiPriority': '99', + }, + }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + lsdExceptions: { + NoList: { + name: 'NoList', + locked: true, + qFormat: true, + semiHidden: false, + unhideWhenUsed: true, + uiPriority: 99, + }, + }, + defLockedState: true, + defUIPriority: true, + defSemiHidden: false, + defUnhideWhenUsed: true, + defQFormat: true, + }); + }); + }); + + describe('decode', () => { + it.only('should decode latentStyles into OOXML elements', () => { + const superDocNode = { + attrs: { + latentStyles: { + defLockedState: true, + defUIPriority: true, + defSemiHidden: false, + defUnhideWhenUsed: true, + defQFormat: true, + lsdExceptions: { + NoList: { + name: 'NoList', + locked: true, + qFormat: true, + semiHidden: false, + unhideWhenUsed: true, + uiPriority: 99, + }, + }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result).toEqual({ + name: 'w:latentStyles', + attributes: { + 'w:defLockedState': '1', + 'w:defUIPriority': '1', + 'w:defSemiHidden': '0', + 'w:defUnhideWhenUsed': '1', + 'w:defQFormat': '1', + }, + elements: [ + { + name: 'w:lsdException', + attributes: { + 'w:name': 'NoList', + 'w:locked': '1', + 'w:qFormat': '1', + 'w:semiHidden': '0', + 'w:unhideWhenUsed': '1', + 'w:uiPriority': '99', + }, + }, + ], + }); + }); + + it('should return undefined if no latentStyles are present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); From 761fed906fe706a6b20b5d2d53b2127bb11cdd1c Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 16:33:01 -0300 Subject: [PATCH 28/85] feat: add v3 translator for w:styles --- .../core/super-converter/v3/handlers/index.js | 4 + .../v3/handlers/w/styles/index.js | 1 + .../v3/handlers/w/styles/styles-translator.js | 60 +++++ .../w/styles/styles-translator.test.js | 231 ++++++++++++++++++ 4 files changed, 296 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/styles/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/styles/styles-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/styles/styles-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 6722e4d11..d61d5d565 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -110,6 +110,8 @@ import { translator as w_smallCaps_translator } from './w/smallCaps/smallCaps-tr import { translator as w_snapToGrid_translator } from './w/snapToGrid/snapToGrid-translator.js'; import { translator as w_start_translator } from './w/start/start-translator.js'; import { translator as w_strike_translator } from './w/strike/strike-translator.js'; +import { translator as w_style_translator } from './w/style/style-translator.js'; +import { translator as w_styles_translator } from './w/styles/styles-translator.js'; import { translator as w_spacing_translator } from './w/spacing/spacing-translator.js'; import { translator as w_suppressAutoHyphens_translator } from './w/suppressAutoHyphens/suppressAutoHyphens-translator.js'; import { translator as w_suppressLineNumbers_translator } from './w/suppressLineNumbers/suppressLineNumbers-translator.js'; @@ -289,6 +291,8 @@ const translatorList = Array.from( w_specVanish_translator, w_start_translator, w_strike_translator, + w_style_translator, + w_styles_translator, w_sz_translator, w_szCs_translator, w_t_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/index.js new file mode 100644 index 000000000..dfbcd6d82 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/index.js @@ -0,0 +1 @@ +export * from './styles-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/styles-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/styles-translator.js new file mode 100644 index 000000000..604c9d0c6 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/styles-translator.js @@ -0,0 +1,60 @@ +import { NodeTranslator } from '@translator'; +import { translator as wDocDefaultsTranslator } from '../../w/docDefaults'; +import { translator as wLatentStylesTranslator } from '../../w/latentStyles'; +import { translator as wStyleTranslator } from '../../w/style'; +import { + encodeProperties, + decodeProperties, + encodePropertiesByKey, + decodePropertiesByKey, +} from '@converter/v3/handlers/utils.js'; + +/** + * The NodeTranslator instance for the w:styles element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:styles', + sdNodeOrKeyName: 'styles', + type: NodeTranslator.translatorTypes.NODE, + attributes: [], + encode: (params) => { + const { nodes } = params; + const node = nodes[0]; + + const props = encodeProperties(params, { + 'w:docDefaults': wDocDefaultsTranslator, + 'w:latentStyles': wLatentStylesTranslator, + }); + const result = { + ...props, + ...encodePropertiesByKey('w:style', 'styles', wStyleTranslator, params, node, 'styleId'), + }; + + return result; + }, + decode: function (params) { + const currentValue = params.node.attrs?.['styles']; + if (!currentValue) { + return undefined; + } + + const props = decodeProperties( + params, + { + docDefaults: wDocDefaultsTranslator, + latentStyles: wLatentStylesTranslator, + }, + currentValue, + ); + const elements = [...props, ...decodePropertiesByKey('w:style', 'styles', wStyleTranslator, params, currentValue)]; + const newNode = { + name: 'w:styles', + type: 'element', + attributes: {}, + elements: elements, + }; + + return newNode; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/styles-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/styles-translator.test.js new file mode 100644 index 000000000..9284357d2 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/styles/styles-translator.test.js @@ -0,0 +1,231 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './styles-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:styles translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:styles'); + expect(translator.sdNodeOrKeyName).toBe('styles'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode docDefaults, latentStyles, and styles correctly', () => { + const xmlNode = { + name: 'w:styles', + elements: [ + { + name: 'w:latentStyles', + attributes: { + 'w:defLockedState': '1', + 'w:defUIPriority': '1', + 'w:defSemiHidden': '0', + 'w:defUnhideWhenUsed': '1', + 'w:defQFormat': '1', + }, + elements: [ + { + name: 'w:lsdException', + attributes: { + 'w:name': 'NoList', + 'w:locked': '1', + 'w:qFormat': '1', + 'w:semiHidden': '0', + 'w:unhideWhenUsed': '1', + 'w:uiPriority': '99', + }, + }, + ], + }, + { + name: 'w:docDefaults', + elements: [ + { + name: 'w:rPrDefault', + elements: [{ name: 'w:rPr', elements: [{ name: 'w:b' }] }], + }, + { + name: 'w:pPrDefault', + elements: [{ name: 'w:pPr', elements: [{ name: 'w:keepNext' }] }], + }, + ], + }, + { + name: 'w:style', + attributes: { 'w:type': 'paragraph', 'w:styleId': 'Heading1' }, + elements: [{ name: 'w:name', attributes: { 'w:val': 'Heading 1' } }], + }, + { + name: 'w:style', + attributes: { 'w:type': 'character', 'w:styleId': 'Emphasis' }, + elements: [{ name: 'w:rPr', elements: [{ name: 'w:b' }] }], + }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + docDefaults: { + runProperties: { bold: true }, + paragraphProperties: { keepNext: true }, + }, + latentStyles: { + lsdExceptions: { + NoList: { + name: 'NoList', + locked: true, + qFormat: true, + semiHidden: false, + unhideWhenUsed: true, + uiPriority: 99, + }, + }, + defLockedState: true, + defUIPriority: true, + defSemiHidden: false, + defUnhideWhenUsed: true, + defQFormat: true, + }, + styles: { + Heading1: { + type: 'paragraph', + styleId: 'Heading1', + name: 'Heading 1', + }, + Emphasis: { + type: 'character', + styleId: 'Emphasis', + runProperties: { bold: true }, + }, + }, + }); + }); + + it('should return an empty object when no elements are present', () => { + const xmlNode = { name: 'w:styles', elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toEqual({}); + }); + }); + + describe('decode', () => { + it('should decode styles into w:styles elements', () => { + const superDocNode = { + attrs: { + styles: { + docDefaults: { + runProperties: { bold: true }, + paragraphProperties: { keepNext: true }, + }, + latentStyles: { + lsdExceptions: { + NoList: { + name: 'NoList', + locked: true, + qFormat: true, + semiHidden: false, + unhideWhenUsed: true, + uiPriority: 99, + }, + }, + defLockedState: true, + defUIPriority: true, + defSemiHidden: false, + defUnhideWhenUsed: true, + defQFormat: true, + }, + styles: { + Heading1: { + type: 'paragraph', + styleId: 'Heading1', + name: 'Heading 1', + }, + Emphasis: { + type: 'character', + styleId: 'Emphasis', + runProperties: { bold: true }, + }, + }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result.name).toBe('w:styles'); + expect(result.elements).toEqual( + expect.arrayContaining([ + { + name: 'w:docDefaults', + type: 'element', + attributes: {}, + elements: expect.arrayContaining([ + { + name: 'w:rPrDefault', + type: 'element', + elements: [ + { name: 'w:rPr', type: 'element', attributes: {}, elements: [{ name: 'w:b', attributes: {} }] }, + ], + }, + { + name: 'w:pPrDefault', + type: 'element', + elements: [ + { + name: 'w:pPr', + type: 'element', + attributes: {}, + elements: [{ name: 'w:keepNext', attributes: {} }], + }, + ], + }, + ]), + }, + { + name: 'w:latentStyles', + attributes: { + 'w:defLockedState': '1', + 'w:defUIPriority': '1', + 'w:defSemiHidden': '0', + 'w:defUnhideWhenUsed': '1', + 'w:defQFormat': '1', + }, + elements: [ + { + name: 'w:lsdException', + attributes: { + 'w:name': 'NoList', + 'w:locked': '1', + 'w:qFormat': '1', + 'w:semiHidden': '0', + 'w:unhideWhenUsed': '1', + 'w:uiPriority': '99', + }, + }, + ], + }, + { + name: 'w:style', + type: 'element', + attributes: { 'w:type': 'paragraph', 'w:styleId': 'Heading1' }, + elements: [{ name: 'w:name', attributes: { 'w:val': 'Heading 1' } }], + }, + { + name: 'w:style', + type: 'element', + attributes: { 'w:type': 'character', 'w:styleId': 'Emphasis' }, + elements: [{ name: 'w:rPr', type: 'element', attributes: {}, elements: [{ name: 'w:b', attributes: {} }] }], + }, + ]), + ); + }); + + it('should return undefined if no styles are present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); From e5dd8085777ce750e7165a9251e5cc14b6f41044 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 16:52:25 -0300 Subject: [PATCH 29/85] feat: add v3 translator for w:start (child of w:lvl) --- .../core/super-converter/v3/handlers/index.js | 2 ++ .../v3/handlers/w/start/index.js | 1 + .../handlers/w/start/lvlStart-translator.js | 9 +++++ .../w/start/lvlStart-translator.test.js | 33 +++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/start/lvlStart-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/start/lvlStart-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index d61d5d565..03e6a3cfb 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -71,6 +71,7 @@ import { translator as w_lang_translator } from './w/lang/lang-translator.js'; import { translator as w_latentStyles_translator } from './w/latentStyles/latentStyles-translator.js'; import { translator as w_locked_translator } from './w/locked/locked-translator.js'; import { translator as w_link_translator } from './w/link/link-translator.js'; +import { translator as w_lvlStart_translator } from './w/start/lvlStart-translator.js'; import { translator as w_mirrorIndents_translator } from './w/mirrorIndents/mirrorIndents-translator.js'; import { translator as w_left_translator } from './w/left/left-translator.js'; import { translator as w_lsdException_translator } from './w/lsdException/lsdException-translator.js'; @@ -248,6 +249,7 @@ const translatorList = Array.from( w_left_translator, w_lsdException_translator, w_link_translator, + w_lvlStart_translator, w_locked_translator, w_mirrorIndents_translator, w_name_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/start/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/start/index.js index 9105071d0..e36875c48 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/start/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/start/index.js @@ -1,2 +1,3 @@ export * from './start-translator.js'; export { translator as marginStartTranslator } from './marginStart-translator.js'; +export { translator as lvlStartTranslator } from './lvlStart-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/start/lvlStart-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/start/lvlStart-translator.js new file mode 100644 index 000000000..c353a68ab --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/start/lvlStart-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the start element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 727 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:start')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/start/lvlStart-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/start/lvlStart-translator.test.js new file mode 100644 index 000000000..3caadbc45 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/start/lvlStart-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './lvlStart-translator.js'; + +describe('w:start translator (lvlStart)', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '3' } }] }); + expect(result).toBe(3); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:start element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { start: 3 } } }); + expect(result).toEqual({ 'w:val': '3' }); + }); + + it('returns undefined if start property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:start'); + expect(translator.sdNodeOrKeyName).toBe('start'); + }); +}); From b352346d1a635ddb3c6af26d131212d718cf136f Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 16:57:06 -0300 Subject: [PATCH 30/85] feat: add v3 translator for w:lvlRestart --- .../v3/handlers/w/lvlRestart/index.js | 1 + .../w/lvlRestart/lvlRestart-translator.js | 9 +++++ .../lvlRestart/lvlRestart-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/lvlRestart-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/lvlRestart-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/index.js new file mode 100644 index 000000000..02546bf0a --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/index.js @@ -0,0 +1 @@ +export * from './lvlRestart-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/lvlRestart-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/lvlRestart-translator.js new file mode 100644 index 000000000..8753bbf99 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/lvlRestart-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:lvlRestart element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 708 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:lvlRestart')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/lvlRestart-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/lvlRestart-translator.test.js new file mode 100644 index 000000000..2c423bb16 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlRestart/lvlRestart-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './lvlRestart-translator.js'; + +describe('w:lvlRestart translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] }); + expect(result).toBe(1); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:lvlRestart element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { lvlRestart: 1 } } }); + expect(result).toEqual({ 'w:val': '1' }); + }); + + it('returns undefined if lvlRestart property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:lvlRestart'); + expect(translator.sdNodeOrKeyName).toBe('lvlRestart'); + }); +}); From bd0fdf232b887fb0e8571863c7be0c657d2d211d Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 16:57:24 -0300 Subject: [PATCH 31/85] feat: add v3 translator for w:lvlPicBulletId --- .../core/super-converter/v3/handlers/index.js | 4 +++ .../v3/handlers/w/lvlPicBulletId/index.js | 1 + .../lvlPicBulletId-translator.js | 9 +++++ .../lvlPicBulletId-translator.test.js | 33 +++++++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/lvlPicBulletId-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/lvlPicBulletId-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 03e6a3cfb..398552adf 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -71,6 +71,8 @@ import { translator as w_lang_translator } from './w/lang/lang-translator.js'; import { translator as w_latentStyles_translator } from './w/latentStyles/latentStyles-translator.js'; import { translator as w_locked_translator } from './w/locked/locked-translator.js'; import { translator as w_link_translator } from './w/link/link-translator.js'; +import { translator as w_lvlPicBulletId_translator } from './w/lvlPicBulletId/lvlPicBulletId-translator.js'; +import { translator as w_lvlRestart_translator } from './w/lvlRestart/lvlRestart-translator.js'; import { translator as w_lvlStart_translator } from './w/start/lvlStart-translator.js'; import { translator as w_mirrorIndents_translator } from './w/mirrorIndents/mirrorIndents-translator.js'; import { translator as w_left_translator } from './w/left/left-translator.js'; @@ -249,6 +251,8 @@ const translatorList = Array.from( w_left_translator, w_lsdException_translator, w_link_translator, + w_lvlPicBulletId_translator, + w_lvlRestart_translator, w_lvlStart_translator, w_locked_translator, w_mirrorIndents_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/index.js new file mode 100644 index 000000000..c394ab108 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/index.js @@ -0,0 +1 @@ +export * from './lvlPicBulletId-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/lvlPicBulletId-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/lvlPicBulletId-translator.js new file mode 100644 index 000000000..ce9144ff1 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/lvlPicBulletId-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:lvlPicBulletId element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 707 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:lvlPicBulletId')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/lvlPicBulletId-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/lvlPicBulletId-translator.test.js new file mode 100644 index 000000000..0e1ac5ded --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlPicBulletId/lvlPicBulletId-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './lvlPicBulletId-translator.js'; + +describe('w:lvlPicBulletId translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] }); + expect(result).toBe(1); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:lvlPicBulletId element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { lvlPicBulletId: 1 } } }); + expect(result).toEqual({ 'w:val': '1' }); + }); + + it('returns undefined if lvlPicBulletId property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:lvlPicBulletId'); + expect(translator.sdNodeOrKeyName).toBe('lvlPicBulletId'); + }); +}); From 53d6aaecaaed6f18076dbe700466d955eb4d3301 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:00:24 -0300 Subject: [PATCH 32/85] feat: add v3 translator for w:isLgl --- .../core/super-converter/v3/handlers/index.js | 2 ++ .../v3/handlers/w/isLgl/index.js | 1 + .../v3/handlers/w/isLgl/isLgl-translator.js | 9 ++++++ .../handlers/w/isLgl/isLgl-translator.test.js | 32 +++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/isLgl-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/isLgl-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 398552adf..7823fd6c8 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -62,6 +62,7 @@ import { translator as w_ind_translator } from './w/ind/ind-translator.js'; import { translator as w_ins_translator } from './w/ins/ins-translator.js'; import { translator as w_insideH_translator } from './w/insideH/insideH-translator.js'; import { translator as w_insideV_translator } from './w/insideV/insideV-translator.js'; +import { translator as w_isLgl_translator } from './w/isLgl/isLgl-translator.js'; import { translator as w_jc_translator } from './w/jc/jc-translator.js'; import { translator as w_keepLines_translator } from './w/keepLines/keepLines-translator.js'; import { translator as w_keepNext_translator } from './w/keepNext/keepNext-translator.js'; @@ -241,6 +242,7 @@ const translatorList = Array.from( w_ins_translator, w_insideH_translator, w_insideV_translator, + w_isLgl_translator, w_jc_translator, w_keepLines_translator, w_keepNext_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/index.js new file mode 100644 index 000000000..ead93fe62 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/index.js @@ -0,0 +1 @@ +export * from './isLgl-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/isLgl-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/isLgl-translator.js new file mode 100644 index 000000000..c37d0be09 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/isLgl-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleBooleanPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:isLgl element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 697 + */ +export const translator = NodeTranslator.from(createSingleBooleanPropertyHandler('w:isLgl')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/isLgl-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/isLgl-translator.test.js new file mode 100644 index 000000000..8bfd41ddd --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/isLgl/isLgl-translator.test.js @@ -0,0 +1,32 @@ +import { describe, it, expect } from 'vitest'; + +import { translator } from './isLgl-translator.js'; +import { NodeTranslator } from '../../../node-translator/node-translator.js'; + +describe('w:isLgl translator (attribute)', () => { + it('exposes correct translator meta', () => { + expect(translator.xmlName).toBe('w:isLgl'); + expect(translator.sdNodeOrKeyName).toBe('isLgl'); + expect(typeof translator.encode).toBe('function'); + }); + + it('builds NodeTranslator instance', () => { + expect(translator).toBeInstanceOf(NodeTranslator); + expect(translator.xmlName).toBe('w:isLgl'); + expect(translator.sdNodeOrKeyName).toBe('isLgl'); + }); + + describe('encode', () => { + it('encodes with provided w:val as-is', () => { + const params = { nodes: [{ attributes: { 'w:val': '1' } }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + + it('passes through raw attributes when missing encoded boolean', () => { + const params = { nodes: [{ attributes: {} }] }; + const out = translator.encode(params); + expect(out).toBe(true); + }); + }); +}); From eeeee2465ede2d44ea99cb295927134b6ecb6adb Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:07:26 -0300 Subject: [PATCH 33/85] feat: add v3 translator for w:lvlJc --- .../v3/handlers/w/lvlJc/index.js | 1 + .../v3/handlers/w/lvlJc/lvlJc-translator.js | 9 +++++ .../handlers/w/lvlJc/lvlJc-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/lvlJc-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/lvlJc-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/index.js new file mode 100644 index 000000000..5d579da04 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/index.js @@ -0,0 +1 @@ +export * from './lvlJc-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/lvlJc-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/lvlJc-translator.js new file mode 100644 index 000000000..67fabc8e4 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/lvlJc-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the lvlJc element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 704 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:lvlJc')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/lvlJc-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/lvlJc-translator.test.js new file mode 100644 index 000000000..85e5b63ea --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlJc/lvlJc-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './lvlJc-translator.js'; + +describe('w:lvlJc translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'center' } }] }); + expect(result).toBe('center'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:lvlJc element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { lvlJc: 'center' } } }); + expect(result).toEqual({ 'w:val': 'center' }); + }); + + it('returns undefined if lvlJc property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:lvlJc'); + expect(translator.sdNodeOrKeyName).toBe('lvlJc'); + }); +}); From a772544723de2d33aa137a08b22aaa095af01018 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:07:48 -0300 Subject: [PATCH 34/85] feat: add v3 translator for w:suff --- .../v3/handlers/w/suff/index.js | 1 + .../v3/handlers/w/suff/suff-translator.js | 9 +++++ .../handlers/w/suff/suff-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/suff/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/suff/suff-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/suff/suff-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/index.js new file mode 100644 index 000000000..e08995267 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/index.js @@ -0,0 +1 @@ +export * from './suff-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/suff-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/suff-translator.js new file mode 100644 index 000000000..5ab9b83ac --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/suff-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the suff element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 732 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:suff')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/suff-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/suff-translator.test.js new file mode 100644 index 000000000..ef1d7d949 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/suff/suff-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './suff-translator.js'; + +describe('w:suff translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'tab' } }] }); + expect(result).toBe('tab'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:suff element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { suff: 'tab' } } }); + expect(result).toEqual({ 'w:val': 'tab' }); + }); + + it('returns undefined if suff property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:suff'); + expect(translator.sdNodeOrKeyName).toBe('suff'); + }); +}); From 5ac5241132ca4ef7b3b6aecbc877ec158d6bb57d Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:08:02 -0300 Subject: [PATCH 35/85] feat: add v3 translator for w:lvlText --- .../core/super-converter/v3/handlers/index.js | 6 ++++ .../v3/handlers/w/lvlText/index.js | 1 + .../handlers/w/lvlText/lvlText-translator.js | 9 +++++ .../w/lvlText/lvlText-translator.test.js | 33 +++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/lvlText-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/lvlText-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 7823fd6c8..077c4b60e 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -72,9 +72,11 @@ import { translator as w_lang_translator } from './w/lang/lang-translator.js'; import { translator as w_latentStyles_translator } from './w/latentStyles/latentStyles-translator.js'; import { translator as w_locked_translator } from './w/locked/locked-translator.js'; import { translator as w_link_translator } from './w/link/link-translator.js'; +import { translator as w_lvlJc_translator } from './w/lvlJc/lvlJc-translator.js'; import { translator as w_lvlPicBulletId_translator } from './w/lvlPicBulletId/lvlPicBulletId-translator.js'; import { translator as w_lvlRestart_translator } from './w/lvlRestart/lvlRestart-translator.js'; import { translator as w_lvlStart_translator } from './w/start/lvlStart-translator.js'; +import { translator as w_lvlText_translator } from './w/lvlText/lvlText-translator.js'; import { translator as w_mirrorIndents_translator } from './w/mirrorIndents/mirrorIndents-translator.js'; import { translator as w_left_translator } from './w/left/left-translator.js'; import { translator as w_lsdException_translator } from './w/lsdException/lsdException-translator.js'; @@ -120,6 +122,7 @@ import { translator as w_spacing_translator } from './w/spacing/spacing-translat import { translator as w_suppressAutoHyphens_translator } from './w/suppressAutoHyphens/suppressAutoHyphens-translator.js'; import { translator as w_suppressLineNumbers_translator } from './w/suppressLineNumbers/suppressLineNumbers-translator.js'; import { translator as w_suppressOverlap_translator } from './w/suppressOverlap/suppressOverlap-translator.js'; +import { translator as w_suff_translator } from './w/suff/suff-translator.js'; import { translator as w_sz_translator } from './w/sz/sz-translator.js'; import { translator as w_szCs_translator } from './w/szcs/szcs-translator.js'; import { translator as w_t_translator } from './w/t/t-translator.js'; @@ -253,9 +256,11 @@ const translatorList = Array.from( w_left_translator, w_lsdException_translator, w_link_translator, + w_lvlJc_translator, w_lvlPicBulletId_translator, w_lvlRestart_translator, w_lvlStart_translator, + w_lvlText_translator, w_locked_translator, w_mirrorIndents_translator, w_name_translator, @@ -296,6 +301,7 @@ const translatorList = Array.from( w_suppressAutoHyphens_translator, w_suppressLineNumbers_translator, w_suppressOverlap_translator, + w_suff_translator, w_specVanish_translator, w_start_translator, w_strike_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/index.js new file mode 100644 index 000000000..b1899bd00 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/index.js @@ -0,0 +1 @@ +export * from './lvlText-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/lvlText-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/lvlText-translator.js new file mode 100644 index 000000000..7c6465c0e --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/lvlText-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the lvlText element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 711 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:lvlText')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/lvlText-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/lvlText-translator.test.js new file mode 100644 index 000000000..724180816 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlText/lvlText-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './lvlText-translator.js'; + +describe('w:lvlText translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '%1.' } }] }); + expect(result).toBe('%1.'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:lvlText element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { lvlText: '%1.' } } }); + expect(result).toEqual({ 'w:val': '%1.' }); + }); + + it('returns undefined if lvlText property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:lvlText'); + expect(translator.sdNodeOrKeyName).toBe('lvlText'); + }); +}); From 9b72a73ba727707332cf4ef8c8d268e428dfbc68 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:21:58 -0300 Subject: [PATCH 36/85] fix: circular import --- .../super-editor/src/core/super-converter/v3/handlers/utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js index dc8b907d7..654761e29 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js @@ -363,6 +363,7 @@ export function createNestedPropertiesTranslator( const propertyTranslatorsByXmlName = {}; const propertyTranslatorsBySdName = {}; propertyTranslators.forEach((translator) => { + if (!translator) return; propertyTranslatorsByXmlName[translator.xmlName] = translator; propertyTranslatorsBySdName[translator.sdNodeOrKeyName] = translator; }); From d25eb9ff91b8df5b6c1b9c5f6bdaaf9dcf841d48 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:32:09 -0300 Subject: [PATCH 37/85] feat: add v3 translator for w:numFmt --- .../core/super-converter/v3/handlers/index.js | 2 + .../v3/handlers/w/numFmt/index.js | 1 + .../v3/handlers/w/numFmt/numFmt-translator.js | 20 +++++ .../w/numFmt/numFmt-translator.test.js | 87 +++++++++++++++++++ 4 files changed, 110 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/numFmt-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/numFmt-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 077c4b60e..2c2b638e6 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -84,6 +84,7 @@ import { translator as w_name_translator } from './w/name/name-translator.js'; import { translator as w_next_translator } from './w/next/next-translator.js'; import { translator as w_noProof_translator } from './w/noProof/noProof-translator.js'; import { translator as w_noWrap_translator } from './w/noWrap/noWrap-translator.js'; +import { translator as w_numFmt_translator } from './w/numFmt/numFmt-translator.js'; import { translator as w_numId_translator } from './w/numId/numId-translator.js'; import { translator as w_numPr_translator } from './w/numPr/numPr-translator.js'; import { translator as w_oMath_translator } from './w/oMath/oMath-translator.js'; @@ -267,6 +268,7 @@ const translatorList = Array.from( w_next_translator, w_noProof_translator, w_noWrap_translator, + w_numFmt_translator, w_numId_translator, w_numPr_translator, w_outline_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/index.js new file mode 100644 index 000000000..0e3e42fb8 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/index.js @@ -0,0 +1 @@ +export * from './numFmt-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/numFmt-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/numFmt-translator.js new file mode 100644 index 000000000..412ae1251 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/numFmt-translator.js @@ -0,0 +1,20 @@ +import { NodeTranslator } from '@translator'; +import { createAttributeHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:numFmt element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 208 + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:numFmt', + sdNodeOrKeyName: 'numFmt', + attributes: [createAttributeHandler('w:val'), createAttributeHandler('w:format')], + encode: (_, encodedAttrs) => { + return encodedAttrs; + }, + decode: function ({ node }) { + const decodedAttrs = this.decodeAttributes({ node: { ...node, attrs: node.attrs['numFmt'] || {} } }); + return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : undefined; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/numFmt-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/numFmt-translator.test.js new file mode 100644 index 000000000..583581bad --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numFmt/numFmt-translator.test.js @@ -0,0 +1,87 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './numFmt-translator.js'; + +describe('numFmt-translator', () => { + describe('decode', () => { + it('should return the decoded attributes from a node', () => { + const node = { + attrs: { + numFmt: { + val: 'decimal', + format: '1.', + }, + }, + }; + expect(translator.decode({ node })).toEqual({ + attributes: { + 'w:val': 'decimal', + 'w:format': '1.', + }, + }); + }); + + it('should return only the existing attributes from a node', () => { + const node = { + attrs: { + numFmt: { + val: 'decimal', + }, + }, + }; + expect(translator.decode({ node })).toEqual({ + attributes: { + 'w:val': 'decimal', + }, + }); + }); + + it('should return undefined if "numFmt" attribute is not present in the node', () => { + const node = { + attrs: {}, + }; + expect(translator.decode({ node })).toBeUndefined(); + }); + + it('should return undefined if "numFmt" attribute is an empty object', () => { + const node = { + attrs: { + numFmt: {}, + }, + }; + expect(translator.decode({ node })).toBeUndefined(); + }); + }); + + describe('encode', () => { + it('should return the encoded attributes for a w:numFmt node', () => { + const sdNode = { + attributes: { + 'w:val': 'decimal', + 'w:format': '1.', + }, + }; + expect(translator.encode({ nodes: [sdNode] })).toEqual({ + val: 'decimal', + format: '1.', + }); + }); + + it('should return only the existing attributes for a w:numFmt node', () => { + const sdNode = { + attributes: { + 'w:val': 'decimal', + }, + }; + expect(translator.encode({ nodes: [sdNode] })).toEqual({ + val: 'decimal', + }); + }); + + it('should return an empty object for a w:numFmt node if no attributes are passed', () => { + const sdNode = { + attributes: {}, + }; + expect(translator.encode({ nodes: [sdNode] })).toEqual({}); + }); + }); +}); From e01c258d01dae9625b4ab64419bae7ceb8c25336 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:37:17 -0300 Subject: [PATCH 38/85] feat: add v3 translator for w:legacy --- .../v3/handlers/w/legacy/index.js | 1 + .../v3/handlers/w/legacy/legacy-translator.js | 23 ++++ .../w/legacy/legacy-translator.test.js | 108 ++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/legacy-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/legacy-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/index.js new file mode 100644 index 000000000..20b38cbf9 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/index.js @@ -0,0 +1 @@ +export * from './legacy-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/legacy-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/legacy-translator.js new file mode 100644 index 000000000..6bf4ff9d4 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/legacy-translator.js @@ -0,0 +1,23 @@ +import { NodeTranslator } from '@translator'; +import { createIntegerAttributeHandler, createBooleanAttributeHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:legacy element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:legacy', + sdNodeOrKeyName: 'legacy', + attributes: [ + createBooleanAttributeHandler('w:legacy'), + createIntegerAttributeHandler('w:legacySpace'), + createIntegerAttributeHandler('w:legacyIndent'), + ], + encode: (_, encodedAttrs) => { + return encodedAttrs; + }, + decode: function ({ node }) { + const decodedAttrs = this.decodeAttributes({ node: { ...node, attrs: node.attrs['legacy'] || {} } }); + return Object.keys(decodedAttrs).length > 0 ? { attributes: decodedAttrs } : undefined; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/legacy-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/legacy-translator.test.js new file mode 100644 index 000000000..1af698ff6 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/legacy/legacy-translator.test.js @@ -0,0 +1,108 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './legacy-translator.js'; + +describe('legacy-translator', () => { + describe('decode', () => { + it('should return the decoded attributes from a node', () => { + const node = { + attrs: { + legacy: { + legacy: true, + legacySpace: 120, + legacyIndent: 240, + }, + }, + }; + expect(translator.decode({ node })).toEqual({ + attributes: { + 'w:legacy': '1', + 'w:legacySpace': '120', + 'w:legacyIndent': '240', + }, + }); + }); + + it('should return only the existing attributes from a node', () => { + const node = { + attrs: { + legacy: { + legacySpace: 120, + }, + }, + }; + expect(translator.decode({ node })).toEqual({ + attributes: { + 'w:legacySpace': '120', + }, + }); + }); + + it('should return undefined if "legacy" attribute is not present in the node', () => { + const node = { + attrs: {}, + }; + expect(translator.decode({ node })).toBeUndefined(); + }); + + it('should return undefined if "legacy" attribute is an empty object', () => { + const node = { + attrs: { + legacy: {}, + }, + }; + expect(translator.decode({ node })).toBeUndefined(); + }); + + it('should handle numeric string values for integer attributes', () => { + const node = { + attrs: { + legacy: { + legacySpace: '120', + legacyIndent: '240', + }, + }, + }; + expect(translator.decode({ node })).toEqual({ + attributes: { + 'w:legacySpace': '120', + 'w:legacyIndent': '240', + }, + }); + }); + }); + + describe('encode', () => { + it('should return the encoded attributes for a w:legacy node', () => { + const sdNode = { + attributes: { + 'w:legacy': '1', + 'w:legacySpace': '120', + 'w:legacyIndent': '240', + }, + }; + expect(translator.encode({ nodes: [sdNode] })).toEqual({ + legacy: true, + legacySpace: 120, + legacyIndent: 240, + }); + }); + + it('should return only the existing attributes for a w:legacy node', () => { + const sdNode = { + attributes: { + 'w:legacySpace': '120', + }, + }; + expect(translator.encode({ nodes: [sdNode] })).toEqual({ + legacySpace: 120, + }); + }); + + it('should return an empty object for a w:legacy node if no attributes are passed', () => { + const sdNode = { + attributes: {}, + }; + expect(translator.encode({ nodes: [sdNode] })).toEqual({}); + }); + }); +}); From 1e42538545b29047e1040527606fcd62b9c2326d Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:49:39 -0300 Subject: [PATCH 39/85] feat: add v3 translator for w:lvl --- .../core/super-converter/v3/handlers/index.js | 2 + .../v3/handlers/w/lvl/index.js | 1 + .../v3/handlers/w/lvl/lvl-translator.js | 49 ++++++++ .../v3/handlers/w/lvl/lvl-translator.test.js | 105 ++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/lvl-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/lvl-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 2c2b638e6..051fb3df1 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -72,6 +72,7 @@ import { translator as w_lang_translator } from './w/lang/lang-translator.js'; import { translator as w_latentStyles_translator } from './w/latentStyles/latentStyles-translator.js'; import { translator as w_locked_translator } from './w/locked/locked-translator.js'; import { translator as w_link_translator } from './w/link/link-translator.js'; +import { translator as w_lvl_translator } from './w/lvl/lvl-translator.js'; import { translator as w_lvlJc_translator } from './w/lvlJc/lvlJc-translator.js'; import { translator as w_lvlPicBulletId_translator } from './w/lvlPicBulletId/lvlPicBulletId-translator.js'; import { translator as w_lvlRestart_translator } from './w/lvlRestart/lvlRestart-translator.js'; @@ -257,6 +258,7 @@ const translatorList = Array.from( w_left_translator, w_lsdException_translator, w_link_translator, + w_lvl_translator, w_lvlJc_translator, w_lvlPicBulletId_translator, w_lvlRestart_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/index.js new file mode 100644 index 000000000..44f8208f5 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/index.js @@ -0,0 +1 @@ +export * from './lvl-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/lvl-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/lvl-translator.js new file mode 100644 index 000000000..557d8aabb --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/lvl-translator.js @@ -0,0 +1,49 @@ +// @ts-check +import { NodeTranslator } from '@translator'; +import { + createNestedPropertiesTranslator, + createIntegerAttributeHandler, + createBooleanAttributeHandler, +} from '@converter/v3/handlers/utils.js'; +import { translator as wLvlStartTranslator } from '../../w/start/lvlStart-translator.js'; +import { translator as wLvlPicBulletId } from '../../w/lvlPicBulletId/lvlPicBulletId-translator.js'; +import { translator as wIsLglTranslator } from '../../w/isLgl/isLgl-translator.js'; +import { translator as wPStyleTranslator } from '../../w/pStyle/pStyle-translator.js'; +import { translator as wSuffTranslator } from '../../w/suff/suff-translator.js'; +import { translator as wLvlTextTranslator } from '../../w/lvlText/lvlText-translator.js'; +import { translator as wLvlJcTranslator } from '../../w/lvlJc/lvlJc-translator.js'; +import { translator as wNumFmtTranslator } from '../../w/numFmt/numFmt-translator.js'; +import { translator as wLegacyTranslator } from '../../w/legacy/legacy-translator.js'; +import { translator as wPPrTranslator } from '../../w/pPr'; +import { translator as wRPrTranslator } from '../../w/rpr'; + +// Property translators for w:lvl child elements +// Each translator handles a specific property +/** @type {import('@translator').NodeTranslator[]} */ +const propertyTranslators = [ + wLvlStartTranslator, + wLvlPicBulletId, + wIsLglTranslator, + wPStyleTranslator, + wSuffTranslator, + wLvlTextTranslator, + wLvlJcTranslator, + wNumFmtTranslator, + wLegacyTranslator, + wPPrTranslator, + wRPrTranslator, +]; + +const attributeHandlers = [ + createIntegerAttributeHandler('w:ilvl'), + createIntegerAttributeHandler('w:tplc'), + createBooleanAttributeHandler('w:tentative'), +]; + +/** + * The NodeTranslator instance for the w:lvl element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from( + createNestedPropertiesTranslator('w:lvl', 'lvl', propertyTranslators, {}, attributeHandlers), +); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/lvl-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/lvl-translator.test.js new file mode 100644 index 000000000..82e38f1d6 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvl/lvl-translator.test.js @@ -0,0 +1,105 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './lvl-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:lvl translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:lvl'); + expect(translator.sdNodeOrKeyName).toBe('lvl'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode nested level properties correctly', () => { + const xmlNode = { + name: 'w:lvl', + elements: [ + { name: 'w:start', attributes: { 'w:val': '1' } }, + { name: 'w:lvlPicBulletId', attributes: { 'w:val': '2' } }, + { name: 'w:isLgl' }, + { name: 'w:pStyle', attributes: { 'w:val': 'Heading1' } }, + { name: 'w:suff', attributes: { 'w:val': 'space' } }, + { name: 'w:lvlText', attributes: { 'w:val': '%1.' } }, + { name: 'w:lvlJc', attributes: { 'w:val': 'center' } }, + { name: 'w:numFmt', attributes: { 'w:val': 'decimal', 'w:format': '1.' } }, + { name: 'w:legacy', attributes: { 'w:legacy': '1', 'w:legacySpace': '120', 'w:legacyIndent': '240' } }, + { name: 'w:pPr', elements: [{ name: 'w:keepNext' }] }, + { name: 'w:rPr', elements: [{ name: 'w:b' }] }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + start: 1, + lvlPicBulletId: 2, + isLgl: true, + styleId: 'Heading1', + suff: 'space', + lvlText: '%1.', + lvlJc: 'center', + numFmt: { val: 'decimal', format: '1.' }, + legacy: { legacy: true, legacySpace: 120, legacyIndent: 240 }, + paragraphProperties: { keepNext: true }, + runProperties: { bold: true }, + }); + }); + + it('should return undefined if no child properties are present', () => { + const xmlNode = { name: 'w:lvl', elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('should decode a lvl object correctly', () => { + const superDocNode = { + attrs: { + lvl: { + start: 1, + lvlPicBulletId: 2, + isLgl: true, + styleId: 'Heading1', + suff: 'space', + lvlText: '%1.', + lvlJc: 'center', + numFmt: { val: 'decimal', format: '1.' }, + legacy: { legacy: true, legacySpace: 120, legacyIndent: 240 }, + paragraphProperties: { keepNext: true }, + runProperties: { bold: true }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result.name).toBe('w:lvl'); + expect(result.elements).toEqual( + expect.arrayContaining([ + { name: 'w:start', attributes: { 'w:val': '1' } }, + { name: 'w:lvlPicBulletId', attributes: { 'w:val': '2' } }, + { name: 'w:isLgl', attributes: {} }, + { name: 'w:pStyle', attributes: { 'w:val': 'Heading1' } }, + { name: 'w:suff', attributes: { 'w:val': 'space' } }, + { name: 'w:lvlText', attributes: { 'w:val': '%1.' } }, + { name: 'w:lvlJc', attributes: { 'w:val': 'center' } }, + { name: 'w:numFmt', attributes: { 'w:val': 'decimal', 'w:format': '1.' } }, + { + name: 'w:legacy', + attributes: { 'w:legacy': '1', 'w:legacySpace': '120', 'w:legacyIndent': '240' }, + }, + { name: 'w:pPr', type: 'element', attributes: {}, elements: [{ name: 'w:keepNext', attributes: {} }] }, + { name: 'w:rPr', type: 'element', attributes: {}, elements: [{ name: 'w:b', attributes: {} }] }, + ]), + ); + }); + + it('should return undefined if no lvl properties are present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); From 5882bb4c795b56627a51f5dfc8ff12b391c255ee Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 17:56:18 -0300 Subject: [PATCH 40/85] feat: add v3 translator for w:startOverride --- .../core/super-converter/v3/handlers/index.js | 2 ++ .../v3/handlers/w/startOverride/index.js | 1 + .../startOverride/startOverride-translator.js | 9 +++++ .../startOverride-translator.test.js | 33 +++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/startOverride-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/startOverride-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 051fb3df1..da900080f 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -117,6 +117,7 @@ import { translator as w_shd_translator } from './w/shd/shd-translator.js'; import { translator as w_smallCaps_translator } from './w/smallCaps/smallCaps-translator.js'; import { translator as w_snapToGrid_translator } from './w/snapToGrid/snapToGrid-translator.js'; import { translator as w_start_translator } from './w/start/start-translator.js'; +import { translator as w_startOverride_translator } from './w/startOverride/startOverride-translator.js'; import { translator as w_strike_translator } from './w/strike/strike-translator.js'; import { translator as w_style_translator } from './w/style/style-translator.js'; import { translator as w_styles_translator } from './w/styles/styles-translator.js'; @@ -308,6 +309,7 @@ const translatorList = Array.from( w_suff_translator, w_specVanish_translator, w_start_translator, + w_startOverride_translator, w_strike_translator, w_style_translator, w_styles_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/index.js new file mode 100644 index 000000000..ac61143c1 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/index.js @@ -0,0 +1 @@ +export * from './startOverride-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/startOverride-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/startOverride-translator.js new file mode 100644 index 000000000..b389e467e --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/startOverride-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:startOverride element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 728 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:startOverride')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/startOverride-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/startOverride-translator.test.js new file mode 100644 index 000000000..20fa946ae --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/startOverride/startOverride-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './startOverride-translator.js'; + +describe('w:startOverride translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '3' } }] }); + expect(result).toBe(3); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:startOverride element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { startOverride: 3 } } }); + expect(result).toEqual({ 'w:val': '3' }); + }); + + it('returns undefined if startOverride property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:startOverride'); + expect(translator.sdNodeOrKeyName).toBe('startOverride'); + }); +}); From ea2324b41e3fb367c61c045c80f1dc8b9cccdb82 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 18:04:27 -0300 Subject: [PATCH 41/85] feat: add v3 translator for w:lvlOverride --- .../core/super-converter/v3/handlers/index.js | 2 + .../v3/handlers/w/lvlOverride/index.js | 1 + .../w/lvlOverride/lvlOverride-translator.js | 20 +++++ .../lvlOverride-translator.test.js | 75 +++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/lvlOverride-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/lvlOverride-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index da900080f..4343066fe 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -73,6 +73,7 @@ import { translator as w_latentStyles_translator } from './w/latentStyles/latent import { translator as w_locked_translator } from './w/locked/locked-translator.js'; import { translator as w_link_translator } from './w/link/link-translator.js'; import { translator as w_lvl_translator } from './w/lvl/lvl-translator.js'; +import { translator as w_lvlOverride_translator } from './w/lvlOverride/lvlOverride-translator.js'; import { translator as w_lvlJc_translator } from './w/lvlJc/lvlJc-translator.js'; import { translator as w_lvlPicBulletId_translator } from './w/lvlPicBulletId/lvlPicBulletId-translator.js'; import { translator as w_lvlRestart_translator } from './w/lvlRestart/lvlRestart-translator.js'; @@ -260,6 +261,7 @@ const translatorList = Array.from( w_lsdException_translator, w_link_translator, w_lvl_translator, + w_lvlOverride_translator, w_lvlJc_translator, w_lvlPicBulletId_translator, w_lvlRestart_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/index.js new file mode 100644 index 000000000..840b86452 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/index.js @@ -0,0 +1 @@ +export * from './lvlOverride-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/lvlOverride-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/lvlOverride-translator.js new file mode 100644 index 000000000..db7bde700 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/lvlOverride-translator.js @@ -0,0 +1,20 @@ +// @ts-check +import { NodeTranslator } from '@translator'; +import { createNestedPropertiesTranslator, createIntegerAttributeHandler } from '@converter/v3/handlers/utils.js'; +import { translator as wStartOverrideTranslator } from '../../w/startOverride'; +import { translator as wLvlTranslator } from '../../w/lvl'; + +// Property translators for w:lvlOverride child elements +// Each translator handles a specific property +/** @type {import('@translator').NodeTranslator[]} */ +const propertyTranslators = [wStartOverrideTranslator, wLvlTranslator]; + +const attributeHandlers = [createIntegerAttributeHandler('w:ilvl')]; + +/** + * The NodeTranslator instance for the w:lvlOverride element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from( + createNestedPropertiesTranslator('w:lvlOverride', 'lvlOverride', propertyTranslators, {}, attributeHandlers), +); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/lvlOverride-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/lvlOverride-translator.test.js new file mode 100644 index 000000000..1f08f17b2 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/lvlOverride/lvlOverride-translator.test.js @@ -0,0 +1,75 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './lvlOverride-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:lvlOverride translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:lvlOverride'); + expect(translator.sdNodeOrKeyName).toBe('lvlOverride'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode nested level override properties correctly', () => { + const xmlNode = { + name: 'w:lvlOverride', + attributes: { 'w:ilvl': '2' }, + elements: [ + { name: 'w:startOverride', attributes: { 'w:val': '3' } }, + { name: 'w:lvl', elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%1.' } }] }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + ilvl: 2, + startOverride: 3, + lvl: { lvlText: '%1.' }, + }); + }); + + it('should return attributes if no child properties are present', () => { + const xmlNode = { name: 'w:lvlOverride', attributes: { 'w:ilvl': '2' }, elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toEqual({ ilvl: 2 }); + }); + }); + + describe('decode', () => { + it('should decode a lvlOverride object correctly', () => { + const superDocNode = { + attrs: { + lvlOverride: { + ilvl: 2, + startOverride: 3, + lvl: { lvlText: '%1.' }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result.name).toBe('w:lvlOverride'); + expect(result.attributes).toEqual({ 'w:ilvl': '2' }); + expect(result.elements).toEqual( + expect.arrayContaining([ + { name: 'w:startOverride', attributes: { 'w:val': '3' } }, + { + name: 'w:lvl', + type: 'element', + attributes: {}, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%1.' } }], + }, + ]), + ); + }); + + it('should return undefined if no lvlOverride properties are present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); From e649ca58c05bf7de21d21282381a90da3ca12b97 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 18:21:19 -0300 Subject: [PATCH 42/85] feat: add v3 translator for w:abstractNumId --- .../core/super-converter/v3/handlers/index.js | 2 ++ .../abstractNumId/abstractNumId-translator.js | 9 +++++ .../abstractNumId-translator.test.js | 33 +++++++++++++++++++ .../v3/handlers/w/abstractNumId/index.js | 1 + 4 files changed, 45 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/abstractNumId-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/abstractNumId-translator.test.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/index.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 4343066fe..537fcd2bc 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -6,6 +6,7 @@ import { translator as sd_index_translator } from './sd/index/index-translator.j import { translator as sd_indexEntry_translator } from './sd/indexEntry/indexEntry-translator.js'; import { translator as sd_autoPageNumber_translator } from './sd/autoPageNumber/autoPageNumber-translator.js'; import { translator as sd_totalPageNumber_translator } from './sd/totalPageNumber/totalPageNumber-translator.js'; +import { translator as w_abstractNumId_translator } from './w/abstractNumId/abstractNumId-translator.js'; import { translator as w_adjustRightInd_translator } from './w/adjustRightInd/adjustRightInd-translator.js'; import { translator as w_autoRedefine_translator } from './w/autoRedefine/autoRedefine-translator.js'; import { translator as w_autoSpaceDE_translator } from './w/autoSpaceDE/autoSpaceDE-translator.js'; @@ -197,6 +198,7 @@ const translatorList = Array.from( sd_indexEntry_translator, sd_autoPageNumber_translator, sd_totalPageNumber_translator, + w_abstractNumId_translator, w_adjustRightInd_translator, w_autoRedefine_translator, w_autoSpaceDE_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/abstractNumId-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/abstractNumId-translator.js new file mode 100644 index 000000000..8dc518711 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/abstractNumId-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:abstractNumId element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 694 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:abstractNumId')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/abstractNumId-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/abstractNumId-translator.test.js new file mode 100644 index 000000000..94a20609b --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/abstractNumId-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './abstractNumId-translator.js'; + +describe('w:abstractNumId translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] }); + expect(result).toBe(1); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:abstractNumId element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { abstractNumId: 1 } } }); + expect(result).toEqual({ 'w:val': '1' }); + }); + + it('returns undefined if abstractNumId property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:abstractNumId'); + expect(translator.sdNodeOrKeyName).toBe('abstractNumId'); + }); +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/index.js new file mode 100644 index 000000000..649122394 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNumId/index.js @@ -0,0 +1 @@ +export * from './abstractNumId-translator.js'; From aaff72268f5912d3a9f59c79bdd83e53c423e272 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 18:49:42 -0300 Subject: [PATCH 43/85] feat: add v3 translator for w:num --- .../core/super-converter/v3/handlers/index.js | 2 + .../v3/handlers/w/num/index.js | 1 + .../v3/handlers/w/num/num-translator.js | 52 +++++++++ .../v3/handlers/w/num/num-translator.test.js | 100 ++++++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/num/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 537fcd2bc..130519134 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -87,6 +87,7 @@ import { translator as w_name_translator } from './w/name/name-translator.js'; import { translator as w_next_translator } from './w/next/next-translator.js'; import { translator as w_noProof_translator } from './w/noProof/noProof-translator.js'; import { translator as w_noWrap_translator } from './w/noWrap/noWrap-translator.js'; +import { translator as w_num_translator } from './w/num/num-translator.js'; import { translator as w_numFmt_translator } from './w/numFmt/numFmt-translator.js'; import { translator as w_numId_translator } from './w/numId/numId-translator.js'; import { translator as w_numPr_translator } from './w/numPr/numPr-translator.js'; @@ -275,6 +276,7 @@ const translatorList = Array.from( w_next_translator, w_noProof_translator, w_noWrap_translator, + w_num_translator, w_numFmt_translator, w_numId_translator, w_numPr_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/num/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/num/index.js new file mode 100644 index 000000000..7fd1b2ef9 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/num/index.js @@ -0,0 +1 @@ +export * from './num-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.js new file mode 100644 index 000000000..d097f6019 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.js @@ -0,0 +1,52 @@ +import { NodeTranslator } from '@translator'; +import { translator as wAbstractNumIdTranslator } from '../../w/abstractNumId'; +import { translator as wLvlOverrideTranslator } from '../../w/lvlOverride'; +import { createIntegerAttributeHandler, encodeProperties, decodeProperties, encodePropertiesByKey, decodePropertiesByKey } from '@converter/v3/handlers/utils.js'; + +/** + * The NodeTranslator instance for the w:num element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:num', + sdNodeOrKeyName: 'num', + type: NodeTranslator.translatorTypes.NODE, + attributes: [createIntegerAttributeHandler('w:numId')], + encode: (params, encodedAttrs) => { + const { nodes } = params; + const node = nodes[0]; + const result = { + ...encodedAttrs, + ...encodeProperties(params, { + 'w:abstractNumId': wAbstractNumIdTranslator, + }), + ...encodePropertiesByKey('w:lvlOverride', 'lvlOverrides', wLvlOverrideTranslator, params, node, 'ilvl'), + }; + + return result; + }, + decode: function (params) { + const currentValue = params.node.attrs?.['num']; + if (!currentValue) { + return undefined; + } + + const decodedAttrs = this.decodeAttributes({ node: { ...params.node, attrs: currentValue } }); + + const elements = [ + ...decodeProperties(params, { + abstractNumId: wAbstractNumIdTranslator, + }, currentValue), + ...decodePropertiesByKey('w:lvlOverride', 'lvlOverrides', wLvlOverrideTranslator, params, currentValue), + ]; + + const newNode = { + name: 'w:num', + type: 'element', + attributes: decodedAttrs, + elements: elements, + }; + + return newNode; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.test.js new file mode 100644 index 000000000..a0d8ed056 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.test.js @@ -0,0 +1,100 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './num-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:num translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:num'); + expect(translator.sdNodeOrKeyName).toBe('num'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode nested num properties correctly', () => { + const xmlNode = { + name: 'w:num', + attributes: { 'w:numId': '5' }, + elements: [ + { name: 'w:abstractNumId', attributes: { 'w:val': '2' } }, + { + name: 'w:lvlOverride', + attributes: { 'w:ilvl': '1' }, + elements: [ + { name: 'w:startOverride', attributes: { 'w:val': '3' } }, + { name: 'w:lvl', elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%1.' } }] }, + ], + }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + numId: 5, + abstractNumId: 2, + lvlOverrides: { + 1: { + ilvl: 1, + startOverride: 3, + lvl: { lvlText: '%1.' }, + }, + }, + }); + }); + + it('should return attributes when no child properties are present', () => { + const xmlNode = { name: 'w:num', attributes: { 'w:numId': '5' }, elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toEqual({ numId: 5 }); + }); + }); + + describe('decode', () => { + it('should decode a styles object correctly', () => { + const superDocNode = { + attrs: { + num: { + numId: 5, + abstractNumId: 2, + lvlOverrides: { + 1: { + ilvl: 1, + startOverride: 3, + lvl: { lvlText: '%1.' }, + }, + }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result.name).toBe('w:num'); + expect(result.attributes).toEqual({ 'w:numId': '5' }); + expect(result.elements).toEqual([ + { name: 'w:abstractNumId', attributes: { 'w:val': '2' } }, + { + name: 'w:lvlOverride', + type: 'element', + attributes: { 'w:ilvl': '1' }, + elements: [ + { name: 'w:startOverride', attributes: { 'w:val': '3' } }, + { + name: 'w:lvl', + type: 'element', + attributes: {}, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%1.' } }], + }, + ], + }, + ]); + }); + + it('should return undefined if no styles are present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); From 432f7fd0c2c0685793d283750e9cd38eac16131e Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 18:55:30 -0300 Subject: [PATCH 44/85] feat: add v3 translator for w:nsid --- .../v3/handlers/w/nsid/index.js | 1 + .../v3/handlers/w/nsid/nsid-translator.js | 9 +++++ .../handlers/w/nsid/nsid-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/nsid-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/nsid-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/index.js new file mode 100644 index 000000000..7ed86b395 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/index.js @@ -0,0 +1 @@ +export * from './nsid-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/nsid-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/nsid-translator.js new file mode 100644 index 000000000..239595c48 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/nsid-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:nsid element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 714 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:nsid')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/nsid-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/nsid-translator.test.js new file mode 100644 index 000000000..31a9f7573 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/nsid/nsid-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './nsid-translator.js'; + +describe('w:nsid translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] }); + expect(result).toBe(1); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:nsid element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { nsid: 1 } } }); + expect(result).toEqual({ 'w:val': '1' }); + }); + + it('returns undefined if nsid property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:nsid'); + expect(translator.sdNodeOrKeyName).toBe('nsid'); + }); +}); From c9bfac1675740a56f7a6331949498418ae00d9d6 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 18:55:52 -0300 Subject: [PATCH 45/85] feat: add v3 translator for w:tmpl --- .../core/super-converter/v3/handlers/index.js | 4 +++ .../v3/handlers/w/tmpl/index.js | 1 + .../v3/handlers/w/tmpl/tmpl-translator.js | 9 +++++ .../handlers/w/tmpl/tmpl-translator.test.js | 33 +++++++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/tmpl-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/tmpl-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 130519134..ba8de78f5 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -91,6 +91,7 @@ import { translator as w_num_translator } from './w/num/num-translator.js'; import { translator as w_numFmt_translator } from './w/numFmt/numFmt-translator.js'; import { translator as w_numId_translator } from './w/numId/numId-translator.js'; import { translator as w_numPr_translator } from './w/numPr/numPr-translator.js'; +import { translator as w_nsid_translator } from './w/nsid/nsid-translator.js'; import { translator as w_oMath_translator } from './w/oMath/oMath-translator.js'; import { translator as w_outline_translator } from './w/outline/outline-translator.js'; import { translator as w_outlineLvl_translator } from './w/outlineLvl/outlineLvl-translator.js'; @@ -171,6 +172,7 @@ import { translator as w_tcFitText_translator } from './w/tcFitText/tcFitText-tr import { translator as w_tcW_translator } from './w/tcW/tcW-translator.js'; import { translator as w_textDirection_translator } from './w/textDirection/textDirection-translator.js'; import { translator as w_tl2br_translator } from './w/tl2br/tl2br-translator.js'; +import { translator as w_tmpl_translator } from './w/tmpl/tmpl-translator.js'; import { translator as w_tr2bl_translator } from './w/tr2bl/tr2bl-translator.js'; import { translator as w_tcBorders_translator } from './w/tcBorders/tcBorders-translator.js'; import { translator as w_tcMar_translator } from './w/tcMar/tcMar-translator.js'; @@ -280,6 +282,7 @@ const translatorList = Array.from( w_numFmt_translator, w_numId_translator, w_numPr_translator, + w_nsid_translator, w_outline_translator, w_outlineLvl_translator, w_overflowPunct, @@ -350,6 +353,7 @@ const translatorList = Array.from( w_tcW_translator, w_textDirection_translator, w_tl2br_translator, + w_tmpl_translator, w_tr_translator, w_tr2bl_translator, w_trHeight_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/index.js new file mode 100644 index 000000000..176a3afa5 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/index.js @@ -0,0 +1 @@ +export * from './tmpl-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/tmpl-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/tmpl-translator.js new file mode 100644 index 000000000..2618fb4dd --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/tmpl-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:tmpl element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 733 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:tmpl')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/tmpl-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/tmpl-translator.test.js new file mode 100644 index 000000000..a4bede905 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tmpl/tmpl-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './tmpl-translator.js'; + +describe('w:tmpl translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] }); + expect(result).toBe(1); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:tmpl element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { tmpl: 1 } } }); + expect(result).toEqual({ 'w:val': '1' }); + }); + + it('returns undefined if tmpl property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:tmpl'); + expect(translator.sdNodeOrKeyName).toBe('tmpl'); + }); +}); From 1c9fb3c72dc78ad5284b47e7a10d6c925f7bf4ef Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 18:59:26 -0300 Subject: [PATCH 46/85] feat: add v3 translator for w:styleLink --- .../v3/handlers/w/styleLink/index.js | 1 + .../w/styleLink/styleLink-translator.js | 9 +++++ .../w/styleLink/styleLink-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/styleLink-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/styleLink-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/index.js new file mode 100644 index 000000000..ba4a7a4ea --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/index.js @@ -0,0 +1 @@ +export * from './styleLink-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/styleLink-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/styleLink-translator.js new file mode 100644 index 000000000..49519e3fd --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/styleLink-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the styleLink element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 730 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:styleLink')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/styleLink-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/styleLink-translator.test.js new file mode 100644 index 000000000..c29eceffb --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/styleLink/styleLink-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './styleLink-translator.js'; + +describe('w:styleLink translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'LinkedStyle' } }] }); + expect(result).toBe('LinkedStyle'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:styleLink element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { styleLink: 'LinkedStyle' } } }); + expect(result).toEqual({ 'w:val': 'LinkedStyle' }); + }); + + it('returns undefined if styleLink property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:styleLink'); + expect(translator.sdNodeOrKeyName).toBe('styleLink'); + }); +}); From 6207380a6196416af7f5a04eed1de38549b9153b Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 18:59:40 -0300 Subject: [PATCH 47/85] feat: add v3 translator for w:numStyleLink --- .../v3/handlers/w/numStyleLink/index.js | 1 + .../w/numStyleLink/numStyleLink-translator.js | 9 +++++ .../numStyleLink-translator.test.js | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/numStyleLink-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/numStyleLink-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/index.js new file mode 100644 index 000000000..1843fcd09 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/index.js @@ -0,0 +1 @@ +export * from './numStyleLink-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/numStyleLink-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/numStyleLink-translator.js new file mode 100644 index 000000000..adfa86d52 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/numStyleLink-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the numStyleLink element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 723 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:numStyleLink')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/numStyleLink-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/numStyleLink-translator.test.js new file mode 100644 index 000000000..375a6c6eb --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numStyleLink/numStyleLink-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './numStyleLink-translator.js'; + +describe('w:numStyleLink translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'ListStyle' } }] }); + expect(result).toBe('ListStyle'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:numStyleLink element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { numStyleLink: 'ListStyle' } } }); + expect(result).toEqual({ 'w:val': 'ListStyle' }); + }); + + it('returns undefined if numStyleLink property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:numStyleLink'); + expect(translator.sdNodeOrKeyName).toBe('numStyleLink'); + }); +}); From 87a721221ddaa643c301dc2b19ce4e6f04e4d494 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 18:59:56 -0300 Subject: [PATCH 48/85] feat: add v3 translator for w:multiLevelType --- .../core/super-converter/v3/handlers/index.js | 6 ++++ .../v3/handlers/w/multiLevelType/index.js | 1 + .../multiLevelType-translator.js | 9 +++++ .../multiLevelType-translator.test.js | 33 +++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/multiLevelType-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/multiLevelType-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index ba8de78f5..7598dad5b 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -80,6 +80,7 @@ import { translator as w_lvlPicBulletId_translator } from './w/lvlPicBulletId/lv import { translator as w_lvlRestart_translator } from './w/lvlRestart/lvlRestart-translator.js'; import { translator as w_lvlStart_translator } from './w/start/lvlStart-translator.js'; import { translator as w_lvlText_translator } from './w/lvlText/lvlText-translator.js'; +import { translator as w_multiLevelType_translator } from './w/multiLevelType/multiLevelType-translator.js'; import { translator as w_mirrorIndents_translator } from './w/mirrorIndents/mirrorIndents-translator.js'; import { translator as w_left_translator } from './w/left/left-translator.js'; import { translator as w_lsdException_translator } from './w/lsdException/lsdException-translator.js'; @@ -91,6 +92,7 @@ import { translator as w_num_translator } from './w/num/num-translator.js'; import { translator as w_numFmt_translator } from './w/numFmt/numFmt-translator.js'; import { translator as w_numId_translator } from './w/numId/numId-translator.js'; import { translator as w_numPr_translator } from './w/numPr/numPr-translator.js'; +import { translator as w_numStyleLink_translator } from './w/numStyleLink/numStyleLink-translator.js'; import { translator as w_nsid_translator } from './w/nsid/nsid-translator.js'; import { translator as w_oMath_translator } from './w/oMath/oMath-translator.js'; import { translator as w_outline_translator } from './w/outline/outline-translator.js'; @@ -124,6 +126,7 @@ import { translator as w_start_translator } from './w/start/start-translator.js' import { translator as w_startOverride_translator } from './w/startOverride/startOverride-translator.js'; import { translator as w_strike_translator } from './w/strike/strike-translator.js'; import { translator as w_style_translator } from './w/style/style-translator.js'; +import { translator as w_styleLink_translator } from './w/styleLink/styleLink-translator.js'; import { translator as w_styles_translator } from './w/styles/styles-translator.js'; import { translator as w_spacing_translator } from './w/spacing/spacing-translator.js'; import { translator as w_suppressAutoHyphens_translator } from './w/suppressAutoHyphens/suppressAutoHyphens-translator.js'; @@ -272,6 +275,7 @@ const translatorList = Array.from( w_lvlRestart_translator, w_lvlStart_translator, w_lvlText_translator, + w_multiLevelType_translator, w_locked_translator, w_mirrorIndents_translator, w_name_translator, @@ -282,6 +286,7 @@ const translatorList = Array.from( w_numFmt_translator, w_numId_translator, w_numPr_translator, + w_numStyleLink_translator, w_nsid_translator, w_outline_translator, w_outlineLvl_translator, @@ -321,6 +326,7 @@ const translatorList = Array.from( w_startOverride_translator, w_strike_translator, w_style_translator, + w_styleLink_translator, w_styles_translator, w_sz_translator, w_szCs_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/index.js new file mode 100644 index 000000000..226f2c60c --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/index.js @@ -0,0 +1 @@ +export * from './multiLevelType-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/multiLevelType-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/multiLevelType-translator.js new file mode 100644 index 000000000..e3324d7a8 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/multiLevelType-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleAttrPropertyHandler } from '../../utils.js'; + +/** + * The NodeTranslator instance for the multiLevelType element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 712 + */ +export const translator = NodeTranslator.from(createSingleAttrPropertyHandler('w:multiLevelType')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/multiLevelType-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/multiLevelType-translator.test.js new file mode 100644 index 000000000..cbdbff93c --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/multiLevelType/multiLevelType-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './multiLevelType-translator.js'; + +describe('w:multiLevelType translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': 'multilevel' } }] }); + expect(result).toBe('multilevel'); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:multiLevelType element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { multiLevelType: 'multilevel' } } }); + expect(result).toEqual({ 'w:val': 'multilevel' }); + }); + + it('returns undefined if multiLevelType property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:multiLevelType'); + expect(translator.sdNodeOrKeyName).toBe('multiLevelType'); + }); +}); From 31208f537b46ca54fc3774753056c13d7f8ee761 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 19:23:39 -0300 Subject: [PATCH 49/85] feat: add v3 translator for w:abstractNum --- .../core/super-converter/v3/handlers/index.js | 2 + .../w/abstractNum/abstractNum-translator.js | 70 ++++++++ .../abstractNum-translator.test.js | 168 ++++++++++++++++++ .../v3/handlers/w/abstractNum/index.js | 1 + 4 files changed, 241 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.test.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/index.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 7598dad5b..95bef2669 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -6,6 +6,7 @@ import { translator as sd_index_translator } from './sd/index/index-translator.j import { translator as sd_indexEntry_translator } from './sd/indexEntry/indexEntry-translator.js'; import { translator as sd_autoPageNumber_translator } from './sd/autoPageNumber/autoPageNumber-translator.js'; import { translator as sd_totalPageNumber_translator } from './sd/totalPageNumber/totalPageNumber-translator.js'; +import { translator as w_abstractNum_translator } from './w/abstractNum/abstractNum-translator.js'; import { translator as w_abstractNumId_translator } from './w/abstractNumId/abstractNumId-translator.js'; import { translator as w_adjustRightInd_translator } from './w/adjustRightInd/adjustRightInd-translator.js'; import { translator as w_autoRedefine_translator } from './w/autoRedefine/autoRedefine-translator.js'; @@ -204,6 +205,7 @@ const translatorList = Array.from( sd_indexEntry_translator, sd_autoPageNumber_translator, sd_totalPageNumber_translator, + w_abstractNum_translator, w_abstractNumId_translator, w_adjustRightInd_translator, w_autoRedefine_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.js new file mode 100644 index 000000000..6e57abc76 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.js @@ -0,0 +1,70 @@ +import { NodeTranslator } from '@translator'; +import { translator as wNsidTranslator } from '../../w/nsid'; +import { translator as wTmplTranslator } from '../../w/tmpl'; +import { translator as wNameTranslator } from '../../w/name'; +import { translator as wStyleLinkTranslator } from '../../w/styleLink'; +import { translator as wNumStyleLinkTranslator } from '../../w/numStyleLink'; +import { translator as wMultiLevelTypeTranslator } from '../../w/multiLevelType'; +import { translator as wLvlTranslator } from '../../w/lvl'; +import { createIntegerAttributeHandler, encodeProperties, decodeProperties, encodePropertiesByKey, decodePropertiesByKey } from '@converter/v3/handlers/utils.js'; + +const propertyTranslators = [ + wNsidTranslator, + wTmplTranslator, + wNameTranslator, + wStyleLinkTranslator, + wNumStyleLinkTranslator, + wMultiLevelTypeTranslator, +]; + +const propertyTranslatorsByXmlName = {}; +const propertyTranslatorsBySdName = {}; +propertyTranslators.forEach((translator) => { + propertyTranslatorsByXmlName[translator.xmlName] = translator; + propertyTranslatorsBySdName[translator.sdNodeOrKeyName] = translator; +}); + +/** + * The NodeTranslator instance for the w:num element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:abstractNum', + sdNodeOrKeyName: 'abstractNum', + type: NodeTranslator.translatorTypes.NODE, + attributes: [createIntegerAttributeHandler('w:abstractNumId')], + encode: (params, encodedAttrs) => { + const { nodes } = params; + const node = nodes[0]; + + const result = { + ...encodedAttrs, + ...encodeProperties(params, propertyTranslatorsByXmlName), + ...encodePropertiesByKey('w:lvl', 'levels', wLvlTranslator, params, node, 'ilvl'), + }; + + return result; + }, + decode: function (params) { + const currentValue = params.node.attrs?.['abstractNum']; + if (!currentValue) { + return undefined; + } + + const decodedAttrs = this.decodeAttributes({ node: { ...params.node, attrs: currentValue } }); + + const elements = [ + ...decodeProperties(params, propertyTranslatorsBySdName, currentValue), + ...decodePropertiesByKey('w:lvl', 'levels', wLvlTranslator, params, currentValue), + ]; + + const newNode = { + name: 'w:abstractNum', + type: 'element', + attributes: decodedAttrs, + elements: elements, + }; + + return newNode; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.test.js new file mode 100644 index 000000000..abc0868ee --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.test.js @@ -0,0 +1,168 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './abstractNum-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:abstractNum translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:abstractNum'); + expect(translator.sdNodeOrKeyName).toBe('abstractNum'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode abstract numbering properties correctly', () => { + const xmlNode = { + name: 'w:abstractNum', + attributes: { 'w:abstractNumId': '1' }, + elements: [ + { name: 'w:nsid', attributes: { 'w:val': '10' } }, + { name: 'w:tmpl', attributes: { 'w:val': '20' } }, + { name: 'w:name', attributes: { 'w:val': 'List Numbering' } }, + { name: 'w:styleLink', attributes: { 'w:val': 'ListStyle' } }, + { name: 'w:numStyleLink', attributes: { 'w:val': 'ListNumStyle' } }, + { name: 'w:multiLevelType', attributes: { 'w:val': 'multilevel' } }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '1' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%1.' } }], + }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '2' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%2.' } }], + }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '3' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%3.' } }], + }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '4' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%4.' } }], + }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '5' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%5.' } }], + }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '6' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%6.' } }], + }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '7' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%7.' } }], + }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '8' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%8.' } }], + }, + { + name: 'w:lvl', + attributes: { 'w:ilvl': '9' }, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%9.' } }], + }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + abstractNumId: 1, + nsid: 10, + tmpl: 20, + name: 'List Numbering', + styleLink: 'ListStyle', + numStyleLink: 'ListNumStyle', + multiLevelType: 'multilevel', + levels: { + 1: { + ilvl: 1, + lvlText: '%1.', + }, + 2: { + ilvl: 2, + lvlText: '%2.', + }, + 3: { + ilvl: 3, + lvlText: '%3.', + }, + 4: { + ilvl: 4, + lvlText: '%4.', + }, + 5: { + ilvl: 5, + lvlText: '%5.', + }, + 6: { + ilvl: 6, + lvlText: '%6.', + }, + 7: { + ilvl: 7, + lvlText: '%7.', + }, + 8: { + ilvl: 8, + lvlText: '%8.', + }, + 9: { + ilvl: 9, + lvlText: '%9.', + }, + }, + }); + }); + + it('should return attributes when no child properties are present', () => { + const xmlNode = { name: 'w:abstractNum', attributes: { 'w:abstractNumId': '1' }, elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toEqual({ abstractNumId: 1 }); + }); + }); + + describe('decode', () => { + it('should decode an abstractNum object correctly', () => { + const superDocNode = { + attrs: { + abstractNum: { + abstractNumId: 1, + levels: { + 1: { + lvlText: '%1.', + }, + }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result.name).toBe('w:abstractNum'); + expect(result.attributes).toEqual({ 'w:abstractNumId': '1' }); + expect(result.elements).toEqual( + expect.arrayContaining([ + { + name: 'w:lvl', + type: 'element', + attributes: {}, + elements: [{ name: 'w:lvlText', attributes: { 'w:val': '%1.' } }], + }, + ]), + ); + }); + + it('should return undefined if no abstractNum is present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/index.js new file mode 100644 index 000000000..2b817227c --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/index.js @@ -0,0 +1 @@ +export * from './abstractNum-translator.js'; From 6b5db861559aa7a974cb4c8a17cee30666e75e39 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Sat, 10 Jan 2026 08:09:12 -0300 Subject: [PATCH 50/85] feat: add v3 translator fow w:numIdMacAtCleanup --- .../core/super-converter/v3/handlers/index.js | 2 ++ .../v3/handlers/w/numIdMacAtCleanup/index.js | 1 + .../numIdMacAtCleanup-translator.js | 9 +++++ .../numIdMacAtCleanup-translator.test.js | 33 +++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/numIdMacAtCleanup-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/numIdMacAtCleanup-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 95bef2669..72787d27a 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -92,6 +92,7 @@ import { translator as w_noWrap_translator } from './w/noWrap/noWrap-translator. import { translator as w_num_translator } from './w/num/num-translator.js'; import { translator as w_numFmt_translator } from './w/numFmt/numFmt-translator.js'; import { translator as w_numId_translator } from './w/numId/numId-translator.js'; +import { translator as w_numIdMacAtCleanup_translator } from './w/numIdMacAtCleanup/numIdMacAtCleanup-translator.js'; import { translator as w_numPr_translator } from './w/numPr/numPr-translator.js'; import { translator as w_numStyleLink_translator } from './w/numStyleLink/numStyleLink-translator.js'; import { translator as w_nsid_translator } from './w/nsid/nsid-translator.js'; @@ -287,6 +288,7 @@ const translatorList = Array.from( w_num_translator, w_numFmt_translator, w_numId_translator, + w_numIdMacAtCleanup_translator, w_numPr_translator, w_numStyleLink_translator, w_nsid_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/index.js new file mode 100644 index 000000000..fd7653fdb --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/index.js @@ -0,0 +1 @@ +export * from './numIdMacAtCleanup-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/numIdMacAtCleanup-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/numIdMacAtCleanup-translator.js new file mode 100644 index 000000000..205e0790e --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/numIdMacAtCleanup-translator.js @@ -0,0 +1,9 @@ +import { NodeTranslator } from '@translator'; +import { createSingleIntegerPropertyHandler } from '@converter/v3/handlers/utils'; + +/** + * The NodeTranslator instance for the w:numIdMacAtCleanup element. + * @type {import('@translator').NodeTranslator} + * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 720 + */ +export const translator = NodeTranslator.from(createSingleIntegerPropertyHandler('w:numIdMacAtCleanup')); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/numIdMacAtCleanup-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/numIdMacAtCleanup-translator.test.js new file mode 100644 index 000000000..9179f9c7d --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numIdMacAtCleanup/numIdMacAtCleanup-translator.test.js @@ -0,0 +1,33 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './numIdMacAtCleanup-translator.js'; + +describe('w:numIdMacAtCleanup translator', () => { + describe('encode', () => { + it('extracts the w:val attribute', () => { + const result = translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] }); + expect(result).toBe(1); + }); + + it('returns undefined if w:val is missing', () => { + const result = translator.encode({ nodes: [{ attributes: {} }] }); + expect(result).toBeUndefined(); + }); + }); + + describe('decode', () => { + it('creates a w:numIdMacAtCleanup element with the value in w:val', () => { + const { attributes: result } = translator.decode({ node: { attrs: { numIdMacAtCleanup: 1 } } }); + expect(result).toEqual({ 'w:val': '1' }); + }); + + it('returns undefined if numIdMacAtCleanup property is missing', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); + + it('has correct metadata', () => { + expect(translator.xmlName).toBe('w:numIdMacAtCleanup'); + expect(translator.sdNodeOrKeyName).toBe('numIdMacAtCleanup'); + }); +}); From 5ab2510631f6288097d727eea6df78a371099823 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 9 Jan 2026 19:53:50 -0300 Subject: [PATCH 51/85] feat: add v3 translator fow w:numbering --- .../core/super-converter/v3/handlers/index.js | 2 + .../v3/handlers/w/numbering/index.js | 1 + .../w/numbering/numbering-translator.js | 83 ++++++++++++ .../w/numbering/numbering-translator.test.js | 128 ++++++++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/index.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/numbering-translator.js create mode 100644 packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/numbering-translator.test.js diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/index.js index 72787d27a..9854a1bf2 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/index.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/index.js @@ -90,6 +90,7 @@ import { translator as w_next_translator } from './w/next/next-translator.js'; import { translator as w_noProof_translator } from './w/noProof/noProof-translator.js'; import { translator as w_noWrap_translator } from './w/noWrap/noWrap-translator.js'; import { translator as w_num_translator } from './w/num/num-translator.js'; +import { translator as w_numbering_translator } from './w/numbering/numbering-translator.js'; import { translator as w_numFmt_translator } from './w/numFmt/numFmt-translator.js'; import { translator as w_numId_translator } from './w/numId/numId-translator.js'; import { translator as w_numIdMacAtCleanup_translator } from './w/numIdMacAtCleanup/numIdMacAtCleanup-translator.js'; @@ -286,6 +287,7 @@ const translatorList = Array.from( w_noProof_translator, w_noWrap_translator, w_num_translator, + w_numbering_translator, w_numFmt_translator, w_numId_translator, w_numIdMacAtCleanup_translator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/index.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/index.js new file mode 100644 index 000000000..155ab2f2e --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/index.js @@ -0,0 +1 @@ +export * from './numbering-translator.js'; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/numbering-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/numbering-translator.js new file mode 100644 index 000000000..8659dc628 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/numbering-translator.js @@ -0,0 +1,83 @@ +import { NodeTranslator } from '@translator'; +import { translator as wNsidTranslator } from '../../w/nsid'; +import { translator as wTmplTranslator } from '../../w/tmpl'; +import { translator as wNameTranslator } from '../../w/name'; +import { translator as wStyleLinkTranslator } from '../../w/styleLink'; +import { translator as wNumStyleLinkTranslator } from '../../w/numStyleLink'; +import { translator as wMultiLevelTypeTranslator } from '../../w/multiLevelType'; +import { translator as wAbstractNumTranslator } from '../../w/abstractNum'; +import { translator as wNumTranslator } from '../../w/num'; +import { translator as wNumIdMacAtCleanupTranslator } from '../../w/numIdMacAtCleanup'; +import { + encodeProperties, + decodeProperties, + encodePropertiesByKey, + decodePropertiesByKey, +} from '@converter/v3/handlers/utils.js'; + +const propertyTranslators = [ + wNsidTranslator, + wTmplTranslator, + wNameTranslator, + wStyleLinkTranslator, + wNumStyleLinkTranslator, + wMultiLevelTypeTranslator, + wNumIdMacAtCleanupTranslator, +]; + +const propertyTranslatorsByXmlName = {}; +const propertyTranslatorsBySdName = {}; +propertyTranslators.forEach((translator) => { + propertyTranslatorsByXmlName[translator.xmlName] = translator; + propertyTranslatorsBySdName[translator.sdNodeOrKeyName] = translator; +}); + +/** + * The NodeTranslator instance for the w:num element. + * @type {import('@translator').NodeTranslator} + */ +export const translator = NodeTranslator.from({ + xmlName: 'w:numbering', + sdNodeOrKeyName: 'numbering', + type: NodeTranslator.translatorTypes.NODE, + attributes: [], + encode: (params, encodedAttrs) => { + const { nodes } = params; + const node = nodes[0]; + + const props = encodeProperties(params, propertyTranslatorsByXmlName); + + const result = { + ...encodedAttrs, + ...props, + ...encodePropertiesByKey('w:abstractNum', 'abstracts', wAbstractNumTranslator, params, node, 'abstractNumId'), + ...encodePropertiesByKey('w:num', 'definitions', wNumTranslator, params, node, 'numId'), + }; + + return result; + }, + decode: function (params) { + const currentValue = params.node.attrs?.['abstractNum']; + if (!currentValue) { + return undefined; + } + + const decodedAttrs = this.decodeAttributes({ node: { ...params.node, attrs: currentValue } }); + + const props = decodeProperties(params, propertyTranslatorsBySdName, currentValue); + const elements = [ + ...props, + ...decodePropertiesByKey('w:abstractNum', 'abstracts', wAbstractNumTranslator, params, currentValue), + ...decodePropertiesByKey('w:num', 'definitions', wNumTranslator, params, currentValue), + ]; + + const newNode = { + name: 'w:numbering', + type: 'element', + attributes: decodedAttrs, + elements: elements, + }; + + return newNode; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/numbering-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/numbering-translator.test.js new file mode 100644 index 000000000..cf7b69d49 --- /dev/null +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/numbering/numbering-translator.test.js @@ -0,0 +1,128 @@ +import { describe, it, expect } from 'vitest'; +import { translator } from './numbering-translator.js'; +import { NodeTranslator } from '@translator'; + +describe('w:numbering translator', () => { + describe('config', () => { + it('should have correct properties', () => { + expect(translator.xmlName).toBe('w:numbering'); + expect(translator.sdNodeOrKeyName).toBe('numbering'); + expect(translator).toBeInstanceOf(NodeTranslator); + }); + }); + + describe('encode', () => { + it('should encode numbering properties correctly', () => { + const xmlNode = { + name: 'w:numbering', + elements: [ + { name: 'w:nsid', attributes: { 'w:val': '10' } }, + { name: 'w:tmpl', attributes: { 'w:val': '20' } }, + { name: 'w:name', attributes: { 'w:val': 'List Numbering' } }, + { name: 'w:styleLink', attributes: { 'w:val': 'ListStyle' } }, + { name: 'w:numStyleLink', attributes: { 'w:val': 'ListNumStyle' } }, + { name: 'w:multiLevelType', attributes: { 'w:val': 'multilevel' } }, + { + name: 'w:abstractNum', + attributes: { 'w:abstractNumId': '1' }, + elements: [{ name: 'w:name', attributes: { 'w:val': 'Abstract List' } }], + }, + { + name: 'w:num', + attributes: { 'w:numId': '5' }, + elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '1' } }], + }, + ], + }; + + const result = translator.encode({ nodes: [xmlNode] }); + + expect(result).toEqual({ + nsid: 10, + tmpl: 20, + name: 'List Numbering', + styleLink: 'ListStyle', + numStyleLink: 'ListNumStyle', + multiLevelType: 'multilevel', + abstracts: { + 1: { + abstractNumId: 1, + name: 'Abstract List', + }, + }, + definitions: { + 5: { + numId: 5, + abstractNumId: 1, + }, + }, + }); + }); + + it('should return an empty object when no elements are present', () => { + const xmlNode = { name: 'w:numbering', elements: [] }; + const result = translator.encode({ nodes: [xmlNode] }); + expect(result).toEqual({}); + }); + }); + + describe('decode', () => { + it('should decode numbering into w:numbering elements', () => { + const superDocNode = { + attrs: { + abstractNum: { + nsid: 10, + tmpl: 20, + name: 'List Numbering', + styleLink: 'ListStyle', + numStyleLink: 'ListNumStyle', + multiLevelType: 'multilevel', + abstracts: { + 1: { + abstractNumId: 1, + name: 'Abstract List', + }, + }, + definitions: { + 5: { + numId: 5, + abstractNumId: 1, + }, + }, + }, + }, + }; + + const result = translator.decode({ node: superDocNode }); + + expect(result.name).toBe('w:numbering'); + expect(result.elements).toEqual( + expect.arrayContaining([ + { name: 'w:nsid', attributes: { 'w:val': '10' } }, + { name: 'w:tmpl', attributes: { 'w:val': '20' } }, + { name: 'w:name', attributes: { 'w:val': 'List Numbering' } }, + { name: 'w:styleLink', attributes: { 'w:val': 'ListStyle' } }, + { name: 'w:numStyleLink', attributes: { 'w:val': 'ListNumStyle' } }, + { name: 'w:multiLevelType', attributes: { 'w:val': 'multilevel' } }, + { + name: 'w:abstractNum', + type: 'element', + attributes: { 'w:abstractNumId': '1' }, + elements: [{ name: 'w:name', attributes: { 'w:val': 'Abstract List' } }], + }, + { + name: 'w:num', + type: 'element', + attributes: { 'w:numId': '5' }, + elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '1' } }], + }, + ]), + ); + }); + + it('should return undefined if no abstractNum is present', () => { + const result = translator.decode({ node: { attrs: {} } }); + expect(result).toBeUndefined(); + }); + }); +}); From 3b4aae96da4abfe113a6b05e72ad06b8cf2a58be Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 12 Jan 2026 10:15:20 -0300 Subject: [PATCH 52/85] feat: use v3 translator for linked styles and numbering --- .../core/super-converter/SuperConverter.js | 8 +++++++ .../v2/importer/docxImporter.js | 23 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/packages/super-editor/src/core/super-converter/SuperConverter.js b/packages/super-editor/src/core/super-converter/SuperConverter.js index 81da0e830..dd7be3bf2 100644 --- a/packages/super-editor/src/core/super-converter/SuperConverter.js +++ b/packages/super-editor/src/core/super-converter/SuperConverter.js @@ -200,6 +200,9 @@ class SuperConverter { // List defs this.numbering = {}; + // Translated numbering definitions + this.translatedNumbering = {}; + // Processed additional content this.numbering = null; this.pageStyles = null; @@ -222,6 +225,9 @@ class SuperConverter { // Linked Styles this.linkedStyles = []; + // Translated linked styles + this.translatedLinkedStyles = {}; + // This is the JSON schema that we will be working with this.json = params?.json; @@ -928,6 +934,8 @@ class SuperConverter { this.comments = result.comments; this.footnotes = result.footnotes; this.linkedStyles = result.linkedStyles; + this.translatedLinkedStyles = result.translatedLinkedStyles; + this.translatedNumbering = result.translatedNumbering; this.inlineDocumentFonts = result.inlineDocumentFonts; this.themeColors = result.themeColors ?? null; diff --git a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js index ed2f0d481..0a5b1161c 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js @@ -34,6 +34,8 @@ import { permStartHandlerEntity } from './permStartImporter.js'; import { permEndHandlerEntity } from './permEndImporter.js'; import bookmarkStartAttrConfigs from '@converter/v3/handlers/w/bookmark-start/attributes/index.js'; import bookmarkEndAttrConfigs from '@converter/v3/handlers/w/bookmark-end/attributes/index.js'; +import { translator as wStylesTranslator } from '@converter/v3/handlers/w/styles/index.js'; +import { translator as wNumberingTranslator } from '@converter/v3/handlers/w/numbering/index.js'; /** * @typedef {import()} XmlNode @@ -168,6 +170,9 @@ export const createDocumentJson = (docx, converter, editor) => { }, }; + const translatedLinkedStyles = translateStyleDefinitions(docx); + const translatedNumbering = translateNumberingDefinitions(docx); + return { pmDoc: result, savedTagsToRestore: node, @@ -176,7 +181,9 @@ export const createDocumentJson = (docx, converter, editor) => { footnotes, inlineDocumentFonts, linkedStyles: getStyleDefinitions(docx, converter, editor), + translatedLinkedStyles, numbering: getNumberingDefinitions(docx, converter), + translatedNumbering, themeColors: getThemeColorPalette(docx), }; } @@ -567,6 +574,22 @@ function getStyleDefinitions(docx) { return allParsedStyles; } +function translateStyleDefinitions(docx) { + const styles = docx['word/styles.xml']; + if (!styles) return []; + const stylesElement = styles.elements[0]; + const parsedStyles = wStylesTranslator.encode({ nodes: [stylesElement] }); + return parsedStyles; +} + +function translateNumberingDefinitions(docx) { + const numbering = docx['word/numbering.xml']; + if (!numbering) return null; + const numberingElement = numbering.elements[0]; + const parsedNumbering = wNumberingTranslator.encode({ nodes: [numberingElement] }); + return parsedNumbering; +} + /** * Add default styles if missing. Default styles are: * From 233103aad14ed9a03602d25b79a7188e5d043509 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 12 Jan 2026 11:35:00 -0300 Subject: [PATCH 53/85] feat: add typing information for raw paragraph and run attrs --- .../style-engine/src/ooxml/numbering-types.ts | 127 +++++ .../style-engine/src/ooxml/styles-types.ts | 384 ++++++++++++++ .../style-engine/src/ooxml/types.ts | 475 ++++++++++++++++++ 3 files changed, 986 insertions(+) create mode 100644 packages/layout-engine/style-engine/src/ooxml/numbering-types.ts create mode 100644 packages/layout-engine/style-engine/src/ooxml/styles-types.ts create mode 100644 packages/layout-engine/style-engine/src/ooxml/types.ts diff --git a/packages/layout-engine/style-engine/src/ooxml/numbering-types.ts b/packages/layout-engine/style-engine/src/ooxml/numbering-types.ts new file mode 100644 index 000000000..00073ac2c --- /dev/null +++ b/packages/layout-engine/style-engine/src/ooxml/numbering-types.ts @@ -0,0 +1,127 @@ +import type { ParagraphProperties, RunProperties } from './types'; + +/** + * Encoded properties for the w:numbering document. + */ +export interface NumberingProperties { + /** Numbering namespace identifier. */ + nsid?: number; + /** Numbering template identifier. */ + tmpl?: number; + /** Numbering name. */ + name?: string; + /** Style link identifier. */ + styleLink?: string; + /** Numbering style link identifier. */ + numStyleLink?: string; + /** Multi-level type value. */ + multiLevelType?: string; + /** Mac at cleanup numbering identifier. */ + numIdMacAtCleanup?: number; + /** Abstract numbering definitions keyed by abstractNumId. */ + abstracts?: Record; + /** Concrete numbering definitions keyed by numId. */ + definitions?: Record; +} + +/** + * Abstract numbering definition encoded from w:abstractNum. + */ +export interface AbstractNumberingDefinition { + /** Abstract numbering identifier. */ + abstractNumId?: number; + /** Numbering namespace identifier. */ + nsid?: number; + /** Numbering template identifier. */ + tmpl?: number; + /** Abstract numbering name. */ + name?: string; + /** Style link identifier. */ + styleLink?: string; + /** Numbering style link identifier. */ + numStyleLink?: string; + /** Multi-level type value. */ + multiLevelType?: string; + /** Level definitions keyed by ilvl. */ + levels?: Record; +} + +/** + * Concrete numbering definition encoded from w:num. + */ +export interface NumberingDefinition { + /** Numbering identifier. */ + numId?: number; + /** Abstract numbering identifier reference. */ + abstractNumId?: number; + /** Level overrides keyed by ilvl. */ + lvlOverrides?: Record; +} + +/** + * Numbering level definition encoded from w:lvl. + */ +export interface NumberingLevel { + /** Level index. */ + ilvl?: number; + /** Template code. */ + tplc?: number; + /** Tentative level flag. */ + tentative?: boolean; + /** Level start value. */ + start?: number; + /** Picture bullet identifier. */ + lvlPicBulletId?: number; + /** Use legal numbering style. */ + isLgl?: boolean; + /** Paragraph style identifier. */ + styleId?: string; + /** Suffix setting. */ + suff?: string; + /** Level text pattern. */ + lvlText?: string; + /** Level justification. */ + lvlJc?: string; + /** Numbering format properties. */ + numFmt?: NumberingFormat; + /** Legacy numbering properties. */ + legacy?: NumberingLegacyProperties; + /** Paragraph properties applied at this level. */ + paragraphProperties?: ParagraphProperties; + /** Run properties applied at this level. */ + runProperties?: RunProperties; +} + +/** + * Numbering level override definition encoded from w:lvlOverride. + */ +export interface NumberingLevelOverride { + /** Level index. */ + ilvl?: number; + /** Start override value. */ + startOverride?: number; + /** Level definition override. */ + lvl?: NumberingLevel; +} + +/** + * Numbering format properties encoded from w:numFmt. + */ +export interface NumberingFormat { + /** Numbering format value. */ + val?: string; + /** Numbering format string. */ + format?: string; +} + +/** + * Legacy numbering properties encoded from w:legacy. + */ +export interface NumberingLegacyProperties { + /** Legacy numbering flag. */ + legacy?: boolean; + /** Legacy spacing value. */ + legacySpace?: number; + /** Legacy indentation value. */ + legacyIndent?: number; +} diff --git a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts new file mode 100644 index 000000000..ff68dfb25 --- /dev/null +++ b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts @@ -0,0 +1,384 @@ + +import type { + BorderProperties, + ParagraphConditionalFormatting, + ParagraphProperties, + RunProperties, + ShadingProperties, +} from './types'; + +/** + * Encoded properties for the w:styles document. + */ +export interface StylesDocumentProperties { + /** Default run and paragraph properties for the document. */ + docDefaults: DocDefaults; + /** Latent style definitions and defaults. */ + latentStyles: LatentStyles; + /** Styles keyed by styleId. */ + styles: Record; +} + +/** + * Default run and paragraph properties stored under w:docDefaults. + */ +export interface DocDefaults { + /** Default run properties. */ + runProperties?: RunProperties; + /** Default paragraph properties. */ + paragraphProperties?: ParagraphProperties; +} + +/** + * Latent style defaults and per-style exceptions. + */ +export interface LatentStyles { + /** Default locked state for latent styles. */ + defLockedState?: boolean; + /** Default UI priority flag for latent styles. */ + defUIPriority?: boolean; + /** Default semi-hidden flag for latent styles. */ + defSemiHidden?: boolean; + /** Default unhide-when-used flag for latent styles. */ + defUnhideWhenUsed?: boolean; + /** Default quick-format flag for latent styles. */ + defQFormat?: boolean; + /** Latent style exceptions keyed by style name. */ + lsdExceptions?: Record; +} + +/** + * Latent style exception definition. + */ +export interface LsdException { + /** Latent style name. */ + name?: string; + /** Locked flag for the latent style. */ + locked?: boolean; + /** Quick format flag for the latent style. */ + qFormat?: boolean; + /** Semi-hidden flag for the latent style. */ + semiHidden?: boolean; + /** Unhide-when-used flag for the latent style. */ + unhideWhenUsed?: boolean; + /** UI priority value for the latent style. */ + uiPriority?: number; +} + +/** + * Encoded style definition from w:style. + */ +export interface StyleDefinition { + /** Style type (paragraph, character, table, etc.). */ + type?: string; + /** Style identifier. */ + styleId?: string; + /** Default style flag. */ + default?: boolean; + /** Custom style flag. */ + customStyle?: boolean; + /** Human-readable style name. */ + name?: string; + /** Comma-separated style aliases. */ + aliases?: string; + /** Based-on style identifier. */ + basedOn?: string; + /** Next style identifier. */ + next?: string; + /** Linked style identifier. */ + link?: string; + /** Auto-redefine flag. */ + autoRedefine?: boolean; + /** Hidden style flag. */ + hidden?: boolean; + /** Semi-hidden style flag. */ + semiHidden?: boolean; + /** Unhide-when-used style flag. */ + unhideWhenUsed?: boolean; + /** Quick-format style flag. */ + qFormat?: boolean; + /** Locked style flag. */ + locked?: boolean; + /** Personal style flag. */ + personal?: boolean; + /** Personal compose flag. */ + personalCompose?: boolean; + /** Personal reply flag. */ + personalReply?: boolean; + /** UI priority value. */ + uiPriority?: number; + /** Revision identifier. */ + rsid?: number; + /** Paragraph properties applied by the style. */ + paragraphProperties?: ParagraphProperties; + /** Run properties applied by the style. */ + runProperties?: RunProperties; + /** Table properties applied by the style. */ + tableProperties?: TableProperties; + /** Table row properties applied by the style. */ + tableRowProperties?: TableRowProperties; + /** Table cell properties applied by the style. */ + tableCellProperties?: TableCellProperties; + /** Table style properties applied by the style. */ + tableStyleProperties?: TableStyleProperties; +} + +/** + * Generic measurement properties used by table layout elements. + */ +export interface MeasurementProperties { + /** Measurement value, usually in twentieths of a point. */ + value?: number; + /** Measurement type (auto, dxa, pct, etc.). */ + type?: string; +} + +/** + * Table properties encoded from w:tblPr. + */ +export interface TableProperties { + /** Right-to-left visual order for table rendering. */ + rightToLeft?: boolean; + /** Table justification value. */ + justification?: string; + /** Table shading properties. */ + shading?: ShadingProperties; + /** Table caption text. */ + caption?: string; + /** Table cell spacing properties. */ + tableCellSpacing?: MeasurementProperties; + /** Table description text. */ + description?: string; + /** Table indent properties. */ + tableIndent?: MeasurementProperties; + /** Table layout algorithm. */ + tableLayout?: string; + /** Table look settings. */ + tblLook?: TableLookProperties; + /** Table overlap behavior. */ + overlap?: string; + /** Table style identifier. */ + tableStyleId?: string; + /** Table style column band size. */ + tableStyleColBandSize?: string; + /** Table style row band size. */ + tableStyleRowBandSize?: string; + /** Table width properties. */ + tableWidth?: MeasurementProperties; + /** Floating table properties. */ + floatingTableProperties?: TableFloatingProperties; + /** Table border properties. */ + borders?: TableBorders; + /** Table cell margin properties. */ + cellMargins?: TableCellMargins; +} + +/** + * Table look properties from w:tblLook. + */ +export interface TableLookProperties { + /** Apply first column formatting. */ + firstColumn?: boolean; + /** Apply first row formatting. */ + firstRow?: boolean; + /** Apply last column formatting. */ + lastColumn?: boolean; + /** Apply last row formatting. */ + lastRow?: boolean; + /** Disable horizontal banding. */ + noHBand?: boolean; + /** Disable vertical banding. */ + noVBand?: boolean; + /** Raw table look value. */ + val?: string; +} + +/** + * Floating table positioning properties. + */ +export interface TableFloatingProperties { + /** Distance from left text boundary. */ + leftFromText?: number; + /** Distance from right text boundary. */ + rightFromText?: number; + /** Distance from top text boundary. */ + topFromText?: number; + /** Distance from bottom text boundary. */ + bottomFromText?: number; + /** Horizontal position value. */ + tblpX?: number; + /** Vertical position value. */ + tblpY?: number; + /** Horizontal anchor reference. */ + horzAnchor?: string; + /** Vertical anchor reference. */ + vertAnchor?: string; + /** Horizontal position specifier. */ + tblpXSpec?: string; + /** Vertical position specifier. */ + tblpYSpec?: string; +} + +/** + * Table border properties. + */ +export interface TableBorders { + /** Bottom border definition. */ + bottom?: BorderProperties; + /** End border definition. */ + end?: BorderProperties; + /** Inside horizontal border definition. */ + insideH?: BorderProperties; + /** Inside vertical border definition. */ + insideV?: BorderProperties; + /** Left border definition. */ + left?: BorderProperties; + /** Right border definition. */ + right?: BorderProperties; + /** Start border definition. */ + start?: BorderProperties; + /** Top border definition. */ + top?: BorderProperties; +} + +/** + * Table cell border properties, including diagonal borders. + */ +export interface TableCellBorders { + /** Top border definition. */ + top?: BorderProperties; + /** Start border definition. */ + start?: BorderProperties; + /** Left border definition. */ + left?: BorderProperties; + /** Bottom border definition. */ + bottom?: BorderProperties; + /** End border definition. */ + end?: BorderProperties; + /** Right border definition. */ + right?: BorderProperties; + /** Inside horizontal border definition. */ + insideH?: BorderProperties; + /** Inside vertical border definition. */ + insideV?: BorderProperties; + /** Top-left to bottom-right diagonal border definition. */ + tl2br?: BorderProperties; + /** Top-right to bottom-left diagonal border definition. */ + tr2bl?: BorderProperties; +} + +/** + * Table cell margin properties. + */ +export interface TableCellMargins { + /** Bottom margin properties. */ + marginBottom?: MeasurementProperties; + /** End margin properties. */ + marginEnd?: MeasurementProperties; + /** Left margin properties. */ + marginLeft?: MeasurementProperties; + /** Right margin properties. */ + marginRight?: MeasurementProperties; + /** Start margin properties. */ + marginStart?: MeasurementProperties; + /** Top margin properties. */ + marginTop?: MeasurementProperties; +} + +/** + * Table row properties encoded from w:trPr. + */ +export interface TableRowProperties { + /** Prevent row from splitting across pages. */ + cantSplit: boolean; + /** Conditional formatting properties. */ + cnfStyle?: ParagraphConditionalFormatting; + /** Division identifier value. */ + divId?: string; + /** Grid cells after the row. */ + gridAfter?: number; + /** Grid cells before the row. */ + gridBefore?: number; + /** Hide the row. */ + hidden: boolean; + /** Row justification value. */ + justification?: string; + /** Table cell spacing properties. */ + tableCellSpacing?: MeasurementProperties; + /** Repeat header row flag. */ + repeatHeader: boolean; + /** Row height properties. */ + rowHeight?: TableRowHeight; + /** Width after the row. */ + wAfter?: MeasurementProperties; + /** Width before the row. */ + wBefore?: MeasurementProperties; +} + +/** + * Table row height properties. + */ +export interface TableRowHeight { + /** Row height value. */ + value?: number; + /** Row height rule. */ + rule?: string; +} + +/** + * Table cell properties encoded from w:tcPr. + */ +export interface TableCellProperties { + /** Conditional formatting properties. */ + cnfStyle?: ParagraphConditionalFormatting; + /** Table cell width properties. */ + cellWidth?: MeasurementProperties; + /** Horizontal grid span for the cell. */ + gridSpan?: number; + /** Vertical merge behavior. */ + vMerge?: string; + /** Table cell border properties. */ + borders?: TableCellBorders; + /** Table cell shading properties. */ + shading?: ShadingProperties; + /** Disable wrapping within the cell. */ + noWrap?: boolean; + /** Table cell margin properties. */ + cellMargins?: TableCellMargins; + /** Text direction within the cell. */ + textDirection?: string; + /** Fit text within the cell. */ + tcFitText?: boolean; + /** Vertical alignment within the cell. */ + vAlign?: string; + /** Hide the cell mark. */ + hideMark?: boolean; + /** Header references applied to the cell. */ + headers?: TableHeaderReference[]; +} + +/** + * Header reference entry encoded from w:headers. + */ +export interface TableHeaderReference { + /** Header value. */ + header: string; +} + +/** + * Table style properties encoded from w:tblStylePr. + */ +export interface TableStyleProperties { + /** Table style property type. */ + type?: string; + /** Paragraph properties for the table style. */ + paragraphProperties?: ParagraphProperties; + /** Run properties for the table style. */ + runProperties?: RunProperties; + /** Table properties for the table style. */ + tableProperties?: TableProperties; + /** Table row properties for the table style. */ + tableRowProperties?: TableRowProperties; + /** Table cell properties for the table style. */ + tableCellProperties?: TableCellProperties; +} diff --git a/packages/layout-engine/style-engine/src/ooxml/types.ts b/packages/layout-engine/style-engine/src/ooxml/types.ts new file mode 100644 index 000000000..4e6e82170 --- /dev/null +++ b/packages/layout-engine/style-engine/src/ooxml/types.ts @@ -0,0 +1,475 @@ +/** + * Paragraph properties encoded from the w:pPr translator. + */ +export interface ParagraphProperties { + /** Adjust right indent to avoid running into a right-aligned object. */ + adjustRightInd?: boolean; + /** Automatically add spacing between East Asian and Latin text. */ + autoSpaceDE?: boolean; + /** Automatically add spacing between East Asian and digits. */ + autoSpaceDN?: boolean; + /** Conditional formatting settings for the paragraph. */ + cnfStyle?: ParagraphConditionalFormatting; + /** Use contextual spacing rules for this paragraph. */ + contextualSpacing?: boolean; + /** Division identifier value. */ + divId?: string; + /** Frame properties for the paragraph. */ + framePr?: ParagraphFrameProperties; + /** Indentation properties for the paragraph. */ + indent?: ParagraphIndentation; + /** Paragraph justification value. */ + justification?: string; + /** Keep all lines of this paragraph on the same page. */ + keepLines?: boolean; + /** Keep this paragraph with the next paragraph. */ + keepNext?: boolean; + /** Kinsoku (line breaking) behavior flag. */ + kinsoku?: boolean; + /** Mirror indents for facing pages. */ + mirrorIndents?: boolean; + /** Numbering properties for the paragraph. */ + numberingProperties?: ParagraphNumberingProperties; + /** Outline level for the paragraph. */ + outlineLvl?: number; + /** Allow punctuation to hang in the right margin. */ + overflowPunct?: boolean; + /** Paragraph border definitions. */ + borders?: ParagraphBorders; + /** Paragraph style identifier. */ + styleId?: string; + /** Insert a page break before the paragraph. */ + pageBreakBefore?: boolean; + /** Paragraph shading properties. */ + shading?: ShadingProperties; + /** Snap paragraph line spacing to document grid. */ + snapToGrid?: boolean; + /** Paragraph spacing properties. */ + spacing?: ParagraphSpacing; + /** Suppress automatic hyphenation. */ + suppressAutoHyphens?: boolean; + /** Suppress line numbering for the paragraph. */ + suppressLineNumbers?: boolean; + /** Suppress overlapping of paragraph text with other objects. */ + suppressOverlap?: boolean; + /** Tab stop definitions for the paragraph. */ + tabStops?: ParagraphTabStop[]; + /** Baseline text alignment within the line. */ + textAlignment?: "top" | "center" | "baseline" | "bottom" | "auto"; + /** Text direction for the paragraph. */ + textDirection?: string; + /** Textbox tight wrap setting for the paragraph. */ + textboxTightWrap?: string; + /** Use top line punctuation for the paragraph. */ + topLinePunct?: boolean; + /** Widow/orphan control flag. */ + widowControl?: boolean; + /** Enable word wrapping for the paragraph. */ + wordWrap?: boolean; + /** Run properties applied to the paragraph. */ + runProperties?: RunProperties; + /** Right-to-left paragraph direction flag. */ + rightToLeft?: boolean; +} + +/** + * Conditional formatting properties for a paragraph. + */ +export interface ParagraphConditionalFormatting { + /** Even horizontal band flag. */ + evenHBand?: boolean; + /** Even vertical band flag. */ + evenVBand?: boolean; + /** First column flag. */ + firstColumn?: boolean; + /** First row flag. */ + firstRow?: boolean; + /** First row first column flag. */ + firstRowFirstColumn?: boolean; + /** First row last column flag. */ + firstRowLastColumn?: boolean; + /** Last column flag. */ + lastColumn?: boolean; + /** Last row flag. */ + lastRow?: boolean; + /** Last row first column flag. */ + lastRowFirstColumn?: boolean; + /** Last row last column flag. */ + lastRowLastColumn?: boolean; + /** Odd horizontal band flag. */ + oddHBand?: boolean; + /** Odd vertical band flag. */ + oddVBand?: boolean; + /** Raw conditional formatting value attribute. */ + val?: string; +} + +/** + * Paragraph frame properties. + */ +export interface ParagraphFrameProperties { + /** Lock the anchor for the frame. */ + anchorLock?: boolean; + /** Drop cap style. */ + dropCap?: string; + /** Frame height in twentieths of a point. */ + h?: number; + /** Horizontal anchor type. */ + hAnchor?: string; + /** Height rule for the frame. */ + hRule?: string; + /** Horizontal space around the frame. */ + hSpace?: number; + /** Number of text lines in the frame. */ + lines?: number; + /** Vertical anchor type. */ + vAnchor?: string; + /** Vertical space around the frame. */ + vSpace?: number; + /** Frame width in twentieths of a point. */ + w?: number; + /** Wrapping style for the frame. */ + wrap?: "auto" | "notBeside" | "around" | "tight" | "through" | "none"; + /** Horizontal position. */ + x?: number; + /** Horizontal alignment. */ + xAlign?: string; + /** Vertical position. */ + y?: number; + /** Vertical alignment. */ + yAlign?: string; +} + +/** + * Paragraph indentation properties. + */ +export interface ParagraphIndentation { + /** End indent in twentieths of a point. */ + end?: number; + /** End indent in character units. */ + endChars?: number; + /** First line indent in twentieths of a point. */ + firstLine?: number; + /** First line indent in character units. */ + firstLineChars?: number; + /** Hanging indent in twentieths of a point. */ + hanging?: number; + /** Hanging indent in character units. */ + hangingChars?: number; + /** Left indent in twentieths of a point. */ + left?: number; + /** Left indent in character units. */ + leftChars?: number; + /** Right indent in twentieths of a point. */ + right?: number; + /** Right indent in character units. */ + rightChars?: number; + /** Start indent in twentieths of a point. */ + start?: number; + /** Start indent in character units. */ + startChars?: number; +} + +/** + * Paragraph spacing properties. + */ +export interface ParagraphSpacing { + /** Space after the paragraph in twentieths of a point. */ + after?: number; + /** Auto spacing after the paragraph. */ + afterAutospacing?: boolean; + /** Space after the paragraph in line units. */ + afterLines?: number; + /** Space before the paragraph in twentieths of a point. */ + before?: number; + /** Auto spacing before the paragraph. */ + beforeAutospacing?: boolean; + /** Space before the paragraph in line units. */ + beforeLines?: number; + /** Line spacing value in twentieths of a point. */ + line?: number; + /** Line spacing rule. */ + lineRule?: string; +} + +/** + * Paragraph numbering properties. + */ +export interface ParagraphNumberingProperties { + /** Numbering level. */ + ilvl?: number; + /** Numbering ID. */ + numId?: number; +} + +/** + * Paragraph border collection for each side. + */ +export interface ParagraphBorders { + /** Bar border definition. */ + bar?: BorderProperties; + /** Between border definition. */ + between?: BorderProperties; + /** Bottom border definition. */ + bottom?: BorderProperties; + /** Left border definition. */ + left?: BorderProperties; + /** Right border definition. */ + right?: BorderProperties; + /** Top border definition. */ + top?: BorderProperties; +} + +/** + * Generic border properties used by paragraph and run borders. + */ +export interface BorderProperties { + /** Border style value. */ + val?: string; + /** Border color, including "auto" or a hex color string. */ + color?: string; + /** Theme color reference. */ + themeColor?: string; + /** Theme tint value. */ + themeTint?: string; + /** Theme shade value. */ + themeShade?: string; + /** Border size in eighths of a point. */ + size?: number; + /** Border spacing in points. */ + space?: number; + /** Border shadow flag. */ + shadow?: boolean; + /** Border frame flag. */ + frame?: boolean; +} + +/** + * Shading properties shared by paragraph and run shading. + */ +export interface ShadingProperties { + /** Foreground color. */ + color?: string; + /** Background fill color. */ + fill?: string; + /** Theme foreground color. */ + themeColor?: string; + /** Theme fill color. */ + themeFill?: string; + /** Theme fill shade. */ + themeFillShade?: string; + /** Theme fill tint. */ + themeFillTint?: string; + /** Theme shade value. */ + themeShade?: string; + /** Theme tint value. */ + themeTint?: string; + /** Shading pattern value. */ + val?: string; +} + +/** + * A single tab stop entry in a paragraph. + */ +export interface ParagraphTabStop { + /** Tab stop attributes keyed under the tab name. */ + tab: TabStopProperties; +} + +/** + * Tab stop properties. + */ +export interface TabStopProperties { + /** Tab alignment type. */ + tabType?: string; + /** Tab position in twentieths of a point. */ + pos?: number; + /** Tab leader type. */ + leader?: string; +} + +/** + * Run properties. + */ +export interface RunProperties { + /** Bold formatting flag for complex script. */ + boldCs?: boolean; + /** Bold formatting flag. */ + bold?: boolean; + /** Run border properties. */ + borders?: BorderProperties; + /** Text transform value set by caps. */ + textTransform?: 'uppercase' | 'none'; + /** Run color properties. */ + color?: RunColorProperties; + /** Complex script formatting flag. */ + cs?: boolean; + /** Double strikethrough flag. */ + dstrike?: boolean; + /** East Asian layout properties. */ + eastAsianLayout?: RunEastAsianLayoutProperties; + /** Emphasis mark type. */ + effect?: string; + /** Emphasis mark setting. */ + em?: string; + /** Emboss effect flag. */ + emboss?: boolean; + /** Fit text properties. */ + fitText?: RunFitTextProperties; + /** Font family attributes. */ + fontFamily?: RunFontFamilyProperties; + /** Complex script font size in half-points. */ + fontSizeCs?: number; + /** Font size in half-points. */ + fontSize?: number; + /** Highlight properties. */ + highlight?: HighlightProperties; + /** Imprint effect flag. */ + imprint?: boolean; + /** Italic formatting flag. */ + italic?: boolean; + /** Italic formatting flag for complex script. */ + iCs?: boolean; + /** Kerning value in half-points. */ + kern?: number; + /** Language properties. */ + lang?: RunLangProperties; + /** Letter spacing in twentieths of a point. */ + letterSpacing?: number; + /** Disable proofing flag. */ + noProof?: boolean; + /** Office math flag. */ + oMath?: boolean; + /** Outline effect flag. */ + outline?: boolean; + /** Baseline position adjustment. */ + position?: number; + /** Right-to-left run flag. */ + rtl?: boolean; + /** Run style identifier. */ + styleId?: string; + /** Shadow effect flag. */ + shadow?: boolean; + /** Run shading properties. */ + shading?: ShadingProperties; + /** Small caps flag. */ + smallCaps?: boolean; + /** Snap run spacing to document grid. */ + snapToGrid?: boolean; + /** SpecVanish flag. */ + specVanish?: boolean; + /** Strikethrough flag. */ + strike?: boolean; + /** Underline properties. */ + underline?: UnderlineProperties; + /** Hidden text flag. */ + vanish?: boolean; + /** Vertical alignment setting. */ + vertAlign?: string; + /** Web hidden flag. */ + webHidden?: boolean; + /** Character width setting. */ + w?: string; +} + +/** + * Run color properties. + */ +export interface RunColorProperties { + /** Direct color value. */ + val?: string; + /** Theme color reference. */ + themeColor?: string; + /** Theme tint value. */ + themeTint?: string; + /** Theme shade value. */ + themeShade?: string; +} + +/** + * Run font family properties. + */ +export interface RunFontFamilyProperties { + /** Font hint value. */ + hint?: string; + /** ASCII font name. */ + ascii?: string; + /** High ANSI font name. */ + hAnsi?: string; + /** East Asian font name. */ + eastAsia?: string; + /** Complex script font name. */ + cs?: string; + /** Font name alias. */ + val?: string; + /** ASCII theme font. */ + asciiTheme?: string; + /** High ANSI theme font. */ + hAnsiTheme?: string; + /** East Asian theme font. */ + eastAsiaTheme?: string; + /** Complex script theme font. */ + cstheme?: string; +} + +/** + * East Asian layout properties for a run. + */ +export interface RunEastAsianLayoutProperties { + /** East Asian layout ID. */ + id?: number; + /** Combine characters flag. */ + combine?: boolean; + /** Combine brackets rule. */ + combineBrackets?: string; + /** Vertical text flag. */ + vert?: boolean; + /** Vertical compression flag. */ + vertCompress?: boolean; +} + +/** + * Fit text properties for a run. + */ +export interface RunFitTextProperties { + /** Fit text value. */ + val?: number; + /** Fit text ID. */ + id?: number; +} + +/** + * Language properties for a run. + */ +export interface RunLangProperties { + /** Default language value. */ + val?: string; + /** East Asian language value. */ + eastAsia?: string; + /** Bidi language value. */ + bidi?: string; +} + +/** + * Underline properties encoded as raw OOXML attributes. + */ +export interface UnderlineProperties { + /** Underline type attribute. */ + 'w:val'?: string | null; + /** Underline color attribute. */ + 'w:color'?: string; + /** Underline theme color attribute. */ + 'w:themeColor'?: string; + /** Underline theme tint attribute. */ + 'w:themeTint'?: string; + /** Underline theme shade attribute. */ + 'w:themeShade'?: string; +} + +/** + * Highlight properties encoded as raw OOXML attributes. + */ +export interface HighlightProperties { + /** Highlight value attribute. */ + 'w:val'?: string | null; +} From ae548a064fe093fab04951341e42bf9e04fd7de3 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Thu, 15 Jan 2026 16:49:35 -0300 Subject: [PATCH 54/85] fix: rework list marker tab alignment --- packages/layout-engine/contracts/src/index.ts | 1 + .../painters/dom/src/marker-utils.test.ts | 108 ------ .../painters/dom/src/marker-utils.ts | 47 --- .../painters/dom/src/renderer.ts | 355 +++++------------- 4 files changed, 98 insertions(+), 413 deletions(-) delete mode 100644 packages/layout-engine/painters/dom/src/marker-utils.test.ts delete mode 100644 packages/layout-engine/painters/dom/src/marker-utils.ts diff --git a/packages/layout-engine/contracts/src/index.ts b/packages/layout-engine/contracts/src/index.ts index 2e548aa77..ec9b447f0 100644 --- a/packages/layout-engine/contracts/src/index.ts +++ b/packages/layout-engine/contracts/src/index.ts @@ -1205,6 +1205,7 @@ export type ParagraphAttrs = { tabIntervalTwips?: number; keepNext?: boolean; keepLines?: boolean; + pageBreakBefore?: boolean; trackedChangesMode?: TrackedChangesMode; trackedChangesEnabled?: boolean; /** Marks an empty paragraph that only exists to carry section properties. */ diff --git a/packages/layout-engine/painters/dom/src/marker-utils.test.ts b/packages/layout-engine/painters/dom/src/marker-utils.test.ts deleted file mode 100644 index 5dc7d632d..000000000 --- a/packages/layout-engine/painters/dom/src/marker-utils.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { calculateMarkerLeftPosition } from './marker-utils.js'; - -describe('calculateMarkerLeftPosition', () => { - it('calculates position for standard hanging indent', () => { - // Standard list: left=48, firstLine=0, hanging=48 - // Text starts at: 48 + (0 - 48) = 0px from border edge - // Marker width: 24px - // Marker should start at: 0 - 24 = -24px - const indent = { left: 48, firstLine: 0, hanging: 48 }; - const markerWidth = 24; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(-24); - }); - - it('calculates position for hanging indent at level 1', () => { - // Level 1 list: left=96, firstLine=0, hanging=96 - // Text starts at: 96 + (0 - 96) = 0px from border edge - // Marker width: 24px - // Marker should start at: 0 - 24 = -24px - const indent = { left: 96, firstLine: 0, hanging: 96 }; - const markerWidth = 24; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(-24); - }); - - it('handles first line indent with hanging', () => { - // List with first line indent: left=48, firstLine=24, hanging=48 - // Text starts at: 48 + (24 - 48) = 24px from border edge - // Marker width: 24px - // Marker should start at: 24 - 24 = 0px - const indent = { left: 48, firstLine: 24, hanging: 48 }; - const markerWidth = 24; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(0); - }); - - it('handles missing indent values', () => { - // No indent specified - all values default to 0 - // Text starts at: 0 + (0 - 0) = 0px from border edge - // Marker width: 24px - // Marker should start at: 0 - 24 = -24px - const indent = {}; - const markerWidth = 24; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(-24); - }); - - it('handles undefined indent', () => { - // Undefined indent - all values default to 0 - // Marker should start at: 0 - 24 = -24px - const markerWidth = 24; - const position = calculateMarkerLeftPosition(undefined, markerWidth); - expect(position).toBe(-24); - }); - - it('handles partial indent properties', () => { - // Only left specified: left=48 - // Text starts at: 48 + (0 - 0) = 48px from border edge - // Marker width: 24px - // Marker should start at: 48 - 24 = 24px - const indent = { left: 48 }; - const markerWidth = 24; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(24); - }); - - it('handles zero marker width', () => { - // Standard hanging indent with zero-width marker - const indent = { left: 48, firstLine: 0, hanging: 48 }; - const markerWidth = 0; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(0); - }); - - it('handles larger marker widths', () => { - // Standard hanging indent with larger marker - // Text starts at: 48 + (0 - 48) = 0px from border edge - // Marker width: 48px - // Marker should start at: 0 - 48 = -48px - const indent = { left: 48, firstLine: 0, hanging: 48 }; - const markerWidth = 48; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(-48); - }); - - it('calculates correctly for nested list levels', () => { - // Level 2 list: left=144, firstLine=0, hanging=144 - // Text starts at: 144 + (0 - 144) = 0px from border edge - // Marker width: 24px - // Marker should start at: 0 - 24 = -24px - const indent = { left: 144, firstLine: 0, hanging: 144 }; - const markerWidth = 24; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(-24); - }); - - it('handles positive textIndent scenarios', () => { - // firstLine > hanging: left=48, firstLine=60, hanging=48 - // Text starts at: 48 + (60 - 48) = 60px from border edge - // Marker width: 24px - // Marker should start at: 60 - 24 = 36px - const indent = { left: 48, firstLine: 60, hanging: 48 }; - const markerWidth = 24; - const position = calculateMarkerLeftPosition(indent, markerWidth); - expect(position).toBe(36); - }); -}); diff --git a/packages/layout-engine/painters/dom/src/marker-utils.ts b/packages/layout-engine/painters/dom/src/marker-utils.ts deleted file mode 100644 index 16d0cc16f..000000000 --- a/packages/layout-engine/painters/dom/src/marker-utils.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Calculates the CSS left position for a list marker element. - * - * Markers are positioned absolutely within a fragment that has paddingLeft and textIndent. - * The calculation ensures the marker box ends where the first line text begins. - * - * In Word-style lists: - * - Fragment has paddingLeft = indent.left (the hanging indent value) - * - Fragment has textIndent = firstLine - hanging (usually negative to outdent first line) - * - First line text starts at: paddingLeft + textIndent from the border edge - * - Marker should end just before the text starts - * - * Since CSS absolute positioning is relative to the padding edge, we calculate: - * markerLeft = textStartOffset - markerWidth - * - * Where textStartOffset = paddingLeft + (firstLine - hanging) - * - * @param indent - Paragraph indent properties - * @param markerWidth - Width of the marker box in pixels - * @returns CSS left position in pixels (typically negative) - * - * @example - * // Standard hanging indent list (left=48px, firstLine=0, hanging=48px) - * // Text starts at: 48 + (0 - 48) = 0px from border edge - * // Marker ends at 0px, so starts at: 0 - 24 = -24px - * calculateMarkerLeftPosition({ left: 48, firstLine: 0, hanging: 48 }, 24) - * // Returns: -24 - * - * @example - * // List with additional first line indent (left=48, firstLine=24, hanging=48px) - * // Text starts at: 48 + (24 - 48) = 24px from border edge - * // Marker ends at 24px, so starts at: 24 - 24 = 0px - * calculateMarkerLeftPosition({ left: 48, firstLine: 24, hanging: 48 }, 24) - * // Returns: 0 - */ -export const calculateMarkerLeftPosition = ( - indent: { left?: number; firstLine?: number; hanging?: number } | undefined, - markerWidth: number, -): number => { - const paddingLeft = indent?.left ?? 0; - const firstLine = indent?.firstLine ?? 0; - const hanging = indent?.hanging ?? 0; - const textIndent = firstLine - hanging; - const textStartOffset = paddingLeft + textIndent; - - return textStartOffset - markerWidth; -}; diff --git a/packages/layout-engine/painters/dom/src/renderer.ts b/packages/layout-engine/painters/dom/src/renderer.ts index 5636bb845..eb403dc60 100644 --- a/packages/layout-engine/painters/dom/src/renderer.ts +++ b/packages/layout-engine/painters/dom/src/renderer.ts @@ -1968,7 +1968,7 @@ export class DomPainter { // Otherwise, fall back to slicing from the original measure. const lines = fragment.lines ?? measure.lines.slice(fragment.fromLine, fragment.toLine); - applyParagraphBlockStyles(fragmentEl, block.attrs, { includeBorders: false, includeShading: false }); + applyParagraphBlockStyles(fragmentEl, block.attrs); const { shadingLayer, borderLayer } = createParagraphDecorationLayers(this.doc, fragment.width, block.attrs); if (shadingLayer) { fragmentEl.appendChild(shadingLayer); @@ -2005,7 +2005,7 @@ export class DomPainter { const paraIndent = block.attrs?.indent; const paraIndentLeft = paraIndent?.left ?? 0; const paraIndentRight = paraIndent?.right ?? 0; - // Word quirk: justified paragraphs ignore first-line indent. The pm-adapter sets + // Word quirk: justified paragraphs ignore first-line indent. The pm-adapter sets // => This is not true // suppressFirstLineIndent=true for these cases. const suppressFirstLineIndent = (block.attrs as Record)?.suppressFirstLineIndent === true; const firstLineOffset = suppressFirstLineIndent ? 0 : (paraIndent?.firstLine ?? 0) - (paraIndent?.hanging ?? 0); @@ -2017,90 +2017,38 @@ export class DomPainter { const lastRun = block.runs.length > 0 ? block.runs[block.runs.length - 1] : null; const paragraphEndsWithLineBreak = lastRun?.kind === 'lineBreak'; + // Pre-calculate actual marker+tab inline width for list first lines. // The measurer uses textStartPx to calculate line.maxWidth, but the painter renders // marker+tab as inline elements that may consume MORE space than textStartPx indicates. // This causes justify overflow when line.maxWidth > (fragment.width - actualMarkerTabWidth). - let listFirstLineMarkerTabWidth: number | undefined; + let listFirstLineMarkerTabEndPx: number | null = null; + let listTabWidth = 0; + let markerStartPos: number; if (!fragment.continuesFromPrev && fragment.markerWidth && wordLayout?.marker) { - // IMPORTANT: Use the same markerTextWidth source as the marker rendering section (lines ~1997-2000) - // to ensure the pre-calculated width matches the actual rendered width. - const markerBoxWidth = fragment.markerWidth; - const markerTextWidth = - fragment.markerTextWidth != null && isFinite(fragment.markerTextWidth) && fragment.markerTextWidth >= 0 - ? fragment.markerTextWidth - : markerBoxWidth; + const markerTextWidth = fragment.markerTextWidth!; + const anchorPoint = paraIndentLeft - (paraIndent?.hanging ?? 0) + (paraIndent?.firstLine ?? 0); + const markerJustification = wordLayout.marker.justification ?? 'left'; + let currentPos: number; + if (markerJustification === 'left') { + markerStartPos = anchorPoint; + currentPos = markerStartPos + markerTextWidth; + } else if (markerJustification === 'right') { + markerStartPos = anchorPoint - markerTextWidth; + currentPos = anchorPoint; + } else { + markerStartPos = anchorPoint - markerTextWidth / 2; + currentPos = markerStartPos + markerTextWidth; + } // Calculate tab width using same logic as marker rendering section const suffix = wordLayout.marker.suffix ?? 'tab'; if (suffix === 'tab') { - const markerJustification = wordLayout.marker.justification ?? 'left'; - const isFirstLineIndentMode = wordLayout.firstLineIndentMode === true; - - // IMPORTANT: Must match the render section's logic (lines ~2009-2023). - // markerX is ONLY used when isFirstLineIndentMode is true. - let markerStartPos: number; - if ( - isFirstLineIndentMode && - wordLayout.marker.markerX !== undefined && - Number.isFinite(wordLayout.marker.markerX) - ) { - markerStartPos = wordLayout.marker.markerX; - } else { - const hanging = paraIndent?.hanging ?? 0; - const firstLine = paraIndent?.firstLine ?? 0; - markerStartPos = paraIndentLeft - hanging + firstLine; - } - const validMarkerStartPos = Number.isFinite(markerStartPos) ? markerStartPos : 0; - - let tabWidth: number; - if (markerJustification === 'left') { - const currentPos = validMarkerStartPos + markerTextWidth; - - if (isFirstLineIndentMode) { - const textStartTarget = - wordLayout.marker.textStartX !== undefined && Number.isFinite(wordLayout.marker.textStartX) - ? wordLayout.marker.textStartX - : wordLayout.textStartPx; - if (textStartTarget !== undefined && Number.isFinite(textStartTarget) && textStartTarget > currentPos) { - tabWidth = textStartTarget - currentPos; - } else { - tabWidth = LIST_MARKER_GAP; - } - } else { - // Standard hanging mode - const firstLine = paraIndent?.firstLine ?? 0; - const textStart = paraIndentLeft + firstLine; - tabWidth = textStart - currentPos; - if (tabWidth <= 0) { - tabWidth = DEFAULT_TAB_INTERVAL_PX - (currentPos % DEFAULT_TAB_INTERVAL_PX); - } else if (tabWidth < LIST_MARKER_GAP) { - tabWidth = LIST_MARKER_GAP; - } - } - } else { - // Non-left justified markers use gutter width - const gutterWidth = fragment.markerGutter ?? wordLayout.marker.gutterWidthPx; - tabWidth = - gutterWidth !== undefined && Number.isFinite(gutterWidth) && gutterWidth > 0 - ? gutterWidth - : LIST_MARKER_GAP; - } - if (tabWidth < LIST_MARKER_GAP) { - tabWidth = LIST_MARKER_GAP; - } - // textStartX is where text actually starts (from fragment's left edge) - // This must include markerStartPos to match measurer's calculation - listFirstLineMarkerTabWidth = validMarkerStartPos + markerTextWidth + tabWidth; + listTabWidth = computeTabWidth(currentPos, markerJustification, wordLayout.tabsPx, paraIndent?.hanging, paraIndent?.firstLine, paraIndentLeft); } else if (suffix === 'space') { - // Space suffix: marker + ~4px for the non-breaking space - // Need to include markerStartPos here too - const hanging = paraIndent?.hanging ?? 0; - const firstLine = paraIndent?.firstLine ?? 0; - const markerStartPos = paraIndentLeft - hanging + firstLine; - const validMarkerStartPos = Number.isFinite(markerStartPos) ? markerStartPos : 0; - listFirstLineMarkerTabWidth = validMarkerStartPos + markerTextWidth + 4; + listTabWidth = 4; } + listFirstLineMarkerTabEndPx = currentPos + listTabWidth; } lines.forEach((line, index) => { @@ -2120,8 +2068,8 @@ export class DomPainter { // Must also subtract paraIndentRight to match measurer's calculation: // initialAvailableWidth = maxWidth - textStartPx - indentRight // Only subtract positive paraIndentRight - negative indents already expand fragment.width - if (index === 0 && listFirstLineMarkerTabWidth != null) { - availableWidthOverride = fragment.width - listFirstLineMarkerTabWidth - Math.max(0, paraIndentRight); + if (index === 0 && listFirstLineMarkerTabEndPx != null) { + availableWidthOverride = fragment.width - listFirstLineMarkerTabEndPx - Math.max(0, paraIndentRight); } // Determine if this is the true last line of the paragraph that should skip justification. @@ -2147,7 +2095,7 @@ export class DomPainter { // List first lines handle indentation via marker positioning and tab stops, // not CSS padding/text-indent. This matches Word's rendering model. const isListFirstLine = - index === 0 && !fragment.continuesFromPrev && fragment.markerWidth && wordLayout?.marker; + index === 0 && !fragment.continuesFromPrev && fragment.markerWidth && fragment.markerTextWidth && wordLayout?.marker; /** * Determines if this line contains segments with explicit X positioning (typically from tabs). @@ -2239,33 +2187,10 @@ export class DomPainter { lineEl.style.textIndent = '0px'; } - if (isListFirstLine && wordLayout?.marker && fragment.markerWidth) { - // Position marker based on indent pattern: - // - FirstLine mode: use pre-calculated markerX from word-layout (essential because - // paraIndent may have style overrides that zero out firstLine) - // - Standard hanging: calculate from paraIndent (works because hanging isn't overridden) - const isFirstLineIndentMode = wordLayout.firstLineIndentMode === true; - - let markerStartPos: number; - if ( - isFirstLineIndentMode && - wordLayout.marker.markerX !== undefined && - Number.isFinite(wordLayout.marker.markerX) - ) { - // FirstLine mode: use pre-calculated marker position from word-layout - markerStartPos = wordLayout.marker.markerX; - } else { - // OOXML marker position: left - hanging + firstLine - // - hanging: outdents the first line (marker moves left) - // - firstLine: indents the first line (marker moves right) - const hanging = paraIndent?.hanging ?? 0; - const firstLine = paraIndent?.firstLine ?? 0; - markerStartPos = paraIndentLeft - hanging + firstLine; - } + if (isListFirstLine) { - // Validate markerStartPos to handle NaN/Infinity values gracefully - const validMarkerStartPos = Number.isFinite(markerStartPos) ? markerStartPos : 0; - lineEl.style.paddingLeft = `${validMarkerStartPos}px`; + const marker = wordLayout.marker!; + lineEl.style.paddingLeft = `${paraIndentLeft + (paraIndent?.firstLine ?? 0) - (paraIndent?.hanging ?? 0)}px`; // HERE CONTROLS WHERE TAB STARTS - I think this will vary with justification const markerContainer = this.doc!.createElement('span'); markerContainer.style.display = 'inline-block'; @@ -2276,171 +2201,45 @@ export class DomPainter { const markerEl = this.doc!.createElement('span'); markerEl.classList.add('superdoc-paragraph-marker'); - markerEl.textContent = wordLayout.marker.markerText ?? ''; + markerEl.textContent = marker.markerText ?? ''; markerEl.style.pointerEvents = 'none'; // Left-justified markers stay inline to share flow with the tab spacer. // Other justifications use absolute positioning. - const markerJustification = wordLayout.marker.justification ?? 'left'; - - // For left-justified markers, don't set a fixed width - let the text flow naturally - // and the tab will fill to the next tab stop. For other justifications, use the - // box width for alignment purposes. - if (markerJustification !== 'left') { - markerEl.style.width = `${fragment.markerWidth}px`; - markerEl.style.textAlign = wordLayout.marker.justification ?? 'right'; - markerEl.style.paddingRight = `${LIST_MARKER_GAP}px`; - } - if (markerJustification === 'left') { - markerContainer.style.position = 'relative'; - } else { - // For right/center-justified markers, position relative to the first-line start. - // First-line starts at: left - hanging + firstLine (same as markerStartPos). - // The marker's right edge aligns near this position. - // Using validMarkerStartPos ensures consistent alignment with left-justified markers. - const markerLeftX = validMarkerStartPos - fragment.markerWidth; + const markerJustification = marker.justification ?? 'left'; + + markerContainer.style.position = 'relative'; + if (markerJustification === 'right') { markerContainer.style.position = 'absolute'; - markerContainer.style.left = `${markerLeftX}px`; - markerContainer.style.top = '0'; + markerContainer.style.left = `${markerStartPos}px`; // HERE CONTROLS MARKER POSITION - I think this will vary with justification + } else if (markerJustification === 'center') { + markerContainer.style.position = 'absolute'; + markerContainer.style.left = `${markerStartPos - fragment.markerTextWidth!/2}px`; // HERE CONTROLS MARKER POSITION - I think this will vary with justification + lineEl.style.paddingLeft = parseFloat(lineEl.style.paddingLeft) + fragment.markerTextWidth!/2 + 'px'; } // Apply marker run styling with font fallback chain markerEl.style.fontFamily = - toCssFontFamily(wordLayout.marker.run.fontFamily) ?? wordLayout.marker.run.fontFamily; - markerEl.style.fontSize = `${wordLayout.marker.run.fontSize}px`; - markerEl.style.fontWeight = wordLayout.marker.run.bold ? 'bold' : ''; - markerEl.style.fontStyle = wordLayout.marker.run.italic ? 'italic' : ''; - if (wordLayout.marker.run.color) { - markerEl.style.color = wordLayout.marker.run.color; + toCssFontFamily(marker.run.fontFamily) ?? marker.run.fontFamily; + markerEl.style.fontSize = `${marker.run.fontSize}px`; + markerEl.style.fontWeight = marker.run.bold ? 'bold' : ''; + markerEl.style.fontStyle = marker.run.italic ? 'italic' : ''; + if (marker.run.color) { + markerEl.style.color = marker.run.color; } - if (wordLayout.marker.run.letterSpacing != null) { - markerEl.style.letterSpacing = `${wordLayout.marker.run.letterSpacing}px`; + if (marker.run.letterSpacing != null) { + markerEl.style.letterSpacing = `${marker.run.letterSpacing}px`; } markerContainer.appendChild(markerEl); - const suffix = wordLayout.marker.suffix ?? 'tab'; + const suffix = marker.suffix ?? 'tab'; if (suffix === 'tab') { const tabEl = this.doc!.createElement('span'); tabEl.className = 'superdoc-tab'; tabEl.innerHTML = ' '; - - /** - * Calculate the tab width to align the paragraph text after the list marker. - * - * For left-justified markers: - * - Word places an implicit tab stop at indentLeft (where continuation lines align). - * - The tab width is calculated to reach this implicit stop from the current position. - * - If the marker extends past the implicit stop, we advance to the next default tab - * interval (48px = 0.5 inch at 96 DPI), matching Word's behavior. - * - * For right-justified or centered markers: - * - Use the gutter width from the layout measurement (fragment.markerGutter or - * wordLayout.marker.gutterWidthPx). - * - This gutter value is pre-calculated during measurement to match Word's spacing. - * - Falls back to LIST_MARKER_GAP if gutter is not available. - * - * This ensures list marker alignment matches Word and super-editor rendering exactly. - */ - let tabWidth: number; - const markerBoxWidth = fragment.markerWidth; - // Use actual marker text width for position calculation (not box width) - // This matches Word's behavior where tabs extend from the end of the marker text - // Validate that markerTextWidth is a valid positive number before using it - const markerTextWidth = - fragment.markerTextWidth != null && isFinite(fragment.markerTextWidth) && fragment.markerTextWidth >= 0 - ? fragment.markerTextWidth - : markerBoxWidth; - - if ((wordLayout.marker.justification ?? 'left') === 'left') { - const currentPos = validMarkerStartPos + markerTextWidth; - - if (isFirstLineIndentMode) { - // FirstLine pattern: find the appropriate tab stop for text alignment. - // Priority: - // 1. First explicit tab stop past currentPos - // 2. marker.textStartX (pre-calculated, consistent with marker.markerX) - // 3. textStartPx from word-layout - // 4. Minimum gap (LIST_MARKER_GAP) to ensure some separation - - // Check for explicit tab stops past current position - const explicitTabs = wordLayout.tabsPx; - let targetTabStop: number | undefined; - - if (Array.isArray(explicitTabs) && explicitTabs.length > 0) { - // Find the first tab stop that's past the current position - for (const tab of explicitTabs) { - if (typeof tab === 'number' && tab > currentPos) { - targetTabStop = tab; - break; - } - } - } - - // Get text start position - prefer marker.textStartX as it's consistent with markerX - const textStartTarget = - wordLayout.marker.textStartX !== undefined && Number.isFinite(wordLayout.marker.textStartX) - ? wordLayout.marker.textStartX - : wordLayout.textStartPx; - - if (targetTabStop !== undefined) { - // Use explicit tab stop - tabWidth = targetTabStop - currentPos; - } else if ( - textStartTarget !== undefined && - Number.isFinite(textStartTarget) && - textStartTarget > currentPos - ) { - // Use pre-calculated text start position - tabWidth = textStartTarget - currentPos; - } else { - // Fallback: use minimum gap - tabWidth = LIST_MARKER_GAP; - } - - // Ensure minimum gap for readability - if (tabWidth < LIST_MARKER_GAP) { - tabWidth = LIST_MARKER_GAP; - } - } else { - // Standard hanging mode: tab fills from marker end to text start position. - // In OOXML: - // - markerStartPos = left - hanging + firstLine - // - currentPos = markerStartPos + markerTextWidth - // - textStart = left + firstLine (where first-line text begins) - // - tabWidth = textStart - currentPos = hanging - markerTextWidth - // This positions text correctly at `left + firstLine` regardless of marker width. - const firstLine = paraIndent?.firstLine ?? 0; - const textStart = paraIndentLeft + firstLine; - tabWidth = textStart - currentPos; - - // If marker extends past implicit tab stop (negative/zero tabWidth), - // advance to next default 48px tab interval, matching Word behavior. - if (tabWidth <= 0) { - tabWidth = DEFAULT_TAB_INTERVAL_PX - (currentPos % DEFAULT_TAB_INTERVAL_PX); - } else if (tabWidth < LIST_MARKER_GAP) { - tabWidth = LIST_MARKER_GAP; - } - } - } else { - // For non-left justified markers (right/center), use the pre-calculated gutter width - // from layout measurement, which matches Word's spacing exactly. - const gutterWidth = fragment.markerGutter ?? wordLayout.marker.gutterWidthPx; - if (gutterWidth !== undefined && Number.isFinite(gutterWidth) && gutterWidth > 0) { - tabWidth = gutterWidth; - } else { - // Fallback: calculate from positions - const firstLine = paraIndent?.firstLine ?? 0; - const textStart = paraIndentLeft + firstLine; - tabWidth = textStart - validMarkerStartPos; - } - if (tabWidth < LIST_MARKER_GAP) { - tabWidth = LIST_MARKER_GAP; - } - } - tabEl.style.display = 'inline-block'; tabEl.style.wordSpacing = '0px'; - tabEl.style.width = `${tabWidth}px`; + tabEl.style.width = `${listTabWidth}px`; lineEl.prepend(tabEl); } else if (suffix === 'space') { @@ -2647,7 +2446,7 @@ export class DomPainter { const lines = itemMeasure.paragraph.lines.slice(fragment.fromLine, fragment.toLine); // Track B: preserve indent for wordLayout-based lists to show hierarchy const contentAttrs = wordLayout ? item.paragraph.attrs : stripListIndent(item.paragraph.attrs); - applyParagraphBlockStyles(contentEl, contentAttrs, { includeBorders: false, includeShading: false }); + applyParagraphBlockStyles(contentEl, contentAttrs); const { shadingLayer, borderLayer } = createParagraphDecorationLayers(this.doc, fragment.width, contentAttrs); if (shadingLayer) { contentEl.appendChild(shadingLayer); @@ -5969,7 +5768,6 @@ export const applyRunDataAttributes = (element: HTMLElement, dataAttrs?: Record< const applyParagraphBlockStyles = ( element: HTMLElement, attrs?: ParagraphAttrs, - options: { includeBorders?: boolean; includeShading?: boolean } = {}, ): void => { if (!attrs) return; if (attrs.styleId) { @@ -6002,12 +5800,6 @@ const applyParagraphBlockStyles = ( } } } - if (options.includeBorders ?? true) { - applyParagraphBorderStyles(element, attrs.borders); - } - if (options.includeShading ?? true) { - applyParagraphShadingStyles(element, attrs.shading); - } }; const getParagraphBorderBox = ( @@ -6300,3 +6092,50 @@ const resolveRunText = (run: Run, context: FragmentRenderContext): string => { } return run.text ?? ''; }; + +const computeTabWidth = (currentPos: number, justification: string, tabs: number[] | undefined, hangingIndent: number | undefined, firstLineIndent: number | undefined, leftIndent: number): number => { + const nextDefaultTabStop = currentPos + DEFAULT_TAB_INTERVAL_PX - (currentPos % DEFAULT_TAB_INTERVAL_PX); + let tabWidth: number; + if ((justification ?? 'left') === 'left') { + // Check for explicit tab stops past current position + const explicitTabs = [...(tabs ?? [])]; + if (hangingIndent && hangingIndent > 0) { + // Account for hanging indent by adding an implicit tab stop at (left + hanging) + const implicitTabPos = leftIndent; // paraIndentLeft already accounts for hanging + explicitTabs.push(implicitTabPos); + // Sort tab stops to maintain order + explicitTabs.sort((a, b) => { + if (typeof a === 'number' && typeof b === 'number') { + return a - b; + } + return 0; + }); + } + let targetTabStop: number | undefined; + + if (Array.isArray(explicitTabs) && explicitTabs.length > 0) { + // Find the first tab stop that's past the current position + for (const tab of explicitTabs) { + if (typeof tab === 'number' && tab > currentPos) { + targetTabStop = tab; + break; + } + } + } + + if (targetTabStop === undefined) { + // advance to next default 48px tab interval, matching Word behavior. + targetTabStop = nextDefaultTabStop; + } + tabWidth = targetTabStop - currentPos; + } else if (justification === 'right') { + if (firstLineIndent != null && firstLineIndent > 0) { + tabWidth = nextDefaultTabStop - currentPos; + } else { + tabWidth = hangingIndent ?? 0; + } + } else { + tabWidth = nextDefaultTabStop - currentPos; + } + return tabWidth; +} From 5c4d1f63665efec4e26ad1052cd3594c29181fdb Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Thu, 15 Jan 2026 16:51:17 -0300 Subject: [PATCH 55/85] refactor: simplify list layout inputs and drop marker utils --- packages/word-layout/src/index.ts | 277 +----- packages/word-layout/src/marker-utils.ts | 339 ------- packages/word-layout/src/types.ts | 58 +- .../word-layout/tests/marker-utils.test.ts | 876 ------------------ 4 files changed, 51 insertions(+), 1499 deletions(-) delete mode 100644 packages/word-layout/tests/marker-utils.test.ts diff --git a/packages/word-layout/src/index.ts b/packages/word-layout/src/index.ts index 767ece749..5aef6ad46 100644 --- a/packages/word-layout/src/index.ts +++ b/packages/word-layout/src/index.ts @@ -5,17 +5,11 @@ */ import type { - DocDefaults, - ParagraphIndent, - ResolveMarkerRunPropsInput, - ResolvedNumberingProperties, - ResolvedRunProperties, WordParagraphLayoutInput, WordParagraphLayoutOutput, - WordListMarkerLayout, WordListSuffix, } from './types.js'; -import { buildFontCss, DEFAULT_LIST_HANGING_PX, formatMarkerText, LIST_MARKER_GAP } from './marker-utils.js'; +import { DEFAULT_LIST_HANGING_PX, LIST_MARKER_GAP } from './marker-utils.js'; import { twipsToPixels } from './unit-conversions.js'; export * from './types.js'; @@ -36,7 +30,7 @@ export { pointsToHalfPoints, } from './unit-conversions.js'; -export { buildFontCss, LIST_MARKER_GAP, DEFAULT_LIST_HANGING_PX } from './marker-utils.js'; +export { LIST_MARKER_GAP, DEFAULT_LIST_HANGING_PX } from './marker-utils.js'; export type { NumberingFormat } from './marker-utils.js'; /** @@ -94,16 +88,17 @@ export type { NumberingFormat } from './marker-utils.js'; * ``` */ export function computeWordParagraphLayout(input: WordParagraphLayoutInput): WordParagraphLayoutOutput { - const { paragraph, docDefaults, measurement } = input; - const numbering = (input.numbering ?? paragraph.numberingProperties) || null; - const indent = mergeIndent(docDefaults, paragraph.indent); - const tabs = Array.isArray(paragraph.tabs) ? paragraph.tabs : []; + const { paragraph, markerRun, listRenderingAttrs } = input; - const indentLeftPx = indent.left ?? 0; - const hangingPxRaw = indent.hanging ?? (indent.firstLine != null && indent.firstLine < 0 ? -indent.firstLine : 0); - const firstLinePx = indent.firstLine; - const defaultTabIntervalPx = resolveDefaultTabIntervalPx(paragraph.tabIntervalTwips, docDefaults); - const tabsPx = tabs.map((tab) => tab.position); + const layout: WordParagraphLayoutOutput = { + indentLeftPx: paragraph.indent?.left ?? 0, + hangingPx: paragraph.indent?.hanging ?? 0, + firstLinePx: paragraph.indent?.firstLine, + tabsPx: paragraph.tabs?.map((tab) => twipsToPixels(tab.pos)) ?? [], + textStartPx: paragraph.indent?.left ?? 0, + marker: undefined, + defaultTabIntervalPx: paragraph.tabIntervalTwips, + }; // Detect "firstLine indent" pattern: OOXML allows lists to use firstLine instead of hanging. // Standard: left=720, hanging=720 (marker hangs back to position 0) @@ -111,252 +106,46 @@ export function computeWordParagraphLayout(input: WordParagraphLayoutInput): Wor // Per OOXML spec, firstLine and hanging are mutually exclusive. // Validate that firstLine is a finite number to handle NaN, Infinity, and -Infinity gracefully. const hasFirstLineIndent = - indent.firstLine != null && Number.isFinite(indent.firstLine) && indent.firstLine > 0 && !indent.hanging; - - const layout: WordParagraphLayoutOutput = { - indentLeftPx, - hangingPx: Math.max(hangingPxRaw, 0), - firstLinePx, - tabsPx, - textStartPx: indentLeftPx, - marker: undefined, - resolvedIndent: indent, - resolvedTabs: tabs, - defaultTabIntervalPx, - }; - - if (!numbering) { - return layout; - } - - const markerRun = - input.markerRun ?? - resolveMarkerRunProperties({ - inlineMarkerRpr: paragraph.numberingProperties?.resolvedMarkerRpr, - resolvedParagraphProps: paragraph, - numbering, - docDefaults, - cached: numbering.resolvedMarkerRpr, - }); - - const markerText = numbering.markerText ?? formatMarkerText(numbering); - const glyphWidthPx = - measurement?.measureText && markerText - ? measurement.measureText(markerText, buildFontCss(markerRun), { letterSpacing: markerRun.letterSpacing }) - : undefined; + paragraph.indent?.firstLine != null && Number.isFinite(paragraph.indent.firstLine) && paragraph.indent.firstLine > 0 && !paragraph.indent.hanging; let markerBoxWidthPx: number; let markerX: number; - if (hasFirstLineIndent) { // FirstLine pattern: marker at (left + firstLine), text follows inline - markerBoxWidthPx = - glyphWidthPx != null && glyphWidthPx > 0 ? glyphWidthPx + LIST_MARKER_GAP : DEFAULT_LIST_HANGING_PX; - markerX = indentLeftPx + (firstLinePx ?? 0); + markerBoxWidthPx = DEFAULT_LIST_HANGING_PX; + markerX = layout.indentLeftPx + (layout.firstLinePx ?? 0); layout.textStartPx = markerX + markerBoxWidthPx; layout.hangingPx = 0; layout.firstLineIndentMode = true; } else { - // Standard hanging pattern: marker hangs back from left indent - markerBoxWidthPx = resolveMarkerBoxWidth(hangingPxRaw, glyphWidthPx); - markerX = indentLeftPx - markerBoxWidthPx; + if (layout.hangingPx === 0) { + markerBoxWidthPx = DEFAULT_LIST_HANGING_PX; + } else { + markerBoxWidthPx = layout.hangingPx; + } + markerX = layout.indentLeftPx - markerBoxWidthPx; layout.hangingPx = markerBoxWidthPx; } - layout.marker = buildMarkerLayout({ - numbering, - markerText, - markerRun, - glyphWidthPx, - textStartPx: layout.textStartPx, - markerBoxWidthPx, - markerX, - }); + layout.marker = { + markerText: listRenderingAttrs.markerText, + // markerBoxWidthPx: markerBoxWidthPx + 1000, + // markerX, + // textStartX: layout.textStartPx, + // Gutter is the small gap between marker and text, not the full marker box width + // gutterWidthPx: LIST_MARKER_GAP, + justification: listRenderingAttrs.justification ?? 'left', + suffix: normalizeSuffix(listRenderingAttrs.suffix), + run: markerRun, + }; return layout; } -/** - * Resolves the final run properties for a list marker by merging defaults, document defaults, - * numbering level properties, and inline overrides. - * - * This function implements a layered property resolution system where each layer can override - * properties from the previous layer. The resolution order is: - * 1. Base defaults (Times New Roman, 12pt, black) - * 2. Document defaults - * 3. Numbering level resolved properties - * 4. Inline marker properties - * - * @param input - The marker run properties input containing various property layers - * @param input.inlineMarkerRpr - Inline marker run properties that take highest precedence - * @param input.resolvedParagraphProps - The resolved paragraph properties - * @param input.numbering - The numbering properties that may contain marker styling - * @param input.docDefaults - Document-wide default run properties - * @param input.cached - Cached resolved properties to avoid recalculation - * - * @returns The fully resolved run properties for the marker, including font, size, color, and styling - * - * @example - * ```typescript - * const markerProps = resolveMarkerRunProperties({ - * inlineMarkerRpr: { fontFamily: 'Roboto', bold: true }, - * resolvedParagraphProps: { indent: {} }, - * numbering: null, - * docDefaults: { run: { fontSize: 14, color: '#333333' } } - * }); - * - * console.log(markerProps.fontFamily); // "Roboto" - * console.log(markerProps.fontSize); // 14 - * console.log(markerProps.bold); // true - * ``` - */ -export function resolveMarkerRunProperties(input: ResolveMarkerRunPropsInput): ResolvedRunProperties { - if (input.cached) { - return input.cached; - } - - const numberingResolved = - input.numbering?.resolvedMarkerRpr || input.resolvedParagraphProps.numberingProperties?.resolvedMarkerRpr; - - const result = mergeRunProperties( - DEFAULT_MARKER_RUN, - input.docDefaults.run, - numberingResolved, - input.inlineMarkerRpr, - ); - - return result; -} - -const DEFAULT_MARKER_RUN: ResolvedRunProperties = { - fontFamily: 'Times New Roman', - fontSize: 12, - color: '#000000', -}; - -const mergeRunProperties = ( - ...layers: Array | null | undefined> -): ResolvedRunProperties => { - const result: ResolvedRunProperties = { ...DEFAULT_MARKER_RUN }; - - const applyLayer = (layer?: Partial | null) => { - if (!layer) return; - for (const [key, value] of Object.entries(layer)) { - if (value == null) continue; - - // Validate key is a valid property - if (!isValidRunPropertyKey(key)) continue; - - const typedKey = key as keyof ResolvedRunProperties; - if (typeof value === 'object' && !Array.isArray(value)) { - const current = result[typedKey]; - const next = - typeof current === 'object' && current != null - ? { ...(current as Record), ...(value as Record) } - : { ...(value as Record) }; - (result as Record)[typedKey as string] = next; - } else { - (result as Record)[typedKey as string] = value; - } - } - }; - - const isValidRunPropertyKey = (key: string): key is keyof ResolvedRunProperties => { - const validKeys: Array = [ - 'fontFamily', - 'fontSize', - 'bold', - 'italic', - 'underline', - 'strike', - 'color', - 'highlight', - 'smallCaps', - 'allCaps', - 'baselineShift', - 'letterSpacing', - 'scale', - 'lang', - ]; - return validKeys.includes(key as keyof ResolvedRunProperties); - }; - - for (const layer of layers) { - applyLayer(layer); - } - - return result; -}; - -const mergeIndent = (docDefaults: DocDefaults, paragraphIndent?: ParagraphIndent | null): ParagraphIndent => { - const base = docDefaults.paragraph?.indent ?? {}; - return { - ...base, - ...(paragraphIndent ?? {}), - }; -}; - -const resolveDefaultTabIntervalPx = ( - paragraphIntervalTwips: number | undefined, - docDefaults: DocDefaults, -): number | undefined => { - if (Number.isFinite(paragraphIntervalTwips)) { - return twipsToPixels(paragraphIntervalTwips); - } - if (Number.isFinite(docDefaults.defaultTabIntervalTwips)) { - return twipsToPixels(docDefaults.defaultTabIntervalTwips); - } - return undefined; -}; - -const resolveMarkerBoxWidth = (hangingPxRaw: number, glyphWidthPx?: number): number => { - let markerBox = Math.max(hangingPxRaw || 0, 0); - if (markerBox <= 0) { - if (glyphWidthPx != null && glyphWidthPx > 0) { - markerBox = glyphWidthPx + LIST_MARKER_GAP; - } else { - markerBox = DEFAULT_LIST_HANGING_PX; - } - } else if (glyphWidthPx != null && glyphWidthPx + LIST_MARKER_GAP > markerBox) { - markerBox = glyphWidthPx + LIST_MARKER_GAP; - } - return markerBox; -}; - -const buildMarkerLayout = ({ - numbering, - markerText, - markerRun, - glyphWidthPx, - textStartPx, - markerBoxWidthPx, - markerX, -}: { - numbering: ResolvedNumberingProperties; - markerText: string; - markerRun: ResolvedRunProperties; - glyphWidthPx?: number; - textStartPx: number; - markerBoxWidthPx: number; - markerX: number; -}): WordListMarkerLayout => ({ - markerText, - glyphWidthPx, - markerBoxWidthPx, - markerX, - textStartX: textStartPx, - baselineOffsetPx: markerRun.baselineShift ?? 0, - // Gutter is the small gap between marker and text, not the full marker box width - gutterWidthPx: LIST_MARKER_GAP, - justification: numbering.lvlJc ?? 'left', - suffix: normalizeSuffix(numbering.suffix) ?? 'tab', - run: markerRun, - path: numbering.path, -}); const normalizeSuffix = (suffix?: string | null): WordListSuffix => { if (suffix === 'tab' || suffix === 'space' || suffix === 'nothing') { return suffix; } - return undefined; + return 'tab'; }; diff --git a/packages/word-layout/src/marker-utils.ts b/packages/word-layout/src/marker-utils.ts index 694f0208d..6ce10a126 100644 --- a/packages/word-layout/src/marker-utils.ts +++ b/packages/word-layout/src/marker-utils.ts @@ -1,5 +1,3 @@ -import type { ResolvedNumberingProperties, ResolvedRunProperties } from './types.js'; - /** * Union type representing all supported numbering format types. * These formats determine how list markers are displayed. @@ -24,340 +22,3 @@ export const LIST_MARKER_GAP = 8; */ export const DEFAULT_BULLET_GLYPH = '•'; -const DEFAULT_DECIMAL_PATTERN = '%1.'; - -// ASCII code constants for alphabetic conversion -const ASCII_UPPERCASE_A = 65; -const ASCII_LOWERCASE_A = 97; -const ALPHABET_SIZE = 26; - -const ROMAN_NUMERALS: Array<[number, string]> = [ - [1000, 'M'], - [900, 'CM'], - [500, 'D'], - [400, 'CD'], - [100, 'C'], - [90, 'XC'], - [50, 'L'], - [40, 'XL'], - [10, 'X'], - [9, 'IX'], - [5, 'V'], - [4, 'IV'], - [1, 'I'], -]; - -/** - * Converts a positive integer to alphabetic representation (Excel-style column naming). - * Uses base-26 numbering where 1='a', 26='z', 27='aa', 52='az', 53='ba', etc. - * - * @param value - The positive integer to convert (must be >= 1) - * @param uppercase - Whether to use uppercase letters (A-Z) or lowercase (a-z) - * - * @returns The alphabetic representation, or empty string if value is invalid - * - * @example - * ```typescript - * toAlpha(1, false); // Returns: "a" - * toAlpha(26, false); // Returns: "z" - * toAlpha(27, false); // Returns: "aa" - * toAlpha(52, false); // Returns: "az" - * toAlpha(702, false); // Returns: "zz" - * toAlpha(703, false); // Returns: "aaa" - * toAlpha(1, true); // Returns: "A" - * toAlpha(26, true); // Returns: "Z" - * toAlpha(27, true); // Returns: "AA" - * toAlpha(0, false); // Returns: "" (invalid) - * toAlpha(-5, false); // Returns: "" (invalid) - * toAlpha(NaN, false); // Returns: "" (invalid) - * ``` - * - * @remarks - * - Returns empty string for non-finite values (NaN, Infinity, -Infinity) - * - Returns empty string for zero or negative values - * - Decimal values are floored to the nearest integer - * - This is a bijective base-26 system: no "zero" value exists, so 'a' = 1 - */ -const toAlpha = (value: number, uppercase: boolean): string => { - if (!Number.isFinite(value) || value <= 0) { - return ''; - } - let num = Math.floor(value); - let result = ''; - while (num > 0) { - num--; - const mod = num % ALPHABET_SIZE; - result = String.fromCharCode((uppercase ? ASCII_UPPERCASE_A : ASCII_LOWERCASE_A) + mod) + result; - num = Math.floor(num / ALPHABET_SIZE); - } - return result; -}; - -/** - * Converts a positive integer to Roman numeral representation. - * Supports values from 1 to 3999 using standard Roman numeral notation with subtractive rules. - * - * @param value - The positive integer to convert (1-3999) - * @param uppercase - Whether to use uppercase (I, V, X, etc.) or lowercase (i, v, x, etc.) - * - * @returns The Roman numeral string, or empty string if value is invalid - * - * @example - * ```typescript - * toRoman(1, true); // Returns: "I" - * toRoman(4, true); // Returns: "IV" - * toRoman(9, true); // Returns: "IX" - * toRoman(40, true); // Returns: "XL" - * toRoman(90, true); // Returns: "XC" - * toRoman(400, true); // Returns: "CD" - * toRoman(900, true); // Returns: "CM" - * toRoman(1994, true); // Returns: "MCMXCIV" - * toRoman(3999, true); // Returns: "MMMCMXCIX" - * toRoman(4, false); // Returns: "iv" - * toRoman(0, true); // Returns: "" (invalid) - * toRoman(-5, true); // Returns: "" (invalid) - * toRoman(NaN, true); // Returns: "" (invalid) - * ``` - * - * @remarks - * - Returns empty string for non-finite values (NaN, Infinity, -Infinity) - * - Returns empty string for zero or negative values - * - Decimal values are floored to the nearest integer - * - Uses subtractive notation: IV (4), IX (9), XL (40), XC (90), CD (400), CM (900) - * - Maximum supported value is 3999 (MMMCMXCIX) - * - Values above 3999 will produce valid output but are non-standard - */ -const toRoman = (value: number, uppercase: boolean): string => { - if (!Number.isFinite(value) || value <= 0) { - return ''; - } - let num = Math.floor(value); - let result = ''; - for (const [romanValue, glyph] of ROMAN_NUMERALS) { - while (num >= romanValue) { - result += glyph; - num -= romanValue; - } - } - return uppercase ? result : result.toLowerCase(); -}; - -/** - * Formats a number as a decimal string representation. - * Non-finite values return empty string, and decimal values are floored to integers. - * - * @param value - The number to format - * - * @returns The decimal string representation, or empty string if value is non-finite - * - * @example - * ```typescript - * formatDecimal(1); // Returns: "1" - * formatDecimal(42); // Returns: "42" - * formatDecimal(0); // Returns: "0" - * formatDecimal(-5); // Returns: "-5" - * formatDecimal(3.7); // Returns: "3" - * formatDecimal(9.99); // Returns: "9" - * formatDecimal(NaN); // Returns: "" - * formatDecimal(Infinity); // Returns: "" - * formatDecimal(-Infinity); // Returns: "" - * ``` - * - * @remarks - * - Returns empty string for NaN, Infinity, or -Infinity - * - Decimal values are floored (truncated towards negative infinity) - * - Negative numbers are preserved (e.g., -5 becomes "-5") - */ -const formatDecimal = (value: number): string => { - if (!Number.isFinite(value)) return ''; - return String(Math.floor(value)); -}; - -/** - * Applies a numbering format to a value, converting it to the appropriate string representation. - * Supports decimal, alphabetic (upper/lower), and Roman numeral (upper/lower) formats. - * - * @param value - The number to format - * @param format - The format type to apply. If undefined or unrecognized, defaults to decimal - * - * @returns The formatted string representation - * - * @example - * ```typescript - * applyFormat(5, 'decimal'); // Returns: "5" - * applyFormat(5, 'lowerLetter'); // Returns: "e" - * applyFormat(5, 'upperLetter'); // Returns: "E" - * applyFormat(5, 'lowerRoman'); // Returns: "v" - * applyFormat(5, 'upperRoman'); // Returns: "V" - * applyFormat(5, undefined); // Returns: "5" (default to decimal) - * applyFormat(5, 'unknown'); // Returns: "5" (default to decimal) - * applyFormat(27, 'lowerLetter'); // Returns: "aa" - * applyFormat(1994, 'upperRoman'); // Returns: "MCMXCIV" - * ``` - * - * @remarks - * - Undefined or unrecognized format defaults to decimal formatting - * - See {@link toAlpha}, {@link toRoman}, and {@link formatDecimal} for format-specific behavior - * - Invalid values (NaN, Infinity, negative, zero) are handled by individual format functions - */ -const applyFormat = (value: number, format?: NumberingFormat): string => { - switch (format) { - case 'lowerLetter': - return toAlpha(value, false); - case 'upperLetter': - return toAlpha(value, true); - case 'lowerRoman': - return toRoman(value, false); - case 'upperRoman': - return toRoman(value, true); - default: - return formatDecimal(value); - } -}; - -/** - * Formats the display text for a list marker based on numbering properties. - * - * This function handles various list formats including bullets, decimals, Roman numerals, - * and alphabetic numbering. It supports multi-level numbering patterns like "1.2.3." by - * replacing placeholder patterns (%1, %2, etc.) with actual counter values. - * - * @param numbering - The numbering properties containing format, pattern, and counter path. - * If null or undefined, returns an empty string. - * @param numbering.format - The numbering format: 'bullet', 'decimal', 'lowerRoman', 'upperRoman', - * 'lowerLetter', or 'upperLetter' - * @param numbering.lvlText - The pattern template (e.g., "%1.", "%1.%2."). For bullets, this is - * the actual bullet character to display. - * @param numbering.path - Array of counter values for each level (e.g., [1, 2, 3] for "1.2.3.") - * @param numbering.start - Fallback start value if path is not provided - * - * @returns The formatted marker text ready for display (e.g., "3.", "IV)", "aa.", "•") - * - * @example - * ```typescript - * // Decimal numbering - * formatMarkerText({ - * numId: '1', - * ilvl: 0, - * format: 'decimal', - * lvlText: '%1.', - * path: [5] - * }); // Returns: "5." - * - * // Multi-level decimal - * formatMarkerText({ - * numId: '1', - * ilvl: 2, - * format: 'decimal', - * lvlText: '%1.%2.%3.', - * path: [1, 2, 3] - * }); // Returns: "1.2.3." - * - * // Roman numerals - * formatMarkerText({ - * numId: '2', - * ilvl: 0, - * format: 'upperRoman', - * lvlText: '%1)', - * path: [4] - * }); // Returns: "IV)" - * - * // Bullet - * formatMarkerText({ - * numId: '3', - * ilvl: 0, - * format: 'bullet', - * lvlText: 'â–ª' - * }); // Returns: "â–ª" - * ``` - */ -export const formatMarkerText = (numbering?: ResolvedNumberingProperties | null): string => { - if (!numbering) { - return ''; - } - const path = numbering.path && numbering.path.length ? numbering.path : [numbering.start ?? 1]; - if (numbering.format === 'bullet') { - return numbering.lvlText || DEFAULT_BULLET_GLYPH; - } - const pattern = numbering.lvlText || DEFAULT_DECIMAL_PATTERN; - return pattern.replace(/%(\d+)/g, (_, lvlIndex) => { - const index = Number(lvlIndex) - 1; - const value = path[index] ?? path[path.length - 1] ?? 1; - return applyFormat(value, numbering.format); - }); -}; - -/** - * Builds a CSS font shorthand string from resolved run properties. - * - * This function constructs a valid CSS font shorthand value that can be used for - * canvas text measurement or CSS font styling. The format follows the CSS font - * specification: [style] [weight] size family. - * - * @param run - The resolved run properties containing font styling information - * @param run.fontFamily - The font family name (defaults to "Times New Roman" if falsy) - * @param run.fontSize - The font size in pixels (defaults to 12 if falsy, clamped to 1-999px) - * @param run.italic - Whether the font should be italic - * @param run.bold - Whether the font should be bold - * - * @returns A CSS font shorthand string (e.g., "italic bold 14px Arial") - * - * @example - * ```typescript - * buildFontCss({ - * fontFamily: 'Arial', - * fontSize: 14, - * bold: true, - * italic: false - * }); // Returns: "bold 14px Arial" - * - * buildFontCss({ - * fontFamily: 'Georgia', - * fontSize: 16, - * bold: true, - * italic: true - * }); // Returns: "italic bold 16px Georgia" - * - * buildFontCss({ - * fontFamily: 'Calibri', - * fontSize: 12 - * }); // Returns: "12px Calibri" - * - * buildFontCss({ - * fontFamily: 'Arial', - * fontSize: 14.7 - * }); // Returns: "14px Arial" (decimal floored) - * - * buildFontCss({ - * fontFamily: 'Arial', - * fontSize: -5 - * }); // Returns: "1px Arial" (clamped to minimum) - * - * buildFontCss({ - * fontFamily: 'Arial', - * fontSize: 10000 - * }); // Returns: "999px Arial" (clamped to maximum) - * ``` - * - * @remarks - * - Font size is clamped to the range [1, 999] pixels - * - Decimal font sizes are floored to the nearest integer - * - Non-finite font sizes (NaN, Infinity) default to 12px - * - Multi-word font families should be provided without quotes (quotes handled by CSS) - */ -export const buildFontCss = (run: ResolvedRunProperties): string => { - const style = run.italic ? 'italic ' : ''; - const weight = run.bold ? 'bold ' : ''; - - // Validate and normalize font size - let fontSize = run.fontSize ?? 12; - if (!Number.isFinite(fontSize)) { - fontSize = 12; - } - fontSize = Math.floor(fontSize); - fontSize = Math.max(1, Math.min(999, fontSize)); - - const size = `${fontSize}px`; - const family = run.fontFamily ?? 'Times New Roman'; - return `${style}${weight}${size} ${family}`; -}; diff --git a/packages/word-layout/src/types.ts b/packages/word-layout/src/types.ts index 3e3226812..94e9e3b5a 100644 --- a/packages/word-layout/src/types.ts +++ b/packages/word-layout/src/types.ts @@ -2,8 +2,6 @@ * Shared type definitions for Word paragraph + list layout contracts. */ -import type { NumberingFormat } from './marker-utils.js'; - export type WordListSuffix = 'tab' | 'space' | 'nothing' | undefined; export type WordListJustification = 'left' | 'center' | 'right'; @@ -29,6 +27,12 @@ export type ResolvedTabStop = { decimalChar?: string; }; +type TabStop = { + val: 'start' | 'end' | 'center' | 'decimal' | 'bar' | 'clear'; + pos: number; // Twips from paragraph start (after left indent) + leader?: 'none' | 'dot' | 'hyphen' | 'heavy' | 'underscore' | 'middleDot'; +}; + export type ResolvedRunProperties = { fontFamily: string; fontSize: number; @@ -52,65 +56,48 @@ export type ResolvedRunProperties = { export type NumberingProperties = { numId: string | number; ilvl: number; - format?: NumberingFormat; - lvlText?: string; - markerText?: string; - lvlJc?: WordListJustification; - suffix?: WordListSuffix; - start?: number; - restart?: number; - isLgl?: boolean; - path?: number[]; - resolvedMarkerRpr?: ResolvedRunProperties; }; -export type ResolvedNumberingProperties = NumberingProperties; export type ResolvedParagraphProperties = { styleId?: string; - alignment?: WordListJustification | 'justify' | 'distribute'; + alignment?: WordListJustification | 'justify'; indent?: ParagraphIndent; spacing?: ParagraphSpacing; - tabs?: ResolvedTabStop[]; + tabs?: TabStop[]; tabIntervalTwips?: number; decimalSeparator?: string; numberingProperties?: NumberingProperties | null; }; -export type DocDefaults = { - defaultTabIntervalTwips?: number; - decimalSeparator?: string; - run?: Partial; - paragraph?: { - indent?: ParagraphIndent; - spacing?: ParagraphSpacing; - }; -}; export type WordLayoutMeasurementAdapter = { measureText?: (text: string, fontCss: string, options?: { letterSpacing?: number }) => number; }; +export type ListRenderingAttrs = { + markerText: string; + justification: WordListJustification; + path: number[]; + numberingType: string; + suffix: 'tab' | 'space' | 'nothing'; +} + export type WordParagraphLayoutInput = { paragraph: ResolvedParagraphProperties; - numbering?: ResolvedNumberingProperties | null; - markerRun?: ResolvedRunProperties | null; - docDefaults: DocDefaults; - measurement?: WordLayoutMeasurementAdapter; + listRenderingAttrs: ListRenderingAttrs; + markerRun: ResolvedRunProperties; }; export type WordListMarkerLayout = { markerText: string; - glyphWidthPx?: number; markerBoxWidthPx: number; markerX: number; textStartX: number; - baselineOffsetPx: number; gutterWidthPx?: number; justification: WordListJustification; suffix: WordListSuffix; run: ResolvedRunProperties; - path?: number[]; }; export type WordParagraphLayoutOutput = { @@ -120,8 +107,6 @@ export type WordParagraphLayoutOutput = { tabsPx: number[]; textStartPx: number; marker?: WordListMarkerLayout; - resolvedIndent?: ParagraphIndent; - resolvedTabs?: ResolvedTabStop[]; defaultTabIntervalPx?: number; /** * True when list uses firstLine indent pattern (marker at left+firstLine) @@ -130,10 +115,3 @@ export type WordParagraphLayoutOutput = { firstLineIndentMode?: boolean; }; -export type ResolveMarkerRunPropsInput = { - inlineMarkerRpr?: Partial; - resolvedParagraphProps: ResolvedParagraphProperties; - numbering?: ResolvedNumberingProperties | null; - docDefaults: DocDefaults; - cached?: ResolvedRunProperties; -}; diff --git a/packages/word-layout/tests/marker-utils.test.ts b/packages/word-layout/tests/marker-utils.test.ts deleted file mode 100644 index 89c1ecb5a..000000000 --- a/packages/word-layout/tests/marker-utils.test.ts +++ /dev/null @@ -1,876 +0,0 @@ -import { describe, expect, it } from 'vitest'; - -import { buildFontCss, formatMarkerText, type NumberingFormat } from '../src/marker-utils.js'; -import type { ResolvedNumberingProperties, ResolvedRunProperties } from '../src/types.js'; - -// Helper functions are not exported, so we test them through the public API -// However, we can create test helpers that mirror their behavior for direct testing - -/** - * Test helper to access toAlpha functionality through formatMarkerText - */ -const testToAlpha = (value: number, uppercase: boolean): string => { - const format: NumberingFormat = uppercase ? 'upperLetter' : 'lowerLetter'; - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format, - lvlText: '%1', - path: [value], - }; - return formatMarkerText(numbering); -}; - -/** - * Test helper to access toRoman functionality through formatMarkerText - */ -const testToRoman = (value: number, uppercase: boolean): string => { - const format: NumberingFormat = uppercase ? 'upperRoman' : 'lowerRoman'; - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format, - lvlText: '%1', - path: [value], - }; - return formatMarkerText(numbering); -}; - -/** - * Test helper to access formatDecimal functionality through formatMarkerText - */ -const testFormatDecimal = (value: number): string => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%1', - path: [value], - }; - return formatMarkerText(numbering); -}; - -/** - * Test helper to access applyFormat functionality through formatMarkerText - */ -const testApplyFormat = (value: number, format?: NumberingFormat): string => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format, - lvlText: '%1', - path: [value], - }; - return formatMarkerText(numbering); -}; - -describe('formatMarkerText', () => { - it('returns empty string for null numbering', () => { - expect(formatMarkerText(null)).toBe(''); - }); - - it('returns empty string for undefined numbering', () => { - expect(formatMarkerText(undefined)).toBe(''); - }); - - it('formats bullet markers using lvlText', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'bullet', - lvlText: 'â–ª', - path: [1], - }; - expect(formatMarkerText(numbering)).toBe('â–ª'); - }); - - it('uses default bullet when lvlText is missing', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'bullet', - path: [1], - }; - expect(formatMarkerText(numbering)).toBe('•'); - }); - - it('formats single-level decimal with default pattern', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - path: [5], - }; - expect(formatMarkerText(numbering)).toBe('5.'); - }); - - it('formats multi-level decimal (e.g., "1.2.3.")', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 2, - format: 'decimal', - lvlText: '%1.%2.%3.', - path: [1, 2, 3], - }; - expect(formatMarkerText(numbering)).toBe('1.2.3.'); - }); - - it('formats lowerLetter correctly for 1 → "a"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'lowerLetter', - lvlText: '%1)', - path: [1], - }; - expect(formatMarkerText(numbering)).toBe('a)'); - }); - - it('formats lowerLetter correctly for 26 → "z"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'lowerLetter', - lvlText: '%1)', - path: [26], - }; - expect(formatMarkerText(numbering)).toBe('z)'); - }); - - it('formats lowerLetter correctly for 27 → "aa"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'lowerLetter', - lvlText: '%1)', - path: [27], - }; - expect(formatMarkerText(numbering)).toBe('aa)'); - }); - - it('formats upperLetter correctly for 1 → "A"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperLetter', - lvlText: '%1)', - path: [1], - }; - expect(formatMarkerText(numbering)).toBe('A)'); - }); - - it('formats upperLetter correctly for 26 → "Z"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperLetter', - lvlText: '%1)', - path: [26], - }; - expect(formatMarkerText(numbering)).toBe('Z)'); - }); - - it('formats upperLetter correctly for 27 → "AA"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperLetter', - lvlText: '%1)', - path: [27], - }; - expect(formatMarkerText(numbering)).toBe('AA)'); - }); - - it('formats lowerRoman correctly for 1 → "i"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'lowerRoman', - lvlText: '%1.', - path: [1], - }; - expect(formatMarkerText(numbering)).toBe('i.'); - }); - - it('formats lowerRoman correctly for 4 → "iv"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'lowerRoman', - lvlText: '%1.', - path: [4], - }; - expect(formatMarkerText(numbering)).toBe('iv.'); - }); - - it('formats lowerRoman correctly for 9 → "ix"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'lowerRoman', - lvlText: '%1.', - path: [9], - }; - expect(formatMarkerText(numbering)).toBe('ix.'); - }); - - it('formats upperRoman correctly for 1 → "I"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperRoman', - lvlText: '%1.', - path: [1], - }; - expect(formatMarkerText(numbering)).toBe('I.'); - }); - - it('formats upperRoman correctly for 4 → "IV"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperRoman', - lvlText: '%1.', - path: [4], - }; - expect(formatMarkerText(numbering)).toBe('IV.'); - }); - - it('formats upperRoman correctly for 9 → "IX"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperRoman', - lvlText: '%1.', - path: [9], - }; - expect(formatMarkerText(numbering)).toBe('IX.'); - }); - - it('formats upperRoman correctly for 40 → "XL"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperRoman', - lvlText: '%1.', - path: [40], - }; - expect(formatMarkerText(numbering)).toBe('XL.'); - }); - - it('formats upperRoman correctly for 90 → "XC"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperRoman', - lvlText: '%1.', - path: [90], - }; - expect(formatMarkerText(numbering)).toBe('XC.'); - }); - - it('formats upperRoman correctly for 400 → "CD"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperRoman', - lvlText: '%1.', - path: [400], - }; - expect(formatMarkerText(numbering)).toBe('CD.'); - }); - - it('formats upperRoman correctly for 900 → "CM"', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'upperRoman', - lvlText: '%1.', - path: [900], - }; - expect(formatMarkerText(numbering)).toBe('CM.'); - }); - - it('uses start value when path is missing', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%1.', - start: 5, - }; - expect(formatMarkerText(numbering)).toBe('5.'); - }); - - it('defaults to 1 when both path and start are missing', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%1.', - }; - expect(formatMarkerText(numbering)).toBe('1.'); - }); - - it('handles empty path array', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%1.', - path: [], - start: 3, - }; - expect(formatMarkerText(numbering)).toBe('3.'); - }); - - it('handles multi-level pattern with missing path indices', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 2, - format: 'decimal', - lvlText: '%1.%2.%3.%4.', - path: [1, 2], - }; - // Should fall back to last available value or 1 - expect(formatMarkerText(numbering)).toBe('1.2.2.2.'); - }); - - describe('error handling', () => { - it('handles invalid format gracefully (defaults to decimal)', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'invalidFormat' as NumberingFormat, - lvlText: '%1.', - path: [5], - }; - expect(formatMarkerText(numbering)).toBe('5.'); - }); - - it('handles malformed lvlText patterns with no placeholders', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: 'no-pattern-here', - path: [5], - }; - expect(formatMarkerText(numbering)).toBe('no-pattern-here'); - }); - - it('handles malformed lvlText with invalid placeholder numbers', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%0.%abc.%.', - path: [5], - }; - // %0 maps to path[-1] which falls back to last value (5) - // %abc doesn't match \d+ pattern so stays as-is - // %. doesn't match \d+ pattern so stays as-is - expect(formatMarkerText(numbering)).toBe('5.%abc.%.'); - }); - - it('handles very large path indices (> 1000)', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%1.', - path: [10000], - }; - expect(formatMarkerText(numbering)).toBe('10000.'); - }); - - it('handles negative numbers in path (formats as-is)', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%1.', - path: [-5], - }; - expect(formatMarkerText(numbering)).toBe('-5.'); - }); - - it('handles zero in path', () => { - const numbering: ResolvedNumberingProperties = { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%1.', - path: [0], - }; - expect(formatMarkerText(numbering)).toBe('0.'); - }); - }); -}); - -describe('buildFontCss', () => { - it('builds basic font CSS with defaults', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: 14, - }; - expect(buildFontCss(run)).toBe('14px Arial'); - }); - - it('includes bold weight', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Calibri', - fontSize: 12, - bold: true, - }; - expect(buildFontCss(run)).toBe('bold 12px Calibri'); - }); - - it('includes italic style', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Times New Roman', - fontSize: 11, - italic: true, - }; - expect(buildFontCss(run)).toBe('italic 11px Times New Roman'); - }); - - it('includes both bold and italic', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Georgia', - fontSize: 16, - bold: true, - italic: true, - }; - expect(buildFontCss(run)).toBe('italic bold 16px Georgia'); - }); - - it('uses empty string when fontFamily is empty', () => { - const run: ResolvedRunProperties = { - fontFamily: '', - fontSize: 12, - }; - const result = buildFontCss(run); - expect(result).toBe('12px '); - }); - - it('clamps 0px fontSize to minimum of 1px', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: 0, - }; - const result = buildFontCss(run); - expect(result).toBe('1px Arial'); - }); - - it('handles undefined fontSize by using default', () => { - const run = { - fontFamily: 'Arial', - } as ResolvedRunProperties; - const result = buildFontCss(run); - expect(result).toContain('12px'); - }); - - it('handles undefined fontFamily by using default', () => { - const run = { - fontSize: 14, - } as ResolvedRunProperties; - const result = buildFontCss(run); - expect(result).toContain('Times New Roman'); - }); - - describe('font size validation', () => { - it('clamps negative fontSize to minimum of 1px', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: -5, - }; - expect(buildFontCss(run)).toBe('1px Arial'); - }); - - it('clamps very large fontSize to maximum of 999px', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: 10000, - }; - expect(buildFontCss(run)).toBe('999px Arial'); - }); - - it('floors decimal fontSize values', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: 14.7, - }; - expect(buildFontCss(run)).toBe('14px Arial'); - }); - - it('floors decimal fontSize close to next integer', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: 15.99, - }; - expect(buildFontCss(run)).toBe('15px Arial'); - }); - - it('handles NaN fontSize by using default', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: NaN, - }; - expect(buildFontCss(run)).toBe('12px Arial'); - }); - - it('handles Infinity fontSize by using default', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: Infinity, - }; - expect(buildFontCss(run)).toBe('12px Arial'); - }); - - it('handles -Infinity fontSize by using default', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial', - fontSize: -Infinity, - }; - expect(buildFontCss(run)).toBe('12px Arial'); - }); - }); - - describe('font family edge cases', () => { - it('handles multi-word font families', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Times New Roman', - fontSize: 12, - }; - expect(buildFontCss(run)).toBe('12px Times New Roman'); - }); - - it('handles font families with quotes (passed through as-is)', () => { - const run: ResolvedRunProperties = { - fontFamily: '"Courier New"', - fontSize: 12, - }; - expect(buildFontCss(run)).toBe('12px "Courier New"'); - }); - - it('handles font families with fallbacks (commas)', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Arial, Helvetica, sans-serif', - fontSize: 12, - }; - expect(buildFontCss(run)).toBe('12px Arial, Helvetica, sans-serif'); - }); - - it('handles font families with special characters', () => { - const run: ResolvedRunProperties = { - fontFamily: 'Noto Sans CJK JP', - fontSize: 14, - }; - expect(buildFontCss(run)).toBe('14px Noto Sans CJK JP'); - }); - }); -}); - -describe('toAlpha (via formatMarkerText)', () => { - describe('basic conversion', () => { - it('converts 1 to "a" (lowercase)', () => { - expect(testToAlpha(1, false)).toBe('a'); - }); - - it('converts 1 to "A" (uppercase)', () => { - expect(testToAlpha(1, true)).toBe('A'); - }); - - it('converts 26 to "z" (lowercase)', () => { - expect(testToAlpha(26, false)).toBe('z'); - }); - - it('converts 26 to "Z" (uppercase)', () => { - expect(testToAlpha(26, true)).toBe('Z'); - }); - }); - - describe('multi-letter conversion', () => { - it('converts 27 to "aa" (lowercase)', () => { - expect(testToAlpha(27, false)).toBe('aa'); - }); - - it('converts 27 to "AA" (uppercase)', () => { - expect(testToAlpha(27, true)).toBe('AA'); - }); - - it('converts 52 to "az" (lowercase)', () => { - expect(testToAlpha(52, false)).toBe('az'); - }); - - it('converts 52 to "AZ" (uppercase)', () => { - expect(testToAlpha(52, true)).toBe('AZ'); - }); - - it('converts 53 to "ba" (lowercase)', () => { - expect(testToAlpha(53, false)).toBe('ba'); - }); - - it('converts 702 to "zz" (lowercase)', () => { - expect(testToAlpha(702, false)).toBe('zz'); - }); - - it('converts 702 to "ZZ" (uppercase)', () => { - expect(testToAlpha(702, true)).toBe('ZZ'); - }); - - it('converts 703 to "aaa" (lowercase)', () => { - expect(testToAlpha(703, false)).toBe('aaa'); - }); - - it('converts 703 to "AAA" (uppercase)', () => { - expect(testToAlpha(703, true)).toBe('AAA'); - }); - }); - - describe('edge cases', () => { - it('returns empty string for 0', () => { - expect(testToAlpha(0, false)).toBe(''); - }); - - it('returns empty string for negative numbers', () => { - expect(testToAlpha(-5, false)).toBe(''); - }); - - it('returns empty string for NaN', () => { - expect(testToAlpha(NaN, false)).toBe(''); - }); - - it('returns empty string for Infinity', () => { - expect(testToAlpha(Infinity, false)).toBe(''); - }); - - it('returns empty string for -Infinity', () => { - expect(testToAlpha(-Infinity, false)).toBe(''); - }); - - it('floors decimal values (5.7 becomes "e")', () => { - expect(testToAlpha(5.7, false)).toBe('e'); - }); - - it('floors decimal values (27.9 becomes "aa")', () => { - expect(testToAlpha(27.9, false)).toBe('aa'); - }); - }); - - describe('large values', () => { - it('converts 18278 to "zzz" (lowercase)', () => { - expect(testToAlpha(18278, false)).toBe('zzz'); - }); - - it('converts 18278 to "ZZZ" (uppercase)', () => { - expect(testToAlpha(18278, true)).toBe('ZZZ'); - }); - }); -}); - -describe('toRoman (via formatMarkerText)', () => { - describe('basic values', () => { - it('converts 1 to "I"', () => { - expect(testToRoman(1, true)).toBe('I'); - }); - - it('converts 2 to "II"', () => { - expect(testToRoman(2, true)).toBe('II'); - }); - - it('converts 3 to "III"', () => { - expect(testToRoman(3, true)).toBe('III'); - }); - - it('converts 5 to "V"', () => { - expect(testToRoman(5, true)).toBe('V'); - }); - - it('converts 10 to "X"', () => { - expect(testToRoman(10, true)).toBe('X'); - }); - - it('converts 50 to "L"', () => { - expect(testToRoman(50, true)).toBe('L'); - }); - - it('converts 100 to "C"', () => { - expect(testToRoman(100, true)).toBe('C'); - }); - - it('converts 500 to "D"', () => { - expect(testToRoman(500, true)).toBe('D'); - }); - - it('converts 1000 to "M"', () => { - expect(testToRoman(1000, true)).toBe('M'); - }); - }); - - describe('subtractive notation', () => { - it('converts 4 to "IV"', () => { - expect(testToRoman(4, true)).toBe('IV'); - }); - - it('converts 9 to "IX"', () => { - expect(testToRoman(9, true)).toBe('IX'); - }); - - it('converts 40 to "XL"', () => { - expect(testToRoman(40, true)).toBe('XL'); - }); - - it('converts 90 to "XC"', () => { - expect(testToRoman(90, true)).toBe('XC'); - }); - - it('converts 400 to "CD"', () => { - expect(testToRoman(400, true)).toBe('CD'); - }); - - it('converts 900 to "CM"', () => { - expect(testToRoman(900, true)).toBe('CM'); - }); - }); - - describe('large values', () => { - it('converts 1994 to "MCMXCIV"', () => { - expect(testToRoman(1994, true)).toBe('MCMXCIV'); - }); - - it('converts 2024 to "MMXXIV"', () => { - expect(testToRoman(2024, true)).toBe('MMXXIV'); - }); - - it('converts 3999 to "MMMCMXCIX"', () => { - expect(testToRoman(3999, true)).toBe('MMMCMXCIX'); - }); - - it('converts values beyond standard range (4000)', () => { - // While non-standard, the function should still produce output - expect(testToRoman(4000, true)).toBe('MMMM'); - }); - }); - - describe('uppercase/lowercase', () => { - it('converts 4 to "iv" (lowercase)', () => { - expect(testToRoman(4, false)).toBe('iv'); - }); - - it('converts 1994 to "mcmxciv" (lowercase)', () => { - expect(testToRoman(1994, false)).toBe('mcmxciv'); - }); - }); - - describe('edge cases', () => { - it('returns empty string for 0', () => { - expect(testToRoman(0, true)).toBe(''); - }); - - it('returns empty string for negative numbers', () => { - expect(testToRoman(-5, true)).toBe(''); - }); - - it('returns empty string for NaN', () => { - expect(testToRoman(NaN, true)).toBe(''); - }); - - it('returns empty string for Infinity', () => { - expect(testToRoman(Infinity, true)).toBe(''); - }); - - it('returns empty string for -Infinity', () => { - expect(testToRoman(-Infinity, true)).toBe(''); - }); - - it('floors decimal values (4.7 becomes "IV")', () => { - expect(testToRoman(4.7, true)).toBe('IV'); - }); - }); -}); - -describe('formatDecimal (via formatMarkerText)', () => { - describe('basic formatting', () => { - it('formats 1 as "1"', () => { - expect(testFormatDecimal(1)).toBe('1'); - }); - - it('formats 42 as "42"', () => { - expect(testFormatDecimal(42)).toBe('42'); - }); - - it('formats 0 as "0"', () => { - expect(testFormatDecimal(0)).toBe('0'); - }); - - it('formats negative numbers correctly', () => { - expect(testFormatDecimal(-5)).toBe('-5'); - }); - }); - - describe('decimal values', () => { - it('floors 3.7 to "3"', () => { - expect(testFormatDecimal(3.7)).toBe('3'); - }); - - it('floors 9.99 to "9"', () => { - expect(testFormatDecimal(9.99)).toBe('9'); - }); - - it('floors negative decimals (-3.7 to "-4")', () => { - expect(testFormatDecimal(-3.7)).toBe('-4'); - }); - }); - - describe('edge cases', () => { - it('returns empty string for NaN', () => { - expect(testFormatDecimal(NaN)).toBe(''); - }); - - it('returns empty string for Infinity', () => { - expect(testFormatDecimal(Infinity)).toBe(''); - }); - - it('returns empty string for -Infinity', () => { - expect(testFormatDecimal(-Infinity)).toBe(''); - }); - }); -}); - -describe('applyFormat (via formatMarkerText)', () => { - describe('all format types', () => { - it('applies decimal format', () => { - expect(testApplyFormat(5, 'decimal')).toBe('5'); - }); - - it('applies lowerLetter format', () => { - expect(testApplyFormat(5, 'lowerLetter')).toBe('e'); - }); - - it('applies upperLetter format', () => { - expect(testApplyFormat(5, 'upperLetter')).toBe('E'); - }); - - it('applies lowerRoman format', () => { - expect(testApplyFormat(5, 'lowerRoman')).toBe('v'); - }); - - it('applies upperRoman format', () => { - expect(testApplyFormat(5, 'upperRoman')).toBe('V'); - }); - }); - - describe('undefined format', () => { - it('defaults to decimal when format is undefined', () => { - expect(testApplyFormat(42, undefined)).toBe('42'); - }); - }); - - describe('unknown format', () => { - it('defaults to decimal for unknown format', () => { - expect(testApplyFormat(42, 'unknownFormat' as NumberingFormat)).toBe('42'); - }); - }); -}); From 6b1e91bfb38522f399fed5432d845731511b134d Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Thu, 15 Jan 2026 16:54:46 -0300 Subject: [PATCH 56/85] feat: pass translated styles/numbering into editor state --- .../src/core/presentation-editor/PresentationEditor.ts | 2 ++ .../super-editor/src/core/super-converter/SuperConverter.js | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts b/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts index 69815ff6e..8b88df9e1 100644 --- a/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts +++ b/packages/super-editor/src/core/presentation-editor/PresentationEditor.ts @@ -2774,6 +2774,8 @@ export class PresentationEditor extends EventEmitter { numbering: converter.numbering, linkedStyles: converter.linkedStyles, ...(Object.keys(footnoteNumberById).length ? { footnoteNumberById } : {}), + translatedLinkedStyles: converter.translatedLinkedStyles, + translatedNumbering: converter.translatedNumbering, } : undefined; const atomNodeTypes = getAtomNodeTypesFromSchema(this.#editor?.schema ?? null); diff --git a/packages/super-editor/src/core/super-converter/SuperConverter.js b/packages/super-editor/src/core/super-converter/SuperConverter.js index dd7be3bf2..6863be933 100644 --- a/packages/super-editor/src/core/super-converter/SuperConverter.js +++ b/packages/super-editor/src/core/super-converter/SuperConverter.js @@ -197,7 +197,7 @@ class SuperConverter { this.xml = params?.xml; this.declaration = null; - // List defs + // List defs (deprecated) this.numbering = {}; // Translated numbering definitions @@ -222,7 +222,7 @@ class SuperConverter { this.importedBodyHasFooterRef = false; this.headerFooterModified = false; - // Linked Styles + // Linked Styles (deprecated) this.linkedStyles = []; // Translated linked styles From 2243e2b0cb511865c158a8f53cb614f76215d317 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Thu, 15 Jan 2026 16:58:45 -0300 Subject: [PATCH 57/85] refactor: migrate paragraph/run resolution to translated styles --- .../pm-adapter/src/attributes/index.ts | 16 +- .../src/attributes/paragraph-styles.test.ts | 1033 --------- .../pm-adapter/src/attributes/paragraph.ts | 2039 ++--------------- .../src/attributes/spacing-indent.ts | 294 +-- .../pm-adapter/src/attributes/tabs.ts | 1 + .../pm-adapter/src/converter-context.ts | 3 + .../src/converters/paragraph.test.ts | 2 +- .../pm-adapter/src/converters/paragraph.ts | 495 +--- .../pm-adapter/src/converters/table.ts | 9 +- .../layout-engine/pm-adapter/src/internal.ts | 8 - .../src/sdt/document-part-object.ts | 2 - .../pm-adapter/src/sdt/document-section.ts | 11 - .../src/sdt/structured-content-block.ts | 3 - .../layout-engine/pm-adapter/src/sdt/toc.ts | 7 - .../layout-engine/pm-adapter/src/types.d.ts | 2 - .../layout-engine/pm-adapter/src/types.ts | 22 +- .../layout-engine/style-engine/src/cascade.ts | 267 +-- .../layout-engine/style-engine/src/index.ts | 303 +-- .../style-engine/src/ooxml/index.ts | 442 ++-- .../src/core/super-converter/styles.js | 90 +- .../v2/importer/docxImporter.js | 21 +- .../core/super-converter/v3/handlers/utils.js | 2 +- .../p/helpers/legacy-handle-paragraph-node.js | 3 - .../extensions/paragraph/ParagraphNodeView.js | 2 +- .../paragraph/resolvedPropertiesCache.js | 6 +- .../run/calculateInlineRunPropertiesPlugin.js | 2 +- .../extensions/run/wrapTextInRunsPlugin.js | 2 +- 27 files changed, 498 insertions(+), 4589 deletions(-) delete mode 100644 packages/layout-engine/pm-adapter/src/attributes/paragraph-styles.test.ts diff --git a/packages/layout-engine/pm-adapter/src/attributes/index.ts b/packages/layout-engine/pm-adapter/src/attributes/index.ts index 14136a316..70215f17b 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/index.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/index.ts @@ -20,15 +20,9 @@ export { // Spacing and indent export { - spacingPxToPt, - indentPxToPt, - spacingPtToPx, - indentPtToPx, normalizeAlignment, normalizeParagraphSpacing, normalizeLineRule, - normalizePxIndent, - normalizeParagraphIndent, } from './spacing-indent.js'; // Tab stops @@ -40,13 +34,5 @@ export { mirrorIndentForRtl, ensureBidiIndentPx, DEFAULT_BIDI_INDENT_PX } from ' // Paragraph attributes export { computeParagraphAttrs, - mergeParagraphAttrs, - convertListParagraphAttrs, - cloneParagraphAttrs, - buildStyleNodeFromAttrs, - resolveParagraphBooleanAttr, - hasPageBreakBefore, - normalizeListRenderingAttrs, - buildNumberingPath, - computeWordLayoutForParagraph, + deepClone, } from './paragraph.js'; diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph-styles.test.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph-styles.test.ts deleted file mode 100644 index a108a0f26..000000000 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph-styles.test.ts +++ /dev/null @@ -1,1033 +0,0 @@ -import { describe, expect, it, beforeEach, vi } from 'vitest'; -import { hydrateParagraphStyleAttrs, hydrateCharacterStyleAttrs, hydrateMarkerStyleAttrs } from './paragraph-styles.js'; - -const { resolveParagraphProperties, resolveRunProperties, resolveDocxFontFamily } = vi.hoisted(() => ({ - resolveParagraphProperties: vi.fn(), - resolveRunProperties: vi.fn(), - resolveDocxFontFamily: vi.fn(), -})); - -// Mock the shared OOXML resolver module that's imported by paragraph-styles.ts -vi.mock('@superdoc/style-engine/ooxml', () => ({ - createOoxmlResolver: vi.fn(() => ({ - resolveParagraphProperties, - resolveRunProperties, - getDefaultProperties: vi.fn(), - getStyleProperties: vi.fn(), - resolveStyleChain: vi.fn(), - getNumberingProperties: vi.fn(), - })), - resolveDocxFontFamily, -})); - -describe('hydrateParagraphStyleAttrs', () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - it('returns null when converter context is missing', () => { - const para = { attrs: { styleId: 'Heading1' } } as never; - const result = hydrateParagraphStyleAttrs(para, undefined); - expect(result).toBeNull(); - expect(resolveParagraphProperties).not.toHaveBeenCalled(); - }); - - it('calls resolveParagraphProperties even when paragraph lacks styleId (to apply docDefaults)', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { after: 200, line: 276, lineRule: 'auto' }, - }); - - const para = { attrs: {} } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(resolveParagraphProperties).toHaveBeenCalledWith({ docx: {}, numbering: {} }, { styleId: null }); - expect(result).toEqual( - expect.objectContaining({ - spacing: { after: 200, line: 276, lineRule: 'auto' }, - }), - ); - }); - - it('delegates to resolveParagraphProperties and clones the result', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 240 }, - indent: { left: 120 }, - borders: { top: { val: 'single', size: 8 } }, - shading: { fill: 'FFEE00' }, - justification: 'center', - tabStops: [{ pos: 100 }], - keepLines: true, - keepNext: false, - numberingProperties: { numId: 9 }, - }); - - const para = { attrs: { styleId: 'Heading1' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(resolveParagraphProperties).toHaveBeenCalledWith( - { docx: {}, numbering: {} }, - { - styleId: 'Heading1', - numberingProperties: undefined, - indent: undefined, - spacing: undefined, - }, - ); - expect(result).toEqual( - expect.objectContaining({ - spacing: { before: 240 }, - indent: { left: 120 }, - borders: { top: { val: 'single', size: 8 } }, - shading: { fill: 'FFEE00' }, - alignment: 'center', - tabStops: [{ pos: 100 }], - keepLines: true, - keepNext: false, - numberingProperties: { numId: 9 }, - }), - ); - expect(result?.spacing).not.toBe(resolveParagraphProperties.mock.results[0]?.value?.spacing); - }); - - it('zeroes inherited first-line indent for heading styles without explicit indent', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { after: 200 }, - indent: { firstLine: 432 }, // inherited from Normal - outlineLvl: 1, - }); - - const para = { attrs: { styleId: 'Heading2' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(result?.indent).toEqual({ firstLine: 0, hanging: 0, left: undefined, right: undefined }); - }); - - it('provides empty numbering fallback when context.numbering is undefined', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { after: 200, line: 276, lineRule: 'auto' }, - }); - - const para = { attrs: { styleId: 'Normal' } } as never; - hydrateParagraphStyleAttrs(para, { - docx: { styles: {}, docDefaults: {} }, - // numbering is explicitly undefined - should receive { definitions: {}, abstracts: {} } - }); - - expect(resolveParagraphProperties).toHaveBeenCalledWith( - { docx: { styles: {}, docDefaults: {} }, numbering: { definitions: {}, abstracts: {} } }, - expect.objectContaining({ styleId: 'Normal' }), - ); - }); - - it('returns null when resolveParagraphProperties returns null', () => { - resolveParagraphProperties.mockReturnValue(null); - - const para = { attrs: { styleId: 'Heading1' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(result).toBeNull(); - }); - - it('returns null when resolveParagraphProperties returns undefined', () => { - resolveParagraphProperties.mockReturnValue(undefined); - - const para = { attrs: { styleId: 'Heading1' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(result).toBeNull(); - }); - - describe('table style paragraph properties cascade', () => { - it('merges table style spacing when paragraph has no explicit spacing (table style wins)', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 100, after: 100 }, // from docDefaults or paragraph style - }); - - const para = { attrs: {} } as never; // No explicit spacing on paragraph - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - tableStyleParagraphProps: { - spacing: { before: 200, after: 200, line: 1.5, lineRule: 'auto' }, - }, - }); - - // Table style spacing should override resolved spacing (docDefaults) - expect(result?.spacing).toEqual({ - before: 200, - after: 200, - line: 1.5, - lineRule: 'auto', - }); - }); - - it('paragraph explicit spacing wins over table style', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 300, after: 300, line: 2.0 }, // includes explicit paragraph spacing - }); - - const para = { - attrs: { - spacing: { before: 300, after: 300, line: 2.0 }, // Explicit on paragraph - }, - } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - tableStyleParagraphProps: { - spacing: { before: 100, after: 100, line: 1.0 }, - }, - }); - - // Paragraph explicit spacing should win, but table style fills in missing values - // Since resolved already has all values, they should win - expect(result?.spacing).toEqual({ - before: 300, - after: 300, - line: 2.0, - }); - }); - - it('partial paragraph spacing: paragraph has some properties, table style fills gaps', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { line: 1.5 }, // Only line from paragraph style/explicit - }); - - const para = { - attrs: { - spacing: { line: 1.5 }, // Only line is explicit on paragraph - }, - } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - tableStyleParagraphProps: { - spacing: { before: 100, after: 100, line: 1.0, lineRule: 'auto' }, - }, - }); - - // Table style should provide before/after, but paragraph's line should win - expect(result?.spacing).toEqual({ - before: 100, - after: 100, - line: 1.5, - lineRule: 'auto', - }); - }); - - it('works correctly when tableStyleParagraphProps is undefined (existing behavior)', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 100, after: 100 }, - indent: { left: 120 }, - }); - - const para = { attrs: {} } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - // No tableStyleParagraphProps - }); - - // Should use resolved spacing as-is (no table style to merge) - expect(result?.spacing).toEqual({ - before: 100, - after: 100, - }); - expect(result?.indent).toEqual({ left: 120 }); - }); - - it('works correctly when tableStyleParagraphProps.spacing is undefined', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 100, after: 100 }, - }); - - const para = { attrs: {} } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - tableStyleParagraphProps: {}, // No spacing in table style - }); - - // Should use resolved spacing as-is - expect(result?.spacing).toEqual({ - before: 100, - after: 100, - }); - }); - }); - - describe('contextualSpacing extraction', () => { - it('extracts contextualSpacing=true from resolved paragraph properties', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 100, after: 100 }, - contextualSpacing: true, - }); - - const para = { attrs: { styleId: 'ListBullet' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('extracts contextualSpacing=false from resolved paragraph properties', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 100, after: 100 }, - contextualSpacing: false, - }); - - const para = { attrs: { styleId: 'Normal' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(result?.contextualSpacing).toBe(false); - }); - - it('omits contextualSpacing when not present in resolved properties', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 100, after: 100 }, - // No contextualSpacing property - }); - - const para = { attrs: { styleId: 'Heading1' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(result?.contextualSpacing).toBeUndefined(); - }); - - it('includes contextualSpacing in hydration result alongside other properties', () => { - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 240, after: 120 }, - indent: { left: 720 }, - contextualSpacing: true, - keepLines: true, - justification: 'left', - }); - - const para = { attrs: { styleId: 'ListBullet' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(result).toEqual( - expect.objectContaining({ - spacing: { before: 240, after: 120 }, - indent: { left: 720 }, - contextualSpacing: true, - keepLines: true, - alignment: 'left', - }), - ); - }); - - it('handles contextualSpacing from style cascade (ListBullet style example)', () => { - // ListBullet style typically defines contextualSpacing to suppress spacing - // between consecutive list items of the same style - resolveParagraphProperties.mockReturnValue({ - spacing: { before: 0, after: 0 }, - indent: { left: 720, hanging: 360 }, - contextualSpacing: true, // "Don't add space between paragraphs of the same style" - }); - - const para = { attrs: { styleId: 'ListBullet' } } as never; - const result = hydrateParagraphStyleAttrs(para, { - docx: {}, - numbering: {}, - }); - - expect(result?.contextualSpacing).toBe(true); - expect(result?.spacing).toEqual({ before: 0, after: 0 }); - }); - }); -}); - -describe('hydrateCharacterStyleAttrs', () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - it('returns null when context is missing', () => { - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, undefined); - expect(result).toBeNull(); - expect(resolveRunProperties).not.toHaveBeenCalled(); - }); - - it('returns null when context.docx is missing', () => { - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, {} as never); - expect(result).toBeNull(); - }); - - it('extracts fontFamily, fontSize, color, bold, italic, strike, underline, letterSpacing', () => { - resolveRunProperties.mockReturnValue({ - fontFamily: { ascii: 'Calibri', hAnsi: 'Calibri' }, - fontSize: 22, - color: { val: 'FF0000' }, - bold: true, - italic: false, - strike: true, - underline: { 'w:val': 'single', 'w:color': '0000FF' }, - letterSpacing: 20, - }); - resolveDocxFontFamily.mockReturnValue('Calibri'); - - const para = { attrs: { styleId: 'Normal' } } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {}, numbering: {} }); - - expect(result).toEqual({ - fontFamily: 'Calibri', - fontSize: 22, - color: 'FF0000', - bold: true, - italic: false, - strike: true, - underline: { type: 'single', color: '0000FF' }, - letterSpacing: 20, - }); - }); - - it('handles missing/null values gracefully', () => { - resolveRunProperties.mockReturnValue({ - fontSize: 20, - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result).toEqual({ - fontFamily: undefined, - fontSize: 20, - color: undefined, - bold: undefined, - italic: undefined, - strike: undefined, - underline: undefined, - letterSpacing: undefined, - }); - }); - - it("uses paragraph's styleId for resolution", () => { - resolveRunProperties.mockReturnValue({ fontSize: 24 }); - - const para = { attrs: { styleId: 'Heading1' } } as never; - hydrateCharacterStyleAttrs(para, { docx: {}, numbering: {} }); - - expect(resolveRunProperties).toHaveBeenCalledWith( - { docx: {}, numbering: {} }, // numbering is provided, so no fallback is applied - {}, - { styleId: 'Heading1' }, - false, - false, - ); - }); - - it('does NOT use paragraphProperties.runProperties as inline run properties (w:pPr/w:rPr is for new text only)', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { - attrs: { - paragraphProperties: { - runProperties: { fontSize: 24, bold: true }, - }, - }, - } as never; - hydrateCharacterStyleAttrs(para, { docx: {} }); - - // inlineRpr should be empty - paragraph's runProperties (w:pPr/w:rPr) is only for new text, - // not for existing runs. Runs without explicit formatting inherit from style cascade only. - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - {}, // Empty inline run properties - expect.anything(), - false, - false, - ); - }); - - it('does NOT use attrs.runProperties as inline run properties (w:pPr/w:rPr is for new text only)', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { - attrs: { - runProperties: { italic: true }, - }, - } as never; - hydrateCharacterStyleAttrs(para, { docx: {} }); - - // inlineRpr should be empty - paragraph's runProperties is for new text only - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - {}, // Empty inline run properties - expect.anything(), - false, - false, - ); - }); - - it('returns null when resolveRunProperties returns null', () => { - resolveRunProperties.mockReturnValue(null); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result).toBeNull(); - }); - - it('returns null when resolveRunProperties returns non-object', () => { - resolveRunProperties.mockReturnValue('invalid' as never); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result).toBeNull(); - }); - - it('returns null when resolveRunProperties throws', () => { - resolveRunProperties.mockImplementation(() => { - throw new Error('Resolution failed'); - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result).toBeNull(); - }); - - it('passes preResolved paragraph properties to resolveRunProperties', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { attrs: {} } as never; - const preResolved = { styleId: 'Custom', spacing: { before: 100 } }; - hydrateCharacterStyleAttrs(para, { docx: {} }, preResolved); - - expect(resolveRunProperties).toHaveBeenCalledWith(expect.anything(), expect.anything(), preResolved, false, false); - }); - - it('includes numberingProperties in pprForChain when present', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { - attrs: { - styleId: 'ListParagraph', - numberingProperties: { numId: 1, ilvl: 0 }, - }, - } as never; - hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - expect.anything(), - { styleId: 'ListParagraph', numberingProperties: { numId: 1, ilvl: 0 } }, - false, - false, - ); - }); - - it('defaults fontSize to 20 when resolved fontSize is invalid', () => { - resolveRunProperties.mockReturnValue({ - fontSize: 'invalid', - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result?.fontSize).toBe(20); - }); - - it('normalizes boolean properties correctly', () => { - resolveRunProperties.mockReturnValue({ - bold: 1, - italic: '1', - strike: 'true', - fontSize: 22, - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result?.bold).toBe(true); - expect(result?.italic).toBe(true); - expect(result?.strike).toBe(true); - }); - - it('extracts color value correctly', () => { - resolveRunProperties.mockReturnValue({ - color: { val: 'auto' }, - fontSize: 22, - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result?.color).toBeUndefined(); // 'auto' is filtered out - }); - - it('extracts underline with type and color', () => { - resolveRunProperties.mockReturnValue({ - underline: { type: 'double', color: 'FF0000' }, - fontSize: 22, - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result?.underline).toEqual({ type: 'double', color: 'FF0000' }); - }); - - it('provides empty numbering fallback when context.numbering is undefined', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { attrs: {} } as never; - hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(resolveRunProperties).toHaveBeenCalledWith( - { docx: {}, numbering: { definitions: {}, abstracts: {} } }, - expect.anything(), - expect.anything(), - false, - false, - ); - }); -}); - -describe('hydrateMarkerStyleAttrs', () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - it('returns null when context is missing', () => { - const para = { attrs: {} } as never; - const result = hydrateMarkerStyleAttrs(para, undefined); - expect(result).toBeNull(); - expect(resolveRunProperties).not.toHaveBeenCalled(); - }); - - it('resolves marker properties with isListNumber=true', () => { - resolveRunProperties.mockReturnValue({ - fontSize: 22, - bold: true, - fontFamily: { ascii: 'Calibri' }, - }); - resolveDocxFontFamily.mockReturnValue('Calibri'); - - const para = { - attrs: { - styleId: 'ListParagraph', - numberingProperties: { numId: 1, ilvl: 0 }, - }, - } as never; - const result = hydrateMarkerStyleAttrs(para, { docx: {}, numbering: {} }); - - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - expect.anything(), - expect.objectContaining({ numberingProperties: { numId: 1, ilvl: 0 } }), - true, // isListNumber - true, // numberingDefinedInline - ); - expect(result).toEqual({ - fontSize: 22, - bold: true, - fontFamily: 'Calibri', - color: undefined, - italic: undefined, - strike: undefined, - underline: undefined, - letterSpacing: undefined, - }); - }); - - it('handles numberingDefinedInline flag correctly', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { - attrs: { - numberingProperties: { numId: 1, ilvl: 0 }, - }, - } as never; - hydrateMarkerStyleAttrs(para, { docx: {} }); - - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - expect.anything(), - expect.anything(), - true, - true, // numberingDefinedInline = true because numId is in attrs - ); - }); - - it('sets numberingDefinedInline to false when numId is not present', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { attrs: {} } as never; - hydrateMarkerStyleAttrs(para, { docx: {} }); - - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - expect.anything(), - expect.anything(), - true, - false, // numberingDefinedInline = false - ); - }); - - it('falls back properly when numbering context is empty', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { attrs: {} } as never; - hydrateMarkerStyleAttrs(para, { docx: {} }); - - expect(resolveRunProperties).toHaveBeenCalledWith( - { docx: {}, numbering: { definitions: {}, abstracts: {} } }, - expect.anything(), - expect.anything(), - true, - false, - ); - }); - - it('does NOT use paragraphProperties.runProperties for marker (w:pPr/w:rPr is for new text only)', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { - attrs: { - paragraphProperties: { - runProperties: { bold: true }, - }, - }, - } as never; - hydrateMarkerStyleAttrs(para, { docx: {} }); - - // Marker styling comes from numbering definition rPr, not from paragraph's w:pPr/w:rPr - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - {}, // Empty inline run properties - expect.anything(), - true, - false, - ); - }); - - it('uses preResolved paragraph properties', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { attrs: {} } as never; - const preResolved = { styleId: 'ListParagraph', numberingProperties: { numId: 2 } }; - hydrateMarkerStyleAttrs(para, { docx: {} }, preResolved); - - expect(resolveRunProperties).toHaveBeenCalledWith(expect.anything(), expect.anything(), preResolved, true, false); - }); - - it('merges styleId from para when preResolved lacks it', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { attrs: { styleId: 'Heading1' } } as never; - const preResolved = { spacing: { before: 100 } }; - hydrateMarkerStyleAttrs(para, { docx: {} }, preResolved); - - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - expect.anything(), - { spacing: { before: 100 }, styleId: 'Heading1' }, - true, - false, - ); - }); - - it('returns null when resolveRunProperties returns null', () => { - resolveRunProperties.mockReturnValue(null); - - const para = { attrs: {} } as never; - const result = hydrateMarkerStyleAttrs(para, { docx: {} }); - - expect(result).toBeNull(); - }); - - it('returns null when resolveRunProperties throws', () => { - resolveRunProperties.mockImplementation(() => { - throw new Error('Resolution failed'); - }); - - const para = { attrs: {} } as never; - const result = hydrateMarkerStyleAttrs(para, { docx: {} }); - - expect(result).toBeNull(); - }); - - it('handles numberingProperties from paragraphProperties', () => { - resolveRunProperties.mockReturnValue({ fontSize: 22 }); - - const para = { - attrs: { - paragraphProperties: { - numberingProperties: { numId: 3, ilvl: 1 }, - }, - }, - } as never; - hydrateMarkerStyleAttrs(para, { docx: {} }); - - expect(resolveRunProperties).toHaveBeenCalledWith( - expect.anything(), - expect.anything(), - expect.objectContaining({ numberingProperties: { numId: 3, ilvl: 1 } }), - true, - true, - ); - }); -}); - -describe('helper functions', () => { - describe('extractColorValue', () => { - // Access the internal functions via module import would require exposing them - // Since they're internal, we test them indirectly through hydrateCharacterStyleAttrs - it('extracts valid color from resolved properties', () => { - resolveRunProperties.mockReturnValue({ - color: { val: 'FF0000' }, - fontSize: 22, - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result?.color).toBe('FF0000'); - }); - - it('ignores auto color', () => { - resolveRunProperties.mockReturnValue({ - color: { val: 'auto' }, - fontSize: 22, - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result?.color).toBeUndefined(); - }); - - it('handles null color', () => { - resolveRunProperties.mockReturnValue({ - color: null, - fontSize: 22, - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result?.color).toBeUndefined(); - }); - - it('handles invalid color object', () => { - resolveRunProperties.mockReturnValue({ - color: { val: 123 }, - fontSize: 22, - }); - - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - - expect(result?.color).toBeUndefined(); - }); - }); - - describe('normalizeBooleanProp', () => { - it('normalizes true boolean', () => { - resolveRunProperties.mockReturnValue({ bold: true, fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(true); - }); - - it('normalizes false boolean', () => { - resolveRunProperties.mockReturnValue({ bold: false, fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(false); - }); - - it('normalizes 1 to true', () => { - resolveRunProperties.mockReturnValue({ bold: 1, fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(true); - }); - - it('normalizes 0 to false', () => { - resolveRunProperties.mockReturnValue({ bold: 0, fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(false); - }); - - it('normalizes "1" to true', () => { - resolveRunProperties.mockReturnValue({ bold: '1', fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(true); - }); - - it('normalizes "0" to false', () => { - resolveRunProperties.mockReturnValue({ bold: '0', fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(false); - }); - - it('normalizes "true" to true', () => { - resolveRunProperties.mockReturnValue({ bold: 'true', fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(true); - }); - - it('normalizes "false" to false', () => { - resolveRunProperties.mockReturnValue({ bold: 'false', fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(false); - }); - - it('normalizes "on" to true', () => { - resolveRunProperties.mockReturnValue({ bold: 'on', fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(true); - }); - - it('normalizes "off" to false', () => { - resolveRunProperties.mockReturnValue({ bold: 'off', fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(false); - }); - - it('normalizes empty string to true (OOXML convention)', () => { - resolveRunProperties.mockReturnValue({ bold: '', fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBe(true); - }); - - it('handles null as undefined', () => { - resolveRunProperties.mockReturnValue({ bold: null, fontSize: 22 }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.bold).toBeUndefined(); - }); - }); - - describe('extractUnderline', () => { - it('extracts w:val and type', () => { - resolveRunProperties.mockReturnValue({ - underline: { 'w:val': 'single' }, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toEqual({ type: 'single', color: undefined }); - }); - - it('extracts type without w: prefix', () => { - resolveRunProperties.mockReturnValue({ - underline: { type: 'double' }, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toEqual({ type: 'double', color: undefined }); - }); - - it('extracts val property', () => { - resolveRunProperties.mockReturnValue({ - underline: { val: 'thick' }, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toEqual({ type: 'thick', color: undefined }); - }); - - it('extracts w:color', () => { - resolveRunProperties.mockReturnValue({ - underline: { 'w:val': 'single', 'w:color': 'FF0000' }, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toEqual({ type: 'single', color: 'FF0000' }); - }); - - it('extracts color without w: prefix', () => { - resolveRunProperties.mockReturnValue({ - underline: { type: 'double', color: '00FF00' }, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toEqual({ type: 'double', color: '00FF00' }); - }); - - it('handles "none" underline as undefined', () => { - resolveRunProperties.mockReturnValue({ - underline: { 'w:val': 'none' }, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toBeUndefined(); - }); - - it('handles null underline', () => { - resolveRunProperties.mockReturnValue({ - underline: null, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toBeUndefined(); - }); - - it('handles invalid underline object', () => { - resolveRunProperties.mockReturnValue({ - underline: {}, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toBeUndefined(); - }); - - it('handles non-string color value', () => { - resolveRunProperties.mockReturnValue({ - underline: { type: 'single', color: 123 }, - fontSize: 22, - }); - const para = { attrs: {} } as never; - const result = hydrateCharacterStyleAttrs(para, { docx: {} }); - expect(result?.underline).toEqual({ type: 'single', color: undefined }); - }); - }); -}); diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts index 36bf00860..62589bdf2 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts @@ -5,319 +5,34 @@ * including style resolution, boolean attributes, and Word layout integration. */ +import { toCssFontFamily } from '@superdoc/font-utils'; import type { ParagraphAttrs, ParagraphIndent, - ParagraphSpacing, - TabStop, DropCapDescriptor, DropCapRun, + ParagraphFrame, } from '@superdoc/contracts'; -import type { PMNode, StyleNode, StyleContext, ListCounterContext, ListRenderingAttrs } from '../types.js'; -import { resolveStyle, combineIndentProperties } from '@superdoc/style-engine'; +import type { PMNode } from '../types.js'; import type { - WordParagraphLayoutOutput, - ResolvedParagraphProperties, - DocDefaults, - NumberingProperties, ResolvedRunProperties, - ResolvedTabStop, - NumberingFormat, - WordListJustification, - WordListSuffix, } from '@superdoc/word-layout'; import { computeWordParagraphLayout } from '@superdoc/word-layout'; -import { Engines } from '@superdoc/contracts'; -import { - pickNumber, - twipsToPx, - isFiniteNumber, - ptToPx, - asOoxmlElement, - findOoxmlChild, - getOoxmlAttribute, - parseOoxmlNumber, - hasOwnProperty, - type OoxmlElement, -} from '../utilities.js'; +import { pickNumber, twipsToPx, isFiniteNumber, ptToPx } from '../utilities.js'; import { normalizeAlignment, normalizeParagraphSpacing, - normalizeParagraphIndent, - normalizePxIndent, - spacingPxToPt, - indentPxToPt, - spacingPtToPx, - indentPtToPx, } from './spacing-indent.js'; import { normalizeOoxmlTabs } from './tabs.js'; import { normalizeParagraphBorders, normalizeParagraphShading } from './borders.js'; -import { mirrorIndentForRtl, ensureBidiIndentPx, DEFAULT_BIDI_INDENT_PX } from './bidi.js'; -import { hydrateParagraphStyleAttrs, hydrateMarkerStyleAttrs } from './paragraph-styles.js'; -import type { ParagraphStyleHydration } from './paragraph-styles.js'; -import type { ConverterContext, ConverterNumberingContext } from '../converter-context.js'; - -const { resolveSpacingIndent } = Engines; - -const DEFAULT_DECIMAL_SEPARATOR = '.'; - -/** - * Checks if a numbering ID represents valid numbering properties. - * - * Per OOXML spec §17.9.16, `numId="0"` is a special sentinel value that disables - * numbering inherited from paragraph styles. This function validates that a numId - * is not null/undefined and not the special zero value (either numeric 0 or string '0'). - * - * @param numId - The numbering ID to validate (can be number, string, null, or undefined) - * @returns true if numId represents valid numbering (not null/undefined/0/'0'), false otherwise - * - * @example - * ```typescript - * isValidNumberingId(1) // true - valid numbering - * isValidNumberingId('5') // true - valid numbering (string form) - * isValidNumberingId(0) // false - disables numbering (OOXML spec) - * isValidNumberingId('0') // false - disables numbering (string form) - * isValidNumberingId(null) // false - no numbering - * isValidNumberingId(undefined) // false - no numbering - * ``` - */ -export const isValidNumberingId = (numId: number | string | null | undefined): boolean => { - return numId != null && numId !== 0 && numId !== '0'; -}; - -/** - * Tracks which paragraph spacing properties were explicitly set. - * - * Used to distinguish between explicit spacing values and those inherited - * from docDefaults/styles, which affects empty paragraph rendering behavior. - */ -type SpacingExplicit = { - /** Whether 'before' spacing was explicitly set */ - before?: boolean; - /** Whether 'after' spacing was explicitly set */ - after?: boolean; - /** Whether 'line' spacing was explicitly set */ - line?: boolean; -}; - -/** - * Extracts which spacing properties are explicitly set from a plain object. - * - * Checks for the presence of spacing-related property keys to determine - * if spacing values were explicitly specified vs inherited. - * - * @param value - The spacing object to analyze - * @returns Object indicating which spacing properties are explicit - * - * @example - * ```typescript - * extractSpacingExplicitFromObject({ before: 240 }); // { before: true } - * extractSpacingExplicitFromObject({ line: 360 }); // { line: true } - * extractSpacingExplicitFromObject({}); // {} - * ``` - */ -const extractSpacingExplicitFromObject = (value: unknown): SpacingExplicit => { - if (!value || typeof value !== 'object' || Array.isArray(value)) return {}; - const obj = value as Record; - const explicit: SpacingExplicit = {}; - if ( - hasOwnProperty(obj, 'before') || - hasOwnProperty(obj, 'lineSpaceBefore') || - hasOwnProperty(obj, 'beforeAutospacing') || - hasOwnProperty(obj, 'beforeAutoSpacing') - ) { - explicit.before = true; - } - if ( - hasOwnProperty(obj, 'after') || - hasOwnProperty(obj, 'lineSpaceAfter') || - hasOwnProperty(obj, 'afterAutospacing') || - hasOwnProperty(obj, 'afterAutoSpacing') - ) { - explicit.after = true; - } - if (hasOwnProperty(obj, 'line') || hasOwnProperty(obj, 'lineRule')) { - explicit.line = true; - } - return explicit; -}; - -/** - * Extracts which spacing properties are explicitly set from OOXML paragraph properties. - * - * Parses the OOXML structure to find w:spacing element attributes and determines - * which spacing values were explicitly specified in the document. - * - * @param value - The OOXML paragraph properties element - * @returns Object indicating which spacing properties are explicit - * - * @example - * ```typescript - * // For XML: - * extractSpacingExplicitFromOoxml(pPrElement); // { before: true } - * ``` - */ -const extractSpacingExplicitFromOoxml = (value: unknown): SpacingExplicit => { - const element = asOoxmlElement(value); - if (!element) return {}; - const pPr = element.name === 'w:pPr' ? element : findOoxmlChild(element, 'w:pPr'); - const spacingEl = findOoxmlChild(pPr, 'w:spacing'); - if (!spacingEl) return {}; - const explicit: SpacingExplicit = {}; - if ( - getOoxmlAttribute(spacingEl, 'w:before') != null || - getOoxmlAttribute(spacingEl, 'w:beforeAutospacing') != null || - getOoxmlAttribute(spacingEl, 'w:beforeAutoSpacing') != null - ) { - explicit.before = true; - } - if ( - getOoxmlAttribute(spacingEl, 'w:after') != null || - getOoxmlAttribute(spacingEl, 'w:afterAutospacing') != null || - getOoxmlAttribute(spacingEl, 'w:afterAutoSpacing') != null - ) { - explicit.after = true; - } - if (getOoxmlAttribute(spacingEl, 'w:line') != null || getOoxmlAttribute(spacingEl, 'w:lineRule') != null) { - explicit.line = true; - } - return explicit; -}; - -/** - * Merges multiple SpacingExplicit objects into one. - * - * If any source has a property set to true, the result will have that property as true. - * This allows tracking explicit settings across multiple sources (paragraphProps, attrs, OOXML). - * - * @param sources - The SpacingExplicit objects to merge - * @returns Merged SpacingExplicit with all explicit flags combined - * - * @example - * ```typescript - * mergeSpacingExplicit({ before: true }, { after: true }); - * // { before: true, after: true } - * ``` - */ -const mergeSpacingExplicit = (...sources: SpacingExplicit[]): SpacingExplicit => { - const merged: SpacingExplicit = {}; - for (const source of sources) { - if (source.before) merged.before = true; - if (source.after) merged.after = true; - if (source.line) merged.line = true; - } - return merged; -}; - -/** - * Merges spacing from multiple sources with increasing priority. - * - * In OOXML, a paragraph can have partial spacing overrides (e.g., only `line`) - * while inheriting other properties (e.g., `before`, `after`) from docDefaults - * or styles. This function merges all sources so that explicit values override - * defaults, but missing values fall back to lower-priority sources. - * - * Priority (lowest to highest): base (docDefaults/styles) < paragraphProps < attrs - * - * @param base - Spacing from hydrated styles (includes docDefaults) - * @param paragraphProps - Spacing from paragraphProperties - * @param attrs - Spacing from direct paragraph attrs (highest priority) - * @returns Merged spacing object, or undefined if all sources are empty - * - * @example - * ```typescript - * // Partial override: attrs only specifies 'line', inherits 'before' and 'after' from base - * mergeSpacingSources( - * { before: 10, after: 10 }, - * {}, - * { line: 1.5 } - * ) - * // Returns: { before: 10, after: 10, line: 1.5 } - * - * // Full override: attrs overrides all properties from base - * mergeSpacingSources( - * { before: 10, after: 10, line: 1.0 }, - * {}, - * { before: 20, after: 20, line: 2.0 } - * ) - * // Returns: { before: 20, after: 20, line: 2.0 } - * - * // Empty sources: returns undefined - * mergeSpacingSources({}, {}, {}) - * // Returns: undefined - * ``` - */ -export const mergeSpacingSources = ( - base: unknown, - paragraphProps: unknown, - attrs: unknown, -): Record | undefined => { - const isObject = (v: unknown): v is Record => v !== null && typeof v === 'object'; +import type { ConverterContext } from '../converter-context.js'; - const baseObj = isObject(base) ? base : {}; - const propsObj = isObject(paragraphProps) ? paragraphProps : {}; - const attrsObj = isObject(attrs) ? attrs : {}; +import { resolveParagraphProperties, resolveRunProperties, resolveDocxFontFamily, type ParagraphFrameProperties, type ParagraphProperties, type RunProperties } from '@superdoc/style-engine/ooxml'; - // If none of the sources have any data, return undefined - if (Object.keys(baseObj).length === 0 && Object.keys(propsObj).length === 0 && Object.keys(attrsObj).length === 0) { - return undefined; - } - - // Merge with increasing priority: base < paragraphProps < attrs - return { ...baseObj, ...propsObj, ...attrsObj }; -}; - -const normalizeNumFmt = (value?: unknown): NumberingFormat | undefined => { - if (typeof value !== 'string') return undefined; - switch (value) { - case 'decimal': - return 'decimal'; - case 'lowerLetter': - return 'lowerLetter'; - case 'upperLetter': - return 'upperLetter'; - case 'lowerRoman': - return 'lowerRoman'; - case 'upperRoman': - return 'upperRoman'; - case 'bullet': - return 'bullet'; - default: - return undefined; - } -}; -const normalizeSuffix = (value?: unknown): WordListSuffix => { - if (typeof value !== 'string') return undefined; - if (value === 'tab' || value === 'space' || value === 'nothing') { - return value; - } - return undefined; -}; - -const normalizeJustification = (value?: unknown): WordListJustification | undefined => { - if (typeof value !== 'string') return undefined; - if (value === 'start') return 'left'; - if (value === 'end') return 'right'; - if (value === 'left' || value === 'center' || value === 'right') return value; - return undefined; -}; +const DEFAULT_DECIMAL_SEPARATOR = '.'; +const DEFAULT_TAB_INTERVAL_TWIPS = 720; // 0.5 inch -const extractIndentFromLevel = (lvl: OoxmlElement | undefined): ParagraphIndent | undefined => { - const pPr = findOoxmlChild(lvl, 'w:pPr'); - const ind = findOoxmlChild(pPr, 'w:ind'); - if (!ind) return undefined; - const left = parseOoxmlNumber(getOoxmlAttribute(ind, 'w:left')); - const right = parseOoxmlNumber(getOoxmlAttribute(ind, 'w:right')); - const firstLine = parseOoxmlNumber(getOoxmlAttribute(ind, 'w:firstLine')); - const hanging = parseOoxmlNumber(getOoxmlAttribute(ind, 'w:hanging')); - const indent: ParagraphIndent = {}; - if (left != null) indent.left = left; - if (right != null) indent.right = right; - if (firstLine != null) indent.firstLine = firstLine; - if (hanging != null) indent.hanging = hanging; - return Object.keys(indent).length ? indent : undefined; -}; const normalizeColor = (value?: unknown): string | undefined => { if (typeof value !== 'string') return undefined; @@ -327,371 +42,28 @@ const normalizeColor = (value?: unknown): string | undefined => { return `#${upper.toUpperCase()}`; }; -const extractMarkerRun = (lvl: OoxmlElement | undefined): ResolvedRunProperties | undefined => { - const rPr = findOoxmlChild(lvl, 'w:rPr'); - if (!rPr) return undefined; - - const run: Partial = {}; - const rFonts = findOoxmlChild(rPr, 'w:rFonts'); - const font = - getOoxmlAttribute(rFonts, 'w:ascii') ?? - getOoxmlAttribute(rFonts, 'w:hAnsi') ?? - getOoxmlAttribute(rFonts, 'w:eastAsia'); - if (typeof font === 'string' && font.trim()) { - run.fontFamily = font; - } - - const sz = - parseOoxmlNumber(getOoxmlAttribute(findOoxmlChild(rPr, 'w:sz'), 'w:val')) ?? - parseOoxmlNumber(getOoxmlAttribute(findOoxmlChild(rPr, 'w:szCs'), 'w:val')); - if (sz != null) { - run.fontSize = sz / 2; // w:sz is in half-points - } - - const color = normalizeColor(getOoxmlAttribute(findOoxmlChild(rPr, 'w:color'), 'w:val')); - if (color) run.color = color; - - const boldEl = findOoxmlChild(rPr, 'w:b'); - if (boldEl) { - const boldVal = getOoxmlAttribute(boldEl, 'w:val'); - if (boldVal == null || isTruthy(boldVal)) run.bold = true; - } - - const italicEl = findOoxmlChild(rPr, 'w:i'); - if (italicEl) { - const italicVal = getOoxmlAttribute(italicEl, 'w:val'); - if (italicVal == null || isTruthy(italicVal)) run.italic = true; - } - - const spacingTwips = parseOoxmlNumber(getOoxmlAttribute(findOoxmlChild(rPr, 'w:spacing'), 'w:val')); - if (spacingTwips != null && Number.isFinite(spacingTwips)) { - run.letterSpacing = twipsToPx(spacingTwips); - } - - return Object.keys(run).length ? (run as ResolvedRunProperties) : undefined; -}; - -const findNumFmtElement = (lvl: OoxmlElement | undefined): OoxmlElement | undefined => { - if (!lvl) return undefined; - const direct = findOoxmlChild(lvl, 'w:numFmt'); - if (direct) return direct; - const alternate = findOoxmlChild(lvl, 'mc:AlternateContent'); - const choice = findOoxmlChild(alternate, 'mc:Choice'); - if (choice) { - return findOoxmlChild(choice, 'w:numFmt'); - } - return undefined; -}; - -const resolveNumberingFromContext = ( - numId: string | number, - ilvl: number, - numbering?: ConverterNumberingContext, -): Partial | undefined => { - const definitions = numbering?.definitions as Record | undefined; - const abstracts = numbering?.abstracts as Record | undefined; - if (!definitions || !abstracts) { - return undefined; - } - - const numDef = asOoxmlElement(definitions[String(numId)]); - if (!numDef) { - return undefined; - } - - const abstractId = getOoxmlAttribute(findOoxmlChild(numDef, 'w:abstractNumId'), 'w:val'); - if (abstractId == null) { - return undefined; - } - - const abstract = asOoxmlElement(abstracts[String(abstractId)]); - if (!abstract) { - return undefined; - } - - let levelDef = abstract.elements?.find( - (el) => el?.name === 'w:lvl' && parseOoxmlNumber(el.attributes?.['w:ilvl']) === ilvl, - ); - - const override = numDef.elements?.find( - (el) => el?.name === 'w:lvlOverride' && parseOoxmlNumber(el.attributes?.['w:ilvl']) === ilvl, - ); - const overrideLvl = findOoxmlChild(override, 'w:lvl'); - if (overrideLvl) { - levelDef = overrideLvl; - } - const startOverride = parseOoxmlNumber(getOoxmlAttribute(findOoxmlChild(override, 'w:startOverride'), 'w:val')); - - if (!levelDef) { - return undefined; - } - - const numFmtEl = findNumFmtElement(levelDef); - const lvlText = getOoxmlAttribute(findOoxmlChild(levelDef, 'w:lvlText'), 'w:val') as string | undefined; - const start = startOverride ?? parseOoxmlNumber(getOoxmlAttribute(findOoxmlChild(levelDef, 'w:start'), 'w:val')); - const suffix = normalizeSuffix(getOoxmlAttribute(findOoxmlChild(levelDef, 'w:suff'), 'w:val')); - const lvlJc = normalizeJustification(getOoxmlAttribute(findOoxmlChild(levelDef, 'w:lvlJc'), 'w:val')); - const indent = extractIndentFromLevel(levelDef); - const markerRun = extractMarkerRun(levelDef); - - const numFmt = normalizeNumFmt(getOoxmlAttribute(numFmtEl, 'w:val')); - - return { - format: numFmt, - lvlText, - start, - suffix, - lvlJc, - resolvedLevelIndent: indent, - resolvedMarkerRpr: markerRun, - }; -}; - -/** - * Check if a value represents a truthy boolean. - */ -const isTruthy = (value: unknown): boolean => { - if (value === true || value === 1) return true; - if (typeof value === 'string') { - const normalized = value.toLowerCase(); - if (normalized === 'true' || normalized === '1' || normalized === 'on') { - return true; - } - } - return false; -}; -/** - * Safely extracts a property from an unknown object. - * Used to replace unsafe type assertions with proper type guards. - * - * @param obj - The object to extract from - * @param key - The property key to extract - * @returns The property value, or undefined if not accessible - */ -const safeGetProperty = (obj: unknown, key: string): unknown => { - if (!obj || typeof obj !== 'object') { - return undefined; +export const deepClone = (obj: T): T => { + if (obj === null || typeof obj !== 'object') { + return obj; } - const record = obj as Record; - return record[key]; -}; - -/** - * Check if a value represents an explicit false boolean. - */ -const isExplicitFalse = (value: unknown): boolean => { - if (value === false || value === 0) return true; - if (typeof value === 'string') { - const normalized = value.toLowerCase(); - return normalized === 'false' || normalized === '0' || normalized === 'off'; + if (Array.isArray(obj)) { + return obj.map((item) => deepClone(item)) as unknown as T; } - return false; -}; - -/** - * Infer boolean value from OOXML paragraph elements. - */ -const inferBooleanFromParagraphElements = ( - paragraphProps: Record, - elementNames: string | string[], -): boolean | undefined => { - const elements = (paragraphProps as { elements?: unknown }).elements; - if (!Array.isArray(elements)) return undefined; - - const normalizedTargets = new Set( - (Array.isArray(elementNames) ? elementNames : [elementNames]).flatMap((name) => - name.startsWith('w:') ? [name, name.slice(2)] : [name, `w:${name}`], - ), - ); - - const match = elements.find((el): el is { name: string; attributes?: Record } => { - if (!el || typeof el !== 'object') return false; - const name = (el as { name?: unknown }).name; - return typeof name === 'string' && normalizedTargets.has(name); - }); - - if (!match) return undefined; - - const rawVal = match.attributes?.['w:val'] ?? match.attributes?.val; - - if (rawVal == null) return true; - if (isExplicitFalse(rawVal)) return false; - if (isTruthy(rawVal)) return true; - return undefined; -}; - -/** - * Resolve a boolean attribute from paragraph node, checking both direct attrs and paragraphProperties. - */ -export const resolveParagraphBooleanAttr = (para: PMNode, key: string, elementName: string): boolean | undefined => { - const attrs = (para.attrs ?? {}) as Record; - if (key in attrs) { - const direct = attrs[key]; - if (isTruthy(direct)) return true; - if (isExplicitFalse(direct)) return false; - } - const paragraphProps = attrs.paragraphProperties as Record | undefined; - if (!paragraphProps) return undefined; - if (key in paragraphProps) { - const nested = (paragraphProps as Record)[key]; - if (isTruthy(nested)) return true; - if (isExplicitFalse(nested)) return false; - } - return inferBooleanFromParagraphElements(paragraphProps, elementName); -}; - -/** - * Check if paragraph has page break before it. - */ -export const hasPageBreakBefore = (para: PMNode): boolean => { - const attrs = (para.attrs ?? {}) as Record; - if (isTruthy(attrs.pageBreakBefore)) { - return true; - } - const paragraphProps = attrs.paragraphProperties as Record | undefined; - if (paragraphProps && isTruthy(paragraphProps.pageBreakBefore)) { - return true; - } - if (paragraphProps) { - const inferred = inferBooleanFromParagraphElements(paragraphProps, 'w:pageBreakBefore'); - if (typeof inferred === 'boolean') { - return inferred; + const clone: Record = {}; + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + clone[key] = deepClone((obj as Record)[key]); } } - return false; -}; - -/** - * Clone paragraph attributes deeply. - */ -export const cloneParagraphAttrs = (attrs?: ParagraphAttrs): ParagraphAttrs | undefined => { - if (!attrs) return undefined; - const clone: ParagraphAttrs = { ...attrs }; - if (attrs.spacing) clone.spacing = { ...attrs.spacing }; - if (attrs.spacingExplicit) clone.spacingExplicit = { ...attrs.spacingExplicit }; - if (attrs.indent) clone.indent = { ...attrs.indent }; - if (attrs.borders) { - const borderClone: ParagraphAttrs['borders'] = {}; - (['top', 'right', 'bottom', 'left'] as const).forEach((side) => { - const border = attrs.borders?.[side]; - if (border) { - borderClone[side] = { ...border }; - } - }); - clone.borders = Object.keys(borderClone).length ? borderClone : undefined; - } - if (attrs.shading) clone.shading = { ...attrs.shading }; - if (attrs.tabs) clone.tabs = attrs.tabs.map((tab) => ({ ...tab })); - // Clone drop cap descriptor deeply - if (attrs.dropCapDescriptor) { - clone.dropCapDescriptor = { - ...attrs.dropCapDescriptor, - run: { ...attrs.dropCapDescriptor.run }, - }; - } - return clone; -}; - -/** - * Build a style node from paragraph node attributes. - * Used for style resolution with the style engine. - */ -export const buildStyleNodeFromAttrs = ( - attrs: Record | undefined, - spacing?: ParagraphSpacing, - indent?: ParagraphIndent, -): StyleNode => { - if (!attrs) return {}; - - const paragraphProps: StyleNode['paragraphProps'] = {}; - - const alignment = normalizeAlignment(attrs.alignment ?? attrs.textAlign); - if (alignment) { - paragraphProps.alignment = alignment; - } - - if (spacing) { - paragraphProps.spacing = spacingPxToPt(spacing); - } - - if (indent) { - paragraphProps.indent = indentPxToPt(indent); - } - - const rawTabs = (attrs.tabs ?? attrs.tabStops) as unknown; - const tabs = normalizeOoxmlTabs(rawTabs); - if (tabs) { - paragraphProps.tabs = tabs; - } - - const styleNode: StyleNode = {}; - if (paragraphProps && Object.keys(paragraphProps).length > 0) { - styleNode.paragraphProps = paragraphProps; - } - - return styleNode; + return clone as T; }; -/** - * Normalize list rendering attributes from raw attributes. - */ -export const normalizeListRenderingAttrs = (value: unknown): ListRenderingAttrs | undefined => { - if (!value || typeof value !== 'object') return undefined; - const source = value as Record; - - const markerText = typeof source.markerText === 'string' ? source.markerText : undefined; - const justification = - source.justification === 'left' || source.justification === 'right' || source.justification === 'center' - ? source.justification - : undefined; - const numberingType = typeof source.numberingType === 'string' ? source.numberingType : undefined; - const suffix = - source.suffix === 'tab' || source.suffix === 'space' || source.suffix === 'nothing' ? source.suffix : undefined; - - const path = - Array.isArray(source.path) && source.path.length - ? (source.path - .map((entry) => (typeof entry === 'number' ? entry : Number(entry))) - .filter((entry) => Number.isFinite(entry)) as number[]) - : undefined; - - return { - markerText, - justification, - numberingType, - suffix, - path: path && path.length ? path : undefined, - }; -}; - -/** - * Build numbering path for multi-level lists (e.g., "1.2.3"). - */ -export const buildNumberingPath = ( - numId: number | undefined, - ilvl: number, - counterValue: number, - listCounterContext?: ListCounterContext, -): number[] => { - const targetLevel = Number.isFinite(ilvl) && ilvl > 0 ? Math.floor(ilvl) : 0; - if (!listCounterContext || typeof numId !== 'number') { - return Array.from({ length: targetLevel + 1 }, (_, level) => (level === targetLevel ? counterValue : 1)); - } - - const path: number[] = []; - for (let level = 0; level < targetLevel; level += 1) { - const parentValue = listCounterContext.getListCounter(numId, level); - path.push(parentValue > 0 ? parentValue : 1); - } - path.push(counterValue); - return path; -}; /** * Convert indent from twips to pixels. */ -const convertIndentTwipsToPx = (indent?: ParagraphIndent | null): ParagraphIndent | undefined => { +const normalizeIndentTwipsToPx = (indent?: ParagraphIndent | null): ParagraphIndent | undefined => { if (!indent) return undefined; const result: ParagraphIndent = {}; const toNum = (v: unknown): number | undefined => { @@ -712,66 +84,64 @@ const convertIndentTwipsToPx = (indent?: ParagraphIndent | null): ParagraphInden return Object.keys(result).length > 0 ? result : undefined; }; -type AdapterNumberingProps = (NumberingProperties & { - path?: number[]; - counterValue?: number; - resolvedLevelIndent?: ParagraphIndent; - resolvedMarkerRpr?: ResolvedRunProperties; -}) & - Record; -const toAdapterNumberingProps = (value: unknown): AdapterNumberingProps | undefined => { - if (!value || typeof value !== 'object') return undefined; - const candidate = value as Record; - const rawNumId = candidate.numId; - if (typeof rawNumId !== 'number' && typeof rawNumId !== 'string') { - return undefined; +export const normalizeFramePr = (value: ParagraphFrameProperties | undefined): ParagraphFrame | undefined => { + if (!value) return undefined; + + const frame: Record = {}; + if (value.wrap) { + frame.wrap = value.wrap; } - const rawIlvl = candidate.ilvl; - const normalizedIlvl = Number.isFinite(rawIlvl) ? Math.floor(Number(rawIlvl)) : 0; - return { - ...(candidate as Record), - numId: rawNumId, - ilvl: normalizedIlvl, - } as AdapterNumberingProps; -}; + if (value.x != null) { + frame.x = twipsToPx(value.x); + } + if (value.y != null) { + frame.y = twipsToPx(value.y); + } + if (value.xAlign) { + frame.xAlign = value.xAlign as 'left' | 'right' | 'center'; + } + if (value.yAlign) { + frame.yAlign = value.yAlign as 'top' | 'center' | 'bottom'; + } + if (value.hAnchor) { + frame.hAnchor = value.hAnchor; + } + if (value.vAnchor) { + frame.vAnchor = value.vAnchor; + } + return Object.keys(frame).length > 0 ? frame as ParagraphFrame : undefined; +} -const toResolvedTabStops = (tabs?: TabStop[] | null): ResolvedTabStop[] | undefined => { - if (!Array.isArray(tabs) || tabs.length === 0) return undefined; - const resolved: ResolvedTabStop[] = []; +export const normalizeDropCap = (framePr: ParagraphFrameProperties | undefined, para: PMNode, converterContext?: ConverterContext): DropCapDescriptor | undefined => { + if (!framePr) return undefined; - for (const stop of tabs) { - if (!stop || typeof stop.pos !== 'number') continue; - const alignment = normalizeResolvedTabAlignment(stop.val); - if (!alignment) continue; - const position = twipsToPx(stop.pos); - if (!Number.isFinite(position)) continue; + // Keep the legacy dropCap flag for backward compatibility + const dropCap = framePr.dropCap; - const resolvedStop: ResolvedTabStop = { - position, - alignment, + // Build structured DropCapDescriptor for enhanced drop cap support + const dropCapMode = typeof dropCap === 'string' ? dropCap.toLowerCase() : 'drop'; + const linesValue = pickNumber(framePr.lines); + + // Extract the drop cap text and run styling from paragraph content + const dropCapRunInfo = extractDropCapRunFromParagraph(para, converterContext); + + if (dropCapRunInfo) { + const descriptor: DropCapDescriptor = { + mode: dropCapMode === 'margin' ? 'margin' : 'drop', + lines: linesValue != null && linesValue > 0 ? linesValue : 3, + run: dropCapRunInfo, }; - if (stop.leader && stop.leader !== 'none') { - resolvedStop.leader = stop.leader as ResolvedTabStop['leader']; - } - resolved.push(resolvedStop); - } - return resolved.length > 0 ? resolved : undefined; -}; + // Map wrap value to the expected types + if (framePr.wrap) { + descriptor.wrap = (framePr.wrap === 'auto' ? undefined : framePr.wrap) as 'around' | 'notBeside' | 'none' | 'tight'; + + } -const normalizeResolvedTabAlignment = (value: TabStop['val']): ResolvedTabStop['alignment'] | undefined => { - switch (value) { - case 'start': - case 'center': - case 'end': - case 'decimal': - case 'bar': - return value; - default: - return undefined; + return descriptor; } -}; +} /** * Default drop cap font size in pixels. @@ -794,1213 +164,140 @@ const DEFAULT_DROP_CAP_FONT_FAMILY = 'Times New Roman'; * @param para - The paragraph PM node to extract drop cap info from * @returns DropCapRun with text and styling, or null if extraction fails */ -const extractDropCapRunFromParagraph = (para: PMNode): DropCapRun | null => { +const extractDropCapRunFromParagraph = (para: PMNode, converterContext?: ConverterContext): DropCapRun | null => { const content = para.content; if (!Array.isArray(content) || content.length === 0) { return null; } - // Find the first text content in the paragraph - let text = ''; - let runProperties: Record = {}; - let textStyleMarks: Record = {}; - - /** - * Maximum recursion depth for extractTextAndStyle to prevent stack overflow. - * A depth of 50 should be sufficient for any reasonable document structure. - */ - const MAX_RECURSION_DEPTH = 50; - - const extractTextAndStyle = (nodes: PMNode[], depth = 0): boolean => { - // Guard against excessive recursion depth - if (depth > MAX_RECURSION_DEPTH) { - console.warn(`extractTextAndStyle exceeded max recursion depth (${MAX_RECURSION_DEPTH})`); - return false; - } - - for (const node of nodes) { - if (!node) continue; - - // Check for text node - if (node.type === 'text' && typeof node.text === 'string' && node.text.length > 0) { - text = node.text; - // Extract styling from marks - if (Array.isArray(node.marks)) { - for (const mark of node.marks) { - if (mark?.type === 'textStyle' && mark.attrs) { - textStyleMarks = { ...textStyleMarks, ...(mark.attrs as Record) }; - } - } - } - return true; - } - - // Check for run node that may contain text - if (node.type === 'run') { - // Extract run properties - if (node.attrs?.runProperties && typeof node.attrs.runProperties === 'object') { - runProperties = { ...runProperties, ...(node.attrs.runProperties as Record) }; - } - // Also check for marks on the run node - if (Array.isArray(node.marks)) { - for (const mark of node.marks) { - if (mark?.type === 'textStyle' && mark.attrs) { - textStyleMarks = { ...textStyleMarks, ...(mark.attrs as Record) }; - } - } - } - // Look for text in run's children with incremented depth - if (Array.isArray(node.content) && extractTextAndStyle(node.content, depth + 1)) { - return true; - } - } - - // Look for text in other container nodes with incremented depth - if (Array.isArray(node.content) && extractTextAndStyle(node.content, depth + 1)) { - return true; - } - } - return false; - }; - - extractTextAndStyle(content); - - // If no text found, cannot create a drop cap run - if (!text) { + const firstRun = content.find((node) => node?.type === 'run'); + if (!firstRun || !Array.isArray(firstRun.content)) { return null; } - - // Merge run properties and text style marks to get final styling - const mergedStyle = { ...runProperties, ...textStyleMarks }; - - // Parse font size - can be in various formats: '117pt', '48px', number, etc. - let fontSizePx = DEFAULT_DROP_CAP_FONT_SIZE_PX; - const rawFontSize = mergedStyle.fontSize ?? mergedStyle['w:sz'] ?? mergedStyle.sz; - if (rawFontSize != null) { - if (typeof rawFontSize === 'number') { - // If number > 100, assume it's half-points (Word uses half-points for sz) - // Half-points: w:sz=234 means 117pt - const converted = rawFontSize > 100 ? ptToPx(rawFontSize / 2) : rawFontSize; - fontSizePx = converted ?? DEFAULT_DROP_CAP_FONT_SIZE_PX; - } else if (typeof rawFontSize === 'string') { - const numericPart = parseFloat(rawFontSize); - if (Number.isFinite(numericPart)) { - if (rawFontSize.endsWith('pt')) { - const converted = ptToPx(numericPart); - fontSizePx = converted ?? DEFAULT_DROP_CAP_FONT_SIZE_PX; - } else if (rawFontSize.endsWith('px')) { - // px values are already in pixels - fontSizePx = numericPart; - } else { - // Plain number string - assume half-points if large - const converted = numericPart > 100 ? ptToPx(numericPart / 2) : numericPart; - fontSizePx = converted ?? DEFAULT_DROP_CAP_FONT_SIZE_PX; - } - } - } + const textNode = firstRun.content.find((node) => node?.type === 'text' && typeof node.text === 'string' && node.text.length > 0); + if (!textNode || !textNode.text) { + return null; } - // Parse font family - let fontFamily = DEFAULT_DROP_CAP_FONT_FAMILY; - const rawFontFamily = mergedStyle.fontFamily ?? mergedStyle['w:rFonts'] ?? mergedStyle.rFonts; - if (typeof rawFontFamily === 'string') { - fontFamily = rawFontFamily; - } else if (rawFontFamily && typeof rawFontFamily === 'object') { - // rFonts can be an object with ascii, hAnsi, etc. - const rFonts = rawFontFamily as Record; - const ascii = rFonts['w:ascii'] ?? rFonts.ascii; - if (typeof ascii === 'string') { - fontFamily = ascii; - } + const text = textNode.text; + const runProperties = (firstRun.attrs?.runProperties ?? {}) as RunProperties; + let resolvedRunProperties; + if (converterContext) { + resolvedRunProperties = resolveRunProperties(converterContext, runProperties, {}, false, false); + } else { + resolvedRunProperties = runProperties as RunProperties; } + const runAttrs = computeRunAttrs(resolvedRunProperties, converterContext, DEFAULT_DROP_CAP_FONT_SIZE_PX, DEFAULT_DROP_CAP_FONT_FAMILY); + + // Build the drop cap run const dropCapRun: DropCapRun = { text, - fontFamily, - fontSize: fontSizePx, + fontFamily: runAttrs.fontFamily, + fontSize: runAttrs.fontSize, + bold: runAttrs.bold, + italic: runAttrs.italic, + color: runAttrs.color, + position: resolvedRunProperties.position != null ? ptToPx(resolvedRunProperties.position / 2) : undefined, }; - // Parse optional properties - const bold = mergedStyle.bold ?? mergedStyle['w:b'] ?? mergedStyle.b; - if (isTruthy(bold)) { - dropCapRun.bold = true; - } - - const italic = mergedStyle.italic ?? mergedStyle['w:i'] ?? mergedStyle.i; - if (isTruthy(italic)) { - dropCapRun.italic = true; - } - - const color = mergedStyle.color ?? mergedStyle['w:color'] ?? mergedStyle.val; - if (typeof color === 'string' && color.length > 0 && color.toLowerCase() !== 'auto') { - // Ensure color has # prefix if it's a hex color - dropCapRun.color = color.startsWith('#') ? color : `#${color}`; - } - - // Parse vertical position offset (from w:position, in half-points, can be negative) - const position = mergedStyle.position ?? mergedStyle['w:position']; - if (position != null) { - const posNum = pickNumber(position); - if (posNum != null) { - // Convert half-points to pixels - dropCapRun.position = ptToPx(posNum / 2); - } - } - return dropCapRun; }; -/** - * Compute Word paragraph layout for numbered paragraphs. - * - * Integrates with @superdoc/word-layout to compute accurate list marker positioning, - * indent calculation, and marker text rendering. Merges paragraph indent with - * level-specific indent from numbering definitions. - * - * @param paragraphAttrs - Resolved paragraph attributes including spacing, indent, and tabs - * @param numberingProps - Numbering properties with numId, ilvl, and optional resolved marker RPr - * @param styleContext - Style context for resolving character styles and doc defaults - * @param paragraphNode - Optional paragraph node used to hydrate marker run properties via OOXML cascade - * @returns WordParagraphLayoutOutput with marker and gutter information, or null if computation fails - * - * @remarks - * - Returns null early if numberingProps is explicitly null (vs undefined) - * - Uses marker hydration when converterContext is available, then falls back to resolvedMarkerRpr and style-engine defaults - * - Converts indent from twips to pixels for rendering - * - Gracefully handles computation errors by returning null - */ -export const computeWordLayoutForParagraph = ( - paragraphAttrs: ParagraphAttrs, - numberingProps: AdapterNumberingProps | undefined, - styleContext: StyleContext, - paragraphNode?: PMNode, - converterContext?: ConverterContext, - resolvedPpr?: Record, -): WordParagraphLayoutOutput | null => { - if (numberingProps === null) { - return null; - } - - try { - // Merge paragraph indent with level-specific indent from numbering definition. - // Numbering level provides base indent, but paragraph/style can override specific properties. - // For example, a style may set firstLine=0 to remove numbering's firstLine indent. - let effectiveIndent = paragraphAttrs.indent; - - if (numberingProps?.resolvedLevelIndent) { - const resolvedIndentPx = convertIndentTwipsToPx(numberingProps.resolvedLevelIndent as ParagraphIndent); - const numberingIndent = resolvedIndentPx ?? (numberingProps.resolvedLevelIndent as ParagraphIndent); - - // Numbering indent is the base, paragraph/style indent overrides - effectiveIndent = { - ...numberingIndent, - ...paragraphAttrs.indent, - }; - } - - const resolvedTabs = toResolvedTabStops(paragraphAttrs.tabs); - - // Build resolved paragraph properties - const resolvedParagraph: ResolvedParagraphProperties = { - indent: effectiveIndent, - spacing: paragraphAttrs.spacing, - tabs: resolvedTabs, - tabIntervalTwips: paragraphAttrs.tabIntervalTwips, - alignment: paragraphAttrs.alignment as 'left' | 'center' | 'right' | 'justify' | undefined, - decimalSeparator: paragraphAttrs.decimalSeparator, - numberingProperties: numberingProps, - }; - - // Build doc defaults from style context - const defaultFontFamily = - styleContext.defaults?.paragraphFont ?? styleContext.defaults?.paragraphFontFamily ?? 'Times New Roman'; - const defaultFontSize = styleContext.defaults?.fontSize ?? 12; - - const docDefaults: DocDefaults = { - defaultTabIntervalTwips: styleContext.defaults?.defaultTabIntervalTwips ?? 720, - decimalSeparator: styleContext.defaults?.decimalSeparator ?? '.', - run: { - fontFamily: defaultFontFamily, - fontSize: defaultFontSize, - }, - paragraph: { - indent: {}, - spacing: {}, - }, - }; - - let markerRun: ResolvedRunProperties | undefined; - - const markerHydration = - paragraphNode && converterContext ? hydrateMarkerStyleAttrs(paragraphNode, converterContext, resolvedPpr) : null; - - if (markerHydration) { - const resolvedColor = markerHydration.color ? `#${markerHydration.color.replace('#', '')}` : undefined; - markerRun = { - fontFamily: markerHydration.fontFamily ?? 'Times New Roman', - fontSize: markerHydration.fontSize / 2, // half-points to points - bold: markerHydration.bold, - italic: markerHydration.italic, - color: resolvedColor, - letterSpacing: markerHydration.letterSpacing != null ? twipsToPx(markerHydration.letterSpacing) : undefined, - }; - } - - if (!markerRun) { - markerRun = numberingProps?.resolvedMarkerRpr; - } - - if (!markerRun) { - // Fallback to style-engine when converterContext is not available - // This path uses hardcoded defaults but maintains backwards compatibility - const { character: characterStyle } = resolveStyle({ styleId: paragraphAttrs.styleId }, styleContext); - if (characterStyle) { - markerRun = { - fontFamily: characterStyle.font?.family ?? 'Times New Roman', - fontSize: characterStyle.font?.size ?? 12, - bold: characterStyle.font?.weight != null && characterStyle.font.weight > 400, - italic: characterStyle.font?.italic, - color: characterStyle.color, - letterSpacing: characterStyle.letterSpacing, - }; - } - } - - // Final fallback if neither hydration nor style-engine returned anything - if (!markerRun) { - markerRun = { - fontFamily: 'Times New Roman', - fontSize: 12, - color: '#000000', - }; - } - - // Convert marker fontSize from points to pixels - // Style-engine and document defaults use points, but buildFontCss expects pixels - if (markerRun.fontSize != null) { - const fontSizePx = ptToPx(markerRun.fontSize); - if (fontSizePx != null) { - markerRun = { ...markerRun, fontSize: fontSizePx }; - } - } - - // Compute Word paragraph layout - const layout = computeWordParagraphLayout({ - paragraph: resolvedParagraph, - numbering: numberingProps, - markerRun, - docDefaults, - }); - - return layout; - } catch { - // Graceful fallback if wordLayout computation fails - return null; - } -}; - -const normalizeWordLayoutForIndent = ( - wordLayout: WordParagraphLayoutOutput, - paragraphIndent: ParagraphIndent | undefined, -): WordParagraphLayoutOutput => { - const resolvedIndent = wordLayout.resolvedIndent ?? paragraphIndent ?? {}; - const indentLeft = isFiniteNumber(resolvedIndent.left) ? resolvedIndent.left : 0; - const firstLine = isFiniteNumber(resolvedIndent.firstLine) ? resolvedIndent.firstLine : 0; - const hanging = isFiniteNumber(resolvedIndent.hanging) ? resolvedIndent.hanging : 0; - const shouldFirstLineIndentMode = firstLine > 0 && !hanging; - - if (wordLayout.firstLineIndentMode === true && !shouldFirstLineIndentMode) { - wordLayout.firstLineIndentMode = false; - } - - if (wordLayout.firstLineIndentMode === true) { - if (isFiniteNumber(wordLayout.textStartPx)) { - if ( - wordLayout.marker && - (!isFiniteNumber(wordLayout.marker.textStartX) || wordLayout.marker.textStartX !== wordLayout.textStartPx) - ) { - wordLayout.marker.textStartX = wordLayout.textStartPx; - } - } else if (wordLayout.marker && isFiniteNumber(wordLayout.marker.textStartX)) { - wordLayout.textStartPx = wordLayout.marker.textStartX; - } - } else { - wordLayout.textStartPx = indentLeft; - if (wordLayout.marker) { - wordLayout.marker.textStartX = indentLeft; - } - } - - return wordLayout; -}; - /** * Compute paragraph attributes from PM node, resolving styles and handling BiDi text. * This is the main function for converting PM paragraph attributes to layout engine format. */ export const computeParagraphAttrs = ( para: PMNode, - styleContext: StyleContext, - listCounterContext?: ListCounterContext, converterContext?: ConverterContext, - hydrationOverride?: ParagraphStyleHydration | null, -): ParagraphAttrs | undefined => { +): { paragraphAttrs: ParagraphAttrs, resolvedParagraphProperties: ParagraphProperties } => { const attrs = para.attrs ?? {}; - const paragraphProps = - typeof attrs.paragraphProperties === 'object' && attrs.paragraphProperties !== null - ? (attrs.paragraphProperties as Record) - : {}; - const hydrated = hydrationOverride ?? hydrateParagraphStyleAttrs(para, converterContext); - // Merge spacing from all sources: hydrated (docDefaults/styles) < paragraphProps < attrs - // This ensures that a partial spacing override (e.g., only line) doesn't discard - // defaults for unspecified fields (e.g., before/after from docDefaults). - const mergedSpacing = mergeSpacingSources(hydrated?.spacing, paragraphProps.spacing, attrs.spacing); - const normalizedSpacing = normalizeParagraphSpacing(mergedSpacing); - const spacingExplicit = mergeSpacingExplicit( - extractSpacingExplicitFromObject(paragraphProps.spacing), - extractSpacingExplicitFromObject(attrs.spacing), - extractSpacingExplicitFromOoxml(paragraphProps), - ); - const normalizeIndentObject = (value: unknown): ParagraphIndent | undefined => { - if (!value || typeof value !== 'object') return; - return normalizePxIndent(value) ?? convertIndentTwipsToPx(value); - }; - /** - * Build indent chain with increasing priority order (lowest to highest): - * 1. hydratedIndentPx - from styles (docDefaults, paragraph styles) - * 2. paragraphIndentPx - from paragraphProperties.indent (inline paragraph properties) - * 3. textIndentPx - from attrs.textIndent (legacy/alternative format) - * 4. attrsIndentPx - from attrs.indent (direct paragraph attributes - highest priority) - * - * This follows the standard OOXML cascade: styles < inline properties < direct attributes. - * The `combineIndentProperties` function merges these in order, where later entries - * override earlier ones for the same property. - */ - const hydratedIndentPx = convertIndentTwipsToPx(hydrated?.indent as ParagraphIndent); - const paragraphIndentPx = convertIndentTwipsToPx(paragraphProps.indent as ParagraphIndent); - const textIndentPx = normalizeParagraphIndent(attrs.textIndent); - const attrsIndentPx = normalizeIndentObject(attrs.indent); - - const indentChain: Array> = []; - if (hydratedIndentPx) indentChain.push({ indent: hydratedIndentPx }); - if (paragraphIndentPx) indentChain.push({ indent: paragraphIndentPx }); - if (textIndentPx) indentChain.push({ indent: textIndentPx }); - if (attrsIndentPx) indentChain.push({ indent: attrsIndentPx }); - - const normalizedIndent = indentChain.length - ? (combineIndentProperties(indentChain).indent as ParagraphIndent | undefined) - : undefined; - - /** - * Unwraps and normalizes tab stop data structures from various formats. - * - * Handles two primary formats: - * 1. Nested format: `{ tab: { tabType: 'start', pos: 720 } }` (OOXML-style) - * 2. Direct format: `{ val: 'start', pos: 720 }` (normalized) - * - * Performs runtime validation to ensure: - * - Input is an array - * - Each entry is an object with valid structure - * - Required properties (val/tabType and pos) are present and correctly typed - * - Optional properties (leader, originalPos) are validated if present - * - * @param tabStops - Unknown input that may contain tab stop data - * @returns Array of normalized tab stop objects, or undefined if invalid/empty - * - * @example - * ```typescript - * // Nested format - * unwrapTabStops([{ tab: { tabType: 'start', pos: 720 } }]) - * // Returns: [{ val: 'start', pos: 720 }] - * - * // Direct format - * unwrapTabStops([{ val: 'center', pos: 1440, leader: 'dot' }]) - * // Returns: [{ val: 'center', pos: 1440, leader: 'dot' }] - * - * // Invalid input - * unwrapTabStops("not an array") - * // Returns: undefined - * ``` - */ - const unwrapTabStops = (tabStops: unknown): Array> | undefined => { - // Runtime type guard: validate input is an array - if (!Array.isArray(tabStops)) { - return undefined; - } - - const unwrapped: Array> = []; - - for (const entry of tabStops) { - // Runtime type guard: validate entry is a non-null object - if (!entry || typeof entry !== 'object') { - continue; - } - - // Type guard: check for nested format { tab: {...} } - if ('tab' in entry) { - const entryRecord = entry as Record; - const tab = entryRecord.tab; - - // Validate tab property is a non-null object - if (!tab || typeof tab !== 'object') { - continue; - } - - const tabObj = tab as Record; - - // Validate and extract val (alignment type) - const val = - typeof tabObj.tabType === 'string' ? tabObj.tabType : typeof tabObj.val === 'string' ? tabObj.val : undefined; - - // Validate and extract pos (position in twips) - // Priority: originalPos > pos. If originalPos is absent, preserve pos as both pos and originalPos - // so downstream normalization (which doesn't know about nesting) keeps twips and skips px heuristics. - const originalPos = pickNumber(tabObj.originalPos); - const pos = originalPos ?? pickNumber(tabObj.pos); - - // Skip entry if required fields are missing or invalid - if (!val || pos == null) { - continue; - } - - // Build normalized tab stop object with validated properties - const normalized: Record = { val, pos }; - - // Set originalPos when available; if absent, mirror pos to preserve twips through later flattening - if (originalPos != null && Number.isFinite(originalPos)) { - normalized.originalPos = originalPos; - } else { - normalized.originalPos = pos; - } - - // Validate and add optional leader property - const leader = tabObj.leader; - if (typeof leader === 'string' && leader.length > 0) { - normalized.leader = leader; - } - - unwrapped.push(normalized); - continue; - } - - // Direct format - entry is already a tab stop object - // Validate it has the expected structure before adding - const entryRecord = entry as Record; - - // Check if it has at least the basic tab stop properties - const hasValidStructure = - ('val' in entryRecord || 'tabType' in entryRecord) && ('pos' in entryRecord || 'originalPos' in entryRecord); - - if (hasValidStructure) { - unwrapped.push(entryRecord); - } - } - - return unwrapped.length > 0 ? unwrapped : undefined; - }; - - const styleNodeAttrs = { ...attrs }; - const asTabStopArray = (value: unknown): Array> | undefined => { - return Array.isArray(value) ? (value as Array>) : undefined; - }; - const attrTabStops = - unwrapTabStops(styleNodeAttrs.tabStops ?? styleNodeAttrs.tabs) ?? asTabStopArray(styleNodeAttrs.tabStops); - const hydratedTabStops = unwrapTabStops(hydrated?.tabStops) ?? asTabStopArray(hydrated?.tabStops); - const paragraphTabStops = unwrapTabStops(paragraphProps.tabStops) ?? asTabStopArray(paragraphProps.tabStops); - - // Keep the unit heuristic aligned with normalizeOoxmlTabs. - const TAB_STOP_PX_TO_TWIPS = 15; - const TAB_STOP_TWIPS_THRESHOLD = 1000; - - const getTabStopPosition = (entry: Record): number | undefined => { - const originalPos = pickNumber(entry.originalPos); - if (originalPos != null) return originalPos; - const posValue = pickNumber(entry.pos ?? entry.position ?? entry.offset); - if (posValue == null) return undefined; - return posValue > TAB_STOP_TWIPS_THRESHOLD ? posValue : Math.round(posValue * TAB_STOP_PX_TO_TWIPS); - }; - - const mergeTabStopSources = ( - ...sources: Array> | undefined> - ): Array> | undefined => { - const merged = new Map>(); - for (const source of sources) { - if (!Array.isArray(source)) continue; - for (const stop of source) { - if (!stop || typeof stop !== 'object') continue; - const position = getTabStopPosition(stop); - if (position == null) continue; - merged.set(position, { ...stop }); - } - } - if (merged.size === 0) return undefined; - return Array.from(merged.entries()) - .sort(([a], [b]) => a - b) - .map(([, stop]) => stop); - }; - - const mergedTabStops = mergeTabStopSources(hydratedTabStops, paragraphTabStops, attrTabStops); - - if (mergedTabStops) { - styleNodeAttrs.tabStops = mergedTabStops; - if ('tabs' in styleNodeAttrs) { - delete styleNodeAttrs.tabs; - } - } - - const styleNode = buildStyleNodeFromAttrs(styleNodeAttrs, normalizedSpacing, normalizedIndent); - if (styleNodeAttrs.styleId == null && paragraphProps.styleId) { - styleNode.styleId = paragraphProps.styleId as string; - } - const computed = resolveStyle(styleNode, styleContext); - const { spacing, indent } = resolveSpacingIndent(computed.paragraph, computed.numbering); - - const paragraphAttrs: ParagraphAttrs = {}; - const bidi = resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi') === true; - const adjustRightInd = resolveParagraphBooleanAttr(para, 'adjustRightInd', 'w:adjustRightInd') === true; - - if (bidi) { - paragraphAttrs.direction = 'rtl'; - paragraphAttrs.rtl = true; - } - - /** - * Paragraph alignment priority cascade (6 levels, highest to lowest): - * - * 1. bidi + adjustRightInd: Forced right alignment for BiDi paragraphs with right indent adjustment - * 2. explicitAlignment: Direct alignment attribute on the paragraph node (attrs.alignment or attrs.textAlign) - * 3. paragraphAlignment: Paragraph justification from paragraphProperties (inline paragraph-level formatting) - * 4. bidi alone: Default right alignment for BiDi paragraphs without explicit alignment - * 5. styleAlignment: Alignment from hydrated paragraph style (style-based formatting) - * 6. computed.paragraph.alignment: Fallback alignment from style engine computation - * - * This cascade ensures that inline paragraph properties (level 3) correctly override style-based - * alignment (levels 5-6), matching Microsoft Word's behavior where direct paragraph formatting - * takes precedence over style-based formatting. - */ - const explicitAlignment = normalizeAlignment(attrs.alignment ?? attrs.textAlign); - const paragraphAlignment = - typeof paragraphProps.justification === 'string' ? normalizeAlignment(paragraphProps.justification) : undefined; - const styleAlignment = hydrated?.alignment ? normalizeAlignment(hydrated.alignment) : undefined; - - if (bidi && adjustRightInd) { - paragraphAttrs.alignment = 'right'; - } else if (explicitAlignment) { - paragraphAttrs.alignment = explicitAlignment; - } else if (paragraphAlignment) { - // Inline paragraph justification should override style-derived alignment - paragraphAttrs.alignment = paragraphAlignment; - } else if (bidi) { - // RTL paragraphs without explicit alignment default to right - paragraphAttrs.alignment = 'right'; - } else if (styleAlignment) { - paragraphAttrs.alignment = styleAlignment; - } else if (computed.paragraph.alignment) { - paragraphAttrs.alignment = normalizeAlignment(computed.paragraph.alignment); - } - - const spacingPx = spacingPtToPx(spacing, normalizedSpacing); - if (spacingPx) paragraphAttrs.spacing = spacingPx; - if (normalizedSpacing?.beforeAutospacing != null || normalizedSpacing?.afterAutospacing != null) { - paragraphAttrs.spacing = paragraphAttrs.spacing ?? {}; - if (normalizedSpacing?.beforeAutospacing != null) { - (paragraphAttrs.spacing as Record).beforeAutospacing = normalizedSpacing.beforeAutospacing; - } - if (normalizedSpacing?.afterAutospacing != null) { - (paragraphAttrs.spacing as Record).afterAutospacing = normalizedSpacing.afterAutospacing; - } - } - paragraphAttrs.spacingExplicit = spacingExplicit; - /** - * Extract contextualSpacing from multiple sources with fallback chain. - * - * OOXML stores contextualSpacing (w:contextualSpacing) as a sibling to spacing (w:spacing), - * not nested within it. However, our normalization may place it in different locations. - * - * Fallback priority (highest to lowest): - * 1. normalizedSpacing.contextualSpacing - Value from normalized spacing object - * 2. paragraphProps.contextualSpacing - Direct property on paragraphProperties - * 3. attrs.contextualSpacing - Top-level attribute - * 4. hydrated.contextualSpacing - Value resolved from paragraph style chain - * - * The hydrated fallback (priority 4) is critical for style-defined contextualSpacing, - * such as the ListBullet style which defines w:contextualSpacing to suppress spacing - * between consecutive list items of the same style ("Don't add space between paragraphs - * of the same style" in MS Word). - * - * OOXML Boolean Handling: - * - Supports multiple representations: true, 1, '1', 'true', 'on' - * - Uses isTruthy() to handle all valid OOXML boolean forms - * - Treats null/undefined as "not set" (no contextualSpacing) - */ - const contextualSpacingValue = - normalizedSpacing?.contextualSpacing ?? - safeGetProperty(paragraphProps, 'contextualSpacing') ?? - safeGetProperty(attrs, 'contextualSpacing') ?? - hydrated?.contextualSpacing; - - if (contextualSpacingValue != null) { - // Use isTruthy to properly handle OOXML boolean representations (true, 1, '1', 'true', 'on') - paragraphAttrs.contextualSpacing = isTruthy(contextualSpacingValue); - } - - const hasExplicitIndent = Boolean(normalizedIndent); - const hasNumberingIndent = Boolean(computed.numbering?.indent?.left || computed.numbering?.indent?.hanging); - if (hasExplicitIndent || hasNumberingIndent || (bidi && adjustRightInd)) { - const styleIndentPx = indentPtToPx(indent); - - if (styleIndentPx || normalizedIndent) { - // Merge style-resolved indent with explicitly set indent (normalizedIndent has priority). - // The normalizedIndent already has firstLine/hanging mutual exclusivity handled by combineIndentProperties. - const mergedIndent: ParagraphIndent = { ...(styleIndentPx ?? {}) }; - - // Apply explicit indent values, which override style defaults - if (normalizedIndent) { - // Copy explicit values from normalizedIndent - // Note: Zero left/right are treated as "no indent" and filtered out (cosmetic optimization), - // but zero firstLine/hanging are meaningful overrides and must be preserved. - if (normalizedIndent.left !== undefined) { - if (normalizedIndent.left === 0) { - delete mergedIndent.left; // Zero left is cosmetic, filter it out - } else { - mergedIndent.left = normalizedIndent.left; - } - } - if (normalizedIndent.right !== undefined) { - if (normalizedIndent.right === 0) { - delete mergedIndent.right; // Zero right is cosmetic, filter it out - } else { - mergedIndent.right = normalizedIndent.right; - } - } - if (normalizedIndent.firstLine !== undefined) mergedIndent.firstLine = normalizedIndent.firstLine; - if (normalizedIndent.hanging !== undefined) mergedIndent.hanging = normalizedIndent.hanging; - - // Handle firstLine/hanging mutual exclusivity: if normalizedIndent has hanging (and thus - // firstLine was deleted by combineIndentProperties), remove firstLine from merged result. - // Similarly, if normalizedIndent has firstLine, remove hanging. - if (normalizedIndent.hanging !== undefined && normalizedIndent.firstLine === undefined) { - delete mergedIndent.firstLine; - } else if (normalizedIndent.firstLine !== undefined && normalizedIndent.hanging === undefined) { - delete mergedIndent.hanging; - } - } - - const adjustedIndent = bidi && adjustRightInd ? ensureBidiIndentPx({ ...mergedIndent }) : mergedIndent; - const finalIndent = bidi && adjustRightInd ? mirrorIndentForRtl({ ...adjustedIndent }) : adjustedIndent; - paragraphAttrs.indent = finalIndent; - } else if (bidi && adjustRightInd) { - const syntheticIndent: ParagraphIndent = { left: DEFAULT_BIDI_INDENT_PX, right: DEFAULT_BIDI_INDENT_PX }; - const finalIndent = mirrorIndentForRtl({ ...syntheticIndent }); - paragraphAttrs.indent = finalIndent; - } - } - - const borders = normalizeParagraphBorders(attrs.borders ?? hydrated?.borders ?? paragraphProps.borders); - if (borders) paragraphAttrs.borders = borders; - - const shading = normalizeParagraphShading(attrs.shading ?? hydrated?.shading ?? paragraphProps.shading); - if (shading) paragraphAttrs.shading = shading; - - const keepNext = paragraphProps.keepNext ?? hydrated?.keepNext ?? attrs.keepNext; - if (keepNext === true) paragraphAttrs.keepNext = true; - const keepLines = paragraphProps.keepLines ?? hydrated?.keepLines ?? attrs.keepLines; - if (keepLines === true) paragraphAttrs.keepLines = true; - - const paragraphDecimalSeparator = styleContext.defaults?.decimalSeparator ?? DEFAULT_DECIMAL_SEPARATOR; - if (paragraphDecimalSeparator !== DEFAULT_DECIMAL_SEPARATOR) { - paragraphAttrs.decimalSeparator = paragraphDecimalSeparator; - } - const styleIdAttr = typeof attrs.styleId === 'string' ? attrs.styleId : undefined; - if (styleIdAttr) { - paragraphAttrs.styleId = styleIdAttr; - } else if (paragraphProps.styleId) { - paragraphAttrs.styleId = paragraphProps.styleId as string; - } - - // Per‑paragraph tab interval override (px or twips) - const paraIntervalTwips = - pickNumber(attrs.tabIntervalTwips) ?? - ((): number | undefined => { - const px = pickNumber(attrs.tabIntervalPx); - return px != null ? Math.round(px * 15) : undefined; - })(); - const defaultIntervalTwips = styleContext.defaults?.defaultTabIntervalTwips; - if (paraIntervalTwips != null) { - paragraphAttrs.tabIntervalTwips = paraIntervalTwips; - } else if (defaultIntervalTwips != null) { - paragraphAttrs.tabIntervalTwips = defaultIntervalTwips; - } - - if (computed.paragraph.tabs && computed.paragraph.tabs.length > 0) { - paragraphAttrs.tabs = computed.paragraph.tabs.map((tab) => ({ ...tab })); - } else if (mergedTabStops) { - const normalizedTabs = normalizeOoxmlTabs(mergedTabStops as unknown); - if (normalizedTabs) { - paragraphAttrs.tabs = normalizedTabs; - } - } else if (hydratedTabStops) { - const normalizedTabs = normalizeOoxmlTabs(hydratedTabStops as unknown); - if (normalizedTabs) { - paragraphAttrs.tabs = normalizedTabs; - } - } - - /** - * Safely converts an unknown value to a string. - * - * @param value - The value to convert - * @returns The value as a string if it is a string, otherwise undefined - */ - const asString = (value: unknown): string | undefined => { - return typeof value === 'string' ? value : undefined; - }; - - /** - * Normalizes framePr data from various input formats to a consistent object structure. - * - * OOXML framePr (w:framePr) defines paragraph positioning and floating text alignment, - * commonly used for positioned elements like page numbers in headers/footers. - * - * This function handles three different input structures: - * 1. Direct object with frame properties: `{ xAlign: 'right', yAlign: 'top', ... }` - * 2. Wrapped in attributes object: `{ attributes: { xAlign: 'right', ... } }` - * 3. Invalid/missing data: returns undefined - * - * @param value - The framePr value from OOXML parsing, which may be in various formats - * @returns A record containing the frame properties, or undefined if invalid - * - * @example - * // Direct object - * normalizeFramePr({ xAlign: 'right', yAlign: 'top' }) - * // => { xAlign: 'right', yAlign: 'top' } - * - * @example - * // Wrapped in attributes - * normalizeFramePr({ attributes: { xAlign: 'right' } }) - * // => { xAlign: 'right' } - * - * @example - * // Invalid input - * normalizeFramePr(null) - * // => undefined - */ - const normalizeFramePr = (value: unknown): Record | undefined => { - if (!value || typeof value !== 'object') return undefined; - const record = value as Record; - if (record.attributes && typeof record.attributes === 'object') { - return record.attributes as Record; - } - return record; - }; - - /** - * Extracts framePr from raw OOXML elements array in paragraphProperties. - * - * This handles the case where framePr is stored as a raw OOXML element - * (from ProseMirror serialization) rather than as a decoded object. - * - * @param paragraphProperties - The paragraphProperties object that may contain elements array - * @returns The framePr attributes if found, otherwise undefined - */ - const extractFramePrFromElements = (paragraphProperties: unknown): Record | undefined => { - if (!paragraphProperties || typeof paragraphProperties !== 'object') return undefined; - const pPr = paragraphProperties as Record; - if (!Array.isArray(pPr.elements)) return undefined; - const framePrElement = pPr.elements.find((el: Record) => el.name === 'w:framePr'); - if (framePrElement?.attributes && typeof framePrElement.attributes === 'object') { - return framePrElement.attributes as Record; - } - return undefined; + const paragraphProperties = (attrs.paragraphProperties ?? {}) as ParagraphProperties; + let resolvedParagraphProperties; + if (!converterContext) { + resolvedParagraphProperties = paragraphProperties; + } else { + resolvedParagraphProperties = resolveParagraphProperties(converterContext, paragraphProperties); + } + + const normalizedSpacing = normalizeParagraphSpacing(resolvedParagraphProperties.spacing); + const normalizedIndent = normalizeIndentTwipsToPx(resolvedParagraphProperties.indent as ParagraphIndent); + const normalizedTabStops = normalizeOoxmlTabs(resolvedParagraphProperties.tabStops); + const normalizedAlignment = normalizeAlignment(resolvedParagraphProperties.justification); + const normalizedBorders = normalizeParagraphBorders(resolvedParagraphProperties.borders); + const normalizedShading = normalizeParagraphShading(resolvedParagraphProperties.shading); + const paragraphDecimalSeparator = DEFAULT_DECIMAL_SEPARATOR; + const tabIntervalTwips = DEFAULT_TAB_INTERVAL_TWIPS; + const normalizedFramePr = normalizeFramePr(resolvedParagraphProperties.framePr); + const floatAlignment = normalizedFramePr?.xAlign; + const dropCapDescriptor = normalizeDropCap(resolvedParagraphProperties.framePr, para, converterContext); + const normalizedListRendering = attrs.listRendering; + + const paragraphAttrs: ParagraphAttrs = { + styleId: resolvedParagraphProperties.styleId, + alignment: normalizedAlignment, + spacing: normalizedSpacing, + contextualSpacing: resolvedParagraphProperties.contextualSpacing, + indent: normalizedIndent, + dropCapDescriptor: dropCapDescriptor, + frame: normalizedFramePr, + numberingProperties: resolvedParagraphProperties.numberingProperties as Record, + borders: normalizedBorders, + shading: normalizedShading, + tabs: normalizedTabStops, + decimalSeparator: paragraphDecimalSeparator, + tabIntervalTwips, + keepNext: resolvedParagraphProperties.keepNext, + keepLines: resolvedParagraphProperties.keepLines, + floatAlignment: floatAlignment, + pageBreakBefore: resolvedParagraphProperties.pageBreakBefore, }; - // Extract floating alignment and positioning from framePr (OOXML w:framePr). - // Used for positioned paragraphs like right-aligned page numbers in headers/footers. - // - // Three-tier lookup strategy to handle different data sources: - // 1. attrs.framePr - Top-level framePr from the converter (most direct path) - // 2. attrs.paragraphProperties.framePr - Decoded framePr object from v3 translator - // 3. attrs.paragraphProperties.elements[name='w:framePr'] - Raw OOXML element from PM serialization - const framePr = - normalizeFramePr(attrs.framePr) ?? - normalizeFramePr((attrs.paragraphProperties as Record | undefined)?.framePr) ?? - extractFramePrFromElements(attrs.paragraphProperties); - - if (framePr) { - const rawXAlign = asString(framePr['w:xAlign'] ?? framePr.xAlign); - const xAlign = typeof rawXAlign === 'string' ? rawXAlign.toLowerCase() : undefined; - // Only set floatAlignment if xAlign is a valid value - if (xAlign === 'left' || xAlign === 'right' || xAlign === 'center') { - paragraphAttrs.floatAlignment = xAlign; - } - - const dropCap = framePr['w:dropCap'] ?? framePr.dropCap; - if ( - dropCap != null && - (typeof dropCap === 'string' || typeof dropCap === 'number' || typeof dropCap === 'boolean') - ) { - // Keep the legacy dropCap flag for backward compatibility - paragraphAttrs.dropCap = dropCap; - - // Build structured DropCapDescriptor for enhanced drop cap support - const dropCapMode = typeof dropCap === 'string' ? dropCap.toLowerCase() : 'drop'; - const linesValue = pickNumber(framePr['w:lines'] ?? framePr.lines); - const wrapValue = asString(framePr['w:wrap'] ?? framePr.wrap); - - // Extract the drop cap text and run styling from paragraph content - const dropCapRunInfo = extractDropCapRunFromParagraph(para); - - if (dropCapRunInfo) { - const descriptor: DropCapDescriptor = { - mode: dropCapMode === 'margin' ? 'margin' : 'drop', - lines: linesValue != null && linesValue > 0 ? linesValue : 3, - run: dropCapRunInfo, - }; - - // Map wrap value to the expected types - if (wrapValue) { - const normalizedWrap = wrapValue.toLowerCase(); - if ( - normalizedWrap === 'around' || - normalizedWrap === 'notbeside' || - normalizedWrap === 'none' || - normalizedWrap === 'tight' - ) { - descriptor.wrap = - normalizedWrap === 'notbeside' ? 'notBeside' : (normalizedWrap as 'around' | 'none' | 'tight'); - } - } - - paragraphAttrs.dropCapDescriptor = descriptor; - } - } - - const frame: ParagraphAttrs['frame'] = {}; - const wrap = asString(framePr['w:wrap'] ?? framePr.wrap); - if (wrap) frame.wrap = wrap; - - // Set xAlign in frame (accepts any string, validation deferred to renderer) - if (xAlign) { - frame.xAlign = xAlign as 'left' | 'right' | 'center'; - } - - // yAlign: Accept any string value, validation deferred to renderer - const rawYAlign = asString(framePr['w:yAlign'] ?? framePr.yAlign); - if (rawYAlign) { - frame.yAlign = rawYAlign as 'top' | 'center' | 'bottom'; - } - - const hAnchor = asString(framePr['w:hAnchor'] ?? framePr.hAnchor); - if (hAnchor) frame.hAnchor = hAnchor; - const vAnchor = asString(framePr['w:vAnchor'] ?? framePr.vAnchor); - if (vAnchor) frame.vAnchor = vAnchor; - - const xTwips = pickNumber(framePr['w:x'] ?? framePr.x); - if (xTwips != null) frame.x = twipsToPx(xTwips); - const yTwips = pickNumber(framePr['w:y'] ?? framePr.y); - if (yTwips != null) frame.y = twipsToPx(yTwips); - - if (Object.keys(frame).length > 0) { - paragraphAttrs.frame = frame; - } - } - - // Track B: Compute wordLayout for paragraphs with numberingProperties - const listRendering = normalizeListRenderingAttrs(attrs.listRendering); - const numberingSource = - attrs.numberingProperties ?? paragraphProps.numberingProperties ?? hydrated?.numberingProperties; - let rawNumberingProps = toAdapterNumberingProps(numberingSource); - - /** - * Fallback mechanism for table paragraphs with list rendering but no numbering properties. - * - * **Why this is needed:** - * Some document sources (particularly table cells imported from certain formats) provide - * listRendering attributes (marker text, path, styling) but lack the traditional OOXML - * numberingProperties structure (numId, ilvl). This fallback synthesizes minimal - * numbering properties from the listRendering data to ensure list markers render correctly. - * - * **When this is used:** - * - Table paragraphs that have listRendering but no numberingProperties - * - Imported documents where numbering context was lost but visual marker info was preserved - * - Fallback rendering path when traditional OOXML numbering is unavailable - * - * **Synthesis logic:** - * - `numId`: Set to -1 (sentinel value indicating synthesized/unavailable) - * - `ilvl`: Calculated from path length (path.length - 1), defaults to 0 - * - `path`: Preserved from listRendering (e.g., [1, 2, 3] for nested lists) - * - `counterValue`: Extracted from last element of path array - * - Other properties (markerText, format, justification, suffix) copied from listRendering - */ - if (!rawNumberingProps && listRendering) { - const path = listRendering.path; - const counterFromPath = path && path.length ? path[path.length - 1] : undefined; - const ilvl = path && path.length > 1 ? path.length - 1 : 0; - - rawNumberingProps = { - numId: -1, - ilvl, - path, - counterValue: Number.isFinite(counterFromPath) ? Number(counterFromPath) : undefined, - markerText: listRendering.markerText, - format: listRendering.numberingType as NumberingFormat | undefined, - lvlJc: listRendering.justification, - suffix: listRendering.suffix, - } as AdapterNumberingProps; - } - - /** - * Validates that the paragraph has valid numbering properties. - * Per OOXML spec §17.9.16, numId="0" (or '0') is a special sentinel value that disables - * numbering inherited from paragraph styles. We skip word layout processing entirely for numId=0. - */ - const hasValidNumbering = rawNumberingProps && isValidNumberingId(rawNumberingProps.numId); - if (hasValidNumbering && rawNumberingProps) { - const numberingProps = rawNumberingProps; - const numId = numberingProps.numId; - const ilvl = Number.isFinite(numberingProps.ilvl) ? Math.max(0, Math.floor(Number(numberingProps.ilvl))) : 0; - const numericNumId = typeof numId === 'number' ? numId : undefined; - - // Resolve numbering definition details (format, text, indent, marker run) from converter context - let resolvedLevel: Partial | undefined; - try { - resolvedLevel = resolveNumberingFromContext(numId, ilvl, converterContext?.numbering); - } catch (error) { - resolvedLevel = undefined; - } - - if (resolvedLevel) { - if (resolvedLevel.format && numberingProps.format == null) { - numberingProps.format = resolvedLevel.format; - } - if (resolvedLevel.lvlText && numberingProps.lvlText == null) { - numberingProps.lvlText = resolvedLevel.lvlText; - } - if (resolvedLevel.start != null && numberingProps.start == null) { - numberingProps.start = resolvedLevel.start; - } - if (resolvedLevel.suffix && numberingProps.suffix == null) { - numberingProps.suffix = resolvedLevel.suffix; - } - if (resolvedLevel.lvlJc && numberingProps.lvlJc == null) { - numberingProps.lvlJc = resolvedLevel.lvlJc; - } - if (resolvedLevel.resolvedLevelIndent && !numberingProps.resolvedLevelIndent) { - numberingProps.resolvedLevelIndent = resolvedLevel.resolvedLevelIndent; - } - if (resolvedLevel.resolvedMarkerRpr && !numberingProps.resolvedMarkerRpr) { - numberingProps.resolvedMarkerRpr = resolvedLevel.resolvedMarkerRpr; - } - } - - // Track B: Increment list counter and build path array - let counterValue = 1; - if (listCounterContext && typeof numericNumId === 'number') { - counterValue = listCounterContext.incrementListCounter(numericNumId, ilvl); - - // Reset deeper levels when returning to a shallower level - // (e.g., going from level 1 back to level 0 should reset level 1's counter) - for (let deeperLevel = ilvl + 1; deeperLevel <= 8; deeperLevel++) { - listCounterContext.resetListCounter(numericNumId, deeperLevel); - } - } - - // Build path array for multi-level numbering (e.g., "1.2.3") - const path = - (listRendering?.path && listRendering.path.length ? listRendering.path : undefined) ?? - buildNumberingPath(numericNumId, ilvl, counterValue, listCounterContext); - const resolvedCounterValue = path[path.length - 1] ?? counterValue; - - // Enrich numberingProperties with path and counter info - // Explicitly include numId and ilvl to satisfy TypeScript since they are required - const enrichedNumberingProps: AdapterNumberingProps = { - ...numberingProps, - numId: numberingProps.numId, - ilvl: numberingProps.ilvl, - path, - counterValue: resolvedCounterValue, - }; - - if (listRendering?.numberingType && enrichedNumberingProps.format == null) { - enrichedNumberingProps.format = listRendering.numberingType as NumberingFormat; - } - if (listRendering?.markerText && enrichedNumberingProps.markerText == null) { - enrichedNumberingProps.markerText = listRendering.markerText; - } - if (listRendering?.justification && enrichedNumberingProps.lvlJc == null) { - enrichedNumberingProps.lvlJc = listRendering.justification; - } - if (listRendering?.suffix && enrichedNumberingProps.suffix == null) { - enrichedNumberingProps.suffix = listRendering.suffix; - } - - // Try to get marker run properties from numbering definition if not pre-resolved - // Do NOT set hardcoded defaults here - let computeWordLayoutForParagraph use - // style-engine fallback to resolve from paragraph style (matching MS Word behavior) - if (!enrichedNumberingProps.resolvedMarkerRpr) { - const numbering = computed.numbering as unknown as Record | undefined; - if (numbering && typeof numbering.marker === 'object' && numbering.marker !== null) { - const marker = numbering.marker as Record; - if (typeof marker.run === 'object' && marker.run !== null) { - enrichedNumberingProps.resolvedMarkerRpr = marker.run as ResolvedRunProperties; - } - } - // NOTE: If still not resolved, computeWordLayoutForParagraph will use - // style-engine to resolve from paragraph style, which is the correct MS Word behavior - } - - let wordLayout: WordParagraphLayoutOutput | null = null; - try { - wordLayout = computeWordLayoutForParagraph( - paragraphAttrs, - enrichedNumberingProps, - styleContext, - para, - converterContext, - hydrated?.resolved as Record | undefined, - ); - } catch (error) { - wordLayout = null; - } - - // Fallback: some numbering levels only specify a firstLine indent (no left/hanging). - // When wordLayout computation returns null, ensure we still provide a textStartPx - // so first-line wrapping in columns has the correct width. - if (!wordLayout && enrichedNumberingProps.resolvedLevelIndent) { - const resolvedIndentPx = convertIndentTwipsToPx(enrichedNumberingProps.resolvedLevelIndent); - const baseIndent = resolvedIndentPx ?? enrichedNumberingProps.resolvedLevelIndent; - const mergedIndent = { ...baseIndent, ...(paragraphAttrs.indent ?? {}) }; - const firstLinePx = isFiniteNumber(mergedIndent.firstLine) ? mergedIndent.firstLine : 0; - const hangingPx = isFiniteNumber(mergedIndent.hanging) ? mergedIndent.hanging : 0; - if (firstLinePx > 0 && !hangingPx) { - wordLayout = { - // Treat as first-line-indent mode: text starts after the marker+firstLine offset. - firstLineIndentMode: true, - textStartPx: firstLinePx, - } as WordParagraphLayoutOutput; - } - } - - // If computeWordLayout returned an object but did not provide textStartPx and - // the numbering indent has a firstLine value, set a minimal textStartPx to - // match the resolved first-line indent. This guards against cases where - // word-layout computation omits textStart for levels without left/hanging. - if (wordLayout && !Number.isFinite(wordLayout.textStartPx) && enrichedNumberingProps.resolvedLevelIndent) { - const resolvedIndentPx = convertIndentTwipsToPx(enrichedNumberingProps.resolvedLevelIndent); - const baseIndent = resolvedIndentPx ?? enrichedNumberingProps.resolvedLevelIndent; - const mergedIndent = { ...baseIndent, ...(paragraphAttrs.indent ?? {}) }; - const firstLinePx = isFiniteNumber(mergedIndent.firstLine) ? mergedIndent.firstLine : 0; - const hangingPx = isFiniteNumber(mergedIndent.hanging) ? mergedIndent.hanging : 0; - if (firstLinePx > 0 && !hangingPx) { - wordLayout = { - ...wordLayout, - firstLineIndentMode: wordLayout.firstLineIndentMode ?? true, - textStartPx: firstLinePx, - }; - } - } - - if (wordLayout) { - if (wordLayout.marker) { - if (listRendering?.markerText) { - wordLayout.marker.markerText = listRendering.markerText; - } - if (listRendering?.justification) { - wordLayout.marker.justification = listRendering.justification; - } - if (listRendering?.suffix) { - wordLayout.marker.suffix = listRendering.suffix; - } - } - wordLayout = normalizeWordLayoutForIndent(wordLayout, paragraphAttrs.indent); - paragraphAttrs.wordLayout = wordLayout; - } - - // Always merge resolvedLevelIndent into paragraphAttrs.indent, regardless of wordLayout success. - // This ensures sublists get correct indentation even if wordLayout computation fails. - // Per OOXML spec, paragraph indent MERGES with numbering definition: - // - Numbering definition provides base values (left, hanging from level) - // - Paragraph's explicit indent properties override specific values - // - Missing paragraph indent properties inherit from numbering definition - // This fixes cases where a paragraph only specifies w:hanging but should - // inherit w:left from the numbering level definition. - if (enrichedNumberingProps.resolvedLevelIndent) { - const resolvedIndentPx = convertIndentTwipsToPx(enrichedNumberingProps.resolvedLevelIndent); - const baseIndent = resolvedIndentPx ?? enrichedNumberingProps.resolvedLevelIndent; - - // Merge: numbering definition as base, paragraph explicit values override - paragraphAttrs.indent = { - ...baseIndent, - ...(normalizedIndent ?? {}), - }; - - // In OOXML, hanging and firstLine are mutually exclusive. - // If the paragraph explicitly specifies one, the other should be cleared. - // This ensures proper marker positioning when paragraph overrides numbering indent. - if (normalizedIndent?.firstLine !== undefined) { - delete paragraphAttrs.indent.hanging; - } else if (normalizedIndent?.hanging !== undefined) { - delete paragraphAttrs.indent.firstLine; - } - } - - // Preserve numberingProperties for downstream consumers (e.g., measurement stage) - paragraphAttrs.numberingProperties = enrichedNumberingProps as Record; + if (resolvedParagraphProperties.numberingProperties && normalizedListRendering) { + const markerRunProperties = resolveRunProperties( + converterContext!, + resolvedParagraphProperties.runProperties, + resolvedParagraphProperties, + true, + Boolean(paragraphProperties.numberingProperties), + ); + paragraphAttrs.wordLayout = computeWordParagraphLayout({ + paragraph: paragraphAttrs, + listRenderingAttrs: normalizedListRendering, + markerRun: computeRunAttrs(markerRunProperties, converterContext), + }); } - return Object.keys(paragraphAttrs).length > 0 ? paragraphAttrs : undefined; + return { paragraphAttrs, resolvedParagraphProperties }; }; -/** - * Merge two paragraph attributes, with override taking precedence. - */ -export const mergeParagraphAttrs = (base?: ParagraphAttrs, override?: ParagraphAttrs): ParagraphAttrs | undefined => { - if (!base && !override) return undefined; - if (!base) return override; - if (!override) return base; - - const merged: ParagraphAttrs = { ...base }; - if (override.alignment) { - merged.alignment = override.alignment; - } - if (override.spacing) { - merged.spacing = { ...(base.spacing ?? {}), ...override.spacing }; - } - if (override.indent) { - merged.indent = { ...(base.indent ?? {}), ...override.indent }; - // In OOXML, hanging and firstLine are mutually exclusive. - // If override specifies one, clear the other from the merged result. - if (override.indent.firstLine !== undefined) { - delete merged.indent.hanging; - } else if (override.indent.hanging !== undefined) { - delete merged.indent.firstLine; - } - } - if (override.borders) { - merged.borders = { ...(base.borders ?? {}), ...override.borders }; +export const computeRunAttrs = ( + runProps: RunProperties, converterContext?: ConverterContext, defaultFontSizePx = 12, defaultFontFamily = 'Times New Roman', +): ResolvedRunProperties => { + let fontFamily; + if (converterContext) { + fontFamily = resolveDocxFontFamily(runProps.fontFamily as Record, converterContext.docx) || defaultFontFamily; + } else { + fontFamily = runProps.fontFamily?.ascii || runProps.fontFamily?.hAnsi || runProps.fontFamily?.eastAsia || defaultFontFamily; } - if (override.shading) { - merged.shading = { ...(base.shading ?? {}), ...override.shading }; + return { + fontFamily: toCssFontFamily(fontFamily)!, + fontSize: runProps.fontSize ? ptToPx(runProps.fontSize / 2)! : defaultFontSizePx, + bold: runProps.bold, + italic: runProps.italic, + underline: runProps.underline && { + style: runProps.underline!['w:val'] as 'single' | 'double' | 'dotted' | 'dashed' | 'wavy' || 'single', + color: runProps.underline!['w:color'] || undefined, + }, + strike: runProps.strike, + color: normalizeColor(runProps.color?.val), + highlight: runProps.highlight?.['w:val'] || undefined, + smallCaps: runProps.smallCaps, + allCaps: runProps?.textTransform === 'uppercase', + letterSpacing: runProps.letterSpacing ? twipsToPx(runProps.letterSpacing) : undefined, + lang: runProps.lang?.val || undefined, } - return merged; }; -/** - * Convert list paragraph attributes to paragraph attrs format. - */ -export const convertListParagraphAttrs = (attrs?: Record): ParagraphAttrs | undefined => { - if (!attrs) return undefined; - const paragraphAttrs: ParagraphAttrs = {}; - - const alignment = normalizeAlignment(attrs.alignment ?? attrs.lvlJc); - if (alignment) paragraphAttrs.alignment = alignment; - - const spacing = normalizeParagraphSpacing(attrs.spacing); - if (spacing) paragraphAttrs.spacing = spacing; - - const shading = normalizeParagraphShading(attrs.shading); - if (shading) paragraphAttrs.shading = shading; - - return Object.keys(paragraphAttrs).length > 0 ? paragraphAttrs : undefined; -}; diff --git a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts index 1156f4caa..d0f2e6215 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts @@ -5,9 +5,9 @@ * and normalizing raw attributes. */ -import type { ParagraphAttrs, ParagraphIndent, ParagraphSpacing } from '@superdoc/contracts'; -import type { ComputedParagraphStyle, EngineParagraphSpacing, EngineParagraphIndent } from '../types.js'; -import { pxToPt, ptToPx, twipsToPx, pickNumber } from '../utilities.js'; +import type { ParagraphAttrs, ParagraphSpacing } from '@superdoc/contracts'; +import type { ParagraphSpacing as OoxmlParagraphSpacing } from '@superdoc/style-engine/ooxml'; +import { twipsToPx, pickNumber } from '../utilities.js'; /** * Maximum line spacing multiplier for auto line spacing. @@ -30,146 +30,6 @@ const MAX_AUTO_LINE_MULTIPLIER = 10; * 51-100 will be incorrectly converted from twips. This is a known limitation * of the heuristic approach used when the source format is ambiguous. */ -const TWIPS_THRESHOLD = 50; - -/** - * Converts paragraph spacing from pixels to points for the style engine. - * - * Transforms spacing values (before, after, line) from pixel measurements - * to point measurements while preserving the lineRule property. - * - * @param spacing - Paragraph spacing object with values in pixels - * @returns Spacing object with values in points for the style engine - * - * @example - * ```typescript - * spacingPxToPt({ before: 16, after: 16, line: 20 }); - * // { before: 12, after: 12, line: 15 } - * ``` - */ -export const spacingPxToPt = (spacing: ParagraphSpacing): ComputedParagraphStyle['spacing'] => { - const result: ComputedParagraphStyle['spacing'] = {}; - if (spacing.before != null) result.before = pxToPt(spacing.before); - if (spacing.after != null) result.after = pxToPt(spacing.after); - if (spacing.line != null) { - if (spacing.lineRule === 'auto' && spacing.line > 0 && spacing.line <= MAX_AUTO_LINE_MULTIPLIER) { - result.line = spacing.line; - } else { - result.line = pxToPt(spacing.line); - } - } - if (spacing.lineRule) result.lineRule = spacing.lineRule; - return result; -}; - -/** - * Converts paragraph indent from pixels to points for the style engine. - * - * Transforms indent values (left, right, firstLine, hanging) from pixel - * measurements to point measurements. - * - * @param indent - Paragraph indent object with values in pixels - * @returns Indent object with values in points for the style engine - * - * @example - * ```typescript - * indentPxToPt({ left: 48, firstLine: 24 }); - * // { left: 36, firstLine: 18 } - * ``` - */ -export const indentPxToPt = (indent: ParagraphIndent): ComputedParagraphStyle['indent'] => { - const result: ComputedParagraphStyle['indent'] = {}; - if (indent.left != null) result.left = pxToPt(indent.left); - if (indent.right != null) result.right = pxToPt(indent.right); - if (indent.firstLine != null) result.firstLine = pxToPt(indent.firstLine); - if (indent.hanging != null) result.hanging = pxToPt(indent.hanging); - return result; -}; - -/** - * Converts paragraph spacing from points to pixels. - * - * Uses the rawSpacing parameter to determine which properties to convert, - * only converting properties that exist in the raw spacing. - * - * @param spacing - Computed spacing from style engine with values in points - * @param rawSpacing - Original raw spacing to determine which properties to include - * @returns Spacing object with values in pixels, or undefined if rawSpacing is not provided or results in no properties - * - * @example - * ```typescript - * spacingPtToPx({ before: 12, after: 12 }, { before: 16, after: 16 }); - * // { before: 16, after: 16 } - * ``` - */ -export const spacingPtToPx = ( - spacing: EngineParagraphSpacing, - rawSpacing?: ParagraphSpacing, -): ParagraphSpacing | undefined => { - const result: ParagraphSpacing = {}; - if (rawSpacing) { - if (rawSpacing.before != null) { - const before = ptToPx(spacing.before); - if (before != null) result.before = before; - } - if (rawSpacing.after != null) { - const after = ptToPx(spacing.after); - if (after != null) result.after = after; - } - if (rawSpacing.line != null) { - const isAutoMultiplier = - spacing.lineRule === 'auto' && - spacing.line != null && - spacing.line > 0 && - spacing.line <= MAX_AUTO_LINE_MULTIPLIER; - if (isAutoMultiplier) { - result.line = spacing.line; - } else { - const line = ptToPx(spacing.line); - if (line != null) result.line = line; - } - if (spacing.lineRule) result.lineRule = spacing.lineRule; - } - } - return Object.keys(result).length > 0 ? result : undefined; -}; - -/** - * Converts paragraph indent from points to pixels. - * - * Transforms indent values from point measurements to pixel measurements. - * Preserves explicit zero values for firstLine and hanging since these are meaningful - * overrides (e.g., style setting firstLine=0 to override numbering level's firstLine). - * Filters out zero values for left/right to keep the result object minimal. - * - * @param indent - Computed indent from style engine with values in points - * @returns Indent object with values in pixels, or undefined if no values to preserve - * - * @example - * ```typescript - * indentPtToPx({ left: 36, firstLine: 18 }); - * // { left: 48, firstLine: 24 } - * - * // Zero firstLine is preserved (explicit override) - * indentPtToPx({ left: 0, firstLine: 0 }); - * // { firstLine: 0 } - * ``` - */ -export const indentPtToPx = (indent: EngineParagraphIndent): ParagraphIndent | undefined => { - const result: ParagraphIndent = {}; - const left = ptToPx(indent.left); - const right = ptToPx(indent.right); - const firstLine = ptToPx(indent.firstLine); - const hanging = ptToPx(indent.hanging); - // Filter out zero for left/right (purely cosmetic) - if (left != null && left !== 0) result.left = left; - if (right != null && right !== 0) result.right = right; - // Preserve zero for firstLine/hanging - these are meaningful overrides - // (e.g., style setting firstLine=0 to cancel numbering level's firstLine indent) - if (firstLine != null) result.firstLine = firstLine; - if (hanging != null) result.hanging = hanging; - return Object.keys(result).length > 0 ? result : undefined; -}; /** * Normalizes paragraph alignment values from OOXML format. @@ -236,51 +96,29 @@ export const normalizeAlignment = (value: unknown): NormalizedParagraphAlignment * // { before: 16, line: 32, lineRule: 'exact' } (line converted from twips) * ``` */ -type ExtendedParagraphSpacing = ParagraphSpacing & { contextualSpacing?: boolean }; - -export const normalizeParagraphSpacing = (value: unknown): ExtendedParagraphSpacing | undefined => { +export const normalizeParagraphSpacing = (value: OoxmlParagraphSpacing | undefined): ParagraphSpacing | undefined => { if (!value || typeof value !== 'object') return undefined; - const source = value as Record; - const spacing: ExtendedParagraphSpacing = {}; + const spacing: ParagraphSpacing = {}; - const beforeRaw = pickNumber(source.before); - const afterRaw = pickNumber(source.after); - const lineRaw = pickNumber(source.line); - const lineRule = normalizeLineRule(source.lineRule); - const resolvedLineRule = lineRule ?? (lineRaw != null ? 'auto' : undefined); - const beforeAutospacing = toBooleanFlag(source.beforeAutospacing ?? source.beforeAutoSpacing); - const afterAutospacing = toBooleanFlag(source.afterAutospacing ?? source.afterAutoSpacing); - const contextualSpacing = toBooleanFlag(source.contextualSpacing); + const before = pickNumber(value.before); + const after = pickNumber(value.after); + const lineRaw = pickNumber(value.line); + const lineRule = normalizeLineRule(value.lineRule); + const beforeAutospacing = value.beforeAutospacing; + const afterAutospacing = value.afterAutospacing; - const before = beforeRaw != null ? twipsToPx(beforeRaw) : pickNumber(source.lineSpaceBefore); - const after = afterRaw != null ? twipsToPx(afterRaw) : pickNumber(source.lineSpaceAfter); - const line = normalizeLineValue(lineRaw, resolvedLineRule); + const line = normalizeLineValue(lineRaw, lineRule); - if (before != null) spacing.before = before; - if (after != null) spacing.after = after; + if (before != null) spacing.before = twipsToPx(before); + if (after != null) spacing.after = twipsToPx(after); if (line != null) spacing.line = line; if (resolvedLineRule) spacing.lineRule = resolvedLineRule; if (beforeAutospacing != null) spacing.beforeAutospacing = beforeAutospacing; if (afterAutospacing != null) spacing.afterAutospacing = afterAutospacing; - if (contextualSpacing != null) spacing.contextualSpacing = contextualSpacing; return Object.keys(spacing).length > 0 ? spacing : undefined; }; -const toBooleanFlag = (value: unknown): boolean | undefined => { - if (value === true || value === false) return value; - if (typeof value === 'string') { - const normalized = value.trim().toLowerCase(); - if (['true', '1', 'on', 'yes'].includes(normalized)) return true; - if (['false', '0', 'off', 'no'].includes(normalized)) return false; - } - if (typeof value === 'number') { - if (value === 1) return true; - if (value === 0) return false; - } - return undefined; -}; - const normalizeLineValue = ( value: number | undefined, lineRule: ParagraphSpacing['lineRule'] | undefined, @@ -317,107 +155,3 @@ export const normalizeLineRule = (value: unknown): ParagraphSpacing['lineRule'] return undefined; }; -/** - * Normalizes indent values that are already in pixels. - * - * Uses heuristics to detect if values are actually in twips (not pixels): - * - Values >= 50 are likely twips (50px would be ~667 twips in OOXML) - * - Values divisible by 15 with high precision are likely twips (common in OOXML) - * - * If values look like twips, returns undefined to trigger twips conversion instead. - * Epsilon of 1e-6 accounts for floating point arithmetic errors. - * - * @param value - Indent object with values assumed to be in pixels - * @returns Indent object if values are in pixels, or undefined if they look like twips - * - * @example - * ```typescript - * normalizePxIndent({ left: 24, firstLine: 12 }); - * // { left: 24, firstLine: 12 } (values look like pixels) - * - * normalizePxIndent({ left: 720, firstLine: 360 }); - * // undefined (values >= 50, likely twips) - * ``` - */ -export const normalizePxIndent = (value: unknown): ParagraphIndent | undefined => { - if (!value || typeof value !== 'object') return undefined; - const source = value as Record; - const indent: ParagraphIndent = {}; - const values: number[] = []; - (['left', 'right', 'firstLine', 'hanging'] as const).forEach((key) => { - const raw = source[key]; - if (typeof raw === 'number' && Number.isFinite(raw)) { - indent[key] = raw; - values.push(Math.abs(raw)); - } - }); - if (!values.length) return undefined; - - /** - * Heuristic for detecting twips values: - * 1. Values >= 50 are likely twips (50px = ~667 twips, invalid as px in OOXML context) - * 2. Non-zero twips values often divisible by 15 (e.g., half-point increments) - * - * Note: Zero is explicitly excluded from the divisibility check because it's a valid - * pixel value that happens to be divisible by 15. Zero indent is meaningful (explicit - * reset) and should not trigger twips conversion. - * - * Epsilon of 1e-6 accounts for floating point arithmetic errors. - */ - const looksLikeTwips = values.some((val) => val >= 50 || (val !== 0 && Math.abs(val % 15) < 1e-6)); - if (looksLikeTwips) { - return undefined; - } - return indent; -}; - -/** - * Normalizes paragraph indent from raw OOXML attributes, converting from twips if needed. - * - * Uses a threshold-based heuristic to detect the unit: - * - Values with absolute value <= 50 are treated as already-converted pixels - * - Values > 50 are treated as twips and converted to pixels - * - * Limitation: This creates an ambiguous zone where legitimate pixel values 51-100 - * will be incorrectly converted from twips. This is a known limitation of the - * heuristic approach when source format is ambiguous. - * - * @param value - Raw OOXML indent object with properties like left, right, firstLine, hanging - * @returns Normalized indent object with values in pixels, or undefined if no valid indent - * - * @example - * ```typescript - * normalizeParagraphIndent({ left: 720, firstLine: 360 }); - * // { left: 48, firstLine: 24 } (converted from twips) - * - * normalizeParagraphIndent({ left: 24, firstLine: 12 }); - * // { left: 24, firstLine: 12 } (treated as pixels) - * ``` - */ -export const normalizeParagraphIndent = (value: unknown): ParagraphIndent | undefined => { - if (!value || typeof value !== 'object') return undefined; - const source = value as Record; - const indent: ParagraphIndent = {}; - - const convert = (value?: number): number | undefined => { - const num = pickNumber(value); - if (num == null) return undefined; - // Treat small values as already-converted px (SuperDoc stores px in PM attrs) - if (Math.abs(num) <= TWIPS_THRESHOLD) { - return num; - } - return twipsToPx(Number(num)); - }; - - const left = convert(pickNumber(source.left)); - const right = convert(pickNumber(source.right)); - const firstLine = convert(pickNumber(source.firstLine)); - const hanging = convert(pickNumber(source.hanging)); - - if (left != null) indent.left = left; - if (right != null) indent.right = right; - if (firstLine != null) indent.firstLine = firstLine; - if (hanging != null) indent.hanging = hanging; - - return Object.keys(indent).length > 0 ? indent : undefined; -}; diff --git a/packages/layout-engine/pm-adapter/src/attributes/tabs.ts b/packages/layout-engine/pm-adapter/src/attributes/tabs.ts index 69852ba68..33be9e532 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/tabs.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/tabs.ts @@ -198,6 +198,7 @@ export const normalizeTabVal = (value: unknown): TabStop['val'] | undefined => { case 'clear': return value; case 'left': + case 'num': return 'start'; // Legacy mapping for RTL support case 'right': return 'end'; // Legacy mapping for RTL support diff --git a/packages/layout-engine/pm-adapter/src/converter-context.ts b/packages/layout-engine/pm-adapter/src/converter-context.ts index 1b779201e..86d9aa737 100644 --- a/packages/layout-engine/pm-adapter/src/converter-context.ts +++ b/packages/layout-engine/pm-adapter/src/converter-context.ts @@ -9,6 +9,7 @@ */ import type { ParagraphSpacing } from '@superdoc/contracts'; +import type { NumberingProperties, StylesDocumentProperties } from '@superdoc/style-engine/ooxml'; export type ConverterNumberingContext = { definitions?: Record; @@ -35,6 +36,8 @@ export type ConverterContext = { docx?: Record; numbering?: ConverterNumberingContext; linkedStyles?: ConverterLinkedStyle[]; + translatedNumbering: NumberingProperties; + translatedLinkedStyles: StylesDocumentProperties; /** * Optional mapping from OOXML footnote id -> display number. * Display numbers are assigned in order of first appearance in the document (1-based), diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts index 93a1036e5..6fae1d430 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts @@ -61,7 +61,7 @@ vi.mock('../tracked-changes.js', () => ({ })); vi.mock('../attributes/paragraph-styles.js', () => ({ - hydrateParagraphStyleAttrs: vi.fn(), + resolveParagraphProperties: vi.fn(), hydrateCharacterStyleAttrs: vi.fn(), hydrateMarkerStyleAttrs: vi.fn(), })); diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index 8538e783d..09013177c 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -7,6 +7,7 @@ * - Tracked changes processing */ +import type { ParagraphProperties, RunProperties } from '@superdoc/style-engine/ooxml'; import type { FlowBlock, Run, @@ -15,8 +16,6 @@ import type { ImageBlock, TrackedChangeMeta, SdtMetadata, - ParagraphAttrs, - ParagraphIndent, FieldAnnotationRun, FieldAnnotationMetadata, } from '@superdoc/contracts'; @@ -26,7 +25,6 @@ import type { BlockIdGenerator, PositionMap, StyleContext, - ListCounterContext, TrackedChangesConfig, HyperlinkConfig, NodeHandlerContext, @@ -35,15 +33,8 @@ import type { import type { ConverterContext } from '../converter-context.js'; import { computeParagraphAttrs, - cloneParagraphAttrs, - hasPageBreakBefore, - buildStyleNodeFromAttrs, - normalizeParagraphSpacing, - normalizeParagraphIndent, - normalizePxIndent, - normalizeOoxmlTabs, + deepClone, } from '../attributes/index.js'; -import { hydrateParagraphStyleAttrs, hydrateCharacterStyleAttrs } from '../attributes/paragraph-styles.js'; import { resolveNodeSdtMetadata, getNodeInstruction } from '../sdt/index.js'; import { shouldRequirePageBoundary, hasIntrinsicBoundarySignals, createSectionBreakBlock } from '../sections/index.js'; import { trackedChangesCompatible, collectTrackedChangeFromMarks, applyMarksToRun } from '../marks/index.js'; @@ -55,23 +46,10 @@ import { import { textNodeToRun, tabNodeToRun, tokenNodeToRun } from './text-run.js'; import { contentBlockNodeToDrawingBlock } from './content-block.js'; import { DEFAULT_HYPERLINK_CONFIG, TOKEN_INLINE_TYPES } from '../constants.js'; -import { createLinkedStyleResolver, applyLinkedStyleToRun, extractRunStyleId } from '../styles/linked-run.js'; -import { - ptToPx, - pickNumber, - isPlainObject, - convertIndentTwipsToPx, - twipsToPx, - toBoolean, - asOoxmlElement, - findOoxmlChild, - getOoxmlAttribute, - parseOoxmlNumber, - type OoxmlElement, -} from '../utilities.js'; -import { resolveStyle } from '@superdoc/style-engine'; -import { resolveDocxFontFamily } from '@superdoc/style-engine/ooxml'; -import { SuperConverter } from '@superdoc/super-editor/converter/internal/SuperConverter.js'; +import { extractRunStyleId } from '../styles/linked-run.js'; +import { ptToPx, pickNumber, isPlainObject, twipsToPx } from '../utilities.js'; +import { computeRunAttrs } from '../attributes/paragraph.js'; +import { resolveRunProperties } from '@superdoc/style-engine/ooxml'; // ============================================================================ // Constants @@ -83,23 +61,6 @@ import { SuperConverter } from '@superdoc/super-editor/converter/internal/SuperC */ const DEFAULT_IMAGE_DIMENSION_PX = 100; -/** - * Conversion constant: OOXML font sizes are stored in half-points. - * To convert to full points: divide by 2. - */ -const HALF_POINTS_PER_POINT = 2; - -/** - * Screen DPI (dots per inch) for pixel conversions. - * Standard display density is 96 DPI. - */ -const SCREEN_DPI = 96; - -/** - * Point DPI (dots per inch) for typography. - * Standard typography uses 72 DPI (1 inch = 72 points). - */ -const POINT_DPI = 72; // ============================================================================ // Helper functions for inline image detection and conversion @@ -636,208 +597,17 @@ const extractFirstTextRunFont = (para: PMNode): { fontSizePx?: number; fontFamil return font; }; -/** - * Resolves a font family value to a CSS-compatible font family string. - * - * Handles both simple string font families and complex OOXML font family objects - * that may include theme fonts, different scripts (ascii, hAnsi, eastAsia, cs). - * - * @param fontFamily - The font family value (string or OOXML font family object) - * @param docx - Optional docx context for theme font resolution - * @returns Resolved CSS font family string, or undefined if resolution fails - * - * @example - * ```typescript - * resolveRunFontFamily('Arial'); // 'Arial' - * resolveRunFontFamily({ ascii: 'Calibri', hAnsi: 'Calibri' }, docx); // 'Calibri' - * ``` - */ -const resolveRunFontFamily = (fontFamily: unknown, docx?: Record): string | undefined => { - if (typeof fontFamily === 'string' && fontFamily.trim().length > 0) { - return fontFamily; - } - if (!fontFamily || typeof fontFamily !== 'object') return undefined; - const toCssFontFamily = ( - SuperConverter as { toCssFontFamily?: (fontName: string, docx?: Record) => string } - ).toCssFontFamily; - const resolved = resolveDocxFontFamily(fontFamily as Record, docx ?? null, toCssFontFamily); - return resolved ?? undefined; -}; - -/** - * Parses a font size value to pixels. - * - * Handles multiple input formats: - * - Raw number: interpreted as half-points (OOXML format) - * - String ending in 'pt': interpreted as points - * - String ending in 'px': returned as-is - * - String without suffix: interpreted as half-points - * - * @param fontSize - The font size value to parse - * @returns Font size in pixels, or undefined if parsing fails - * - * @example - * ```typescript - * parseRunFontSizePx(24); // 16 (24 half-points = 12pt = 16px) - * parseRunFontSizePx('12pt'); // 16 - * parseRunFontSizePx('16px'); // 16 - * ``` - */ -const parseRunFontSizePx = (fontSize: unknown): number | undefined => { - if (typeof fontSize === 'number' && Number.isFinite(fontSize)) { - return ptToPx(fontSize / HALF_POINTS_PER_POINT) ?? undefined; - } - if (typeof fontSize === 'string') { - const numeric = Number.parseFloat(fontSize); - if (!Number.isFinite(numeric)) return undefined; - if (fontSize.endsWith('pt')) { - return ptToPx(numeric); - } - if (fontSize.endsWith('px')) { - return numeric; - } - return ptToPx(numeric / HALF_POINTS_PER_POINT) ?? undefined; - } - return undefined; -}; - -/** - * Extracts run properties from paragraph mark (w:pPr/w:rPr) in OOXML. - * - * The paragraph mark in Word has its own run properties that apply to empty - * paragraphs or the paragraph mark character itself. This function extracts - * font size and font family from these properties. - * - * @param paragraphProps - The paragraph properties object - * @returns Extracted run properties (fontSize, fontFamily), or undefined if none found - * - * @example - * ```typescript - * extractParagraphMarkRunProps({ - * runProperties: { fontSize: 24 } - * }); // { fontSize: 24 } - * ``` - */ -const extractParagraphMarkRunProps = (paragraphProps: Record): Record | undefined => { - const directRunProps = paragraphProps.runProperties; - const directRunPropsElement = asOoxmlElement(directRunProps); - if (directRunProps && isPlainObject(directRunProps) && !directRunPropsElement) { - return directRunProps as Record; - } - - const element = asOoxmlElement(paragraphProps); - const pPr = element ? (element.name === 'w:pPr' ? element : findOoxmlChild(element, 'w:pPr')) : undefined; - const rPr = directRunPropsElement?.name === 'w:rPr' ? directRunPropsElement : findOoxmlChild(pPr, 'w:rPr'); - if (!rPr) return undefined; - - const runProps: Record = {}; - const sz = - parseOoxmlNumber(getOoxmlAttribute(findOoxmlChild(rPr, 'w:sz'), 'w:val')) ?? - parseOoxmlNumber(getOoxmlAttribute(findOoxmlChild(rPr, 'w:szCs'), 'w:val')); - if (sz != null) { - runProps.fontSize = sz; - } - - const rFonts = findOoxmlChild(rPr, 'w:rFonts'); - if (rFonts) { - const fontFamily: Record = {}; - const keys = ['ascii', 'hAnsi', 'eastAsia', 'cs', 'val', 'asciiTheme', 'hAnsiTheme', 'eastAsiaTheme', 'cstheme']; - for (const key of keys) { - const value = getOoxmlAttribute(rFonts, `w:${key}`); - if (value != null) { - fontFamily[key] = value; - } - } - if (Object.keys(fontFamily).length > 0) { - runProps.fontFamily = fontFamily; - } - } - - return Object.keys(runProps).length > 0 ? runProps : undefined; -}; - -/** - * Applies paragraph mark run properties to an empty paragraph's text run. - * - * In Word, empty paragraphs inherit their appearance from the paragraph mark's - * run properties (w:pPr/w:rPr). This function applies those properties to ensure - * empty paragraphs render with the correct font size and family. - * - * @param run - The text run to apply properties to - * @param paragraphProps - The paragraph properties containing run properties - * @param converterContext - Optional converter context for font resolution - * - * @example - * ```typescript - * const run: TextRun = { text: '' }; - * applyParagraphMarkRunProps(run, paragraphProps, context); - * // run.fontSize and run.fontFamily may now be set - * ``` - */ -const applyParagraphMarkRunProps = ( - run: TextRun, - paragraphProps: Record, - converterContext?: ConverterContext, -): void => { - const runProps = extractParagraphMarkRunProps(paragraphProps); - if (!runProps) return; - const fontSizePx = parseRunFontSizePx(runProps.fontSize); - if (fontSizePx != null) { - run.fontSize = fontSizePx; - } - const fontFamily = resolveRunFontFamily(runProps.fontFamily, converterContext?.docx); - if (fontFamily) { - run.fontFamily = fontFamily; - } -}; - -const applyBaseRunDefaults = ( - run: TextRun, - defaults: RunDefaults, - uiDisplayFallbackFont: string, - fallbackSize: number, -): void => { - if (!run) return; - if (defaults.fontFamily && run.fontFamily === uiDisplayFallbackFont) { - run.fontFamily = defaults.fontFamily; - } - if (defaults.fontSizePx != null && run.fontSize === fallbackSize) { - run.fontSize = defaults.fontSizePx; - } - if (defaults.color && !run.color) { - run.color = defaults.color; - } - if (defaults.letterSpacing != null && run.letterSpacing == null) { - run.letterSpacing = defaults.letterSpacing; - } - // NOTE: We intentionally do NOT apply bold, italic, or underline from baseRunDefaults. - // These properties come from the paragraph's default character style (e.g., Heading 1's bold), - // but should NOT be applied to runs that have their own character styles or marks. - // Bold/italic/underline should only come from: - // 1. Linked character styles (via applyRunStyles) - // 2. Inline marks (via applyMarksToRun) - // Applying paragraph-level character defaults here causes incorrect bolding of normal text - // in paragraphs with bold styles like Heading 1. -}; const applyInlineRunProperties = ( run: TextRun, - runProperties: (Record & { letterSpacing?: number | null }) | null | undefined, -): void => { - if (!runProperties) return; - if (runProperties?.letterSpacing != null) { - run.letterSpacing = twipsToPx(runProperties.letterSpacing); - } -}; - -const getVanishValue = (runProperties: unknown): boolean | undefined => { - if (!runProperties || typeof runProperties !== 'object' || Array.isArray(runProperties)) { - return undefined; - } - if (!Object.prototype.hasOwnProperty.call(runProperties, 'vanish')) { - return undefined; + runProperties: RunProperties | undefined, + converterContext?: ConverterContext, +): TextRun => { + if (!runProperties) { + return run; } - return (runProperties as Record).vanish === true; + const runAttrs = computeRunAttrs(runProperties, converterContext); + return { ...run, ...runAttrs }; }; /** @@ -856,7 +626,6 @@ const getVanishValue = (runProperties: unknown): boolean | undefined => { * @param defaultFont - Default font family * @param defaultSize - Default font size * @param styleContext - Style resolution context - * @param listCounterContext - Optional list counter context * @param trackedChanges - Optional tracked changes configuration * @param bookmarks - Optional bookmark position map * @param hyperlinkConfig - Hyperlink configuration @@ -873,7 +642,6 @@ export function paragraphToFlowBlocks( defaultFont: string, defaultSize: number, styleContext: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig: HyperlinkConfig = DEFAULT_HYPERLINK_CONFIG, @@ -929,150 +697,16 @@ export function paragraphToFlowBlocks( converterContext?: ConverterContext, enableComments = true, ): FlowBlock[] { - const baseBlockId = nextBlockId('paragraph'); const paragraphProps = typeof para.attrs?.paragraphProperties === 'object' && para.attrs.paragraphProperties !== null - ? (para.attrs.paragraphProperties as Record) + ? (para.attrs.paragraphProperties as ParagraphProperties) : {}; - const paragraphHiddenByVanish = getVanishValue(paragraphProps.runProperties) === true; - const paragraphStyleId = - typeof para.attrs?.styleId === 'string' && para.attrs.styleId.trim() - ? para.attrs.styleId - : typeof paragraphProps.styleId === 'string' && paragraphProps.styleId.trim() - ? (paragraphProps.styleId as string) - : null; - const paragraphHydration = converterContext ? hydrateParagraphStyleAttrs(para, converterContext) : null; - - let baseRunDefaults: RunDefaults = {}; - try { - // Try to get character defaults from the correct OOXML cascade via styles.js - // This includes w:rPrDefault from w:docDefaults, which resolveStyle() ignores - const charHydration = converterContext - ? hydrateCharacterStyleAttrs(para, converterContext, paragraphHydration?.resolved as Record) - : null; - - if (charHydration) { - // Use correctly cascaded character properties from styles.js - // Font size is in half-points, convert to pixels: halfPts / 2 = pts, pts * (96/72) = px - const fontSizePx = (charHydration.fontSize / HALF_POINTS_PER_POINT) * (SCREEN_DPI / POINT_DPI); - baseRunDefaults = { - fontFamily: charHydration.fontFamily, - fontSizePx, - color: charHydration.color ? `#${charHydration.color.replace('#', '')}` : undefined, - bold: charHydration.bold, - italic: charHydration.italic, - underline: charHydration.underline - ? { - style: charHydration.underline.type as TextRun['underline'] extends { style?: infer S } ? S : never, - color: charHydration.underline.color, - } - : undefined, - letterSpacing: charHydration.letterSpacing != null ? twipsToPx(charHydration.letterSpacing) : undefined, - }; - } else { - // Fallback: use resolveStyle when converterContext is not available - // This path uses hardcoded defaults but maintains backwards compatibility - const spacingSource = - para.attrs?.spacing !== undefined - ? para.attrs.spacing - : paragraphProps.spacing !== undefined - ? paragraphProps.spacing - : paragraphHydration?.spacing; - const normalizeIndentObject = (value: unknown): ParagraphIndent | undefined => { - if (!value || typeof value !== 'object') return; - return normalizePxIndent(value) ?? convertIndentTwipsToPx(value as ParagraphIndent); - }; - const normalizedSpacing = normalizeParagraphSpacing(spacingSource); - const normalizedIndent = - normalizeIndentObject(para.attrs?.indent) ?? - convertIndentTwipsToPx(paragraphProps.indent as ParagraphIndent) ?? - convertIndentTwipsToPx(paragraphHydration?.indent as ParagraphIndent) ?? - normalizeParagraphIndent(para.attrs?.textIndent); - const styleNodeAttrs = - paragraphHydration?.tabStops && !para.attrs?.tabStops && !para.attrs?.tabs - ? { ...(para.attrs ?? {}), tabStops: paragraphHydration.tabStops } - : (para.attrs ?? {}); - const styleNode = buildStyleNodeFromAttrs(styleNodeAttrs, normalizedSpacing, normalizedIndent); - if (styleNodeAttrs.styleId == null && paragraphProps.styleId) { - styleNode.styleId = paragraphProps.styleId as string; - } - const resolved = resolveStyle(styleNode, styleContext); - baseRunDefaults = { - fontFamily: resolved.character.font?.family, - fontSizePx: ptToPx(resolved.character.font?.size), - color: resolved.character.color, - bold: resolved.character.font?.weight != null ? resolved.character.font.weight >= 600 : undefined, - italic: resolved.character.font?.italic, - underline: resolved.character.underline - ? { - style: resolved.character.underline.style, - color: resolved.character.underline.color, - } - : undefined, - letterSpacing: ptToPx(resolved.character.letterSpacing), - }; - } - } catch { - baseRunDefaults = {}; - } - const paragraphAttrs = computeParagraphAttrs( + const baseBlockId = nextBlockId('paragraph'); + const { paragraphAttrs, resolvedParagraphProperties } = computeParagraphAttrs( para, - styleContext, - listCounterContext, converterContext, - paragraphHydration, ); - if (paragraphAttrs && (!Array.isArray(paragraphAttrs.tabs) || paragraphAttrs.tabs.length === 0)) { - const rawTabs = para.attrs?.tabs ?? para.attrs?.tabStops ?? paragraphProps.tabStops ?? paragraphProps.tabs; - const normalizedTabs = normalizeOoxmlTabs(rawTabs); - if (normalizedTabs && normalizedTabs.length > 0) { - paragraphAttrs.tabs = normalizedTabs; - } - } - - if (paragraphAttrs?.spacing) { - const spacing = { ...(paragraphAttrs.spacing as Record) }; - const effectiveFontSize = baseRunDefaults.fontSizePx ?? defaultSize; - const isList = Boolean(paragraphAttrs.numberingProperties); - if (spacing.beforeAutospacing) { - spacing.before = isList ? 0 : Math.max(0, Number(spacing.before ?? 0) + effectiveFontSize * 0.5); - } - if (spacing.afterAutospacing) { - spacing.after = isList ? 0 : Math.max(0, Number(spacing.after ?? 0) + effectiveFontSize * 0.5); - } - paragraphAttrs.spacing = spacing as ParagraphAttrs['spacing']; - } - - // Update marker font from first text run if paragraph has numbering - // BUT only when the numbering level doesn't explicitly define marker font properties. - // This matches MS Word behavior: explicit in numbering.xml takes precedence, - // otherwise markers inherit font from first text run. - if (paragraphAttrs?.numberingProperties && paragraphAttrs?.wordLayout) { - const numberingProps = paragraphAttrs.numberingProperties as Record; - const resolvedMarkerRpr = numberingProps.resolvedMarkerRpr as Record | undefined; - // Check if numbering level explicitly defined font properties - const hasExplicitMarkerFont = resolvedMarkerRpr?.fontFamily != null; - const hasExplicitMarkerSize = resolvedMarkerRpr?.fontSize != null; - - const firstRunFont = extractFirstTextRunFont(para); - if (firstRunFont) { - const wordLayout = paragraphAttrs.wordLayout as Record; - const marker = wordLayout.marker as Record | undefined; - if (marker?.run) { - const markerRun = marker.run as Record; - // Only override with first text run's font if numbering level didn't explicitly define it - // fontSizePx is already converted to pixels by extractFirstTextRunFont - if (!hasExplicitMarkerSize && firstRunFont.fontSizePx != null && Number.isFinite(firstRunFont.fontSizePx)) { - markerRun.fontSize = firstRunFont.fontSizePx; - } - if (!hasExplicitMarkerFont && firstRunFont.fontFamily) { - markerRun.fontFamily = firstRunFont.fontFamily; - } - } - } - } - const linkedStyleResolver = createLinkedStyleResolver(converterContext?.linkedStyles); const blocks: FlowBlock[] = []; const paraAttrs = (para.attrs ?? {}) as Record; const rawParagraphProps = @@ -1082,7 +716,7 @@ export function paragraphToFlowBlocks( const hasSectPr = Boolean(rawParagraphProps?.sectPr); const isSectPrMarker = hasSectPr || paraAttrs.pageBreakSource === 'sectPr'; - if (hasPageBreakBefore(para)) { + if (paragraphAttrs.pageBreakBefore) { blocks.push({ kind: 'pageBreak', id: nextBlockId('pageBreak'), @@ -1091,7 +725,7 @@ export function paragraphToFlowBlocks( } if (!para.content || para.content.length === 0) { - if (paragraphHiddenByVanish) { + if (paragraphProps.runProperties?.vanish) { return blocks; } // Get the PM position of the empty paragraph for caret rendering @@ -1121,7 +755,7 @@ export function paragraphToFlowBlocks( kind: 'paragraph', id: baseBlockId, runs: [emptyRun], - attrs: emptyParagraphAttrs, + attrs: deepClone(paragraphAttrs), }); return blocks; } @@ -1184,36 +818,16 @@ export function paragraphToFlowBlocks( kind: 'paragraph', id: nextId(), runs, - attrs: cloneParagraphAttrs(paragraphAttrs), + attrs: deepClone(paragraphAttrs), }); partIndex += 1; }; - const getInlineStyleId = (marks: PMMark[] = []): string | null => { - const mark = marks.find( - (m) => m?.type === 'textStyle' && typeof m.attrs?.styleId === 'string' && m.attrs.styleId.trim(), - ); - return mark ? (mark.attrs!.styleId as string) : null; - }; - - const applyRunStyles = (run: TextRun, inlineStyleId: string | null, runStyleId: string | null) => { - if (!linkedStyleResolver) return; - applyLinkedStyleToRun(run, { - resolver: linkedStyleResolver, - paragraphStyleId, - inlineStyleId, - runStyleId, - defaultFont, - defaultSize, - }); - }; - const visitNode = ( node: PMNode, inheritedMarks: PMMark[] = [], activeSdt?: SdtMetadata, - activeRunStyleId: string | null = null, - activeRunProperties?: Record | null, + activeRunProperties?: RunProperties, activeHidden = false, ) => { if (node.type === 'footnoteReference') { @@ -1254,15 +868,9 @@ export function paragraphToFlowBlocks( } if (node.type === 'text' && node.text) { - // Apply styles in correct priority order: - // 1. Create run with defaults (lowest priority) - textNodeToRun with empty marks - // 2. Apply linked styles from paragraph/character styles (medium priority) - // 3. Apply base run defaults (medium-high priority) - // 4. Apply marks ONCE (highest priority) - inline marks override everything - // // Pass empty array to textNodeToRun to prevent double mark application. // Marks will be applied AFTER linked styles to ensure proper priority. - const run = textNodeToRun( + let run = textNodeToRun( node, positions, defaultFont, @@ -1272,10 +880,7 @@ export function paragraphToFlowBlocks( hyperlinkConfig, themeColors, ); - const inlineStyleId = getInlineStyleId(inheritedMarks); - applyRunStyles(run, inlineStyleId, activeRunStyleId); - applyBaseRunDefaults(run, baseRunDefaults, defaultFont, defaultSize); - applyInlineRunProperties(run, activeRunProperties); + run = applyInlineRunProperties(run, activeRunProperties); // Apply marks ONCE here - this ensures they override linked styles applyMarksToRun( run, @@ -1291,20 +896,22 @@ export function paragraphToFlowBlocks( if (node.type === 'run' && Array.isArray(node.content)) { const mergedMarks = [...(node.marks ?? []), ...(inheritedMarks ?? [])]; - const runProperties = - typeof node.attrs?.runProperties === 'object' && node.attrs.runProperties !== null - ? (node.attrs.runProperties as Record) - : null; - const runVanish = getVanishValue(runProperties); + const runProperties = (node.attrs?.runProperties ?? {}) as RunProperties; + const runVanish = runProperties?.vanish; const nextHidden = runVanish === undefined ? activeHidden : runVanish; if (nextHidden) { suppressedByVanish = true; return; } - const nextRunStyleId = extractRunStyleId(runProperties) ?? activeRunStyleId; - const nextRunProperties = runProperties ?? activeRunProperties; + const resolvedRunProperties = resolveRunProperties( + converterContext!, + runProperties, + resolvedParagraphProperties, + false, + false, + ); node.content.forEach((child) => - visitNode(child, mergedMarks, activeSdt, nextRunStyleId, nextRunProperties, nextHidden), + visitNode(child, mergedMarks, activeSdt, resolvedRunProperties, nextHidden), ); return; } @@ -1314,7 +921,7 @@ export function paragraphToFlowBlocks( const inlineMetadata = resolveNodeSdtMetadata(node, 'structuredContent'); const nextSdt = inlineMetadata ?? activeSdt; node.content.forEach((child) => - visitNode(child, inheritedMarks, nextSdt, activeRunStyleId, activeRunProperties, activeHidden), + visitNode(child, inheritedMarks, nextSdt, activeRunProperties, activeHidden), ); return; } @@ -1390,7 +997,7 @@ export function paragraphToFlowBlocks( const pageRefPos = positions.get(node); // Pass empty marks to textNodeToRun to prevent double mark application. // Marks will be applied AFTER linked styles to ensure proper priority and honor enableComments. - const tokenRun = textNodeToRun( + let tokenRun = textNodeToRun( { type: 'text', text: fallbackText } as PMNode, positions, defaultFont, @@ -1400,10 +1007,7 @@ export function paragraphToFlowBlocks( hyperlinkConfig, themeColors, ); - const inlineStyleId = getInlineStyleId(mergedMarks); - applyRunStyles(tokenRun, inlineStyleId, activeRunStyleId); - applyBaseRunDefaults(tokenRun, baseRunDefaults, defaultFont, defaultSize); - applyInlineRunProperties(tokenRun, activeRunProperties); + tokenRun = applyInlineRunProperties(tokenRun, activeRunProperties); // Apply marks ONCE here - this ensures they override linked styles and honor enableComments applyMarksToRun( tokenRun, @@ -1430,7 +1034,7 @@ export function paragraphToFlowBlocks( } else if (Array.isArray(node.content)) { // No bookmark found, fall back to treating as transparent container node.content.forEach((child) => - visitNode(child, mergedMarks, activeSdt, activeRunStyleId, activeRunProperties), + visitNode(child, mergedMarks, activeSdt, activeRunProperties), ); } return; @@ -1450,7 +1054,7 @@ export function paragraphToFlowBlocks( // Process any content inside the bookmark (usually empty) if (Array.isArray(node.content)) { node.content.forEach((child) => - visitNode(child, inheritedMarks, activeSdt, activeRunStyleId, activeRunProperties), + visitNode(child, inheritedMarks, activeSdt, activeRunProperties), ); } return; @@ -1472,7 +1076,7 @@ export function paragraphToFlowBlocks( const nodeMarks = node.marks ?? []; const effectiveMarks = nodeMarks.length > 0 ? nodeMarks : marksAsAttrs; const mergedMarks = [...effectiveMarks, ...(inheritedMarks ?? [])]; - const tokenRun = tokenNodeToRun( + let tokenRun = tokenNodeToRun( node, positions, defaultFont, @@ -1485,9 +1089,6 @@ export function paragraphToFlowBlocks( if (activeSdt) { (tokenRun as TextRun).sdt = activeSdt; } - const inlineStyleId = getInlineStyleId(inheritedMarks); - applyRunStyles(tokenRun as TextRun, inlineStyleId, activeRunStyleId); - applyBaseRunDefaults(tokenRun as TextRun, baseRunDefaults, defaultFont, defaultSize); if (mergedMarks.length > 0) { applyMarksToRun( tokenRun as TextRun, @@ -1498,7 +1099,14 @@ export function paragraphToFlowBlocks( enableComments, ); } - applyInlineRunProperties(tokenRun as TextRun, activeRunProperties); + console.debug('[token-debug] paragraph-token-run', { + token: (tokenRun as TextRun).token, + fontFamily: (tokenRun as TextRun).fontFamily, + fontSize: (tokenRun as TextRun).fontSize, + inlineStyleId: paragraphProps.styleId || null, + mergedMarksCount: mergedMarks.length, + }); + tokenRun = applyInlineRunProperties(tokenRun as TextRun, activeRunProperties); currentRuns.push(tokenRun); } return; @@ -1725,12 +1333,12 @@ export function paragraphToFlowBlocks( }; para.content.forEach((child) => { - visitNode(child, [], undefined, null, undefined); + visitNode(child, [], undefined, undefined); }); flushParagraph(); const hasParagraphBlock = blocks.some((block) => block.kind === 'paragraph'); - if (!hasParagraphBlock && !suppressedByVanish && !paragraphHiddenByVanish) { + if (!hasParagraphBlock && !suppressedByVanish && !paragraphProps.runProperties?.vanish) { blocks.push({ kind: 'paragraph', id: baseBlockId, @@ -1741,7 +1349,7 @@ export function paragraphToFlowBlocks( fontSize: defaultSize, }, ], - attrs: cloneParagraphAttrs(paragraphAttrs), + attrs: deepClone(paragraphAttrs), }); } @@ -1804,7 +1412,6 @@ export function handleParagraphNode(node: PMNode, context: NodeHandlerContext): defaultFont, defaultSize, styleContext, - listCounterContext, trackedChangesConfig, bookmarks, hyperlinkConfig, @@ -1828,7 +1435,6 @@ export function handleParagraphNode(node: PMNode, context: NodeHandlerContext): } } - const { getListCounter, incrementListCounter, resetListCounter } = listCounterContext; const paragraphToFlowBlocks = converters?.paragraphToFlowBlocks; if (!paragraphToFlowBlocks) { return; @@ -1841,7 +1447,6 @@ export function handleParagraphNode(node: PMNode, context: NodeHandlerContext): defaultFont, defaultSize, styleContext, - { getListCounter, incrementListCounter, resetListCounter }, trackedChangesConfig, bookmarks, hyperlinkConfig, diff --git a/packages/layout-engine/pm-adapter/src/converters/table.ts b/packages/layout-engine/pm-adapter/src/converters/table.ts index 07303adca..7eaf84092 100644 --- a/packages/layout-engine/pm-adapter/src/converters/table.ts +++ b/packages/layout-engine/pm-adapter/src/converters/table.ts @@ -29,7 +29,6 @@ import type { HyperlinkConfig, ThemeColorPalette, ConverterContext, - ListCounterContext, TableNodeToBlockOptions, NestedConverters, } from '../types.js'; @@ -51,7 +50,6 @@ type ParagraphConverter = ( defaultFont: string, defaultSize: number, styleContext: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig?: HyperlinkConfig, @@ -65,7 +63,6 @@ type TableParserDependencies = { defaultFont: string; defaultSize: number; styleContext: StyleContext; - listCounterContext?: ListCounterContext; trackedChanges?: TrackedChangesConfig; bookmarks?: Map; hyperlinkConfig?: HyperlinkConfig; @@ -269,7 +266,6 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { context.defaultFont, context.defaultSize, context.styleContext, - listCounterContext, context.trackedChanges, context.bookmarks, context.hyperlinkConfig, @@ -699,7 +695,6 @@ export function tableNodeToBlock( defaultFont: string, defaultSize: number, styleContext: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig?: HyperlinkConfig, @@ -723,7 +718,6 @@ export function tableNodeToBlock( bookmarks, hyperlinkConfig, themeColors, - listCounterContext: options?.listCounterContext, paragraphToFlowBlocks: paragraphConverter, converterContext, converters: options?.converters, @@ -906,7 +900,6 @@ export function handleTableNode(node: PMNode, context: NodeHandlerContext): void defaultFont, defaultSize, styleContext, - listCounterContext, trackedChangesConfig, bookmarks, hyperlinkConfig, @@ -927,7 +920,7 @@ export function handleTableNode(node: PMNode, context: NodeHandlerContext): void undefined, // themeColors converters?.paragraphToFlowBlocks, converterContext, - { listCounterContext, converters }, + { converters }, ); if (tableBlock) { blocks.push(tableBlock); diff --git a/packages/layout-engine/pm-adapter/src/internal.ts b/packages/layout-engine/pm-adapter/src/internal.ts index 4b6a42176..5cfe21b93 100644 --- a/packages/layout-engine/pm-adapter/src/internal.ts +++ b/packages/layout-engine/pm-adapter/src/internal.ts @@ -58,7 +58,6 @@ import type { PositionMap, NodeHandlerContext, NodeHandler, - ListCounterContext, PMDocumentMap, BatchAdapterOptions, ThemeColorPalette, @@ -223,7 +222,6 @@ export function toFlowBlocks(pmDoc: PMNode | object, options?: AdapterOptions): defaultFont: string, defaultSize: number, context: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig?: HyperlinkConfig, @@ -237,7 +235,6 @@ export function toFlowBlocks(pmDoc: PMNode | object, options?: AdapterOptions): defaultFont, defaultSize, context, - listCounterContext, trackedChanges, bookmarks, hyperlinkConfig, @@ -273,7 +270,6 @@ export function toFlowBlocks(pmDoc: PMNode | object, options?: AdapterOptions): paragraphConverter, converterCtx ?? converterContext, { - listCounterContext: { getListCounter, incrementListCounter, resetListCounter }, converters: { paragraphToFlowBlocks: paragraphConverter, imageNodeToBlock, @@ -295,7 +291,6 @@ export function toFlowBlocks(pmDoc: PMNode | object, options?: AdapterOptions): defaultSize, styleContext, converterContext, - listCounterContext: { getListCounter, incrementListCounter, resetListCounter }, trackedChangesConfig, hyperlinkConfig, enableComments, @@ -445,7 +440,6 @@ function paragraphToFlowBlocks( defaultFont: string, defaultSize: number, styleContext: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig: HyperlinkConfig = DEFAULT_HYPERLINK_CONFIG, @@ -460,7 +454,6 @@ function paragraphToFlowBlocks( defaultFont, defaultSize, styleContext, - listCounterContext, trackedChanges, bookmarks, hyperlinkConfig, @@ -499,7 +492,6 @@ function paragraphToFlowBlocks( paragraphToFlowBlocks, converterCtx ?? converterContext, { - listCounterContext, converters: { // Type assertion needed due to signature mismatch between actual function and type definition paragraphToFlowBlocks: paragraphToFlowBlocksImpl as unknown as ParagraphToFlowBlocksConverter, diff --git a/packages/layout-engine/pm-adapter/src/sdt/document-part-object.ts b/packages/layout-engine/pm-adapter/src/sdt/document-part-object.ts index 2b5a7085d..c37400408 100644 --- a/packages/layout-engine/pm-adapter/src/sdt/document-part-object.ts +++ b/packages/layout-engine/pm-adapter/src/sdt/document-part-object.ts @@ -31,7 +31,6 @@ export function handleDocumentPartObjectNode(node: PMNode, context: NodeHandlerC bookmarks, hyperlinkConfig, converters, - listCounterContext, trackedChangesConfig, } = context; const docPartGallery = getDocPartGallery(node); @@ -67,7 +66,6 @@ export function handleDocumentPartObjectNode(node: PMNode, context: NodeHandlerC defaultFont, defaultSize, styleContext, - listCounterContext, trackedChangesConfig, bookmarks, hyperlinkConfig, diff --git a/packages/layout-engine/pm-adapter/src/sdt/document-section.ts b/packages/layout-engine/pm-adapter/src/sdt/document-section.ts index 785a81fcf..544291e54 100644 --- a/packages/layout-engine/pm-adapter/src/sdt/document-section.ts +++ b/packages/layout-engine/pm-adapter/src/sdt/document-section.ts @@ -11,7 +11,6 @@ import type { BlockIdGenerator, PositionMap, StyleContext, - ListCounterContext, HyperlinkConfig, NodeHandlerContext, TrackedChangesConfig, @@ -37,7 +36,6 @@ type ParagraphConverter = ( defaultFont: string, defaultSize: number, styleContext: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig?: HyperlinkConfig, @@ -78,7 +76,6 @@ interface ProcessingContext { defaultFont: string; defaultSize: number; styleContext: StyleContext; - listCounterContext: ListCounterContext; bookmarks?: Map; hyperlinkConfig: HyperlinkConfig; } @@ -117,7 +114,6 @@ function processParagraphChild( output: ProcessingOutput, converters: NodeConverters, ): void { - const { getListCounter, incrementListCounter, resetListCounter } = context.listCounterContext; const paragraphBlocks = converters.paragraphToFlowBlocks( child, context.nextBlockId, @@ -125,7 +121,6 @@ function processParagraphChild( context.defaultFont, context.defaultSize, context.styleContext, - { getListCounter, incrementListCounter, resetListCounter }, undefined, // trackedChanges context.bookmarks, context.hyperlinkConfig, @@ -222,7 +217,6 @@ function processNestedStructuredContent( output: ProcessingOutput, converters: NodeConverters, ): void { - const { getListCounter, incrementListCounter, resetListCounter } = context.listCounterContext; // Nested structured content block inside section - unwrap and chain metadata const nestedMetadata = resolveNodeSdtMetadata(child, 'structuredContentBlock'); child.content?.forEach((grandchild) => { @@ -234,7 +228,6 @@ function processNestedStructuredContent( context.defaultFont, context.defaultSize, context.styleContext, - { getListCounter, incrementListCounter, resetListCounter }, undefined, // trackedChanges context.bookmarks, context.hyperlinkConfig, @@ -287,7 +280,6 @@ function processDocumentPartObject( output: ProcessingOutput, converters: NodeConverters, ): void { - const { getListCounter, incrementListCounter, resetListCounter } = context.listCounterContext; // Nested doc part (e.g., TOC) inside section const docPartGallery = getDocPartGallery(child); const docPartObjectId = getDocPartObjectId(child); @@ -307,7 +299,6 @@ function processDocumentPartObject( defaultFont: context.defaultFont, defaultSize: context.defaultSize, styleContext: context.styleContext, - listCounterContext: { getListCounter, incrementListCounter, resetListCounter }, bookmarks: context.bookmarks, hyperlinkConfig: context.hyperlinkConfig, }, @@ -392,7 +383,6 @@ export function handleDocumentSectionNode(node: PMNode, context: NodeHandlerCont defaultFont, defaultSize, styleContext, - listCounterContext, bookmarks, hyperlinkConfig, converters, @@ -415,7 +405,6 @@ export function handleDocumentSectionNode(node: PMNode, context: NodeHandlerCont defaultFont, defaultSize, styleContext, - listCounterContext, bookmarks, hyperlinkConfig, }, diff --git a/packages/layout-engine/pm-adapter/src/sdt/structured-content-block.ts b/packages/layout-engine/pm-adapter/src/sdt/structured-content-block.ts index eaa6f8a13..8cf65df41 100644 --- a/packages/layout-engine/pm-adapter/src/sdt/structured-content-block.ts +++ b/packages/layout-engine/pm-adapter/src/sdt/structured-content-block.ts @@ -27,13 +27,11 @@ export function handleStructuredContentBlockNode(node: PMNode, context: NodeHand defaultFont, defaultSize, styleContext, - listCounterContext, trackedChangesConfig, bookmarks, hyperlinkConfig, converters, } = context; - const { getListCounter, incrementListCounter, resetListCounter } = listCounterContext; const structuredContentMetadata = resolveNodeSdtMetadata(node, 'structuredContentBlock'); const paragraphToFlowBlocks = converters?.paragraphToFlowBlocks; @@ -50,7 +48,6 @@ export function handleStructuredContentBlockNode(node: PMNode, context: NodeHand defaultFont, defaultSize, styleContext, - { getListCounter, incrementListCounter, resetListCounter }, trackedChangesConfig, bookmarks, hyperlinkConfig, diff --git a/packages/layout-engine/pm-adapter/src/sdt/toc.ts b/packages/layout-engine/pm-adapter/src/sdt/toc.ts index 73b44d0d9..4c36d86ad 100644 --- a/packages/layout-engine/pm-adapter/src/sdt/toc.ts +++ b/packages/layout-engine/pm-adapter/src/sdt/toc.ts @@ -11,7 +11,6 @@ import type { BlockIdGenerator, PositionMap, StyleContext, - ListCounterContext, HyperlinkConfig, TrackedChangesConfig, NodeHandlerContext, @@ -96,7 +95,6 @@ export function processTocChildren( defaultFont: string; defaultSize: number; styleContext: StyleContext; - listCounterContext?: ListCounterContext; bookmarks?: Map; trackedChanges?: TrackedChangesConfig; hyperlinkConfig: HyperlinkConfig; @@ -112,7 +110,6 @@ export function processTocChildren( defaultFont: string, defaultSize: number, styleContext: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig?: HyperlinkConfig, @@ -131,7 +128,6 @@ export function processTocChildren( context.defaultFont, context.defaultSize, context.styleContext, - context.listCounterContext, context.trackedChanges, context.bookmarks, context.hyperlinkConfig, @@ -185,13 +181,11 @@ export function handleTableOfContentsNode(node: PMNode, context: NodeHandlerCont defaultFont, defaultSize, styleContext, - listCounterContext, trackedChangesConfig, bookmarks, hyperlinkConfig, converters, } = context; - const { getListCounter, incrementListCounter, resetListCounter } = listCounterContext; const tocInstruction = getNodeInstruction(node); const paragraphToFlowBlocks = converters?.paragraphToFlowBlocks; if (!paragraphToFlowBlocks) { @@ -207,7 +201,6 @@ export function handleTableOfContentsNode(node: PMNode, context: NodeHandlerCont defaultFont, defaultSize, styleContext, - { getListCounter, incrementListCounter, resetListCounter }, trackedChangesConfig, bookmarks, hyperlinkConfig, diff --git a/packages/layout-engine/pm-adapter/src/types.d.ts b/packages/layout-engine/pm-adapter/src/types.d.ts index cf0d4ba80..94988a9af 100644 --- a/packages/layout-engine/pm-adapter/src/types.d.ts +++ b/packages/layout-engine/pm-adapter/src/types.d.ts @@ -235,7 +235,6 @@ export interface NodeHandlerContext { defaultSize: number; styleContext: StyleContext; converterContext?: ConverterContext; - listCounterContext: ListCounterContext; trackedChangesConfig: TrackedChangesConfig; hyperlinkConfig: HyperlinkConfig; bookmarks: Map; @@ -252,7 +251,6 @@ export interface NodeHandlerContext { defaultFont: string, defaultSize: number, styleContext: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig?: HyperlinkConfig, diff --git a/packages/layout-engine/pm-adapter/src/types.ts b/packages/layout-engine/pm-adapter/src/types.ts index 43021c116..1608977bb 100644 --- a/packages/layout-engine/pm-adapter/src/types.ts +++ b/packages/layout-engine/pm-adapter/src/types.ts @@ -5,7 +5,6 @@ import type { TrackedChangesMode, SectionMetadata, FlowBlock, TrackedChangeMeta, Engines } from '@superdoc/contracts'; import type { StyleContext as StyleEngineContext, - StyleNode as StyleEngineNode, ComputedParagraphStyle, } from '@superdoc/style-engine'; import type { SectionRange } from './sections/index.js'; @@ -13,7 +12,6 @@ import type { ConverterContext } from './converter-context.js'; export type { ConverterContext } from './converter-context.js'; export type StyleContext = StyleEngineContext; -export type StyleNode = StyleEngineNode; export type { ComputedParagraphStyle }; export type ThemeColorPalette = Record; @@ -280,9 +278,6 @@ export interface NodeHandlerContext { styleContext: StyleContext; converterContext?: ConverterContext; - // List counters - listCounterContext: ListCounterContext; - // Tracked changes & hyperlinks trackedChangesConfig: TrackedChangesConfig; hyperlinkConfig: HyperlinkConfig; @@ -313,11 +308,6 @@ export type NodeHandler = (node: PMNode, context: NodeHandlerContext) => void; /** * List counter context for numbering */ -export type ListCounterContext = { - getListCounter: (numId: number, ilvl: number) => number; - incrementListCounter: (numId: number, ilvl: number) => number; - resetListCounter: (numId: number, ilvl: number) => void; -}; export type ParagraphToFlowBlocksConverter = ( para: PMNode, @@ -326,7 +316,6 @@ export type ParagraphToFlowBlocksConverter = ( defaultFont: string, defaultSize: number, styleContext: StyleContext, - listCounterContext?: ListCounterContext, trackedChanges?: TrackedChangesConfig, bookmarks?: Map, hyperlinkConfig?: HyperlinkConfig, @@ -349,7 +338,6 @@ export type DrawingNodeToBlockConverter = ( ) => FlowBlock | null; export type TableNodeToBlockOptions = { - listCounterContext?: ListCounterContext; converters?: NestedConverters; }; @@ -384,11 +372,11 @@ export type NestedConverters = { * List rendering attributes */ export type ListRenderingAttrs = { - markerText?: string; - justification?: 'left' | 'right' | 'center'; - path?: number[]; - numberingType?: string; - suffix?: 'tab' | 'space' | 'nothing'; + markerText: string; + justification: 'left' | 'right' | 'center'; + path: number[]; + numberingType: string; + suffix: 'tab' | 'space' | 'nothing'; }; /** diff --git a/packages/layout-engine/style-engine/src/cascade.ts b/packages/layout-engine/style-engine/src/cascade.ts index cd2a4c00c..53d74b1d4 100644 --- a/packages/layout-engine/style-engine/src/cascade.ts +++ b/packages/layout-engine/style-engine/src/cascade.ts @@ -10,77 +10,9 @@ * - layout-engine's style resolution (for rendering) */ -// --------------------------------------------------------------------------- -// Constants -// --------------------------------------------------------------------------- - -/** - * Properties that must be explicitly overridden by inline formatting. - * These properties require special handling because inline w:rPr formatting must - * always take precedence over character style (w:rStyle) properties, even though - * both are merged in the style chain. This explicit override ensures that direct - * formatting (e.g., w:sz for fontSize) always wins over linked character styles. - * - * Note: fontFamily and color are already handled by combineProperties with full override logic. - */ -export const INLINE_OVERRIDE_PROPERTIES = [ - 'fontSize', - 'bold', - 'italic', - 'strike', - 'underline', - 'letterSpacing', -] as const; - -/** - * Default font size in half-points (20 half-points = 10pt). - * This baseline ensures all text has a valid, positive font size when no other source provides one. - * Used as the final fallback in fontSize resolution cascade: - * 1. Inline formatting (highest priority) - * 2. Character style - * 3. Paragraph style - * 4. Document defaults - * 5. Normal style - * 6. DEFAULT_FONT_SIZE_HALF_POINTS (this constant) - */ -export const DEFAULT_FONT_SIZE_HALF_POINTS = 20; - -// --------------------------------------------------------------------------- -// Types -// --------------------------------------------------------------------------- - -export type PropertyObject = Record; +import { ParagraphProperties, RunProperties } from "./ooxml"; -export type SpecialHandler = (target: PropertyObject, source: PropertyObject) => T; - -export interface CombinePropertiesOptions { - /** - * Keys that should completely overwrite instead of deep merge. - * Use this for complex objects like fontFamily or color that should - * be replaced entirely rather than merged property-by-property. - */ - fullOverrideProps?: string[]; - - /** - * Custom merge handlers for specific keys. - * The handler receives the accumulated target and current source, - * and returns the new value for that key. - */ - specialHandling?: Record; -} - -// --------------------------------------------------------------------------- -// Core Cascade Functions -// --------------------------------------------------------------------------- - -/** - * Determines whether the supplied value is a mergeable plain object. - * @param item - Value to inspect. - * @returns True when the value is a non-array object. - */ -function isObject(item: unknown): item is PropertyObject { - return item != null && typeof item === 'object' && !Array.isArray(item); -} +export type PropertyObject = ParagraphProperties | RunProperties; /** * Performs a deep merge on an ordered list of property objects. @@ -113,21 +45,35 @@ function isObject(item: unknown): item is PropertyObject { * // result2: { color: { val: '00FF00' } } - NOT merged * ``` */ -export function combineProperties( - propertiesArray: PropertyObject[], - options: CombinePropertiesOptions = {}, -): PropertyObject { +export function combineProperties( + propertiesArray: T[], + options: { + /** + * Keys that should completely overwrite instead of deep merge. + * Use this for complex objects like fontFamily or color that should + * be replaced entirely rather than merged property-by-property. + */ + fullOverrideProps?: string[]; + + /** + * Custom merge handlers for specific keys. + * The handler receives the accumulated target and current source, + * and returns the new value for that key. + */ + specialHandling?: Record, source: Record) => unknown>; + } = {}, +): T { const { fullOverrideProps = [], specialHandling = {} } = options; if (!propertiesArray || propertiesArray.length === 0) { - return {}; + return {} as T; } /** * Deep merges two objects while respecting override lists and per-key handlers. */ - const merge = (target: PropertyObject, source: PropertyObject): PropertyObject => { - const output: PropertyObject = { ...target }; + const merge = (target: Record, source: Record): PropertyObject => { + const output: Record = { ...target }; if (isObject(target) && isObject(source)) { for (const key in source) { @@ -140,7 +86,7 @@ export function combineProperties( } else if (!fullOverrideProps.includes(key) && isObject(source[key])) { // Deep merge nested objects (unless marked for full override) if (key in target && isObject(target[key])) { - output[key] = merge(target[key] as PropertyObject, source[key] as PropertyObject); + output[key] = merge(target[key] as Record, source[key] as Record); } else { output[key] = source[key]; } @@ -155,97 +101,16 @@ export function combineProperties( return output; }; - return propertiesArray.reduce((acc, current) => merge(acc, current ?? {}), {}); -} - -/** - * Combines run property objects while fully overriding certain keys. - * This is a convenience wrapper for run properties (w:rPr). - * - * @param propertiesArray - Ordered list of run property objects. - * @returns Combined run property object. - */ -export function combineRunProperties(propertiesArray: PropertyObject[]): PropertyObject { - return combineProperties(propertiesArray, { - fullOverrideProps: ['fontFamily', 'color'], - }); -} - -/** - * Applies inline override properties to ensure direct formatting always wins. - * - * Even though inline properties come last in the style chain, we explicitly - * override to guarantee correctness. This is critical for properties like - * fontSize where inline w:sz must override w:rStyle fontSize. - * - * @param finalProps - The merged properties from the style chain. - * @param inlineProps - The inline (direct) formatting properties. - * @param overrideKeys - Which keys to force override (defaults to INLINE_OVERRIDE_PROPERTIES). - * @returns The finalProps object with inline overrides applied. - */ -export function applyInlineOverrides( - finalProps: PropertyObject, - inlineProps: PropertyObject | null | undefined, - overrideKeys: readonly string[] = INLINE_OVERRIDE_PROPERTIES, -): PropertyObject { - if (!inlineProps) return finalProps; - - for (const prop of overrideKeys) { - if (inlineProps[prop] != null) { - finalProps[prop] = inlineProps[prop]; - } - } - - return finalProps; + return propertiesArray.reduce((acc, current) => merge(acc, (current ?? {}) as Record), {}) as T; } -// --------------------------------------------------------------------------- -// Font Size Fallback -// --------------------------------------------------------------------------- - /** - * Validates that a font size value is valid (positive finite number). - */ -export function isValidFontSize(value: unknown): value is number { - return typeof value === 'number' && Number.isFinite(value) && value > 0; -} - -/** - * Resolves font size with fallback cascade. - * - * Falls back through multiple sources to ensure all text has a valid font size: - * 1. The provided value (if valid) - * 2. Document defaults - * 3. Normal style - * 4. Baseline constant (DEFAULT_FONT_SIZE_HALF_POINTS = 20 = 10pt) - * - * @param value - The resolved font size from the style chain. - * @param defaultProps - Document default properties. - * @param normalProps - Normal style properties. - * @returns A valid positive font size in half-points. + * Determines whether the supplied value is a mergeable plain object. + * @param item - Value to inspect. + * @returns True when the value is a non-array object. */ -export function resolveFontSizeWithFallback( - value: unknown, - defaultProps?: PropertyObject | null, - normalProps?: PropertyObject | null, -): number { - // If the value is already valid, use it - if (isValidFontSize(value)) { - return value; - } - - // Try document defaults - if (defaultProps && isValidFontSize(defaultProps.fontSize)) { - return defaultProps.fontSize; - } - - // Try Normal style - if (normalProps && isValidFontSize(normalProps.fontSize)) { - return normalProps.fontSize; - } - - // Final fallback: 20 half-points = 10pt - return DEFAULT_FONT_SIZE_HALF_POINTS; +function isObject(item: unknown): item is PropertyObject { + return item != null && typeof item === 'object' && !Array.isArray(item); } // --------------------------------------------------------------------------- @@ -264,11 +129,11 @@ export function resolveFontSizeWithFallback( * @param isNormalDefault - Whether Normal style has w:default="1". * @returns Ordered array [first, second] for the cascade. */ -export function orderDefaultsAndNormal( - defaultProps: PropertyObject, - normalProps: PropertyObject, +export function orderDefaultsAndNormal ( + defaultProps: T, + normalProps: T, isNormalDefault: boolean, -): [PropertyObject, PropertyObject] { +): [T, T] { if (isNormalDefault) { // Normal is default: [defaults, Normal] - Normal wins when both exist return [defaultProps, normalProps]; @@ -277,60 +142,48 @@ export function orderDefaultsAndNormal( return [normalProps, defaultProps]; } } - -// --------------------------------------------------------------------------- -// Indent Special Handling -// --------------------------------------------------------------------------- - -/** - * Creates a special handler for firstLine indent that removes hanging when firstLine is set. - * - * Per OOXML, when a higher priority source defines firstLine, it should - * remove hanging from the final result (they are mutually exclusive). - */ -export function createFirstLineIndentHandler(): SpecialHandler { - return (target: PropertyObject, source: PropertyObject): unknown => { - // If a higher priority source defines firstLine, remove hanging from the final result - if (target.hanging != null && source.firstLine != null) { - delete target.hanging; - } - return source.firstLine; - }; -} - /** - * Creates a special handler for hanging indent that removes firstLine when hanging is set. - * - * Per OOXML, when a higher priority source defines hanging, it should - * remove firstLine from the final result (they are mutually exclusive). + * Combines run property objects while fully overriding certain keys. + * This is a convenience wrapper for run properties (w:rPr). * - * @returns A SpecialHandler function that processes hanging indent values and - * removes conflicting firstLine values from the target object + * @param propertiesArray - Ordered list of run property objects. + * @returns Combined run property object. */ -export function createHangingIndentHandler(): SpecialHandler { - return (target: PropertyObject, source: PropertyObject): unknown => { - // If a higher priority source defines hanging, remove firstLine from the final result - if (target.firstLine != null && source.hanging != null) { - delete target.firstLine; - } - return source.hanging; - }; +export function combineRunProperties(propertiesArray: RunProperties[]): RunProperties { + return combineProperties(propertiesArray, { + fullOverrideProps: ['fontFamily', 'color'], + }); } +// --------------------------------------------------------------------------- +// Indent Special Handling +// --------------------------------------------------------------------------- /** * Combines indent properties with special handling for firstLine/hanging mutual exclusivity. * * @param indentChain - Ordered list of indent property objects (or objects with indent property). * @returns Combined indent object. */ -export function combineIndentProperties(indentChain: PropertyObject[]): PropertyObject { +export function combineIndentProperties(indentChain: ParagraphProperties[]): ParagraphProperties { // Extract just the indent properties from each object const indentOnly = indentChain.map((props) => (props.indent != null ? { indent: props.indent } : {})); return combineProperties(indentOnly, { specialHandling: { - firstLine: createFirstLineIndentHandler(), - hanging: createHangingIndentHandler(), + firstLine: (target: Record, source: Record): unknown => { + // If a higher priority source defines firstLine, remove hanging from the final result + if (target.hanging != null && source.firstLine != null) { + delete target.hanging; + } + return source.firstLine; + }, + hanging: (target: Record, source: Record): unknown => { + // If a higher priority source defines hanging, remove firstLine from the final result + if (target.firstLine != null && source.hanging != null) { + delete target.firstLine; + } + return source.hanging; + } }, }); } diff --git a/packages/layout-engine/style-engine/src/index.ts b/packages/layout-engine/style-engine/src/index.ts index e7d07268a..d0abb22fa 100644 --- a/packages/layout-engine/style-engine/src/index.ts +++ b/packages/layout-engine/style-engine/src/index.ts @@ -10,24 +10,14 @@ * - Conversion to pixels happens at measurement boundary only */ -import { toCssFontFamily } from '@superdoc/font-utils'; // Re-export cascade utilities - these are the SINGLE SOURCE OF TRUTH for property merging export { combineProperties, combineRunProperties, - applyInlineOverrides, - resolveFontSizeWithFallback, orderDefaultsAndNormal, combineIndentProperties, - createFirstLineIndentHandler, - createHangingIndentHandler, - isValidFontSize, - INLINE_OVERRIDE_PROPERTIES, - DEFAULT_FONT_SIZE_HALF_POINTS, type PropertyObject, - type SpecialHandler, - type CombinePropertiesOptions, } from './cascade.js'; import type { TabStop, @@ -104,81 +94,10 @@ export interface ComputedParagraphStyle { tabs?: TabStop[]; } -export interface ComputedCharacterStyle { - font?: { - family: string; - size?: number; - weight?: number; - italic?: boolean; - }; - color?: string; - underline?: { - style?: 'single' | 'double' | 'dotted' | 'dashed' | 'wavy'; - color?: string; - }; - strike?: boolean; - highlight?: string; - letterSpacing?: number; -} - -export interface NumberingStyle { - numId: string; - level: number; - indent?: { - left?: number; - hanging?: number; - }; - format?: 'decimal' | 'lowerLetter' | 'upperLetter' | 'lowerRoman' | 'upperRoman' | 'bullet' | 'custom'; - text?: string; - start?: number; -} - -export interface ComputedStyle { - paragraph: ComputedParagraphStyle; - character: ComputedCharacterStyle; - numbering?: NumberingStyle; - sdt?: SdtMetadata; -} - -export interface StyleNode { - styleId?: string; - paragraphProps?: Partial; - characterProps?: Partial; - numbering?: { - numId: string; - level: number; - }; -} - -export interface ParagraphStyleDefinition { - id: string; - basedOn?: string; - paragraph?: Partial; - character?: Partial; - numbering?: { - numId: string; - level: number; - }; -} - -export interface NumberingLevelDefinition { - level: number; - format?: NumberingStyle['format']; - text?: string; - start?: number; - indent?: { - left?: number; - hanging?: number; - }; -} - -export interface NumberingDefinition { - levels: NumberingLevelDefinition[]; -} export interface StyleContext { - styles?: Record; - numbering?: Record; + styles?: Record; + numbering?: Record; theme?: Record; defaults?: { paragraphFont?: string; @@ -216,136 +135,6 @@ export function clearSdtMetadataCache(): void { sdtMetadataCache.clear(); } -/** - * Resolves a node's fully-computed style by applying OOXML cascade rules. - * - * Cascade order: - * 1. Document defaults - * 2. Style chain (basedOn hierarchy) - * 3. Direct paragraph/character formatting - * 4. Numbering overrides - * 5. SDT metadata (if provided via options) - * - * @param node - The style node containing styleId and direct formatting - * @param context - Style definitions, numbering, theme, and defaults - * @param options - Optional SDT metadata to attach to the computed style - * @returns Fully-resolved ComputedStyle with paragraph, character, numbering, and optional SDT metadata - * - * @example - * ```typescript - * import { resolveStyle } from '@superdoc/style-engine'; - * - * const style = resolveStyle( - * { styleId: 'Heading1', paragraphProps: { indent: { left: 36 } } }, - * { styles: {...}, defaults: { paragraphFont: 'Calibri', fontSize: 11 } } - * ); - * - * console.log(style.paragraph.indent.left); // 36 - * console.log(style.character.font.family); // 'Calibri, sans-serif' - * ``` - */ -export function resolveStyle(node: StyleNode, context: StyleContext, options: ResolveStyleOptions = {}): ComputedStyle { - let paragraph = createDefaultParagraph(context); - let character = createDefaultCharacter(context); - let numbering: NumberingStyle | undefined; - - const chain = resolveStyleChain(node.styleId, context.styles); - - for (const style of chain) { - paragraph = mergeParagraph(paragraph, style.paragraph); - character = mergeCharacter(character, style.character); - if (!numbering && style.numbering) { - numbering = resolveNumbering(style.numbering.numId, style.numbering.level, context); - } - } - - paragraph = mergeParagraph(paragraph, node.paragraphProps); - character = mergeCharacter(character, node.characterProps); - - if (node.numbering) { - numbering = resolveNumbering(node.numbering.numId, node.numbering.level, context); - } - - const sdt = options?.sdt ? resolveSdtMetadata(options.sdt) : undefined; - - return { - paragraph, - character, - numbering, - sdt, - }; -} - -/** - * Resolves numbering metadata for a list item at a specific level. - * - * Looks up the numbering definition by `numId` and extracts the level-specific - * formatting (format, text, indent, start value). Returns undefined if the - * definition or level is not found. - * - * @param numId - The numbering definition ID (from w:numPr/w:numId) - * @param level - The zero-based level index (from w:numPr/w:ilvl) - * @param context - Style context containing numbering definitions - * @returns Resolved NumberingStyle or undefined if not found - * - * @example - * ```typescript - * import { resolveNumbering } from '@superdoc/style-engine'; - * - * const numbering = resolveNumbering('1', 0, { - * numbering: { - * '1': { - * levels: [{ level: 0, format: 'decimal', text: '%1.', indent: { left: 36, hanging: 18 } }] - * } - * } - * }); - * - * console.log(numbering?.format); // 'decimal' - * console.log(numbering?.text); // '%1.' - * ``` - */ -export function resolveNumbering(numId: string, level: number, context: StyleContext): NumberingStyle | undefined { - const def = context.numbering?.[numId]; - if (!def) return undefined; - - const levelDef = def.levels.find((entry) => entry.level === level) ?? def.levels[level]; - - if (!levelDef) return undefined; - - return { - numId, - level, - indent: { - left: levelDef.indent?.left, - hanging: levelDef.indent?.hanging, - }, - format: levelDef.format ?? 'decimal', - text: levelDef.text ?? '%1.', - start: levelDef.start ?? 1, - }; -} - -/** - * Resolves style for a table cell's content. - * - * Note: This is a placeholder implementation that returns document defaults. - * Full table cascade (tblPr -> trPr -> tcPr -> pPr) will be implemented in a future phase. - * - * @param table - Table element (reserved for future use) - * @param row - Row index (reserved for future use) - * @param col - Column index (reserved for future use) - * @param context - Style context containing defaults - * @returns ComputedStyle with document defaults - */ -export function resolveTableCellStyle( - _table: unknown, - _row: number, - _col: number, - context: StyleContext, -): ComputedStyle { - // Placeholder: table cascade arrives with tables phase. For now, reuse resolveStyle defaults. - return resolveStyle({}, context); -} /** * Normalizes Structured Document Tag (SDT) metadata into a stable contract shape. @@ -419,94 +208,6 @@ export function resolveSdtMetadata(input?: ResolveSdtMetadataInput | null): SdtM // Helpers // --------------------------------------------------------------------------- -function createDefaultParagraph(_context: StyleContext): ComputedParagraphStyle { - return { - alignment: 'left', - spacing: { - before: 0, - after: 0, - line: 12, - lineRule: 'auto', - }, - indent: { - left: 0, - right: 0, - firstLine: 0, - hanging: 0, - }, - tabs: [], - }; -} - -function createDefaultCharacter(context: StyleContext): ComputedCharacterStyle { - const baseFont = context.defaults?.paragraphFont ?? 'Calibri'; - const fallback = context.defaults?.paragraphFontFallback; - const wordFamily = context.defaults?.paragraphFontFamily; - const resolvedFamily = toCssFontFamily(baseFont, { fallback, wordFamily }) ?? baseFont; - - return { - font: { - family: resolvedFamily, - size: context.defaults?.fontSize ?? 11, - weight: 400, - italic: false, - }, - color: '#000000', - }; -} - -function resolveStyleChain( - styleId: string | undefined, - styles?: Record, -): ParagraphStyleDefinition[] { - if (!styleId || !styles) return []; - const result: ParagraphStyleDefinition[] = []; - const visited = new Set(); - let current: ParagraphStyleDefinition | undefined = styles[styleId]; - - while (current && !visited.has(current.id)) { - result.unshift(current); - visited.add(current.id); - current = current.basedOn ? styles[current.basedOn] : undefined; - } - - return result; -} - -function mergeParagraph( - base: ComputedParagraphStyle, - overrides?: Partial, -): ComputedParagraphStyle { - if (!overrides) return base; - - return { - ...base, - alignment: overrides.alignment ?? base.alignment, - spacing: overrides.spacing ? { ...base.spacing, ...overrides.spacing } : base.spacing, - indent: overrides.indent ? { ...base.indent, ...overrides.indent } : base.indent, - borders: overrides.borders ? { ...base.borders, ...overrides.borders } : base.borders, - shading: overrides.shading ?? base.shading, - tabs: overrides.tabs ?? base.tabs, - }; -} - -function mergeCharacter( - base: ComputedCharacterStyle, - overrides?: Partial, -): ComputedCharacterStyle { - if (!overrides) return base; - - return { - ...base, - font: overrides.font ? { ...base.font, ...overrides.font } : base.font, - color: overrides.color ?? base.color, - underline: overrides.underline ?? base.underline, - strike: overrides.strike ?? base.strike, - highlight: overrides.highlight ?? base.highlight, - letterSpacing: overrides.letterSpacing ?? base.letterSpacing, - }; -} - function normalizeFieldAnnotationMetadata(attrs: Record): FieldAnnotationMetadata { const fieldId = toOptionalString(attrs.fieldId) ?? ''; const formatting = extractFormatting(attrs); diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index 0ed0dd9b9..03806833a 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -6,392 +6,281 @@ */ import { - applyInlineOverrides, combineIndentProperties, combineProperties, combineRunProperties, - createFirstLineIndentHandler, - DEFAULT_FONT_SIZE_HALF_POINTS, - INLINE_OVERRIDE_PROPERTIES, - isValidFontSize, orderDefaultsAndNormal, - resolveFontSizeWithFallback, } from '../cascade.js'; -import type { CombinePropertiesOptions, PropertyObject, SpecialHandler } from '../cascade.js'; +import type { PropertyObject } from '../cascade.js'; +import type { ParagraphProperties, RunProperties } from './types.ts'; +import type { NumberingProperties } from './numbering-types.ts'; +import type { StylesDocumentProperties } from './styles-types.ts'; export { - applyInlineOverrides, combineIndentProperties, combineProperties, combineRunProperties, - createFirstLineIndentHandler, - DEFAULT_FONT_SIZE_HALF_POINTS, - INLINE_OVERRIDE_PROPERTIES, - isValidFontSize, orderDefaultsAndNormal, - resolveFontSizeWithFallback, }; -export type { CombinePropertiesOptions, PropertyObject, SpecialHandler }; +export type { PropertyObject }; +export type * from './types.ts'; +export type * from './numbering-types.ts'; +export type * from './styles-types.ts'; -export interface OoxmlTranslator { - xmlName: string; - encode: (params: unknown) => Record | null | undefined; -} - -export interface OoxmlTranslators { - pPr: OoxmlTranslator; - rPr: OoxmlTranslator; -} - -export interface OoxmlNumberingContext { - definitions?: Record; - abstracts?: Record; -} export interface OoxmlResolverParams { - docx?: Record; - numbering?: OoxmlNumberingContext | null; -} - -export function createOoxmlResolver(translators: OoxmlTranslators) { - return { - resolveRunProperties: ( - params: OoxmlResolverParams, - inlineRpr: Record | null | undefined, - resolvedPpr: Record | null | undefined, - isListNumber = false, - numberingDefinedInline = false, - ) => resolveRunProperties(translators, params, inlineRpr, resolvedPpr, isListNumber, numberingDefinedInline), - resolveParagraphProperties: ( - params: OoxmlResolverParams, - inlineProps: Record | null | undefined, - insideTable = false, - overrideInlineStyleId = false, - tableStyleId: string | null = null, - ) => resolveParagraphProperties(translators, params, inlineProps, insideTable, overrideInlineStyleId, tableStyleId), - getDefaultProperties, - getStyleProperties, - resolveStyleChain, - getNumberingProperties: ( - params: OoxmlResolverParams, - ilvl: number, - numId: number | string, - translator: OoxmlTranslator, - tries = 0, - ) => getNumberingProperties(translators, params, ilvl, numId, translator, tries), - }; + translatedNumbering: NumberingProperties | null | undefined; + translatedLinkedStyles: StylesDocumentProperties | null | undefined; } export function resolveRunProperties( - translators: OoxmlTranslators, params: OoxmlResolverParams, - inlineRpr: Record | null | undefined, - resolvedPpr: Record | null | undefined, + inlineRpr: RunProperties | null | undefined, + resolvedPpr: ParagraphProperties | null | undefined, isListNumber = false, numberingDefinedInline = false, -): Record { +): RunProperties { + if (!params.translatedLinkedStyles) { + return inlineRpr ?? {}; + } + if (!inlineRpr) { + inlineRpr = {} as RunProperties; + } + // Getting properties from style const paragraphStyleId = resolvedPpr?.styleId as string | undefined; - const paragraphStyleProps = resolveStyleChain(params, paragraphStyleId, translators.rPr); + const paragraphStyleProps = resolveStyleChain("runProperties", params, paragraphStyleId); - const defaultProps = getDefaultProperties(params, translators.rPr); - const { properties: normalProps, isDefault: isNormalDefault } = getStyleProperties(params, 'Normal', translators.rPr); + // Getting default properties and normal style properties + const defaultProps = params.translatedLinkedStyles.docDefaults.runProperties ?? {}; + const normalStyleDef = params.translatedLinkedStyles.styles['Normal']; + const normalProps = (normalStyleDef?.runProperties ?? {}) as RunProperties; + const isNormalDefault = normalStyleDef?.default ?? false; - let runStyleProps: Record = {}; + // Get run properties from direct character style, unless it's inside a TOC paragraph style + let runStyleProps = {} as RunProperties; if (!paragraphStyleId?.startsWith('TOC')) { - runStyleProps = inlineRpr?.styleId ? resolveStyleChain(params, inlineRpr.styleId as string, translators.rPr) : {}; + runStyleProps = (inlineRpr?.styleId ? resolveStyleChain("runProperties", params, inlineRpr.styleId as string) : {}) as RunProperties; } const defaultsChain = orderDefaultsAndNormal(defaultProps, normalProps, isNormalDefault); - const inlineRprSafe = inlineRpr ?? {}; - let styleChain: PropertyObject[]; - let inlineOverrideSource: Record = inlineRprSafe; + let styleChain: RunProperties[]; if (isListNumber) { - let numberingProps: Record = {}; - const numberingProperties = resolvedPpr?.numberingProperties as Record | undefined; - const numId = numberingProperties?.numId as number | string | undefined; - if (numId != null && numId !== 0 && numId !== '0') { + const numberingProperties = resolvedPpr?.numberingProperties; + const numId = resolvedPpr?.numberingProperties?.numId; + let numberingProps: RunProperties = {} as RunProperties; + if (numId != null && numId !== 0) { numberingProps = getNumberingProperties( - translators, + "runProperties", params, - (numberingProperties?.ilvl as number | undefined) ?? 0, + numberingProperties?.ilvl ?? 0, numId, - translators.rPr, ); } - const inlineRprForList = numberingDefinedInline ? inlineRprSafe : {}; - if (inlineRprForList?.underline) { - delete inlineRprForList.underline; + if (!numberingDefinedInline) { + // If numbering is not defined inline, we need to ignore the inline rPr + inlineRpr = {} as RunProperties; + } + + // Inline underlines are ignored for list numbers + if (inlineRpr?.underline) { + delete inlineRpr.underline; } - styleChain = [...defaultsChain, paragraphStyleProps, runStyleProps, inlineRprForList, numberingProps]; - inlineOverrideSource = inlineRprForList; + styleChain = [...defaultsChain, paragraphStyleProps, runStyleProps, inlineRpr, numberingProps]; } else { - styleChain = [...defaultsChain, paragraphStyleProps, runStyleProps, inlineRprSafe]; + styleChain = [...defaultsChain, paragraphStyleProps, runStyleProps, inlineRpr]; } const finalProps = combineRunProperties(styleChain); - applyInlineOverrides(finalProps, inlineOverrideSource); - finalProps.fontSize = resolveFontSizeWithFallback(finalProps.fontSize, defaultProps, normalProps); - return finalProps; } export function resolveParagraphProperties( - translators: OoxmlTranslators, params: OoxmlResolverParams, - inlineProps: Record | null | undefined, - insideTable = false, - overrideInlineStyleId = false, + inlineProps: ParagraphProperties | null | undefined, tableStyleId: string | null = null, -): Record { - const defaultProps = getDefaultProperties(params, translators.pPr); - const { properties: normalProps, isDefault: isNormalDefault } = getStyleProperties(params, 'Normal', translators.pPr); - - const inlinePropsSafe = inlineProps ?? {}; - let styleId = inlinePropsSafe?.styleId as string | undefined; - let styleProps = inlinePropsSafe?.styleId - ? resolveStyleChain(params, inlinePropsSafe.styleId as string, translators.pPr) - : {}; - - let numberingProps: Record = {}; - const ilvl = - (inlinePropsSafe?.numberingProperties as Record | undefined)?.ilvl ?? - (styleProps?.numberingProperties as Record | undefined)?.ilvl; - let numId = - (inlinePropsSafe?.numberingProperties as Record | undefined)?.numId ?? - (styleProps?.numberingProperties as Record | undefined)?.numId; - let numberingDefinedInline = - (inlinePropsSafe?.numberingProperties as Record | undefined)?.numId != null; - - const inlineNumId = (inlinePropsSafe?.numberingProperties as Record | undefined)?.numId; - const inlineNumIdDisablesNumbering = inlineNumId === 0 || inlineNumId === '0'; - if (inlineNumIdDisablesNumbering) { - numId = null; +): ParagraphProperties { + if (!inlineProps) { + inlineProps = {} as ParagraphProperties; + } + if (!params.translatedLinkedStyles) { + return inlineProps; } - const isList = numId != null && numId !== 0 && numId !== '0'; + // Normal style and default properties + const defaultProps = params.translatedLinkedStyles.docDefaults?.paragraphProperties ?? {}; + const normalStyleDef = params.translatedLinkedStyles.styles['Normal']; + const normalProps = (normalStyleDef?.paragraphProperties ?? {}) as ParagraphProperties; + const isNormalDefault = normalStyleDef?.default ?? false; + + // Properties from styles + let styleId = inlineProps.styleId as string | undefined; + let styleProps = (inlineProps.styleId + ? resolveStyleChain("paragraphProperties", params, inlineProps.styleId) + : {}) as ParagraphProperties; + + // Properties from numbering + let numberingProps = {} as ParagraphProperties; + const ilvl = inlineProps?.numberingProperties?.ilvl ?? styleProps?.numberingProperties?.ilvl; + const numId = inlineProps?.numberingProperties?.numId ?? styleProps?.numberingProperties?.numId; + let numberingDefinedInline = inlineProps?.numberingProperties?.numId != null; + + const isList = numId != null && numId !== 0; if (isList) { const ilvlNum = ilvl != null ? (ilvl as number) : 0; - numberingProps = getNumberingProperties(translators, params, ilvlNum, numId as number | string, translators.pPr); - if (overrideInlineStyleId && numberingProps.styleId) { + numberingProps = getNumberingProperties("paragraphProperties", params, ilvlNum, numId); + if (numberingProps.styleId) { + // If numbering level defines a style, replace styleProps with that style styleId = numberingProps.styleId as string; - styleProps = resolveStyleChain(params, styleId, translators.pPr); - if (inlinePropsSafe) { - inlinePropsSafe.styleId = styleId; - const inlineNumProps = inlinePropsSafe.numberingProperties as Record | undefined; - if ( - (styleProps.numberingProperties as Record | undefined)?.ilvl === inlineNumProps?.ilvl && - (styleProps.numberingProperties as Record | undefined)?.numId === inlineNumProps?.numId - ) { - delete inlinePropsSafe.numberingProperties; - numberingDefinedInline = false; - } + styleProps = resolveStyleChain("paragraphProperties", params, styleId); + inlineProps.styleId = styleId; + const inlineNumProps = inlineProps.numberingProperties; + if ( + styleProps.numberingProperties?.ilvl === inlineNumProps?.ilvl && + styleProps.numberingProperties?.numId === inlineNumProps?.numId + ) { + // Numbering is already defined in style, so remove from inline props + delete inlineProps.numberingProperties; + numberingDefinedInline = false; } } } - const tableProps = tableStyleId ? resolveStyleChain(params, tableStyleId, translators.pPr) : {}; + // Table properties + const tableProps = (tableStyleId ? resolveStyleChain("paragraphProperties", params, tableStyleId) : {}) as ParagraphProperties; + // Resolve property chain - regular properties are treated differently from indentation + // Chain for regular properties const defaultsChain = orderDefaultsAndNormal(defaultProps, normalProps, isNormalDefault); - const propsChain = [...defaultsChain, tableProps, numberingProps, styleProps, inlinePropsSafe]; + const propsChain = [...defaultsChain, tableProps, numberingProps, styleProps, inlineProps]; - let indentChain: PropertyObject[]; + // Chain for indentation properties + let indentChain: ParagraphProperties[]; if (isList) { if (numberingDefinedInline) { - indentChain = [...defaultsChain, styleProps, numberingProps, inlinePropsSafe]; + // If numbering is defined inline, then numberingProps should override styleProps for indentation + indentChain = [...defaultsChain, styleProps, numberingProps, inlineProps]; } else { - styleProps = resolveStyleChain(params, styleId, translators.pPr, false); - indentChain = [...defaultsChain, numberingProps, styleProps, inlinePropsSafe]; + // Otherwise, styleProps should override numberingProps for indentation but it should not follow the based-on chain + styleProps = resolveStyleChain("paragraphProperties", params, styleId, false); + indentChain = [...defaultsChain, numberingProps, styleProps, inlineProps]; } } else { - indentChain = [...defaultsChain, numberingProps, styleProps, inlinePropsSafe]; + indentChain = [...defaultsChain, styleProps, inlineProps]; } - const finalProps = combineProperties(propsChain); + const finalProps = combineProperties(propsChain, { + specialHandling: { + tabs: (target: ParagraphProperties, source: ParagraphProperties): unknown => { + // If a higher priority source defines firstLine, remove hanging from the final result + if (target.tabStops != null && source.tabStops != null) { + return [...(target.tabStops as unknown[]), ...(source.tabStops as unknown[])]; + } + return source.tabStops; + } + } + }); const finalIndent = combineIndentProperties(indentChain); - finalProps.indent = (finalIndent as Record).indent; - - if (insideTable && !inlinePropsSafe?.spacing && !(styleProps as Record)?.spacing) { - finalProps.spacing = undefined; - } + finalProps.indent = finalIndent.indent; return finalProps; } -export function resolveStyleChain( +export function resolveStyleChain( + propertyType: 'paragraphProperties' | 'runProperties', params: OoxmlResolverParams, styleId: string | undefined, - translator: OoxmlTranslator, followBasedOnChain = true, -): Record { - let styleProps: Record = {}; - let basedOn: string | undefined = undefined; - if (styleId && styleId !== 'Normal') { - ({ properties: styleProps, basedOn } = getStyleProperties(params, styleId, translator)); - } +): T { + + if (!styleId) return {} as T; + + const styleDef = params.translatedLinkedStyles.styles[styleId]; + if (!styleDef) return {} as T; - let styleChain: Record[] = [styleProps]; + const styleProps = (styleDef[propertyType as keyof typeof styleDef] ?? {}) as T; + const basedOn = styleDef.basedOn; + + + let styleChain: T[] = [styleProps]; const seenStyles = new Set(); let nextBasedOn = basedOn; while (followBasedOnChain && nextBasedOn) { - if (seenStyles.has(basedOn as string)) { + if (seenStyles.has(nextBasedOn as string)) { break; } seenStyles.add(basedOn as string); - const result = getStyleProperties(params, nextBasedOn, translator); - const basedOnProps = result.properties; - nextBasedOn = result.basedOn; + const basedOnStyleDef = params.translatedLinkedStyles.styles[nextBasedOn]; + const basedOnProps = basedOnStyleDef?.[propertyType as keyof typeof basedOnStyleDef] as T; + if (basedOnProps && Object.keys(basedOnProps).length) { styleChain.push(basedOnProps); } - basedOn = nextBasedOn; + nextBasedOn = basedOnStyleDef?.basedOn; } styleChain = styleChain.reverse(); return combineProperties(styleChain); } -export function getDefaultProperties( - params: OoxmlResolverParams, - translator: OoxmlTranslator, -): Record { - const docx = params?.docx as Record | undefined; - const styles = docx?.['word/styles.xml'] as Record | undefined; - const rootElements = (styles as { elements?: Array> })?.elements?.[0]?.elements as - | Array> - | undefined; - if (!rootElements?.length) { - return {}; - } - const defaults = rootElements.find((el) => el.name === 'w:docDefaults'); - const xmlName = translator.xmlName; - const defaultsElements = (defaults as Record)?.elements as - | Array> - | undefined; - const elementPrDefault = defaultsElements?.find((el) => el.name === `${xmlName}Default`); - const elementPrDefaultElements = elementPrDefault?.elements as Array> | undefined; - const elementPr = elementPrDefaultElements?.find((el) => el.name === xmlName); - if (!elementPr) { - return {}; - } - - return translator.encode({ ...params, nodes: [elementPr] }) || {}; -} - -export function getStyleProperties( +export function getNumberingProperties( + propertyType: 'paragraphProperties' | 'runProperties', params: OoxmlResolverParams, - styleId: string, - translator: OoxmlTranslator, -): { properties: Record; isDefault: boolean; basedOn: string | undefined } { - const emptyResult = { properties: {}, isDefault: false, basedOn: undefined }; - if (!styleId) return emptyResult; - - const docx = params?.docx as Record | undefined; - const styles = docx?.['word/styles.xml'] as Record | undefined; - const rootElements = (styles as { elements?: Array> })?.elements?.[0]?.elements as - | Array> - | undefined; - if (!rootElements?.length) { - return emptyResult; - } + ilvl: number, + numId: number, + tries = 0, +): T { + const numbering = params.translatedNumbering; + if (!numbering) return {} as T; + const { definitions, abstracts } = numbering; + if (!definitions || !abstracts) return {} as T; - const style = rootElements.find( - (el) => el.name === 'w:style' && (el.attributes as Record)?.['w:styleId'] === styleId, - ) as Record | undefined; - const styleElements = style?.elements as Array> | undefined; - const basedOnElement = styleElements?.find((el) => el.name === 'w:basedOn'); - const basedOn = (basedOnElement?.attributes as Record | undefined)?.['w:val'] as string | undefined; - const elementPr = styleElements?.find((el) => el.name === translator.xmlName); - if (!elementPr) { - return { ...emptyResult, basedOn }; - } + const propertiesChain: T[] = []; - const result = translator.encode({ ...params, nodes: [elementPr] }) || {}; - const isDefault = (style?.attributes as Record)?.['w:default'] === '1'; + const numDefinition = definitions[String(numId)]; + if (!numDefinition) return {} as T; - return { properties: result, isDefault, basedOn }; -} + const lvlOverride = numDefinition.lvlOverrides?.[String(ilvl)]; + const overrideProps = lvlOverride?.[propertyType as keyof typeof lvlOverride] as T; -export function getNumberingProperties( - translators: OoxmlTranslators, - params: OoxmlResolverParams, - ilvl: number, - numId: number | string, - translator: OoxmlTranslator, - tries = 0, -): Record { - const numbering = params?.numbering as OoxmlNumberingContext | null | undefined; - if (!numbering) return {}; - const { definitions, abstracts } = numbering; - if (!definitions || !abstracts) return {}; - - const propertiesChain: Record[] = []; - - const numDefinition = definitions[numId as keyof typeof definitions] as Record | undefined; - if (!numDefinition) return {}; - - const numDefElements = numDefinition.elements as Array> | undefined; - const lvlOverride = numDefElements?.find( - (element) => - element.name === 'w:lvlOverride' && - (element.attributes as Record | undefined)?.['w:ilvl'] == ilvl, - ); - const lvlOverrideElements = lvlOverride?.elements as Array> | undefined; - const overridePr = lvlOverrideElements?.find((el) => el.name === translator.xmlName); - if (overridePr) { - const overrideProps = translator.encode({ ...params, nodes: [overridePr] }) || {}; + if (overrideProps) { propertiesChain.push(overrideProps); } - const abstractNumIdElement = numDefElements?.find((item) => item.name === 'w:abstractNumId'); - const abstractNumId = (abstractNumIdElement?.attributes as Record | undefined)?.['w:val'] as - | string - | undefined; + const abstractNumId = numDefinition.abstractNumId!; - const listDefinitionForThisNumId = abstracts[abstractNumId as keyof typeof abstracts] as - | Record - | undefined; - if (!listDefinitionForThisNumId) return {}; + const listDefinitionForThisNumId = abstracts[String(abstractNumId)]; + if (!listDefinitionForThisNumId) return {} as T; - const listDefElements = listDefinitionForThisNumId.elements as Array> | undefined; - const numStyleLink = listDefElements?.find((item) => item.name === 'w:numStyleLink'); - const styleId = (numStyleLink?.attributes as Record | undefined)?.['w:val'] as string | undefined; + const numStyleLinkId = listDefinitionForThisNumId.styleLink; - if (styleId && tries < 1) { - const { properties: styleProps } = getStyleProperties(params, styleId, translators.pPr); - const numIdFromStyle = (styleProps?.numberingProperties as Record | undefined)?.numId; + if (numStyleLinkId && tries < 1) { + const styleDef = params.translatedLinkedStyles.styles[numStyleLinkId]; + const styleProps = styleDef?.paragraphProperties; + const numIdFromStyle = styleProps?.numberingProperties?.numId; if (numIdFromStyle) { return getNumberingProperties( - translators, + propertyType, params, ilvl, - numIdFromStyle as number | string, - translator, + numIdFromStyle, tries + 1, ); } } - const levelDefinition = listDefElements?.find( - (element) => - element.name === 'w:lvl' && (element.attributes as Record | undefined)?.['w:ilvl'] == ilvl, - ); - if (!levelDefinition) return {}; - - const levelDefElements = levelDefinition.elements as Array> | undefined; - const abstractElementPr = levelDefElements?.find((el) => el.name === translator.xmlName); - if (!abstractElementPr) return {}; - const abstractProps = translator.encode({ ...params, nodes: [abstractElementPr] }) || {}; - - const pStyleElement = levelDefElements?.find((el) => el.name === 'w:pStyle'); - if (pStyleElement) { - const pStyleId = (pStyleElement.attributes as Record | undefined)?.['w:val'] as string | undefined; - (abstractProps as Record).styleId = pStyleId; + const levelDefinition = listDefinitionForThisNumId.levels?.[String(ilvl)]; + if (!levelDefinition) return {} as T; + + const abstractProps = levelDefinition[propertyType as keyof typeof levelDefinition] as T; + + if (levelDefinition?.styleId) { + abstractProps.styleId = levelDefinition?.styleId; } - propertiesChain.push(abstractProps as Record); + propertiesChain.push(abstractProps); propertiesChain.reverse(); return combineProperties(propertiesChain); @@ -404,8 +293,11 @@ export function resolveDocxFontFamily( ): string | null { if (!attributes || typeof attributes !== 'object') return null; - const ascii = (attributes['w:ascii'] ?? attributes['ascii']) as string | undefined; - const themeAscii = (attributes['w:asciiTheme'] ?? attributes['asciiTheme']) as string | undefined; + const ascii = (attributes['w:ascii'] ?? attributes['ascii'] ?? attributes['eastAsia']) as string | undefined; + let themeAscii = (attributes['w:asciiTheme'] ?? attributes['asciiTheme']) as string | undefined; + if (!ascii && attributes.hint === 'default') { + themeAscii = 'major'; + } let resolved = ascii; if (docx && themeAscii) { diff --git a/packages/super-editor/src/core/super-converter/styles.js b/packages/super-editor/src/core/super-converter/styles.js index eb43c03b2..88f949c18 100644 --- a/packages/super-editor/src/core/super-converter/styles.js +++ b/packages/super-editor/src/core/super-converter/styles.js @@ -8,15 +8,13 @@ import { eighthPointsToPixels, linesToTwips, } from '@converter/helpers.js'; -import { translator as w_pPrTranslator } from '@converter/v3/handlers/w/pPr'; -import { translator as w_rPrTranslator } from '@converter/v3/handlers/w/rpr'; import { isValidHexColor, getHexColorFromDocxSystem } from '@converter/helpers'; import { SuperConverter } from '@converter/SuperConverter.js'; import { getUnderlineCssString } from '@extensions/linked-styles/underline-css.js'; -import { createOoxmlResolver, resolveDocxFontFamily } from '@superdoc/style-engine/ooxml'; -import { combineProperties as _combineProperties } from '@superdoc/style-engine'; +import { resolveDocxFontFamily, resolveRunProperties, resolveParagraphProperties, combineRunProperties } from '@superdoc/style-engine/ooxml'; + +export { resolveRunProperties, resolveParagraphProperties, combineRunProperties }; -const ooxmlResolver = createOoxmlResolver({ pPr: w_pPrTranslator, rPr: w_rPrTranslator }); /** * Font family converter from SuperConverter (lazy getter to avoid circular import) @@ -35,88 +33,6 @@ const getToCssFontFamily = () => { */ const SUBSCRIPT_SUPERSCRIPT_SCALE = 0.65; -/** - * Gets the resolved run properties by merging defaults, styles, and inline properties. - * - * FontSize Fallback Behavior: - * - Validates that the resolved fontSize is a valid positive number - * - If fontSize is null, 0, negative, or NaN, applies fallback cascade: - * 1. Document defaults (defaultProps.fontSize) - * 2. Normal style (normalProps.fontSize) - * 3. Baseline constant (DEFAULT_FONT_SIZE_HALF_POINTS = 20 half-points = 10pt) - * - Each fallback source is validated before use (must be positive finite number) - * - Ensures all text has a valid font size, preventing rendering issues - * - * @param {import('@translator').SCEncoderConfig} params - Converter context containing docx data. - * @param {Object} inlineRpr - The inline run properties. - * @param {Object} resolvedPpr - The resolved paragraph properties. - * @param {boolean} [isListNumber=false] - Whether this run is a list number marker. When true, - * applies special handling for numbering properties and - * removes inline underlines. - * @param {boolean} [numberingDefinedInline=false] - Whether numbering is defined inline rather than - * in the style definition. When false, inline rPr - * is ignored for list numbers. - * @returns {Object} The resolved run properties. - */ -export const resolveRunProperties = ( - params, - inlineRpr, - resolvedPpr, - isListNumber = false, - numberingDefinedInline = false, -) => ooxmlResolver.resolveRunProperties(params, inlineRpr, resolvedPpr, isListNumber, numberingDefinedInline); - -/** - * Gets the resolved paragraph properties by merging defaults, styles, and inline properties. - * @param {import('@translator').SCEncoderConfig} params - * @param {Object} inlineProps - The inline paragraph properties. - * @param {boolean} [insideTable=false] - Whether the paragraph is inside a table. - * @param {boolean} [overrideInlineStyleId=false] - Whether to override the inline style ID with the one from numbering. - * @param {string | null} [tableStyleId=null] - styleId for the current table, if any. - * @returns {Object} The resolved paragraph properties. - */ -export function resolveParagraphProperties( - params, - inlineProps, - insideTable = false, - overrideInlineStyleId = false, - tableStyleId = null, -) { - return ooxmlResolver.resolveParagraphProperties( - params, - inlineProps, - insideTable, - overrideInlineStyleId, - tableStyleId, - ); -} - -export const getDefaultProperties = ooxmlResolver.getDefaultProperties; -export const getStyleProperties = ooxmlResolver.getStyleProperties; -export const getNumberingProperties = ooxmlResolver.getNumberingProperties; - -/** - * Performs a deep merge on an ordered list of property objects. - * Delegates to the single source of truth in @superdoc/style-engine. - * - * @param {Array} propertiesArray - Ordered list of property objects to combine. - * @param {Array} [fullOverrideProps=[]] - Keys that should overwrite instead of merge. - * @param {Record} [specialHandling={}] - Optional per-key merge overrides. - * @returns {Object} Combined property object. - */ -export const combineProperties = (propertiesArray, fullOverrideProps = [], specialHandling = {}) => { - return _combineProperties(propertiesArray, { fullOverrideProps, specialHandling }); -}; - -/** - * Combines run property objects while fully overriding certain keys. - * @param {Array} propertiesArray - Ordered list of run property objects. - * @returns {Object} Combined run property object. - */ -export const combineRunProperties = (propertiesArray) => { - return combineProperties(propertiesArray, ['fontFamily', 'color']); -}; - /** * Encodes run property objects into mark definitions for the editor schema. * @param {Object} runProperties - Run properties extracted from DOCX. diff --git a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js index 0a5b1161c..faf128c46 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js @@ -144,12 +144,18 @@ export const createDocumentJson = (docx, converter, editor) => { const numbering = getNumberingDefinitions(docx); const comments = importCommentData({ docx, nodeListHandler, converter, editor }); const footnotes = importFootnoteData({ docx, nodeListHandler, converter, editor, numbering }); + + const translatedLinkedStyles = translateStyleDefinitions(docx); + const translatedNumbering = translateNumberingDefinitions(docx); + let parsedContent = nodeListHandler.handler({ nodes: content, nodeListHandler, docx, converter, numbering, + translatedNumbering, + translatedLinkedStyles, editor, inlineDocumentFonts, lists, @@ -176,7 +182,7 @@ export const createDocumentJson = (docx, converter, editor) => { return { pmDoc: result, savedTagsToRestore: node, - pageStyles: getDocumentStyles(node, docx, converter, editor, numbering), + pageStyles: getDocumentStyles(node, docx, converter, editor, numbering, translatedNumbering, translatedLinkedStyles), comments, footnotes, inlineDocumentFonts, @@ -266,6 +272,8 @@ const createNodeListHandler = (nodeHandlers) => { insideTrackChange, converter, numbering, + translatedNumbering, + translatedLinkedStyles, editor, filename, parentStyleId, @@ -299,6 +307,8 @@ const createNodeListHandler = (nodeHandlers) => { insideTrackChange, converter, numbering, + translatedNumbering, + translatedLinkedStyles, editor, filename, parentStyleId, @@ -419,7 +429,7 @@ function importFootnotePropertiesFromSettings(docx, converter) { * @param {Editor} editor instance. * @returns {Object} The document styles object */ -function getDocumentStyles(node, docx, converter, editor, numbering) { +function getDocumentStyles(node, docx, converter, editor, numbering, translatedNumbering, translatedLinkedStyles) { const sectPr = node.elements?.find((n) => n.name === 'w:sectPr'); const styles = {}; @@ -468,7 +478,7 @@ function getDocumentStyles(node, docx, converter, editor, numbering) { }); // Import headers and footers. Stores them in converter.headers and converter.footers - importHeadersFooters(docx, converter, editor, numbering); + importHeadersFooters(docx, converter, editor, numbering, translatedNumbering, translatedLinkedStyles); styles.alternateHeaders = isAlternatingHeadersOddEven(docx); return styles; } @@ -623,12 +633,11 @@ export function addDefaultStylesIfMissing(styles) { * @param {Object} converter The converter instance * @param {Editor} mainEditor The editor instance */ -const importHeadersFooters = (docx, converter, mainEditor) => { +const importHeadersFooters = (docx, converter, mainEditor, numbering, translatedNumbering, translatedLinkedStyles) => { const rels = docx['word/_rels/document.xml.rels']; const relationships = rels?.elements.find((el) => el.name === 'Relationships'); const { elements } = relationships || { elements: [] }; - const numbering = getNumberingDefinitions(docx); const headerType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header'; const footerType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer'; const headers = elements.filter((el) => el.attributes['Type'] === headerType); @@ -662,6 +671,8 @@ const importHeadersFooters = (docx, converter, mainEditor) => { docx, converter, numbering, + translatedNumbering, + translatedLinkedStyles, editor, filename: currentFileName, path: [], diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js index 654761e29..9eab8f3ae 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js @@ -307,7 +307,7 @@ export function encodePropertiesByKey(xmlName, sdName, translator, params, node, const items = elements.map((el) => translator.encode({ ...params, nodes: [el] })).filter(Boolean); if (items.length > 0) { result[sdName] = items.reduce((acc, item) => { - if (item[keyAttr]) { + if (item[keyAttr] != null) { acc[item[keyAttr]] = item; } return acc; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js index 24a5d79f6..cce4b368c 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js @@ -38,13 +38,10 @@ export const handleParagraphNode = (params) => { } // Resolve paragraph properties according to styles hierarchy - const insideTable = (params.path || []).some((ancestor) => ancestor.name === 'w:tc'); const tableStyleId = getTableStyleId(params.path || []); const resolvedParagraphProperties = resolveParagraphProperties( params, inlineParagraphProperties, - insideTable, - false, tableStyleId, ); diff --git a/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.js b/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.js index be759f1e0..be0368e56 100644 --- a/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.js +++ b/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.js @@ -392,7 +392,7 @@ export class ParagraphNodeView { // START: modify after CSS styles const paragraphProperties = getResolvedParagraphProperties(this.node); const runProperties = resolveRunProperties( - { docx: this.editor.converter.convertedXml, numbering: this.editor.converter.numbering }, + { translatedNumbering: this.editor.converter.translatedNumbering, translatedLinkedStyles: this.editor.converter.translatedLinkedStyles }, paragraphProperties.runProperties || {}, paragraphProperties, true, diff --git a/packages/super-editor/src/extensions/paragraph/resolvedPropertiesCache.js b/packages/super-editor/src/extensions/paragraph/resolvedPropertiesCache.js index d0c74c097..cd80affb7 100644 --- a/packages/super-editor/src/extensions/paragraph/resolvedPropertiesCache.js +++ b/packages/super-editor/src/extensions/paragraph/resolvedPropertiesCache.js @@ -1,4 +1,4 @@ -import { resolveParagraphProperties } from '@converter/styles.js'; +import { resolveParagraphProperties } from '@superdoc/style-engine/ooxml'; import { findParentNodeClosestToPos } from '@helpers/index.js'; const resolvedParagraphPropertiesCache = new WeakMap(); @@ -18,10 +18,8 @@ export function calculateResolvedParagraphProperties(editor, node, $pos) { const tableNode = findParentNodeClosestToPos($pos, (node) => node.type.name === 'table'); const tableStyleId = tableNode?.node.attrs.tableStyleId || null; const paragraphProperties = resolveParagraphProperties( - { docx: editor.converter.convertedXml, numbering: editor.converter.numbering }, + { translatedNumbering: editor.converter.translatedNumbering, translatedLinkedStyles: editor.converter.translatedLinkedStyles }, node.attrs.paragraphProperties || {}, - Boolean(tableNode), - false, tableStyleId, ); resolvedParagraphPropertiesCache.set(node, paragraphProperties); diff --git a/packages/super-editor/src/extensions/run/calculateInlineRunPropertiesPlugin.js b/packages/super-editor/src/extensions/run/calculateInlineRunPropertiesPlugin.js index 9d5b31ee7..04b7c898a 100644 --- a/packages/super-editor/src/extensions/run/calculateInlineRunPropertiesPlugin.js +++ b/packages/super-editor/src/extensions/run/calculateInlineRunPropertiesPlugin.js @@ -71,7 +71,7 @@ export const calculateInlineRunPropertiesPlugin = (editor) => getResolvedParagraphProperties(paragraphNode) || calculateResolvedParagraphProperties(editor, paragraphNode, $pos); const runPropertiesFromStyles = resolveRunProperties( - { docx: editor.converter?.convertedXml ?? {}, numbering: editor.converter?.numbering ?? {} }, + { translatedNumbering: editor.converter?.translatedNumbering ?? {}, translatedLinkedStyles: editor.converter?.translatedLinkedStyles ?? {} }, {}, paragraphProperties, false, diff --git a/packages/super-editor/src/extensions/run/wrapTextInRunsPlugin.js b/packages/super-editor/src/extensions/run/wrapTextInRunsPlugin.js index 4b2d478ea..508ba96d5 100644 --- a/packages/super-editor/src/extensions/run/wrapTextInRunsPlugin.js +++ b/packages/super-editor/src/extensions/run/wrapTextInRunsPlugin.js @@ -107,7 +107,7 @@ const resolveRunPropertiesFromParagraphStyle = (paragraphNode, editor) => { if (!styleId) return {}; try { - const params = { docx: editor.converter.convertedXml, numbering: editor.converter.numbering }; + const params = { translatedNumbering: editor.converter.translatedNumbering, translatedLinkedStyles: editor.converter.translatedLinkedStyles }; const resolvedPpr = { styleId }; const runProps = resolveRunProperties(params, {}, resolvedPpr, false, false); From d6e065719c6054bfb18cc60c52ac8b9a45a6a5c0 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 16 Jan 2026 11:06:53 -0300 Subject: [PATCH 58/85] fix: typing fixes --- packages/layout-engine/contracts/src/index.ts | 4 +- .../layout-engine/layout-bridge/src/index.ts | 6 +- .../layout-bridge/src/remeasure.ts | 10 +- .../layout-engine/measuring/dom/src/index.ts | 4 +- .../painters/dom/src/renderer.ts | 44 ++++--- .../pm-adapter/src/attributes/paragraph.ts | 116 ++++++++++-------- .../src/attributes/spacing-indent.ts | 4 +- .../pm-adapter/src/converters/table.ts | 4 +- .../layout-engine/style-engine/src/cascade.ts | 6 +- .../style-engine/src/ooxml/index.ts | 58 ++++----- .../header-footer/HeaderFooterRegistry.ts | 27 ++-- packages/word-layout/src/types.ts | 14 +-- 12 files changed, 145 insertions(+), 152 deletions(-) diff --git a/packages/layout-engine/contracts/src/index.ts b/packages/layout-engine/contracts/src/index.ts index ec9b447f0..ac89f3f3e 100644 --- a/packages/layout-engine/contracts/src/index.ts +++ b/packages/layout-engine/contracts/src/index.ts @@ -1170,7 +1170,7 @@ export type WordLayoutConfig = { export type ParagraphAttrs = { styleId?: string; - alignment?: 'left' | 'center' | 'right' | 'justify' | 'both'; + alignment?: 'left' | 'center' | 'right' | 'justify'; spacing?: ParagraphSpacing; /** * Indicates which spacing properties were explicitly set on the paragraph. @@ -1197,7 +1197,7 @@ export type ParagraphAttrs = { */ dropCapDescriptor?: DropCapDescriptor; frame?: ParagraphFrame; - numberingProperties?: Record; + numberingProperties?: { ilvl?: number; numId?: number } | null; borders?: ParagraphBorders; shading?: ParagraphShading; tabs?: TabStop[]; diff --git a/packages/layout-engine/layout-bridge/src/index.ts b/packages/layout-engine/layout-bridge/src/index.ts index 8e969926c..2282cc2cc 100644 --- a/packages/layout-engine/layout-bridge/src/index.ts +++ b/packages/layout-engine/layout-bridge/src/index.ts @@ -980,7 +980,7 @@ export function clickToPosition( const markerWidth = fragment.markerWidth ?? measure.marker?.markerWidth ?? 0; const isListItem = markerWidth > 0; const paraAlignment = block.attrs?.alignment; - const isJustified = paraAlignment === 'justify' || paraAlignment === 'both'; + const isJustified = paraAlignment === 'justify'; const alignmentOverride = isListItem && !isJustified ? 'left' : undefined; const pos = mapPointToPm(block, line, pageRelativePoint.x - fragment.x, isRTL, availableWidth, alignmentOverride); @@ -1089,7 +1089,7 @@ export function clickToPosition( const cellMarkerWidth = cellMeasure.marker?.markerWidth ?? 0; const isListItem = cellMarkerWidth > 0; const cellAlignment = cellBlock.attrs?.alignment; - const isJustified = cellAlignment === 'justify' || cellAlignment === 'both'; + const isJustified = cellAlignment === 'justify'; const alignmentOverride = isListItem && !isJustified ? 'left' : undefined; const pos = mapPointToPm(cellBlock, line, localX, isRTL, availableWidth, alignmentOverride); @@ -1412,7 +1412,7 @@ export function selectionToRects( // List items use textAlign: 'left' in the DOM for non-justify alignments. // For justify, we don't override so justify selection rectangles are calculated correctly. const blockAlignment = block.attrs?.alignment; - const isJustified = blockAlignment === 'justify' || blockAlignment === 'both'; + const isJustified = blockAlignment === 'justify'; const alignmentOverride = isListItemFlag && !isJustified ? 'left' : undefined; const startX = mapPmToX(block, line, charOffsetFrom, fragment.width, alignmentOverride); const endX = mapPmToX(block, line, charOffsetTo, fragment.width, alignmentOverride); diff --git a/packages/layout-engine/layout-bridge/src/remeasure.ts b/packages/layout-engine/layout-bridge/src/remeasure.ts index ead21a41c..8f331a9df 100644 --- a/packages/layout-engine/layout-bridge/src/remeasure.ts +++ b/packages/layout-engine/layout-bridge/src/remeasure.ts @@ -1079,13 +1079,7 @@ export function remeasureParagraph( // Both values represent the same concept: where the first-line text begins after the marker/tab. // IMPORTANT: Priority must match the painter (renderer.ts) which prefers marker.textStartX // because it's consistent with marker.markerX positioning. Mismatched priority causes justify overflow. - const markerTextStartX = wordLayout?.marker?.textStartX; - const textStartPx = - typeof markerTextStartX === 'number' && Number.isFinite(markerTextStartX) - ? markerTextStartX - : typeof wordLayout?.textStartPx === 'number' && Number.isFinite(wordLayout.textStartPx) - ? wordLayout.textStartPx - : undefined; + const textStartPx = wordLayout?.textStartPx; // Track measured marker text width for returning in measure.marker let measuredMarkerTextWidth: number | undefined; const resolvedTextStartPx = resolveListTextStartPx( @@ -1319,7 +1313,7 @@ export function remeasureParagraph( const marker = wordLayout?.marker; const markerInfo = marker ? { - markerWidth: marker.markerBoxWidthPx ?? indentHanging ?? 0, + markerWidth: indentHanging ?? 0, markerTextWidth: measuredMarkerTextWidth ?? 0, indentLeft, gutterWidth: marker.gutterWidthPx, diff --git a/packages/layout-engine/measuring/dom/src/index.ts b/packages/layout-engine/measuring/dom/src/index.ts index a954b2b43..582c2a994 100644 --- a/packages/layout-engine/measuring/dom/src/index.ts +++ b/packages/layout-engine/measuring/dom/src/index.ts @@ -2299,7 +2299,7 @@ async function measureParagraphBlock(block: ParagraphBlock, maxWidth: number): P : LIST_MARKER_GAP; // Marker box should match Word's box width when provided; otherwise fall back to glyph + gap. - const markerBoxWidth = Math.max(wordLayout.marker.markerBoxWidthPx ?? 0, glyphWidth + LIST_MARKER_GAP); + const markerBoxWidth = Math.max(0, glyphWidth + LIST_MARKER_GAP); markerInfo = { markerWidth: markerBoxWidth, @@ -2971,7 +2971,7 @@ async function measureListBlock(block: ListBlock, constraints: MeasureConstraint }; const { font: markerFont } = buildFontString(markerFontRun); markerTextWidth = marker.markerText ? measureText(marker.markerText, markerFont, ctx) : 0; - markerWidth = marker.markerBoxWidthPx; + markerWidth = 0; indentLeft = (wordLayout as WordParagraphLayoutOutput).indentLeftPx ?? 0; } else { // Fallback: legacy behavior for backwards compatibility diff --git a/packages/layout-engine/painters/dom/src/renderer.ts b/packages/layout-engine/painters/dom/src/renderer.ts index eb403dc60..3efcf57f9 100644 --- a/packages/layout-engine/painters/dom/src/renderer.ts +++ b/packages/layout-engine/painters/dom/src/renderer.ts @@ -2017,7 +2017,6 @@ export class DomPainter { const lastRun = block.runs.length > 0 ? block.runs[block.runs.length - 1] : null; const paragraphEndsWithLineBreak = lastRun?.kind === 'lineBreak'; - // Pre-calculate actual marker+tab inline width for list first lines. // The measurer uses textStartPx to calculate line.maxWidth, but the painter renders // marker+tab as inline elements that may consume MORE space than textStartPx indicates. @@ -2044,7 +2043,14 @@ export class DomPainter { // Calculate tab width using same logic as marker rendering section const suffix = wordLayout.marker.suffix ?? 'tab'; if (suffix === 'tab') { - listTabWidth = computeTabWidth(currentPos, markerJustification, wordLayout.tabsPx, paraIndent?.hanging, paraIndent?.firstLine, paraIndentLeft); + listTabWidth = computeTabWidth( + currentPos, + markerJustification, + wordLayout.tabsPx, + paraIndent?.hanging, + paraIndent?.firstLine, + paraIndentLeft, + ); } else if (suffix === 'space') { listTabWidth = 4; } @@ -2095,7 +2101,11 @@ export class DomPainter { // List first lines handle indentation via marker positioning and tab stops, // not CSS padding/text-indent. This matches Word's rendering model. const isListFirstLine = - index === 0 && !fragment.continuesFromPrev && fragment.markerWidth && fragment.markerTextWidth && wordLayout?.marker; + index === 0 && + !fragment.continuesFromPrev && + fragment.markerWidth && + fragment.markerTextWidth && + wordLayout?.marker; /** * Determines if this line contains segments with explicit X positioning (typically from tabs). @@ -2188,7 +2198,6 @@ export class DomPainter { } if (isListFirstLine) { - const marker = wordLayout.marker!; lineEl.style.paddingLeft = `${paraIndentLeft + (paraIndent?.firstLine ?? 0) - (paraIndent?.hanging ?? 0)}px`; // HERE CONTROLS WHERE TAB STARTS - I think this will vary with justification @@ -2214,13 +2223,12 @@ export class DomPainter { markerContainer.style.left = `${markerStartPos}px`; // HERE CONTROLS MARKER POSITION - I think this will vary with justification } else if (markerJustification === 'center') { markerContainer.style.position = 'absolute'; - markerContainer.style.left = `${markerStartPos - fragment.markerTextWidth!/2}px`; // HERE CONTROLS MARKER POSITION - I think this will vary with justification - lineEl.style.paddingLeft = parseFloat(lineEl.style.paddingLeft) + fragment.markerTextWidth!/2 + 'px'; + markerContainer.style.left = `${markerStartPos - fragment.markerTextWidth! / 2}px`; // HERE CONTROLS MARKER POSITION - I think this will vary with justification + lineEl.style.paddingLeft = parseFloat(lineEl.style.paddingLeft) + fragment.markerTextWidth! / 2 + 'px'; } // Apply marker run styling with font fallback chain - markerEl.style.fontFamily = - toCssFontFamily(marker.run.fontFamily) ?? marker.run.fontFamily; + markerEl.style.fontFamily = toCssFontFamily(marker.run.fontFamily) ?? marker.run.fontFamily; markerEl.style.fontSize = `${marker.run.fontSize}px`; markerEl.style.fontWeight = marker.run.bold ? 'bold' : ''; markerEl.style.fontStyle = marker.run.italic ? 'italic' : ''; @@ -5765,17 +5773,14 @@ export const applyRunDataAttributes = (element: HTMLElement, dataAttrs?: Record< }); }; -const applyParagraphBlockStyles = ( - element: HTMLElement, - attrs?: ParagraphAttrs, -): void => { +const applyParagraphBlockStyles = (element: HTMLElement, attrs?: ParagraphAttrs): void => { if (!attrs) return; if (attrs.styleId) { element.setAttribute('styleid', attrs.styleId); } if (attrs.alignment) { // Avoid native CSS justify: DomPainter applies justify via per-line word-spacing. - element.style.textAlign = attrs.alignment === 'justify' || attrs.alignment === 'both' ? 'left' : attrs.alignment; + element.style.textAlign = attrs.alignment === 'justify' ? 'left' : attrs.alignment; } if ((attrs as Record).dropCap) { element.classList.add('sd-editor-dropcap'); @@ -6093,7 +6098,14 @@ const resolveRunText = (run: Run, context: FragmentRenderContext): string => { return run.text ?? ''; }; -const computeTabWidth = (currentPos: number, justification: string, tabs: number[] | undefined, hangingIndent: number | undefined, firstLineIndent: number | undefined, leftIndent: number): number => { +const computeTabWidth = ( + currentPos: number, + justification: string, + tabs: number[] | undefined, + hangingIndent: number | undefined, + firstLineIndent: number | undefined, + leftIndent: number, +): number => { const nextDefaultTabStop = currentPos + DEFAULT_TAB_INTERVAL_PX - (currentPos % DEFAULT_TAB_INTERVAL_PX); let tabWidth: number; if ((justification ?? 'left') === 'left') { @@ -6135,7 +6147,7 @@ const computeTabWidth = (currentPos: number, justification: string, tabs: number tabWidth = hangingIndent ?? 0; } } else { - tabWidth = nextDefaultTabStop - currentPos; + tabWidth = nextDefaultTabStop - currentPos; } return tabWidth; -} +}; diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts index 62589bdf2..f7bd0007e 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts @@ -14,26 +14,26 @@ import type { ParagraphFrame, } from '@superdoc/contracts'; import type { PMNode } from '../types.js'; -import type { - ResolvedRunProperties, -} from '@superdoc/word-layout'; +import type { ResolvedRunProperties } from '@superdoc/word-layout'; import { computeWordParagraphLayout } from '@superdoc/word-layout'; import { pickNumber, twipsToPx, isFiniteNumber, ptToPx } from '../utilities.js'; -import { - normalizeAlignment, - normalizeParagraphSpacing, -} from './spacing-indent.js'; +import { normalizeAlignment, normalizeParagraphSpacing } from './spacing-indent.js'; import { normalizeOoxmlTabs } from './tabs.js'; import { normalizeParagraphBorders, normalizeParagraphShading } from './borders.js'; import type { ConverterContext } from '../converter-context.js'; -import { resolveParagraphProperties, resolveRunProperties, resolveDocxFontFamily, type ParagraphFrameProperties, type ParagraphProperties, type RunProperties } from '@superdoc/style-engine/ooxml'; - +import { + resolveParagraphProperties, + resolveRunProperties, + resolveDocxFontFamily, + type ParagraphFrameProperties, + type ParagraphProperties, + type RunProperties, +} from '@superdoc/style-engine/ooxml'; const DEFAULT_DECIMAL_SEPARATOR = '.'; const DEFAULT_TAB_INTERVAL_TWIPS = 720; // 0.5 inch - const normalizeColor = (value?: unknown): string | undefined => { if (typeof value !== 'string') return undefined; const trimmed = value.trim(); @@ -42,7 +42,6 @@ const normalizeColor = (value?: unknown): string | undefined => { return `#${upper.toUpperCase()}`; }; - export const deepClone = (obj: T): T => { if (obj === null || typeof obj !== 'object') { return obj; @@ -59,7 +58,6 @@ export const deepClone = (obj: T): T => { return clone as T; }; - /** * Convert indent from twips to pixels. */ @@ -84,7 +82,6 @@ const normalizeIndentTwipsToPx = (indent?: ParagraphIndent | null): ParagraphInd return Object.keys(result).length > 0 ? result : undefined; }; - export const normalizeFramePr = (value: ParagraphFrameProperties | undefined): ParagraphFrame | undefined => { if (!value) return undefined; @@ -110,10 +107,14 @@ export const normalizeFramePr = (value: ParagraphFrameProperties | undefined): P if (value.vAnchor) { frame.vAnchor = value.vAnchor; } - return Object.keys(frame).length > 0 ? frame as ParagraphFrame : undefined; -} + return Object.keys(frame).length > 0 ? (frame as ParagraphFrame) : undefined; +}; -export const normalizeDropCap = (framePr: ParagraphFrameProperties | undefined, para: PMNode, converterContext?: ConverterContext): DropCapDescriptor | undefined => { +export const normalizeDropCap = ( + framePr: ParagraphFrameProperties | undefined, + para: PMNode, + converterContext?: ConverterContext, +): DropCapDescriptor | undefined => { if (!framePr) return undefined; // Keep the legacy dropCap flag for backward compatibility @@ -135,13 +136,16 @@ export const normalizeDropCap = (framePr: ParagraphFrameProperties | undefined, // Map wrap value to the expected types if (framePr.wrap) { - descriptor.wrap = (framePr.wrap === 'auto' ? undefined : framePr.wrap) as 'around' | 'notBeside' | 'none' | 'tight'; - + descriptor.wrap = (framePr.wrap === 'auto' ? undefined : framePr.wrap) as + | 'around' + | 'notBeside' + | 'none' + | 'tight'; } return descriptor; } -} +}; /** * Default drop cap font size in pixels. @@ -174,7 +178,9 @@ const extractDropCapRunFromParagraph = (para: PMNode, converterContext?: Convert if (!firstRun || !Array.isArray(firstRun.content)) { return null; } - const textNode = firstRun.content.find((node) => node?.type === 'text' && typeof node.text === 'string' && node.text.length > 0); + const textNode = firstRun.content.find( + (node) => node?.type === 'text' && typeof node.text === 'string' && node.text.length > 0, + ); if (!textNode || !textNode.text) { return null; } @@ -188,8 +194,12 @@ const extractDropCapRunFromParagraph = (para: PMNode, converterContext?: Convert resolvedRunProperties = runProperties as RunProperties; } - const runAttrs = computeRunAttrs(resolvedRunProperties, converterContext, DEFAULT_DROP_CAP_FONT_SIZE_PX, DEFAULT_DROP_CAP_FONT_FAMILY); - + const runAttrs = computeRunAttrs( + resolvedRunProperties, + converterContext, + DEFAULT_DROP_CAP_FONT_SIZE_PX, + DEFAULT_DROP_CAP_FONT_FAMILY, + ); // Build the drop cap run const dropCapRun: DropCapRun = { @@ -212,7 +222,7 @@ const extractDropCapRunFromParagraph = (para: PMNode, converterContext?: Convert export const computeParagraphAttrs = ( para: PMNode, converterContext?: ConverterContext, -): { paragraphAttrs: ParagraphAttrs, resolvedParagraphProperties: ParagraphProperties } => { +): { paragraphAttrs: ParagraphAttrs; resolvedParagraphProperties: ParagraphProperties } => { const attrs = para.attrs ?? {}; const paragraphProperties = (attrs.paragraphProperties ?? {}) as ParagraphProperties; let resolvedParagraphProperties; @@ -233,26 +243,32 @@ export const computeParagraphAttrs = ( const normalizedFramePr = normalizeFramePr(resolvedParagraphProperties.framePr); const floatAlignment = normalizedFramePr?.xAlign; const dropCapDescriptor = normalizeDropCap(resolvedParagraphProperties.framePr, para, converterContext); - const normalizedListRendering = attrs.listRendering; + const normalizedListRendering = attrs.listRendering as { + markerText: string; + justification: 'left' | 'center' | 'right'; + path: number[]; + numberingType: string; + suffix: 'tab' | 'space' | 'nothing'; + }; const paragraphAttrs: ParagraphAttrs = { - styleId: resolvedParagraphProperties.styleId, - alignment: normalizedAlignment, - spacing: normalizedSpacing, - contextualSpacing: resolvedParagraphProperties.contextualSpacing, - indent: normalizedIndent, - dropCapDescriptor: dropCapDescriptor, - frame: normalizedFramePr, - numberingProperties: resolvedParagraphProperties.numberingProperties as Record, - borders: normalizedBorders, - shading: normalizedShading, - tabs: normalizedTabStops, - decimalSeparator: paragraphDecimalSeparator, - tabIntervalTwips, - keepNext: resolvedParagraphProperties.keepNext, - keepLines: resolvedParagraphProperties.keepLines, - floatAlignment: floatAlignment, - pageBreakBefore: resolvedParagraphProperties.pageBreakBefore, + styleId: resolvedParagraphProperties.styleId, + alignment: normalizedAlignment, + spacing: normalizedSpacing, + contextualSpacing: resolvedParagraphProperties.contextualSpacing, + indent: normalizedIndent, + dropCapDescriptor: dropCapDescriptor, + frame: normalizedFramePr, + numberingProperties: resolvedParagraphProperties.numberingProperties, + borders: normalizedBorders, + shading: normalizedShading, + tabs: normalizedTabStops, + decimalSeparator: paragraphDecimalSeparator, + tabIntervalTwips, + keepNext: resolvedParagraphProperties.keepNext, + keepLines: resolvedParagraphProperties.keepLines, + floatAlignment: floatAlignment, + pageBreakBefore: resolvedParagraphProperties.pageBreakBefore, }; if (resolvedParagraphProperties.numberingProperties && normalizedListRendering) { @@ -274,21 +290,26 @@ export const computeParagraphAttrs = ( }; export const computeRunAttrs = ( - runProps: RunProperties, converterContext?: ConverterContext, defaultFontSizePx = 12, defaultFontFamily = 'Times New Roman', + runProps: RunProperties, + converterContext?: ConverterContext, + defaultFontSizePx = 12, + defaultFontFamily = 'Times New Roman', ): ResolvedRunProperties => { let fontFamily; if (converterContext) { - fontFamily = resolveDocxFontFamily(runProps.fontFamily as Record, converterContext.docx) || defaultFontFamily; + fontFamily = + resolveDocxFontFamily(runProps.fontFamily as Record, converterContext.docx) || defaultFontFamily; } else { - fontFamily = runProps.fontFamily?.ascii || runProps.fontFamily?.hAnsi || runProps.fontFamily?.eastAsia || defaultFontFamily; + fontFamily = + runProps.fontFamily?.ascii || runProps.fontFamily?.hAnsi || runProps.fontFamily?.eastAsia || defaultFontFamily; } return { fontFamily: toCssFontFamily(fontFamily)!, fontSize: runProps.fontSize ? ptToPx(runProps.fontSize / 2)! : defaultFontSizePx, bold: runProps.bold, italic: runProps.italic, - underline: runProps.underline && { - style: runProps.underline!['w:val'] as 'single' | 'double' | 'dotted' | 'dashed' | 'wavy' || 'single', + underline: runProps.underline && { + style: (runProps.underline!['w:val'] as 'single' | 'double' | 'dotted' | 'dashed' | 'wavy') || 'single', color: runProps.underline!['w:color'] || undefined, }, strike: runProps.strike, @@ -298,6 +319,5 @@ export const computeRunAttrs = ( allCaps: runProps?.textTransform === 'uppercase', letterSpacing: runProps.letterSpacing ? twipsToPx(runProps.letterSpacing) : undefined, lang: runProps.lang?.val || undefined, - } + }; }; - diff --git a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts index d0f2e6215..16a31cca3 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts @@ -52,9 +52,8 @@ const MAX_AUTO_LINE_MULTIPLIER = 10; * normalizeAlignment('CENTER'); // undefined (case-sensitive) * ``` */ -type NormalizedParagraphAlignment = Exclude; -export const normalizeAlignment = (value: unknown): NormalizedParagraphAlignment => { +export const normalizeAlignment = (value: unknown): ParagraphAttrs['alignment'] => { switch (value) { case 'center': case 'right': @@ -154,4 +153,3 @@ export const normalizeLineRule = (value: unknown): ParagraphSpacing['lineRule'] } return undefined; }; - diff --git a/packages/layout-engine/pm-adapter/src/converters/table.ts b/packages/layout-engine/pm-adapter/src/converters/table.ts index 7eaf84092..f05989561 100644 --- a/packages/layout-engine/pm-adapter/src/converters/table.ts +++ b/packages/layout-engine/pm-adapter/src/converters/table.ts @@ -219,11 +219,11 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { // Also includes backgroundColor for auto text color resolution const cellConverterContext: ConverterContext | undefined = tableStyleParagraphProps || cellBackgroundColor - ? { + ? ({ ...context.converterContext, ...(tableStyleParagraphProps && { tableStyleParagraphProps }), ...(cellBackgroundColor && { backgroundColor: cellBackgroundColor }), - } + } as ConverterContext) : context.converterContext; const paragraphToFlowBlocks = context.converters?.paragraphToFlowBlocks ?? context.paragraphToFlowBlocks; diff --git a/packages/layout-engine/style-engine/src/cascade.ts b/packages/layout-engine/style-engine/src/cascade.ts index 53d74b1d4..ad42e429c 100644 --- a/packages/layout-engine/style-engine/src/cascade.ts +++ b/packages/layout-engine/style-engine/src/cascade.ts @@ -10,7 +10,7 @@ * - layout-engine's style resolution (for rendering) */ -import { ParagraphProperties, RunProperties } from "./ooxml"; +import { ParagraphProperties, RunProperties } from './ooxml/types'; export type PropertyObject = ParagraphProperties | RunProperties; @@ -129,7 +129,7 @@ function isObject(item: unknown): item is PropertyObject { * @param isNormalDefault - Whether Normal style has w:default="1". * @returns Ordered array [first, second] for the cascade. */ -export function orderDefaultsAndNormal ( +export function orderDefaultsAndNormal( defaultProps: T, normalProps: T, isNormalDefault: boolean, @@ -183,7 +183,7 @@ export function combineIndentProperties(indentChain: ParagraphProperties[]): Par delete target.firstLine; } return source.hanging; - } + }, }, }); } diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index 03806833a..fcaa08c67 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -16,18 +16,12 @@ import type { ParagraphProperties, RunProperties } from './types.ts'; import type { NumberingProperties } from './numbering-types.ts'; import type { StylesDocumentProperties } from './styles-types.ts'; -export { - combineIndentProperties, - combineProperties, - combineRunProperties, - orderDefaultsAndNormal, -}; +export { combineIndentProperties, combineProperties, combineRunProperties, orderDefaultsAndNormal }; export type { PropertyObject }; export type * from './types.ts'; export type * from './numbering-types.ts'; export type * from './styles-types.ts'; - export interface OoxmlResolverParams { translatedNumbering: NumberingProperties | null | undefined; translatedLinkedStyles: StylesDocumentProperties | null | undefined; @@ -48,7 +42,7 @@ export function resolveRunProperties( } // Getting properties from style const paragraphStyleId = resolvedPpr?.styleId as string | undefined; - const paragraphStyleProps = resolveStyleChain("runProperties", params, paragraphStyleId); + const paragraphStyleProps = resolveStyleChain('runProperties', params, paragraphStyleId) as RunProperties; // Getting default properties and normal style properties const defaultProps = params.translatedLinkedStyles.docDefaults.runProperties ?? {}; @@ -59,7 +53,9 @@ export function resolveRunProperties( // Get run properties from direct character style, unless it's inside a TOC paragraph style let runStyleProps = {} as RunProperties; if (!paragraphStyleId?.startsWith('TOC')) { - runStyleProps = (inlineRpr?.styleId ? resolveStyleChain("runProperties", params, inlineRpr.styleId as string) : {}) as RunProperties; + runStyleProps = ( + inlineRpr?.styleId ? resolveStyleChain('runProperties', params, inlineRpr.styleId as string) : {} + ) as RunProperties; } const defaultsChain = orderDefaultsAndNormal(defaultProps, normalProps, isNormalDefault); @@ -70,12 +66,7 @@ export function resolveRunProperties( const numId = resolvedPpr?.numberingProperties?.numId; let numberingProps: RunProperties = {} as RunProperties; if (numId != null && numId !== 0) { - numberingProps = getNumberingProperties( - "runProperties", - params, - numberingProperties?.ilvl ?? 0, - numId, - ); + numberingProps = getNumberingProperties('runProperties', params, numberingProperties?.ilvl ?? 0, numId); } if (!numberingDefinedInline) { @@ -118,9 +109,9 @@ export function resolveParagraphProperties( // Properties from styles let styleId = inlineProps.styleId as string | undefined; - let styleProps = (inlineProps.styleId - ? resolveStyleChain("paragraphProperties", params, inlineProps.styleId) - : {}) as ParagraphProperties; + let styleProps = ( + inlineProps.styleId ? resolveStyleChain('paragraphProperties', params, inlineProps.styleId) : {} + ) as ParagraphProperties; // Properties from numbering let numberingProps = {} as ParagraphProperties; @@ -131,11 +122,11 @@ export function resolveParagraphProperties( const isList = numId != null && numId !== 0; if (isList) { const ilvlNum = ilvl != null ? (ilvl as number) : 0; - numberingProps = getNumberingProperties("paragraphProperties", params, ilvlNum, numId); + numberingProps = getNumberingProperties('paragraphProperties', params, ilvlNum, numId); if (numberingProps.styleId) { // If numbering level defines a style, replace styleProps with that style styleId = numberingProps.styleId as string; - styleProps = resolveStyleChain("paragraphProperties", params, styleId); + styleProps = resolveStyleChain('paragraphProperties', params, styleId); inlineProps.styleId = styleId; const inlineNumProps = inlineProps.numberingProperties; if ( @@ -150,7 +141,9 @@ export function resolveParagraphProperties( } // Table properties - const tableProps = (tableStyleId ? resolveStyleChain("paragraphProperties", params, tableStyleId) : {}) as ParagraphProperties; + const tableProps = ( + tableStyleId ? resolveStyleChain('paragraphProperties', params, tableStyleId) : {} + ) as ParagraphProperties; // Resolve property chain - regular properties are treated differently from indentation // Chain for regular properties @@ -165,7 +158,7 @@ export function resolveParagraphProperties( indentChain = [...defaultsChain, styleProps, numberingProps, inlineProps]; } else { // Otherwise, styleProps should override numberingProps for indentation but it should not follow the based-on chain - styleProps = resolveStyleChain("paragraphProperties", params, styleId, false); + styleProps = resolveStyleChain('paragraphProperties', params, styleId, false); indentChain = [...defaultsChain, numberingProps, styleProps, inlineProps]; } } else { @@ -180,8 +173,8 @@ export function resolveParagraphProperties( return [...(target.tabStops as unknown[]), ...(source.tabStops as unknown[])]; } return source.tabStops; - } - } + }, + }, }); const finalIndent = combineIndentProperties(indentChain); finalProps.indent = finalIndent.indent; @@ -195,16 +188,14 @@ export function resolveStyleChain( styleId: string | undefined, followBasedOnChain = true, ): T { - if (!styleId) return {} as T; - const styleDef = params.translatedLinkedStyles.styles[styleId]; + const styleDef = params.translatedLinkedStyles?.styles?.[styleId]; if (!styleDef) return {} as T; const styleProps = (styleDef[propertyType as keyof typeof styleDef] ?? {}) as T; const basedOn = styleDef.basedOn; - let styleChain: T[] = [styleProps]; const seenStyles = new Set(); let nextBasedOn = basedOn; @@ -213,7 +204,7 @@ export function resolveStyleChain( break; } seenStyles.add(basedOn as string); - const basedOnStyleDef = params.translatedLinkedStyles.styles[nextBasedOn]; + const basedOnStyleDef = params.translatedLinkedStyles?.styles?.[nextBasedOn]; const basedOnProps = basedOnStyleDef?.[propertyType as keyof typeof basedOnStyleDef] as T; if (basedOnProps && Object.keys(basedOnProps).length) { @@ -225,7 +216,6 @@ export function resolveStyleChain( return combineProperties(styleChain); } - export function getNumberingProperties( propertyType: 'paragraphProperties' | 'runProperties', params: OoxmlResolverParams, @@ -258,17 +248,11 @@ export function getNumberingProperties( const numStyleLinkId = listDefinitionForThisNumId.styleLink; if (numStyleLinkId && tries < 1) { - const styleDef = params.translatedLinkedStyles.styles[numStyleLinkId]; + const styleDef = params.translatedLinkedStyles?.styles?.[numStyleLinkId]; const styleProps = styleDef?.paragraphProperties; const numIdFromStyle = styleProps?.numberingProperties?.numId; if (numIdFromStyle) { - return getNumberingProperties( - propertyType, - params, - ilvl, - numIdFromStyle, - tries + 1, - ); + return getNumberingProperties(propertyType, params, ilvl, numIdFromStyle, tries + 1); } } diff --git a/packages/super-editor/src/core/header-footer/HeaderFooterRegistry.ts b/packages/super-editor/src/core/header-footer/HeaderFooterRegistry.ts index c6c80475b..bf998101e 100644 --- a/packages/super-editor/src/core/header-footer/HeaderFooterRegistry.ts +++ b/packages/super-editor/src/core/header-footer/HeaderFooterRegistry.ts @@ -6,6 +6,7 @@ import type { Editor } from '@core/Editor.js'; import { EventEmitter } from '@core/EventEmitter.js'; import { createHeaderFooterEditor, onHeaderFooterDataUpdate } from '@extensions/pagination/pagination-helpers.js'; import { updateYdocDocxData } from '@extensions/collaboration/collaboration-helpers.js'; +import type { ConverterContext } from '@superdoc/pm-adapter/converter-context.js'; const HEADER_FOOTER_VARIANTS = ['default', 'first', 'even', 'odd'] as const; const DEFAULT_HEADER_FOOTER_HEIGHT = 100; @@ -1173,7 +1174,7 @@ export class HeaderFooterLayoutAdapter { * * @returns The converter context containing document metadata, or undefined if not available */ - #getConverterContext(): MinimalConverterContext | undefined { + #getConverterContext(): ConverterContext | undefined { const rootEditor = this.#manager.rootEditor; if (!('converter' in rootEditor)) { return undefined; @@ -1181,23 +1182,13 @@ export class HeaderFooterLayoutAdapter { const converter = (rootEditor as EditorWithConverter).converter as Record | undefined; if (!converter) return undefined; - const context: MinimalConverterContext = {}; + const context: ConverterContext = { + docx: converter.convertedXml, + numbering: converter.numbering, + translatedLinkedStyles: converter.translatedLinkedStyles, + translatedNumbering: converter.translatedNumbering, + } as ConverterContext; - // Type guard: check if convertedXml exists and is a record - if (converter.convertedXml && typeof converter.convertedXml === 'object') { - context.docx = converter.convertedXml as Record; - } - - // Type guard: check if numbering exists and has expected structure - if (converter.numbering && typeof converter.numbering === 'object') { - context.numbering = converter.numbering as MinimalConverterContext['numbering']; - } - - // Type guard: check if linkedStyles exists and is an array - if (Array.isArray(converter.linkedStyles)) { - context.linkedStyles = converter.linkedStyles as MinimalConverterContext['linkedStyles']; - } - - return Object.keys(context).length > 0 ? context : undefined; + return context; } } diff --git a/packages/word-layout/src/types.ts b/packages/word-layout/src/types.ts index 94e9e3b5a..3b8b04691 100644 --- a/packages/word-layout/src/types.ts +++ b/packages/word-layout/src/types.ts @@ -54,14 +54,13 @@ export type ResolvedRunProperties = { }; export type NumberingProperties = { - numId: string | number; - ilvl: number; + numId?: number; + ilvl?: number; }; - export type ResolvedParagraphProperties = { styleId?: string; - alignment?: WordListJustification | 'justify'; + alignment?: 'left' | 'center' | 'right' | 'justify'; indent?: ParagraphIndent; spacing?: ParagraphSpacing; tabs?: TabStop[]; @@ -70,7 +69,6 @@ export type ResolvedParagraphProperties = { numberingProperties?: NumberingProperties | null; }; - export type WordLayoutMeasurementAdapter = { measureText?: (text: string, fontCss: string, options?: { letterSpacing?: number }) => number; }; @@ -81,7 +79,7 @@ export type ListRenderingAttrs = { path: number[]; numberingType: string; suffix: 'tab' | 'space' | 'nothing'; -} +}; export type WordParagraphLayoutInput = { paragraph: ResolvedParagraphProperties; @@ -91,9 +89,6 @@ export type WordParagraphLayoutInput = { export type WordListMarkerLayout = { markerText: string; - markerBoxWidthPx: number; - markerX: number; - textStartX: number; gutterWidthPx?: number; justification: WordListJustification; suffix: WordListSuffix; @@ -114,4 +109,3 @@ export type WordParagraphLayoutOutput = { */ firstLineIndentMode?: boolean; }; - From ae156e3403701ffc1a6a950bcff67cd290d89e69 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 16 Jan 2026 13:52:29 -0300 Subject: [PATCH 59/85] chore: format --- .../pm-adapter/src/attributes/index.ts | 11 ++------ .../pm-adapter/src/converters/paragraph.ts | 28 ++++--------------- .../layout-engine/pm-adapter/src/types.ts | 5 +--- .../layout-engine/style-engine/src/index.ts | 3 -- .../style-engine/src/ooxml/styles-types.ts | 1 - .../style-engine/src/ooxml/types.ts | 4 +-- .../src/core/super-converter/styles.js | 8 ++++-- .../v2/importer/docxImporter.js | 10 ++++++- .../w/abstractNum/abstractNum-translator.js | 8 +++++- .../v3/handlers/w/num/num-translator.js | 20 +++++++++---- .../p/helpers/legacy-handle-paragraph-node.js | 6 +--- .../extensions/paragraph/ParagraphNodeView.js | 5 +++- .../paragraph/resolvedPropertiesCache.js | 5 +++- .../run/calculateInlineRunPropertiesPlugin.js | 5 +++- .../extensions/run/wrapTextInRunsPlugin.js | 5 +++- packages/word-layout/src/index.ts | 12 ++++---- packages/word-layout/src/marker-utils.ts | 1 - 17 files changed, 70 insertions(+), 67 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/attributes/index.ts b/packages/layout-engine/pm-adapter/src/attributes/index.ts index 70215f17b..c8dc2947c 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/index.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/index.ts @@ -19,11 +19,7 @@ export { } from './borders.js'; // Spacing and indent -export { - normalizeAlignment, - normalizeParagraphSpacing, - normalizeLineRule, -} from './spacing-indent.js'; +export { normalizeAlignment, normalizeParagraphSpacing, normalizeLineRule } from './spacing-indent.js'; // Tab stops export { normalizeOoxmlTabs, normalizeTabVal, normalizeTabLeader } from './tabs.js'; @@ -32,7 +28,4 @@ export { normalizeOoxmlTabs, normalizeTabVal, normalizeTabLeader } from './tabs. export { mirrorIndentForRtl, ensureBidiIndentPx, DEFAULT_BIDI_INDENT_PX } from './bidi.js'; // Paragraph attributes -export { - computeParagraphAttrs, - deepClone, -} from './paragraph.js'; +export { computeParagraphAttrs, deepClone } from './paragraph.js'; diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index 09013177c..e12c5ad40 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -31,10 +31,7 @@ import type { ThemeColorPalette, } from '../types.js'; import type { ConverterContext } from '../converter-context.js'; -import { - computeParagraphAttrs, - deepClone, -} from '../attributes/index.js'; +import { computeParagraphAttrs, deepClone } from '../attributes/index.js'; import { resolveNodeSdtMetadata, getNodeInstruction } from '../sdt/index.js'; import { shouldRequirePageBoundary, hasIntrinsicBoundarySignals, createSectionBreakBlock } from '../sections/index.js'; import { trackedChangesCompatible, collectTrackedChangeFromMarks, applyMarksToRun } from '../marks/index.js'; @@ -61,7 +58,6 @@ import { resolveRunProperties } from '@superdoc/style-engine/ooxml'; */ const DEFAULT_IMAGE_DIMENSION_PX = 100; - // ============================================================================ // Helper functions for inline image detection and conversion // ============================================================================ @@ -597,7 +593,6 @@ const extractFirstTextRunFont = (para: PMNode): { fontSizePx?: number; fontFamil return font; }; - const applyInlineRunProperties = ( run: TextRun, runProperties: RunProperties | undefined, @@ -702,10 +697,7 @@ export function paragraphToFlowBlocks( ? (para.attrs.paragraphProperties as ParagraphProperties) : {}; const baseBlockId = nextBlockId('paragraph'); - const { paragraphAttrs, resolvedParagraphProperties } = computeParagraphAttrs( - para, - converterContext, - ); + const { paragraphAttrs, resolvedParagraphProperties } = computeParagraphAttrs(para, converterContext); const blocks: FlowBlock[] = []; const paraAttrs = (para.attrs ?? {}) as Record; @@ -910,9 +902,7 @@ export function paragraphToFlowBlocks( false, false, ); - node.content.forEach((child) => - visitNode(child, mergedMarks, activeSdt, resolvedRunProperties, nextHidden), - ); + node.content.forEach((child) => visitNode(child, mergedMarks, activeSdt, resolvedRunProperties, nextHidden)); return; } @@ -920,9 +910,7 @@ export function paragraphToFlowBlocks( if (node.type === 'structuredContent' && Array.isArray(node.content)) { const inlineMetadata = resolveNodeSdtMetadata(node, 'structuredContent'); const nextSdt = inlineMetadata ?? activeSdt; - node.content.forEach((child) => - visitNode(child, inheritedMarks, nextSdt, activeRunProperties, activeHidden), - ); + node.content.forEach((child) => visitNode(child, inheritedMarks, nextSdt, activeRunProperties, activeHidden)); return; } @@ -1033,9 +1021,7 @@ export function paragraphToFlowBlocks( currentRuns.push(tokenRun); } else if (Array.isArray(node.content)) { // No bookmark found, fall back to treating as transparent container - node.content.forEach((child) => - visitNode(child, mergedMarks, activeSdt, activeRunProperties), - ); + node.content.forEach((child) => visitNode(child, mergedMarks, activeSdt, activeRunProperties)); } return; } @@ -1053,9 +1039,7 @@ export function paragraphToFlowBlocks( } // Process any content inside the bookmark (usually empty) if (Array.isArray(node.content)) { - node.content.forEach((child) => - visitNode(child, inheritedMarks, activeSdt, activeRunProperties), - ); + node.content.forEach((child) => visitNode(child, inheritedMarks, activeSdt, activeRunProperties)); } return; } diff --git a/packages/layout-engine/pm-adapter/src/types.ts b/packages/layout-engine/pm-adapter/src/types.ts index 1608977bb..5444c6c70 100644 --- a/packages/layout-engine/pm-adapter/src/types.ts +++ b/packages/layout-engine/pm-adapter/src/types.ts @@ -3,10 +3,7 @@ */ import type { TrackedChangesMode, SectionMetadata, FlowBlock, TrackedChangeMeta, Engines } from '@superdoc/contracts'; -import type { - StyleContext as StyleEngineContext, - ComputedParagraphStyle, -} from '@superdoc/style-engine'; +import type { StyleContext as StyleEngineContext, ComputedParagraphStyle } from '@superdoc/style-engine'; import type { SectionRange } from './sections/index.js'; import type { ConverterContext } from './converter-context.js'; export type { ConverterContext } from './converter-context.js'; diff --git a/packages/layout-engine/style-engine/src/index.ts b/packages/layout-engine/style-engine/src/index.ts index d0abb22fa..2cd2c462b 100644 --- a/packages/layout-engine/style-engine/src/index.ts +++ b/packages/layout-engine/style-engine/src/index.ts @@ -10,7 +10,6 @@ * - Conversion to pixels happens at measurement boundary only */ - // Re-export cascade utilities - these are the SINGLE SOURCE OF TRUTH for property merging export { combineProperties, @@ -94,7 +93,6 @@ export interface ComputedParagraphStyle { tabs?: TabStop[]; } - export interface StyleContext { styles?: Record; numbering?: Record; @@ -135,7 +133,6 @@ export function clearSdtMetadataCache(): void { sdtMetadataCache.clear(); } - /** * Normalizes Structured Document Tag (SDT) metadata into a stable contract shape. * diff --git a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts index ff68dfb25..d1e3d061a 100644 --- a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts +++ b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts @@ -1,4 +1,3 @@ - import type { BorderProperties, ParagraphConditionalFormatting, diff --git a/packages/layout-engine/style-engine/src/ooxml/types.ts b/packages/layout-engine/style-engine/src/ooxml/types.ts index 4e6e82170..f97d934a4 100644 --- a/packages/layout-engine/style-engine/src/ooxml/types.ts +++ b/packages/layout-engine/style-engine/src/ooxml/types.ts @@ -55,7 +55,7 @@ export interface ParagraphProperties { /** Tab stop definitions for the paragraph. */ tabStops?: ParagraphTabStop[]; /** Baseline text alignment within the line. */ - textAlignment?: "top" | "center" | "baseline" | "bottom" | "auto"; + textAlignment?: 'top' | 'center' | 'baseline' | 'bottom' | 'auto'; /** Text direction for the paragraph. */ textDirection?: string; /** Textbox tight wrap setting for the paragraph. */ @@ -129,7 +129,7 @@ export interface ParagraphFrameProperties { /** Frame width in twentieths of a point. */ w?: number; /** Wrapping style for the frame. */ - wrap?: "auto" | "notBeside" | "around" | "tight" | "through" | "none"; + wrap?: 'auto' | 'notBeside' | 'around' | 'tight' | 'through' | 'none'; /** Horizontal position. */ x?: number; /** Horizontal alignment. */ diff --git a/packages/super-editor/src/core/super-converter/styles.js b/packages/super-editor/src/core/super-converter/styles.js index 88f949c18..f05a8ca81 100644 --- a/packages/super-editor/src/core/super-converter/styles.js +++ b/packages/super-editor/src/core/super-converter/styles.js @@ -11,11 +11,15 @@ import { import { isValidHexColor, getHexColorFromDocxSystem } from '@converter/helpers'; import { SuperConverter } from '@converter/SuperConverter.js'; import { getUnderlineCssString } from '@extensions/linked-styles/underline-css.js'; -import { resolveDocxFontFamily, resolveRunProperties, resolveParagraphProperties, combineRunProperties } from '@superdoc/style-engine/ooxml'; +import { + resolveDocxFontFamily, + resolveRunProperties, + resolveParagraphProperties, + combineRunProperties, +} from '@superdoc/style-engine/ooxml'; export { resolveRunProperties, resolveParagraphProperties, combineRunProperties }; - /** * Font family converter from SuperConverter (lazy getter to avoid circular import) * @returns {(fontName: string, docx?: Record) => string} diff --git a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js index faf128c46..9ee725aa5 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js @@ -182,7 +182,15 @@ export const createDocumentJson = (docx, converter, editor) => { return { pmDoc: result, savedTagsToRestore: node, - pageStyles: getDocumentStyles(node, docx, converter, editor, numbering, translatedNumbering, translatedLinkedStyles), + pageStyles: getDocumentStyles( + node, + docx, + converter, + editor, + numbering, + translatedNumbering, + translatedLinkedStyles, + ), comments, footnotes, inlineDocumentFonts, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.js index 6e57abc76..436d2d110 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/abstractNum/abstractNum-translator.js @@ -6,7 +6,13 @@ import { translator as wStyleLinkTranslator } from '../../w/styleLink'; import { translator as wNumStyleLinkTranslator } from '../../w/numStyleLink'; import { translator as wMultiLevelTypeTranslator } from '../../w/multiLevelType'; import { translator as wLvlTranslator } from '../../w/lvl'; -import { createIntegerAttributeHandler, encodeProperties, decodeProperties, encodePropertiesByKey, decodePropertiesByKey } from '@converter/v3/handlers/utils.js'; +import { + createIntegerAttributeHandler, + encodeProperties, + decodeProperties, + encodePropertiesByKey, + decodePropertiesByKey, +} from '@converter/v3/handlers/utils.js'; const propertyTranslators = [ wNsidTranslator, diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.js index d097f6019..050f95c61 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/num/num-translator.js @@ -1,7 +1,13 @@ import { NodeTranslator } from '@translator'; import { translator as wAbstractNumIdTranslator } from '../../w/abstractNumId'; import { translator as wLvlOverrideTranslator } from '../../w/lvlOverride'; -import { createIntegerAttributeHandler, encodeProperties, decodeProperties, encodePropertiesByKey, decodePropertiesByKey } from '@converter/v3/handlers/utils.js'; +import { + createIntegerAttributeHandler, + encodeProperties, + decodeProperties, + encodePropertiesByKey, + decodePropertiesByKey, +} from '@converter/v3/handlers/utils.js'; /** * The NodeTranslator instance for the w:num element. @@ -34,12 +40,16 @@ export const translator = NodeTranslator.from({ const decodedAttrs = this.decodeAttributes({ node: { ...params.node, attrs: currentValue } }); const elements = [ - ...decodeProperties(params, { - abstractNumId: wAbstractNumIdTranslator, - }, currentValue), + ...decodeProperties( + params, + { + abstractNumId: wAbstractNumIdTranslator, + }, + currentValue, + ), ...decodePropertiesByKey('w:lvlOverride', 'lvlOverrides', wLvlOverrideTranslator, params, currentValue), ]; - + const newNode = { name: 'w:num', type: 'element', diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js index cce4b368c..f5121d657 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js @@ -39,11 +39,7 @@ export const handleParagraphNode = (params) => { // Resolve paragraph properties according to styles hierarchy const tableStyleId = getTableStyleId(params.path || []); - const resolvedParagraphProperties = resolveParagraphProperties( - params, - inlineParagraphProperties, - tableStyleId, - ); + const resolvedParagraphProperties = resolveParagraphProperties(params, inlineParagraphProperties, tableStyleId); const { elements = [], attributes = {}, marks = [] } = parseProperties(node, params.docx); const childContent = []; diff --git a/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.js b/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.js index be0368e56..45efd65b6 100644 --- a/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.js +++ b/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.js @@ -392,7 +392,10 @@ export class ParagraphNodeView { // START: modify after CSS styles const paragraphProperties = getResolvedParagraphProperties(this.node); const runProperties = resolveRunProperties( - { translatedNumbering: this.editor.converter.translatedNumbering, translatedLinkedStyles: this.editor.converter.translatedLinkedStyles }, + { + translatedNumbering: this.editor.converter.translatedNumbering, + translatedLinkedStyles: this.editor.converter.translatedLinkedStyles, + }, paragraphProperties.runProperties || {}, paragraphProperties, true, diff --git a/packages/super-editor/src/extensions/paragraph/resolvedPropertiesCache.js b/packages/super-editor/src/extensions/paragraph/resolvedPropertiesCache.js index cd80affb7..e4f87b6c5 100644 --- a/packages/super-editor/src/extensions/paragraph/resolvedPropertiesCache.js +++ b/packages/super-editor/src/extensions/paragraph/resolvedPropertiesCache.js @@ -18,7 +18,10 @@ export function calculateResolvedParagraphProperties(editor, node, $pos) { const tableNode = findParentNodeClosestToPos($pos, (node) => node.type.name === 'table'); const tableStyleId = tableNode?.node.attrs.tableStyleId || null; const paragraphProperties = resolveParagraphProperties( - { translatedNumbering: editor.converter.translatedNumbering, translatedLinkedStyles: editor.converter.translatedLinkedStyles }, + { + translatedNumbering: editor.converter.translatedNumbering, + translatedLinkedStyles: editor.converter.translatedLinkedStyles, + }, node.attrs.paragraphProperties || {}, tableStyleId, ); diff --git a/packages/super-editor/src/extensions/run/calculateInlineRunPropertiesPlugin.js b/packages/super-editor/src/extensions/run/calculateInlineRunPropertiesPlugin.js index 04b7c898a..97aa6d4c3 100644 --- a/packages/super-editor/src/extensions/run/calculateInlineRunPropertiesPlugin.js +++ b/packages/super-editor/src/extensions/run/calculateInlineRunPropertiesPlugin.js @@ -71,7 +71,10 @@ export const calculateInlineRunPropertiesPlugin = (editor) => getResolvedParagraphProperties(paragraphNode) || calculateResolvedParagraphProperties(editor, paragraphNode, $pos); const runPropertiesFromStyles = resolveRunProperties( - { translatedNumbering: editor.converter?.translatedNumbering ?? {}, translatedLinkedStyles: editor.converter?.translatedLinkedStyles ?? {} }, + { + translatedNumbering: editor.converter?.translatedNumbering ?? {}, + translatedLinkedStyles: editor.converter?.translatedLinkedStyles ?? {}, + }, {}, paragraphProperties, false, diff --git a/packages/super-editor/src/extensions/run/wrapTextInRunsPlugin.js b/packages/super-editor/src/extensions/run/wrapTextInRunsPlugin.js index 508ba96d5..a0d2de8be 100644 --- a/packages/super-editor/src/extensions/run/wrapTextInRunsPlugin.js +++ b/packages/super-editor/src/extensions/run/wrapTextInRunsPlugin.js @@ -107,7 +107,10 @@ const resolveRunPropertiesFromParagraphStyle = (paragraphNode, editor) => { if (!styleId) return {}; try { - const params = { translatedNumbering: editor.converter.translatedNumbering, translatedLinkedStyles: editor.converter.translatedLinkedStyles }; + const params = { + translatedNumbering: editor.converter.translatedNumbering, + translatedLinkedStyles: editor.converter.translatedLinkedStyles, + }; const resolvedPpr = { styleId }; const runProps = resolveRunProperties(params, {}, resolvedPpr, false, false); diff --git a/packages/word-layout/src/index.ts b/packages/word-layout/src/index.ts index 5aef6ad46..6b666d20e 100644 --- a/packages/word-layout/src/index.ts +++ b/packages/word-layout/src/index.ts @@ -4,11 +4,7 @@ * Track A focuses on defining data interfaces and pure helpers. */ -import type { - WordParagraphLayoutInput, - WordParagraphLayoutOutput, - WordListSuffix, -} from './types.js'; +import type { WordParagraphLayoutInput, WordParagraphLayoutOutput, WordListSuffix } from './types.js'; import { DEFAULT_LIST_HANGING_PX, LIST_MARKER_GAP } from './marker-utils.js'; import { twipsToPixels } from './unit-conversions.js'; @@ -106,7 +102,10 @@ export function computeWordParagraphLayout(input: WordParagraphLayoutInput): Wor // Per OOXML spec, firstLine and hanging are mutually exclusive. // Validate that firstLine is a finite number to handle NaN, Infinity, and -Infinity gracefully. const hasFirstLineIndent = - paragraph.indent?.firstLine != null && Number.isFinite(paragraph.indent.firstLine) && paragraph.indent.firstLine > 0 && !paragraph.indent.hanging; + paragraph.indent?.firstLine != null && + Number.isFinite(paragraph.indent.firstLine) && + paragraph.indent.firstLine > 0 && + !paragraph.indent.hanging; let markerBoxWidthPx: number; let markerX: number; @@ -142,7 +141,6 @@ export function computeWordParagraphLayout(input: WordParagraphLayoutInput): Wor return layout; } - const normalizeSuffix = (suffix?: string | null): WordListSuffix => { if (suffix === 'tab' || suffix === 'space' || suffix === 'nothing') { return suffix; diff --git a/packages/word-layout/src/marker-utils.ts b/packages/word-layout/src/marker-utils.ts index 6ce10a126..1f763f7c4 100644 --- a/packages/word-layout/src/marker-utils.ts +++ b/packages/word-layout/src/marker-utils.ts @@ -21,4 +21,3 @@ export const LIST_MARKER_GAP = 8; * The bullet point (•) is the standard Unicode character for unordered lists. */ export const DEFAULT_BULLET_GLYPH = '•'; - From 99da0c690154e1d1195de90a39d4b678bdfa6588 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Fri, 16 Jan 2026 14:36:43 -0300 Subject: [PATCH 60/85] test: adjust unit tests --- .../src/layout-paragraph.test.ts | 10 +- .../layout-engine/src/layout-table.test.ts | 99 +- .../painters/dom/src/index.test.ts | 38 +- .../dom/src/renderer-hanging-indent.test.ts | 41 +- .../dom/src/renderer-marker-suffix.test.ts | 26 +- .../dom/src/renderer-marker-textwidth.test.ts | 87 +- .../dom/src/table/border-utils.test.ts | 8 +- .../src/attributes/paragraph.test.ts | 3984 +---------------- .../src/attributes/spacing-indent.test.ts | 873 +--- .../src/converters/paragraph.test.ts | 146 +- .../pm-adapter/src/converters/table.test.ts | 17 +- .../src/fixtures/tabs-center-end.json | 20 +- .../pm-adapter/src/fixtures/tabs-decimal.json | 14 +- .../pm-adapter/src/index.test.ts | 283 +- .../pm-adapter/src/integration.test.ts | 84 +- .../pm-adapter/src/internal.test.ts | 33 +- .../src/sdt/document-section.test.ts | 63 +- .../src/sdt/structured-content-block.test.ts | 31 - .../pm-adapter/src/sdt/toc.test.ts | 12 - .../style-engine/src/cascade.test.ts | 348 +- .../style-engine/src/index.test.ts | 470 +- .../style-engine/src/ooxml/index.test.ts | 1177 +---- .../multi-section-page-count-simple.test.ts | 12 +- .../src/multi-section-page-count.test.ts | 46 +- .../src/test-helpers/section-test-utils.ts | 18 + .../src/core/Editor.lifecycle.test.ts | 7 +- .../styles-font-priority.test.js | 283 +- .../src/core/super-converter/styles.test.js | 1756 +------- .../v2/importer/docxImporter.js | 2 +- .../latentStyles-translator.test.js | 2 +- .../paragraph/ParagraphNodeView.test.js | 17 +- .../src/extensions/tab/tab-alignments.test.js | 26 +- .../src/tests/helpers/adapterTestHelpers.js | 25 +- .../super-editor/src/tests/helpers/helpers.js | 67 + .../src/tests/import/docxImporter.test.js | 2 +- .../tests/import/hyperlinkImporter.test.js | 8 +- .../src/tests/import/runImporter.test.js | 153 +- .../src/tests/parity/adapter-parity.test.js | 141 +- .../src/tests/parity/marker-styling.test.js | 70 +- .../tests/parity/spacing-rendering.test.js | 137 +- .../src/tests/parity/tabs-hanging.test.js | 52 +- .../word-layout/tests/word-layout.test.ts | 197 +- 42 files changed, 1391 insertions(+), 9494 deletions(-) diff --git a/packages/layout-engine/layout-engine/src/layout-paragraph.test.ts b/packages/layout-engine/layout-engine/src/layout-paragraph.test.ts index d1b7c1a25..3726e39ba 100644 --- a/packages/layout-engine/layout-engine/src/layout-paragraph.test.ts +++ b/packages/layout-engine/layout-engine/src/layout-paragraph.test.ts @@ -203,10 +203,10 @@ describe('layoutParagraphBlock - remeasurement with list markers', () => { expect(remeasureParagraph).toHaveBeenCalledWith(block, 150, 24); }); - it('uses fallback to markerBoxWidthPx when markerWidth is missing', () => { + it('uses markerWidth=0 fallback when markerWidth is missing', () => { const remeasureParagraph = vi.fn((block, maxWidth, firstLineIndent) => { - // Should use markerBoxWidthPx (20) + gutterWidth (6) - expect(firstLineIndent).toBe(26); + // markerWidth defaults to 0 when the measure marker is present + expect(firstLineIndent).toBe(6); return makeMeasure([{ width: 100, lineHeight: 20, maxWidth: 150 }]); }); @@ -226,7 +226,7 @@ describe('layoutParagraphBlock - remeasurement with list markers', () => { const measure = makeMeasure( [{ width: 100, lineHeight: 20, maxWidth: 200 }], - { gutterWidth: 6 }, // markerWidth is missing + { gutterWidth: 6 }, // markerWidth is missing and defaults to 0 ); const ctx: ParagraphLayoutContext = { @@ -242,7 +242,7 @@ describe('layoutParagraphBlock - remeasurement with list markers', () => { layoutParagraphBlock(ctx); - expect(remeasureParagraph).toHaveBeenCalledWith(block, 150, 26); + expect(remeasureParagraph).toHaveBeenCalledWith(block, 150, 6); }); it('uses fallback to 0 when both markerWidth and markerBoxWidthPx are missing', () => { diff --git a/packages/layout-engine/layout-engine/src/layout-table.test.ts b/packages/layout-engine/layout-engine/src/layout-table.test.ts index 92491fce0..9a286b75c 100644 --- a/packages/layout-engine/layout-engine/src/layout-table.test.ts +++ b/packages/layout-engine/layout-engine/src/layout-table.test.ts @@ -1439,13 +1439,48 @@ describe('layoutTableBlock', () => { const measure = createMockTableMeasure( [100, 100], // Two columns [120], // Row height (max of cell heights) - [ - // Row 0 - different line heights per cell - [20, 20, 20], // Cell 0: 3x20px lines - [40, 40, 40], // Cell 1: 3x40px lines - ], + [[20, 20, 20]], // Row 0 defaults (applied to all cells) ); + if (measure.rows[0].cells[1]) { + measure.rows[0].cells[1].paragraph = { + kind: 'paragraph', + lines: [ + { + fromRun: 0, + fromChar: 0, + toRun: 0, + toChar: 1, + width: 100, + ascent: 30, + descent: 10, + lineHeight: 40, + }, + { + fromRun: 0, + fromChar: 0, + toRun: 0, + toChar: 1, + width: 100, + ascent: 30, + descent: 10, + lineHeight: 40, + }, + { + fromRun: 0, + fromChar: 0, + toRun: 0, + toChar: 1, + width: 100, + ascent: 30, + descent: 10, + lineHeight: 40, + }, + ], + totalHeight: 120, + }; + } + const fragments: TableFragment[] = []; let pageCount = 0; const mockPage = { fragments }; @@ -1583,12 +1618,58 @@ describe('layoutTableBlock', () => { const measure = createMockTableMeasure( [100, 100], [80], // Row height (max of cells) - [ - [20, 20], // Cell 0: 2 lines of 20px (total 40px) - [20, 20, 20, 20], // Cell 1: 4 lines of 20px (total 80px) - ], + [[20, 20]], // Row 0 defaults (applied to all cells) ); + if (measure.rows[0].cells[1]) { + measure.rows[0].cells[1].paragraph = { + kind: 'paragraph', + lines: [ + { + fromRun: 0, + fromChar: 0, + toRun: 0, + toChar: 1, + width: 100, + ascent: 15, + descent: 5, + lineHeight: 20, + }, + { + fromRun: 0, + fromChar: 0, + toRun: 0, + toChar: 1, + width: 100, + ascent: 15, + descent: 5, + lineHeight: 20, + }, + { + fromRun: 0, + fromChar: 0, + toRun: 0, + toChar: 1, + width: 100, + ascent: 15, + descent: 5, + lineHeight: 20, + }, + { + fromRun: 0, + fromChar: 0, + toRun: 0, + toChar: 1, + width: 100, + ascent: 15, + descent: 5, + lineHeight: 20, + }, + ], + totalHeight: 80, + }; + } + const fragments: TableFragment[] = []; let cursorY = 0; const mockPage = { fragments }; diff --git a/packages/layout-engine/painters/dom/src/index.test.ts b/packages/layout-engine/painters/dom/src/index.test.ts index b8614cccf..6d555985f 100644 --- a/packages/layout-engine/painters/dom/src/index.test.ts +++ b/packages/layout-engine/painters/dom/src/index.test.ts @@ -764,6 +764,7 @@ describe('DomPainter', () => { y: 0, width: 400, markerWidth: 24, + markerTextWidth: 12, }, ], }, @@ -860,6 +861,7 @@ describe('DomPainter', () => { y: 0, width: 400, markerWidth: 24, + markerTextWidth: 12, }, ], }, @@ -872,11 +874,11 @@ describe('DomPainter', () => { const firstLine = mount.querySelector('.superdoc-line') as HTMLElement; // Word-spacing is calculated based on available width AFTER accounting for marker position + inline width. // Fragment has indent: { left: 48, hanging: 24 }, so markerStartPos = 48 - 24 = 24 - // fragment.markerTextWidth is not set, so falls back to fragment.markerWidth = 24 - // Text starts at: markerStartPos (24) + markerTextWidth (24) + space (~4px) = 52px - // availableWidth = 400 - 52 = 348 - // slack = 348 - 180 = 168, wordSpacing = 168 / 5 = 33.6px - expect(firstLine.style.wordSpacing).toBe('33.6px'); + // fragment.markerTextWidth is 12 + // Text starts at: markerStartPos (24) + markerTextWidth (12) + space (4px) = 40px + // availableWidth = 400 - 40 = 360 + // slack = 360 - 180 = 180, wordSpacing = 180 / 5 = 36px + expect(firstLine.style.wordSpacing).toBe('36px'); const suffix = firstLine.querySelector('.superdoc-marker-suffix-space') as HTMLElement; expect(suffix).toBeTruthy(); @@ -944,6 +946,7 @@ describe('DomPainter', () => { y: 0, width: 400, markerWidth: 24, + markerTextWidth: 12, }, ], }, @@ -1855,6 +1858,7 @@ describe('DomPainter', () => { y: 96, width: 300, markerWidth: 20, + markerTextWidth: 12, }, ], }, @@ -1943,6 +1947,7 @@ describe('DomPainter', () => { y: 120, width: 300, markerWidth: 24, + markerTextWidth: 12, }, ], }, @@ -2028,6 +2033,7 @@ describe('DomPainter', () => { y: 96, width: 300, markerWidth: 15, + markerTextWidth: 10, }, ], }, @@ -2047,10 +2053,10 @@ describe('DomPainter', () => { // Tab should reach implicit tab stop at indentLeft (48px) // markerStartPos = paraIndentLeft - hanging = 48 - 24 = 24 - // currentPos = markerStartPos + markerWidth = 24 + 15 = 39 + // currentPos = markerStartPos + markerTextWidth = 24 + 10 = 34 // implicitTabStop = paraIndentLeft = 48 - // tabWidth = 48 - 39 = 9 - const expectedTabWidth = 9; + // tabWidth = 48 - 34 = 14 + const expectedTabWidth = 14; expect(tabEl.style.width).toBe(`${expectedTabWidth}px`); }); @@ -2116,6 +2122,7 @@ describe('DomPainter', () => { y: 96, width: 300, markerWidth: 45, + markerTextWidth: 40, }, ], }, @@ -2135,11 +2142,11 @@ describe('DomPainter', () => { // Marker extends past implicit tab stop, so advance to next default tab interval // markerStartPos = paraIndentLeft - hanging = 24 - 12 = 12 - // currentPos = markerStartPos + markerWidth = 12 + 45 = 57 + // currentPos = markerStartPos + markerTextWidth = 12 + 40 = 52 // implicitTabStop = paraIndentLeft = 24 // tabWidth would be negative (24 - 57 = -33), so use default tab interval - // tabWidth = 48 - (57 % 48) = 48 - 9 = 39 - const expectedTabWidth = 39; + // tabWidth = 48 - (52 % 48) = 48 - 4 = 44 + const expectedTabWidth = 44; expect(tabEl.style.width).toBe(`${expectedTabWidth}px`); }); @@ -2208,6 +2215,7 @@ describe('DomPainter', () => { width: 300, markerWidth: 20, markerGutter: 12, + markerTextWidth: 10, }, ], }, @@ -2225,8 +2233,8 @@ describe('DomPainter', () => { const tabEl = fragment.querySelector('.superdoc-tab') as HTMLElement; expect(tabEl).toBeTruthy(); - // For right-justified markers, use fragment.markerGutter - const expectedTabWidth = 12; + // For right-justified markers without firstLine, tab width uses hanging indent + const expectedTabWidth = 24; expect(tabEl.style.width).toBe(`${expectedTabWidth}px`); }); @@ -8662,6 +8670,7 @@ describe('applyRunDataAttributes', () => { y: 24, width: 300, markerWidth: 15, + markerTextWidth: 10, pmStart: 0, pmEnd: 14, }, @@ -8758,6 +8767,7 @@ describe('applyRunDataAttributes', () => { y: 24, width: 300, markerWidth: 15, + markerTextWidth: 10, pmStart: 0, pmEnd: 4, }, @@ -8849,6 +8859,7 @@ describe('applyRunDataAttributes', () => { y: 24, width: 300, markerWidth: 15, + markerTextWidth: 10, pmStart: 0, pmEnd: 4, }, @@ -8924,6 +8935,7 @@ describe('applyRunDataAttributes', () => { y: 24, width: 300, markerWidth: 15, + markerTextWidth: 10, pmStart: 0, pmEnd: 4, }, diff --git a/packages/layout-engine/painters/dom/src/renderer-hanging-indent.test.ts b/packages/layout-engine/painters/dom/src/renderer-hanging-indent.test.ts index bb653d04f..5d5f1a99a 100644 --- a/packages/layout-engine/painters/dom/src/renderer-hanging-indent.test.ts +++ b/packages/layout-engine/painters/dom/src/renderer-hanging-indent.test.ts @@ -592,6 +592,7 @@ describe('DomPainter hanging indent with tabs', () => { pmStart: 0, pmEnd: 14, markerWidth: 24, + markerTextWidth: 12, }, ], }, @@ -612,7 +613,7 @@ describe('DomPainter hanging indent with tabs', () => { expect(marker?.textContent).toBe('1.'); }); - it('should use LIST_MARKER_GAP for tab width in firstLine mode', () => { + it('uses default tab interval for tab width in firstLine mode', () => { const blockId = 'firstline-mode-tab-gap'; const block: FlowBlock = { kind: 'paragraph', @@ -694,7 +695,7 @@ describe('DomPainter hanging indent with tabs', () => { // Tab element should exist and have width equal to LIST_MARKER_GAP (8px) const tabEl = lineEl.querySelector('.superdoc-tab') as HTMLElement; expect(tabEl).toBeTruthy(); - expect(tabEl.style.width).toBe('8px'); + expect(tabEl.style.width).toBe('10px'); }); it('should position right-justified marker correctly in firstLine mode', () => { @@ -760,6 +761,7 @@ describe('DomPainter hanging indent with tabs', () => { pmStart: 0, pmEnd: 9, markerWidth: 30, + markerTextWidth: 20, }, ], }, @@ -781,8 +783,8 @@ describe('DomPainter hanging indent with tabs', () => { // For right-justified markers, container should be absolutely positioned expect(markerContainer.style.position).toBe('absolute'); - // Marker left position should be: markerStartPos (600) - markerWidth (30) = 570px - expect(markerContainer.style.left).toBe('570px'); + // Marker left position should be: markerStartPos (600) - markerTextWidth (20) = 580px + expect(markerContainer.style.left).toBe('580px'); }); it('should handle firstLineIndentMode with zero left indent', () => { @@ -848,6 +850,7 @@ describe('DomPainter hanging indent with tabs', () => { pmStart: 0, pmEnd: 4, markerWidth: 20, + markerTextWidth: 12, }, ], }, @@ -934,6 +937,7 @@ describe('DomPainter hanging indent with tabs', () => { pmStart: 0, pmEnd: 18, markerWidth: 24, // Indicates list item + markerTextWidth: 12, }, ], }, @@ -981,7 +985,7 @@ describe('DomPainter hanging indent with tabs', () => { }); describe('FirstLineIndentMode with firstLine=0 style override', () => { - it('should use markerX for positioning when firstLine=0 cancels numbering level indent', () => { + it('uses left + firstLine when firstLine=0 even if markerX is provided', () => { const blockId = 'firstline-zero-override'; const block: FlowBlock = { kind: 'paragraph', @@ -1059,8 +1063,8 @@ describe('DomPainter hanging indent with tabs', () => { const lineEl = container.querySelector('.superdoc-line') as HTMLElement; expect(lineEl).toBeTruthy(); - // paddingLeft should use markerX (720) from word-layout, not left + firstLine (360 + 0 = 360) - expect(lineEl.style.paddingLeft).toBe('720px'); + // paddingLeft uses left + firstLine (markerX is not used in renderer) + expect(lineEl.style.paddingLeft).toBe('360px'); const marker = lineEl.querySelector('.superdoc-paragraph-marker'); expect(marker).toBeTruthy(); @@ -1131,6 +1135,7 @@ describe('DomPainter hanging indent with tabs', () => { pmStart: 0, pmEnd: 9, markerWidth: 20, + markerTextWidth: 16, }, ], }, @@ -1236,7 +1241,7 @@ describe('DomPainter hanging indent with tabs', () => { expect(tabEl.style.width).toBe('180px'); }); - it('should use textStartX when no explicit tab stops are past current position', () => { + it('uses default tab interval when no explicit tab stops are past current position', () => { const blockId = 'use-textstartx'; const block: FlowBlock = { kind: 'paragraph', @@ -1316,16 +1321,16 @@ describe('DomPainter hanging indent with tabs', () => { expect(lineEl).toBeTruthy(); // currentPos = markerStartPos (600) + markerTextWidth (20) = 620 - // No tab stops past 620, so use textStartX (720) - // tabWidth should be 720 - 620 = 100 + // No tab stops past 620, so advance to next default tab interval (48px) + // next tab: 48 - (620 % 48) = 4 const tabEl = lineEl.querySelector('.superdoc-tab') as HTMLElement; expect(tabEl).toBeTruthy(); - expect(tabEl.style.width).toBe('100px'); + expect(tabEl.style.width).toBe('4px'); }); }); - describe('TextStartX fallback to LIST_MARKER_GAP', () => { - it('should use LIST_MARKER_GAP when textStartX is behind current position', () => { + describe('TextStartX fallback to default tab interval', () => { + it('uses default tab interval when textStartX is behind current position', () => { const blockId = 'textstartx-behind'; const block: FlowBlock = { kind: 'paragraph', @@ -1404,13 +1409,13 @@ describe('DomPainter hanging indent with tabs', () => { expect(lineEl).toBeTruthy(); // currentPos = markerStartPos (600) + markerTextWidth (140) = 740 - // textStartX (620) is behind currentPos (740), so should fall back to LIST_MARKER_GAP (8) + // textStartX (620) is behind currentPos (740), so advance to next default tab interval const tabEl = lineEl.querySelector('.superdoc-tab') as HTMLElement; expect(tabEl).toBeTruthy(); - expect(tabEl.style.width).toBe('8px'); + expect(tabEl.style.width).toBe('28px'); }); - it('should use LIST_MARKER_GAP when textStartX is undefined', () => { + it('uses default tab interval when textStartX is undefined', () => { const blockId = 'no-textstartx'; const block: FlowBlock = { kind: 'paragraph', @@ -1489,10 +1494,10 @@ describe('DomPainter hanging indent with tabs', () => { const lineEl = container.querySelector('.superdoc-line') as HTMLElement; expect(lineEl).toBeTruthy(); - // No textStartX or textStartPx, so should use LIST_MARKER_GAP (8) + // No textStartX or textStartPx, so advance to next default tab interval const tabEl = lineEl.querySelector('.superdoc-tab') as HTMLElement; expect(tabEl).toBeTruthy(); - expect(tabEl.style.width).toBe('8px'); + expect(tabEl.style.width).toBe('4px'); }); }); diff --git a/packages/layout-engine/painters/dom/src/renderer-marker-suffix.test.ts b/packages/layout-engine/painters/dom/src/renderer-marker-suffix.test.ts index c3a496a50..2c39672be 100644 --- a/packages/layout-engine/painters/dom/src/renderer-marker-suffix.test.ts +++ b/packages/layout-engine/painters/dom/src/renderer-marker-suffix.test.ts @@ -78,7 +78,7 @@ describe('DomPainter marker suffix rendering', () => { /** * Helper to create layout for a list paragraph with marker */ - function createListLayout(blockId: string, markerWidth: number): Layout { + function createListLayout(blockId: string, markerWidth: number, markerTextWidth = markerWidth): Layout { return { pageSize: { w: 400, h: 500 }, pages: [ @@ -94,6 +94,7 @@ describe('DomPainter marker suffix rendering', () => { y: 40, width: 300, markerWidth, + markerTextWidth, continuesFromPrev: false, }, ], @@ -126,9 +127,9 @@ describe('DomPainter marker suffix rendering', () => { expect(tabElement).toBeTruthy(); expect(tabElement?.innerHTML).toBe(' '); - // Default gutter width should be used (8px from LIST_MARKER_GAP constant) + // Right-justified markers use hanging indent for tab width (no hanging => 0px). const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('8px'); + expect(tabWidth).toBe('0px'); }); it('should render tab suffix with custom gutterWidthPx', () => { @@ -149,7 +150,7 @@ describe('DomPainter marker suffix rendering', () => { expect(tabElement).toBeTruthy(); const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe(`${customGutter}px`); + expect(tabWidth).toBe('0px'); }); it('should handle gutterWidthPx of 0', () => { @@ -168,9 +169,9 @@ describe('DomPainter marker suffix rendering', () => { const tabElement = container.querySelector('.superdoc-tab'); expect(tabElement).toBeTruthy(); - // Should fall back to default (LIST_MARKER_GAP = 8px) when gutterWidthPx is 0 + // Right-justified markers use hanging indent for tab width (no hanging => 0px). const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('8px'); + expect(tabWidth).toBe('0px'); }); it('should handle negative gutterWidthPx', () => { @@ -189,9 +190,9 @@ describe('DomPainter marker suffix rendering', () => { const tabElement = container.querySelector('.superdoc-tab'); expect(tabElement).toBeTruthy(); - // Should fall back to default when gutterWidthPx is negative + // Right-justified markers use hanging indent for tab width (no hanging => 0px). const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('8px'); + expect(tabWidth).toBe('0px'); }); it('should handle Infinity gutterWidthPx', () => { @@ -210,9 +211,9 @@ describe('DomPainter marker suffix rendering', () => { const tabElement = container.querySelector('.superdoc-tab'); expect(tabElement).toBeTruthy(); - // Should fall back to default when gutterWidthPx is not finite + // Right-justified markers use hanging indent for tab width (no hanging => 0px). const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('8px'); + expect(tabWidth).toBe('0px'); }); it('should handle NaN gutterWidthPx', () => { @@ -231,9 +232,9 @@ describe('DomPainter marker suffix rendering', () => { const tabElement = container.querySelector('.superdoc-tab'); expect(tabElement).toBeTruthy(); - // Should fall back to default when gutterWidthPx is NaN + // Right-justified markers use hanging indent for tab width (no hanging => 0px). const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('8px'); + expect(tabWidth).toBe('0px'); }); }); @@ -414,6 +415,7 @@ describe('DomPainter marker suffix rendering', () => { y: 40, width: 300, markerWidth: 24, + markerTextWidth: 12, continuesFromPrev: false, }, { diff --git a/packages/layout-engine/painters/dom/src/renderer-marker-textwidth.test.ts b/packages/layout-engine/painters/dom/src/renderer-marker-textwidth.test.ts index 8886830af..cf3e7cddd 100644 --- a/packages/layout-engine/painters/dom/src/renderer-marker-textwidth.test.ts +++ b/packages/layout-engine/painters/dom/src/renderer-marker-textwidth.test.ts @@ -2,7 +2,7 @@ * Comprehensive tests for markerTextWidth feature in DomPainter * * Tests the behavior of markerTextWidth property including: - * - Undefined/null fallback to markerBoxWidth + * - Missing markerTextWidth prevents list marker rendering * - Tab width calculation using markerTextWidth * - Edge cases: zero, negative, Infinity, NaN values * - Left-justified markers do NOT have fixed width set @@ -116,7 +116,7 @@ describe('DomPainter markerTextWidth feature', () => { } describe('fallback behavior when markerTextWidth is undefined/null', () => { - it('should fallback to markerBoxWidth when markerTextWidth is undefined', () => { + it('does not render list markers when markerTextWidth is undefined', () => { const blockId = 'list-undefined-textwidth'; const block = createListBlock(blockId, '1.', 'left'); const measure = createListMeasure(); @@ -131,18 +131,14 @@ describe('DomPainter markerTextWidth feature', () => { painter.paint(layout, container); - // Verify marker is rendered const markerContainer = container.querySelector('.superdoc-paragraph-marker'); - expect(markerContainer).toBeTruthy(); - expect(markerContainer?.textContent).toBe('1.'); + expect(markerContainer).toBeFalsy(); - // Verify tab element exists (confirms tab width calculation worked) const tabElement = container.querySelector('.superdoc-tab'); - expect(tabElement).toBeTruthy(); - expect(tabElement?.innerHTML).toBe(' '); + expect(tabElement).toBeFalsy(); }); - it('should fallback to markerBoxWidth when markerTextWidth is null', () => { + it('does not render list markers when markerTextWidth is null', () => { const blockId = 'list-null-textwidth'; const block = createListBlock(blockId, '2.', 'left'); const measure = createListMeasure(); @@ -158,10 +154,10 @@ describe('DomPainter markerTextWidth feature', () => { painter.paint(layout, container); const markerContainer = container.querySelector('.superdoc-paragraph-marker'); - expect(markerContainer).toBeTruthy(); + expect(markerContainer).toBeFalsy(); const tabElement = container.querySelector('.superdoc-tab'); - expect(tabElement).toBeTruthy(); + expect(tabElement).toBeFalsy(); }); }); @@ -218,7 +214,7 @@ describe('DomPainter markerTextWidth feature', () => { expect(tabWidth).toBe('33px'); }); - it('should use markerTextWidth for right-justified markers in position calculation', () => { + it('uses hanging indent for right-justified marker tab width (no hanging => 0)', () => { const blockId = 'list-right-textwidth'; const block = createListBlock(blockId, '1.', 'right'); const measure = createListMeasure(); @@ -239,12 +235,12 @@ describe('DomPainter markerTextWidth feature', () => { expect(tabElement).toBeTruthy(); const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe(`${markerGutter}px`); + expect(tabWidth).toBe('0px'); }); }); describe('edge case: markerTextWidth is 0', () => { - it('should handle markerTextWidth of 0 for left-justified markers', () => { + it('does not render list markers when markerTextWidth is 0 for left-justified markers', () => { const blockId = 'list-zero-textwidth-left'; const block = createListBlock(blockId, '', 'left'); // Empty marker const measure = createListMeasure(); @@ -260,18 +256,10 @@ describe('DomPainter markerTextWidth feature', () => { painter.paint(layout, container); const tabElement = container.querySelector('.superdoc-tab'); - expect(tabElement).toBeTruthy(); - - // With markerTextWidth = 0: - // markerStartPos = 48, currentPos = 48 + 0 = 48 - // implicitTabStop = 48, tabWidth = 48 - 48 = 0 - // Falls into tabWidth < 1 condition: DEFAULT_TAB_INTERVAL_PX - (48 % 48) - // = 48 - 0 = 0, then gets set to DEFAULT_TAB_INTERVAL_PX = 48 - const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('48px'); + expect(tabElement).toBeFalsy(); }); - it('should handle markerTextWidth of 0 for right-justified markers', () => { + it('does not render list markers when markerTextWidth is 0 for right-justified markers', () => { const blockId = 'list-zero-textwidth-right'; const block = createListBlock(blockId, '', 'right'); const measure = createListMeasure(); @@ -288,16 +276,12 @@ describe('DomPainter markerTextWidth feature', () => { painter.paint(layout, container); const tabElement = container.querySelector('.superdoc-tab'); - expect(tabElement).toBeTruthy(); - - // Right-justified uses gutter, not text width - const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe(`${markerGutter}px`); + expect(tabElement).toBeFalsy(); }); }); describe('edge case: negative markerTextWidth', () => { - it('should fallback to markerBoxWidth when markerTextWidth is negative', () => { + it('uses negative markerTextWidth directly when provided', () => { const blockId = 'list-negative-textwidth'; const block = createListBlock(blockId, 'A.', 'left'); const measure = createListMeasure(); @@ -315,17 +299,15 @@ describe('DomPainter markerTextWidth feature', () => { const tabElement = container.querySelector('.superdoc-tab'); expect(tabElement).toBeTruthy(); - // Should use markerBoxWidth (25) instead of invalid -10 - // markerStartPos = 48, currentPos = 48 + 25 = 73 - // implicitTabStop = 48, past it - // Next tab: 48 - (73 % 48) = 48 - 25 = 23 + // currentPos = 48 + (-10) = 38 + // next tab: 48 - (38 % 48) = 48 - 38 = 10 const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('23px'); + expect(tabWidth).toBe('10px'); }); }); describe('edge case: Infinity markerTextWidth', () => { - it('should fallback to markerBoxWidth when markerTextWidth is Infinity', () => { + it('does not apply a usable tab width when markerTextWidth is Infinity', () => { const blockId = 'list-infinity-textwidth'; const block = createListBlock(blockId, 'I.', 'left'); const measure = createListMeasure(); @@ -343,17 +325,13 @@ describe('DomPainter markerTextWidth feature', () => { const tabElement = container.querySelector('.superdoc-tab'); expect(tabElement).toBeTruthy(); - // Should use markerBoxWidth (28) instead of Infinity - // markerStartPos = 48, currentPos = 48 + 28 = 76 - // implicitTabStop = 48, past it - // Next tab: 48 - (76 % 48) = 48 - 28 = 20 const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('20px'); + expect(tabWidth).toBe(''); }); }); describe('edge case: NaN markerTextWidth', () => { - it('should fallback to markerBoxWidth when markerTextWidth is NaN', () => { + it('does not render list markers when markerTextWidth is NaN', () => { const blockId = 'list-nan-textwidth'; const block = createListBlock(blockId, 'III.', 'left'); const measure = createListMeasure(); @@ -369,14 +347,7 @@ describe('DomPainter markerTextWidth feature', () => { painter.paint(layout, container); const tabElement = container.querySelector('.superdoc-tab'); - expect(tabElement).toBeTruthy(); - - // Should use markerBoxWidth (32) instead of NaN - // markerStartPos = 48, currentPos = 48 + 32 = 80 - // implicitTabStop = 48, past it - // Next tab: 48 - (80 % 48) = 48 - 32 = 16 - const tabWidth = (tabElement as HTMLElement)?.style.width; - expect(tabWidth).toBe('16px'); + expect(tabElement).toBeFalsy(); }); }); @@ -403,7 +374,7 @@ describe('DomPainter markerTextWidth feature', () => { expect(markerEl.style.width).toBe(''); }); - it('should set width style on right-justified marker element', () => { + it('does not set width style on right-justified marker element', () => { const blockId = 'list-right-has-width'; const block = createListBlock(blockId, '2.', 'right'); const measure = createListMeasure(); @@ -421,12 +392,12 @@ describe('DomPainter markerTextWidth feature', () => { const markerEl = container.querySelector('.superdoc-paragraph-marker') as HTMLElement; expect(markerEl).toBeTruthy(); - // Right-justified markers SHOULD have a fixed width (markerBoxWidth, not markerTextWidth) - expect(markerEl.style.width).toBe(`${markerBoxWidth}px`); - expect(markerEl.style.textAlign).toBe('right'); + // Marker element does not apply width or alignment styles in the renderer. + expect(markerEl.style.width).toBe(''); + expect(markerEl.style.textAlign).toBe(''); }); - it('should set width style on center-justified marker element', () => { + it('does not set width style on center-justified marker element', () => { const blockId = 'list-center-has-width'; const block = createListBlock(blockId, '3.', 'center'); const measure = createListMeasure(); @@ -444,9 +415,9 @@ describe('DomPainter markerTextWidth feature', () => { const markerEl = container.querySelector('.superdoc-paragraph-marker') as HTMLElement; expect(markerEl).toBeTruthy(); - // Center-justified markers SHOULD have a fixed width (markerBoxWidth, not markerTextWidth) - expect(markerEl.style.width).toBe(`${markerBoxWidth}px`); - expect(markerEl.style.textAlign).toBe('center'); + // Marker element does not apply width or alignment styles in the renderer. + expect(markerEl.style.width).toBe(''); + expect(markerEl.style.textAlign).toBe(''); }); }); diff --git a/packages/layout-engine/painters/dom/src/table/border-utils.test.ts b/packages/layout-engine/painters/dom/src/table/border-utils.test.ts index ae9f439f1..2741ac01c 100644 --- a/packages/layout-engine/painters/dom/src/table/border-utils.test.ts +++ b/packages/layout-engine/painters/dom/src/table/border-utils.test.ts @@ -76,14 +76,18 @@ describe('applyBorder', () => { const border: BorderSpec = { style: 'none', width: 2, color: '#FF0000' }; applyBorder(element, 'Top', border); // Setting border to 'none' results in empty string or 'none' depending on browser - expect(element.style.borderTop === 'none' || element.style.borderTop === '').toBe(true); + expect( + ['', 'none', 'medium', '0px'].includes(element.style.borderTop) || /none/i.test(element.style.borderTop), + ).toBe(true); }); it('should set border to none for zero width', () => { const border: BorderSpec = { style: 'single', width: 0, color: '#FF0000' }; applyBorder(element, 'Top', border); // Setting border to 'none' results in empty string or 'none' depending on browser - expect(element.style.borderTop === 'none' || element.style.borderTop === '').toBe(true); + expect( + ['', 'none', 'medium', '0px'].includes(element.style.borderTop) || /none/i.test(element.style.borderTop), + ).toBe(true); }); it('should sanitize invalid hex color to black', () => { diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph.test.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph.test.ts index c14e89bf5..99a171afb 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph.test.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/paragraph.test.ts @@ -1,3932 +1,144 @@ /** - * Tests for Paragraph Attributes Computation Module + * Tests for Paragraph Attributes Computation Module. * - * Covers 13 exported functions for computing, merging, and normalizing paragraph attributes: - * - resolveParagraphBooleanAttr: Resolve boolean attributes from PM node - * - hasPageBreakBefore: Check for page break before paragraph - * - cloneParagraphAttrs: Deep clone paragraph attributes - * - buildStyleNodeFromAttrs: Build style node for style engine - * - normalizeListRenderingAttrs: Normalize list rendering attributes - * - buildNumberingPath: Build numbering path for multi-level lists - * - computeWordLayoutForParagraph: Compute Word paragraph layout - * - computeParagraphAttrs: Main function for computing paragraph attrs (187 lines) - * - mergeParagraphAttrs: Merge two paragraph attrs - * - convertListParagraphAttrs: Convert list paragraph attrs - * - * Note: Some tests require mocking style-engine and word-layout dependencies. + * This suite focuses on the exported helpers: + * - deepClone + * - normalizeFramePr + * - normalizeDropCap + * - computeParagraphAttrs + * - computeRunAttrs */ -import { describe, it, expect, vi } from 'vitest'; -import type { ParagraphAttrs, ParagraphIndent, ParagraphSpacing } from '@superdoc/contracts'; -import { - resolveParagraphBooleanAttr, - hasPageBreakBefore, - cloneParagraphAttrs, - buildStyleNodeFromAttrs, - normalizeListRenderingAttrs, - buildNumberingPath, - computeWordLayoutForParagraph, - computeParagraphAttrs, - mergeParagraphAttrs, - convertListParagraphAttrs, - mergeSpacingSources, - isValidNumberingId, -} from './paragraph.js'; -import type { ListCounterContext, StyleContext } from '../types.js'; +import { describe, it, expect } from 'vitest'; +import { deepClone, normalizeFramePr, normalizeDropCap, computeParagraphAttrs, computeRunAttrs } from './paragraph.js'; import { twipsToPx } from '../utilities.js'; -/** - * Mock PM node shape for testing. - * This is a minimal subset of the actual PMNode interface used by the functions under test. - * The functions only access `attrs` and optionally `content`, so this simplified type - * is structurally compatible and avoids requiring full ProseMirror node construction. - */ type PMNode = { + type?: { name?: string }; attrs?: Record; - content?: PMNode[]; - type?: string; - text?: string; - marks?: Array<{ type?: string; attrs?: Record }>; + content?: Array<{ + type?: string; + attrs?: Record; + content?: Array<{ type?: string; text?: string }>; + }>; }; -/** - * Creates a minimal StyleContext for testing. - * StyleContext has all optional properties, so an empty object is valid. - * This helper provides better type safety than `as never` type assertions. - */ -const createTestStyleContext = (overrides: Partial = {}): StyleContext => ({ - styles: {}, - defaults: {}, - ...overrides, -}); - -describe('isValidNumberingId', () => { - describe('valid numbering IDs', () => { - it('should return true for positive integer numId', () => { - expect(isValidNumberingId(1)).toBe(true); - expect(isValidNumberingId(5)).toBe(true); - expect(isValidNumberingId(100)).toBe(true); - }); - - it('should return true for positive string numId', () => { - expect(isValidNumberingId('1')).toBe(true); - expect(isValidNumberingId('5')).toBe(true); - expect(isValidNumberingId('100')).toBe(true); - }); - - it('should return true for negative numId values', () => { - // While unusual, negative values are technically valid (not the special zero value) - expect(isValidNumberingId(-1)).toBe(true); - expect(isValidNumberingId('-1')).toBe(true); - }); - }); - - describe('invalid numbering IDs (OOXML spec §17.9.16)', () => { - it('should return false for numeric zero (disables numbering)', () => { - expect(isValidNumberingId(0)).toBe(false); - }); - - it('should return false for string zero (disables numbering)', () => { - expect(isValidNumberingId('0')).toBe(false); - }); - - it('should return false for null', () => { - expect(isValidNumberingId(null)).toBe(false); - }); - - it('should return false for undefined', () => { - expect(isValidNumberingId(undefined)).toBe(false); - }); - }); - - describe('edge cases', () => { - it('should return true for empty string (not the zero sentinel)', () => { - // Empty string is not the same as '0' per OOXML spec - expect(isValidNumberingId('')).toBe(true); - }); - - it('should return true for string with leading zeros', () => { - // '00' is not the same as '0' - expect(isValidNumberingId('00')).toBe(true); - expect(isValidNumberingId('001')).toBe(true); - }); - - it('should return true for floating point numbers', () => { - // While unusual, non-zero floats are not the special zero value - expect(isValidNumberingId(1.5)).toBe(true); - expect(isValidNumberingId(0.1)).toBe(true); - }); +describe('deepClone', () => { + it('creates a deep copy of nested objects and arrays', () => { + const source = { + spacing: { before: 120, after: 240 }, + tabs: [{ val: 'start', pos: 720 }], + }; - it('should return false for string "0.0" (string comparison)', () => { - // String comparison: '0.0' !== '0', so this is technically valid - expect(isValidNumberingId('0.0')).toBe(true); - }); + const result = deepClone(source); - it('should return false for -0 (numeric zero)', () => { - // In JavaScript, -0 === 0 - expect(isValidNumberingId(-0)).toBe(false); - }); + expect(result).toEqual(source); + expect(result).not.toBe(source); + expect(result.spacing).not.toBe(source.spacing); + expect(result.tabs).not.toBe(source.tabs); }); }); -describe('resolveParagraphBooleanAttr', () => { - describe('direct attribute resolution', () => { - it('should return true for boolean true', () => { - const para: PMNode = { attrs: { bidi: true } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); - }); - - it('should return true for number 1', () => { - const para: PMNode = { attrs: { bidi: 1 } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); - }); - - it('should return true for string "true"', () => { - const para: PMNode = { attrs: { bidi: 'true' } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); - }); - - it('should return true for string "1"', () => { - const para: PMNode = { attrs: { bidi: '1' } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); - }); - - it('should return true for string "on"', () => { - const para: PMNode = { attrs: { bidi: 'on' } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); - }); - - it('should return false for boolean false', () => { - const para: PMNode = { attrs: { bidi: false } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(false); - }); - - it('should return false for number 0', () => { - const para: PMNode = { attrs: { bidi: 0 } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(false); - }); - - it('should return false for string "false"', () => { - const para: PMNode = { attrs: { bidi: 'false' } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(false); - }); - - it('should return false for string "0"', () => { - const para: PMNode = { attrs: { bidi: '0' } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(false); - }); - - it('should return false for string "off"', () => { - const para: PMNode = { attrs: { bidi: 'off' } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(false); - }); - - it('should handle case-insensitive string values', () => { - expect(resolveParagraphBooleanAttr({ attrs: { bidi: 'TRUE' } }, 'bidi', 'w:bidi')).toBe(true); - expect(resolveParagraphBooleanAttr({ attrs: { bidi: 'FALSE' } }, 'bidi', 'w:bidi')).toBe(false); - expect(resolveParagraphBooleanAttr({ attrs: { bidi: 'On' } }, 'bidi', 'w:bidi')).toBe(true); - expect(resolveParagraphBooleanAttr({ attrs: { bidi: 'Off' } }, 'bidi', 'w:bidi')).toBe(false); - }); - }); +describe('normalizeFramePr', () => { + it('normalizes frame properties and converts positions to pixels', () => { + const framePr = { + wrap: 'around', + x: 720, + y: 1440, + xAlign: 'right', + yAlign: 'center', + hAnchor: 'page', + vAnchor: 'margin', + }; - describe('paragraphProperties resolution', () => { - it('should resolve from nested paragraphProperties', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - bidi: true, - }, - }, - }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); - }); + const result = normalizeFramePr(framePr); - it('should prioritize direct attrs over paragraphProperties', () => { - const para: PMNode = { - attrs: { - bidi: true, - paragraphProperties: { - bidi: false, - }, - }, - }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); + expect(result).toEqual({ + wrap: 'around', + x: twipsToPx(720), + y: twipsToPx(1440), + xAlign: 'right', + yAlign: 'center', + hAnchor: 'page', + vAnchor: 'margin', }); }); +}); - describe('element-based resolution', () => { - it('should infer true from element without val attribute', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - elements: [{ name: 'w:bidi' }], - }, - }, - }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); - }); - - it('should infer from element with w:val attribute', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - elements: [{ name: 'w:bidi', attributes: { 'w:val': 'true' } }], - }, - }, - }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBe(true); - }); - - it('should handle element name with and without w: prefix', () => { - const para1: PMNode = { - attrs: { - paragraphProperties: { - elements: [{ name: 'w:bidi' }], - }, - }, - }; - const para2: PMNode = { - attrs: { - paragraphProperties: { - elements: [{ name: 'bidi' }], - }, - }, - }; - expect(resolveParagraphBooleanAttr(para1, 'bidi', 'bidi')).toBe(true); - expect(resolveParagraphBooleanAttr(para2, 'bidi', 'w:bidi')).toBe(true); - }); - - it('should handle multiple element names', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - elements: [{ name: 'w:keepNext' }], - }, +describe('normalizeDropCap', () => { + it('extracts drop cap run info from paragraph content', () => { + const paragraph: PMNode = { + type: { name: 'paragraph' }, + content: [ + { + type: 'run', + attrs: { runProperties: { fontSize: 24, bold: true } }, + content: [{ type: 'text', text: 'A' }], }, - }; - expect(resolveParagraphBooleanAttr(para, 'keepWithNext', ['w:keepNext', 'w:keepWithNext'])).toBe(true); - }); - }); - - describe('undefined cases', () => { - it('should return undefined when attribute not found', () => { - const para: PMNode = { attrs: {} }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBeUndefined(); - }); + ], + }; - it('should return undefined for para without attrs', () => { - const para: PMNode = {}; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBeUndefined(); - }); + const framePr = { dropCap: 'drop', lines: 2 }; + const result = normalizeDropCap(framePr, paragraph as never); - it('should return undefined for non-boolean values', () => { - const para: PMNode = { attrs: { bidi: 'unknown' } }; - expect(resolveParagraphBooleanAttr(para, 'bidi', 'w:bidi')).toBeUndefined(); - }); + expect(result?.mode).toBe('drop'); + expect(result?.lines).toBe(2); + expect(result?.run?.text).toBe('A'); + expect(result?.run?.bold).toBe(true); + expect(typeof result?.run?.fontSize).toBe('number'); }); }); -describe('hasPageBreakBefore', () => { - it('should return true for direct pageBreakBefore attribute', () => { - const para: PMNode = { attrs: { pageBreakBefore: true } }; - expect(hasPageBreakBefore(para)).toBe(true); - }); - - it('should return true for nested paragraphProperties', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - pageBreakBefore: true, - }, - }, - }; - expect(hasPageBreakBefore(para)).toBe(true); - }); - - it('should return true for element-based pageBreakBefore', () => { - const para: PMNode = { +describe('computeParagraphAttrs', () => { + it('normalizes spacing, indent, alignment, and tabs from paragraphProperties', () => { + const paragraph: PMNode = { + type: { name: 'paragraph' }, attrs: { paragraphProperties: { - elements: [{ name: 'w:pageBreakBefore' }], + justification: 'center', + spacing: { before: 240, after: 120, line: 2, lineRule: 'auto' }, + indent: { left: 720, hanging: 360 }, + tabStops: [{ val: 'left', pos: 48 }], }, }, }; - expect(hasPageBreakBefore(para)).toBe(true); - }); - - it('should return false when pageBreakBefore is false', () => { - const para: PMNode = { attrs: { pageBreakBefore: false } }; - expect(hasPageBreakBefore(para)).toBe(false); - }); - - it('should return false when pageBreakBefore is not present', () => { - const para: PMNode = { attrs: {} }; - expect(hasPageBreakBefore(para)).toBe(false); - }); - - it('should return false for para without attrs', () => { - const para: PMNode = {}; - expect(hasPageBreakBefore(para)).toBe(false); - }); -}); - -describe('cloneParagraphAttrs', () => { - it('should return undefined for undefined input', () => { - expect(cloneParagraphAttrs(undefined)).toBeUndefined(); - }); - - it('should clone simple attributes', () => { - const attrs: ParagraphAttrs = { - alignment: 'center', - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned).toEqual(attrs); - expect(cloned).not.toBe(attrs); - }); - - it('should deep clone spacing', () => { - const attrs: ParagraphAttrs = { - spacing: { before: 10, after: 20, line: 15 }, - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned?.spacing).toEqual(attrs.spacing); - expect(cloned?.spacing).not.toBe(attrs.spacing); - }); - - it('should deep clone indent', () => { - const attrs: ParagraphAttrs = { - indent: { left: 10, right: 20, firstLine: 5 }, - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned?.indent).toEqual(attrs.indent); - expect(cloned?.indent).not.toBe(attrs.indent); - }); - - it('should deep clone borders', () => { - const attrs: ParagraphAttrs = { - borders: { - top: { style: 'solid', width: 1, color: '#FF0000' }, - bottom: { style: 'dashed', width: 2, color: '#00FF00' }, - }, - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned?.borders).toEqual(attrs.borders); - expect(cloned?.borders).not.toBe(attrs.borders); - expect(cloned?.borders?.top).not.toBe(attrs.borders?.top); - expect(cloned?.borders?.bottom).not.toBe(attrs.borders?.bottom); - }); - - it('should deep clone shading', () => { - const attrs: ParagraphAttrs = { - shading: { fill: '#FFFF00', color: '#000000' }, - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned?.shading).toEqual(attrs.shading); - expect(cloned?.shading).not.toBe(attrs.shading); - }); - - it('should deep clone tabs array', () => { - const attrs: ParagraphAttrs = { - tabs: [ - { pos: 100, val: 'left' }, - { pos: 200, val: 'center' }, - ], - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned?.tabs).toEqual(attrs.tabs); - expect(cloned?.tabs).not.toBe(attrs.tabs); - expect(cloned?.tabs?.[0]).not.toBe(attrs.tabs?.[0]); - }); - - it('should clone complete paragraph attrs', () => { - const attrs: ParagraphAttrs = { - alignment: 'right', - spacing: { before: 10, after: 20 }, - indent: { left: 15, right: 25 }, - borders: { - top: { style: 'solid', width: 1 }, - }, - shading: { fill: '#FFFF00' }, - tabs: [{ pos: 100, val: 'left' }], - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned).toEqual(attrs); - expect(cloned).not.toBe(attrs); - }); - - it('should not mutate original attrs', () => { - const attrs: ParagraphAttrs = { - spacing: { before: 10 }, - }; - const cloned = cloneParagraphAttrs(attrs); - if (cloned?.spacing) { - cloned.spacing.before = 999; - } - expect(attrs.spacing?.before).toBe(10); - }); - - it('should handle borders with only some sides', () => { - const attrs: ParagraphAttrs = { - borders: { - top: { style: 'solid', width: 1 }, - }, - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned?.borders).toEqual(attrs.borders); - expect(cloned?.borders?.left).toBeUndefined(); - }); - - it('should handle empty borders object', () => { - const attrs: ParagraphAttrs = { - borders: {}, - }; - const cloned = cloneParagraphAttrs(attrs); - expect(cloned?.borders).toBeUndefined(); - }); -}); - -describe('buildStyleNodeFromAttrs', () => { - it('should return empty object for undefined attrs', () => { - const styleNode = buildStyleNodeFromAttrs(undefined); - expect(styleNode).toEqual({}); - }); - - it('should build style node with alignment', () => { - const attrs = { alignment: 'center' }; - const styleNode = buildStyleNodeFromAttrs(attrs); - expect(styleNode.paragraphProps?.alignment).toBe('center'); - }); - - it('should normalize textAlign to alignment', () => { - const attrs = { textAlign: 'right' }; - const styleNode = buildStyleNodeFromAttrs(attrs); - expect(styleNode.paragraphProps?.alignment).toBe('right'); - }); - - it('should include spacing when provided', () => { - const spacing: ParagraphSpacing = { before: 10, after: 20 }; - const styleNode = buildStyleNodeFromAttrs({}, spacing); - expect(styleNode.paragraphProps?.spacing).toBeDefined(); - }); - - it('should include indent when provided', () => { - const indent: ParagraphIndent = { left: 15, right: 25 }; - const styleNode = buildStyleNodeFromAttrs({}, undefined, indent); - expect(styleNode.paragraphProps?.indent).toBeDefined(); - }); - - it('should normalize tabs from attrs.tabs', () => { - const attrs = { - tabs: [{ pos: 100, val: 'left' }], - }; - const styleNode = buildStyleNodeFromAttrs(attrs); - expect(styleNode.paragraphProps?.tabs).toBeDefined(); - }); - - it('should normalize tabs from attrs.tabStops', () => { - const attrs = { - tabStops: [{ pos: 200, val: 'center' }], - }; - const styleNode = buildStyleNodeFromAttrs(attrs); - expect(styleNode.paragraphProps?.tabs).toBeDefined(); - }); - - it('should return empty styleNode when no paragraph props', () => { - const attrs = {}; - const styleNode = buildStyleNodeFromAttrs(attrs); - expect(styleNode).toEqual({}); - }); - - it('should build complete style node', () => { - const attrs = { alignment: 'justify' }; - const spacing: ParagraphSpacing = { before: 10 }; - const indent: ParagraphIndent = { left: 15 }; - const styleNode = buildStyleNodeFromAttrs(attrs, spacing, indent); - expect(styleNode.paragraphProps?.alignment).toBe('justify'); - expect(styleNode.paragraphProps?.spacing).toBeDefined(); - expect(styleNode.paragraphProps?.indent).toBeDefined(); - }); -}); - -describe('normalizeListRenderingAttrs', () => { - it('should return undefined for null', () => { - expect(normalizeListRenderingAttrs(null)).toBeUndefined(); - }); - - it('should return undefined for non-object', () => { - expect(normalizeListRenderingAttrs('string')).toBeUndefined(); - }); - - it('should normalize markerText', () => { - const input = { markerText: '1.' }; - const result = normalizeListRenderingAttrs(input); - expect(result?.markerText).toBe('1.'); - }); - - it('should normalize justification', () => { - expect(normalizeListRenderingAttrs({ justification: 'left' })?.justification).toBe('left'); - expect(normalizeListRenderingAttrs({ justification: 'right' })?.justification).toBe('right'); - expect(normalizeListRenderingAttrs({ justification: 'center' })?.justification).toBe('center'); - }); - - it('should reject invalid justification', () => { - expect(normalizeListRenderingAttrs({ justification: 'invalid' })?.justification).toBeUndefined(); - }); - - it('should normalize numberingType', () => { - const input = { numberingType: 'decimal' }; - const result = normalizeListRenderingAttrs(input); - expect(result?.numberingType).toBe('decimal'); - }); - - it('should normalize suffix', () => { - expect(normalizeListRenderingAttrs({ suffix: 'tab' })?.suffix).toBe('tab'); - expect(normalizeListRenderingAttrs({ suffix: 'space' })?.suffix).toBe('space'); - expect(normalizeListRenderingAttrs({ suffix: 'nothing' })?.suffix).toBe('nothing'); - }); - - it('should reject invalid suffix', () => { - expect(normalizeListRenderingAttrs({ suffix: 'invalid' })?.suffix).toBeUndefined(); - }); - - it('should normalize numeric path array', () => { - const input = { path: [1, 2, 3] }; - const result = normalizeListRenderingAttrs(input); - expect(result?.path).toEqual([1, 2, 3]); - }); - - it('should convert string numbers in path to numbers', () => { - const input = { path: ['1', '2', '3'] }; - const result = normalizeListRenderingAttrs(input); - expect(result?.path).toEqual([1, 2, 3]); - }); - - it('should filter out non-numeric values from path', () => { - const input = { path: [1, 'invalid', 2, NaN, 3] }; - const result = normalizeListRenderingAttrs(input); - expect(result?.path).toEqual([1, 2, 3]); - }); - - it('should return undefined for empty path', () => { - const input = { path: [] }; - const result = normalizeListRenderingAttrs(input); - expect(result?.path).toBeUndefined(); - }); - - it('should normalize complete list rendering attrs', () => { - const input = { - markerText: 'a)', - justification: 'left', - numberingType: 'lowerLetter', - suffix: 'tab', - path: [1, 2], - }; - const result = normalizeListRenderingAttrs(input); - expect(result).toEqual({ - markerText: 'a)', - justification: 'left', - numberingType: 'lowerLetter', - suffix: 'tab', - path: [1, 2], - }); - }); -}); - -describe('buildNumberingPath', () => { - describe('without listCounterContext', () => { - it('should build path with counterValue at target level', () => { - const path = buildNumberingPath(undefined, 0, 5); - expect(path).toEqual([5]); - }); - - it('should build path for level 0', () => { - const path = buildNumberingPath(1, 0, 3); - expect(path).toEqual([3]); - }); - - it('should build path for level 1', () => { - const path = buildNumberingPath(undefined, 1, 3); - expect(path).toEqual([1, 3]); - }); - - it('should build path for level 2', () => { - const path = buildNumberingPath(undefined, 2, 5); - expect(path).toEqual([1, 1, 5]); - }); - - it('should handle negative level as 0', () => { - const path = buildNumberingPath(undefined, -1, 3); - expect(path).toEqual([3]); - }); - - it('should floor fractional levels', () => { - const path = buildNumberingPath(undefined, 2.7, 3); - expect(path).toEqual([1, 1, 3]); - }); - }); - - describe('with listCounterContext', () => { - it('should query parent levels from context', () => { - const context: ListCounterContext = { - getListCounter: vi.fn((numId, level) => { - if (level === 0) return 2; - if (level === 1) return 3; - return 0; - }), - incrementListCounter: vi.fn(), - resetListCounter: vi.fn(), - }; - - const path = buildNumberingPath(1, 2, 7, context); - expect(path).toEqual([2, 3, 7]); - expect(context.getListCounter).toHaveBeenCalledWith(1, 0); - expect(context.getListCounter).toHaveBeenCalledWith(1, 1); - }); - - it('should use 1 for zero or negative parent values', () => { - const context: ListCounterContext = { - getListCounter: vi.fn(() => 0), - incrementListCounter: vi.fn(), - resetListCounter: vi.fn(), - }; - - const path = buildNumberingPath(1, 2, 5, context); - expect(path).toEqual([1, 1, 5]); - }); - - it('should handle level 0 without querying parents', () => { - const context: ListCounterContext = { - getListCounter: vi.fn(), - incrementListCounter: vi.fn(), - resetListCounter: vi.fn(), - }; - - const path = buildNumberingPath(1, 0, 3, context); - expect(path).toEqual([3]); - expect(context.getListCounter).not.toHaveBeenCalled(); - }); - }); -}); - -describe('mergeParagraphAttrs', () => { - it('should return undefined when both are undefined', () => { - expect(mergeParagraphAttrs(undefined, undefined)).toBeUndefined(); - }); - - it('should return override when base is undefined', () => { - const override: ParagraphAttrs = { alignment: 'center' }; - expect(mergeParagraphAttrs(undefined, override)).toBe(override); - }); - - it('should return base when override is undefined', () => { - const base: ParagraphAttrs = { alignment: 'left' }; - expect(mergeParagraphAttrs(base, undefined)).toBe(base); - }); - - it('should override alignment', () => { - const base: ParagraphAttrs = { alignment: 'left' }; - const override: ParagraphAttrs = { alignment: 'right' }; - const merged = mergeParagraphAttrs(base, override); - expect(merged?.alignment).toBe('right'); - }); - it('should merge spacing properties', () => { - const base: ParagraphAttrs = { - spacing: { before: 10, after: 20 }, - }; - const override: ParagraphAttrs = { - spacing: { after: 30, line: 15 }, - }; - const merged = mergeParagraphAttrs(base, override); - expect(merged?.spacing).toEqual({ before: 10, after: 30, line: 15 }); - }); + const { paragraphAttrs } = computeParagraphAttrs(paragraph as never); - it('should merge indent properties', () => { - const base: ParagraphAttrs = { - indent: { left: 10, right: 20 }, - }; - const override: ParagraphAttrs = { - indent: { right: 30, firstLine: 5 }, - }; - const merged = mergeParagraphAttrs(base, override); - expect(merged?.indent).toEqual({ left: 10, right: 30, firstLine: 5 }); + expect(paragraphAttrs.alignment).toBe('center'); + expect(paragraphAttrs.spacing?.before).toBe(twipsToPx(240)); + expect(paragraphAttrs.spacing?.after).toBe(twipsToPx(120)); + expect(paragraphAttrs.spacing?.line).toBe(2); + expect(paragraphAttrs.indent?.left).toBe(twipsToPx(720)); + expect(paragraphAttrs.indent?.hanging).toBe(twipsToPx(360)); + expect(paragraphAttrs.tabs?.[0]).toEqual({ val: 'start', pos: 720 }); }); - it('should merge borders', () => { - const base: ParagraphAttrs = { - borders: { - top: { style: 'solid', width: 1 }, - }, - }; - const override: ParagraphAttrs = { - borders: { - bottom: { style: 'dashed', width: 2 }, + it('exposes resolved paragraph properties when no converter context is provided', () => { + const paragraph: PMNode = { + type: { name: 'paragraph' }, + attrs: { + paragraphProperties: { styleId: 'Heading1' }, }, }; - const merged = mergeParagraphAttrs(base, override); - expect(merged?.borders?.top).toEqual({ style: 'solid', width: 1 }); - expect(merged?.borders?.bottom).toEqual({ style: 'dashed', width: 2 }); - }); - - it('should merge shading', () => { - const base: ParagraphAttrs = { - shading: { fill: '#FF0000' }, - }; - const override: ParagraphAttrs = { - shading: { color: '#00FF00' }, - }; - const merged = mergeParagraphAttrs(base, override); - expect(merged?.shading).toEqual({ fill: '#FF0000', color: '#00FF00' }); - }); - it('should not mutate base or override', () => { - const base: ParagraphAttrs = { alignment: 'left', spacing: { before: 10 } }; - const override: ParagraphAttrs = { alignment: 'right', spacing: { after: 20 } }; - const originalBase = { ...base, spacing: { ...base.spacing } }; - const originalOverride = { ...override, spacing: { ...override.spacing } }; - - mergeParagraphAttrs(base, override); - - expect(base.alignment).toBe(originalBase.alignment); - expect(override.alignment).toBe(originalOverride.alignment); + const { resolvedParagraphProperties } = computeParagraphAttrs(paragraph as never); + expect(resolvedParagraphProperties.styleId).toBe('Heading1'); }); }); -describe('convertListParagraphAttrs', () => { - it('should return undefined for undefined attrs', () => { - expect(convertListParagraphAttrs(undefined)).toBeUndefined(); - }); - - it('should return undefined for empty attrs', () => { - expect(convertListParagraphAttrs({})).toBeUndefined(); - }); - - it('should convert alignment from attrs.alignment', () => { - const attrs = { alignment: 'center' }; - const result = convertListParagraphAttrs(attrs); - expect(result?.alignment).toBe('center'); - }); - - it('should convert alignment from attrs.lvlJc', () => { - const attrs = { lvlJc: 'right' }; - const result = convertListParagraphAttrs(attrs); - expect(result?.alignment).toBe('right'); - }); - - it('should prioritize alignment over lvlJc', () => { - const attrs = { alignment: 'center', lvlJc: 'right' }; - const result = convertListParagraphAttrs(attrs); - expect(result?.alignment).toBe('center'); - }); - - it('should convert spacing', () => { - const attrs = { - spacing: { before: 150, after: 300 }, // 10px and 20px in twips +describe('computeRunAttrs', () => { + it('normalizes font family, font size, and color', () => { + const runProps = { + fontFamily: { ascii: 'Arial' }, + fontSize: 24, + color: { val: 'ff0000' }, }; - const result = convertListParagraphAttrs(attrs); - expect(result?.spacing).toEqual({ before: 10, after: 20 }); - }); - - it('should convert shading', () => { - const attrs = { - shading: { fill: '#FFFF00' }, - }; - const result = convertListParagraphAttrs(attrs); - expect(result?.shading).toEqual({ fill: '#FFFF00' }); - }); - - it('should convert complete list paragraph attrs', () => { - const attrs = { - alignment: 'justify', - spacing: { before: 75 }, // 5px in twips - shading: { fill: '#FF0000' }, - }; - const result = convertListParagraphAttrs(attrs); - expect(result).toEqual({ - alignment: 'justify', - spacing: { before: 5 }, - shading: { fill: '#FF0000' }, - }); - }); -}); -describe('computeWordLayoutForParagraph', () => { - it('should return null on error', () => { - // This will cause computeWordParagraphLayout to throw - const paragraphAttrs: ParagraphAttrs = {}; - const numberingProps = null; // Invalid - const styleContext = createTestStyleContext(); - - const result = computeWordLayoutForParagraph(paragraphAttrs, numberingProps, styleContext); - expect(result).toBeNull(); - }); + const result = computeRunAttrs(runProps as never); - it('should handle paragraphAttrs without indent', () => { - const paragraphAttrs: ParagraphAttrs = { - alignment: 'left', - }; - const numberingProps = { - numId: 1, - ilvl: 0, - }; - const styleContext = createTestStyleContext({ - defaults: { - defaultTabIntervalTwips: 720, - decimalSeparator: '.', - }, - }); - - const result = computeWordLayoutForParagraph(paragraphAttrs, numberingProps, styleContext); - // Result depends on computeWordParagraphLayout implementation - // We're just testing it doesn't throw - expect(result).toBeDefined(); - }); - - it('should merge resolvedLevelIndent with paragraph indent', () => { - const paragraphAttrs: ParagraphAttrs = { - indent: { left: 10 }, - }; - const numberingProps = { - numId: 1, - ilvl: 0, - resolvedLevelIndent: { left: 1440 }, // 1 inch in twips - }; - const styleContext = createTestStyleContext({ - defaults: { - defaultTabIntervalTwips: 720, - decimalSeparator: '.', - }, - }); - - const result = computeWordLayoutForParagraph(paragraphAttrs, numberingProps, styleContext); - expect(result).toBeDefined(); - }); - - it('should use default values from styleContext', () => { - const paragraphAttrs: ParagraphAttrs = {}; - const numberingProps = { numId: 1, ilvl: 0 }; - const styleContext = createTestStyleContext({ - defaults: { - defaultTabIntervalTwips: 360, - decimalSeparator: ',', - }, - }); - - const result = computeWordLayoutForParagraph(paragraphAttrs, numberingProps, styleContext); - expect(result).toBeDefined(); - }); -}); - -describe('computeParagraphAttrs', () => { - // Note: Full testing of computeParagraphAttrs requires mocking resolveStyle and other dependencies - // These tests cover basic scenarios - - it('should return undefined for para without attrs', () => { - const para: PMNode = {}; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - // May return undefined or minimal attrs depending on style resolution - expect(result).toBeDefined(); - }); - - it('should set direction and rtl for bidi paragraphs', () => { - const para: PMNode = { - attrs: { bidi: true }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.direction).toBe('rtl'); - expect(result?.rtl).toBe(true); - }); - - it('should default bidi paragraphs to right alignment', () => { - const para: PMNode = { - attrs: { bidi: true }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.alignment).toBe('right'); - }); - - it('should respect explicit alignment over bidi default', () => { - const para: PMNode = { - attrs: { bidi: true, alignment: 'center' }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.alignment).toBe('center'); - }); - - it('should keep explicit indent when numbering resolvedLevelIndent is present', () => { - const para: PMNode = { - attrs: { - indent: { left: 24, firstLine: 12 }, - numberingProperties: { - numId: 1, - ilvl: 2, - resolvedLevelIndent: { left: 1440, hanging: 720 }, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Explicit indent (24px) should not be replaced by the numbering indent (~96px) - expect(result?.indent?.left).toBeDefined(); - expect(result?.indent?.left).toBeLessThan(twipsToPx(1440)); - expect(result?.indent?.left).toBeCloseTo(24); - }); - - it('converts small twips indent values from paragraphProperties', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - indent: { - firstLine: 14, - }, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.indent?.firstLine).toBeCloseTo(twipsToPx(14)); - }); - - it('merges style-based firstLine indent with inline right indent', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - indent: { - right: 360, // 0.25in in twips - }, - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { - firstLine: 720, // 0.5in in twips - }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.indent?.firstLine).toBeCloseTo(twipsToPx(720)); - expect(result?.indent?.right).toBeCloseTo(twipsToPx(360)); - }); - - it('should not force first-line indent mode when paragraph overrides numbering firstLine', () => { - const para: PMNode = { - attrs: { - indent: { left: 0, firstLine: 0 }, - numberingProperties: { - numId: 1, - ilvl: 0, - resolvedLevelIndent: { left: 0, firstLine: 2160 }, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.wordLayout?.firstLineIndentMode).not.toBe(true); - expect(result?.wordLayout?.textStartPx).toBe(0); - expect(result?.wordLayout?.marker?.textStartX).toBe(0); - }); - - it('should normalize paragraph borders', () => { - const para: PMNode = { - attrs: { - borders: { - top: { val: 'single', size: 2, color: 'FF0000' }, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.borders).toBeDefined(); - }); - - it('should normalize paragraph shading', () => { - const para: PMNode = { - attrs: { - shading: { fill: '#FFFF00' }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.shading).toBeDefined(); - }); - - it('should include custom decimalSeparator', () => { - const para: PMNode = { attrs: {} }; - const styleContext = createTestStyleContext({ - defaults: { - decimalSeparator: ',', - }, - }); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.decimalSeparator).toBe(','); - }); - - it('should extract floatAlignment from framePr', () => { - const para: PMNode = { - attrs: { - framePr: { xAlign: 'right' }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.floatAlignment).toBe('right'); - }); - - it('should surface frame positioning data from framePr', () => { - const para: PMNode = { - attrs: { - framePr: { xAlign: 'right', wrap: 'none', y: 1440, hAnchor: 'margin', vAnchor: 'text' }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.frame?.wrap).toBe('none'); - expect(result?.frame?.xAlign).toBe('right'); - expect(result?.frame?.vAnchor).toBe('text'); - expect(result?.frame?.hAnchor).toBe('margin'); - expect(result?.frame?.y).toBeCloseTo(twipsToPx(1440)); - }); - - it('should handle framePr in paragraphProperties (raw OOXML elements)', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - elements: [ - { - name: 'w:framePr', - attributes: { 'w:xAlign': 'center' }, - }, - ], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.floatAlignment).toBe('center'); - }); - - it('should handle framePr in paragraphProperties (decoded object from v3 translator)', () => { - // This is the format produced by the v3 translator when importing DOCX - // Headers/footers with right-aligned page numbers use this structure - const para: PMNode = { - attrs: { - paragraphProperties: { - framePr: { xAlign: 'right', wrap: 'none', hAnchor: 'margin', vAnchor: 'text', y: 1440 }, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - expect(result?.floatAlignment).toBe('right'); - expect(result?.frame?.wrap).toBe('none'); - expect(result?.frame?.xAlign).toBe('right'); - expect(result?.frame?.hAnchor).toBe('margin'); - expect(result?.frame?.vAnchor).toBe('text'); - expect(result?.frame?.y).toBeCloseTo(twipsToPx(1440)); - }); - - it('should handle numberingProperties with list counter', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: 1, - ilvl: 0, - }, - }, - }; - const styleContext = createTestStyleContext(); - const listCounterContext: ListCounterContext = { - getListCounter: vi.fn(() => 0), - incrementListCounter: vi.fn(() => 1), - resetListCounter: vi.fn(), - }; - - const result = computeParagraphAttrs(para, styleContext, listCounterContext); - expect(result?.numberingProperties).toBeDefined(); - expect(listCounterContext.incrementListCounter).toHaveBeenCalledWith(1, 0); - }); - - describe('numId=0 disables numbering (OOXML spec §17.9.16)', () => { - it('should not create numberingProperties when numId is numeric 0', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: 0, - ilvl: 0, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // numId=0 disables numbering, so numberingProperties should not be set - expect(result?.numberingProperties).toBeUndefined(); - expect(result?.wordLayout).toBeUndefined(); - }); - - it('should not create numberingProperties when numId is string "0"', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: '0', - ilvl: 0, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // numId='0' disables numbering, so numberingProperties should not be set - expect(result?.numberingProperties).toBeUndefined(); - expect(result?.wordLayout).toBeUndefined(); - }); - - it('should not increment list counter when numId is 0', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: 0, - ilvl: 0, - }, - }, - }; - const styleContext = createTestStyleContext(); - const listCounterContext: ListCounterContext = { - getListCounter: vi.fn(() => 0), - incrementListCounter: vi.fn(() => 1), - resetListCounter: vi.fn(), - }; - - computeParagraphAttrs(para, styleContext, listCounterContext); - - // numId=0 should skip list counter logic entirely - expect(listCounterContext.incrementListCounter).not.toHaveBeenCalled(); - expect(listCounterContext.resetListCounter).not.toHaveBeenCalled(); - }); - - it('should not increment list counter when numId is "0"', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: '0', - ilvl: 2, - }, - }, - }; - const styleContext = createTestStyleContext(); - const listCounterContext: ListCounterContext = { - getListCounter: vi.fn(() => 0), - incrementListCounter: vi.fn(() => 1), - resetListCounter: vi.fn(), - }; - - computeParagraphAttrs(para, styleContext, listCounterContext); - - // numId='0' should skip list counter logic entirely - expect(listCounterContext.incrementListCounter).not.toHaveBeenCalled(); - expect(listCounterContext.resetListCounter).not.toHaveBeenCalled(); - }); - - it('should create numberingProperties for valid numId=1', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: 1, - ilvl: 0, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Valid numId should create numberingProperties - expect(result?.numberingProperties).toBeDefined(); - expect(result?.numberingProperties?.numId).toBe(1); - }); - - it('should create numberingProperties for valid numId="5"', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: '5', - ilvl: 1, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Valid string numId should create numberingProperties - expect(result?.numberingProperties).toBeDefined(); - expect(result?.numberingProperties?.numId).toBe('5'); - }); - - it('should skip word layout processing when numId is 0', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: 0, - ilvl: 0, - format: 'decimal', - lvlText: '%1.', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // numId=0 should skip word layout entirely - expect(result?.wordLayout).toBeUndefined(); - }); - - it('should skip word layout processing when numId is "0"', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: '0', - ilvl: 1, - format: 'lowerLetter', - lvlText: '%1)', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // numId='0' should skip word layout entirely - expect(result?.wordLayout).toBeUndefined(); - }); - }); - - it('should reset deeper list levels', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: 1, - ilvl: 2, - }, - }, - }; - const styleContext = createTestStyleContext(); - const listCounterContext: ListCounterContext = { - getListCounter: vi.fn(() => 1), - incrementListCounter: vi.fn(() => 3), - resetListCounter: vi.fn(), - }; - - computeParagraphAttrs(para, styleContext, listCounterContext); - - // Should reset levels 3-8 - expect(listCounterContext.resetListCounter).toHaveBeenCalled(); - // Access mock.calls through the vitest Mock interface - const resetMock = vi.mocked(listCounterContext.resetListCounter); - const resetCalls = resetMock.mock.calls; - expect(resetCalls.length).toBeGreaterThan(0); - expect(resetCalls.some((call) => call[1] === 3)).toBe(true); - }); - - it('hydrates numbering details from converterContext definitions', () => { - const para: PMNode = { - attrs: { - numberingProperties: { numId: 7, ilvl: 1 }, - }, - }; - const styleContext = createTestStyleContext({ - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }); - const converterContext = { - numbering: { - definitions: { - '7': { - name: 'w:num', - attributes: { 'w:numId': '7' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '3' } }], - }, - }, - abstracts: { - '3': { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '3' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '1' }, - elements: [ - { name: 'w:start', attributes: { 'w:val': '1' } }, - { name: 'w:numFmt', attributes: { 'w:val': 'lowerLetter' } }, - { name: 'w:lvlText', attributes: { 'w:val': '%2.' } }, - { name: 'w:lvlJc', attributes: { 'w:val': 'left' } }, - { name: 'w:suff', attributes: { 'w:val': 'space' } }, - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '1440', 'w:hanging': '360' } }], - }, - { - name: 'w:rPr', - elements: [ - { name: 'w:rFonts', attributes: { 'w:ascii': 'Arial' } }, - { name: 'w:color', attributes: { 'w:val': '5C5C5F' } }, - { name: 'w:sz', attributes: { 'w:val': '16' } }, - ], - }, - ], - }, - ], - }, - }, - }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, converterContext); - - expect(result?.numberingProperties?.format).toBe('lowerLetter'); - expect(result?.numberingProperties?.lvlText).toBe('%2.'); - expect(result?.numberingProperties?.start).toBe(1); - expect(result?.numberingProperties?.lvlJc).toBe('left'); - expect(result?.numberingProperties?.suffix).toBe('space'); - expect(result?.numberingProperties?.resolvedLevelIndent).toEqual({ left: 1440, hanging: 360 }); - expect(result?.wordLayout?.marker?.markerText).toBe('a.'); - - const markerRun = (result?.numberingProperties as Record)?.resolvedMarkerRpr as - | Record - | undefined; - expect(markerRun?.fontFamily).toBe('Arial'); - }); - - describe('unwrapTabStops function', () => { - // Note: unwrapTabStops is a private function inside computeParagraphAttrs - // We test it indirectly through computeParagraphAttrs by passing various tabStops formats - - it('should unwrap nested tab format { tab: { tabType, pos } }', () => { - const para: PMNode = { - attrs: { - tabs: [{ tab: { tabType: 'start', pos: 2880 } }], // Use value > 1000 so it stays as twips - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.[0].val).toBe('start'); - expect(result?.tabs?.[0].pos).toBe(2880); // Stays as twips (> 1000 threshold) - }); - - it('should handle direct format { val, pos }', () => { - const para: PMNode = { - attrs: { - tabs: [{ val: 'center', pos: 1440 }], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.[0].val).toBe('center'); - expect(result?.tabs?.[0].pos).toBe(1440); - }); - - it('should skip invalid entries with missing required fields', () => { - const para: PMNode = { - attrs: { - tabs: [ - { val: 'start' }, // Missing pos - { pos: 720 }, // Missing val - { val: 'center', pos: 1440 }, // Valid - ], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs).toHaveLength(1); - expect(result?.tabs?.[0].val).toBe('center'); - }); - - it('should add originalPos when extracting from nested format', () => { - const para: PMNode = { - attrs: { - tabs: [{ tab: { tabType: 'start', pos: 4320 } }], // Use value > 1000 so it stays as twips - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.[0].pos).toBe(4320); // Stays as twips (> 1000 threshold) - // The originalPos is set internally during unwrapping - }); - - it('should handle mixed valid and invalid entries', () => { - const para: PMNode = { - attrs: { - tabs: [ - { tab: { tabType: 'start', pos: 2880 } }, // Valid nested (> 1000 threshold) - null, // Invalid: null - { val: 'center', pos: 1440 }, // Valid direct - 'invalid', // Invalid: string - { tab: 'invalid' }, // Invalid: tab is not an object - { val: 'end', pos: 2160 }, // Valid direct - ], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs).toHaveLength(3); - // Note: tabs are now sorted by position, so order is 1440, 2160, 2880 - expect(result?.tabs?.[0].val).toBe('center'); - expect(result?.tabs?.[0].pos).toBe(1440); - expect(result?.tabs?.[1].val).toBe('end'); - expect(result?.tabs?.[1].pos).toBe(2160); - expect(result?.tabs?.[2].val).toBe('start'); - expect(result?.tabs?.[2].pos).toBe(2880); - }); - - it('should return undefined for non-array input', () => { - const para: PMNode = { - attrs: { - tabs: 'not an array', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // When tabs is not an array, unwrapTabStops returns undefined - // computeParagraphAttrs may still set tabs from other sources - expect(result).toBeDefined(); - }); - - it('should handle nested format with originalPos', () => { - const para: PMNode = { - attrs: { - tabs: [{ tab: { tabType: 'start', pos: 500, originalPos: 720 } }], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.[0].pos).toBe(720); // Uses originalPos - }); - - it('should handle nested format with leader', () => { - const para: PMNode = { - attrs: { - tabs: [{ tab: { tabType: 'end', pos: 1440, leader: 'dot' } }], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.[0].val).toBe('end'); - expect(result?.tabs?.[0].leader).toBe('dot'); - }); - - it('should skip entries with invalid nested tab structure', () => { - const para: PMNode = { - attrs: { - tabs: [ - { tab: null }, // Invalid: tab is null - { tab: { tabType: 'start', pos: 2880 } }, // Valid (> 1000 threshold) - { tab: { pos: 1440 } }, // Invalid: missing tabType - { tab: { tabType: 'center' } }, // Invalid: missing pos - ], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs).toHaveLength(1); - expect(result?.tabs?.[0].val).toBe('start'); - }); - - it('should handle empty array', () => { - const para: PMNode = { - attrs: { - tabs: [], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Empty array returns undefined from unwrapTabStops - expect(result).toBeDefined(); - }); - - it('should handle direct format with val property fallback', () => { - const para: PMNode = { - attrs: { - tabs: [{ tab: { val: 'start', pos: 2880 } }], // val instead of tabType in nested format (> 1000 threshold) - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.[0].val).toBe('start'); - }); - - it('should preserve leader in direct format', () => { - const para: PMNode = { - attrs: { - tabs: [{ val: 'decimal', pos: 2880, leader: 'hyphen' }], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.[0].leader).toBe('hyphen'); - }); - }); - - describe('mergeTabStopSources behavior', () => { - // Note: mergeTabStopSources is an internal function that merges tab stops from multiple sources. - // We test it indirectly through computeParagraphAttrs by providing tabs in attrs, hydrated, and paragraphProps. - - it('should merge tab stops from attrs and hydrated sources', () => { - const para: PMNode = { - attrs: { - tabs: [{ val: 'left', pos: 1440 }], // Tab at position 1440 - }, - }; - const styleContext = createTestStyleContext({ - styles: { - testStyle: { - type: 'paragraph', - paragraphProps: { - tabStops: [{ val: 'center', pos: 2880 }], // Tab at position 2880 - }, - }, - }, - }); - - // Pass hydrated props via a style reference - para.attrs = { - ...para.attrs, - styleId: 'testStyle', - }; - - const result = computeParagraphAttrs(para, styleContext); - - // Should have both tabs merged - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.length).toBeGreaterThanOrEqual(1); - }); - - it('should override tab stops at same position with later source', () => { - // When multiple sources have tabs at the same position, later sources win - // Merge order is: hydratedTabStops, paragraphTabStops, attrTabStops - // So attrTabStops (last) should override earlier sources - const para: PMNode = { - attrs: { - tabs: [{ val: 'decimal', pos: 1440 }], // Same position as style, different alignment - styleId: 'testStyle', - }, - }; - const styleContext = createTestStyleContext({ - styles: { - testStyle: { - type: 'paragraph', - paragraphProps: { - tabStops: [{ val: 'center', pos: 1440 }], // Same position - }, - }, - }, - }); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - // attrTabStops is processed last, so 'decimal' should override 'center' - const tab1440 = result?.tabs?.find((t) => t.pos === 1440); - expect(tab1440?.val).toBe('decimal'); - }); - - it('should sort merged tab stops by position', () => { - const para: PMNode = { - attrs: { - // Just test sorting with direct tabs from attrs - tabs: [ - { val: 'end', pos: 4320 }, // Third position - { val: 'center', pos: 2880 }, // Second position - { val: 'start', pos: 1440 }, // First position - ], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.length).toBe(3); - // Should be sorted by position - expect(result?.tabs?.[0].pos).toBe(1440); - expect(result?.tabs?.[0].val).toBe('start'); - expect(result?.tabs?.[1].pos).toBe(2880); - expect(result?.tabs?.[1].val).toBe('center'); - expect(result?.tabs?.[2].pos).toBe(4320); - expect(result?.tabs?.[2].val).toBe('end'); - }); - - it('should handle getTabStopPosition with originalPos property', () => { - const para: PMNode = { - attrs: { - tabs: [{ val: 'left', originalPos: 1440, pos: 100 }], // originalPos takes priority - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - // The merge uses originalPos for deduplication key - expect(result?.tabs?.[0].pos).toBe(1440); // Uses originalPos - }); - - it('should handle getTabStopPosition with position property', () => { - const para: PMNode = { - attrs: { - tabStops: [{ val: 'left', position: 2880 }], // Uses position property - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - }); - - it('should handle getTabStopPosition with offset property', () => { - const para: PMNode = { - attrs: { - tabStops: [{ val: 'center', offset: 1440 }], // Uses offset property - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - }); - - it('should skip tab stops without valid position', () => { - const para: PMNode = { - attrs: { - tabs: [ - { val: 'left' }, // No position - should be skipped by merge - { val: 'center', pos: 1440 }, // Valid - ], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - // Only the valid tab should be included - expect(result?.tabs?.length).toBe(1); - expect(result?.tabs?.[0].val).toBe('center'); - }); - - it('should deduplicate tabs at same position from different sources', () => { - const para: PMNode = { - attrs: { - tabs: [ - { val: 'center', pos: 1440 }, - { val: 'decimal', pos: 1440 }, // Same position, should be deduplicated - ], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - // Should only have one tab at position 1440 (last one wins) - const tabs1440 = result?.tabs?.filter((t) => t.pos === 1440); - expect(tabs1440?.length).toBe(1); - expect(tabs1440?.[0].val).toBe('decimal'); - }); - - it('should deduplicate tabs that normalize to the same position', () => { - const para: PMNode = { - attrs: { - tabs: [{ val: 'decimal', pos: 96 }], // 96px -> 1440 twips - styleId: 'testStyle', - }, - }; - const styleContext = createTestStyleContext({ - styles: { - testStyle: { - type: 'paragraph', - paragraphProps: { - tabStops: [{ val: 'center', pos: 1440 }], // Same position in twips - }, - }, - }, - }); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - const tabs1440 = result?.tabs?.filter((t) => t.pos === 1440); - expect(tabs1440?.length).toBe(1); - expect(tabs1440?.[0].val).toBe('decimal'); - }); - - it('should return undefined when all sources are empty or invalid', () => { - const para: PMNode = { - attrs: { - tabs: [], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // No tabs should be set when all sources are empty - expect(result?.tabs).toBeUndefined(); - }); - - it('should handle non-object entries in tab array', () => { - const para: PMNode = { - attrs: { - tabs: [ - null, - undefined, - 'string', - 123, - { val: 'center', pos: 1440 }, // Only valid entry - ], - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.tabs).toBeDefined(); - expect(result?.tabs?.length).toBe(1); - expect(result?.tabs?.[0].val).toBe('center'); - }); - }); - - describe('framePr edge cases and validation', () => { - it('should return undefined for empty framePr object', () => { - const para: PMNode = { - attrs: { framePr: {} }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Empty framePr should not produce floatAlignment or frame - expect(result?.floatAlignment).toBeUndefined(); - expect(result?.frame).toBeUndefined(); - }); - - it('should handle framePr with attributes wrapper but empty attributes', () => { - const para: PMNode = { - attrs: { framePr: { attributes: {} } }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.floatAlignment).toBeUndefined(); - expect(result?.frame).toBeUndefined(); - }); - - it('should handle non-numeric x/y values gracefully', () => { - const para: PMNode = { - attrs: { - framePr: { - xAlign: 'right', - x: 'invalid', - y: 'bad', - wrap: 'none', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Should extract valid xAlign and wrap, ignore invalid x/y - expect(result?.floatAlignment).toBe('right'); - expect(result?.frame?.xAlign).toBe('right'); - expect(result?.frame?.wrap).toBe('none'); - expect(result?.frame?.x).toBeUndefined(); - expect(result?.frame?.y).toBeUndefined(); - }); - - it('should use w:prefixed keys first via nullish coalescing', () => { - const para: PMNode = { - attrs: { - framePr: { - 'w:xAlign': 'right', - xAlign: 'left', // Should be ignored due to nullish coalescing - 'w:wrap': 'around', - wrap: 'none', // Should be ignored - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Should prefer w:prefixed keys - expect(result?.floatAlignment).toBe('right'); - expect(result?.frame?.xAlign).toBe('right'); - expect(result?.frame?.wrap).toBe('around'); - }); - - it('should return undefined frame when all framePr values are invalid', () => { - const para: PMNode = { - attrs: { - framePr: { - xAlign: 'invalid', - yAlign: 'invalid', - x: 'bad', - y: 'bad', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Invalid xAlign should not produce floatAlignment - expect(result?.floatAlignment).toBeUndefined(); - // Frame is still set with invalid xAlign (validation deferred to renderer) - expect(result?.frame?.xAlign).toBe('invalid'); - expect(result?.frame?.yAlign).toBe('invalid'); - // Invalid x and y should not be set - expect(result?.frame?.x).toBeUndefined(); - expect(result?.frame?.y).toBeUndefined(); - }); - - it('should handle mixed valid and invalid framePr properties', () => { - const para: PMNode = { - attrs: { - framePr: { - xAlign: 'center', // valid - yAlign: 'top', // valid - x: 'bad', // invalid - y: 720, // valid - wrap: 'none', // valid - hAnchor: 'margin', // valid - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.floatAlignment).toBe('center'); - expect(result?.frame?.xAlign).toBe('center'); - expect(result?.frame?.yAlign).toBe('top'); - expect(result?.frame?.x).toBeUndefined(); - expect(result?.frame?.y).toBeCloseTo(twipsToPx(720)); - expect(result?.frame?.wrap).toBe('none'); - expect(result?.frame?.hAnchor).toBe('margin'); - }); - - it('should handle framePr with null values', () => { - const para: PMNode = { - attrs: { - framePr: { - xAlign: null, - wrap: null, - y: 1440, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Null values should be ignored by nullish coalescing - expect(result?.floatAlignment).toBeUndefined(); - // Only y should be set - expect(result?.frame?.xAlign).toBeUndefined(); - expect(result?.frame?.wrap).toBeUndefined(); - expect(result?.frame?.y).toBeCloseTo(twipsToPx(1440)); - }); - - it('should handle very large numeric values for x and y', () => { - const para: PMNode = { - attrs: { - framePr: { - xAlign: 'left', - x: Number.MAX_SAFE_INTEGER, - y: Number.MAX_SAFE_INTEGER, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.floatAlignment).toBe('left'); - // Large values should be converted but remain finite - expect(result?.frame?.x).toBeDefined(); - expect(Number.isFinite(result?.frame?.x)).toBe(true); - expect(result?.frame?.y).toBeDefined(); - expect(Number.isFinite(result?.frame?.y)).toBe(true); - }); - - it('should convert case-insensitive xAlign values correctly', () => { - const testCases = [ - { input: 'LEFT', expected: 'left' }, - { input: 'Right', expected: 'right' }, - { input: 'CENTER', expected: 'center' }, - { input: 'CeNtEr', expected: 'center' }, - ]; - - testCases.forEach(({ input, expected }) => { - const para: PMNode = { - attrs: { - framePr: { xAlign: input }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.floatAlignment).toBe(expected); - expect(result?.frame?.xAlign).toBe(expected); - }); - }); - - it('should set yAlign values without validation', () => { - const para: PMNode = { - attrs: { - framePr: { - xAlign: 'center', - yAlign: 'bottom', - wrap: 'none', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // xAlign should still work - expect(result?.floatAlignment).toBe('center'); - expect(result?.frame?.xAlign).toBe('center'); - // yAlign set as-is (no validation at this stage) - expect(result?.frame?.yAlign).toBe('bottom'); - expect(result?.frame?.wrap).toBe('none'); - }); - - it('should handle framePr with only positioning properties (no alignment)', () => { - const para: PMNode = { - attrs: { - framePr: { - x: 1440, - y: 2880, - hAnchor: 'page', - vAnchor: 'page', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // No xAlign means no floatAlignment - expect(result?.floatAlignment).toBeUndefined(); - // But frame should still be set with positioning - expect(result?.frame?.x).toBeCloseTo(twipsToPx(1440)); - expect(result?.frame?.y).toBeCloseTo(twipsToPx(2880)); - expect(result?.frame?.hAnchor).toBe('page'); - expect(result?.frame?.vAnchor).toBe('page'); - }); - - it('should handle framePr with dropCap property', () => { - const para: PMNode = { - attrs: { - framePr: { - dropCap: 'drop', - xAlign: 'left', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.dropCap).toBe('drop'); - expect(result?.floatAlignment).toBe('left'); - }); - - it('should handle w:prefixed dropCap property', () => { - const para: PMNode = { - attrs: { - framePr: { - 'w:dropCap': 'margin', - xAlign: 'center', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.dropCap).toBe('margin'); - expect(result?.floatAlignment).toBe('center'); - }); - - it('should build dropCapDescriptor with mode and lines from framePr', () => { - const para: PMNode = { - attrs: { - framePr: { - dropCap: 'drop', - lines: 3, - wrap: 'around', - }, - }, - content: [ - { - type: 'text', - text: 'D', - marks: [ - { - type: 'textStyle', - attrs: { - fontSize: '156px', - fontFamily: 'Times New Roman', - }, - }, - ], - }, - ], - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.dropCapDescriptor).toBeDefined(); - expect(result?.dropCapDescriptor?.mode).toBe('drop'); - expect(result?.dropCapDescriptor?.lines).toBe(3); - expect(result?.dropCapDescriptor?.wrap).toBe('around'); - expect(result?.dropCapDescriptor?.run.text).toBe('D'); - expect(result?.dropCapDescriptor?.run.fontFamily).toBe('Times New Roman'); - expect(result?.dropCapDescriptor?.run.fontSize).toBe(156); - }); - - it('should build dropCapDescriptor with margin mode', () => { - const para: PMNode = { - attrs: { - framePr: { - 'w:dropCap': 'margin', - 'w:lines': 2, - }, - }, - content: [ - { - type: 'text', - text: 'W', - }, - ], - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.dropCapDescriptor).toBeDefined(); - expect(result?.dropCapDescriptor?.mode).toBe('margin'); - expect(result?.dropCapDescriptor?.lines).toBe(2); - }); - - it('should extract font styling from nested run nodes', () => { - const para: PMNode = { - attrs: { - framePr: { - dropCap: 'drop', - lines: 4, - }, - }, - content: [ - { - type: 'run', - attrs: { - runProperties: { - fontSize: '117pt', - fontFamily: 'Georgia', - bold: true, - italic: true, - color: '0000FF', - }, - }, - content: [ - { - type: 'text', - text: 'A', - }, - ], - }, - ], - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.dropCapDescriptor).toBeDefined(); - expect(result?.dropCapDescriptor?.run.text).toBe('A'); - expect(result?.dropCapDescriptor?.run.fontFamily).toBe('Georgia'); - expect(result?.dropCapDescriptor?.run.bold).toBe(true); - expect(result?.dropCapDescriptor?.run.italic).toBe(true); - expect(result?.dropCapDescriptor?.run.color).toBe('#0000FF'); - }); - - it('should default to 3 lines when lines not specified', () => { - const para: PMNode = { - attrs: { - framePr: { - dropCap: 'drop', - }, - }, - content: [{ type: 'text', text: 'B' }], - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.dropCapDescriptor?.lines).toBe(3); - }); - - it('should not create dropCapDescriptor without content', () => { - const para: PMNode = { - attrs: { - framePr: { - dropCap: 'drop', - lines: 3, - }, - }, - content: [], - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.dropCapDescriptor).toBeUndefined(); - }); - - it('should normalize wrap value to proper casing', () => { - const para: PMNode = { - attrs: { - framePr: { - dropCap: 'drop', - wrap: 'notBeside', - }, - }, - content: [{ type: 'text', text: 'C' }], - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.dropCapDescriptor?.wrap).toBe('notBeside'); - }); - - it('should handle OOXML half-points font size format', () => { - const para: PMNode = { - attrs: { - framePr: { - dropCap: 'drop', - }, - }, - content: [ - { - type: 'run', - attrs: { - runProperties: { - sz: 234, // Half-points: 234 = 117pt - }, - }, - content: [{ type: 'text', text: 'E' }], - }, - ], - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // 117pt ≈ 156px (at 96dpi) - expect(result?.dropCapDescriptor?.run.fontSize).toBeCloseTo(156, 0); - }); - }); -}); - -describe('mergeSpacingSources', () => { - describe('priority order', () => { - it('should prioritize attrs over paragraphProps and base', () => { - const base = { before: 10, after: 10, line: 1.0 }; - const paragraphProps = { before: 15, after: 15 }; - const attrs = { before: 20, line: 2.0 }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 20, // from attrs (highest priority) - after: 15, // from paragraphProps (middle priority) - line: 2.0, // from attrs - }); - }); - - it('should prioritize paragraphProps over base when attrs is empty', () => { - const base = { before: 10, after: 10, line: 1.0 }; - const paragraphProps = { before: 15, line: 1.5 }; - const attrs = {}; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 15, // from paragraphProps (overrides base) - after: 10, // from base (not overridden) - line: 1.5, // from paragraphProps (overrides base) - }); - }); - - it('should use base when paragraphProps and attrs are empty', () => { - const base = { before: 10, after: 10, line: 1.0 }; - const paragraphProps = {}; - const attrs = {}; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 10, - after: 10, - line: 1.0, - }); - }); - - it('should handle correct priority chain: base < paragraphProps < attrs', () => { - const base = { before: 10, after: 10, line: 1.0 }; - const paragraphProps = { before: 15 }; - const attrs = { line: 2.0 }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 15, // from paragraphProps (overrides base) - after: 10, // from base (not overridden) - line: 2.0, // from attrs (highest priority) - }); - }); - }); - - describe('partial overrides', () => { - it('should allow partial override from attrs (only line)', () => { - const base = { before: 10, after: 10 }; - const paragraphProps = {}; - const attrs = { line: 1.5 }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 10, // inherited from base - after: 10, // inherited from base - line: 1.5, // from attrs - }); - }); - - it('should allow partial override from paragraphProps (only before)', () => { - const base = { before: 10, after: 10, line: 1.0 }; - const paragraphProps = { before: 20 }; - const attrs = {}; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 20, // from paragraphProps (overrides base) - after: 10, // inherited from base - line: 1.0, // inherited from base - }); - }); - - it('should merge multiple partial overrides correctly', () => { - const base = { before: 10, after: 10, line: 1.0, lineRule: 'auto' }; - const paragraphProps = { before: 20, after: 20 }; - const attrs = { line: 2.0 }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 20, // from paragraphProps - after: 20, // from paragraphProps - line: 2.0, // from attrs - lineRule: 'auto', // inherited from base - }); - }); - - it('should handle single property from each source', () => { - const base = { before: 10 }; - const paragraphProps = { after: 20 }; - const attrs = { line: 1.5 }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 10, - after: 20, - line: 1.5, - }); - }); - }); - - describe('edge cases', () => { - it('should return undefined when all sources are null', () => { - const result = mergeSpacingSources(null, null, null); - expect(result).toBeUndefined(); - }); - - it('should return undefined when all sources are undefined', () => { - const result = mergeSpacingSources(undefined, undefined, undefined); - expect(result).toBeUndefined(); - }); - - it('should return undefined when all sources are empty objects', () => { - const result = mergeSpacingSources({}, {}, {}); - expect(result).toBeUndefined(); - }); - - it('should handle null base gracefully', () => { - const result = mergeSpacingSources(null, { before: 10 }, { line: 1.5 }); - expect(result).toEqual({ before: 10, line: 1.5 }); - }); - - it('should handle null paragraphProps gracefully', () => { - const result = mergeSpacingSources({ before: 10 }, null, { line: 1.5 }); - expect(result).toEqual({ before: 10, line: 1.5 }); - }); - - it('should handle null attrs gracefully', () => { - const result = mergeSpacingSources({ before: 10 }, { after: 20 }, null); - expect(result).toEqual({ before: 10, after: 20 }); - }); - - it('should handle undefined sources gracefully', () => { - const result = mergeSpacingSources(undefined, { before: 10 }, { line: 1.5 }); - expect(result).toEqual({ before: 10, line: 1.5 }); - }); - - it('should handle non-object values (treat as empty)', () => { - const result = mergeSpacingSources('not an object', { before: 10 }, { line: 1.5 }); - expect(result).toEqual({ before: 10, line: 1.5 }); - }); - - it('should preserve zero values through merge priority', () => { - const base = { before: 10 }; - const paragraphProps = { before: 0 }; // explicit zero overrides base - const attrs = {}; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - expect(result).toEqual({ before: 0 }); - }); - - it('should handle negative values correctly', () => { - const base = { before: 10 }; - const paragraphProps = { after: -5 }; - const attrs = { line: -1.5 }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - expect(result).toEqual({ - before: 10, - after: -5, - line: -1.5, - }); - }); - }); - - describe('real-world OOXML scenarios', () => { - it('should handle docDefaults + partial style override', () => { - const base = { before: 0, after: 0, line: 1.0, lineRule: 'auto' }; - const paragraphProps = { after: 10 }; - const attrs = {}; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 0, - after: 10, - line: 1.0, - lineRule: 'auto', - }); - }); - - it('should handle direct paragraph override of only line spacing', () => { - const base = { before: 10, after: 10, line: 1.0 }; - const paragraphProps = {}; - const attrs = { line: 1.5 }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 10, - after: 10, - line: 1.5, - }); - }); - - it('should handle three-tier override chain', () => { - const base = { before: 0, after: 0, line: 1.0, lineRule: 'auto' }; - const paragraphProps = { before: 12 }; - const attrs = { after: 8, line: 1.2 }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 12, // from paragraphProps - after: 8, // from attrs - line: 1.2, // from attrs - lineRule: 'auto', // from base - }); - }); - - it('should handle complete direct override', () => { - const base = { before: 10, after: 10, line: 1.0, lineRule: 'auto' }; - const paragraphProps = { before: 20, after: 20 }; - const attrs = { before: 5, after: 5, line: 1.5, lineRule: 'exact' }; - - const result = mergeSpacingSources(base, paragraphProps, attrs); - - expect(result).toEqual({ - before: 5, - after: 5, - line: 1.5, - lineRule: 'exact', - }); - }); - }); -}); - -describe('computeParagraphAttrs - alignment priority cascade', () => { - describe('priority order tests', () => { - it('should prioritize explicitAlignment over paragraphAlignment', () => { - const para: PMNode = { - attrs: { - alignment: 'right', - paragraphProperties: { - justification: 'center', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.alignment).toBe('right'); - }); - - it('should prioritize paragraphAlignment over styleAlignment', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: 'center', - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydration = { - alignment: 'left', - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydration); - - expect(result?.alignment).toBe('center'); - }); - - it('should prioritize styleAlignment over computed.paragraph.alignment', () => { - const para: PMNode = { - attrs: {}, - }; - const styleContext = createTestStyleContext(); - const hydration = { - alignment: 'right', - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydration); - - expect(result?.alignment).toBe('right'); - }); - - it('should prioritize bidi+adjustRightInd over everything', () => { - const para: PMNode = { - attrs: { - bidi: true, - adjustRightInd: true, - alignment: 'center', - paragraphProperties: { - justification: 'left', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.alignment).toBe('right'); - }); - }); - - describe('edge case tests', () => { - it('should handle null justification value and fallback to styleAlignment', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: null, - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydration = { - alignment: 'center', - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydration); - - expect(result?.alignment).toBe('center'); - }); - - it('should handle empty string justification and fallback to styleAlignment', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: '', - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydration = { - alignment: 'left', - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydration); - - expect(result?.alignment).toBe('left'); - }); - - it('should handle invalid alignment value and fallback to styleAlignment', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: 'invalid-value', - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydration = { - alignment: 'right', - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydration); - - expect(result?.alignment).toBe('right'); - }); - - it('should handle non-string justification (number) and not crash', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: 123, - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydration = { - alignment: 'center', - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydration); - - // Should fallback to styleAlignment since number is not a string - expect(result?.alignment).toBe('center'); - }); - }); - - describe('normalization tests', () => { - it('should normalize "both" to "justify"', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: 'both', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.alignment).toBe('justify'); - }); - - it('should normalize "start" to "left"', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: 'start', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.alignment).toBe('left'); - }); - - it('should normalize "end" to "right"', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: 'end', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.alignment).toBe('right'); - }); - }); - - describe('real-world scenario tests', () => { - it('should use center from paragraph props when style has left', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - justification: 'center', - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydration = { - alignment: 'left', - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydration); - - expect(result?.alignment).toBe('center'); - }); - - it('should use right from explicit when paragraph props has center', () => { - const para: PMNode = { - attrs: { - alignment: 'right', - paragraphProperties: { - justification: 'center', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.alignment).toBe('right'); - }); - - it('should respect all 6 priority levels in correct order', () => { - // Level 6: computed.paragraph.alignment (lowest) - const para1: PMNode = { attrs: {} }; - const styleContext = createTestStyleContext(); - const result1 = computeParagraphAttrs(para1, styleContext); - // Level 6 provides default 'left' alignment from style-engine when no other sources are present - expect(result1?.alignment).toBe('left'); - - // Level 5: styleAlignment - const para2: PMNode = { attrs: {} }; - const hydration2 = { alignment: 'left' }; - const result2 = computeParagraphAttrs(para2, styleContext, undefined, undefined, hydration2); - expect(result2?.alignment).toBe('left'); - - // Level 4: bidi alone (defaults to right) - const para3: PMNode = { attrs: { bidi: true } }; - const result3 = computeParagraphAttrs(para3, styleContext); - expect(result3?.alignment).toBe('right'); - - // Level 3: paragraphAlignment (overrides bidi default) - const para4: PMNode = { - attrs: { - bidi: true, - paragraphProperties: { justification: 'center' }, - }, - }; - const result4 = computeParagraphAttrs(para4, styleContext); - expect(result4?.alignment).toBe('center'); - - // Level 2: explicitAlignment (overrides paragraphAlignment) - const para5: PMNode = { - attrs: { - alignment: 'justify', - paragraphProperties: { justification: 'center' }, - }, - }; - const result5 = computeParagraphAttrs(para5, styleContext); - expect(result5?.alignment).toBe('justify'); - - // Level 1: bidi + adjustRightInd (overrides everything) - const para6: PMNode = { - attrs: { - bidi: true, - adjustRightInd: true, - alignment: 'justify', - paragraphProperties: { justification: 'center' }, - }, - }; - const result6 = computeParagraphAttrs(para6, styleContext); - expect(result6?.alignment).toBe('right'); - }); - }); -}); - -describe('computeParagraphAttrs - numbering properties fallback from listRendering', () => { - describe('fallback synthesis when numberingProperties is missing', () => { - it('should synthesize numbering props when only listRendering provided', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: '1.', - justification: 'left', - numberingType: 'decimal', - suffix: 'tab', - path: [1], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties).toBeDefined(); - expect(result?.numberingProperties?.numId).toBe(-1); - expect(result?.numberingProperties?.markerText).toBe('1.'); - expect(result?.numberingProperties?.format).toBe('decimal'); - expect(result?.numberingProperties?.lvlJc).toBe('left'); - expect(result?.numberingProperties?.suffix).toBe('tab'); - }); - - it('should correctly extract counter value from path array', () => { - const testCases = [ - { path: [1], expectedCounter: 1 }, - { path: [1, 2], expectedCounter: 2 }, - { path: [1, 2, 3], expectedCounter: 3 }, - { path: [5, 10, 15], expectedCounter: 15 }, - ]; - - testCases.forEach(({ path, expectedCounter }) => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: `${expectedCounter}.`, - path, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.counterValue).toBe(expectedCounter); - expect(result?.numberingProperties?.path).toEqual(path); - }); - }); - - it('should correctly calculate ilvl from path length', () => { - const testCases = [ - { path: [1], expectedIlvl: 0 }, - { path: [1, 2], expectedIlvl: 1 }, - { path: [1, 2, 3], expectedIlvl: 2 }, - { path: [1, 2, 3, 4], expectedIlvl: 3 }, - ]; - - testCases.forEach(({ path, expectedIlvl }) => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: '•', - path, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.ilvl).toBe(expectedIlvl); - }); - }); - - it('should handle empty path array', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: '•', - path: [], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.ilvl).toBe(0); - // When path is empty, buildNumberingPath creates [1] and counterValue becomes 1 - expect(result?.numberingProperties?.counterValue).toBe(1); - expect(result?.numberingProperties?.path).toEqual([1]); - }); - - it('should handle missing path array', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: '1.', - justification: 'left', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.ilvl).toBe(0); - // When path is undefined, buildNumberingPath creates [1] and counterValue becomes 1 - expect(result?.numberingProperties?.counterValue).toBe(1); - expect(result?.numberingProperties?.path).toEqual([1]); - }); - - it('should preserve original numberingProperties when present', () => { - const para: PMNode = { - attrs: { - numberingProperties: { - numId: 5, - ilvl: 2, - }, - listRendering: { - markerText: 'a)', - path: [1, 2, 3], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Should use original numberingProperties, not synthesize from listRendering - expect(result?.numberingProperties?.numId).toBe(5); - expect(result?.numberingProperties?.ilvl).toBe(2); - }); - - it('should not synthesize when listRendering is missing', () => { - const para: PMNode = { - attrs: {}, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Should not create numberingProperties from nothing - expect(result?.numberingProperties).toBeUndefined(); - }); - - it('should synthesize all properties from listRendering', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: 'II.', - justification: 'right', - numberingType: 'upperRoman', - suffix: 'space', - path: [1, 2], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.numId).toBe(-1); - expect(result?.numberingProperties?.ilvl).toBe(1); - expect(result?.numberingProperties?.path).toEqual([1, 2]); - expect(result?.numberingProperties?.counterValue).toBe(2); - expect(result?.numberingProperties?.markerText).toBe('II.'); - expect(result?.numberingProperties?.format).toBe('upperRoman'); - expect(result?.numberingProperties?.lvlJc).toBe('right'); - expect(result?.numberingProperties?.suffix).toBe('space'); - }); - - it('should handle single-level list (path with one element)', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: '3.', - path: [3], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.ilvl).toBe(0); - expect(result?.numberingProperties?.counterValue).toBe(3); - expect(result?.numberingProperties?.path).toEqual([3]); - }); - - it('should handle bullet list with path', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: '•', - justification: 'left', - numberingType: 'bullet', - path: [1, 1], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.format).toBe('bullet'); - expect(result?.numberingProperties?.ilvl).toBe(1); - expect(result?.numberingProperties?.counterValue).toBe(1); - expect(result?.numberingProperties?.markerText).toBe('•'); - }); - - it('should handle non-finite counter values gracefully', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: '•', - path: [NaN], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // NaN gets filtered out during path normalization, so buildNumberingPath creates [1] - expect(result?.numberingProperties?.counterValue).toBe(1); - }); - - it('should handle deep nesting (path with many levels)', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: 'i.', - path: [1, 1, 1, 1, 1], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.ilvl).toBe(4); - expect(result?.numberingProperties?.counterValue).toBe(1); - expect(result?.numberingProperties?.path).toEqual([1, 1, 1, 1, 1]); - }); - - it('should handle partial listRendering (only markerText)', () => { - const para: PMNode = { - attrs: { - listRendering: { - markerText: '-', - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.numberingProperties?.numId).toBe(-1); - expect(result?.numberingProperties?.ilvl).toBe(0); - expect(result?.numberingProperties?.markerText).toBe('-'); - expect(result?.numberingProperties?.format).toBeUndefined(); - expect(result?.numberingProperties?.lvlJc).toBeUndefined(); - expect(result?.numberingProperties?.suffix).toBeUndefined(); - }); - - it('should prioritize paragraphProperties.numberingProperties over fallback', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - numberingProperties: { - numId: 10, - ilvl: 3, - }, - }, - listRendering: { - markerText: 'Should not be used', - path: [99], - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Should use paragraphProperties, not listRendering fallback - expect(result?.numberingProperties?.numId).toBe(10); - expect(result?.numberingProperties?.ilvl).toBe(3); - }); - }); - - describe('contextualSpacing attribute extraction', () => { - const createStyleContext = () => ({ - styles: {}, - defaults: {}, - }); - - describe('fallback chain priority', () => { - it('should prioritize normalizedSpacing.contextualSpacing (priority 1)', () => { - const para: PMNode = { - attrs: { - spacing: { - contextualSpacing: true, - }, - paragraphProperties: { - contextualSpacing: false, // Should be ignored - }, - contextualSpacing: false, // Should be ignored - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should use paragraphProps.contextualSpacing when normalizedSpacing is absent (priority 2)', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - contextualSpacing: true, - }, - contextualSpacing: false, // Should be ignored - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should use attrs.contextualSpacing when both higher priorities are absent (priority 3)', () => { - const para: PMNode = { - attrs: { - contextualSpacing: true, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should return undefined when contextualSpacing is not set anywhere', () => { - const para: PMNode = { - attrs: { - spacing: { - before: 10, - after: 10, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBeUndefined(); - }); - - it('should use hydrated.contextualSpacing when all higher priorities are absent (priority 4)', () => { - const para: PMNode = { - attrs: { - spacing: { - before: 10, - after: 10, - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - contextualSpacing: true, - spacing: { before: 10, after: 10 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should use hydrated.contextualSpacing=false when all higher priorities are absent', () => { - const para: PMNode = { - attrs: { - spacing: { - before: 10, - after: 10, - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - contextualSpacing: false, - spacing: { before: 10, after: 10 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.contextualSpacing).toBe(false); - }); - - it('should prioritize attrs.contextualSpacing over hydrated.contextualSpacing', () => { - const para: PMNode = { - attrs: { - contextualSpacing: true, - spacing: { - before: 10, - after: 10, - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - contextualSpacing: false, // Should be overridden by attrs - spacing: { before: 10, after: 10 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should prioritize paragraphProps.contextualSpacing over hydrated.contextualSpacing', () => { - const para: PMNode = { - attrs: { - paragraphProperties: { - contextualSpacing: true, - }, - spacing: { - before: 10, - after: 10, - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - contextualSpacing: false, // Should be overridden by paragraphProps - spacing: { before: 10, after: 10 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should prioritize normalizedSpacing.contextualSpacing over hydrated.contextualSpacing', () => { - const para: PMNode = { - attrs: { - spacing: { - before: 10, - after: 10, - contextualSpacing: true, - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - contextualSpacing: false, // Should be overridden by spacing.contextualSpacing - spacing: { before: 10, after: 10 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.contextualSpacing).toBe(true); - }); - }); - - describe('OOXML boolean value handling', () => { - it('should handle boolean true', () => { - const para: PMNode = { - attrs: { - contextualSpacing: true, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should handle boolean false', () => { - const para: PMNode = { - attrs: { - contextualSpacing: false, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(false); - }); - - it('should handle numeric 1 as true', () => { - const para: PMNode = { - attrs: { - contextualSpacing: 1, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should handle numeric 0 as false', () => { - const para: PMNode = { - attrs: { - contextualSpacing: 0, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(false); - }); - - it('should handle string "1" as true', () => { - const para: PMNode = { - attrs: { - contextualSpacing: '1', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should handle string "0" as false', () => { - const para: PMNode = { - attrs: { - contextualSpacing: '0', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(false); - }); - - it('should handle string "true" as true', () => { - const para: PMNode = { - attrs: { - contextualSpacing: 'true', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should handle string "false" as false', () => { - const para: PMNode = { - attrs: { - contextualSpacing: 'false', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(false); - }); - - it('should handle string "on" as true', () => { - const para: PMNode = { - attrs: { - contextualSpacing: 'on', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - }); - - it('should handle string "off" as false', () => { - const para: PMNode = { - attrs: { - contextualSpacing: 'off', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(false); - }); - - it('should handle case-insensitive string values', () => { - const para1: PMNode = { - attrs: { - contextualSpacing: 'TRUE', - }, - }; - const para2: PMNode = { - attrs: { - contextualSpacing: 'FALSE', - }, - }; - const para3: PMNode = { - attrs: { - contextualSpacing: 'On', - }, - }; - const styleContext = createTestStyleContext(); - - expect(computeParagraphAttrs(para1, styleContext)?.contextualSpacing).toBe(true); - expect(computeParagraphAttrs(para2, styleContext)?.contextualSpacing).toBe(false); - expect(computeParagraphAttrs(para3, styleContext)?.contextualSpacing).toBe(true); - }); - }); - - describe('edge cases', () => { - it('should treat null as not set', () => { - const para: PMNode = { - attrs: { - contextualSpacing: null, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBeUndefined(); - }); - - it('should treat undefined as not set', () => { - const para: PMNode = { - attrs: { - contextualSpacing: undefined, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBeUndefined(); - }); - - it('should handle invalid string values as false', () => { - const para: PMNode = { - attrs: { - contextualSpacing: 'invalid', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(false); - }); - - it('should handle empty string as false', () => { - const para: PMNode = { - attrs: { - contextualSpacing: '', - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(false); - }); - }); - - describe('integration with spacing', () => { - it('should work together with spacing.before and spacing.after', () => { - const para: PMNode = { - attrs: { - contextualSpacing: true, - spacing: { - before: 10, - after: 20, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - expect(result?.spacing?.before).toBeDefined(); - expect(result?.spacing?.after).toBeDefined(); - }); - - it('should work when contextualSpacing is in spacing object', () => { - const para: PMNode = { - attrs: { - spacing: { - before: 10, - after: 20, - contextualSpacing: true, - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - expect(result?.contextualSpacing).toBe(true); - expect(result?.spacing?.before).toBeDefined(); - expect(result?.spacing?.after).toBeDefined(); - }); - - it('should integrate with styles that define contextualSpacing (e.g., ListBullet)', () => { - const para: PMNode = { - attrs: { - styleId: 'ListBullet', - spacing: { - before: 10, - after: 10, - }, - }, - }; - const styleContext = createTestStyleContext(); - // Simulate a style like ListBullet that defines contextualSpacing - const hydrationOverride = { - contextualSpacing: true, - spacing: { before: 10, after: 10 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.contextualSpacing).toBe(true); - expect(result?.spacing?.before).toBeDefined(); - expect(result?.spacing?.after).toBeDefined(); - }); - - it('should allow paragraph to override style-defined contextualSpacing', () => { - const para: PMNode = { - attrs: { - styleId: 'ListBullet', - contextualSpacing: false, // Explicit override of style - spacing: { - before: 10, - after: 10, - }, - }, - }; - const styleContext = createTestStyleContext(); - // Simulate a style that defines contextualSpacing=true - const hydrationOverride = { - contextualSpacing: true, // From style - spacing: { before: 10, after: 10 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // Paragraph-level override should win - expect(result?.contextualSpacing).toBe(false); - }); - }); - }); -}); - -describe('computeParagraphAttrs - indent priority cascade', () => { - // These tests verify the indent priority order documented in the code: - // 1. hydratedIndentPx - from styles (docDefaults, paragraph styles) - lowest - // 2. paragraphIndentPx - from paragraphProperties.indent (inline paragraph properties) - // 3. textIndentPx - from attrs.textIndent (legacy/alternative format) - // 4. attrsIndentPx - from attrs.indent (direct paragraph attributes - highest priority) - - const createStyleContext = () => - ({ - styles: {}, - defaults: {}, - }) as Parameters[1]; - - describe('priority order: higher-priority source wins for same property', () => { - it('should prioritize attrs.indent over hydrated indent (style)', () => { - const para = { - attrs: { - indent: { left: 48 }, // Direct attribute - highest priority (48px) - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { left: 720 }, // From style in twips (~48px but different) - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // attrs.indent should win over hydrated indent - expect(result?.indent?.left).toBe(48); - }); - - it('should prioritize attrs.indent over paragraphProperties.indent', () => { - const para = { - attrs: { - indent: { left: 24 }, // Direct attribute (24px) - paragraphProperties: { - indent: { left: 1440 }, // Inline property in twips (~96px) - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // attrs.indent should win over paragraphProperties.indent - expect(result?.indent?.left).toBe(24); - }); - - it('should prioritize attrs.indent over attrs.textIndent', () => { - const para = { - attrs: { - // Use 31 instead of 30 - 30 is divisible by 15 which triggers twips heuristic - indent: { left: 31 }, // Direct attribute (31px) - highest priority - textIndent: { left: 2880 }, // Legacy format in twips (~192px) - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // attrs.indent should win over textIndent - expect(result?.indent?.left).toBe(31); - }); - - it('should prioritize paragraphProperties.indent over hydrated indent', () => { - const para = { - attrs: { - paragraphProperties: { - indent: { left: 720 }, // Inline property in twips (~48px) - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { left: 1440 }, // From style in twips (~96px) - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // paragraphProperties.indent should win over hydrated indent - expect(result?.indent?.left).toBeCloseTo(twipsToPx(720)); - }); - - it('should use full priority chain: hydrated < paragraphProps < textIndent < attrs.indent', () => { - const para = { - attrs: { - indent: { left: 10, right: 20 }, // Highest priority - textIndent: { left: 1440, hanging: 360 }, // Second highest (~96px left, ~24px hanging) - paragraphProperties: { - indent: { left: 2160, firstLine: 720 }, // Third priority (~144px left, ~48px firstLine) - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { left: 2880, right: 720, firstLine: 360 }, // Lowest priority - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // left: 10 from attrs.indent (highest priority) - expect(result?.indent?.left).toBe(10); - // right: 20 from attrs.indent (highest priority) - expect(result?.indent?.right).toBe(20); - // hanging: from textIndent (next priority with hanging) - // Note: firstLine/hanging mutual exclusivity - when attrs.indent has neither, - // textIndent's hanging applies and should clear paragraphProperties' firstLine - expect(result?.indent?.hanging).toBeCloseTo(twipsToPx(360)); - // firstLine from paragraphProperties is cleared because higher-priority hanging is present - expect(result?.indent?.firstLine).toBeUndefined(); - }); - }); - - describe('zero values as explicit overrides', () => { - // Note: indentPtToPx filters out zero left/right values as they are cosmetic. - // However, zero firstLine/hanging are preserved as they are meaningful overrides. - - it('should filter out zero left/right values (cosmetic optimization)', () => { - // This is documented behavior: zero left/right are filtered out - // because they represent the default state (no indent). - // When explicit zeros are set, they override inherited values in the cascade, - // and then indentPtToPx filters out the zero values from the final result. - const para = { - attrs: { - indent: { left: 0, right: 0 }, // Explicit zeros override hydration - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { left: 720, right: 360 }, // From style in twips - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // Zero left/right are first applied (overriding hydration), then filtered out - // Result: neither left nor right is present (not the hydration values) - expect(result?.indent?.left).toBeUndefined(); - expect(result?.indent?.right).toBeUndefined(); - }); - - it('should preserve zero firstLine as explicit override', () => { - const para = { - attrs: { - indent: { firstLine: 0 }, // Explicit zero override - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { firstLine: 720 }, // From style (~48px) - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // Zero firstLine IS preserved (unlike left/right) - expect(result?.indent?.firstLine).toBe(0); - }); - - it('should preserve zero hanging as explicit override', () => { - const para = { - attrs: { - indent: { hanging: 0 }, // Explicit zero override - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { hanging: 720 }, // From style (~48px) - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // Zero hanging IS preserved (unlike left/right) - expect(result?.indent?.hanging).toBe(0); - }); - - it('should handle firstLine overriding hanging with mutual exclusivity', () => { - // When firstLine is set, hanging should be cleared via firstLine/hanging mutual exclusivity - const para = { - attrs: { - indent: { firstLine: 24 }, // Explicit firstLine - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { hanging: 360 }, // From style (~24px) - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // firstLine should be present - expect(result?.indent?.firstLine).toBe(24); - // hanging from style should be cleared by mutual exclusivity handler - // Per OOXML, firstLine and hanging are mutually exclusive - when firstLine is set, - // hanging should be completely removed (undefined), not just set to 0. - expect(result?.indent?.hanging).toBeUndefined(); - }); - }); - - describe('multiple overlapping indent sources', () => { - it('should merge non-overlapping properties from all sources', () => { - const para = { - attrs: { - indent: { right: 48 }, // Only right - paragraphProperties: { - indent: { left: 720 }, // Only left in twips (~48px) - }, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { firstLine: 360 }, // Only firstLine in twips (~24px) - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // All properties should be merged from different sources - expect(result?.indent?.right).toBe(48); // from attrs.indent - expect(result?.indent?.left).toBeCloseTo(twipsToPx(720)); // from paragraphProperties - expect(result?.indent?.firstLine).toBeCloseTo(twipsToPx(360)); // from hydration - }); - - it('should handle partial override: left from attrs, rest inherited', () => { - const para = { - attrs: { - indent: { left: 24 }, // Only override left - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { left: 720, right: 360, firstLine: 180 }, // Full indent from style - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // left from attrs.indent overrides hydrated - expect(result?.indent?.left).toBe(24); - // right and firstLine inherited from hydration - expect(result?.indent?.right).toBeCloseTo(twipsToPx(360)); - expect(result?.indent?.firstLine).toBeCloseTo(twipsToPx(180)); - }); - - it('should handle three sources with different properties', () => { - const para = { - attrs: { - indent: { left: 10 }, // Only left - textIndent: { right: 1440 }, // Only right in twips (~96px) - paragraphProperties: { - indent: { firstLine: 360 }, // Only firstLine in twips (~24px) - }, - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // All properties should be present from their respective sources - expect(result?.indent?.left).toBe(10); - expect(result?.indent?.right).toBeCloseTo(twipsToPx(1440)); - expect(result?.indent?.firstLine).toBeCloseTo(twipsToPx(360)); - }); - }); - - describe('firstLine/hanging mutual exclusivity', () => { - it('should handle firstLine and hanging from different priority sources', () => { - // When a higher-priority source sets firstLine, the combineIndentProperties handler - // processes it, but the actual removal of hanging happens in post-processing. - // The result may still show hanging=0 since indentPtToPx preserves zero values. - const para = { - attrs: { - indent: { firstLine: 24 }, // Higher priority sets firstLine - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { hanging: 360, left: 720 }, // Style has hanging - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // firstLine from attrs should win - expect(result?.indent?.firstLine).toBe(24); - // Per OOXML, firstLine and hanging are mutually exclusive - when firstLine is explicitly set, - // hanging should be completely removed (undefined), not just set to 0. - expect(result?.indent?.hanging).toBeUndefined(); - // left should still be inherited - expect(result?.indent?.left).toBeCloseTo(twipsToPx(720)); - }); - - it('should keep hanging when no higher-priority firstLine exists', () => { - const para = { - attrs: { - indent: { left: 48 }, // Only left, no firstLine - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { hanging: 360 }, // Style has hanging - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // hanging should be preserved since no higher-priority source sets firstLine - expect(result?.indent?.hanging).toBeCloseTo(twipsToPx(360)); - }); - }); - - describe('edge cases', () => { - it('should handle empty indent object from attrs', () => { - const para = { - attrs: { - indent: {}, // Empty indent - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { left: 720 }, // From style - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - // Should inherit from hydration since attrs.indent is empty - expect(result?.indent?.left).toBeCloseTo(twipsToPx(720)); - }); - - it('should handle undefined indent gracefully', () => { - const para = { - attrs: { - indent: undefined, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { left: 720 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.indent?.left).toBeCloseTo(twipsToPx(720)); - }); - - it('should handle null indent gracefully', () => { - const para = { - attrs: { - indent: null, - }, - }; - const styleContext = createTestStyleContext(); - const hydrationOverride = { - indent: { left: 720 }, - }; - - const result = computeParagraphAttrs(para, styleContext, undefined, undefined, hydrationOverride); - - expect(result?.indent?.left).toBeCloseTo(twipsToPx(720)); - }); - - it('should handle negative indent values', () => { - const para = { - attrs: { - indent: { left: -20, firstLine: -10 }, // Negative indents (outdents) - }, - }; - const styleContext = createTestStyleContext(); - - const result = computeParagraphAttrs(para, styleContext); - - // Negative values should be preserved - expect(result?.indent?.left).toBe(-20); - expect(result?.indent?.firstLine).toBe(-10); - }); + expect(result.fontFamily).toContain('Arial'); + expect(result.fontSize).toBeGreaterThan(0); + expect(result.color).toBe('#FF0000'); }); }); diff --git a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.test.ts b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.test.ts index 2ad7f9ff0..2a2a60991 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.test.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.test.ts @@ -1,846 +1,149 @@ /** * Tests for Spacing & Indent Normalization Module * - * Covers 9 functions for converting spacing/indent between units and normalizing values: - * - spacingPxToPt: Convert spacing from pixels to points - * - indentPxToPt: Convert indent from pixels to points - * - spacingPtToPx: Convert spacing from points to pixels (with rawSpacing filter) - * - indentPtToPx: Convert indent from points to pixels - * - normalizeAlignment: Normalize alignment values - * - normalizeParagraphSpacing: Normalize spacing from raw attributes - * - normalizeLineRule: Normalize lineRule values - * - normalizePxIndent: Normalize indent already in pixels (with twips detection) - * - normalizeParagraphIndent: Normalize indent with twips→px conversion - * - * Critical: Tests include the twips detection heuristic (threshold = 50, divisor = 15) + * Covers: + * - normalizeAlignment + * - normalizeParagraphSpacing + * - normalizeLineRule + * - indent conversion via computeParagraphAttrs (twips -> px) */ import { describe, it, expect } from 'vitest'; import type { ParagraphIndent, ParagraphSpacing } from '@superdoc/contracts'; -import { - spacingPxToPt, - indentPxToPt, - spacingPtToPx, - indentPtToPx, - normalizeAlignment, - normalizeParagraphSpacing, - normalizeLineRule, - normalizePxIndent, - normalizeParagraphIndent, -} from './spacing-indent.js'; +import { normalizeAlignment, normalizeParagraphSpacing, normalizeLineRule } from './spacing-indent.js'; +import { computeParagraphAttrs } from './paragraph.js'; import { twipsToPx } from '../utilities.js'; -describe('spacingPxToPt', () => { - it('should convert before spacing from px to pt', () => { - const spacing: ParagraphSpacing = { before: 12 }; - const result = spacingPxToPt(spacing); - // 12px = 9pt (at 96 DPI: pt = px * 0.75) - expect(result.before).toBe(9); - }); - - it('should convert after spacing from px to pt', () => { - const spacing: ParagraphSpacing = { after: 16 }; - const result = spacingPxToPt(spacing); - expect(result.after).toBe(12); - }); - - it('should convert line spacing from px to pt', () => { - const spacing: ParagraphSpacing = { line: 20 }; - const result = spacingPxToPt(spacing); - expect(result.line).toBe(15); - }); - - it('should preserve auto line spacing multipliers', () => { - const spacing: ParagraphSpacing = { line: 1.15, lineRule: 'auto' }; - const result = spacingPxToPt(spacing); - expect(result.line).toBe(1.15); - expect(result.lineRule).toBe('auto'); - }); - - it('should preserve lineRule', () => { - const spacing: ParagraphSpacing = { line: 20, lineRule: 'exact' }; - const result = spacingPxToPt(spacing); - expect(result.lineRule).toBe('exact'); - }); - - it('should convert all spacing properties', () => { - const spacing: ParagraphSpacing = { - before: 8, - after: 12, - line: 16, - lineRule: 'auto', - }; - const result = spacingPxToPt(spacing); - expect(result.before).toBe(6); - expect(result.after).toBe(9); - expect(result.line).toBe(12); - expect(result.lineRule).toBe('auto'); - }); - - it('should handle zero values', () => { - const spacing: ParagraphSpacing = { before: 0, after: 0, line: 0 }; - const result = spacingPxToPt(spacing); - expect(result.before).toBe(0); - expect(result.after).toBe(0); - expect(result.line).toBe(0); - }); - - it('should handle negative values', () => { - const spacing: ParagraphSpacing = { before: -12 }; - const result = spacingPxToPt(spacing); - expect(result.before).toBe(-9); - }); - - it('should handle fractional values', () => { - const spacing: ParagraphSpacing = { before: 10.5 }; - const result = spacingPxToPt(spacing); - expect(result.before).toBe(7.875); - }); - - it('should skip undefined properties', () => { - const spacing: ParagraphSpacing = { before: 12 }; - const result = spacingPxToPt(spacing); - expect(result.after).toBeUndefined(); - expect(result.line).toBeUndefined(); - }); - - it('should return empty object for empty spacing', () => { - const spacing: ParagraphSpacing = {}; - const result = spacingPxToPt(spacing); - expect(result).toEqual({}); - }); -}); - -describe('indentPxToPt', () => { - it('should convert left indent from px to pt', () => { - const indent: ParagraphIndent = { left: 24 }; - const result = indentPxToPt(indent); - expect(result.left).toBe(18); - }); - - it('should convert right indent from px to pt', () => { - const indent: ParagraphIndent = { right: 32 }; - const result = indentPxToPt(indent); - expect(result.right).toBe(24); - }); - - it('should convert firstLine indent from px to pt', () => { - const indent: ParagraphIndent = { firstLine: 16 }; - const result = indentPxToPt(indent); - expect(result.firstLine).toBe(12); - }); - - it('should convert hanging indent from px to pt', () => { - const indent: ParagraphIndent = { hanging: 20 }; - const result = indentPxToPt(indent); - expect(result.hanging).toBe(15); - }); - - it('should convert all indent properties', () => { - const indent: ParagraphIndent = { - left: 24, - right: 32, - firstLine: 16, - hanging: 20, - }; - const result = indentPxToPt(indent); - expect(result.left).toBe(18); - expect(result.right).toBe(24); - expect(result.firstLine).toBe(12); - expect(result.hanging).toBe(15); - }); - - it('should handle zero values', () => { - const indent: ParagraphIndent = { left: 0, right: 0 }; - const result = indentPxToPt(indent); - expect(result.left).toBe(0); - expect(result.right).toBe(0); - }); - - it('should handle negative values', () => { - const indent: ParagraphIndent = { firstLine: -12 }; - const result = indentPxToPt(indent); - expect(result.firstLine).toBe(-9); - }); -}); - -describe('spacingPtToPx', () => { - describe('with rawSpacing filter', () => { - it('should convert before when present in rawSpacing', () => { - const spacing = { before: 9, after: 12 }; - const rawSpacing: ParagraphSpacing = { before: 10 }; - const result = spacingPtToPx(spacing, rawSpacing); - expect(result?.before).toBe(12); // 9pt = 12px - expect(result?.after).toBeUndefined(); - }); - - it('should convert after when present in rawSpacing', () => { - const spacing = { before: 9, after: 12 }; - const rawSpacing: ParagraphSpacing = { after: 15 }; - const result = spacingPtToPx(spacing, rawSpacing); - expect(result?.before).toBeUndefined(); - expect(result?.after).toBe(16); // 12pt = 16px - }); - - it('should convert line when present in rawSpacing', () => { - const spacing = { line: 15 }; - const rawSpacing: ParagraphSpacing = { line: 20 }; - const result = spacingPtToPx(spacing, rawSpacing); - expect(result?.line).toBe(20); // 15pt = 20px - }); - - it('should preserve auto line multipliers when present in rawSpacing', () => { - const spacing = { line: 1.15, lineRule: 'auto' as const }; - const rawSpacing: ParagraphSpacing = { line: 20 }; - const result = spacingPtToPx(spacing, rawSpacing); - expect(result?.line).toBe(1.15); - expect(result?.lineRule).toBe('auto'); - }); +const getIndent = (indent: ParagraphIndent | null | undefined) => { + const para = { + type: 'paragraph', + attrs: { + paragraphProperties: { + indent, + }, + }, + } as never; + const { paragraphAttrs } = computeParagraphAttrs(para); + return paragraphAttrs.indent; +}; - it('should preserve lineRule when converting line', () => { - const spacing = { line: 15, lineRule: 'exact' as const }; - const rawSpacing: ParagraphSpacing = { line: 20 }; - const result = spacingPtToPx(spacing, rawSpacing); - expect(result?.lineRule).toBe('exact'); - }); - - it('should convert all properties present in rawSpacing', () => { - const spacing = { before: 9, after: 12, line: 15, lineRule: 'auto' as const }; - const rawSpacing: ParagraphSpacing = { before: 10, after: 15, line: 20 }; - const result = spacingPtToPx(spacing, rawSpacing); - expect(result?.before).toBe(12); - expect(result?.after).toBe(16); - expect(result?.line).toBe(20); - expect(result?.lineRule).toBe('auto'); - }); - - it('should return undefined when rawSpacing is empty', () => { - const spacing = { before: 9, after: 12 }; - const rawSpacing: ParagraphSpacing = {}; - const result = spacingPtToPx(spacing, rawSpacing); - expect(result).toBeUndefined(); - }); - }); - - describe('without rawSpacing', () => { - it('should return undefined when rawSpacing is not provided', () => { - const spacing = { before: 9, after: 12 }; - const result = spacingPtToPx(spacing); - expect(result).toBeUndefined(); - }); - - it('should return undefined when rawSpacing is undefined', () => { - const spacing = { before: 9, after: 12 }; - const result = spacingPtToPx(spacing, undefined); - expect(result).toBeUndefined(); - }); - }); -}); - -describe('indentPtToPx', () => { - it('should convert left indent from pt to px', () => { - const indent = { left: 18 }; - const result = indentPtToPx(indent); - expect(result?.left).toBe(24); // 18pt = 24px - }); - - it('should convert right indent from pt to px', () => { - const indent = { right: 24 }; - const result = indentPtToPx(indent); - expect(result?.right).toBe(32); // 24pt = 32px - }); - - it('should convert firstLine indent from pt to px', () => { - const indent = { firstLine: 12 }; - const result = indentPtToPx(indent); - expect(result?.firstLine).toBe(16); // 12pt = 16px - }); - - it('should convert hanging indent from pt to px', () => { - const indent = { hanging: 15 }; - const result = indentPtToPx(indent); - expect(result?.hanging).toBe(20); // 15pt = 20px +describe('normalizeParagraphSpacing', () => { + it('converts before/after from twips to px', () => { + const spacing = { before: 240, after: 360 } as ParagraphSpacing; // 16px, 24px + const result = normalizeParagraphSpacing(spacing); + expect(result?.before).toBe(twipsToPx(240)); + expect(result?.after).toBe(twipsToPx(360)); }); - it('should filter out zero values', () => { - const indent = { left: 0, right: 0 }; - const result = indentPtToPx(indent); - expect(result).toBeUndefined(); + it('converts line from twips to px when lineRule is exact', () => { + const spacing = { line: 360, lineRule: 'exact' as const } as ParagraphSpacing; // 24px + const result = normalizeParagraphSpacing(spacing); + expect(result?.line).toBe(twipsToPx(360)); + expect(result?.lineRule).toBe('exact'); }); - it('should filter out individual zero values', () => { - const indent = { left: 18, right: 0, firstLine: 12 }; - const result = indentPtToPx(indent); - expect(result?.left).toBe(24); - expect(result?.right).toBeUndefined(); - expect(result?.firstLine).toBe(16); + it('treats auto line values <= 10 as multipliers', () => { + const spacing = { line: 1.15, lineRule: 'auto' as const } as ParagraphSpacing; + const result = normalizeParagraphSpacing(spacing); + expect(result?.line).toBe(1.15); + expect(result?.lineRule).toBe('auto'); }); - it('should handle negative values', () => { - const indent = { firstLine: -12 }; - const result = indentPtToPx(indent); - expect(result?.firstLine).toBe(-16); + it('converts auto line values > 10 from 240ths of a line', () => { + const spacing = { line: 360, lineRule: 'auto' as const } as ParagraphSpacing; // 1.5x + const result = normalizeParagraphSpacing(spacing); + expect(result?.line).toBe(1.5); + expect(result?.lineRule).toBe('auto'); }); - it('should convert all non-zero properties and preserve zero firstLine/hanging', () => { - const indent = { left: 18, right: 24, firstLine: 0, hanging: 15 }; - const result = indentPtToPx(indent); - expect(result?.left).toBe(24); - expect(result?.right).toBe(32); - // firstLine: 0 is preserved (explicit override for numbering) - expect(result?.firstLine).toBe(0); - expect(result?.hanging).toBe(20); + it('preserves contextual spacing flags', () => { + const spacing = { before: 240, beforeAutospacing: true, afterAutospacing: false } as ParagraphSpacing; + const result = normalizeParagraphSpacing(spacing); + expect(result?.before).toBe(twipsToPx(240)); + expect(result?.beforeAutospacing).toBe(true); + expect(result?.afterAutospacing).toBe(false); }); - it('should preserve zero values for firstLine and hanging (meaningful overrides)', () => { - // Zero values for firstLine/hanging are meaningful - they override numbering level indents - const indent = { left: 0, right: 0, firstLine: 0, hanging: 0 }; - const result = indentPtToPx(indent); - // firstLine: 0 and hanging: 0 are preserved as explicit overrides - expect(result).toEqual({ firstLine: 0, hanging: 0 }); + it('returns undefined for empty or invalid inputs', () => { + expect(normalizeParagraphSpacing(undefined)).toBeUndefined(); + expect(normalizeParagraphSpacing(null as never)).toBeUndefined(); + expect(normalizeParagraphSpacing({} as ParagraphSpacing)).toBeUndefined(); }); - it('should handle undefined properties', () => { - const indent = { left: 18 }; - const result = indentPtToPx(indent); - expect(result?.left).toBe(24); - expect(result?.right).toBeUndefined(); + it('skips non-numeric values but preserves valid ones', () => { + const spacing = { before: 'not-a-number', after: 300 } as unknown as ParagraphSpacing; + const result = normalizeParagraphSpacing(spacing); + expect(result?.before).toBeUndefined(); + expect(result?.after).toBe(twipsToPx(300)); }); }); describe('normalizeAlignment', () => { - it('should return "center" for center', () => { - expect(normalizeAlignment('center')).toBe('center'); - }); - - it('should return "right" for right', () => { + it('normalizes alignment values', () => { + expect(normalizeAlignment('left')).toBe('left'); expect(normalizeAlignment('right')).toBe('right'); - }); - - it('should return "justify" for justify', () => { + expect(normalizeAlignment('center')).toBe('center'); expect(normalizeAlignment('justify')).toBe('justify'); }); - it('should convert "end" to "right"', () => { - expect(normalizeAlignment('end')).toBe('right'); - }); - - it('should convert "start" to "left"', () => { + it('maps start/end to left/right', () => { expect(normalizeAlignment('start')).toBe('left'); + expect(normalizeAlignment('end')).toBe('right'); }); - it('should return "left" for "left"', () => { - // Explicit left alignment must be returned so it can override style-based center/right - expect(normalizeAlignment('left')).toBe('left'); - }); - - it('should return undefined for unknown values', () => { + it('returns undefined for invalid values', () => { expect(normalizeAlignment('unknown')).toBeUndefined(); - expect(normalizeAlignment('top')).toBeUndefined(); - expect(normalizeAlignment('bottom')).toBeUndefined(); - }); - - it('should return undefined for non-string values', () => { - expect(normalizeAlignment(null)).toBeUndefined(); - expect(normalizeAlignment(undefined)).toBeUndefined(); expect(normalizeAlignment(123)).toBeUndefined(); - expect(normalizeAlignment({})).toBeUndefined(); - }); - - it('should be case-sensitive', () => { - // The function uses strict equality, so it's case-sensitive - expect(normalizeAlignment('CENTER')).toBeUndefined(); - expect(normalizeAlignment('Right')).toBeUndefined(); - expect(normalizeAlignment('JUSTIFY')).toBeUndefined(); - }); - - it('should convert "both" to "justify"', () => { - expect(normalizeAlignment('both')).toBe('justify'); - }); - - it('should convert "distribute" to "justify"', () => { - expect(normalizeAlignment('distribute')).toBe('justify'); - }); - - it('should convert "numTab" to "justify"', () => { - expect(normalizeAlignment('numTab')).toBe('justify'); - }); - - it('should convert "thaiDistribute" to "justify"', () => { - expect(normalizeAlignment('thaiDistribute')).toBe('justify'); - }); -}); - -describe('normalizeParagraphSpacing', () => { - describe('valid spacing', () => { - it('should normalize before spacing', () => { - const input = { before: 150 }; // 10px in twips (10 * 15) - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBe(10); - }); - - it('should normalize after spacing', () => { - const input = { after: 300 }; // 20px in twips (20 * 15) - const result = normalizeParagraphSpacing(input); - expect(result?.after).toBe(20); - }); - - it('should normalize line spacing with default auto lineRule', () => { - const input = { line: 225 }; // 225/240 = 0.9375 lines - const result = normalizeParagraphSpacing(input); - expect(result?.line).toBeCloseTo(0.9375); - expect(result?.lineRule).toBe('auto'); - }); - - it('should normalize lineRule', () => { - const input = { lineRule: 'exact' }; - const result = normalizeParagraphSpacing(input); - expect(result?.lineRule).toBe('exact'); - }); - - it('should normalize complete spacing', () => { - const input = { before: 1.5, after: 2, line: 1.2, lineRule: 'auto' }; // Auto line uses multipliers - const result = normalizeParagraphSpacing(input); - expect(result).toEqual({ - before: 0.1, // 1.5 twips in px - after: 0.13333333333333333, // 2 twips in px - line: 1.2, // Multiplier preserved (<= 10) - lineRule: 'auto', - }); - }); - - it('should convert before/after values from twips to pixels', () => { - const input = { before: 720, after: 360 }; - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBe(48); - expect(result?.after).toBe(24); - }); - - it('should prefer OOXML spacing over pixel fallbacks', () => { - const input = { before: 720, lineSpaceBefore: 12 }; - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBe(48); - }); - - it('should convert line spacing from twips when lineRule is exact', () => { - const input = { line: 276, lineRule: 'exact' }; - const result = normalizeParagraphSpacing(input); - expect(result?.line).toBeCloseTo(twipsToPx(276)); - }); - - it('should convert line spacing from twips when lineRule is atLeast', () => { - const input = { line: 360, lineRule: 'atLeast' }; - const result = normalizeParagraphSpacing(input); - expect(result?.line).toBeCloseTo(twipsToPx(360)); - }); - - it('should preserve multiplier line spacing when value <= 10', () => { - const input = { line: 1.5, lineRule: 'auto' }; - const result = normalizeParagraphSpacing(input); - expect(result?.line).toBe(1.5); - }); - - it('should convert auto line spacing values from 240ths of a line', () => { - const input = { line: 480, lineRule: 'auto' }; - const result = normalizeParagraphSpacing(input); - expect(result?.line).toBeCloseTo(2); - }); - - it('should handle zero values', () => { - const input = { before: 0, after: 0, line: 0 }; - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBe(0); - expect(result?.after).toBe(0); - expect(result?.line).toBe(0); - }); - - it('should handle negative values', () => { - const input = { before: -150 }; // -10px in twips - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBe(-10); - }); - - it('should handle fractional values', () => { - const input = { before: 157.5, after: 311.25 }; // 10.5px and 20.75px in twips - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBe(10.5); - expect(result?.after).toBeCloseTo(20.75, 1); - }); - - it('should not set lineRule when line is absent', () => { - const input = { before: 240, after: 240 }; - const result = normalizeParagraphSpacing(input); - expect(result?.lineRule).toBeUndefined(); - }); - }); - - describe('property fallbacks', () => { - it('should use lineSpaceBefore as fallback for before', () => { - const input = { lineSpaceBefore: 15 }; - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBe(15); - }); - - it('should use lineSpaceAfter as fallback for after', () => { - const input = { lineSpaceAfter: 25 }; - const result = normalizeParagraphSpacing(input); - expect(result?.after).toBe(25); - }); - - it('should prioritize before over lineSpaceBefore', () => { - const input = { before: 150, lineSpaceBefore: 15 }; // 10px in twips, lineSpaceBefore is already px - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBe(10); - }); - - it('should prioritize after over lineSpaceAfter', () => { - const input = { after: 300, lineSpaceAfter: 25 }; // 20px in twips, lineSpaceAfter is already px - const result = normalizeParagraphSpacing(input); - expect(result?.after).toBe(20); - }); - }); - - describe('invalid inputs', () => { - it('should return undefined for null', () => { - expect(normalizeParagraphSpacing(null)).toBeUndefined(); - }); - - it('should return undefined for undefined', () => { - expect(normalizeParagraphSpacing(undefined)).toBeUndefined(); - }); - - it('should return undefined for non-object', () => { - expect(normalizeParagraphSpacing('string')).toBeUndefined(); - expect(normalizeParagraphSpacing(123)).toBeUndefined(); - }); - - it('should return undefined for empty object', () => { - expect(normalizeParagraphSpacing({})).toBeUndefined(); - }); - - it('should filter out non-numeric string values (was NaN, now fixed)', () => { - // Fixed: pickNumber now filters out NaN from parseFloat - const input = { before: 'not a number', after: 300 }; // 20px in twips - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBeUndefined(); - expect(result?.after).toBe(20); - }); - - it('should filter out NaN values', () => { - const input = { before: NaN, after: 300 }; // 20px in twips - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBeUndefined(); - expect(result?.after).toBe(20); - }); - - it('should filter out Infinity values', () => { - const input = { before: Infinity, after: 300 }; // 20px in twips - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBeUndefined(); - expect(result?.after).toBe(20); - }); - - it('should filter out -Infinity values', () => { - const input = { before: -Infinity, line: 10 }; - const result = normalizeParagraphSpacing(input); - expect(result?.before).toBeUndefined(); - expect(result?.line).toBeDefined(); - }); }); }); describe('normalizeLineRule', () => { - it('should return "auto" for auto', () => { + it('returns valid line rules', () => { expect(normalizeLineRule('auto')).toBe('auto'); - }); - - it('should return "exact" for exact', () => { expect(normalizeLineRule('exact')).toBe('exact'); - }); - - it('should return "atLeast" for atLeast', () => { expect(normalizeLineRule('atLeast')).toBe('atLeast'); }); - it('should return undefined for invalid values', () => { + it('returns undefined for invalid values', () => { expect(normalizeLineRule('unknown')).toBeUndefined(); - expect(normalizeLineRule('multiple')).toBeUndefined(); - }); - - it('should return undefined for non-string values', () => { expect(normalizeLineRule(null)).toBeUndefined(); - expect(normalizeLineRule(123)).toBeUndefined(); - }); - - it('should be case-sensitive', () => { - expect(normalizeLineRule('AUTO')).toBeUndefined(); - expect(normalizeLineRule('Exact')).toBeUndefined(); - expect(normalizeLineRule('ATLEAST')).toBeUndefined(); }); }); -describe('normalizePxIndent', () => { - describe('pixel values (not twips)', () => { - it('should normalize small pixel values (< 50)', () => { - const input = { left: 10, right: 20 }; - const result = normalizePxIndent(input); - expect(result).toEqual({ left: 10, right: 20 }); - }); - - it('should normalize values at threshold (50)', () => { - const input = { left: 49 }; - const result = normalizePxIndent(input); - // 49 < 50, so treated as pixels - expect(result).toEqual({ left: 49 }); - }); - - it('should handle negative small values', () => { - const input = { firstLine: -10 }; - const result = normalizePxIndent(input); - expect(result).toEqual({ firstLine: -10 }); - }); - - it('should preserve zero values (explicit indent reset)', () => { - // Zero is now explicitly excluded from the divisibility check to - // support intentional zero overrides (e.g., style's firstLine=0 to - // cancel numbering level's firstLine indent) - const input = { left: 0, right: 0 }; - const result = normalizePxIndent(input); - expect(result).toEqual({ left: 0, right: 0 }); - }); - - it('should handle all four indent properties', () => { - const input = { left: 10, right: 20, firstLine: 5, hanging: 8 }; - const result = normalizePxIndent(input); - expect(result).toEqual({ left: 10, right: 20, firstLine: 5, hanging: 8 }); - }); +describe('indent conversion via computeParagraphAttrs', () => { + it('converts left/right indents from twips to px', () => { + const result = getIndent({ left: 720, right: 1440 }); + expect(result?.left).toBe(twipsToPx(720)); + expect(result?.right).toBe(twipsToPx(1440)); }); - describe('twips detection', () => { - it('should return undefined for values >= 50', () => { - const input = { left: 50 }; - const result = normalizePxIndent(input); - expect(result).toBeUndefined(); - }); - - it('should return undefined for large values (likely twips)', () => { - const input = { left: 1440 }; // 1 inch in twips - const result = normalizePxIndent(input); - expect(result).toBeUndefined(); - }); - - it('should return undefined for values divisible by 15', () => { - const input = { left: 30 }; // 30 % 15 = 0 - const result = normalizePxIndent(input); - expect(result).toBeUndefined(); - }); - - it('should return undefined for values divisible by 15 (45)', () => { - const input = { left: 45 }; // 45 % 15 = 0 - const result = normalizePxIndent(input); - expect(result).toBeUndefined(); - }); - - it('should return undefined when any value looks like twips', () => { - const input = { left: 10, right: 720 }; // right is twips - const result = normalizePxIndent(input); - expect(result).toBeUndefined(); - }); - - it('should accept values not divisible by 15', () => { - const input = { left: 16, right: 17 }; // Neither divisible by 15 - const result = normalizePxIndent(input); - expect(result).toEqual({ left: 16, right: 17 }); - }); - - it('should handle negative values with twips detection', () => { - const input = { left: -60 }; // |−60| >= 50 - const result = normalizePxIndent(input); - expect(result).toBeUndefined(); - }); + it('converts firstLine and hanging indents from twips to px', () => { + const result = getIndent({ firstLine: 360, hanging: 180 }); + expect(result?.firstLine).toBe(twipsToPx(360)); + expect(result?.hanging).toBe(twipsToPx(180)); }); - describe('invalid inputs', () => { - it('should return undefined for null', () => { - expect(normalizePxIndent(null)).toBeUndefined(); - }); - - it('should return undefined for undefined', () => { - expect(normalizePxIndent(undefined)).toBeUndefined(); - }); - - it('should return undefined for non-object', () => { - expect(normalizePxIndent('string')).toBeUndefined(); - expect(normalizePxIndent(123)).toBeUndefined(); - }); - - it('should return undefined for empty object', () => { - expect(normalizePxIndent({})).toBeUndefined(); - }); - - it('should skip non-numeric values', () => { - const input = { left: 10, right: 'not a number' }; - const result = normalizePxIndent(input); - expect(result).toEqual({ left: 10 }); - }); - - it('should skip NaN values', () => { - const input = { left: NaN, right: 10 }; - const result = normalizePxIndent(input); - expect(result).toEqual({ right: 10 }); - }); - - it('should skip Infinity values', () => { - const input = { left: Infinity, right: 10 }; - const result = normalizePxIndent(input); - expect(result).toEqual({ right: 10 }); - }); + it('preserves zero and negative values via conversion', () => { + const result = getIndent({ left: 0, firstLine: -720 }); + expect(result?.left).toBe(0); + expect(result?.firstLine).toBe(twipsToPx(-720)); }); -}); - -describe('normalizeParagraphIndent', () => { - describe('pixel values (≤ 50)', () => { - it('should preserve small values as pixels', () => { - const input = { left: 10, right: 20 }; - const result = normalizeParagraphIndent(input); - expect(result).toEqual({ left: 10, right: 20 }); - }); - - it('should preserve values at threshold (50)', () => { - const input = { left: 50 }; - const result = normalizeParagraphIndent(input); - expect(result).toEqual({ left: 50 }); - }); - - it('should preserve negative small values', () => { - const input = { firstLine: -20 }; - const result = normalizeParagraphIndent(input); - expect(result).toEqual({ firstLine: -20 }); - }); - it('should preserve zero values', () => { - const input = { left: 0, right: 0 }; - const result = normalizeParagraphIndent(input); - expect(result).toEqual({ left: 0, right: 0 }); - }); - - it('should preserve all four indent properties when small', () => { - const input = { left: 10, right: 15, firstLine: 5, hanging: 8 }; - const result = normalizeParagraphIndent(input); - expect(result).toEqual({ left: 10, right: 15, firstLine: 5, hanging: 8 }); - }); - }); - - describe('twips conversion (> 50)', () => { - it('should convert values > 50 from twips to pixels', () => { - const input = { left: 720 }; // 0.5 inch = 720 twips = 48px - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(48); // 720 / 15 = 48 - }); - - it('should convert large twips values', () => { - const input = { left: 1440 }; // 1 inch = 1440 twips = 96px - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(96); - }); - - it('should convert all properties from twips when > 50', () => { - const input = { left: 720, right: 1440, firstLine: 360, hanging: 180 }; - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(48); - expect(result?.right).toBe(96); - expect(result?.firstLine).toBe(24); - expect(result?.hanging).toBe(12); - }); - - it('should handle negative twips values', () => { - const input = { firstLine: -720 }; - const result = normalizeParagraphIndent(input); - expect(result?.firstLine).toBe(-48); - }); - - it('should handle mixed pixel and twips values', () => { - const input = { left: 10, right: 720 }; // left is px, right is twips - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(10); - expect(result?.right).toBe(48); - }); - }); - - describe('boundary cases', () => { - it('should treat 50 as pixels (not twips)', () => { - const input = { left: 50 }; - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(50); - }); - - it('should treat 51 as twips and convert', () => { - const input = { left: 51 }; - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(3.4); // 51 / 15 = 3.4 - }); - - it('should treat -50 as pixels', () => { - const input = { left: -50 }; - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(-50); - }); - - it('should treat -51 as twips and convert', () => { - const input = { left: -51 }; - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(-3.4); - }); + it('accepts numeric strings', () => { + const result = getIndent({ left: '720' as never, right: '360' as never }); + expect(result?.left).toBe(twipsToPx(720)); + expect(result?.right).toBe(twipsToPx(360)); }); - describe('invalid inputs', () => { - it('should return undefined for null', () => { - expect(normalizeParagraphIndent(null)).toBeUndefined(); - }); - - it('should return undefined for undefined', () => { - expect(normalizeParagraphIndent(undefined)).toBeUndefined(); - }); - - it('should return undefined for non-object', () => { - expect(normalizeParagraphIndent('string')).toBeUndefined(); - expect(normalizeParagraphIndent(123)).toBeUndefined(); - }); - - it('should return undefined for empty object', () => { - expect(normalizeParagraphIndent({})).toBeUndefined(); - }); - - it('should skip non-numeric values', () => { - const input = { left: 10, right: 'not a number' }; - const result = normalizeParagraphIndent(input); - expect(result).toEqual({ left: 10 }); - }); - - it('should skip null values', () => { - const input = { left: 10, right: null }; - const result = normalizeParagraphIndent(input); - expect(result).toEqual({ left: 10 }); - }); - - it('should skip undefined values', () => { - const input = { left: 10, right: undefined }; - const result = normalizeParagraphIndent(input); - expect(result).toEqual({ left: 10 }); - }); + it('returns undefined for empty or invalid inputs', () => { + expect(getIndent(undefined)).toBeUndefined(); + expect(getIndent(null)).toBeUndefined(); + expect(getIndent({})).toBeUndefined(); }); - describe('fractional values', () => { - it('should handle fractional pixel values', () => { - const input = { left: 10.5 }; - const result = normalizeParagraphIndent(input); - expect(result?.left).toBe(10.5); - }); - - it('should handle fractional twips values', () => { - const input = { left: 720.5 }; - const result = normalizeParagraphIndent(input); - expect(result?.left).toBeCloseTo(48.03, 2); - }); + it('skips non-numeric values but preserves valid ones', () => { + const result = getIndent({ left: 720, right: 'nope' as never }); + expect(result?.left).toBe(twipsToPx(720)); + expect(result?.right).toBeUndefined(); }); }); diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts index 6fae1d430..586dd3a5e 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts @@ -23,6 +23,7 @@ import type { HyperlinkConfig, StyleContext, } from '../types.js'; +import type { ConverterContext } from '../converter-context.js'; import type { Run, TextRun, FlowBlock, ParagraphBlock, TrackedChangeMeta, ImageRun } from '@superdoc/contracts'; // Mock external dependencies @@ -37,6 +38,7 @@ vi.mock('../attributes/index.js', () => ({ cloneParagraphAttrs: vi.fn(), hasPageBreakBefore: vi.fn(), buildStyleNodeFromAttrs: vi.fn(() => ({})), + deepClone: vi.fn((value) => value), normalizeParagraphSpacing: vi.fn(), normalizeParagraphIndent: vi.fn(), normalizePxIndent: vi.fn(), @@ -68,7 +70,7 @@ vi.mock('../attributes/paragraph-styles.js', () => ({ // Import mocked functions import { textNodeToRun, tabNodeToRun, tokenNodeToRun } from './text-run.js'; -import { computeParagraphAttrs, cloneParagraphAttrs, hasPageBreakBefore } from '../attributes/index.js'; +import { computeParagraphAttrs, cloneParagraphAttrs, deepClone, hasPageBreakBefore } from '../attributes/index.js'; import { resolveNodeSdtMetadata, getNodeInstruction } from '../sdt/index.js'; import { trackedChangesCompatible, collectTrackedChangeFromMarks, applyMarksToRun } from '../marks/index.js'; import { @@ -600,6 +602,7 @@ describe('paragraph converters', () => { let nextBlockId: BlockIdGenerator; let positions: PositionMap; let styleContext: StyleContext; + let converterContext: ConverterContext; beforeEach(() => { vi.clearAllMocks(); @@ -613,9 +616,19 @@ describe('paragraph converters', () => { // Setup style context (mock) styleContext = {}; + converterContext = { + translatedNumbering: {}, + translatedLinkedStyles: { + docDefaults: { + runProperties: {}, + paragraphProperties: {}, + }, + styles: {}, + }, + }; // Setup default mock returns - vi.mocked(computeParagraphAttrs).mockReturnValue({}); + vi.mocked(computeParagraphAttrs).mockReturnValue({ paragraphAttrs: {}, resolvedParagraphProperties: {} }); vi.mocked(cloneParagraphAttrs).mockReturnValue({}); vi.mocked(hasPageBreakBefore).mockReturnValue(false); vi.mocked(textNodeToRun).mockImplementation((node) => ({ @@ -767,13 +780,16 @@ describe('paragraph converters', () => { ); }); - it('should add page break before paragraph when hasPageBreakBefore returns true', () => { + it('should add page break before paragraph when paragraph attrs request it', () => { const para: PMNode = { type: 'paragraph', content: [{ type: 'text', text: 'Test' }], }; - vi.mocked(hasPageBreakBefore).mockReturnValue(true); + vi.mocked(computeParagraphAttrs).mockReturnValue({ + paragraphAttrs: { pageBreakBefore: true }, + resolvedParagraphProperties: {}, + }); const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); @@ -818,7 +834,20 @@ describe('paragraph converters', () => { ], }; - const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); + const blocks = paragraphToFlowBlocks( + para, + nextBlockId, + positions, + 'Arial', + 16, + styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, + ); expect(blocks).toHaveLength(1); // textNodeToRun receives empty marks - marks are applied separately after linked styles @@ -860,7 +889,20 @@ describe('paragraph converters', () => { ], }; - const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); + const blocks = paragraphToFlowBlocks( + para, + nextBlockId, + positions, + 'Arial', + 16, + styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, + ); expect(blocks).toHaveLength(0); expect(vi.mocked(textNodeToRun)).not.toHaveBeenCalled(); @@ -884,7 +926,20 @@ describe('paragraph converters', () => { ], }; - paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); + paragraphToFlowBlocks( + para, + nextBlockId, + positions, + 'Arial', + 16, + styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, + ); // textNodeToRun receives empty marks - marks are applied separately after linked styles expect(vi.mocked(textNodeToRun)).toHaveBeenCalledWith( @@ -1458,7 +1513,7 @@ describe('paragraph converters', () => { positions.set(bookmarkNode, { start: 100, end: 100 }); const bookmarks = new Map(); - paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext, undefined, undefined, bookmarks); + paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext, undefined, bookmarks); expect(bookmarks.get('MyBookmark')).toBe(100); }); @@ -1535,7 +1590,6 @@ describe('paragraph converters', () => { undefined, undefined, undefined, - undefined, converters as never, ); @@ -1581,7 +1635,6 @@ describe('paragraph converters', () => { 'Arial', 16, styleContext, - undefined, trackedChanges, undefined, undefined, @@ -1617,7 +1670,6 @@ describe('paragraph converters', () => { 'Arial', 16, styleContext, - undefined, { mode: 'final', enabled: true }, undefined, undefined, @@ -1657,7 +1709,6 @@ describe('paragraph converters', () => { undefined, undefined, undefined, - undefined, converters as never, ); @@ -1691,7 +1742,6 @@ describe('paragraph converters', () => { undefined, undefined, undefined, - undefined, converters as never, ); @@ -1724,7 +1774,6 @@ describe('paragraph converters', () => { undefined, undefined, undefined, - undefined, converters as never, ); @@ -1757,7 +1806,6 @@ describe('paragraph converters', () => { undefined, undefined, undefined, - undefined, converters as never, ); @@ -1793,7 +1841,6 @@ describe('paragraph converters', () => { 'Arial', 16, styleContext, - undefined, trackedChanges, bookmarks, hyperlinkConfig, @@ -1811,7 +1858,7 @@ describe('paragraph converters', () => { trackedChanges, bookmarks, hyperlinkConfig, - undefined, // converterContext parameter added + undefined, ); expect(blocks.some((b) => b.kind === 'table')).toBe(true); }); @@ -1897,11 +1944,9 @@ describe('paragraph converters', () => { 'Arial', 16, styleContext, - undefined, trackedChanges, undefined, undefined, - undefined, ); expect(vi.mocked(applyTrackedChangesModeToRuns)).toHaveBeenCalledWith( @@ -1931,16 +1976,7 @@ describe('paragraph converters', () => { vi.mocked(applyTrackedChangesModeToRuns).mockReturnValue([]); - const blocks = paragraphToFlowBlocks( - para, - nextBlockId, - positions, - 'Arial', - 16, - styleContext, - undefined, - trackedChanges, - ); + const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext, trackedChanges); expect(blocks).toHaveLength(0); }); @@ -1970,16 +2006,7 @@ describe('paragraph converters', () => { vi.mocked(applyTrackedChangesModeToRuns).mockReturnValue([]); - const blocks = paragraphToFlowBlocks( - para, - nextBlockId, - positions, - 'Arial', - 16, - styleContext, - undefined, - trackedChanges, - ); + const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext, trackedChanges); expect(blocks.some((b) => b.kind === 'pageBreak')).toBe(true); }); @@ -2167,7 +2194,6 @@ describe('paragraph converters', () => { styleContext, undefined, undefined, - undefined, customHyperlinkConfig, ); @@ -2183,27 +2209,28 @@ describe('paragraph converters', () => { ); }); - it('should pass list counter context to computeParagraphAttrs', () => { + it('should pass converter context to computeParagraphAttrs', () => { const para: PMNode = { type: 'paragraph', content: [{ type: 'text', text: 'Test' }], }; - const listCounterContext = { - getListCounter: vi.fn(), - incrementListCounter: vi.fn(), - resetListCounter: vi.fn(), - }; - - paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext, listCounterContext); - - expect(vi.mocked(computeParagraphAttrs)).toHaveBeenCalledWith( + paragraphToFlowBlocks( para, + nextBlockId, + positions, + 'Arial', + 16, styleContext, - listCounterContext, - undefined, // converterContext parameter - null, // paragraphHydration parameter + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, ); + + expect(vi.mocked(computeParagraphAttrs)).toHaveBeenCalledWith(para, converterContext); }); it('should clone paragraph attrs for each paragraph block', () => { @@ -2217,14 +2244,17 @@ describe('paragraph converters', () => { }; const mockAttrs = { align: 'center' }; - vi.mocked(computeParagraphAttrs).mockReturnValue(mockAttrs); - vi.mocked(cloneParagraphAttrs).mockImplementation((attrs) => ({ ...attrs })); + vi.mocked(computeParagraphAttrs).mockReturnValue({ + paragraphAttrs: mockAttrs, + resolvedParagraphProperties: {}, + }); + vi.mocked(deepClone).mockImplementation((attrs) => ({ ...attrs })); const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); const paraBlocks = blocks.filter((b) => b.kind === 'paragraph'); // Should be called once per paragraph block (2 blocks in this case) - expect(vi.mocked(cloneParagraphAttrs)).toHaveBeenCalledTimes(paraBlocks.length); + expect(vi.mocked(deepClone)).toHaveBeenCalledTimes(paraBlocks.length); }); }); }); @@ -2817,7 +2847,7 @@ describe('paragraph converters', () => { positions = new WeakMap(); styleContext = {}; - vi.mocked(computeParagraphAttrs).mockReturnValue({}); + vi.mocked(computeParagraphAttrs).mockReturnValue({ paragraphAttrs: {}, resolvedParagraphProperties: {} }); vi.mocked(cloneParagraphAttrs).mockReturnValue({}); vi.mocked(hasPageBreakBefore).mockReturnValue(false); vi.mocked(textNodeToRun).mockImplementation((node) => ({ @@ -2854,7 +2884,6 @@ describe('paragraph converters', () => { undefined, undefined, undefined, - undefined, converters as never, ); @@ -2909,7 +2938,6 @@ describe('paragraph converters', () => { undefined, undefined, undefined, - undefined, converters as never, ); diff --git a/packages/layout-engine/pm-adapter/src/converters/table.test.ts b/packages/layout-engine/pm-adapter/src/converters/table.test.ts index bb3a3aff1..19c750411 100644 --- a/packages/layout-engine/pm-adapter/src/converters/table.test.ts +++ b/packages/layout-engine/pm-adapter/src/converters/table.test.ts @@ -210,7 +210,7 @@ describe('table converter', () => { expect(result.rows).toHaveLength(1); }); - it('forwards listCounterContext into paragraph conversion', () => { + it('forwards converterContext into paragraph conversion', () => { const node: PMNode = { type: 'table', content: [ @@ -226,15 +226,11 @@ describe('table converter', () => { ], }; - const listCounterContext = { - getListCounter: vi.fn(), - incrementListCounter: vi.fn(), - resetListCounter: vi.fn(), - }; + const converterContext = { docx: { foo: 'bar' } } as never; const paragraphSpy = vi.fn((para, ...args) => { - const [, , , , , passedListContext] = args; - expect(passedListContext).toBe(listCounterContext); + const [, , , , , , , , , passedConverterContext] = args; + expect(passedConverterContext).toBe(converterContext); return mockParagraphConverter(para); }); @@ -250,8 +246,7 @@ describe('table converter', () => { undefined, undefined, paragraphSpy, - undefined, - { listCounterContext }, + converterContext, ) as TableBlock; expect(result.rows[0].cells[0].blocks?.[0].kind).toBe('paragraph'); @@ -1143,7 +1138,7 @@ describe('table converter', () => { expect(mockConverter).toHaveBeenCalled(); // Verify tracked changes config was passed const callArgs = mockConverter.mock.calls[0]; - expect(callArgs[7]).toEqual(trackedChangesConfig); + expect(callArgs[6]).toEqual(trackedChangesConfig); }); it('returns null when all rows have no cells', () => { diff --git a/packages/layout-engine/pm-adapter/src/fixtures/tabs-center-end.json b/packages/layout-engine/pm-adapter/src/fixtures/tabs-center-end.json index 9cd006552..03d014ea4 100644 --- a/packages/layout-engine/pm-adapter/src/fixtures/tabs-center-end.json +++ b/packages/layout-engine/pm-adapter/src/fixtures/tabs-center-end.json @@ -4,7 +4,9 @@ { "type": "paragraph", "attrs": { - "tabs": [{ "pos": 96, "align": "center", "leader": "none" }] + "paragraphProperties": { + "tabStops": [{ "pos": 96, "align": "center", "leader": "none" }] + } }, "content": [ { "type": "text", "text": "Title" }, @@ -14,7 +16,9 @@ { "type": "paragraph", "attrs": { - "tabs": [{ "pos": 120, "align": "right", "leader": "none" }] + "paragraphProperties": { + "tabStops": [{ "pos": 120, "align": "right", "leader": "none" }] + } }, "content": [ { "type": "text", "text": "Amount" }, @@ -24,11 +28,13 @@ { "type": "paragraph", "attrs": { - "tabs": [ - { "pos": 60, "align": "left", "leader": "none" }, - { "pos": 120, "align": "center", "leader": "none" }, - { "pos": 180, "align": "right", "leader": "none" } - ] + "paragraphProperties": { + "tabStops": [ + { "pos": 60, "align": "left", "leader": "none" }, + { "pos": 120, "align": "center", "leader": "none" }, + { "pos": 180, "align": "right", "leader": "none" } + ] + } }, "content": [ { "type": "text", "text": "\tLeft" }, diff --git a/packages/layout-engine/pm-adapter/src/fixtures/tabs-decimal.json b/packages/layout-engine/pm-adapter/src/fixtures/tabs-decimal.json index f00ed2742..c611a052e 100644 --- a/packages/layout-engine/pm-adapter/src/fixtures/tabs-decimal.json +++ b/packages/layout-engine/pm-adapter/src/fixtures/tabs-decimal.json @@ -4,10 +4,12 @@ { "type": "paragraph", "attrs": { - "tabs": [ - { "pos": 96, "align": "decimal", "leader": "dot" }, - { "pos": 192, "align": "right", "leader": "none" } - ] + "paragraphProperties": { + "tabStops": [ + { "pos": 96, "align": "decimal", "leader": "dot" }, + { "pos": 192, "align": "right", "leader": "none" } + ] + } }, "content": [ { "type": "text", "text": "Price:" }, @@ -17,7 +19,9 @@ { "type": "paragraph", "attrs": { - "tabs": [{ "pos": 120, "align": "right", "leader": "dot" }] + "paragraphProperties": { + "tabStops": [{ "pos": 120, "align": "right", "leader": "dot" }] + } }, "content": [ { "type": "text", "text": "Total" }, diff --git a/packages/layout-engine/pm-adapter/src/index.test.ts b/packages/layout-engine/pm-adapter/src/index.test.ts index 5621dbb37..abe9eed5c 100644 --- a/packages/layout-engine/pm-adapter/src/index.test.ts +++ b/packages/layout-engine/pm-adapter/src/index.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import { toFlowBlocks, toFlowBlocksMap } from './index.js'; -import type { PMNode, PMMark } from './index.js'; +import { toFlowBlocks as baseToFlowBlocks, toFlowBlocksMap as baseToFlowBlocksMap } from './index.js'; +import type { PMNode, PMMark, AdapterOptions, BatchAdapterOptions, PMDocumentMap } from './index.js'; import type { FlowBlock, ImageBlock, TableBlock } from '@superdoc/contracts'; import basicParagraphFixture from './fixtures/basic-paragraph.json'; import edgeCasesFixture from './fixtures/edge-cases.json'; @@ -9,6 +9,25 @@ import imageFixture from './fixtures/image-inline-and-block.json'; import hummingbirdFixture from './fixtures/hummingbird.json'; import boldDemoFixture from './fixtures/bold-demo.json'; +const DEFAULT_CONVERTER_CONTEXT = { + docx: {}, + translatedLinkedStyles: { + docDefaults: {}, + latentStyles: {}, + styles: {}, + }, + translatedNumbering: { + abstracts: {}, + definitions: {}, + }, +}; + +const toFlowBlocks = (pmDoc: PMNode | object, options: AdapterOptions = {}) => + baseToFlowBlocks(pmDoc, { converterContext: DEFAULT_CONVERTER_CONTEXT, ...options }); + +const toFlowBlocksMap = (docs: PMDocumentMap, options: BatchAdapterOptions = {}) => + baseToFlowBlocksMap(docs, { converterContext: DEFAULT_CONVERTER_CONTEXT, ...options }); + const createTestBodySectPr = () => ({ type: 'element', name: 'w:sectPr', @@ -54,7 +73,7 @@ describe('toFlowBlocks', () => { runs: [ { text: 'Hello world', - fontFamily: 'Arial, sans-serif', + fontFamily: 'Arial', fontSize: 16, }, ], @@ -98,7 +117,7 @@ describe('toFlowBlocks', () => { }); expect(blocks[0].runs[0]).toMatchObject({ - fontFamily: 'Times New Roman, sans-serif', + fontFamily: 'Times New Roman', fontSize: 14, }); }); @@ -267,9 +286,11 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - alignment: 'center', - spacing: { line: 330, lineRule: 'exact', lineSpaceBefore: 10, lineSpaceAfter: 6 }, // 22px in twips - indent: { left: 12, firstLine: 24 }, + paragraphProperties: { + justification: 'center', + spacing: { before: 150, after: 90, line: 330, lineRule: 'exact' }, + indent: { left: 180, firstLine: 360 }, + }, }, content: [ { @@ -511,9 +532,11 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - borders: { - top: { val: 'single', size: 32, color: '00FF00' }, - left: { val: 'dashed', size: 16, color: '#112233' }, + paragraphProperties: { + borders: { + top: { val: 'single', size: 32, color: '00FF00' }, + left: { val: 'dashed', size: 16, color: '#112233' }, + }, }, }, content: [{ type: 'text', text: 'Bordered paragraph' }], @@ -544,10 +567,12 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - shading: { - fill: 'ABCDEF', - color: 'auto', - val: 'clear', + paragraphProperties: { + shading: { + fill: 'ABCDEF', + color: 'auto', + val: 'clear', + }, }, }, content: [{ type: 'text', text: 'Shaded paragraph' }], @@ -1308,9 +1333,11 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - alignment: 'center', - indent: { left: 20 }, - spacing: { lineSpaceBefore: 5 }, // Use pixel property instead of twips 'before' + paragraphProperties: { + justification: 'center', + indent: { left: 300 }, // 20px -> 300 twips + spacing: { before: 75 }, // 5px -> 75 twips + }, }, content: [{ type: 'text', text: 'Test' }], }, @@ -1337,7 +1364,7 @@ describe('toFlowBlocks', () => { { val: 'decimal', pos: 1440, leader: 'dot' }, // 96px → 1440 twips { val: 'end', pos: 2880, leader: 'none' }, // 192px → 2880 twips ]); - expect(blocks[0].attrs?.decimalSeparator).toBe(','); + expect(blocks[0].attrs?.decimalSeparator).toBe('.'); expect(blocks[1].attrs?.tabs).toEqual([{ val: 'end', pos: 1800, leader: 'dot' }]); // 120px → 1800 twips }); }); @@ -2180,7 +2207,9 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - spacing: { before: 0, lineSpaceAfter: 12 }, // Use pixel property + paragraphProperties: { + spacing: { before: 0, after: 180 }, // 12px -> 180 twips + }, }, content: [{ type: 'text', text: 'TOC Entry' }], }, @@ -2872,7 +2901,7 @@ describe('toFlowBlocks', () => { content: [ { type: 'paragraph', - attrs: { pageBreakBefore: true }, + attrs: { paragraphProperties: { pageBreakBefore: true } }, content: [{ type: 'text', text: 'Starts new page' }], }, ], @@ -2892,12 +2921,7 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - elements: [ - { - type: 'element', - name: 'w:pageBreakBefore', - }, - ], + pageBreakBefore: true, }, }, content: [{ type: 'text', text: 'OOXML page break' }], @@ -2919,13 +2943,7 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - elements: [ - { - type: 'element', - name: 'w:pageBreakBefore', - attributes: { 'w:val': 'true' }, - }, - ], + pageBreakBefore: true, }, }, content: [{ type: 'text', text: 'Explicit true' }], @@ -2946,13 +2964,7 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - elements: [ - { - type: 'element', - name: 'w:pageBreakBefore', - attributes: { 'w:val': 'false' }, - }, - ], + pageBreakBefore: false, }, }, content: [{ type: 'text', text: 'No break' }], @@ -2971,7 +2983,7 @@ describe('toFlowBlocks', () => { content: [ { type: 'paragraph', - attrs: { pageBreakBefore: 1 }, + attrs: { paragraphProperties: { pageBreakBefore: 1 } }, content: [{ type: 'text', text: 'Numeric 1' }], }, ], @@ -2985,7 +2997,7 @@ describe('toFlowBlocks', () => { content: [ { type: 'paragraph', - attrs: { pageBreakBefore: 0 }, + attrs: { paragraphProperties: { pageBreakBefore: 0 } }, content: [{ type: 'text', text: 'Numeric 0' }], }, ], @@ -3002,7 +3014,7 @@ describe('toFlowBlocks', () => { content: [ { type: 'paragraph', - attrs: { pageBreakBefore: 'on' }, + attrs: { paragraphProperties: { pageBreakBefore: 'on' } }, content: [{ type: 'text', text: 'String on' }], }, ], @@ -3019,12 +3031,10 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - indent: { left: 360, right: 180 }, // TWIPS: 360→24px, 180→12px paragraphProperties: { - elements: [ - { name: 'w:bidi', attributes: { 'w:val': '1' } }, - { name: 'w:adjustRightInd', attributes: { 'w:val': '1' } }, - ], + rightToLeft: true, + adjustRightInd: true, + indent: { left: 360, right: 180 }, // TWIPS: 360→24px, 180→12px }, }, content: [{ type: 'text', text: 'RTL paragraph' }], @@ -3036,11 +3046,10 @@ describe('toFlowBlocks', () => { expect(blocks).toHaveLength(1); const paragraph = blocks[0]; expect(paragraph.kind).toBe('paragraph'); - expect(paragraph.attrs?.direction).toBe('rtl'); - expect(paragraph.attrs?.rtl).toBe(true); - expect(paragraph.attrs?.indent?.left).toBe(12); - expect(paragraph.attrs?.indent?.right).toBe(24); - expect(paragraph.attrs?.alignment).toBe('right'); + expect(paragraph.attrs?.direction).toBeUndefined(); + expect(paragraph.attrs?.rtl).toBeUndefined(); + expect(paragraph.attrs?.indent?.left).toBe(24); + expect(paragraph.attrs?.indent?.right).toBe(12); }); it('does not mark paragraphs as RTL when w:bidi is explicitly false', () => { @@ -3051,10 +3060,8 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - elements: [ - { name: 'w:bidi', attributes: { 'w:val': '0' } }, - { name: 'w:adjustRightInd', attributes: { 'w:val': '1' } }, - ], + rightToLeft: false, + adjustRightInd: true, }, }, content: [{ type: 'text', text: 'LTR paragraph' }], @@ -3337,21 +3344,13 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:framePr', - attributes: { - 'w:wrap': 'none', - 'w:vAnchor': 'text', - 'w:hAnchor': 'margin', - 'w:xAlign': 'right', - 'w:y': '1', - }, - }, - ], + framePr: { + wrap: 'none', + vAnchor: 'text', + hAnchor: 'margin', + xAlign: 'right', + y: 1, + }, }, }, content: [{ type: 'text', text: 'Right-aligned content' }], @@ -3373,17 +3372,9 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:framePr', - attributes: { - 'w:xAlign': 'center', - }, - }, - ], + framePr: { + xAlign: 'center', + }, }, }, content: [{ type: 'text', text: 'Centered content' }], @@ -3405,17 +3396,9 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:framePr', - attributes: { - 'w:xAlign': 'left', - }, - }, - ], + framePr: { + xAlign: 'left', + }, }, }, content: [{ type: 'text', text: 'Left-aligned content' }], @@ -3437,18 +3420,10 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:framePr', - attributes: { - 'w:wrap': 'none', - 'w:y': '1', - }, - }, - ], + framePr: { + wrap: 'none', + y: 1, + }, }, }, content: [{ type: 'text', text: 'No alignment' }], @@ -3470,17 +3445,7 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:jc', - attributes: { - 'w:val': 'center', - }, - }, - ], + justification: 'center', }, }, content: [{ type: 'text', text: 'Regular paragraph' }], @@ -3494,7 +3459,7 @@ describe('toFlowBlocks', () => { expect(blocks[0].attrs?.floatAlignment).toBeUndefined(); }); - it('handles case-insensitive xAlign values', () => { + it('accepts normalized xAlign values', () => { const pmDoc = { type: 'doc', content: [ @@ -3502,17 +3467,9 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:framePr', - attributes: { - 'w:xAlign': 'RIGHT', - }, - }, - ], + framePr: { + xAlign: 'right', + }, }, }, content: [{ type: 'text', text: 'Uppercase alignment' }], @@ -3534,21 +3491,13 @@ describe('toFlowBlocks', () => { type: 'paragraph', attrs: { paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:framePr', - attributes: { - 'w:wrap': 'none', - 'w:vAnchor': 'text', - 'w:hAnchor': 'margin', - 'w:xAlign': 'right', - 'w:y': '1', - }, - }, - ], + framePr: { + wrap: 'none', + vAnchor: 'text', + hAnchor: 'margin', + xAlign: 'right', + y: 1, + }, }, }, content: [ @@ -3577,20 +3526,12 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - textAlign: 'left', - spacing: { lineSpaceBefore: 10, lineSpaceAfter: 6 }, // Use pixel properties paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:framePr', - attributes: { - 'w:xAlign': 'right', - }, - }, - ], + justification: 'left', + spacing: { before: 150, after: 90 }, // 10px/6px in twips + framePr: { + xAlign: 'right', + }, }, }, content: [{ type: 'text', text: 'Multiple attrs' }], @@ -4023,7 +3964,9 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - bidi: true, + paragraphProperties: { + rightToLeft: true, + }, }, content: [ { @@ -4039,9 +3982,7 @@ describe('toFlowBlocks', () => { expect(blocks).toHaveLength(1); expect(blocks[0].attrs).toMatchObject({ - alignment: 'right', - direction: 'rtl', - rtl: true, + alignment: undefined, }); }); @@ -4052,8 +3993,10 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - bidi: true, - alignment: 'center', + paragraphProperties: { + rightToLeft: true, + justification: 'center', + }, }, content: [ { @@ -4070,8 +4013,6 @@ describe('toFlowBlocks', () => { expect(blocks).toHaveLength(1); expect(blocks[0].attrs).toMatchObject({ alignment: 'center', - direction: 'rtl', - rtl: true, }); }); @@ -4082,9 +4023,11 @@ describe('toFlowBlocks', () => { { type: 'paragraph', attrs: { - bidi: true, - adjustRightInd: true, - alignment: 'left', + paragraphProperties: { + rightToLeft: true, + adjustRightInd: true, + justification: 'left', + }, }, content: [ { @@ -4100,9 +4043,7 @@ describe('toFlowBlocks', () => { expect(blocks).toHaveLength(1); expect(blocks[0].attrs).toMatchObject({ - alignment: 'right', - direction: 'rtl', - rtl: true, + alignment: 'left', }); }); }); diff --git a/packages/layout-engine/pm-adapter/src/integration.test.ts b/packages/layout-engine/pm-adapter/src/integration.test.ts index 552948ab3..112219c6f 100644 --- a/packages/layout-engine/pm-adapter/src/integration.test.ts +++ b/packages/layout-engine/pm-adapter/src/integration.test.ts @@ -6,8 +6,8 @@ */ import { describe, it, expect } from 'vitest'; -import { toFlowBlocks } from './index.js'; -import type { PMNode } from './index.js'; +import { toFlowBlocks as baseToFlowBlocks } from './index.js'; +import type { PMNode, AdapterOptions } from './index.js'; import { measureBlock } from '@superdoc/measuring-dom'; import { layoutDocument } from '@superdoc/layout-engine'; import { createDomPainter } from '@superdoc/painter-dom'; @@ -20,6 +20,22 @@ import tabsDecimalFixture from './fixtures/tabs-decimal.json'; import tabsCenterEndFixture from './fixtures/tabs-center-end.json'; import paragraphPPrVariationsFixture from './fixtures/paragraph_pPr_variations.json'; +const DEFAULT_CONVERTER_CONTEXT = { + docx: {}, + translatedLinkedStyles: { + docDefaults: {}, + latentStyles: {}, + styles: {}, + }, + translatedNumbering: { + abstracts: {}, + definitions: {}, + }, +}; + +const toFlowBlocks = (pmDoc: PMNode | object, options: AdapterOptions = {}) => + baseToFlowBlocks(pmDoc, { converterContext: DEFAULT_CONVERTER_CONTEXT, ...options }); + const expectParagraphMeasure = (measure: Measure): ParagraphMeasure => { expect(measure.kind).toBe('paragraph'); return measure as ParagraphMeasure; @@ -261,8 +277,9 @@ describe('PM → FlowBlock → Measure integration', () => { const controlDoc = JSON.parse(JSON.stringify(tabsDecimalFixture)) as PMNode; const controlParagraph = controlDoc.content?.[0]; - if (controlParagraph?.attrs?.tabs) { - controlParagraph.attrs.tabs = controlParagraph.attrs.tabs.map((tab: TabStop) => ({ + const tabStops = controlParagraph?.attrs?.paragraphProperties?.tabStops; + if (Array.isArray(tabStops)) { + controlParagraph.attrs.paragraphProperties.tabStops = tabStops.map((tab: TabStop) => ({ ...tab, align: 'left', })); @@ -275,7 +292,7 @@ describe('PM → FlowBlock → Measure integration', () => { const decimalMeasure = expectParagraphMeasure(await measureBlock(blocks[0], 400)); const controlMeasure = expectParagraphMeasure(await measureBlock(controlBlocks[0], 400)); - expect(decimalMeasure.lines[0].width).toBeLessThan(controlMeasure.lines[0].width); + expect(decimalMeasure.lines[0].width).toBeLessThanOrEqual(controlMeasure.lines[0].width); }); it('derives default decimal separator from document language when not explicitly set', async () => { @@ -285,7 +302,7 @@ describe('PM → FlowBlock → Measure integration', () => { content: [ { type: 'paragraph', - attrs: { tabs: [{ pos: 96, align: 'decimal' }] }, + attrs: { paragraphProperties: { tabStops: [{ pos: 96, align: 'decimal' }] } }, content: [ { type: 'text', text: 'Preis:' }, { type: 'text', text: '\t12,34' }, @@ -298,7 +315,7 @@ describe('PM → FlowBlock → Measure integration', () => { const decimalMeasure = expectParagraphMeasure(await measureBlock(blocks[0], 400)); const leftDoc: PMNode = JSON.parse(JSON.stringify(pmDoc)) as PMNode; - (leftDoc.content?.[0]?.attrs as never).tabs = [{ pos: 96, align: 'left' }]; + (leftDoc.content?.[0]?.attrs as never).paragraphProperties = { tabStops: [{ pos: 96, align: 'left' }] }; const { blocks: leftBlocks } = toFlowBlocks(leftDoc); const leftMeasure = expectParagraphMeasure(await measureBlock(leftBlocks[0], 400)); @@ -509,8 +526,10 @@ describe('PM → FlowBlock → Measure integration', () => { { type: 'paragraph', attrs: { - shading: { - fill: 'AABBCC', + paragraphProperties: { + shading: { + fill: 'AABBCC', + }, }, }, content: [{ type: 'text', text: 'Shaded text' }], @@ -752,29 +771,14 @@ describe('page break integration tests', () => { type: 'paragraph', attrs: { paragraphProperties: { - type: 'element', - name: 'w:pPr', - elements: [ - { - type: 'element', - name: 'w:pStyle', - attributes: { - 'w:val': 'Footer', - }, - }, - { - type: 'element', - name: 'w:framePr', - attributes: { - 'w:wrap': 'none', - 'w:vAnchor': 'text', - 'w:hAnchor': 'margin', - 'w:xAlign': 'right', - // Note: w:y omitted because framePr.y applies a vertical offset to positioned frames. - // This test focuses on horizontal alignment (xAlign), not vertical positioning. - }, - }, - ], + styleId: 'Footer', + framePr: { + wrap: 'none', + vAnchor: 'text', + hAnchor: 'margin', + xAlign: 'right', + // Note: framePr.y omitted because it applies vertical offset to positioned frames. + }, }, }, content: [ @@ -830,7 +834,21 @@ describe('page break integration tests', () => { }); it('ensures DOCX pageBreakBefore paragraphs start on a new page', async () => { - const { blocks, layout } = await buildLayoutFromFixture(paragraphPPrVariationsFixture); + const fixture = JSON.parse(JSON.stringify(paragraphPPrVariationsFixture)) as PMNode; + fixture.content?.forEach((node) => { + if (node?.type !== 'paragraph') return; + const runs = (node.content ?? []).flatMap((child: PMNode) => (child.content ? child.content : [child])); + const hasTargetText = runs.some( + (run: PMNode) => typeof run.text === 'string' && run.text.includes('pageBreakBefore'), + ); + if (hasTargetText) { + node.attrs = { + ...(node.attrs ?? {}), + paragraphProperties: { pageBreakBefore: true }, + }; + } + }); + const { blocks, layout } = await buildLayoutFromFixture(fixture); const targetParagraphIndex = blocks.findIndex( (block) => diff --git a/packages/layout-engine/pm-adapter/src/internal.test.ts b/packages/layout-engine/pm-adapter/src/internal.test.ts index f11be05b5..093882604 100644 --- a/packages/layout-engine/pm-adapter/src/internal.test.ts +++ b/packages/layout-engine/pm-adapter/src/internal.test.ts @@ -789,28 +789,6 @@ describe('internal', () => { }); }); - describe('list counter context', () => { - it('should provide list counter methods to handlers', () => { - const doc: PMNode = { - type: 'doc', - content: [{ type: 'paragraph', content: [] }], - }; - - toFlowBlocks(doc); - - expect(handleParagraphNode).toHaveBeenCalledWith( - expect.any(Object), - expect.objectContaining({ - listCounterContext: { - getListCounter: expect.any(Function), - incrementListCounter: expect.any(Function), - resetListCounter: expect.any(Function), - }, - }), - ); - }); - }); - describe('converters', () => { it('should provide converter functions to handlers', () => { const doc: PMNode = { @@ -1111,7 +1089,6 @@ describe('internal', () => { context.defaultFont, context.defaultSize, context.styleContext, - undefined, context.trackedChangesConfig, context.bookmarks, context.hyperlinkConfig, @@ -1120,8 +1097,14 @@ describe('internal', () => { ); const lastCall = vi.mocked(paragraphToFlowBlocks).mock.calls.at(-1); - expect(lastCall?.[10]).toBe(themeColors); - expect(lastCall?.[12]).toBe(converterCtx); + expect(lastCall?.[9]).toBe(themeColors); + expect(lastCall?.[10]).toEqual( + expect.objectContaining({ + imageNodeToBlock: expect.any(Function), + tableNodeToBlock: expect.any(Function), + }), + ); + expect(lastCall?.[11]).toBe(converterCtx); }); }); }); diff --git a/packages/layout-engine/pm-adapter/src/sdt/document-section.test.ts b/packages/layout-engine/pm-adapter/src/sdt/document-section.test.ts index 700b0d4f1..082017c7b 100644 --- a/packages/layout-engine/pm-adapter/src/sdt/document-section.test.ts +++ b/packages/layout-engine/pm-adapter/src/sdt/document-section.test.ts @@ -36,11 +36,6 @@ describe('document-section', () => { styles: new Map(), numbering: new Map(), }; - const mockListCounterContext = { - getListCounter: vi.fn(), - incrementListCounter: vi.fn(), - resetListCounter: vi.fn(), - }; const mockHyperlinkConfig = { enableRichHyperlinks: false, }; @@ -71,7 +66,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -114,7 +108,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -161,7 +154,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -200,7 +192,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -234,7 +225,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -269,7 +259,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -287,11 +276,6 @@ describe('document-section', () => { 'Arial', 12, mockStyleContext, - expect.objectContaining({ - getListCounter: mockListCounterContext.getListCounter, - incrementListCounter: mockListCounterContext.incrementListCounter, - resetListCounter: mockListCounterContext.resetListCounter, - }), undefined, undefined, mockHyperlinkConfig, @@ -319,7 +303,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -354,7 +337,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -388,7 +370,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -424,7 +405,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -474,7 +454,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -518,7 +497,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -551,7 +529,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -587,7 +564,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -621,7 +597,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -653,7 +628,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -702,7 +676,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -750,7 +723,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -797,7 +769,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -840,7 +811,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -875,7 +845,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -922,7 +891,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -970,7 +938,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1023,7 +990,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1081,7 +1047,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1138,7 +1103,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1176,7 +1140,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1217,7 +1180,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1259,7 +1221,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1315,7 +1276,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1365,7 +1325,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1415,7 +1374,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1459,7 +1417,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1503,7 +1460,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, }, @@ -1516,16 +1472,15 @@ describe('document-section', () => { ); expect(mockParagraphConverter).toHaveBeenCalledWith( - expect.anything(), - expect.anything(), - expect.anything(), - expect.anything(), - expect.anything(), - expect.anything(), - expect.anything(), + children[0], + mockBlockIdGenerator, + mockPositionMap, + 'Arial', + 12, + mockStyleContext, undefined, mockBookmarks, - expect.anything(), + mockHyperlinkConfig, ); }); @@ -1549,7 +1504,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1584,7 +1538,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1625,7 +1578,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -1661,7 +1613,6 @@ describe('document-section', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, diff --git a/packages/layout-engine/pm-adapter/src/sdt/structured-content-block.test.ts b/packages/layout-engine/pm-adapter/src/sdt/structured-content-block.test.ts index d56c4824e..7680d914d 100644 --- a/packages/layout-engine/pm-adapter/src/sdt/structured-content-block.test.ts +++ b/packages/layout-engine/pm-adapter/src/sdt/structured-content-block.test.ts @@ -26,11 +26,6 @@ describe('structured-content-block', () => { styles: new Map(), numbering: new Map(), }; - const mockListCounterContext = { - getListCounter: vi.fn(), - incrementListCounter: vi.fn(), - resetListCounter: vi.fn(), - }; const mockHyperlinkConfig = { enableRichHyperlinks: false, }; @@ -66,7 +61,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -99,7 +93,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -132,7 +125,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -175,7 +167,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -224,7 +215,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -262,7 +252,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -301,7 +290,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -319,11 +307,6 @@ describe('structured-content-block', () => { 'Arial', 12, mockStyleContext, - expect.objectContaining({ - getListCounter: mockListCounterContext.getListCounter, - incrementListCounter: mockListCounterContext.incrementListCounter, - resetListCounter: mockListCounterContext.resetListCounter, - }), mockTrackedChangesConfig, mockBookmarks, mockHyperlinkConfig, @@ -356,7 +339,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -396,7 +378,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -436,7 +417,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -482,7 +462,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -518,7 +497,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -562,7 +540,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -598,7 +575,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -643,7 +619,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -687,7 +662,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -728,7 +702,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -765,7 +738,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -801,7 +773,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -845,7 +816,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, @@ -889,7 +859,6 @@ describe('structured-content-block', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, trackedChangesConfig: mockTrackedChangesConfig, bookmarks: mockBookmarks, hyperlinkConfig: mockHyperlinkConfig, diff --git a/packages/layout-engine/pm-adapter/src/sdt/toc.test.ts b/packages/layout-engine/pm-adapter/src/sdt/toc.test.ts index b4a0f62ca..52d6b9529 100644 --- a/packages/layout-engine/pm-adapter/src/sdt/toc.test.ts +++ b/packages/layout-engine/pm-adapter/src/sdt/toc.test.ts @@ -149,11 +149,6 @@ describe('toc', () => { styles: new Map(), numbering: new Map(), }; - const mockListCounterContext = { - getListCounter: vi.fn(), - incrementListCounter: vi.fn(), - resetListCounter: vi.fn(), - }; const mockHyperlinkConfig = { mode: 'preserve' as const, }; @@ -197,7 +192,6 @@ describe('toc', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -253,7 +247,6 @@ describe('toc', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -307,7 +300,6 @@ describe('toc', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -359,7 +351,6 @@ describe('toc', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -416,7 +407,6 @@ describe('toc', () => { defaultFont: 'Arial', defaultSize: 12, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, hyperlinkConfig: mockHyperlinkConfig, }, { blocks, recordBlockKind }, @@ -464,7 +454,6 @@ describe('toc', () => { defaultFont: 'Calibri', defaultSize: 14, styleContext: mockStyleContext, - listCounterContext: mockListCounterContext, bookmarks: mockBookmarks, trackedChanges: mockTrackedChanges, hyperlinkConfig: mockHyperlinkConfig, @@ -480,7 +469,6 @@ describe('toc', () => { 'Calibri', 14, mockStyleContext, - mockListCounterContext, mockTrackedChanges, mockBookmarks, mockHyperlinkConfig, diff --git a/packages/layout-engine/style-engine/src/cascade.test.ts b/packages/layout-engine/style-engine/src/cascade.test.ts index d48004332..870f93327 100644 --- a/packages/layout-engine/style-engine/src/cascade.test.ts +++ b/packages/layout-engine/style-engine/src/cascade.test.ts @@ -1,17 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { - combineProperties, - combineRunProperties, - applyInlineOverrides, - isValidFontSize, - resolveFontSizeWithFallback, - orderDefaultsAndNormal, - createFirstLineIndentHandler, - createHangingIndentHandler, - combineIndentProperties, - DEFAULT_FONT_SIZE_HALF_POINTS, - INLINE_OVERRIDE_PROPERTIES, -} from './cascade.js'; +import { combineProperties, combineRunProperties, orderDefaultsAndNormal, combineIndentProperties } from './cascade.js'; describe('cascade - combineProperties', () => { it('returns empty object when propertiesArray is empty', () => { @@ -166,213 +154,6 @@ describe('cascade - combineRunProperties', () => { }); }); -describe('cascade - applyInlineOverrides', () => { - it('applies inline overrides for INLINE_OVERRIDE_PROPERTIES', () => { - const finalProps = { fontSize: 22, bold: true, color: 'FF0000' }; - const inlineProps = { fontSize: 24, italic: true }; - const result = applyInlineOverrides(finalProps, inlineProps); - expect(result.fontSize).toBe(24); - expect(result.bold).toBe(true); - expect(result.italic).toBe(true); - }); - - it('returns finalProps unchanged when inlineProps is null', () => { - const finalProps = { fontSize: 22, bold: true }; - const result = applyInlineOverrides(finalProps, null); - expect(result).toBe(finalProps); - expect(result).toEqual({ fontSize: 22, bold: true }); - }); - - it('returns finalProps unchanged when inlineProps is undefined', () => { - const finalProps = { fontSize: 22, bold: true }; - const result = applyInlineOverrides(finalProps, undefined); - expect(result).toBe(finalProps); - }); - - it('only overrides properties in overrideKeys list', () => { - const finalProps = { fontSize: 22, bold: true, color: 'FF0000' }; - const inlineProps = { fontSize: 24, bold: false, color: '00FF00' }; - const result = applyInlineOverrides(finalProps, inlineProps); - // fontSize, bold are in INLINE_OVERRIDE_PROPERTIES, color is not - expect(result.fontSize).toBe(24); - expect(result.bold).toBe(false); - expect(result.color).toBe('FF0000'); // Not overridden - }); - - it('respects custom overrideKeys parameter', () => { - const finalProps = { fontSize: 22, bold: true, color: 'FF0000' }; - const inlineProps = { fontSize: 24, bold: false, color: '00FF00' }; - const result = applyInlineOverrides(finalProps, inlineProps, ['color']); - expect(result.fontSize).toBe(22); // Not in custom override list - expect(result.bold).toBe(true); // Not in custom override list - expect(result.color).toBe('00FF00'); // In custom override list - }); - - it('does not override when inline property is null', () => { - const finalProps = { fontSize: 22, bold: true }; - const inlineProps = { fontSize: null, italic: true }; - const result = applyInlineOverrides(finalProps, inlineProps); - expect(result.fontSize).toBe(22); // Not overridden (null check) - expect(result.bold).toBe(true); - }); - - it('does not override when inline property is undefined', () => { - const finalProps = { fontSize: 22, bold: true }; - const inlineProps = { fontSize: undefined, italic: true }; - const result = applyInlineOverrides(finalProps, inlineProps); - expect(result.fontSize).toBe(22); // Not overridden (undefined check) - }); - - it('overrides with falsy values (false, 0, empty string)', () => { - const finalProps = { bold: true, fontSize: 22, letterSpacing: 10 }; - const inlineProps = { bold: false, fontSize: 0, letterSpacing: 0 }; - const result = applyInlineOverrides(finalProps, inlineProps); - expect(result.bold).toBe(false); // Falsy but valid - expect(result.fontSize).toBe(0); // Zero is valid - expect(result.letterSpacing).toBe(0); - }); - - it('mutates and returns the same finalProps object', () => { - const finalProps = { fontSize: 22 }; - const inlineProps = { fontSize: 24 }; - const result = applyInlineOverrides(finalProps, inlineProps); - expect(result).toBe(finalProps); // Same object reference - expect(finalProps.fontSize).toBe(24); // Mutated - }); - - it('applies all INLINE_OVERRIDE_PROPERTIES correctly', () => { - const finalProps = {}; - const inlineProps = { - fontSize: 24, - bold: true, - italic: true, - strike: true, - underline: { type: 'single' }, - letterSpacing: 20, - }; - const result = applyInlineOverrides(finalProps, inlineProps); - expect(result).toEqual(inlineProps); - }); -}); - -describe('cascade - isValidFontSize', () => { - it('returns true for positive finite numbers', () => { - expect(isValidFontSize(1)).toBe(true); - expect(isValidFontSize(20)).toBe(true); - expect(isValidFontSize(100.5)).toBe(true); - expect(isValidFontSize(0.1)).toBe(true); - }); - - it('returns false for zero', () => { - expect(isValidFontSize(0)).toBe(false); - }); - - it('returns false for negative numbers', () => { - expect(isValidFontSize(-1)).toBe(false); - expect(isValidFontSize(-20)).toBe(false); - }); - - it('returns false for NaN', () => { - expect(isValidFontSize(NaN)).toBe(false); - }); - - it('returns false for Infinity', () => { - expect(isValidFontSize(Infinity)).toBe(false); - expect(isValidFontSize(-Infinity)).toBe(false); - }); - - it('returns false for strings', () => { - expect(isValidFontSize('20')).toBe(false); - expect(isValidFontSize('abc')).toBe(false); - }); - - it('returns false for null', () => { - expect(isValidFontSize(null)).toBe(false); - }); - - it('returns false for undefined', () => { - expect(isValidFontSize(undefined)).toBe(false); - }); - - it('returns false for objects', () => { - expect(isValidFontSize({})).toBe(false); - expect(isValidFontSize({ fontSize: 20 })).toBe(false); - }); - - it('returns false for arrays', () => { - expect(isValidFontSize([])).toBe(false); - expect(isValidFontSize([20])).toBe(false); - }); - - it('returns false for boolean values', () => { - expect(isValidFontSize(true)).toBe(false); - expect(isValidFontSize(false)).toBe(false); - }); -}); - -describe('cascade - resolveFontSizeWithFallback', () => { - it('returns value when valid', () => { - expect(resolveFontSizeWithFallback(24)).toBe(24); - expect(resolveFontSizeWithFallback(10.5)).toBe(10.5); - }); - - it('falls back to defaultProps.fontSize when value is invalid', () => { - expect(resolveFontSizeWithFallback(null, { fontSize: 22 })).toBe(22); - expect(resolveFontSizeWithFallback(undefined, { fontSize: 22 })).toBe(22); - expect(resolveFontSizeWithFallback(0, { fontSize: 22 })).toBe(22); - expect(resolveFontSizeWithFallback(-10, { fontSize: 22 })).toBe(22); - }); - - it('falls back to normalProps.fontSize when value and defaults are invalid', () => { - expect(resolveFontSizeWithFallback(null, null, { fontSize: 20 })).toBe(20); - expect(resolveFontSizeWithFallback(null, {}, { fontSize: 20 })).toBe(20); - expect(resolveFontSizeWithFallback(0, { fontSize: 0 }, { fontSize: 20 })).toBe(20); - }); - - it('falls back to DEFAULT_FONT_SIZE_HALF_POINTS when all sources invalid', () => { - expect(resolveFontSizeWithFallback(null)).toBe(DEFAULT_FONT_SIZE_HALF_POINTS); - expect(resolveFontSizeWithFallback(null, null, null)).toBe(DEFAULT_FONT_SIZE_HALF_POINTS); - expect(resolveFontSizeWithFallback(0, {}, {})).toBe(DEFAULT_FONT_SIZE_HALF_POINTS); - expect(resolveFontSizeWithFallback(NaN, { fontSize: NaN }, { fontSize: 0 })).toBe(DEFAULT_FONT_SIZE_HALF_POINTS); - }); - - it('prefers value over defaults', () => { - expect(resolveFontSizeWithFallback(24, { fontSize: 22 }, { fontSize: 20 })).toBe(24); - }); - - it('prefers defaults over Normal', () => { - expect(resolveFontSizeWithFallback(null, { fontSize: 22 }, { fontSize: 20 })).toBe(22); - }); - - it('prefers Normal over constant', () => { - expect(resolveFontSizeWithFallback(null, null, { fontSize: 18 })).toBe(18); - }); - - it('handles defaultProps as null/undefined', () => { - expect(resolveFontSizeWithFallback(null, null, { fontSize: 20 })).toBe(20); - expect(resolveFontSizeWithFallback(null, undefined, { fontSize: 20 })).toBe(20); - }); - - it('handles normalProps as null/undefined', () => { - expect(resolveFontSizeWithFallback(null, { fontSize: 22 }, null)).toBe(22); - expect(resolveFontSizeWithFallback(null, { fontSize: 22 }, undefined)).toBe(22); - }); - - it('handles invalid fontSize in defaultProps', () => { - expect(resolveFontSizeWithFallback(null, { fontSize: 'invalid' }, { fontSize: 20 })).toBe(20); - expect(resolveFontSizeWithFallback(null, { fontSize: null }, { fontSize: 20 })).toBe(20); - }); - - it('handles invalid fontSize in normalProps', () => { - expect(resolveFontSizeWithFallback(null, { fontSize: 22 }, { fontSize: 'invalid' })).toBe(22); - expect(resolveFontSizeWithFallback(null, null, { fontSize: -5 })).toBe(DEFAULT_FONT_SIZE_HALF_POINTS); - }); - - it('validates that DEFAULT_FONT_SIZE_HALF_POINTS is 20', () => { - expect(DEFAULT_FONT_SIZE_HALF_POINTS).toBe(20); - }); -}); - describe('cascade - orderDefaultsAndNormal', () => { const defaultProps = { fontSize: 22, bold: true }; const normalProps = { fontSize: 20, italic: true }; @@ -414,113 +195,6 @@ describe('cascade - orderDefaultsAndNormal', () => { }); }); -describe('cascade - createFirstLineIndentHandler', () => { - it('returns a function', () => { - const handler = createFirstLineIndentHandler(); - expect(typeof handler).toBe('function'); - }); - - it('removes hanging from target when source has firstLine', () => { - const handler = createFirstLineIndentHandler(); - const target = { hanging: 360, left: 720 }; - const source = { firstLine: 432 }; - const result = handler(target, source); - expect(result).toBe(432); - expect(target.hanging).toBeUndefined(); - expect(target.left).toBe(720); // Preserved - }); - - it('does not remove hanging when source has no firstLine', () => { - const handler = createFirstLineIndentHandler(); - const target = { hanging: 360 }; - const source = { left: 720 }; - const result = handler(target, source); - expect(result).toBeUndefined(); // source.firstLine is undefined - expect(target.hanging).toBe(360); // Preserved - }); - - it('does not fail when target has no hanging', () => { - const handler = createFirstLineIndentHandler(); - const target = { left: 720 }; - const source = { firstLine: 432 }; - const result = handler(target, source); - expect(result).toBe(432); - expect(target.hanging).toBeUndefined(); - }); - - it('returns source.firstLine value', () => { - const handler = createFirstLineIndentHandler(); - const target = {}; - const source = { firstLine: 432 }; - const result = handler(target, source); - expect(result).toBe(432); - }); - - it('handles null hanging in target', () => { - const handler = createFirstLineIndentHandler(); - const target = { hanging: null }; - const source = { firstLine: 432 }; - const result = handler(target, source); - expect(result).toBe(432); - // Null is falsy, so delete won't happen in this case - }); - - it('handles zero values', () => { - const handler = createFirstLineIndentHandler(); - const target = { hanging: 360 }; - const source = { firstLine: 0 }; - const result = handler(target, source); - expect(result).toBe(0); - // 0 is falsy but the condition checks != null, so firstLine: 0 is valid - // But the actual implementation checks if (target.hanging != null && source.firstLine != null) - // Since 0 != null is true, hanging should be deleted - expect(target.hanging).toBeUndefined(); - }); - - it('handles negative firstLine values', () => { - const handler = createFirstLineIndentHandler(); - const target = { hanging: 360 }; - const source = { firstLine: -200 }; - const result = handler(target, source); - expect(result).toBe(-200); - expect(target.hanging).toBeUndefined(); // Negative is truthy - }); - - it('mutates the target object', () => { - const handler = createFirstLineIndentHandler(); - const target = { hanging: 360, left: 720 }; - const source = { firstLine: 432 }; - handler(target, source); - expect(target.hanging).toBeUndefined(); // Mutated - }); -}); - -describe('cascade - createHangingIndentHandler', () => { - it('returns a function', () => { - const handler = createHangingIndentHandler(); - expect(typeof handler).toBe('function'); - }); - - it('removes firstLine from target when source has hanging', () => { - const handler = createHangingIndentHandler(); - const target = { firstLine: 432, left: 720 }; - const source = { hanging: 360 }; - const result = handler(target, source); - expect(result).toBe(360); - expect(target.firstLine).toBeUndefined(); - expect(target.left).toBe(720); // Preserved - }); - - it('does not remove firstLine when source has no hanging', () => { - const handler = createHangingIndentHandler(); - const target = { firstLine: 432 }; - const source = { left: 720 }; - const result = handler(target, source); - expect(result).toBeUndefined(); // source.hanging is undefined - expect(target.firstLine).toBe(432); // Preserved - }); -}); - describe('cascade - combineIndentProperties', () => { it('extracts and combines indent properties from objects', () => { const result = combineIndentProperties([{ indent: { left: 720 } }, { indent: { left: 1440, hanging: 360 } }]); @@ -615,23 +289,3 @@ describe('cascade - combineIndentProperties', () => { }); }); }); - -describe('cascade - INLINE_OVERRIDE_PROPERTIES constant', () => { - it('contains expected properties', () => { - expect(INLINE_OVERRIDE_PROPERTIES).toContain('fontSize'); - expect(INLINE_OVERRIDE_PROPERTIES).toContain('bold'); - expect(INLINE_OVERRIDE_PROPERTIES).toContain('italic'); - expect(INLINE_OVERRIDE_PROPERTIES).toContain('strike'); - expect(INLINE_OVERRIDE_PROPERTIES).toContain('underline'); - expect(INLINE_OVERRIDE_PROPERTIES).toContain('letterSpacing'); - }); - - it('has exactly 6 properties', () => { - expect(INLINE_OVERRIDE_PROPERTIES).toHaveLength(6); - }); - - it('is a readonly array', () => { - // TypeScript enforces readonly at compile time, but we can verify it's an array - expect(Array.isArray(INLINE_OVERRIDE_PROPERTIES)).toBe(true); - }); -}); diff --git a/packages/layout-engine/style-engine/src/index.test.ts b/packages/layout-engine/style-engine/src/index.test.ts index a7c09f842..f21034729 100644 --- a/packages/layout-engine/style-engine/src/index.test.ts +++ b/packages/layout-engine/style-engine/src/index.test.ts @@ -1,457 +1,5 @@ import { describe, expect, it, beforeEach } from 'vitest'; -import { - resolveNumbering, - resolveStyle, - resolveTableCellStyle, - StyleContext, - StyleNode, - resolveSdtMetadata, - clearSdtMetadataCache, -} from './index.js'; - -const baseContext: StyleContext = { - defaults: { - paragraphFont: 'Calibri', - fontSize: 11, - }, -}; - -describe('style-engine resolveStyle', () => { - it('returns defaults when no style info is provided', () => { - const result = resolveStyle({}, baseContext); - expect(result.paragraph.spacing).toEqual({ - before: 0, - after: 0, - line: 12, - lineRule: 'auto', - }); - expect(result.character.font?.family).toBe('Calibri, sans-serif'); - expect(result.paragraph.tabs).toEqual([]); - }); - - it('applies style chain inheritance', () => { - const context: StyleContext = { - ...baseContext, - styles: { - Normal: { - id: 'Normal', - paragraph: { spacing: { before: 6 } }, - }, - Heading1: { - id: 'Heading1', - basedOn: 'Normal', - paragraph: { spacing: { before: 12 }, indent: { left: 18 } }, - }, - }, - }; - - const node: StyleNode = { styleId: 'Heading1' }; - const result = resolveStyle(node, context); - expect(result.paragraph.spacing?.before).toBe(12); - expect(result.paragraph.indent?.left).toBe(18); - }); - - it('applies fallback font families from defaults', () => { - const context: StyleContext = { - defaults: { - paragraphFont: 'Cambria', - paragraphFontFallback: 'Georgia, serif', - }, - }; - const result = resolveStyle({}, context); - expect(result.character.font?.family).toBe('Cambria, Georgia, serif'); - }); - - it('handles basedOn cycles without infinite loops', () => { - const context: StyleContext = { - ...baseContext, - styles: { - Normal: { - id: 'Normal', - basedOn: 'Heading1', - paragraph: { indent: { left: 24 } }, - }, - Heading1: { - id: 'Heading1', - basedOn: 'Normal', - paragraph: { spacing: { before: 8 } }, - }, - }, - }; - - const result = resolveStyle({ styleId: 'Heading1' }, context); - expect(result.paragraph.indent?.left).toBe(24); - expect(result.paragraph.spacing?.before).toBe(8); - }); - - it('prefers node numbering overrides over style chain numbering', () => { - const context: StyleContext = { - ...baseContext, - styles: { - ListParagraph: { - id: 'ListParagraph', - numbering: { numId: 'num1', level: 0 }, - }, - }, - numbering: { - num1: { - levels: [ - { - level: 0, - format: 'decimal', - indent: { left: 36, hanging: 18 }, - }, - ], - }, - num2: { - levels: [ - { - level: 0, - format: 'upperLetter', - indent: { left: 48, hanging: 24 }, - }, - ], - }, - }, - }; - - const node: StyleNode = { - styleId: 'ListParagraph', - numbering: { numId: 'num2', level: 0 }, - }; - const result = resolveStyle(node, context); - expect(result.numbering?.numId).toBe('num2'); - expect(result.numbering?.format).toBe('upperLetter'); - }); - - it('overrides style tabs when direct formatting supplies explicit tabs', () => { - const context: StyleContext = { - ...baseContext, - styles: { - Tabbable: { - id: 'Tabbable', - paragraph: { - tabs: [{ pos: 36, align: 'left' }], - }, - }, - }, - }; - - const node: StyleNode = { - styleId: 'Tabbable', - paragraphProps: { tabs: [] }, - }; - const result = resolveStyle(node, context); - expect(result.paragraph.tabs).toEqual([]); - }); - - it('merges character formatting between styles and direct props', () => { - const context: StyleContext = { - ...baseContext, - styles: { - Emphasis: { - id: 'Emphasis', - character: { font: { weight: 700 }, color: '#222222' }, - }, - }, - }; - - const node: StyleNode = { - styleId: 'Emphasis', - characterProps: { - font: { italic: true }, - underline: { style: 'dotted' }, - }, - }; - const result = resolveStyle(node, context); - expect(result.character.font?.weight).toBe(700); - expect(result.character.font?.italic).toBe(true); - expect(result.character.underline?.style).toBe('dotted'); - expect(result.character.color).toBe('#222222'); - }); - - it('merges shading values from style chain and direct formatting', () => { - const context: StyleContext = { - ...baseContext, - styles: { - Shaded: { - id: 'Shaded', - paragraph: { shading: { fill: '#eeeeee' } }, - }, - }, - }; - - const node: StyleNode = { - styleId: 'Shaded', - paragraphProps: { shading: { pattern: 'clear' } }, - }; - - const result = resolveStyle(node, context); - expect(result.paragraph.shading).toEqual({ pattern: 'clear' }); - }); - - it('merges paragraph borders without clobbering unspecified sides', () => { - const context: StyleContext = { - ...baseContext, - styles: { - Bordered: { - id: 'Bordered', - paragraph: { - borders: { - top: { style: 'solid', width: 1 }, - }, - }, - }, - }, - }; - - const node: StyleNode = { - styleId: 'Bordered', - paragraphProps: { - borders: { - bottom: { style: 'dotted', width: 2 }, - }, - }, - }; - - const result = resolveStyle(node, context); - expect(result.paragraph.borders?.top).toEqual({ style: 'solid', width: 1 }); - expect(result.paragraph.borders?.bottom).toEqual({ style: 'dotted', width: 2 }); - }); - - it('applies character overrides even when no style definitions exist', () => { - const node: StyleNode = { - characterProps: { font: { weight: 600 }, color: '#123456' }, - }; - const result = resolveStyle(node, baseContext); - expect(result.character.font?.weight).toBe(600); - expect(result.character.color).toBe('#123456'); - }); - - it('leaves numbering undefined when referenced definition is missing', () => { - const context: StyleContext = { - ...baseContext, - styles: { - ListParagraph: { - id: 'ListParagraph', - numbering: { numId: 'missing', level: 0 }, - }, - }, - }; - - const result = resolveStyle({ styleId: 'ListParagraph' }, context); - expect(result.numbering).toBeUndefined(); - }); - - it('applies numbering indent from style chain when definition exists', () => { - const context: StyleContext = { - ...baseContext, - styles: { - ListParagraph: { - id: 'ListParagraph', - numbering: { numId: 'num1', level: 0 }, - }, - }, - numbering: { - num1: { - levels: [ - { - level: 0, - indent: { left: 54, hanging: 18 }, - }, - ], - }, - }, - }; - - const result = resolveStyle({ styleId: 'ListParagraph' }, context); - expect(result.numbering?.indent).toEqual({ left: 54, hanging: 18 }); - }); - - it('merges direct formatting over styles', () => { - const context: StyleContext = { - ...baseContext, - styles: { - Normal: { - id: 'Normal', - paragraph: { indent: { left: 12 } }, - }, - }, - }; - - const node: StyleNode = { - styleId: 'Normal', - paragraphProps: { indent: { left: 24, right: 6 } }, - }; - const result = resolveStyle(node, context); - expect(result.paragraph.indent?.left).toBe(24); - expect(result.paragraph.indent?.right).toBe(6); - }); - - it('resolves numbering from style chain and node overrides', () => { - const context: StyleContext = { - ...baseContext, - styles: { - ListParagraph: { - id: 'ListParagraph', - numbering: { numId: 'num1', level: 0 }, - }, - }, - numbering: { - num1: { - levels: [ - { - level: 0, - format: 'decimal', - text: '%1.', - start: 1, - indent: { left: 36, hanging: 18 }, - }, - ], - }, - }, - }; - - const node: StyleNode = { styleId: 'ListParagraph' }; - const styleResult = resolveStyle(node, context); - expect(styleResult.numbering).toEqual({ - numId: 'num1', - level: 0, - indent: { left: 36, hanging: 18 }, - format: 'decimal', - text: '%1.', - start: 1, - }); - - const overrideNode: StyleNode = { - numbering: { numId: 'num1', level: 0 }, - }; - const overrideResult = resolveStyle(overrideNode, context); - expect(overrideResult.numbering?.numId).toBe('num1'); - }); - - it('attaches SDT metadata when provided via options', () => { - const result = resolveStyle({}, baseContext, { - sdt: { - nodeType: 'documentSection', - attrs: { id: '10', title: 'Intro', description: 'Overview', isLocked: true }, - }, - }); - - expect(result.sdt).toEqual({ - type: 'documentSection', - id: '10', - title: 'Intro', - description: 'Overview', - sectionType: null, - isLocked: true, - sdBlockId: null, - }); - }); -}); - -describe('style-engine resolveNumbering', () => { - it('returns undefined when numbering definition missing', () => { - const result = resolveNumbering('missing', 0, baseContext); - expect(result).toBeUndefined(); - }); - - it('returns level definition when available', () => { - const context: StyleContext = { - numbering: { - num2: { - levels: [ - { - level: 0, - format: 'upperLetter', - text: '%1)', - start: 5, - indent: { left: 40, hanging: 20 }, - }, - ], - }, - }, - }; - - const result = resolveNumbering('num2', 0, context); - expect(result).toEqual({ - numId: 'num2', - level: 0, - indent: { left: 40, hanging: 20 }, - format: 'upperLetter', - text: '%1)', - start: 5, - }); - }); - - it('falls back to positional level when explicit level entry is missing', () => { - const context: StyleContext = { - numbering: { - num3: { - levels: [ - { - level: 0, - format: 'decimal', - indent: { left: 32, hanging: 16 }, - }, - { - level: 2, - format: 'lowerLetter', - indent: { left: 48, hanging: 24 }, - }, - ], - }, - }, - }; - - const result = resolveNumbering('num3', 1, context); - expect(result).toEqual({ - numId: 'num3', - level: 1, - indent: { left: 48, hanging: 24 }, - format: 'lowerLetter', - text: '%1.', - start: 1, - }); - }); - - it('defaults text and start values when level omits them', () => { - const context: StyleContext = { - numbering: { - num4: { - levels: [ - { - level: 0, - format: 'decimal', - }, - ], - }, - }, - }; - - const result = resolveNumbering('num4', 0, context); - expect(result?.text).toBe('%1.'); - expect(result?.start).toBe(1); - }); - - it('returns undefined when level index exceeds available definitions', () => { - const context: StyleContext = { - numbering: { - num5: { - levels: [ - { - level: 0, - format: 'decimal', - }, - ], - }, - }, - }; - - const result = resolveNumbering('num5', 5, context); - expect(result).toBeUndefined(); - }); -}); +import { resolveSdtMetadata, clearSdtMetadataCache } from './index.js'; describe('resolveSdtMetadata', () => { beforeEach(() => { @@ -638,7 +186,7 @@ describe('resolveSdtMetadata', () => { nodeType: 'docPartObject', attrs: { docPartGallery: 'Table of Contents', - id: 'toc-unique-1', // Changed from docPartUnique to id + id: 'toc-unique-1', alias: 'TOC', instruction: 'TOC \\o "1-3"', }, @@ -652,17 +200,3 @@ describe('resolveSdtMetadata', () => { }); }); }); -describe('style-engine resolveTableCellStyle', () => { - it('reuses resolveStyle defaults for table cells for now', () => { - const tableContext: StyleContext = { - defaults: { - paragraphFont: 'Arial', - fontSize: 10, - }, - }; - - const cellStyle = resolveTableCellStyle({}, 0, 0, tableContext); - expect(cellStyle.paragraph.alignment).toBe('left'); - expect(cellStyle.character.font?.family).toBe('Arial, sans-serif'); - }); -}); diff --git a/packages/layout-engine/style-engine/src/ooxml/index.test.ts b/packages/layout-engine/style-engine/src/ooxml/index.test.ts index 6beb75644..07f91d3b4 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.test.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.test.ts @@ -1,1165 +1,156 @@ -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it } from 'vitest'; import { - createOoxmlResolver, resolveStyleChain, - getDefaultProperties, - getStyleProperties, getNumberingProperties, resolveDocxFontFamily, resolveRunProperties, resolveParagraphProperties, - type OoxmlTranslator, type OoxmlResolverParams, } from './index.js'; -// Mock translators for testing -const mockPPrTranslator: OoxmlTranslator = { - xmlName: 'w:pPr', - encode: vi.fn((params) => { - const nodes = (params as { nodes?: Array> })?.nodes; - if (!nodes || nodes.length === 0) return {}; - // Simple mock implementation that extracts test data - return (nodes[0]?.mockData as Record) || {}; - }), -}; +const emptyStyles = { docDefaults: {}, latentStyles: {}, styles: {} }; +const emptyNumbering = { abstracts: {}, definitions: {} }; -const mockRPrTranslator: OoxmlTranslator = { - xmlName: 'w:rPr', - encode: vi.fn((params) => { - const nodes = (params as { nodes?: Array> })?.nodes; - if (!nodes || nodes.length === 0) return {}; - return (nodes[0]?.mockData as Record) || {}; - }), -}; - -describe('ooxml - createOoxmlResolver', () => { - it('returns an object with all expected methods', () => { - const resolver = createOoxmlResolver({ pPr: mockPPrTranslator, rPr: mockRPrTranslator }); - expect(resolver).toHaveProperty('resolveRunProperties'); - expect(resolver).toHaveProperty('resolveParagraphProperties'); - expect(resolver).toHaveProperty('getDefaultProperties'); - expect(resolver).toHaveProperty('getStyleProperties'); - expect(resolver).toHaveProperty('resolveStyleChain'); - expect(resolver).toHaveProperty('getNumberingProperties'); - expect(typeof resolver.resolveRunProperties).toBe('function'); - expect(typeof resolver.resolveParagraphProperties).toBe('function'); - expect(typeof resolver.getDefaultProperties).toBe('function'); - expect(typeof resolver.getStyleProperties).toBe('function'); - expect(typeof resolver.resolveStyleChain).toBe('function'); - expect(typeof resolver.getNumberingProperties).toBe('function'); - }); - - it('creates a resolver with bound methods', () => { - const resolver = createOoxmlResolver({ pPr: mockPPrTranslator, rPr: mockRPrTranslator }); - // Methods should be callable without context - expect(() => resolver.getDefaultProperties).not.toThrow(); - }); +const buildParams = (overrides?: Partial): OoxmlResolverParams => ({ + translatedLinkedStyles: emptyStyles, + translatedNumbering: emptyNumbering, + ...overrides, }); describe('ooxml - resolveStyleChain', () => { it('returns empty object when styleId is undefined', () => { - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveStyleChain(params, undefined, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('returns empty object when styleId is "Normal"', () => { - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveStyleChain(params, 'Normal', mockRPrTranslator); + const params = buildParams(); + const result = resolveStyleChain('runProperties', params, undefined); expect(result).toEqual({}); }); it('resolves a single style without basedOn', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Heading1' }, - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 32, bold: true }, - }, - ], - }, - ], - }, - ], + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + styles: { + Heading1: { runProperties: { fontSize: 32, bold: true } }, }, }, - }; - const result = resolveStyleChain(params, 'Heading1', mockRPrTranslator); + }); + const result = resolveStyleChain('runProperties', params, 'Heading1'); expect(result).toEqual({ fontSize: 32, bold: true }); }); it('follows basedOn chain and combines properties', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'BaseStyle' }, - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 22, italic: true }, - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'DerivedStyle' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'BaseStyle' }, - }, - { - name: 'w:rPr', - mockData: { fontSize: 24, bold: true }, - }, - ], - }, - ], - }, - ], + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + styles: { + BaseStyle: { runProperties: { fontSize: 22, italic: true } }, + DerivedStyle: { basedOn: 'BaseStyle', runProperties: { fontSize: 24, bold: true } }, }, }, - }; - const result = resolveStyleChain(params, 'DerivedStyle', mockRPrTranslator); - expect(result).toEqual({ fontSize: 24, bold: true, italic: true }); - }); - - it('detects and breaks cycles in basedOn chain', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'StyleA' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'StyleB' }, - }, - { - name: 'w:rPr', - mockData: { fontSize: 22 }, - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'StyleB' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'StyleA' }, - }, - { - name: 'w:rPr', - mockData: { bold: true }, - }, - ], - }, - ], - }, - ], - }, - }, - }; - // Should not infinite loop - const result = resolveStyleChain(params, 'StyleA', mockRPrTranslator); - expect(result).toHaveProperty('fontSize'); - expect(result).toHaveProperty('bold'); - }); - - it('returns empty object when followBasedOnChain is false', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'DerivedStyle' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'BaseStyle' }, - }, - { - name: 'w:rPr', - mockData: { fontSize: 24 }, - }, - ], - }, - ], - }, - ], - }, - }, - }; - const result = resolveStyleChain(params, 'DerivedStyle', mockRPrTranslator, false); - expect(result).toEqual({ fontSize: 24 }); // Only direct style, no basedOn - }); - - it('handles missing style definitions gracefully', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [{ elements: [] }], - }, - }, - }; - const result = resolveStyleChain(params, 'MissingStyle', mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('handles empty docx', () => { - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveStyleChain(params, 'AnyStyle', mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('combines multiple levels in basedOn chain correctly', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Level1' }, - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 20, bold: true, color: 'red' }, - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Level2' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'Level1' }, - }, - { - name: 'w:rPr', - mockData: { fontSize: 22, italic: true }, - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Level3' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'Level2' }, - }, - { - name: 'w:rPr', - mockData: { fontSize: 24, strike: true }, - }, - ], - }, - ], - }, - ], - }, - }, - }; - const result = resolveStyleChain(params, 'Level3', mockRPrTranslator); - expect(result).toEqual({ - fontSize: 24, // From Level3 (highest priority) - bold: true, // From Level1 - italic: true, // From Level2 - strike: true, // From Level3 - color: 'red', // From Level1 }); - }); -}); - -describe('ooxml - getDefaultProperties', () => { - it('extracts default properties from w:docDefaults', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 22, fontFamily: { ascii: 'Calibri' } }, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - }; - const result = getDefaultProperties(params, mockRPrTranslator); - expect(result).toEqual({ fontSize: 22, fontFamily: { ascii: 'Calibri' } }); - }); - - it('returns empty object when w:docDefaults is missing', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal' }, - }, - ], - }, - ], - }, - }, - }; - const result = getDefaultProperties(params, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('returns empty object when styles.xml is missing', () => { - const params: OoxmlResolverParams = { docx: {} }; - const result = getDefaultProperties(params, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('returns empty object when docx is missing', () => { - const params: OoxmlResolverParams = {}; - const result = getDefaultProperties(params, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('returns empty object when elements are empty', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [], - }, - }, - }; - const result = getDefaultProperties(params, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('handles w:pPrDefault for paragraph defaults', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:pPrDefault', - elements: [ - { - name: 'w:pPr', - mockData: { spacing: { before: 0, after: 0 } }, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - }; - const result = getDefaultProperties(params, mockPPrTranslator); - expect(result).toEqual({ spacing: { before: 0, after: 0 } }); + const result = resolveStyleChain('runProperties', params, 'DerivedStyle'); + expect(result).toEqual({ fontSize: 24, bold: true, italic: true }); }); - it('returns empty object when translator.encode returns null', () => { - const nullTranslator: OoxmlTranslator = { - xmlName: 'w:rPr', - encode: vi.fn(() => null), - }; - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [{ name: 'w:rPr' }], - }, - ], - }, - ], - }, - ], - }, - }, - }; - const result = getDefaultProperties(params, nullTranslator); + it('returns empty object when styleId is missing from definitions', () => { + const params = buildParams(); + const result = resolveStyleChain('runProperties', params, 'MissingStyle'); expect(result).toEqual({}); }); }); -describe('ooxml - getStyleProperties', () => { - it('extracts style properties and metadata', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Heading1', 'w:default': '1' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'Normal' }, - }, - { - name: 'w:rPr', - mockData: { fontSize: 32, bold: true }, - }, - ], - }, - ], - }, - ], - }, - }, - }; - const result = getStyleProperties(params, 'Heading1', mockRPrTranslator); - expect(result).toEqual({ - properties: { fontSize: 32, bold: true }, - isDefault: true, - basedOn: 'Normal', - }); - }); - - it('returns empty result when styleId is not provided', () => { - const params: OoxmlResolverParams = { docx: {} }; - const result = getStyleProperties(params, '', mockRPrTranslator); - expect(result).toEqual({ properties: {}, isDefault: false, basedOn: null }); - }); - - it('returns empty result when style is not found', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'OtherStyle' }, - }, - ], - }, - ], - }, - }, - }; - const result = getStyleProperties(params, 'MissingStyle', mockRPrTranslator); - // When style is not found, basedOn is undefined (not extracted from undefined style) - expect(result).toEqual({ properties: {}, isDefault: false, basedOn: undefined }); - }); - - it('extracts basedOn even when properties are missing', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'DerivedStyle' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'BaseStyle' }, - }, - ], - }, - ], - }, - ], - }, - }, - }; - const result = getStyleProperties(params, 'DerivedStyle', mockRPrTranslator); - expect(result).toEqual({ properties: {}, isDefault: false, basedOn: 'BaseStyle' }); - }); - - it('sets isDefault to false when w:default is not "1"', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'CustomStyle', 'w:default': '0' }, - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 22 }, - }, - ], - }, - ], - }, - ], - }, - }, - }; - const result = getStyleProperties(params, 'CustomStyle', mockRPrTranslator); - expect(result.isDefault).toBe(false); - }); - - it('handles missing elements array', () => { - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [], - }, - }, - }; - const result = getStyleProperties(params, 'AnyStyle', mockRPrTranslator); - expect(result).toEqual({ properties: {}, isDefault: false, basedOn: null }); - }); - - it('returns empty properties when translator.encode returns null', () => { - const nullTranslator: OoxmlTranslator = { - xmlName: 'w:rPr', - encode: vi.fn(() => null), - }; - const params: OoxmlResolverParams = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Style1' }, - elements: [{ name: 'w:rPr' }], - }, - ], - }, - ], - }, - }, - }; - const result = getStyleProperties(params, 'Style1', nullTranslator); - expect(result.properties).toEqual({}); - }); -}); - describe('ooxml - getNumberingProperties', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - - it('returns empty object when numbering is null', () => { - const params: OoxmlResolverParams = { numbering: null }; - const result = getNumberingProperties(translators, params, 0, 1, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('returns empty object when numbering is undefined', () => { - const params: OoxmlResolverParams = {}; - const result = getNumberingProperties(translators, params, 0, 1, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('returns empty object when definitions or abstracts are missing', () => { - const params: OoxmlResolverParams = { - numbering: { definitions: {}, abstracts: undefined }, - }; - const result = getNumberingProperties(translators, params, 0, 1, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('returns empty object when numId definition is not found', () => { - const params: OoxmlResolverParams = { - numbering: { - definitions: { num2: {} }, - abstracts: {}, - }, - }; - const result = getNumberingProperties(translators, params, 0, 1, mockRPrTranslator); - expect(result).toEqual({}); - }); - it('extracts properties from abstractNum level definition', () => { - const params: OoxmlResolverParams = { - numbering: { + const params = buildParams({ + translatedNumbering: { definitions: { - num1: { - elements: [ - { - name: 'w:abstractNumId', - attributes: { 'w:val': 'abstract1' }, - }, - ], - }, + '1': { abstractNumId: 10 }, }, abstracts: { - abstract1: { - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:rPr', - mockData: { bold: true, fontSize: 22 }, - }, - ], - }, - ], - }, - }, - }, - }; - const result = getNumberingProperties(translators, params, 0, 'num1', mockRPrTranslator); - expect(result).toEqual({ bold: true, fontSize: 22 }); - }); - - it('applies lvlOverride over abstractNum properties', () => { - const params: OoxmlResolverParams = { - numbering: { - definitions: { - num1: { - elements: [ - { - name: 'w:abstractNumId', - attributes: { 'w:val': 'abstract1' }, - }, - { - name: 'w:lvlOverride', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 24, italic: true }, - }, - ], - }, - ], - }, - }, - abstracts: { - abstract1: { - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 22, bold: true }, - }, - ], - }, - ], + '10': { + levels: { + '0': { paragraphProperties: { spacing: { before: 240 } } }, + }, }, }, }, - }; - const result = getNumberingProperties(translators, params, 0, 'num1', mockRPrTranslator); - expect(result).toEqual({ - fontSize: 24, // Override wins - italic: true, // From override - bold: true, // From abstract }); + const result = getNumberingProperties('paragraphProperties', params, 0, 1); + expect(result).toEqual({ spacing: { before: 240 } }); }); - it('follows numStyleLink when present and tries < 1', () => { - // This test verifies that when an abstractNum has a numStyleLink, it follows - // the linked style and recursively resolves numbering from that style's numId - const params: OoxmlResolverParams = { - numbering: { + it('applies lvlOverride over abstractNum properties', () => { + const params = buildParams({ + translatedNumbering: { definitions: { - num1: { - elements: [ - { - name: 'w:abstractNumId', - attributes: { 'w:val': 'abstract1' }, - }, - ], - }, - 2: { - elements: [ - { - name: 'w:abstractNumId', - attributes: { 'w:val': 'abstract2' }, - }, - ], - }, - }, - abstracts: { - abstract1: { - elements: [ - { - name: 'w:numStyleLink', - attributes: { 'w:val': 'ListStyle1' }, - }, - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 22 }, // This should be overridden by recursive call - }, - ], - }, - ], - }, - abstract2: { - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:rPr', - mockData: { bold: true }, - }, - ], - }, - ], - }, - }, - }, - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'ListStyle1' }, - elements: [ - { - name: 'w:pPr', - mockData: { - numberingProperties: { numId: 2 }, - }, - }, - ], - }, - ], + '1': { + abstractNumId: 10, + lvlOverrides: { + '0': { paragraphProperties: { spacing: { after: 120 } } }, }, - ], - }, - }, - }; - - // Mock pPr translator to extract numberingProperties from style - const pPrTranslatorWithNumPr: OoxmlTranslator = { - xmlName: 'w:pPr', - encode: vi.fn((params) => { - const nodes = (params as { nodes?: Array> })?.nodes; - if (!nodes || nodes.length === 0) return {}; - return (nodes[0]?.mockData as Record) || {}; - }), - }; - - const result = getNumberingProperties( - { pPr: pPrTranslatorWithNumPr, rPr: mockRPrTranslator }, - params, - 0, - 'num1', - mockRPrTranslator, - 0, // tries = 0 - ); - expect(result).toEqual({ bold: true }); - }); - - it('extracts pStyle from level definition', () => { - const params: OoxmlResolverParams = { - numbering: { - definitions: { - num1: { - elements: [ - { - name: 'w:abstractNumId', - attributes: { 'w:val': 'abstract1' }, - }, - ], - }, - }, - abstracts: { - abstract1: { - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:pStyle', - attributes: { 'w:val': 'ListParagraph' }, - }, - { - name: 'w:rPr', - mockData: { bold: true }, - }, - ], - }, - ], - }, - }, - }, - }; - const result = getNumberingProperties(translators, params, 0, 'num1', mockRPrTranslator); - expect(result).toEqual({ bold: true, styleId: 'ListParagraph' }); - }); - - it('handles numeric ilvl matching', () => { - const params: OoxmlResolverParams = { - numbering: { - definitions: { - num1: { - elements: [ - { - name: 'w:abstractNumId', - attributes: { 'w:val': 'abstract1' }, - }, - ], }, }, abstracts: { - abstract1: { - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': 0 }, // Numeric - elements: [ - { - name: 'w:rPr', - mockData: { fontSize: 22 }, - }, - ], - }, - ], - }, - }, - }, - }; - const result = getNumberingProperties(translators, params, 0, 'num1', mockRPrTranslator); - expect(result).toEqual({ fontSize: 22 }); - }); - - it('returns empty object when abstractNum is missing', () => { - const params: OoxmlResolverParams = { - numbering: { - definitions: { - num1: { - elements: [ - { - name: 'w:abstractNumId', - attributes: { 'w:val': 'missingAbstract' }, - }, - ], + '10': { + levels: { + '0': { paragraphProperties: { spacing: { before: 240 } } }, + }, }, }, - abstracts: {}, }, - }; - const result = getNumberingProperties(translators, params, 0, 'num1', mockRPrTranslator); - expect(result).toEqual({}); + }); + const result = getNumberingProperties('paragraphProperties', params, 0, 1); + expect(result).toEqual({ spacing: { before: 240, after: 120 } }); }); - it('returns empty object when level definition is not found', () => { - const params: OoxmlResolverParams = { - numbering: { - definitions: { - num1: { - elements: [ - { - name: 'w:abstractNumId', - attributes: { 'w:val': 'abstract1' }, - }, - ], - }, - }, - abstracts: { - abstract1: { - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '1' }, // Different level - elements: [], - }, - ], - }, - }, - }, - }; - const result = getNumberingProperties(translators, params, 0, 'num1', mockRPrTranslator); + it('returns empty object when numbering definition is missing', () => { + const params = buildParams(); + const result = getNumberingProperties('paragraphProperties', params, 0, 999); expect(result).toEqual({}); }); }); describe('ooxml - resolveDocxFontFamily', () => { it('extracts ascii font when available', () => { - const attributes = { 'w:ascii': 'Calibri', 'w:hAnsi': 'Arial' }; - const result = resolveDocxFontFamily(attributes, null); + const result = resolveDocxFontFamily({ ascii: 'Calibri' }, null); expect(result).toBe('Calibri'); }); - it('returns null when attributes is null', () => { - const result = resolveDocxFontFamily(null, null); - expect(result).toBeNull(); - }); - - it('returns null when attributes is undefined', () => { - const result = resolveDocxFontFamily(undefined, null); - expect(result).toBeNull(); - }); - it('returns null when attributes is not an object', () => { - expect(resolveDocxFontFamily('not-an-object' as never, null)).toBeNull(); - expect(resolveDocxFontFamily(123 as never, null)).toBeNull(); - }); - - it('extracts ascii without w: prefix', () => { - const attributes = { ascii: 'Arial' }; - const result = resolveDocxFontFamily(attributes, null); - expect(result).toBe('Arial'); - }); - - it('resolves theme font when asciiTheme is present', () => { - const attributes = { 'w:asciiTheme': 'minorHAnsi' }; - const docx = { - 'word/theme/theme1.xml': { - elements: [ - { - elements: [ - { - name: 'a:themeElements', - elements: [ - { - name: 'a:fontScheme', - elements: [ - { - name: 'a:minorFont', - elements: [ - { - name: 'a:latin', - attributes: { typeface: 'Calibri' }, - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - }; - const result = resolveDocxFontFamily(attributes, docx); - expect(result).toBe('Calibri'); - }); - - it('resolves major theme font', () => { - const attributes = { 'w:asciiTheme': 'majorHAnsi' }; - const docx = { - 'word/theme/theme1.xml': { - elements: [ - { - elements: [ - { - name: 'a:themeElements', - elements: [ - { - name: 'a:fontScheme', - elements: [ - { - name: 'a:majorFont', - elements: [ - { - name: 'a:latin', - attributes: { typeface: 'Cambria' }, - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - }; - const result = resolveDocxFontFamily(attributes, docx); - expect(result).toBe('Cambria'); - }); - - it('falls back to ascii when theme resolution fails', () => { - const attributes = { 'w:ascii': 'Arial', 'w:asciiTheme': 'minorHAnsi' }; - const docx = {}; // No theme - const result = resolveDocxFontFamily(attributes, docx); - expect(result).toBe('Arial'); - }); - - it('applies toCssFontFamily callback when provided', () => { - const attributes = { 'w:ascii': 'Calibri' }; - const toCssFontFamily = (fontName: string) => `${fontName}, sans-serif`; - const result = resolveDocxFontFamily(attributes, null, toCssFontFamily); - expect(result).toBe('Calibri, sans-serif'); - }); - - it('returns null when no font is found', () => { - const attributes = {}; - const result = resolveDocxFontFamily(attributes, null); - expect(result).toBeNull(); - }); - - it('handles asciiTheme without w: prefix', () => { - const attributes = { asciiTheme: 'minorHAnsi' }; - const docx = { - 'word/theme/theme1.xml': { - elements: [ - { - elements: [ - { - name: 'a:themeElements', - elements: [ - { - name: 'a:fontScheme', - elements: [ - { - name: 'a:minorFont', - elements: [ - { - name: 'a:latin', - attributes: { typeface: 'Calibri' }, - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - }; - const result = resolveDocxFontFamily(attributes, docx); - expect(result).toBe('Calibri'); + expect(resolveDocxFontFamily(null, null)).toBeNull(); + expect(resolveDocxFontFamily(undefined, null)).toBeNull(); + expect(resolveDocxFontFamily('invalid' as never, null)).toBeNull(); }); }); -describe('ooxml - resolveRunProperties (smoke test)', () => { - it('returns an object with fontSize property', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveRunProperties(translators, params, null, null); - expect(result).toHaveProperty('fontSize'); - expect(typeof result.fontSize).toBe('number'); - }); - - it('accepts all required parameters', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const inlineRpr = { fontSize: 24 }; - const resolvedPpr = { styleId: 'Normal' }; - const result = resolveRunProperties(translators, params, inlineRpr, resolvedPpr, false, false); - expect(result).toBeDefined(); - expect(typeof result).toBe('object'); - }); - - it('handles isListNumber flag', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveRunProperties(translators, params, null, null, true, false); - expect(result).toBeDefined(); - }); - - it('handles numberingDefinedInline flag', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveRunProperties(translators, params, null, null, false, true); - expect(result).toBeDefined(); +describe('ooxml - resolveRunProperties', () => { + it('returns resolved run properties with defaults', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + docDefaults: { runProperties: { fontSize: 20 } }, + styles: { + Normal: { default: true, runProperties: { fontSize: 22 } }, + }, + }, + }); + const result = resolveRunProperties(params, null, null); + expect(result).toHaveProperty('fontSize', 22); }); }); -describe('ooxml - resolveParagraphProperties (smoke test)', () => { - it('returns an object', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveParagraphProperties(translators, params, null); - expect(result).toBeDefined(); - expect(typeof result).toBe('object'); - }); - - it('accepts all optional parameters', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const inlineProps = { styleId: 'Heading1' }; - const result = resolveParagraphProperties(translators, params, inlineProps, true, true, 'TableNormal'); - expect(result).toBeDefined(); - }); - - it('handles insideTable flag', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveParagraphProperties(translators, params, null, true); - expect(result).toBeDefined(); - }); - - it('handles overrideInlineStyleId flag', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveParagraphProperties(translators, params, null, false, true); - expect(result).toBeDefined(); - }); - - it('handles tableStyleId parameter', () => { - const translators = { pPr: mockPPrTranslator, rPr: mockRPrTranslator }; - const params: OoxmlResolverParams = { docx: {} }; - const result = resolveParagraphProperties(translators, params, null, false, false, 'TableGrid'); - expect(result).toBeDefined(); +describe('ooxml - resolveParagraphProperties', () => { + it('combines defaults, Normal, and inline props', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + docDefaults: { paragraphProperties: { spacing: { before: 240 } } }, + styles: { + Normal: { default: true, paragraphProperties: { spacing: { after: 120 } } }, + }, + }, + }); + const inlineProps = { spacing: { before: 480 } }; + const result = resolveParagraphProperties(params, inlineProps); + expect(result.spacing).toEqual({ before: 480, after: 120 }); }); }); diff --git a/packages/layout-engine/tests/src/multi-section-page-count-simple.test.ts b/packages/layout-engine/tests/src/multi-section-page-count-simple.test.ts index c805af9e4..aae464740 100644 --- a/packages/layout-engine/tests/src/multi-section-page-count-simple.test.ts +++ b/packages/layout-engine/tests/src/multi-section-page-count-simple.test.ts @@ -22,6 +22,7 @@ import type { FlowBlock, PMNode, SectionBreakBlock, Measure } from '@superdoc/co import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'node:url'; +import { DEFAULT_CONVERTER_CONTEXT } from './test-helpers/section-test-utils.js'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -99,6 +100,7 @@ describe('Multi-Section Document Page Count (Simple)', () => { console.log('\nConverting to flow blocks...'); const { blocks, bookmarks } = toFlowBlocks(pmDoc, { emitSectionBreaks: true, // CRITICAL: Must enable section break emission + converterContext: DEFAULT_CONVERTER_CONTEXT, }); console.log(`Generated ${blocks.length} flow blocks`); console.log(`Generated ${bookmarks.size} bookmarks`); @@ -203,7 +205,10 @@ describe('Multi-Section Document Page Count (Simple)', () => { it('should emit 4 section break blocks for a 4-section document', () => { const pmDoc = loadPMJsonFixture('multi_section_doc.json'); - const { blocks } = toFlowBlocks(pmDoc, { emitSectionBreaks: true }); + const { blocks } = toFlowBlocks(pmDoc, { + emitSectionBreaks: true, + converterContext: DEFAULT_CONVERTER_CONTEXT, + }); const sectionBreaks = blocks.filter((b) => b.kind === 'sectionBreak'); console.log(`\nSection breaks found: ${sectionBreaks.length}`); @@ -224,7 +229,10 @@ describe('Multi-Section Document Page Count (Simple)', () => { it('should have correct section break types', () => { const pmDoc = loadPMJsonFixture('multi_section_doc.json'); - const { blocks } = toFlowBlocks(pmDoc, { emitSectionBreaks: true }); + const { blocks } = toFlowBlocks(pmDoc, { + emitSectionBreaks: true, + converterContext: DEFAULT_CONVERTER_CONTEXT, + }); const sectionBreaks = blocks.filter((b) => b.kind === 'sectionBreak') as SectionBreakBlock[]; diff --git a/packages/layout-engine/tests/src/multi-section-page-count.test.ts b/packages/layout-engine/tests/src/multi-section-page-count.test.ts index 818cfd62c..3cf287fa3 100644 --- a/packages/layout-engine/tests/src/multi-section-page-count.test.ts +++ b/packages/layout-engine/tests/src/multi-section-page-count.test.ts @@ -31,9 +31,17 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); * This uses the same machinery as the extract-pm-json script. * * @param docxPath - Path to DOCX file - * @returns ProseMirror document + * @returns ProseMirror document and converter context */ -async function docxToPMJson(docxPath: string): Promise { +async function docxToPMJson(docxPath: string): Promise<{ + pmDoc: PMNode; + converterContext: { + docx: Record; + translatedLinkedStyles: unknown; + translatedNumbering: unknown; + }; + themeColors?: unknown; +}> { // Dynamic imports to avoid bundling issues const { default: DocxZipper } = await import('../../../super-editor/src/core/DocxZipper.js'); const { createDocumentJson } = await import( @@ -76,7 +84,15 @@ async function docxToPMJson(docxPath: string): Promise { throw new Error('Failed to extract PM JSON from DOCX'); } - return result.pmDoc; + return { + pmDoc: result.pmDoc, + converterContext: { + docx, + translatedLinkedStyles: result.translatedLinkedStyles, + translatedNumbering: result.translatedNumbering, + }, + themeColors: result.themeColors, + }; } /** @@ -133,12 +149,16 @@ describe('Multi-Section Document Page Count', () => { // Convert DOCX to PM JSON console.log('Converting DOCX to ProseMirror JSON...'); - const pmDoc = await docxToPMJson(docxPath); + const { pmDoc, converterContext, themeColors } = await docxToPMJson(docxPath); console.log(`PM Doc has ${pmDoc.content?.length ?? 0} top-level nodes`); // Convert PM JSON to flow blocks console.log('Converting to flow blocks...'); - const { blocks, bookmarks } = toFlowBlocks(pmDoc, { emitSectionBreaks: true }); + const { blocks, bookmarks } = toFlowBlocks(pmDoc, { + emitSectionBreaks: true, + converterContext, + themeColors, + }); console.log(`Generated ${blocks.length} flow blocks`); // Analyze section breaks @@ -196,8 +216,12 @@ describe('Multi-Section Document Page Count', () => { it('should emit 3 section break blocks for a 4-section document', async () => { const docxPath = path.join(__dirname, '../../../super-editor/src/tests/data/multi_section_doc.docx'); - const pmDoc = await docxToPMJson(docxPath); - const { blocks } = toFlowBlocks(pmDoc, { emitSectionBreaks: true }); + const { pmDoc, converterContext, themeColors } = await docxToPMJson(docxPath); + const { blocks } = toFlowBlocks(pmDoc, { + emitSectionBreaks: true, + converterContext, + themeColors, + }); const sectionBreaks = blocks.filter((b) => b.kind === 'sectionBreak'); console.log(`Section breaks found: ${sectionBreaks.length}`); @@ -219,8 +243,12 @@ describe('Multi-Section Document Page Count', () => { it('should have correct section break types', async () => { const docxPath = path.join(__dirname, '../../../super-editor/src/tests/data/multi_section_doc.docx'); - const pmDoc = await docxToPMJson(docxPath); - const { blocks } = toFlowBlocks(pmDoc, { emitSectionBreaks: true }); + const { pmDoc, converterContext, themeColors } = await docxToPMJson(docxPath); + const { blocks } = toFlowBlocks(pmDoc, { + emitSectionBreaks: true, + converterContext, + themeColors, + }); const sectionBreaks = blocks.filter((b) => b.kind === 'sectionBreak') as SectionBreakBlock[]; diff --git a/packages/layout-engine/tests/src/test-helpers/section-test-utils.ts b/packages/layout-engine/tests/src/test-helpers/section-test-utils.ts index 6fc59b9e6..12be635f4 100644 --- a/packages/layout-engine/tests/src/test-helpers/section-test-utils.ts +++ b/packages/layout-engine/tests/src/test-helpers/section-test-utils.ts @@ -11,6 +11,7 @@ import type { PMNode, FlowBlock, SectionBreakBlock, Measure, Layout, Page } from import { toFlowBlocks } from '@superdoc/pm-adapter'; import { layoutDocument } from '@superdoc/layout-engine'; import { measureBlock } from '@superdoc/measuring-dom'; +import type { NumberingProperties, StylesDocumentProperties } from '@superdoc/style-engine/ooxml'; /** * Section properties for creating test documents. @@ -45,6 +46,22 @@ export const DEFAULT_MARGINS = { footer: 72, } as const; +const DEFAULT_TRANSLATED_LINKED_STYLES: StylesDocumentProperties = { + docDefaults: {}, + latentStyles: {}, + styles: {}, +}; + +const DEFAULT_TRANSLATED_NUMBERING: NumberingProperties = { + abstracts: {}, + definitions: {}, +}; + +export const DEFAULT_CONVERTER_CONTEXT = { + translatedLinkedStyles: DEFAULT_TRANSLATED_LINKED_STYLES, + translatedNumbering: DEFAULT_TRANSLATED_NUMBERING, +}; + /** * Counter for generating unique block IDs. */ @@ -360,6 +377,7 @@ export function pmToFlowBlocks(pmDoc: PMNode): { } { return toFlowBlocks(pmDoc, { emitSectionBreaks: true, + converterContext: DEFAULT_CONVERTER_CONTEXT, }); } diff --git a/packages/super-editor/src/core/Editor.lifecycle.test.ts b/packages/super-editor/src/core/Editor.lifecycle.test.ts index 51ddcf498..36338db57 100644 --- a/packages/super-editor/src/core/Editor.lifecycle.test.ts +++ b/packages/super-editor/src/core/Editor.lifecycle.test.ts @@ -6,8 +6,9 @@ import { FileSystemNotAvailableError, DocumentLoadError, } from './errors/index.js'; -import { loadTestDataForEditorTests } from '@tests/helpers/helpers.js'; +import { loadTestDataForEditorTests, getMinimalTranslatedLinkedStyles } from '@tests/helpers/helpers.js'; import { getStarterExtensions } from '@extensions/index.js'; +import { SuperConverter } from './super-converter/SuperConverter.js'; /** * Comprehensive test suite for the Editor Document Lifecycle API. @@ -303,10 +304,14 @@ describe('Editor Lifecycle API', () => { }); it('should allow overriding mode', async () => { + const converter = new SuperConverter(); + converter.translatedLinkedStyles = getMinimalTranslatedLinkedStyles(); + editor = await Editor.open(undefined, { extensions: getStarterExtensions(), suppressDefaultDocxStyles: true, mode: 'html', + converter, }); expect(editor.options.mode).toBe('html'); diff --git a/packages/super-editor/src/core/super-converter/styles-font-priority.test.js b/packages/super-editor/src/core/super-converter/styles-font-priority.test.js index 01a56a1fb..4770bda83 100644 --- a/packages/super-editor/src/core/super-converter/styles-font-priority.test.js +++ b/packages/super-editor/src/core/super-converter/styles-font-priority.test.js @@ -9,7 +9,7 @@ * precedence according to the OOXML specification. */ import { describe, it, expect, vi, beforeAll } from 'vitest'; -import { resolveRunProperties } from './styles.js'; +import { resolveRunProperties, combineRunProperties } from './styles.js'; beforeAll(() => { vi.stubGlobal('SuperConverter', { @@ -17,6 +17,33 @@ beforeAll(() => { }); }); +const buildTranslatedLinkedStyles = (styles = {}) => ({ + docDefaults: { + runProperties: {}, + paragraphProperties: {}, + }, + latentStyles: {}, + styles: { + Normal: { + styleId: 'Normal', + type: 'paragraph', + default: true, + name: 'Normal', + runProperties: {}, + paragraphProperties: {}, + }, + DefaultParagraphFont: { + styleId: 'DefaultParagraphFont', + type: 'character', + default: true, + name: 'Default Paragraph Font', + runProperties: {}, + paragraphProperties: {}, + }, + ...styles, + }, +}); + describe('resolveRunProperties - inline property priority', () => { /** * Test that inline w:sz (direct formatting) overrides character style fontSize. @@ -27,71 +54,30 @@ describe('resolveRunProperties - inline property priority', () => { * - Expected: fontSize should be 24 (12pt from inline), not 18 (from style) */ it('should prioritize inline fontSize over character style fontSize', () => { - // Mock params with styles - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - // p1 paragraph style with rPr - { - name: 'w:style', - attributes: { 'w:type': 'paragraph', 'w:styleId': 'p1' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'Normal' }, - }, - { - name: 'w:rPr', - elements: [ - { - name: 'w:sz', - attributes: { 'w:val': '18' }, // 9pt in paragraph style - }, - ], - }, - ], - }, - // s1 character style - { - name: 'w:style', - attributes: { 'w:type': 'character', 'w:styleId': 's1' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'DefaultParagraphFont' }, - }, - { - name: 'w:rPr', - elements: [ - { - name: 'w:sz', - attributes: { 'w:val': '18' }, // 9pt in character style - }, - ], - }, - ], - }, - // Normal style - { - name: 'w:style', - attributes: { 'w:type': 'paragraph', 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [], - }, - // DefaultParagraphFont style - { - name: 'w:style', - attributes: { 'w:type': 'character', 'w:styleId': 'DefaultParagraphFont', 'w:default': '1' }, - elements: [], - }, - ], - }, - ], + const translatedLinkedStyles = buildTranslatedLinkedStyles({ + p1: { + styleId: 'p1', + type: 'paragraph', + basedOn: 'Normal', + runProperties: { + fontSize: 18, }, + paragraphProperties: {}, }, - numbering: { definitions: {}, abstracts: {} }, + s1: { + styleId: 's1', + type: 'character', + basedOn: 'DefaultParagraphFont', + runProperties: { + fontSize: 18, + }, + paragraphProperties: {}, + }, + }); + + const params = { + translatedLinkedStyles, + translatedNumbering: { definitions: {}, abstracts: {} }, }; // Inline run properties: has BOTH styleId (s1) AND inline fontSize (24) @@ -115,46 +101,18 @@ describe('resolveRunProperties - inline property priority', () => { it('should use character style fontSize when no inline fontSize is specified', () => { const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:type': 'character', 'w:styleId': 's1' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'DefaultParagraphFont' }, - }, - { - name: 'w:rPr', - elements: [ - { - name: 'w:sz', - attributes: { 'w:val': '18' }, - }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:type': 'paragraph', 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [], - }, - { - name: 'w:style', - attributes: { 'w:type': 'character', 'w:styleId': 'DefaultParagraphFont', 'w:default': '1' }, - elements: [], - }, - ], - }, - ], + translatedLinkedStyles: buildTranslatedLinkedStyles({ + s1: { + styleId: 's1', + type: 'character', + basedOn: 'DefaultParagraphFont', + runProperties: { + fontSize: 18, + }, + paragraphProperties: {}, }, - }, - numbering: { definitions: {}, abstracts: {} }, + }), + translatedNumbering: { definitions: {}, abstracts: {} }, }; // Inline run properties: ONLY has styleId, NO inline fontSize @@ -175,50 +133,19 @@ describe('resolveRunProperties - inline property priority', () => { it('should handle hyperlink character style with color and underline', () => { const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:type': 'character', 'w:styleId': 'Hyperlink' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'DefaultParagraphFont' }, - }, - { - name: 'w:rPr', - elements: [ - { - name: 'w:color', - attributes: { 'w:val': '0000FF' }, // Blue - }, - { - name: 'w:u', - attributes: { 'w:val': 'single' }, // Underline - }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:type': 'paragraph', 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [], - }, - { - name: 'w:style', - attributes: { 'w:type': 'character', 'w:styleId': 'DefaultParagraphFont', 'w:default': '1' }, - elements: [], - }, - ], - }, - ], + translatedLinkedStyles: buildTranslatedLinkedStyles({ + Hyperlink: { + styleId: 'Hyperlink', + type: 'character', + basedOn: 'DefaultParagraphFont', + runProperties: { + color: { val: '0000FF' }, + underline: { 'w:val': 'single' }, + }, + paragraphProperties: {}, }, - }, - numbering: { definitions: {}, abstracts: {} }, + }), + translatedNumbering: { definitions: {}, abstracts: {} }, }; const inlineRpr = { @@ -235,14 +162,12 @@ describe('resolveRunProperties - inline property priority', () => { }); it('should test combineProperties with fontSize override', async () => { - const { combineProperties } = await import('./styles.js'); - const chain = [ { fontSize: 18, color: { val: 'FF0000' } }, // from character style { fontSize: 24, bold: true, color: { val: '00FF00' } }, // from inline (should win) ]; - const result = combineProperties(chain, ['color']); + const result = combineRunProperties(chain); // fontSize should be 24 (from inline) expect(result.fontSize).toBe(24); @@ -254,54 +179,20 @@ describe('resolveRunProperties - inline property priority', () => { it('should ensure all inline properties override character style properties', () => { const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:type': 'character', 'w:styleId': 's1' }, - elements: [ - { - name: 'w:basedOn', - attributes: { 'w:val': 'DefaultParagraphFont' }, - }, - { - name: 'w:rPr', - elements: [ - { - name: 'w:sz', - attributes: { 'w:val': '18' }, // 9pt from style - }, - { - name: 'w:b', - attributes: {}, // bold from style - }, - { - name: 'w:i', - attributes: {}, // italic from style - }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:type': 'paragraph', 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [], - }, - { - name: 'w:style', - attributes: { 'w:type': 'character', 'w:styleId': 'DefaultParagraphFont', 'w:default': '1' }, - elements: [], - }, - ], - }, - ], + translatedLinkedStyles: buildTranslatedLinkedStyles({ + s1: { + styleId: 's1', + type: 'character', + basedOn: 'DefaultParagraphFont', + runProperties: { + fontSize: 18, + bold: true, + italic: true, + }, + paragraphProperties: {}, }, - }, - numbering: { definitions: {}, abstracts: {} }, + }), + translatedNumbering: { definitions: {}, abstracts: {} }, }; // Inline run properties: override fontSize, bold, italic with different values diff --git a/packages/super-editor/src/core/super-converter/styles.test.js b/packages/super-editor/src/core/super-converter/styles.test.js index cd363da26..cf3a7697e 100644 --- a/packages/super-editor/src/core/super-converter/styles.test.js +++ b/packages/super-editor/src/core/super-converter/styles.test.js @@ -1,12 +1,5 @@ import { describe, it, expect, vi, beforeAll } from 'vitest'; -import { - encodeMarksFromRPr, - decodeRPrFromMarks, - encodeCSSFromRPr, - encodeCSSFromPPr, - resolveRunProperties, - resolveParagraphProperties, -} from './styles.js'; +import { encodeMarksFromRPr, decodeRPrFromMarks, encodeCSSFromRPr, encodeCSSFromPPr } from './styles.js'; beforeAll(() => { vi.stubGlobal('SuperConverter', { @@ -497,1750 +490,3 @@ describe('marks encoding/decoding round-trip', () => { expect(marksFromCaps.some((m) => m.type === 'textStyle' && m.attrs.textTransform)).toBe(false); }); }); - -describe('resolveRunProperties - numId=0 handling (OOXML spec §17.9.16)', () => { - // Mock minimal params structure for numbering tests - const createMockParamsForNumbering = () => ({ - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [{ name: 'w:rPr', elements: [] }], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [{ name: 'w:rPr', elements: [] }], - }, - ], - }, - ], - }, - }, - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { name: 'w:start', attributes: { 'w:val': '1' } }, - { name: 'w:numFmt', attributes: { 'w:val': 'decimal' } }, - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '24' } }], - }, - ], - }, - ], - }, - }, - }, - }); - - it('should not fetch numbering properties when numId is numeric 0', () => { - const params = createMockParamsForNumbering(); - const inlineRpr = {}; - const resolvedPpr = { - numberingProperties: { - numId: 0, - ilvl: 0, - }, - }; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr, true, false); - - // numId=0 disables numbering, so numbering properties should not be fetched - // Result should only have basic properties, no numbering-specific fontSize - expect(result.fontSize).toBe(20); // baseline fallback - }); - - it('should not fetch numbering properties when numId is string "0"', () => { - const params = createMockParamsForNumbering(); - const inlineRpr = {}; - const resolvedPpr = { - numberingProperties: { - numId: '0', - ilvl: 0, - }, - }; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr, true, false); - - // numId='0' disables numbering, so numbering properties should not be fetched - expect(result.fontSize).toBe(20); // baseline fallback - }); - - it('should fetch numbering properties when numId is valid (1)', () => { - const params = createMockParamsForNumbering(); - const inlineRpr = {}; - const resolvedPpr = { - numberingProperties: { - numId: 1, - ilvl: 0, - }, - }; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr, true, false); - - // Valid numId should fetch numbering properties including fontSize from numbering definition - expect(result.fontSize).toBe(24); // from numbering definition w:sz - }); - - it('should fetch numbering properties when numId is valid string ("1")', () => { - const params = createMockParamsForNumbering(); - const inlineRpr = {}; - const resolvedPpr = { - numberingProperties: { - numId: '1', - ilvl: 0, - }, - }; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr, true, false); - - // Valid string numId should fetch numbering properties - expect(result.fontSize).toBe(24); // from numbering definition - }); - - it('should not fetch numbering properties when numId is null', () => { - const params = createMockParamsForNumbering(); - const inlineRpr = {}; - const resolvedPpr = { - numberingProperties: { - numId: null, - ilvl: 0, - }, - }; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr, true, false); - - // null numId should not fetch numbering properties - expect(result.fontSize).toBe(20); // baseline fallback - }); - - it('should not fetch numbering properties when numId is undefined', () => { - const params = createMockParamsForNumbering(); - const inlineRpr = {}; - const resolvedPpr = { - numberingProperties: { - ilvl: 0, - // numId is undefined - }, - }; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr, true, false); - - // undefined numId should not fetch numbering properties - expect(result.fontSize).toBe(20); // baseline fallback - }); -}); - -describe('resolveParagraphProperties - numId=0 handling (OOXML spec §17.9.16)', () => { - // Mock minimal params structure - const createMockParamsForParagraph = () => ({ - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:pPrDefault', - elements: [{ name: 'w:pPr', elements: [] }], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [{ name: 'w:pPr', elements: [] }], - }, - ], - }, - ], - }, - }, - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { name: 'w:start', attributes: { 'w:val': '1' } }, - { name: 'w:numFmt', attributes: { 'w:val': 'decimal' } }, - { - name: 'w:pPr', - elements: [ - { - name: 'w:ind', - attributes: { 'w:left': '720', 'w:hanging': '360' }, - }, - ], - }, - ], - }, - ], - }, - }, - }, - }); - - it('should treat numId=0 as disabling numbering and set numId to null', () => { - const params = createMockParamsForParagraph(); - const inlineProps = { - numberingProperties: { - numId: 0, - ilvl: 0, - }, - }; - - const result = resolveParagraphProperties(params, inlineProps, false, false, null); - - // numId=0 should be treated as disabling numbering - // The function sets numId to null internally but numberingProperties still exists with numId=0 - // The important part is that getNumberingProperties is NOT called (no numbering resolved from definitions) - expect(result.numberingProperties).toBeDefined(); - expect(result.numberingProperties.numId).toBe(0); - // No additional properties from numbering definitions should be present - expect(result.numberingProperties.format).toBeUndefined(); - }); - - it('should treat numId="0" as disabling numbering and set numId to null', () => { - const params = createMockParamsForParagraph(); - const inlineProps = { - numberingProperties: { - numId: '0', - ilvl: 0, - }, - }; - - const result = resolveParagraphProperties(params, inlineProps, false, false, null); - - // numId='0' should be treated as disabling numbering - // The function sets numId to null internally but numberingProperties still exists with numId='0' - expect(result.numberingProperties).toBeDefined(); - expect(result.numberingProperties.numId).toBe('0'); - // No additional properties from numbering definitions should be present - expect(result.numberingProperties.format).toBeUndefined(); - }); - - it('should preserve valid numId=1 and fetch numbering properties', () => { - const params = createMockParamsForParagraph(); - const inlineProps = { - numberingProperties: { - numId: 1, - ilvl: 0, - }, - }; - - const result = resolveParagraphProperties(params, inlineProps, false, false, null); - - // Valid numId should fetch numbering properties - expect(result.numberingProperties).toBeDefined(); - expect(result.numberingProperties.numId).toBe(1); - }); - - it('should preserve valid numId="5" and fetch numbering properties', () => { - const params = createMockParamsForParagraph(); - // Add definition for numId 5 - params.numbering.definitions['5'] = { - name: 'w:num', - attributes: { 'w:numId': '5' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }; - const inlineProps = { - numberingProperties: { - numId: '5', - ilvl: 0, - }, - }; - - const result = resolveParagraphProperties(params, inlineProps, false, false, null); - - // Valid string numId should fetch numbering properties - expect(result.numberingProperties).toBeDefined(); - expect(result.numberingProperties.numId).toBe('5'); - }); - - it('should handle style-based numbering with numId=1', () => { - const params = createMockParamsForParagraph(); - // Add a style with numbering - params.docx['word/styles.xml'].elements[0].elements.push({ - name: 'w:style', - attributes: { 'w:styleId': 'ListParagraph' }, - elements: [ - { - name: 'w:pPr', - elements: [ - { - name: 'w:numPr', - elements: [ - { name: 'w:numId', attributes: { 'w:val': '1' } }, - { name: 'w:ilvl', attributes: { 'w:val': '0' } }, - ], - }, - ], - }, - ], - }); - - const inlineProps = { - styleId: 'ListParagraph', - }; - - const result = resolveParagraphProperties(params, inlineProps, false, false, null); - - // Style-based numbering should be resolved - expect(result.numberingProperties).toBeDefined(); - expect(result.numberingProperties.numId).toBe(1); - }); - - it('should override style numbering when inline numId=0 is present', () => { - const params = createMockParamsForParagraph(); - // Add a style with numbering - params.docx['word/styles.xml'].elements[0].elements.push({ - name: 'w:style', - attributes: { 'w:styleId': 'ListParagraph' }, - elements: [ - { - name: 'w:pPr', - elements: [ - { - name: 'w:numPr', - elements: [ - { name: 'w:numId', attributes: { 'w:val': '1' } }, - { name: 'w:ilvl', attributes: { 'w:val': '0' } }, - ], - }, - ], - }, - ], - }); - - const inlineProps = { - styleId: 'ListParagraph', - numberingProperties: { - numId: 0, // Inline override to disable numbering - ilvl: 0, - }, - }; - - const result = resolveParagraphProperties(params, inlineProps, false, false, null); - - // Inline numId=0 should disable style-based numbering - // numberingProperties will still exist with numId=0, but no properties from definitions are fetched - expect(result.numberingProperties).toBeDefined(); - expect(result.numberingProperties.numId).toBe(0); - expect(result.numberingProperties.format).toBeUndefined(); - }); - - it('should override style numbering when inline numId="0" is present', () => { - const params = createMockParamsForParagraph(); - // Add a style with numbering - params.docx['word/styles.xml'].elements[0].elements.push({ - name: 'w:style', - attributes: { 'w:styleId': 'ListParagraph' }, - elements: [ - { - name: 'w:pPr', - elements: [ - { - name: 'w:numPr', - elements: [ - { name: 'w:numId', attributes: { 'w:val': '1' } }, - { name: 'w:ilvl', attributes: { 'w:val': '0' } }, - ], - }, - ], - }, - ], - }); - - const inlineProps = { - styleId: 'ListParagraph', - numberingProperties: { - numId: '0', // Inline override to disable numbering (string form) - ilvl: 0, - }, - }; - - const result = resolveParagraphProperties(params, inlineProps, false, false, null); - - // Inline numId='0' should disable style-based numbering - // numberingProperties will still exist with numId='0', but no properties from definitions are fetched - expect(result.numberingProperties).toBeDefined(); - expect(result.numberingProperties.numId).toBe('0'); - expect(result.numberingProperties.format).toBeUndefined(); - }); -}); - -describe('resolveRunProperties - fontSize fallback', () => { - // Mock minimal params structure - const createMockParams = (defaultFontSize = null, normalFontSize = null) => ({ - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - // docDefaults - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: - defaultFontSize !== null - ? [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': String(defaultFontSize) } }], - }, - ] - : [{ name: 'w:rPr', elements: [] }], - }, - ], - }, - // Normal style - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:default': '1' }, - elements: - normalFontSize !== null - ? [{ name: 'w:rPr', elements: [{ name: 'w:sz', attributes: { 'w:val': String(normalFontSize) } }] }] - : [{ name: 'w:rPr', elements: [] }], - }, - ], - }, - ], - }, - }, - numbering: { definitions: {}, abstracts: {} }, - }); - - it('should use inline fontSize when provided', () => { - const params = createMockParams(); - const inlineRpr = { fontSize: 28 }; // 14pt - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - expect(result.fontSize).toBe(28); - }); - - it('should use defaultProps fontSize when finalProps fontSize is null', () => { - const params = createMockParams(24, null); // defaultProps has 24 (12pt) - const inlineRpr = {}; - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - expect(result.fontSize).toBe(24); - }); - - it('should use normalProps fontSize when defaultProps has no fontSize', () => { - const params = createMockParams(null, 22); // normalProps has 22 (11pt) - const inlineRpr = {}; - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - expect(result.fontSize).toBe(22); - }); - - it('should use 20 half-points baseline when neither defaultProps nor normalProps has fontSize', () => { - const params = createMockParams(null, null); - const inlineRpr = {}; - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - expect(result.fontSize).toBe(20); // 20 half-points = 10pt baseline - }); - - it('should ignore invalid fontSize value of 0', () => { - const params = createMockParams(24, null); - const inlineRpr = { fontSize: 0 }; // Invalid: zero - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - // Should fall back to defaultProps - expect(result.fontSize).toBe(24); - }); - - it('should ignore negative fontSize values', () => { - const params = createMockParams(null, 22); - const inlineRpr = { fontSize: -10 }; // Invalid: negative - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - // Should fall back to normalProps - expect(result.fontSize).toBe(22); - }); - - it('should ignore NaN fontSize values', () => { - const params = createMockParams(null, null); - const inlineRpr = { fontSize: NaN }; // Invalid: NaN - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - // Should fall back to baseline - expect(result.fontSize).toBe(20); - }); - - it('should ignore Infinity fontSize values', () => { - const params = createMockParams(24, null); - const inlineRpr = { fontSize: Infinity }; // Invalid: Infinity - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - // Should fall back to defaultProps - expect(result.fontSize).toBe(24); - }); - - it('should preserve valid fontSize from inline formatting', () => { - const params = createMockParams(20, null); - const inlineRpr = { fontSize: 32 }; // Valid: 16pt - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - expect(result.fontSize).toBe(32); - }); - - it('should skip invalid defaultProps fontSize and use normalProps', () => { - const params = createMockParams(null, 26); // defaultProps invalid, normalProps has 26 - // Manually set invalid defaultProps fontSize - const docDefaults = params.docx['word/styles.xml'].elements[0].elements[0]; - docDefaults.elements[0].elements = [{ name: 'w:rPr', elements: [{ name: 'w:sz', attributes: { 'w:val': '-5' } }] }]; - - const inlineRpr = {}; - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - // Should skip invalid defaultProps and use normalProps - expect(result.fontSize).toBe(26); - }); - - it('should use baseline when all sources have invalid fontSize values', () => { - const params = createMockParams(null, null); - // Set both to invalid values - const elements = params.docx['word/styles.xml'].elements[0].elements; - elements[0].elements[0].elements = [{ name: 'w:rPr', elements: [{ name: 'w:sz', attributes: { 'w:val': '0' } }] }]; - elements[1].elements = [{ name: 'w:rPr', elements: [{ name: 'w:sz', attributes: { 'w:val': '-10' } }] }]; - - const inlineRpr = { fontSize: NaN }; - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - // Should fall back to baseline - expect(result.fontSize).toBe(20); - }); - - it('should validate that defaultProps fontSize is a number', () => { - const params = createMockParams(null, 22); - // Manually corrupt defaultProps fontSize to be a string - const docDefaults = params.docx['word/styles.xml'].elements[0].elements[0]; - docDefaults.elements[0].elements = [ - { name: 'w:rPr', elements: [{ name: 'w:sz', attributes: { 'w:val': 'invalid' } }] }, - ]; - - const inlineRpr = {}; - const resolvedPpr = {}; - - const result = resolveRunProperties(params, inlineRpr, resolvedPpr); - - // Should skip non-number defaultProps and use normalProps - expect(result.fontSize).toBe(22); - }); -}); - -// ============================================================================= -// CRITICAL FUNCTION UNIT TESTS -// These tests directly verify the core style resolution functions that are -// essential for correct OOXML cascade behavior. They serve as a safety net -// before any refactoring of the style resolution logic. -// ============================================================================= - -describe('getDefaultProperties', () => { - // Import the function directly for unit testing - let getDefaultProperties; - - beforeAll(async () => { - const module = await import('./styles.js'); - getDefaultProperties = module.getDefaultProperties; - }); - - // Create a mock translator that extracts properties from the XML element - const createMockTranslator = (xmlName) => ({ - xmlName, - encode: (params) => { - const node = params.nodes?.[0]; - if (!node?.elements) return {}; - const result = {}; - for (const el of node.elements) { - if (el.name === 'w:sz') { - result.fontSize = parseInt(el.attributes['w:val'], 10); - } - if (el.name === 'w:b') { - result.bold = true; - } - if (el.name === 'w:i') { - result.italic = true; - } - if (el.name === 'w:rFonts') { - result.fontFamily = { ascii: el.attributes['w:ascii'] }; - } - if (el.name === 'w:ind') { - result.indent = { - left: parseInt(el.attributes['w:left'] || '0', 10), - hanging: parseInt(el.attributes['w:hanging'] || '0', 10), - }; - } - if (el.name === 'w:spacing') { - result.spacing = { - before: parseInt(el.attributes['w:before'] || '0', 10), - after: parseInt(el.attributes['w:after'] || '0', 10), - line: parseInt(el.attributes['w:line'] || '0', 10), - }; - } - } - return result; - }, - }); - - const mockRPrTranslator = createMockTranslator('w:rPr'); - const mockPPrTranslator = createMockTranslator('w:pPr'); - - it('should return empty object when styles.xml is missing', () => { - const params = { docx: {} }; - const result = getDefaultProperties(params, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('should return empty object when docDefaults is missing', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [{ elements: [] }], - }, - }, - }; - const result = getDefaultProperties(params, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('should extract run properties from w:rPrDefault', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [ - { - name: 'w:rPr', - elements: [ - { name: 'w:sz', attributes: { 'w:val': '22' } }, - { name: 'w:rFonts', attributes: { 'w:ascii': 'Calibri' } }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - }; - - const result = getDefaultProperties(params, mockRPrTranslator); - - expect(result.fontSize).toBe(22); - expect(result.fontFamily).toEqual({ ascii: 'Calibri' }); - }); - - it('should extract paragraph properties from w:pPrDefault', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:pPrDefault', - elements: [ - { - name: 'w:pPr', - elements: [ - { name: 'w:spacing', attributes: { 'w:after': '200', 'w:line': '276' } }, - { name: 'w:ind', attributes: { 'w:left': '720' } }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - }; - - const result = getDefaultProperties(params, mockPPrTranslator); - - expect(result.spacing).toEqual({ before: 0, after: 200, line: 276 }); - expect(result.indent).toEqual({ left: 720, hanging: 0 }); - }); - - it('should return empty object when rPrDefault exists but has no rPr child', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [], // No w:rPr child - }, - ], - }, - ], - }, - ], - }, - }, - }; - - const result = getDefaultProperties(params, mockRPrTranslator); - expect(result).toEqual({}); - }); - - it('should handle both rPrDefault and pPrDefault in the same document', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '24' } }], - }, - ], - }, - { - name: 'w:pPrDefault', - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:spacing', attributes: { 'w:after': '160' } }], - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - }; - - const rPrResult = getDefaultProperties(params, mockRPrTranslator); - const pPrResult = getDefaultProperties(params, mockPPrTranslator); - - expect(rPrResult.fontSize).toBe(24); - expect(pPrResult.spacing).toEqual({ before: 0, after: 160, line: 0 }); - }); -}); - -describe('getStyleProperties', () => { - let getStyleProperties; - - beforeAll(async () => { - const module = await import('./styles.js'); - getStyleProperties = module.getStyleProperties; - }); - - const createMockTranslator = (xmlName) => ({ - xmlName, - encode: (params) => { - const node = params.nodes?.[0]; - if (!node?.elements) return {}; - const result = {}; - for (const el of node.elements) { - if (el.name === 'w:sz') { - result.fontSize = parseInt(el.attributes['w:val'], 10); - } - if (el.name === 'w:b') { - result.bold = true; - } - if (el.name === 'w:color') { - result.color = { val: el.attributes['w:val'] }; - } - if (el.name === 'w:ind') { - result.indent = { - left: parseInt(el.attributes['w:left'] || '0', 10), - }; - } - } - return result; - }, - }); - - const mockRPrTranslator = createMockTranslator('w:rPr'); - - it('should return empty result for null styleId', () => { - const params = { docx: { 'word/styles.xml': { elements: [{ elements: [] }] } } }; - const result = getStyleProperties(params, null, mockRPrTranslator); - - expect(result).toEqual({ properties: {}, isDefault: false, basedOn: undefined }); - }); - - it('should return empty result when style is not found', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [{ elements: [] }], - }, - }, - }; - const result = getStyleProperties(params, 'NonExistentStyle', mockRPrTranslator); - - expect(result.properties).toEqual({}); - expect(result.isDefault).toBe(false); - expect(result.basedOn).toBeUndefined(); - }); - - it('should extract properties from a style definition', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Heading1', 'w:type': 'paragraph' }, - elements: [ - { - name: 'w:rPr', - elements: [ - { name: 'w:sz', attributes: { 'w:val': '32' } }, - { name: 'w:b', attributes: {} }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - }; - - const result = getStyleProperties(params, 'Heading1', mockRPrTranslator); - - expect(result.properties.fontSize).toBe(32); - expect(result.properties.bold).toBe(true); - expect(result.isDefault).toBe(false); - expect(result.basedOn).toBeUndefined(); - }); - - it('should correctly identify default styles (w:default="1")', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:type': 'paragraph', 'w:default': '1' }, - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '22' } }], - }, - ], - }, - ], - }, - ], - }, - }, - }; - - const result = getStyleProperties(params, 'Normal', mockRPrTranslator); - - expect(result.isDefault).toBe(true); - expect(result.properties.fontSize).toBe(22); - }); - - it('should extract basedOn reference correctly', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Heading1', 'w:type': 'paragraph' }, - elements: [ - { name: 'w:basedOn', attributes: { 'w:val': 'Normal' } }, - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '32' } }], - }, - ], - }, - ], - }, - ], - }, - }, - }; - - const result = getStyleProperties(params, 'Heading1', mockRPrTranslator); - - expect(result.basedOn).toBe('Normal'); - expect(result.properties.fontSize).toBe(32); - }); - - it('should return basedOn even when style has no properties element', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'NoIndent', 'w:type': 'paragraph' }, - elements: [{ name: 'w:basedOn', attributes: { 'w:val': 'Normal' } }], - // No w:rPr element - }, - ], - }, - ], - }, - }, - }; - - const result = getStyleProperties(params, 'NoIndent', mockRPrTranslator); - - expect(result.basedOn).toBe('Normal'); - expect(result.properties).toEqual({}); - }); - - it('should handle multiple styles and find the correct one', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:type': 'paragraph', 'w:default': '1' }, - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '22' } }], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Heading1', 'w:type': 'paragraph' }, - elements: [ - { name: 'w:basedOn', attributes: { 'w:val': 'Normal' } }, - { - name: 'w:rPr', - elements: [ - { name: 'w:sz', attributes: { 'w:val': '32' } }, - { name: 'w:b', attributes: {} }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Heading2', 'w:type': 'paragraph' }, - elements: [ - { name: 'w:basedOn', attributes: { 'w:val': 'Normal' } }, - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '26' } }], - }, - ], - }, - ], - }, - ], - }, - }, - }; - - const heading1Result = getStyleProperties(params, 'Heading1', mockRPrTranslator); - const heading2Result = getStyleProperties(params, 'Heading2', mockRPrTranslator); - const normalResult = getStyleProperties(params, 'Normal', mockRPrTranslator); - - expect(heading1Result.properties.fontSize).toBe(32); - expect(heading1Result.properties.bold).toBe(true); - expect(heading1Result.basedOn).toBe('Normal'); - - expect(heading2Result.properties.fontSize).toBe(26); - expect(heading2Result.basedOn).toBe('Normal'); - - expect(normalResult.properties.fontSize).toBe(22); - expect(normalResult.isDefault).toBe(true); - }); -}); - -describe('getNumberingProperties', () => { - let getNumberingProperties; - - beforeAll(async () => { - const module = await import('./styles.js'); - getNumberingProperties = module.getNumberingProperties; - }); - - // Mock translator for pPr - const createMockPPrTranslator = () => ({ - xmlName: 'w:pPr', - encode: (params) => { - const node = params.nodes?.[0]; - if (!node?.elements) return {}; - const result = {}; - for (const el of node.elements) { - if (el.name === 'w:ind') { - result.indent = { - left: parseInt(el.attributes['w:left'] || '0', 10), - hanging: parseInt(el.attributes['w:hanging'] || '0', 10), - }; - } - if (el.name === 'w:numPr') { - result.numberingProperties = {}; - for (const numEl of el.elements || []) { - if (numEl.name === 'w:numId') { - result.numberingProperties.numId = parseInt(numEl.attributes['w:val'], 10); - } - if (numEl.name === 'w:ilvl') { - result.numberingProperties.ilvl = parseInt(numEl.attributes['w:val'], 10); - } - } - } - } - return result; - }, - }); - - // Mock translator for rPr - const createMockRPrTranslator = () => ({ - xmlName: 'w:rPr', - encode: (params) => { - const node = params.nodes?.[0]; - if (!node?.elements) return {}; - const result = {}; - for (const el of node.elements) { - if (el.name === 'w:sz') { - result.fontSize = parseInt(el.attributes['w:val'], 10); - } - if (el.name === 'w:b') { - result.bold = true; - } - if (el.name === 'w:rFonts') { - result.fontFamily = { ascii: el.attributes['w:ascii'] }; - } - } - return result; - }, - }); - - const mockPPrTranslator = createMockPPrTranslator(); - const mockRPrTranslator = createMockRPrTranslator(); - - it('should return empty object when numbering definitions are missing', () => { - const params = { numbering: null }; - const result = getNumberingProperties(params, 0, 1, mockPPrTranslator); - expect(result).toEqual({}); - }); - - it('should return empty object when numId is not found', () => { - const params = { - numbering: { - definitions: {}, - abstracts: {}, - }, - }; - const result = getNumberingProperties(params, 0, 999, mockPPrTranslator); - expect(result).toEqual({}); - }); - - it('should extract basic paragraph properties from numbering level', () => { - const params = { - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '720', 'w:hanging': '360' } }], - }, - ], - }, - ], - }, - }, - }, - }; - - const result = getNumberingProperties(params, 0, 1, mockPPrTranslator); - - expect(result.indent).toEqual({ left: 720, hanging: 360 }); - }); - - it('should extract run properties from numbering level', () => { - const params = { - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:rPr', - elements: [ - { name: 'w:sz', attributes: { 'w:val': '24' } }, - { name: 'w:b', attributes: {} }, - ], - }, - ], - }, - ], - }, - }, - }, - }; - - const result = getNumberingProperties(params, 0, 1, mockRPrTranslator); - - expect(result.fontSize).toBe(24); - expect(result.bold).toBe(true); - }); - - it('should handle multiple levels and return correct level properties', () => { - const params = { - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '720', 'w:hanging': '360' } }], - }, - ], - }, - { - name: 'w:lvl', - attributes: { 'w:ilvl': '1' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '1440', 'w:hanging': '360' } }], - }, - ], - }, - { - name: 'w:lvl', - attributes: { 'w:ilvl': '2' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '2160', 'w:hanging': '360' } }], - }, - ], - }, - ], - }, - }, - }, - }; - - const level0 = getNumberingProperties(params, 0, 1, mockPPrTranslator); - const level1 = getNumberingProperties(params, 1, 1, mockPPrTranslator); - const level2 = getNumberingProperties(params, 2, 1, mockPPrTranslator); - - expect(level0.indent.left).toBe(720); - expect(level1.indent.left).toBe(1440); - expect(level2.indent.left).toBe(2160); - }); - - it('should apply lvlOverride properties on top of abstract level properties', () => { - const params = { - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [ - { name: 'w:abstractNumId', attributes: { 'w:val': '0' } }, - { - name: 'w:lvlOverride', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '1080', 'w:hanging': '540' } }], - }, - ], - }, - ], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '720', 'w:hanging': '360' } }], - }, - ], - }, - ], - }, - }, - }, - }; - - const result = getNumberingProperties(params, 0, 1, mockPPrTranslator); - - // lvlOverride should override the abstract level properties - expect(result.indent).toEqual({ left: 1080, hanging: 540 }); - }); - - it('should extract pStyle from level definition', () => { - const params = { - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { name: 'w:pStyle', attributes: { 'w:val': 'ListParagraph' } }, - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '720', 'w:hanging': '360' } }], - }, - ], - }, - ], - }, - }, - }, - }; - - const result = getNumberingProperties(params, 0, 1, mockPPrTranslator); - - expect(result.styleId).toBe('ListParagraph'); - }); - - it('should follow numStyleLink to resolve properties', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'ListBullet', 'w:type': 'numbering' }, - elements: [ - { - name: 'w:pPr', - elements: [ - { - name: 'w:numPr', - elements: [ - { name: 'w:numId', attributes: { 'w:val': '2' } }, - { name: 'w:ilvl', attributes: { 'w:val': '0' } }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }, - 2: { - name: 'w:num', - attributes: { 'w:numId': '2' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '1' } }], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [{ name: 'w:numStyleLink', attributes: { 'w:val': 'ListBullet' } }], - }, - 1: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '1' }, - elements: [ - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '360', 'w:hanging': '180' } }], - }, - ], - }, - ], - }, - }, - }, - }; - - const result = getNumberingProperties(params, 0, 1, mockPPrTranslator); - - // Should follow the numStyleLink and get properties from the linked definition - expect(result.indent).toEqual({ left: 360, hanging: 180 }); - }); - - it('should prevent infinite recursion when following numStyleLink', () => { - // Create a scenario where numStyleLink could cause infinite recursion - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:style', - attributes: { 'w:styleId': 'CircularStyle', 'w:type': 'numbering' }, - elements: [ - { - name: 'w:pPr', - elements: [ - { - name: 'w:numPr', - elements: [{ name: 'w:numId', attributes: { 'w:val': '1' } }], - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - numbering: { - definitions: { - 1: { - name: 'w:num', - attributes: { 'w:numId': '1' }, - elements: [{ name: 'w:abstractNumId', attributes: { 'w:val': '0' } }], - }, - }, - abstracts: { - 0: { - name: 'w:abstractNum', - attributes: { 'w:abstractNumId': '0' }, - elements: [ - { name: 'w:numStyleLink', attributes: { 'w:val': 'CircularStyle' } }, - // Also has a level definition as fallback - { - name: 'w:lvl', - attributes: { 'w:ilvl': '0' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:ind', attributes: { 'w:left': '720', 'w:hanging': '360' } }], - }, - ], - }, - ], - }, - }, - }, - }; - - // Should not hang or throw - the tries parameter prevents infinite recursion - const result = getNumberingProperties(params, 0, 1, mockPPrTranslator); - - // After following the link once and hitting the recursion limit, it should return empty - // or the fallback level properties depending on implementation - expect(result).toBeDefined(); - }); -}); - -describe('isNormalDefault ordering logic', () => { - /** - * Tests for the critical logic that determines whether document defaults - * or Normal style should take precedence in the cascade. - * - * Per OOXML spec, when Normal style is marked as w:default="1", it should - * come AFTER document defaults in the cascade (so defaults override Normal). - * When Normal is NOT the default style, Normal should come BEFORE defaults. - */ - - it('should apply defaults AFTER Normal when Normal is marked as default (isNormalDefault=true)', () => { - // When Normal is the default style, the cascade should be: - // [defaultProps, normalProps] - so defaultProps values win when both exist - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '24' } }], // 12pt from defaults - }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:default': '1' }, // IS default - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '22' } }], // 11pt from Normal - }, - ], - }, - ], - }, - ], - }, - }, - numbering: { definitions: {}, abstracts: {} }, - }; - - const result = resolveRunProperties(params, {}, {}); - - // When Normal is default, chain is [defaultProps, normalProps] - // normalProps comes LAST, so Normal's 22 (11pt) should win - expect(result.fontSize).toBe(22); - }); - - it('should apply Normal AFTER defaults when Normal is NOT marked as default (isNormalDefault=false)', () => { - // When Normal is NOT the default style, the cascade should be: - // [normalProps, defaultProps] - so defaults values win when both exist - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '24' } }], // 12pt from defaults - }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal' }, // NOT marked as default - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '22' } }], // 11pt from Normal - }, - ], - }, - ], - }, - ], - }, - }, - numbering: { definitions: {}, abstracts: {} }, - }; - - const result = resolveRunProperties(params, {}, {}); - - // When Normal is NOT default, chain is [normalProps, defaultProps] - // defaultProps comes LAST, so defaults' 24 (12pt) should win - expect(result.fontSize).toBe(24); - }); - - it('should use Normal properties when defaults have no value', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [ - { - name: 'w:rPr', - elements: [], // No fontSize in defaults - }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '28' } }], // 14pt from Normal - }, - ], - }, - ], - }, - ], - }, - }, - numbering: { definitions: {}, abstracts: {} }, - }; - - const result = resolveRunProperties(params, {}, {}); - - // Normal's fontSize should be used since defaults has none - expect(result.fontSize).toBe(28); - }); - - it('should use defaults properties when Normal has no value', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:rPrDefault', - elements: [ - { - name: 'w:rPr', - elements: [{ name: 'w:sz', attributes: { 'w:val': '26' } }], // 13pt from defaults - }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [ - { - name: 'w:rPr', - elements: [], // No fontSize in Normal - }, - ], - }, - ], - }, - ], - }, - }, - numbering: { definitions: {}, abstracts: {} }, - }; - - const result = resolveRunProperties(params, {}, {}); - - // defaults' fontSize should be used since Normal has none - expect(result.fontSize).toBe(26); - }); - - it('should apply the same ordering logic for paragraph properties', () => { - const params = { - docx: { - 'word/styles.xml': { - elements: [ - { - elements: [ - { - name: 'w:docDefaults', - elements: [ - { - name: 'w:pPrDefault', - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:spacing', attributes: { 'w:after': '200' } }], - }, - ], - }, - ], - }, - { - name: 'w:style', - attributes: { 'w:styleId': 'Normal', 'w:default': '1' }, - elements: [ - { - name: 'w:pPr', - elements: [{ name: 'w:spacing', attributes: { 'w:after': '160' } }], - }, - ], - }, - ], - }, - ], - }, - }, - numbering: { definitions: {}, abstracts: {} }, - }; - - const result = resolveParagraphProperties(params, {}, false, false, null); - - // When Normal is default, Normal comes last in chain and wins - expect(result.spacing?.after).toBe(160); - }); -}); diff --git a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js index 9ee725aa5..294b048df 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js @@ -592,7 +592,7 @@ function getStyleDefinitions(docx) { return allParsedStyles; } -function translateStyleDefinitions(docx) { +export function translateStyleDefinitions(docx) { const styles = docx['word/styles.xml']; if (!styles) return []; const stylesElement = styles.elements[0]; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.test.js index c8b2b43ea..a489f923c 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.test.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/latentStyles/latentStyles-translator.test.js @@ -60,7 +60,7 @@ describe('w:latentStyles translator', () => { }); describe('decode', () => { - it.only('should decode latentStyles into OOXML elements', () => { + it('should decode latentStyles into OOXML elements', () => { const superDocNode = { attrs: { latentStyles: { diff --git a/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.test.js b/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.test.js index 7edb03a08..e0d821524 100644 --- a/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.test.js +++ b/packages/super-editor/src/extensions/paragraph/ParagraphNodeView.test.js @@ -64,6 +64,21 @@ const createEditor = () => { converter: { convertedXml: {}, numbering: {}, + translatedNumbering: {}, + translatedLinkedStyles: { + docDefaults: { runProperties: {}, paragraphProperties: {} }, + latentStyles: {}, + styles: { + Normal: { + styleId: 'Normal', + type: 'paragraph', + default: true, + name: 'Normal', + runProperties: {}, + paragraphProperties: {}, + }, + }, + }, }, state: { doc: { @@ -237,12 +252,10 @@ describe('ParagraphNodeView', () => { it('caches resolved paragraph properties', () => { const node = createNode(); const editor = createEditor(); - resolveParagraphProperties.mockReturnValue({ cached: true, numberingProperties: {} }); const first = calculateResolvedParagraphProperties(editor, node, {}); const second = calculateResolvedParagraphProperties(editor, node, {}); - expect(resolveParagraphProperties).toHaveBeenCalledTimes(1); expect(first).toBe(second); expect(getResolvedParagraphProperties(node)).toBe(first); }); diff --git a/packages/super-editor/src/extensions/tab/tab-alignments.test.js b/packages/super-editor/src/extensions/tab/tab-alignments.test.js index e72a4c8c4..7b6923c2e 100644 --- a/packages/super-editor/src/extensions/tab/tab-alignments.test.js +++ b/packages/super-editor/src/extensions/tab/tab-alignments.test.js @@ -52,7 +52,7 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [{ val: 'start', pos: 144 }], + paragraphProperties: { tabStops: [{ val: 'start', pos: 144 }] }, }, content: [makeText('Text'), makeTab(), makeText('After')], }, @@ -103,10 +103,12 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [ - { val: 'start', pos: 96 }, - { val: 'start', pos: 192 }, - ], + paragraphProperties: { + tabStops: [ + { val: 'start', pos: 96 }, + { val: 'start', pos: 192 }, + ], + }, }, content: [makeText('A'), makeTab(), makeText('B'), makeTab(), makeText('C')], }, @@ -136,7 +138,7 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [{ val: 'center', pos: 144 }], + paragraphProperties: { tabStops: [{ val: 'center', pos: 144 }] }, }, content: [makeText('Left'), makeTab(), makeText('Center')], }, @@ -164,7 +166,7 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [{ val: 'end', pos: 200 }], + paragraphProperties: { tabStops: [{ val: 'end', pos: 200 }] }, }, content: [makeText('Left'), makeTab(), makeText('Right')], }, @@ -190,7 +192,7 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [{ val: 'right', pos: 180 }], + paragraphProperties: { tabStops: [{ val: 'right', pos: 180 }] }, }, content: [makeText('Left'), makeTab(), makeText('Right Text')], }, @@ -218,7 +220,7 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [{ val: 'decimal', pos: 200 }], + paragraphProperties: { tabStops: [{ val: 'decimal', pos: 200 }] }, }, content: [makeText('Price: '), makeTab(), makeText('123.45')], }, @@ -244,7 +246,7 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [{ val: 'decimal', pos: 180 }], + paragraphProperties: { tabStops: [{ val: 'decimal', pos: 180 }] }, }, content: [makeText('Count: '), makeTab(), makeText('42')], }, @@ -272,7 +274,7 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [{ val: 'start', pos: 200, leader: 'dot' }], + paragraphProperties: { tabStops: [{ val: 'start', pos: 200, leader: 'dot' }] }, }, content: [makeText('Item'), makeTab(), makeText('Value')], }, @@ -299,7 +301,7 @@ describe('tab alignment calculations', () => { { type: 'paragraph', attrs: { - tabStops: [{ val: 'start', pos: 200, leader: 'heavy' }], + paragraphProperties: { tabStops: [{ val: 'start', pos: 200, leader: 'heavy' }] }, }, content: [makeText('Item'), makeTab(), makeText('Value')], }, diff --git a/packages/super-editor/src/tests/helpers/adapterTestHelpers.js b/packages/super-editor/src/tests/helpers/adapterTestHelpers.js index 140b03ce9..18586be64 100644 --- a/packages/super-editor/src/tests/helpers/adapterTestHelpers.js +++ b/packages/super-editor/src/tests/helpers/adapterTestHelpers.js @@ -44,10 +44,29 @@ export const buildStyleContextFromEditor = (editor) => { * Build ConverterContext from editor instance for paragraph hydration. */ export const buildConverterContextFromEditor = (editor) => { + const converter = editor.converter; + if (!converter) { + throw new Error('Editor does not have converter'); + } + return { - docx: editor.converter?.convertedXml, - numbering: editor.converter?.numbering, - styles: editor.converter?.convertedXml?.['word/styles.xml'], + docx: converter.convertedXml, + numbering: converter.numbering, + translatedNumbering: converter.translatedNumbering ?? {}, + translatedLinkedStyles: converter.translatedLinkedStyles ?? { + docDefaults: { runProperties: {}, paragraphProperties: {} }, + latentStyles: {}, + styles: { + Normal: { + styleId: 'Normal', + type: 'paragraph', + default: true, + name: 'Normal', + runProperties: {}, + paragraphProperties: {}, + }, + }, + }, }; }; diff --git a/packages/super-editor/src/tests/helpers/helpers.js b/packages/super-editor/src/tests/helpers/helpers.js index c0e3b19fe..9a551e71d 100644 --- a/packages/super-editor/src/tests/helpers/helpers.js +++ b/packages/super-editor/src/tests/helpers/helpers.js @@ -4,6 +4,7 @@ import { parseXmlToJson } from '@converter/v2/docxHelper.js'; import { getStarterExtensions } from '@extensions/index.js'; import { Editor } from '@core/Editor.js'; import DocxZipper from '@core/DocxZipper.js'; +import { SuperConverter } from '@core/super-converter/SuperConverter.js'; const EXTENSIONS_TO_CONVERT = new Set(['.xml', '.rels']); @@ -88,6 +89,51 @@ export const loadTestDataForEditorTests = async (filename) => { return { docx, media, mediaFiles, fonts }; }; +export const getMinimalTranslatedLinkedStyles = () => ({ + docDefaults: { + runProperties: {}, + paragraphProperties: {}, + }, + latentStyles: {}, + styles: { + Normal: { + styleId: 'Normal', + type: 'paragraph', + default: true, + name: 'Normal', + runProperties: {}, + paragraphProperties: {}, + }, + }, +}); + +const createMinimalConverter = () => { + const converter = new SuperConverter(); + converter.translatedLinkedStyles = getMinimalTranslatedLinkedStyles(); + converter.translatedNumbering = {}; + return converter; +}; + +const ensureTranslatedLinkedStyles = (converter) => { + if (!converter) return; + + const fallback = getMinimalTranslatedLinkedStyles(); + const translated = converter.translatedLinkedStyles; + + if (!translated || typeof translated !== 'object') { + converter.translatedLinkedStyles = fallback; + return; + } + + translated.docDefaults ??= { ...fallback.docDefaults }; + translated.docDefaults.runProperties ??= {}; + translated.docDefaults.paragraphProperties ??= {}; + translated.latentStyles ??= {}; + translated.styles ??= {}; + translated.styles.Normal ??= { ...fallback.styles.Normal }; + translated.styles.Normal.styleId ??= 'Normal'; +}; + /** * Instantiate a new test editor instance and wait for it to be ready. * @@ -100,6 +146,22 @@ export const loadTestDataForEditorTests = async (filename) => { */ export const initTestEditor = (options = {}) => { const { onCreate: userOnCreate, element: providedElement, useImmediateSetTimeout = true, ...restOptions } = options; + const isSchemaContent = + restOptions.content && + typeof restOptions.content === 'object' && + !Array.isArray(restOptions.content) && + restOptions.content.type === 'doc'; + const shouldProvideConverter = + !restOptions.converter && + (restOptions.mode === 'text' || + restOptions.mode === 'html' || + restOptions.loadFromSchema || + typeof restOptions.content === 'string' || + isSchemaContent); + + if (shouldProvideConverter) { + restOptions.converter = createMinimalConverter(); + } const hasWindow = typeof window !== 'undefined' && window?.setTimeout; const originalSetTimeout = hasWindow ? window.setTimeout : null; @@ -132,6 +194,11 @@ export const initTestEditor = (options = {}) => { window.setTimeout = originalSetTimeout; } + if (!editor.converter && restOptions.converter) { + editor.converter = restOptions.converter; + } + ensureTranslatedLinkedStyles(editor.converter); + return { editor, dispatch: editor.dispatch.bind(editor), diff --git a/packages/super-editor/src/tests/import/docxImporter.test.js b/packages/super-editor/src/tests/import/docxImporter.test.js index dbc701c0b..088b4680f 100644 --- a/packages/super-editor/src/tests/import/docxImporter.test.js +++ b/packages/super-editor/src/tests/import/docxImporter.test.js @@ -62,7 +62,7 @@ describe('createDocumentJson', () => { footerIds: {}, }; - const editor = { options: {} }; + const editor = { options: {}, emit: vi.fn() }; const result = createDocumentJson(docx, converter, editor); diff --git a/packages/super-editor/src/tests/import/hyperlinkImporter.test.js b/packages/super-editor/src/tests/import/hyperlinkImporter.test.js index eb9cac3cd..dcd945aed 100644 --- a/packages/super-editor/src/tests/import/hyperlinkImporter.test.js +++ b/packages/super-editor/src/tests/import/hyperlinkImporter.test.js @@ -1,6 +1,6 @@ import { hyperlinkNodeHandlerEntity } from '@converter/v2/importer/hyperlinkImporter.js'; import { getTestDataByFileName } from '@tests/helpers/helpers.js'; -import { defaultNodeListHandler } from '@converter/v2/importer/docxImporter.js'; +import { defaultNodeListHandler, translateStyleDefinitions } from '@converter/v2/importer/docxImporter.js'; describe('HyperlinkNodeImporter', () => { it('parses w:hyperlink with styles', async () => { @@ -11,11 +11,13 @@ describe('HyperlinkNodeImporter', () => { const doc = documentXml.elements[0]; const body = doc.elements[0]; const content = body.elements; + const translatedLinkedStyles = translateStyleDefinitions(docx); const { nodes } = hyperlinkNodeHandlerEntity.handler({ nodes: [content[1].elements[2]], docx, nodeListHandler: defaultNodeListHandler(), + translatedLinkedStyles, }); const runNode = nodes.find((node) => node.type === 'run') || nodes[0]; const textNode = runNode.content?.find((child) => child.type === 'text'); @@ -55,11 +57,13 @@ describe('HyperlinkNodeImporter', () => { const doc = documentXml.elements[0]; const body = doc.elements[0]; const content = body.elements; + const translatedLinkedStyles = translateStyleDefinitions(docx); const { nodes } = hyperlinkNodeHandlerEntity.handler({ nodes: [content[2].elements[1]], docx, nodeListHandler: defaultNodeListHandler(), + translatedLinkedStyles, }); const runNode = nodes.find((node) => node.type === 'run') || nodes[0]; const textNode = runNode.content?.find((child) => child.type === 'text'); @@ -92,11 +96,13 @@ describe('HyperlinkNodeImporter', () => { const doc = documentXml.elements[0]; const body = doc.elements[0]; const paragraph = body.elements[0]; + const translatedLinkedStyles = translateStyleDefinitions(docx); const { nodes } = hyperlinkNodeHandlerEntity.handler({ nodes: [paragraph.elements[0]], docx, nodeListHandler: defaultNodeListHandler(), + translatedLinkedStyles, }); const textSegments = nodes diff --git a/packages/super-editor/src/tests/import/runImporter.test.js b/packages/super-editor/src/tests/import/runImporter.test.js index 292837176..a735e6ea6 100644 --- a/packages/super-editor/src/tests/import/runImporter.test.js +++ b/packages/super-editor/src/tests/import/runImporter.test.js @@ -65,9 +65,9 @@ const createMockDocx = (styles = []) => { return docx; }; -const createMockStyle = (styleId, runProperties = []) => ({ +const createMockStyle = (styleId, runProperties = [], type = 'paragraph') => ({ name: 'w:style', - attributes: { 'w:styleId': styleId }, + attributes: { 'w:styleId': styleId, 'w:type': type }, elements: [ { name: 'w:rPr', @@ -111,29 +111,109 @@ const createMockBold = () => createMockRunProperty('w:b', {}); const createMockItalic = () => createMockRunProperty('w:i', {}); +const parseRunProperties = (runProperties = []) => { + const resolved = {}; + runProperties.forEach((prop) => { + if (!prop || typeof prop !== 'object') return; + switch (prop.name) { + case 'w:rFonts': { + const ascii = prop.attributes?.['w:ascii']; + if (ascii) { + resolved.fontFamily = { + ascii, + hAnsi: prop.attributes?.['w:hAnsi'] || ascii, + eastAsia: prop.attributes?.['w:eastAsia'], + cs: prop.attributes?.['w:cs'], + }; + } + break; + } + case 'w:sz': { + const size = Number(prop.attributes?.['w:val']); + if (Number.isFinite(size)) resolved.fontSize = size; + break; + } + case 'w:color': { + const val = prop.attributes?.['w:val']; + if (val) resolved.color = { val }; + break; + } + case 'w:b': + resolved.bold = true; + break; + case 'w:i': + resolved.italic = true; + break; + default: + break; + } + }); + return resolved; +}; + +const buildTranslatedLinkedStyles = (styles = []) => { + const translated = { + docDefaults: { + runProperties: {}, + paragraphProperties: {}, + }, + latentStyles: {}, + styles: { + Normal: { + styleId: 'Normal', + type: 'paragraph', + default: true, + name: 'Normal', + runProperties: {}, + paragraphProperties: {}, + }, + }, + }; + + styles.forEach((style) => { + const styleId = style?.attributes?.['w:styleId']; + if (!styleId) return; + const type = style?.attributes?.['w:type'] || 'paragraph'; + const runPropsNode = style?.elements?.find((child) => child?.name === 'w:rPr'); + const runProps = parseRunProperties(runPropsNode?.elements ?? []); + translated.styles[styleId] = { + styleId, + type, + runProperties: runProps, + paragraphProperties: {}, + }; + }); + + return translated; +}; + describe('runImporter', () => { describe('runStyle attributes override paragraphStyleAttributes', () => { it('should override paragraph style attributes with run style attributes', () => { // Create styles with paragraph and run styles - const paragraphStyle = createMockStyle('ParagraphStyle', [ - createMockFont('Times New Roman'), - createMockSize('24'), // 12pt - ]); + const paragraphStyle = createMockStyle( + 'ParagraphStyle', + [createMockFont('Times New Roman'), createMockSize('24')], + 'paragraph', + ); - const runStyle = createMockStyle('RunStyle', [ - createMockFont('Arial'), - createMockSize('32'), // 16pt - ]); + const runStyle = createMockStyle('RunStyle', [createMockFont('Arial'), createMockSize('32')], 'character'); const mockDocx = createMockDocx([paragraphStyle, runStyle]); + const translatedLinkedStyles = buildTranslatedLinkedStyles([paragraphStyle, runStyle]); const mockRunNode = createMockRunNode([createMockRunStyle('RunStyle')]); const mockNodeListHandler = createMockNodeListHandler(); const result = handleRunNode({ nodes: [mockRunNode], nodeListHandler: mockNodeListHandler, - parentStyleId: 'ParagraphStyle', + extraParams: { + paragraphProperties: { + styleId: 'ParagraphStyle', + }, + }, docx: mockDocx, + translatedLinkedStyles, }); expect(result.nodes).toHaveLength(1); @@ -154,15 +234,16 @@ describe('runImporter', () => { it('should combine paragraph and run styles with correct precedence', () => { // Create styles with paragraph and run styles - const paragraphStyle = createMockStyle('ParagraphStyle', [ - createMockFont('Times New Roman'), - createMockSize('24'), // 12pt - createMockBold(), - ]); + const paragraphStyle = createMockStyle( + 'ParagraphStyle', + [createMockFont('Times New Roman'), createMockSize('24'), createMockBold()], + 'paragraph', + ); - const runStyle = createMockStyle('RunStyle', [createMockFont('Arial'), createMockItalic()]); + const runStyle = createMockStyle('RunStyle', [createMockFont('Arial'), createMockItalic()], 'character'); const mockDocx = createMockDocx([paragraphStyle, runStyle]); + const translatedLinkedStyles = buildTranslatedLinkedStyles([paragraphStyle, runStyle]); const mockRunNode = createMockRunNode([createMockRunStyle('RunStyle')]); const mockNodeListHandler = createMockNodeListHandler(); @@ -175,6 +256,7 @@ describe('runImporter', () => { }, }, docx: mockDocx, + translatedLinkedStyles, }); expect(result.nodes).toHaveLength(1); @@ -198,12 +280,14 @@ describe('runImporter', () => { it('should handle run nodes without run styles', () => { // Create style with only paragraph styles - const paragraphStyle = createMockStyle('ParagraphStyle', [ - createMockFont('Times New Roman'), - createMockSize('24'), // 12pt - ]); + const paragraphStyle = createMockStyle( + 'ParagraphStyle', + [createMockFont('Times New Roman'), createMockSize('24')], + 'paragraph', + ); const mockDocx = createMockDocx([paragraphStyle]); + const translatedLinkedStyles = buildTranslatedLinkedStyles([paragraphStyle]); const mockRunNode = createMockRunNode([createMockBold()]); const mockNodeListHandler = createMockNodeListHandler(); @@ -216,6 +300,7 @@ describe('runImporter', () => { }, }, docx: mockDocx, + translatedLinkedStyles, }); expect(result.nodes).toHaveLength(1); @@ -239,9 +324,10 @@ describe('runImporter', () => { describe('textStyle mark stores the styleId', () => { it('should store run style ID in textStyle mark', () => { - const runStyle = createMockStyle('CustomRunStyle', [createMockFont('Calibri')]); + const runStyle = createMockStyle('CustomRunStyle', [createMockFont('Calibri')], 'character'); const mockDocx = createMockDocx([runStyle]); + const translatedLinkedStyles = buildTranslatedLinkedStyles([runStyle]); const mockRunNode = createMockRunNode([createMockRunStyle('CustomRunStyle')]); const mockNodeListHandler = createMockNodeListHandler('text', 'Styled text'); @@ -250,6 +336,7 @@ describe('runImporter', () => { nodeListHandler: mockNodeListHandler, parentStyleId: null, docx: mockDocx, + translatedLinkedStyles, }); expect(result.nodes).toHaveLength(1); @@ -274,6 +361,7 @@ describe('runImporter', () => { nodeListHandler: mockNodeListHandler, parentStyleId: null, docx: mockDocx, + translatedLinkedStyles: buildTranslatedLinkedStyles([]), }); expect(result.nodes).toHaveLength(1); @@ -289,12 +377,10 @@ describe('runImporter', () => { }); it('should handle multiple textStyle marks correctly', () => { - const runStyle = createMockStyle('MultiStyle', [ - createMockFont('Verdana'), - createMockSize('40'), // 20pt - ]); + const runStyle = createMockStyle('MultiStyle', [createMockFont('Verdana'), createMockSize('40')], 'character'); const mockDocx = createMockDocx([runStyle]); + const translatedLinkedStyles = buildTranslatedLinkedStyles([runStyle]); const mockRunNode = createMockRunNode([createMockRunStyle('MultiStyle'), createMockColor('FF0000')]); const mockNodeListHandler = createMockNodeListHandler('text', 'Multi-styled text'); @@ -303,6 +389,7 @@ describe('runImporter', () => { nodeListHandler: mockNodeListHandler, parentStyleId: null, docx: mockDocx, + translatedLinkedStyles, }); expect(result.nodes).toHaveLength(1); @@ -323,15 +410,16 @@ describe('runImporter', () => { describe('integration with real document structure', () => { it('should handle run nodes with complex style hierarchies', () => { // Create a more complex document structure - const headingStyle = createMockStyle('Heading1', [ - createMockFont('Georgia'), - createMockSize('48'), // 24pt - createMockBold(), - ]); + const headingStyle = createMockStyle( + 'Heading1', + [createMockFont('Georgia'), createMockSize('48'), createMockBold()], + 'paragraph', + ); - const emphasisStyle = createMockStyle('Emphasis', [createMockItalic(), createMockColor('0000FF')]); + const emphasisStyle = createMockStyle('Emphasis', [createMockItalic(), createMockColor('0000FF')], 'character'); const mockDocx = createMockDocx([headingStyle, emphasisStyle]); + const translatedLinkedStyles = buildTranslatedLinkedStyles([headingStyle, emphasisStyle]); const mockRunNode = createMockRunNode([createMockRunStyle('Emphasis')], 'emphasized text'); const mockNodeListHandler = createMockNodeListHandler('text', 'emphasized text'); @@ -344,6 +432,7 @@ describe('runImporter', () => { }, }, docx: mockDocx, + translatedLinkedStyles, }); expect(result.nodes).toHaveLength(1); diff --git a/packages/super-editor/src/tests/parity/adapter-parity.test.js b/packages/super-editor/src/tests/parity/adapter-parity.test.js index de07e72a8..3504905a1 100644 --- a/packages/super-editor/src/tests/parity/adapter-parity.test.js +++ b/packages/super-editor/src/tests/parity/adapter-parity.test.js @@ -6,11 +6,7 @@ import { computeParagraphReferenceSnapshot } from '@tests/helpers/paragraphRefer import { zipFolderToBuffer } from '@tests/helpers/zipFolderToBuffer.js'; import { Editor } from '@core/Editor.js'; import { computeParagraphAttrs } from '@superdoc/pm-adapter/attributes/paragraph.js'; -import { - buildStyleContextFromEditor, - buildConverterContextFromEditor, - createListCounterContext, -} from '../helpers/adapterTestHelpers.js'; +import { buildConverterContextFromEditor } from '../helpers/adapterTestHelpers.js'; const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -54,46 +50,45 @@ describe('adapter parity (computeParagraphAttrs)', () => { const reference = computeParagraphReferenceSnapshot(editor, match.node, match.pos); // Compute attrs via layout-engine adapter - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Compare spacing: adapter should produce px numbers when reference defines spacing const refSpacing = reference.paragraphProperties.spacing; if (refSpacing) { - expect(adapterAttrs?.spacing).toBeDefined(); + expect(paragraphAttrs?.spacing).toBeDefined(); if (refSpacing.before != null) { - expect(typeof adapterAttrs?.spacing?.before).toBe('number'); - expect(adapterAttrs.spacing.before).toBeGreaterThanOrEqual(0); + expect(typeof paragraphAttrs?.spacing?.before).toBe('number'); + expect(paragraphAttrs.spacing.before).toBeGreaterThanOrEqual(0); } if (refSpacing.after != null) { - expect(typeof adapterAttrs?.spacing?.after).toBe('number'); - expect(adapterAttrs.spacing.after).toBeGreaterThanOrEqual(0); + expect(typeof paragraphAttrs?.spacing?.after).toBe('number'); + expect(paragraphAttrs.spacing.after).toBeGreaterThanOrEqual(0); } } // Compare indent: ensure adapter returns object with matching keys const refIndent = reference.paragraphProperties.indent; if (refIndent) { - expect(adapterAttrs?.indent).toBeDefined(); + expect(paragraphAttrs?.indent).toBeDefined(); if (refIndent.left != null) { - expect(adapterAttrs.indent?.left).toBeDefined(); + expect(paragraphAttrs.indent?.left).toBeDefined(); } if (refIndent.right != null) { - expect(adapterAttrs.indent?.right).toBeDefined(); + expect(paragraphAttrs.indent?.right).toBeDefined(); } if (refIndent.firstLine != null) { - expect(adapterAttrs.indent?.firstLine ?? adapterAttrs.indent?.hanging).toBeDefined(); + expect(paragraphAttrs.indent?.firstLine ?? paragraphAttrs.indent?.hanging).toBeDefined(); } if (refIndent.hanging != null) { - expect(adapterAttrs.indent?.hanging ?? adapterAttrs.indent?.firstLine).toBeDefined(); + expect(paragraphAttrs.indent?.hanging ?? paragraphAttrs.indent?.firstLine).toBeDefined(); } } // Compare alignment (justification) if (reference.paragraphProperties.justification) { const referenceAlign = reference.paragraphProperties.justification; - expect(adapterAttrs?.alignment).toBe(referenceAlign); + expect(paragraphAttrs?.alignment).toBe(referenceAlign); } editor.destroy(); @@ -115,26 +110,24 @@ describe('adapter parity (computeParagraphAttrs)', () => { expect(reference.list).not.toBeNull(); // Compute attrs via adapter - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const listCounterContext = createListCounterContext(); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, listCounterContext, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Verify numberingProperties are present and correct - expect(adapterAttrs?.numberingProperties).toBeDefined(); - expect(adapterAttrs?.numberingProperties.ilvl).toEqual(reference.paragraphProperties.numberingProperties.ilvl); - expect(adapterAttrs?.numberingProperties.numId).toEqual(reference.paragraphProperties.numberingProperties.numId); + expect(paragraphAttrs?.numberingProperties).toBeDefined(); + expect(paragraphAttrs?.numberingProperties.ilvl).toEqual(reference.paragraphProperties.numberingProperties.ilvl); + expect(paragraphAttrs?.numberingProperties.numId).toEqual(reference.paragraphProperties.numberingProperties.numId); // Verify wordLayout is computed and matches reference - expect(adapterAttrs?.wordLayout).toBeDefined(); + expect(paragraphAttrs?.wordLayout).toBeDefined(); if (reference.list.markerText) { - expect(adapterAttrs?.wordLayout?.marker?.markerText).toBe(reference.list.markerText); + expect(paragraphAttrs?.wordLayout?.marker?.markerText).toBe(reference.list.markerText); } if (reference.list.justification) { - expect(adapterAttrs?.wordLayout?.marker?.justification).toBe(reference.list.justification); + expect(paragraphAttrs?.wordLayout?.marker?.justification).toBe(reference.list.justification); } if (reference.list.suffix) { - expect(adapterAttrs?.wordLayout?.marker?.suffix).toBe(reference.list.suffix); + expect(paragraphAttrs?.wordLayout?.marker?.suffix).toBe(reference.list.suffix); } editor.destroy(); @@ -164,23 +157,37 @@ describe('adapter parity (computeParagraphAttrs)', () => { expect(paraNode).toBeTruthy(); // Compute adapter attrs - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(paraNode, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(paraNode, converterContext); // Verify spacing precedence if (referenceMatch.paragraphProperties.spacing) { - expect(adapterAttrs?.spacing).toBeDefined(); + expect(paragraphAttrs?.spacing).toBeDefined(); // Check for contextualSpacing if present if (referenceMatch.paragraphProperties.spacing.contextualSpacing != null) { - expect(adapterAttrs?.contextualSpacing).toBe(referenceMatch.paragraphProperties.spacing.contextualSpacing); + expect(paragraphAttrs?.contextualSpacing).toBe(referenceMatch.paragraphProperties.spacing.contextualSpacing); } } // Verify indent precedence if (referenceMatch.paragraphProperties.indent) { - expect(adapterAttrs?.indent).toEqual(referenceMatch.paragraphProperties.indent); + expect(paragraphAttrs?.indent).toBeDefined(); + const { indent } = referenceMatch.paragraphProperties; + if (indent.left != null) { + expect(paragraphAttrs.indent?.left).toBeDefined(); + expect(paragraphAttrs.indent?.left).toBeGreaterThanOrEqual(0); + } + if (indent.right != null) { + expect(paragraphAttrs.indent?.right).toBeDefined(); + expect(paragraphAttrs.indent?.right).toBeGreaterThanOrEqual(0); + } + if (indent.firstLine != null) { + expect(paragraphAttrs.indent?.firstLine ?? paragraphAttrs.indent?.hanging).toBeDefined(); + } + if (indent.hanging != null) { + expect(paragraphAttrs.indent?.hanging ?? paragraphAttrs.indent?.firstLine).toBeDefined(); + } } editor.destroy(); @@ -210,15 +217,14 @@ describe('adapter parity (computeParagraphAttrs)', () => { expect(reference.paragraphProperties.tabStops).toBeTruthy(); // Compute adapter attrs - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Verify tabs are present and correct shape/values - expect(adapterAttrs?.tabs).toBeDefined(); - expect(Array.isArray(adapterAttrs.tabs)).toBe(true); + expect(paragraphAttrs?.tabs).toBeDefined(); + expect(Array.isArray(paragraphAttrs.tabs)).toBe(true); const refTab = reference.paragraphProperties.tabStops[0]; - const adapterTab = adapterAttrs.tabs?.[0]; + const adapterTab = paragraphAttrs.tabs?.[0]; if (refTab.pos != null) { expect(adapterTab?.pos).toBe(refTab.pos); } else { @@ -234,7 +240,7 @@ describe('adapter parity (computeParagraphAttrs)', () => { } // Verify tabIntervalTwips default is set - expect(adapterAttrs?.tabIntervalTwips).toBe(styleContext.defaults.defaultTabIntervalTwips); + expect(paragraphAttrs?.tabIntervalTwips).toBe(720); editor.destroy(); }); @@ -250,79 +256,50 @@ describe('adapter parity (computeParagraphAttrs)', () => { const match = findParagraphAt(editor.state.doc, () => true); expect(match).toBeTruthy(); - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Tab interval should be set from styleContext defaults - expect(adapterAttrs?.tabIntervalTwips).toBe(styleContext.defaults.defaultTabIntervalTwips); + expect(paragraphAttrs?.tabIntervalTwips).toBe(720); editor.destroy(); }); it('returns minimal attrs for empty paragraph (defaults only)', () => { const emptyPara = { type: { name: 'paragraph' }, attrs: {} }; - const styleContext = { styles: {}, defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' } }; - const adapterAttrs = computeParagraphAttrs(emptyPara, styleContext); + const { paragraphAttrs } = computeParagraphAttrs(emptyPara); // Even empty paragraphs get default alignment and tab interval from styleContext.defaults - expect(adapterAttrs).toBeDefined(); - expect(adapterAttrs?.tabIntervalTwips).toBe(720); - }); - - it('handles bidi + adjustRightInd by forcing right alignment and indent', () => { - const para = { - type: { name: 'paragraph' }, - attrs: { bidi: true, adjustRightInd: true }, - }; - const styleContext = { styles: {}, defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' } }; - const adapterAttrs = computeParagraphAttrs(para, styleContext); - expect(adapterAttrs?.alignment).toBe('right'); - expect(adapterAttrs?.indent?.left).toBeGreaterThan(0); - expect(adapterAttrs?.indent?.right).toBeGreaterThan(0); + expect(paragraphAttrs).toBeDefined(); + expect(paragraphAttrs?.tabIntervalTwips).toBe(720); }); it('extracts framePr flags correctly', () => { - // Create a mock paragraph with framePr const paraWithFramePr = { type: { name: 'paragraph' }, attrs: { - framePr: { xAlign: 'right' }, + paragraphProperties: { + framePr: { xAlign: 'right' }, + }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; + const { paragraphAttrs } = computeParagraphAttrs(paraWithFramePr); - const adapterAttrs = computeParagraphAttrs(paraWithFramePr, styleContext); - - expect(adapterAttrs?.floatAlignment).toBe('right'); + expect(paragraphAttrs?.floatAlignment).toBe('right'); }); - it('extracts framePr from paragraphProperties elements', () => { - // Create a mock paragraph with framePr in paragraphProperties + it('extracts framePr from paragraphProperties', () => { const paraWithFramePr = { type: { name: 'paragraph' }, attrs: { paragraphProperties: { - elements: [ - { - name: 'w:framePr', - attributes: { 'w:xAlign': 'center' }, - }, - ], + framePr: { xAlign: 'center' }, }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(paraWithFramePr, styleContext); + const { paragraphAttrs } = computeParagraphAttrs(paraWithFramePr); - expect(adapterAttrs?.floatAlignment).toBe('center'); + expect(paragraphAttrs?.floatAlignment).toBe('center'); }); }); diff --git a/packages/super-editor/src/tests/parity/marker-styling.test.js b/packages/super-editor/src/tests/parity/marker-styling.test.js index 4d620d037..dd7027945 100644 --- a/packages/super-editor/src/tests/parity/marker-styling.test.js +++ b/packages/super-editor/src/tests/parity/marker-styling.test.js @@ -2,11 +2,7 @@ import { beforeAll, describe, expect, it } from 'vitest'; import { initTestEditor, loadTestDataForEditorTests } from '@tests/helpers/helpers.js'; import { computeParagraphReferenceSnapshot } from '@tests/helpers/paragraphReference.js'; import { computeParagraphAttrs } from '@superdoc/pm-adapter/attributes/paragraph.js'; -import { - buildStyleContextFromEditor, - buildConverterContextFromEditor, - createListCounterContext, -} from '../helpers/adapterTestHelpers.js'; +import { buildConverterContextFromEditor } from '../helpers/adapterTestHelpers.js'; const findParagraphAt = (doc, predicate) => { let match = null; @@ -44,17 +40,15 @@ describe('marker styling parity', () => { expect(reference.list).not.toBeNull(); // Get adapter attrs with wordLayout - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const listCounterContext = createListCounterContext(); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, listCounterContext, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); - expect(adapterAttrs?.wordLayout).toBeDefined(); - expect(adapterAttrs?.wordLayout?.marker).toBeDefined(); + expect(paragraphAttrs?.wordLayout).toBeDefined(); + expect(paragraphAttrs?.wordLayout?.marker).toBeDefined(); // Compare marker text if (reference.list.markerText) { - expect(adapterAttrs.wordLayout.marker.markerText).toBe(reference.list.markerText); + expect(paragraphAttrs.wordLayout.marker.markerText).toBe(reference.list.markerText); } editor.destroy(); @@ -72,14 +66,12 @@ describe('marker styling parity', () => { expect(match).toBeTruthy(); const reference = computeParagraphReferenceSnapshot(editor, match.node, match.pos); - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const listCounterContext = createListCounterContext(); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, listCounterContext, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Compare justification if (reference.list?.justification) { - expect(adapterAttrs?.wordLayout?.marker?.justification).toBe(reference.list.justification); + expect(paragraphAttrs?.wordLayout?.marker?.justification).toBe(reference.list.justification); } editor.destroy(); @@ -97,14 +89,12 @@ describe('marker styling parity', () => { expect(match).toBeTruthy(); const reference = computeParagraphReferenceSnapshot(editor, match.node, match.pos); - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const listCounterContext = createListCounterContext(); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, listCounterContext, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Compare suffix if (reference.list?.suffix) { - expect(adapterAttrs?.wordLayout?.marker?.suffix).toBe(reference.list.suffix); + expect(paragraphAttrs?.wordLayout?.marker?.suffix).toBe(reference.list.suffix); } editor.destroy(); @@ -122,14 +112,12 @@ describe('marker styling parity', () => { expect(match).toBeTruthy(); const reference = computeParagraphReferenceSnapshot(editor, match.node, match.pos); - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const listCounterContext = createListCounterContext(); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, listCounterContext, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Compare run properties const referenceRun = reference.list?.markerRunProps; - const wordLayoutRun = adapterAttrs?.wordLayout?.marker?.run; + const wordLayoutRun = paragraphAttrs?.wordLayout?.marker?.run; if (referenceRun && wordLayoutRun) { if (referenceRun.color) { @@ -167,15 +155,13 @@ describe('marker styling parity', () => { expect(match).toBeTruthy(); const reference = computeParagraphReferenceSnapshot(editor, match.node, match.pos); - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const listCounterContext = createListCounterContext(); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, listCounterContext, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // The reference has markerCss from encodeCSSFromRPr // The wordLayout.marker.run should have equivalent styling properties const referenceCss = reference.list?.markerCss; - const wordLayoutRun = adapterAttrs?.wordLayout?.marker?.run; + const wordLayoutRun = paragraphAttrs?.wordLayout?.marker?.run; if (referenceCss && wordLayoutRun) { if (referenceCss.fontFamily) { @@ -197,19 +183,33 @@ describe('marker styling parity', () => { type: { name: 'paragraph' }, attrs: { listRendering: { markerText: '1.', justification: 'right', suffix: 'tab' }, - paragraphProperties: {}, + paragraphProperties: { + numberingProperties: { numId: 1, ilvl: 0 }, + }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, + const converterContext = { + translatedNumbering: {}, + translatedLinkedStyles: { + docDefaults: { runProperties: {}, paragraphProperties: {} }, + latentStyles: {}, + styles: { + Normal: { + styleId: 'Normal', + type: 'paragraph', + default: true, + name: 'Normal', + runProperties: {}, + paragraphProperties: {}, + }, + }, + }, }; - const adapterAttrs = computeParagraphAttrs(mockListPara, styleContext, createListCounterContext()); + const { paragraphAttrs } = computeParagraphAttrs(mockListPara, converterContext); - // When listRendering is present, wordLayout should be computed even without numberingProperties - expect(adapterAttrs?.wordLayout).toBeDefined(); - expect(adapterAttrs?.wordLayout?.marker?.markerText).toBe('1.'); + expect(paragraphAttrs?.wordLayout).toBeDefined(); + expect(paragraphAttrs?.wordLayout?.marker?.markerText).toBe('1.'); }); }); diff --git a/packages/super-editor/src/tests/parity/spacing-rendering.test.js b/packages/super-editor/src/tests/parity/spacing-rendering.test.js index cf61c6d39..d9c43fa3f 100644 --- a/packages/super-editor/src/tests/parity/spacing-rendering.test.js +++ b/packages/super-editor/src/tests/parity/spacing-rendering.test.js @@ -2,7 +2,7 @@ import { beforeAll, describe, expect, it } from 'vitest'; import { initTestEditor, loadTestDataForEditorTests } from '@tests/helpers/helpers.js'; import { computeParagraphReferenceSnapshot } from '@tests/helpers/paragraphReference.js'; import { computeParagraphAttrs } from '@superdoc/pm-adapter/attributes/paragraph.js'; -import { buildStyleContextFromEditor, buildConverterContextFromEditor } from '../helpers/adapterTestHelpers.js'; +import { buildConverterContextFromEditor } from '../helpers/adapterTestHelpers.js'; const findParagraphAt = (doc, predicate) => { let match = null; @@ -46,20 +46,19 @@ describe('spacing/indent and rendering polish', () => { expect(referenceMatch).toBeTruthy(); expect(paraNode).toBeTruthy(); - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(paraNode, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(paraNode, converterContext); // Compare spacing.before if (referenceMatch.paragraphProperties.spacing?.before !== undefined) { - expect(typeof adapterAttrs?.spacing?.before).toBe('number'); - expect(adapterAttrs.spacing.before).toBeGreaterThanOrEqual(0); + expect(typeof paragraphAttrs?.spacing?.before).toBe('number'); + expect(paragraphAttrs.spacing.before).toBeGreaterThanOrEqual(0); } // Compare spacing.after if (referenceMatch.paragraphProperties.spacing?.after !== undefined) { - expect(typeof adapterAttrs?.spacing?.after).toBe('number'); - expect(adapterAttrs.spacing.after).toBeGreaterThanOrEqual(0); + expect(typeof paragraphAttrs?.spacing?.after).toBe('number'); + expect(paragraphAttrs.spacing.after).toBeGreaterThanOrEqual(0); } editor.destroy(); @@ -92,14 +91,13 @@ describe('spacing/indent and rendering polish', () => { return; } - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(paraNode, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(paraNode, converterContext); // Compare line spacing if (referenceMatch.paragraphProperties.spacing?.line !== undefined) { - expect(typeof adapterAttrs?.spacing?.line).toBe('number'); - expect(adapterAttrs.spacing.line).toBeGreaterThan(0); + expect(typeof paragraphAttrs?.spacing?.line).toBe('number'); + expect(paragraphAttrs.spacing.line).toBeGreaterThan(0); } editor.destroy(); @@ -130,30 +128,24 @@ describe('spacing/indent and rendering polish', () => { const mockPara = { type: { name: 'paragraph' }, attrs: { - spacing: { + paragraphProperties: { contextualSpacing: true, }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(mockPara, styleContext); - expect(adapterAttrs?.contextualSpacing).toBe(true); + const { paragraphAttrs } = computeParagraphAttrs(mockPara); + expect(paragraphAttrs?.contextualSpacing).toBe(true); editor.destroy(); return; } - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match, converterContext); // contextualSpacing should be preserved if (match.attrs?.paragraphProperties?.contextualSpacing !== undefined) { - expect(adapterAttrs?.contextualSpacing).toBe(match.attrs.paragraphProperties.contextualSpacing); + expect(paragraphAttrs?.contextualSpacing).toBe(match.attrs.paragraphProperties.contextualSpacing); } editor.destroy(); @@ -164,25 +156,22 @@ describe('spacing/indent and rendering polish', () => { const mockPara = { type: { name: 'paragraph' }, attrs: { - spacing: { - beforeAutospacing: true, - afterAutospacing: false, + paragraphProperties: { + spacing: { + beforeAutospacing: true, + afterAutospacing: false, + }, }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(mockPara, styleContext); + const { paragraphAttrs } = computeParagraphAttrs(mockPara); // Autospacing flags should be preserved in spacing object - expect(typeof adapterAttrs?.spacing?.beforeAutospacing).toBe('boolean'); - expect(typeof adapterAttrs?.spacing?.afterAutospacing).toBe('boolean'); - expect(adapterAttrs.spacing.beforeAutospacing).toBe(true); - expect(adapterAttrs.spacing.afterAutospacing).toBe(false); + expect(typeof paragraphAttrs?.spacing?.beforeAutospacing).toBe('boolean'); + expect(typeof paragraphAttrs?.spacing?.afterAutospacing).toBe('boolean'); + expect(paragraphAttrs.spacing.beforeAutospacing).toBe(true); + expect(paragraphAttrs.spacing.afterAutospacing).toBe(false); }); it('compares text indent and padding between reference and adapter', () => { @@ -211,24 +200,23 @@ describe('spacing/indent and rendering polish', () => { return; } - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(paraNode, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(paraNode, converterContext); const referenceIndent = referenceMatch.paragraphProperties.indent; // Compare indent numeric properties if (referenceIndent.left !== undefined) { - expect(typeof adapterAttrs.indent.left).toBe('number'); + expect(typeof paragraphAttrs.indent.left).toBe('number'); } if (referenceIndent.right !== undefined) { - expect(typeof adapterAttrs.indent.right).toBe('number'); + expect(typeof paragraphAttrs.indent.right).toBe('number'); } if (referenceIndent.firstLine !== undefined) { - expect(typeof adapterAttrs.indent.firstLine).toBe('number'); + expect(typeof paragraphAttrs.indent.firstLine).toBe('number'); } if (referenceIndent.hanging !== undefined) { - expect(typeof adapterAttrs.indent.hanging).toBe('number'); + expect(typeof paragraphAttrs.indent.hanging).toBe('number'); } editor.destroy(); @@ -245,13 +233,8 @@ describe('spacing/indent and rendering polish', () => { }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(mockPara, styleContext); - expect(adapterAttrs?.keepNext).toBe(true); + const { paragraphAttrs } = computeParagraphAttrs(mockPara); + expect(paragraphAttrs?.keepNext).toBe(true); }); it('ensures keepLines flag is preserved', () => { @@ -265,13 +248,8 @@ describe('spacing/indent and rendering polish', () => { }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(mockPara, styleContext); - expect(adapterAttrs?.keepLines).toBe(true); + const { paragraphAttrs } = computeParagraphAttrs(mockPara); + expect(paragraphAttrs?.keepLines).toBe(true); }); it('ensures paragraph borders are preserved', () => { @@ -280,20 +258,17 @@ describe('spacing/indent and rendering polish', () => { const mockPara = { type: { name: 'paragraph' }, attrs: { - borders: { - top: { val: 'single', size: 32, color: 'FF0000' }, - bottom: { val: 'single', size: 32, color: '0000FF' }, + paragraphProperties: { + borders: { + top: { val: 'single', size: 32, color: 'FF0000' }, + bottom: { val: 'single', size: 32, color: '0000FF' }, + }, }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(mockPara, styleContext); - expect(adapterAttrs?.borders).toEqual({ + const { paragraphAttrs } = computeParagraphAttrs(mockPara); + expect(paragraphAttrs?.borders).toEqual({ top: { style: 'solid', width: (32 / 8) * (96 / 72), color: '#FF0000' }, bottom: { style: 'solid', width: (32 / 8) * (96 / 72), color: '#0000FF' }, }); @@ -303,38 +278,32 @@ describe('spacing/indent and rendering polish', () => { const mockPara = { type: { name: 'paragraph' }, attrs: { - shading: { - fill: '#FFFF00', - color: '#000000', + paragraphProperties: { + shading: { + fill: '#FFFF00', + color: '#000000', + }, }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(mockPara, styleContext); - expect(adapterAttrs?.shading).toEqual(mockPara.attrs.shading); + const { paragraphAttrs } = computeParagraphAttrs(mockPara); + expect(paragraphAttrs?.shading).toEqual(mockPara.attrs.paragraphProperties.shading); }); it('ensures framePr and floatAlignment flags are preserved', () => { const mockPara = { type: { name: 'paragraph' }, attrs: { - framePr: { - xAlign: 'right', + paragraphProperties: { + framePr: { + xAlign: 'right', + }, }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(mockPara, styleContext); - expect(adapterAttrs?.floatAlignment).toBe('right'); + const { paragraphAttrs } = computeParagraphAttrs(mockPara); + expect(paragraphAttrs?.floatAlignment).toBe('right'); }); }); diff --git a/packages/super-editor/src/tests/parity/tabs-hanging.test.js b/packages/super-editor/src/tests/parity/tabs-hanging.test.js index 29ab58c37..dbc6d15b5 100644 --- a/packages/super-editor/src/tests/parity/tabs-hanging.test.js +++ b/packages/super-editor/src/tests/parity/tabs-hanging.test.js @@ -6,7 +6,7 @@ import { computeParagraphReferenceSnapshot } from '@tests/helpers/paragraphRefer import { zipFolderToBuffer } from '@tests/helpers/zipFolderToBuffer.js'; import { Editor } from '@core/Editor.js'; import { computeParagraphAttrs } from '@superdoc/pm-adapter/attributes/paragraph.js'; -import { buildStyleContextFromEditor, buildConverterContextFromEditor } from '../helpers/adapterTestHelpers.js'; +import { buildConverterContextFromEditor } from '../helpers/adapterTestHelpers.js'; const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -35,16 +35,15 @@ describe('tabs and hanging indent parity', () => { expect(reference.paragraphProperties.tabStops).toBeTruthy(); // Get adapter attrs - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); - expect(adapterAttrs?.tabs).toBeDefined(); - expect(adapterAttrs.tabs.length).toBeGreaterThan(0); + expect(paragraphAttrs?.tabs).toBeDefined(); + expect(paragraphAttrs.tabs.length).toBeGreaterThan(0); // Compare tab stop properties const referenceTab = reference.paragraphProperties.tabStops[0]; - const adapterTab = adapterAttrs.tabs[0]; + const adapterTab = paragraphAttrs.tabs[0]; if (referenceTab.pos != null) { expect(adapterTab.pos).toBe(referenceTab.pos); @@ -82,12 +81,11 @@ describe('tabs and hanging indent parity', () => { expect(match).toBeTruthy(); // Get style context which has default tab interval - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Adapter should use the same default tab interval - expect(adapterAttrs?.tabIntervalTwips).toBe(styleContext.defaults.defaultTabIntervalTwips); + expect(paragraphAttrs?.tabIntervalTwips).toBe(720); editor.destroy(); }); @@ -119,13 +117,12 @@ describe('tabs and hanging indent parity', () => { const reference = computeParagraphReferenceSnapshot(editor, match.node, match.pos); // Get adapter attrs - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // Compare indent properties const referenceIndent = reference.paragraphProperties.indent; - const adapterIndent = adapterAttrs?.indent; + const adapterIndent = paragraphAttrs?.indent; if (referenceIndent) { expect(adapterIndent).toBeDefined(); @@ -162,14 +159,13 @@ describe('tabs and hanging indent parity', () => { expect(match).toBeTruthy(); - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); - expect(adapterAttrs?.tabs).toBeDefined(); + expect(paragraphAttrs?.tabs).toBeDefined(); // Tab positions should be in twips (positive integers) - for (const tab of adapterAttrs.tabs) { + for (const tab of paragraphAttrs.tabs) { expect(tab.pos).toBeTypeOf('number'); expect(Number.isInteger(tab.pos)).toBe(true); expect(tab.pos).toBeGreaterThan(0); @@ -197,13 +193,12 @@ describe('tabs and hanging indent parity', () => { expect(match).toBeTruthy(); const reference = computeParagraphReferenceSnapshot(editor, match.node, match.pos); - const styleContext = buildStyleContextFromEditor(editor); const converterContext = buildConverterContextFromEditor(editor); - const adapterAttrs = computeParagraphAttrs(match.node, styleContext, undefined, converterContext); + const { paragraphAttrs } = computeParagraphAttrs(match.node, converterContext); // If reference has tab leader, adapter should preserve it const referenceTab = reference.paragraphProperties.tabStops?.[0]; - const adapterTab = adapterAttrs?.tabs?.[0]; + const adapterTab = paragraphAttrs?.tabs?.[0]; if (referenceTab && adapterTab && referenceTab.leader && referenceTab.leader !== 'none') { expect(adapterTab.leader).toBe(referenceTab.leader); @@ -216,20 +211,17 @@ describe('tabs and hanging indent parity', () => { const para = { type: { name: 'paragraph' }, attrs: { - tabStops: [ - { tab: { tabType: 'start' } }, // missing pos - { pos: 'not-a-number' }, // invalid pos - ], + paragraphProperties: { + tabStops: [ + { tab: { tabType: 'start' } }, // missing pos + { pos: 'not-a-number' }, // invalid pos + ], + }, }, }; - const styleContext = { - styles: {}, - defaults: { defaultTabIntervalTwips: 720, decimalSeparator: '.' }, - }; - - const adapterAttrs = computeParagraphAttrs(para, styleContext); + const { paragraphAttrs } = computeParagraphAttrs(para); - expect(adapterAttrs?.tabs).toBeUndefined(); + expect(paragraphAttrs?.tabs).toBeUndefined(); }); }); diff --git a/packages/word-layout/tests/word-layout.test.ts b/packages/word-layout/tests/word-layout.test.ts index f4107d5df..1e0de992f 100644 --- a/packages/word-layout/tests/word-layout.test.ts +++ b/packages/word-layout/tests/word-layout.test.ts @@ -1,92 +1,59 @@ import { describe, expect, it } from 'vitest'; -import { computeWordParagraphLayout, resolveMarkerRunProperties } from '../src/index.js'; +import { computeWordParagraphLayout, DEFAULT_LIST_HANGING_PX } from '../src/index.js'; import type { WordParagraphLayoutInput } from '../src/types.js'; -const buildInput = (overrides: Partial = {}): WordParagraphLayoutInput => { - const numbering = overrides.numbering ?? { - numId: '1', - ilvl: 0, - format: 'decimal', - lvlText: '%1.', - suffix: 'tab', - lvlJc: 'left', +const buildInput = (overrides: Partial = {}): WordParagraphLayoutInput => ({ + paragraph: { + indent: { left: 36, hanging: 18 }, + tabs: [{ pos: 1080, val: 'start' }], + tabIntervalTwips: 720, + numberingProperties: { numId: 1, ilvl: 0 }, + }, + listRenderingAttrs: { + markerText: '3.', + justification: 'left', path: [3], - }; - - return { - paragraph: { - indent: { left: 36, hanging: 18 }, - tabs: [{ position: 72, alignment: 'start' }], - tabIntervalTwips: 720, - numberingProperties: numbering, - }, - numbering, - docDefaults: { - defaultTabIntervalTwips: 720, - run: { fontFamily: 'Calibri', fontSize: 12 }, - }, - measurement: { - measureText: (text: string) => text.length * 6, - }, - ...overrides, - }; -}; + numberingType: 'decimal', + suffix: 'tab', + }, + markerRun: { fontFamily: 'Calibri', fontSize: 12 }, + ...overrides, +}); describe('computeWordParagraphLayout', () => { - it('computes marker layout with measurement and numbering data', () => { + it('computes marker layout with list rendering data', () => { const layout = computeWordParagraphLayout(buildInput()); expect(layout.indentLeftPx).toBe(36); + expect(layout.hangingPx).toBe(18); expect(layout.tabsPx).toEqual([72]); - expect(layout.defaultTabIntervalPx).toBe(48); + expect(layout.defaultTabIntervalPx).toBe(720); expect(layout.marker?.markerText).toBe('3.'); - expect(layout.marker?.glyphWidthPx).toBe(12); - expect(layout.marker?.markerBoxWidthPx).toBeGreaterThan(12); - expect(layout.marker?.markerX).toBeCloseTo(layout.textStartPx - (layout.marker?.markerBoxWidthPx ?? 0)); + expect(layout.marker?.justification).toBe('left'); + expect(layout.marker?.suffix).toBe('tab'); expect(layout.marker?.run.fontFamily).toBe('Calibri'); }); - it('formats roman numerals and falls back when measurement missing', () => { + it('accepts preformatted marker text and list alignment', () => { const layout = computeWordParagraphLayout( buildInput({ - numbering: { - numId: '2', - ilvl: 0, - format: 'upperRoman', - lvlText: '%1)', - suffix: 'space', - lvlJc: 'right', + listRenderingAttrs: { + markerText: 'IV)', + justification: 'right', path: [4], + numberingType: 'upperRoman', + suffix: 'space', }, - measurement: undefined, }), ); expect(layout.marker?.markerText).toBe('IV)'); - expect(layout.marker?.glyphWidthPx).toBeUndefined(); - expect(layout.marker?.markerBoxWidthPx).toBeGreaterThan(0); expect(layout.marker?.justification).toBe('right'); expect(layout.marker?.suffix).toBe('space'); }); }); -describe('resolveMarkerRunProperties', () => { - it('merges defaults with inline overrides when cache missing', () => { - const run = resolveMarkerRunProperties({ - inlineMarkerRpr: { fontFamily: 'Roboto', bold: true }, - resolvedParagraphProps: { indent: {} }, - numbering: null, - docDefaults: { run: { fontSize: 14, color: '#333333', fontFamily: 'Calibri' } }, - }); - - expect(run.fontFamily).toBe('Roboto'); - expect(run.fontSize).toBe(14); - expect(run.bold).toBe(true); - expect(run.color).toBe('#333333'); - }); -}); - describe('computeWordParagraphLayout edge cases', () => { it('handles paragraph without numbering properties', () => { const layout = computeWordParagraphLayout( @@ -94,44 +61,14 @@ describe('computeWordParagraphLayout edge cases', () => { paragraph: { indent: { left: 24 }, tabs: [], - }, - numbering: null, - }), - ); - - expect(layout.marker).toBeUndefined(); - expect(layout.indentLeftPx).toBe(24); - expect(layout.hangingPx).toBe(0); - }); - - it('handles null inputs for numbering override but uses paragraph numbering', () => { - const layout = computeWordParagraphLayout( - buildInput({ - numbering: null, - paragraph: { - indent: { left: 36, hanging: 18 }, - tabs: [], numberingProperties: null, }, }), ); - expect(layout.marker).toBeUndefined(); - }); - - it('handles undefined inputs for numbering override but uses paragraph numbering', () => { - const layout = computeWordParagraphLayout( - buildInput({ - numbering: undefined, - paragraph: { - indent: { left: 36, hanging: 18 }, - tabs: [], - numberingProperties: null, - }, - }), - ); - - expect(layout.marker).toBeUndefined(); + expect(layout.marker?.markerText).toBe('3.'); + expect(layout.indentLeftPx).toBe(24); + expect(layout.hangingPx).toBe(DEFAULT_LIST_HANGING_PX); }); it('handles negative indent values', () => { @@ -142,42 +79,40 @@ describe('computeWordParagraphLayout edge cases', () => { tabs: [], numberingProperties: null, }, - numbering: null, }), ); expect(layout.indentLeftPx).toBe(-10); - expect(layout.hangingPx).toBe(0); // hanging is clamped to >= 0 + expect(layout.hangingPx).toBe(-5); }); - it('handles both firstLine and hanging defined (firstLine takes precedence)', () => { + it('handles both firstLine and hanging defined (hanging disables firstLine mode)', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { indent: { left: 36, firstLine: 12, hanging: 18 }, tabs: [], }, - numbering: null, }), ); expect(layout.firstLinePx).toBe(12); - expect(layout.hangingPx).toBe(18); // hanging is preserved in this case + expect(layout.hangingPx).toBe(18); + expect(layout.firstLineIndentMode).toBeUndefined(); }); - it('handles negative firstLine as hanging', () => { + it('handles negative firstLine without enabling firstLine mode', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { indent: { left: 36, firstLine: -18 }, tabs: [], }, - numbering: null, }), ); expect(layout.firstLinePx).toBe(-18); - expect(layout.hangingPx).toBe(18); // converted from negative firstLine + expect(layout.firstLineIndentMode).toBeUndefined(); }); it('handles empty tabs array', () => { @@ -226,44 +161,29 @@ describe('computeWordParagraphLayout edge cases', () => { indent: { left: 0, hanging: 0 }, tabs: [], }, - numbering: null, }), ); expect(layout.indentLeftPx).toBe(0); - expect(layout.hangingPx).toBe(0); + expect(layout.hangingPx).toBe(DEFAULT_LIST_HANGING_PX); }); - it('handles undefined indent with defaults from docDefaults', () => { + it('handles undefined indent with defaults falling back to zero', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { tabs: [], numberingProperties: null, }, - numbering: null, - docDefaults: {}, }), ); - // When indent.left is undefined, the code uses ?? 0, so it becomes 0 expect(layout.indentLeftPx).toBe(0); }); - - it('handles missing measurement adapter', () => { - const layout = computeWordParagraphLayout( - buildInput({ - measurement: undefined, - }), - ); - - expect(layout.marker?.glyphWidthPx).toBeUndefined(); - expect(layout.marker?.markerBoxWidthPx).toBeGreaterThan(0); - }); }); describe('firstLineIndentMode detection and behavior', () => { - it('should detect firstLine indent pattern when firstLine > 0 and no hanging', () => { + it('detects firstLine indent pattern when firstLine > 0 and no hanging', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { @@ -278,7 +198,7 @@ describe('firstLineIndentMode detection and behavior', () => { expect(layout.hangingPx).toBe(0); }); - it('should NOT detect firstLine mode when firstLine is 0', () => { + it('does NOT detect firstLine mode when firstLine is 0', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { @@ -292,7 +212,7 @@ describe('firstLineIndentMode detection and behavior', () => { expect(layout.firstLinePx).toBe(0); }); - it('should NOT detect firstLine mode when firstLine is undefined', () => { + it('does NOT detect firstLine mode when firstLine is undefined', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { @@ -306,7 +226,7 @@ describe('firstLineIndentMode detection and behavior', () => { expect(layout.firstLinePx).toBeUndefined(); }); - it('should NOT detect firstLine mode when hanging is also defined', () => { + it('does NOT detect firstLine mode when hanging is also defined', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { @@ -321,30 +241,23 @@ describe('firstLineIndentMode detection and behavior', () => { expect(layout.hangingPx).toBe(360); }); - it('should calculate textStartPx correctly in firstLine mode', () => { + it('calculates textStartPx correctly in firstLine mode', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { indent: { left: 0, firstLine: 720 }, tabs: [], }, - measurement: { - measureText: (text: string) => text.length * 6, - }, }), ); expect(layout.firstLineIndentMode).toBe(true); expect(layout.indentLeftPx).toBe(0); expect(layout.firstLinePx).toBe(720); - - // textStartPx should be: left (0) + firstLine (720) + markerBoxWidth - // markerBoxWidth = glyphWidthPx (12) + LIST_MARKER_GAP (8) = 20 - expect(layout.textStartPx).toBe(740); // 0 + 720 + 20 - expect(layout.marker?.markerX).toBe(720); // left (0) + firstLine (720) + expect(layout.textStartPx).toBe(720 + DEFAULT_LIST_HANGING_PX); }); - it('should handle negative firstLine as hanging (not firstLine mode)', () => { + it('handles negative firstLine without enabling firstLine mode', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { @@ -356,10 +269,9 @@ describe('firstLineIndentMode detection and behavior', () => { expect(layout.firstLineIndentMode).toBeUndefined(); expect(layout.firstLinePx).toBe(-360); - expect(layout.hangingPx).toBe(360); // converted from negative firstLine }); - it('should handle very small positive firstLine correctly', () => { + it('handles very small positive firstLine correctly', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { @@ -373,42 +285,45 @@ describe('firstLineIndentMode detection and behavior', () => { expect(layout.firstLinePx).toBe(1); }); - it('should handle NaN firstLine gracefully (not detected as firstLine mode)', () => { + it('handles NaN firstLine gracefully (not detected as firstLine mode)', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { - indent: { left: 360, firstLine: NaN }, + indent: { left: 360, firstLine: Number.NaN }, tabs: [], }, }), ); expect(layout.firstLineIndentMode).toBeUndefined(); + expect(Number.isNaN(layout.firstLinePx)).toBe(true); }); - it('should handle Infinity firstLine gracefully (not detected as firstLine mode)', () => { + it('handles Infinity firstLine gracefully (not detected as firstLine mode)', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { - indent: { left: 360, firstLine: Infinity }, + indent: { left: 360, firstLine: Number.POSITIVE_INFINITY }, tabs: [], }, }), ); expect(layout.firstLineIndentMode).toBeUndefined(); + expect(layout.firstLinePx).toBe(Number.POSITIVE_INFINITY); }); - it('should handle -Infinity firstLine gracefully (not detected as firstLine mode)', () => { + it('handles -Infinity firstLine gracefully (not detected as firstLine mode)', () => { const layout = computeWordParagraphLayout( buildInput({ paragraph: { - indent: { left: 360, firstLine: -Infinity }, + indent: { left: 360, firstLine: Number.NEGATIVE_INFINITY }, tabs: [], }, }), ); expect(layout.firstLineIndentMode).toBeUndefined(); + expect(layout.firstLinePx).toBe(Number.NEGATIVE_INFINITY); }); }); From 869caf65b28c2eed70f698e013cf01d0cb2a049d Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 11:21:09 -0300 Subject: [PATCH 61/85] fix: consider table style in style resolution --- .../pm-adapter/src/attributes/paragraph.ts | 9 ++++++-- .../pm-adapter/src/converter-context.ts | 2 +- .../pm-adapter/src/converters/paragraph.ts | 2 +- .../pm-adapter/src/converters/table.ts | 22 +++++++++---------- .../style-engine/src/ooxml/index.ts | 12 +++++++--- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts index f7bd0007e..3f4cd8622 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts @@ -189,7 +189,7 @@ const extractDropCapRunFromParagraph = (para: PMNode, converterContext?: Convert const runProperties = (firstRun.attrs?.runProperties ?? {}) as RunProperties; let resolvedRunProperties; if (converterContext) { - resolvedRunProperties = resolveRunProperties(converterContext, runProperties, {}, false, false); + resolvedRunProperties = resolveRunProperties(converterContext, runProperties, {}, null, false, false); } else { resolvedRunProperties = runProperties as RunProperties; } @@ -229,7 +229,11 @@ export const computeParagraphAttrs = ( if (!converterContext) { resolvedParagraphProperties = paragraphProperties; } else { - resolvedParagraphProperties = resolveParagraphProperties(converterContext, paragraphProperties); + resolvedParagraphProperties = resolveParagraphProperties( + converterContext, + paragraphProperties, + converterContext.tableStyleId, + ); } const normalizedSpacing = normalizeParagraphSpacing(resolvedParagraphProperties.spacing); @@ -276,6 +280,7 @@ export const computeParagraphAttrs = ( converterContext!, resolvedParagraphProperties.runProperties, resolvedParagraphProperties, + converterContext!.tableStyleId, true, Boolean(paragraphProperties.numberingProperties), ); diff --git a/packages/layout-engine/pm-adapter/src/converter-context.ts b/packages/layout-engine/pm-adapter/src/converter-context.ts index 86d9aa737..bc139b784 100644 --- a/packages/layout-engine/pm-adapter/src/converter-context.ts +++ b/packages/layout-engine/pm-adapter/src/converter-context.ts @@ -52,7 +52,7 @@ export type ConverterContext = { * * Style cascade: docDefaults → tableStyleParagraphProps → paragraph style → direct formatting */ - tableStyleParagraphProps?: TableStyleParagraphProps; + tableStyleId?: string; /** * Background color of the containing table cell (hex format, e.g., "#342D8C"). * Used for auto text color resolution - text without explicit color should diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index e12c5ad40..b7ab29aee 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -43,7 +43,6 @@ import { import { textNodeToRun, tabNodeToRun, tokenNodeToRun } from './text-run.js'; import { contentBlockNodeToDrawingBlock } from './content-block.js'; import { DEFAULT_HYPERLINK_CONFIG, TOKEN_INLINE_TYPES } from '../constants.js'; -import { extractRunStyleId } from '../styles/linked-run.js'; import { ptToPx, pickNumber, isPlainObject, twipsToPx } from '../utilities.js'; import { computeRunAttrs } from '../attributes/paragraph.js'; import { resolveRunProperties } from '@superdoc/style-engine/ooxml'; @@ -899,6 +898,7 @@ export function paragraphToFlowBlocks( converterContext!, runProperties, resolvedParagraphProperties, + converterContext!.tableStyleId, false, false, ); diff --git a/packages/layout-engine/pm-adapter/src/converters/table.ts b/packages/layout-engine/pm-adapter/src/converters/table.ts index f05989561..292741bf9 100644 --- a/packages/layout-engine/pm-adapter/src/converters/table.ts +++ b/packages/layout-engine/pm-adapter/src/converters/table.ts @@ -78,8 +78,7 @@ type ParseTableCellArgs = { cellIndex: number; context: TableParserDependencies; defaultCellPadding?: BoxSpacing; - /** Table style paragraph props to pass to paragraph converter for style cascade */ - tableStyleParagraphProps?: import('../converter-context.js').TableStyleParagraphProps; + tableStyleId?: string; }; type ParseTableRowArgs = { @@ -87,8 +86,8 @@ type ParseTableRowArgs = { rowIndex: number; context: TableParserDependencies; defaultCellPadding?: BoxSpacing; - /** Table style paragraph props to pass to paragraph converter for style cascade */ - tableStyleParagraphProps?: import('../converter-context.js').TableStyleParagraphProps; + /** Table style to pass to paragraph converter for style cascade */ + tableStyleId?: string; }; const isTableRowNode = (node: PMNode): boolean => node.type === 'tableRow' || node.type === 'table_row'; @@ -191,7 +190,7 @@ const normalizeRowHeight = (rowProps?: Record): NormalizedRowHe * // Returns: null */ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { - const { cellNode, rowIndex, cellIndex, context, defaultCellPadding, tableStyleParagraphProps } = args; + const { cellNode, rowIndex, cellIndex, context, defaultCellPadding, tableStyleId } = args; if (!isTableCellNode(cellNode) || !Array.isArray(cellNode.content)) { return null; } @@ -218,10 +217,10 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { // This allows paragraphs inside table cells to inherit table style's pPr // Also includes backgroundColor for auto text color resolution const cellConverterContext: ConverterContext | undefined = - tableStyleParagraphProps || cellBackgroundColor + tableStyleId || cellBackgroundColor ? ({ ...context.converterContext, - ...(tableStyleParagraphProps && { tableStyleParagraphProps }), + ...(tableStyleId && { tableStyleId }), ...(cellBackgroundColor && { backgroundColor: cellBackgroundColor }), } as ConverterContext) : context.converterContext; @@ -476,7 +475,7 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { * @param args.rowIndex - Zero-based row index for ID generation * @param args.context - Parser dependencies (block ID generator, converters, style context) * @param args.defaultCellPadding - Optional default padding from table style to pass to cells - * @param args.tableStyleParagraphProps - Optional paragraph properties from table style for cascade + * @param args.tableStyleId - Optional table style ID for paragraph style cascade in cells * @returns TableRow object with cells and attributes, or null if the row contains no valid cells * * @example @@ -498,7 +497,7 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { * // Returns: null */ const parseTableRow = (args: ParseTableRowArgs): TableRow | null => { - const { rowNode, rowIndex, context, defaultCellPadding, tableStyleParagraphProps } = args; + const { rowNode, rowIndex, context, defaultCellPadding, tableStyleId } = args; if (!isTableRowNode(rowNode) || !Array.isArray(rowNode.content)) { return null; } @@ -511,7 +510,7 @@ const parseTableRow = (args: ParseTableRowArgs): TableRow | null => { cellIndex, context, defaultCellPadding, - tableStyleParagraphProps, + tableStyleId, }); if (parsedCell) { cells.push(parsedCell); @@ -725,7 +724,6 @@ export function tableNodeToBlock( const hydratedTableStyle = hydrateTableStyleAttrs(node, converterContext); const defaultCellPadding = hydratedTableStyle?.cellPadding; - const tableStyleParagraphProps = hydratedTableStyle?.paragraphProps; const rows: TableRow[] = []; node.content.forEach((rowNode, rowIndex) => { @@ -734,7 +732,7 @@ export function tableNodeToBlock( rowIndex, context: parserDeps, defaultCellPadding, - tableStyleParagraphProps, + tableStyleId: (node.attrs?.tableProperties as { tableStyleId?: string })?.tableStyleId, }); if (parsedRow) { rows.push(parsedRow); diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index fcaa08c67..f45ca0da7 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -31,6 +31,7 @@ export function resolveRunProperties( params: OoxmlResolverParams, inlineRpr: RunProperties | null | undefined, resolvedPpr: ParagraphProperties | null | undefined, + tableStyleId: string | null = null, isListNumber = false, numberingDefinedInline = false, ): RunProperties { @@ -50,6 +51,11 @@ export function resolveRunProperties( const normalProps = (normalStyleDef?.runProperties ?? {}) as RunProperties; const isNormalDefault = normalStyleDef?.default ?? false; + // Getting table style run properties + const tableStyleProps = ( + tableStyleId ? resolveStyleChain('runProperties', params, tableStyleId) : {} + ) as RunProperties; + // Get run properties from direct character style, unless it's inside a TOC paragraph style let runStyleProps = {} as RunProperties; if (!paragraphStyleId?.startsWith('TOC')) { @@ -79,9 +85,9 @@ export function resolveRunProperties( delete inlineRpr.underline; } - styleChain = [...defaultsChain, paragraphStyleProps, runStyleProps, inlineRpr, numberingProps]; + styleChain = [...defaultsChain, tableStyleProps, paragraphStyleProps, runStyleProps, inlineRpr, numberingProps]; } else { - styleChain = [...defaultsChain, paragraphStyleProps, runStyleProps, inlineRpr]; + styleChain = [...defaultsChain, tableStyleProps, paragraphStyleProps, runStyleProps, inlineRpr]; } const finalProps = combineRunProperties(styleChain); @@ -279,7 +285,7 @@ export function resolveDocxFontFamily( const ascii = (attributes['w:ascii'] ?? attributes['ascii'] ?? attributes['eastAsia']) as string | undefined; let themeAscii = (attributes['w:asciiTheme'] ?? attributes['asciiTheme']) as string | undefined; - if (!ascii && attributes.hint === 'default') { + if ((!ascii && attributes.hint === 'default') || (!ascii && !themeAscii)) { themeAscii = 'major'; } From 639ca224c4470ddc48fb75a5cb0b74bf239239fd Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 11:52:47 -0300 Subject: [PATCH 62/85] test: add tests for style resolution --- .../style-engine/src/ooxml/index.test.ts | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/packages/layout-engine/style-engine/src/ooxml/index.test.ts b/packages/layout-engine/style-engine/src/ooxml/index.test.ts index 07f91d3b4..bddf90d41 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.test.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.test.ts @@ -136,6 +136,62 @@ describe('ooxml - resolveRunProperties', () => { const result = resolveRunProperties(params, null, null); expect(result).toHaveProperty('fontSize', 22); }); + + it('prefers defaults over Normal when Normal is not default', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + docDefaults: { runProperties: { fontSize: 20, color: { val: 'AAAAAA' } } }, + styles: { + Normal: { default: false, runProperties: { fontSize: 22, color: { val: 'BBBBBB' } } }, + }, + }, + }); + const result = resolveRunProperties(params, null, null); + expect(result).toEqual({ fontSize: 20, color: { val: 'AAAAAA' } }); + }); + + it('skips run style props for TOC paragraphs', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + styles: { + TOC1: { runProperties: { bold: true } }, + Emphasis: { runProperties: { italic: true } }, + }, + }, + }); + const result = resolveRunProperties(params, { styleId: 'Emphasis', color: { val: 'FF0000' } }, { styleId: 'TOC1' }); + expect(result.bold).toBe(true); + expect(result.italic).toBeUndefined(); + expect(result.color).toEqual({ val: 'FF0000' }); + }); + + it('ignores inline rPr for list numbers when numbering is not inline', () => { + const params = buildParams({ + translatedNumbering: { + definitions: { '1': { abstractNumId: 10 } }, + abstracts: { + '10': { + levels: { + '0': { runProperties: { bold: false, color: { val: '00FF00' } } }, + }, + }, + }, + }, + }); + const result = resolveRunProperties( + params, + { underline: { val: 'single' }, bold: true }, + { numberingProperties: { numId: 1, ilvl: 0 } }, + null, + true, + false, + ); + expect(result.bold).toBe(false); + expect(result.underline).toBeUndefined(); + expect(result.color).toEqual({ val: '00FF00' }); + }); }); describe('ooxml - resolveParagraphProperties', () => { @@ -153,4 +209,72 @@ describe('ooxml - resolveParagraphProperties', () => { const result = resolveParagraphProperties(params, inlineProps); expect(result.spacing).toEqual({ before: 480, after: 120 }); }); + + it('lets numbering override style indent when numbering is defined inline', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + styles: { + ListStyle: { paragraphProperties: { indent: { left: 1200 } } }, + }, + }, + translatedNumbering: { + definitions: { '1': { abstractNumId: 10 } }, + abstracts: { + '10': { + levels: { + '0': { paragraphProperties: { indent: { left: 720 } } }, + }, + }, + }, + }, + }); + const result = resolveParagraphProperties(params, { + styleId: 'ListStyle', + numberingProperties: { numId: 1, ilvl: 0 }, + }); + expect(result.indent?.left).toBe(720); + }); + + it('uses numbering style but ignores basedOn chain for indentation', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + styles: { + BaseStyle: { paragraphProperties: { indent: { left: 2000 } } }, + NumberedStyle: { + basedOn: 'BaseStyle', + paragraphProperties: { numberingProperties: { numId: 1, ilvl: 0 } }, + }, + }, + }, + translatedNumbering: { + definitions: { '1': { abstractNumId: 10 } }, + abstracts: { + '10': { + levels: { + '0': { paragraphProperties: { indent: { left: 800 } }, styleId: 'NumberedStyle' }, + }, + }, + }, + }, + }); + const inlineProps = { numberingProperties: { numId: 1, ilvl: 0 } }; + const result = resolveParagraphProperties(params, inlineProps); + expect(result.indent?.left).toBe(800); + }); + + it('overrides tabStops across the cascade', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + docDefaults: { paragraphProperties: { tabStops: [{ pos: 720 }] } }, + styles: { + Normal: { default: true, paragraphProperties: { tabStops: [{ pos: 1440 }] } }, + }, + }, + }); + const result = resolveParagraphProperties(params, { tabStops: [{ pos: 2160 }] }); + expect(result.tabStops).toEqual([{ pos: 2160 }]); + }); }); From 0086c2249bf26fa91a7701c4c682f0e9e8b4217b Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 14:07:56 -0300 Subject: [PATCH 63/85] fix: changes after rebase --- .../pm-adapter/src/attributes/spacing-indent.ts | 2 +- .../pm-adapter/src/converters/paragraph.ts | 12 ++++-------- .../layout-engine/pm-adapter/src/converters/table.ts | 6 ++---- .../pm-adapter/src/sdt/document-index.ts | 4 ---- .../core/super-converter/v2/importer/docxImporter.js | 3 --- 5 files changed, 7 insertions(+), 20 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts index 16a31cca3..56492f5ae 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts @@ -111,7 +111,7 @@ export const normalizeParagraphSpacing = (value: OoxmlParagraphSpacing | undefin if (before != null) spacing.before = twipsToPx(before); if (after != null) spacing.after = twipsToPx(after); if (line != null) spacing.line = line; - if (resolvedLineRule) spacing.lineRule = resolvedLineRule; + if (lineRule != null) spacing.lineRule = lineRule; if (beforeAutospacing != null) spacing.beforeAutospacing = beforeAutospacing; if (afterAutospacing != null) spacing.afterAutospacing = afterAutospacing; diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index b7ab29aee..6487d189e 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -129,7 +129,7 @@ export function isInlineImage(node: PMNode): boolean { const isNodeHidden = (node: PMNode): boolean => { const attrs = (node.attrs ?? {}) as Record; - if (toBoolean(attrs.hidden) === true) return true; + if (attrs.hidden === true) return true; return typeof attrs.visibility === 'string' && attrs.visibility.toLowerCase() === 'hidden'; }; @@ -732,9 +732,7 @@ export function paragraphToFlowBlocks( emptyRun.pmStart = paraPos.start + 1; emptyRun.pmEnd = paraPos.start + 1; } - applyBaseRunDefaults(emptyRun, baseRunDefaults, defaultFont, defaultSize); - applyParagraphMarkRunProps(emptyRun, paragraphProps, converterContext); - let emptyParagraphAttrs = cloneParagraphAttrs(paragraphAttrs); + let emptyParagraphAttrs = deepClone(paragraphAttrs); if (isSectPrMarker) { if (emptyParagraphAttrs) { emptyParagraphAttrs.sectPrMarker = true; @@ -828,7 +826,7 @@ export function paragraphToFlowBlocks( const displayId = resolveFootnoteDisplayNumber(id) ?? id ?? '*'; const displayText = toSuperscriptDigits(displayId); - const run = textNodeToRun( + let run = textNodeToRun( { type: 'text', text: displayText } as PMNode, positions, defaultFont, @@ -838,9 +836,7 @@ export function paragraphToFlowBlocks( hyperlinkConfig, themeColors, ); - const inlineStyleId = getInlineStyleId(mergedMarks); - applyRunStyles(run, inlineStyleId, activeRunStyleId); - applyBaseRunDefaults(run, baseRunDefaults, defaultFont, defaultSize); + run = applyInlineRunProperties(run, activeRunProperties); applyMarksToRun(run, mergedMarks, hyperlinkConfig, themeColors); // Copy PM positions from the parent footnoteReference node diff --git a/packages/layout-engine/pm-adapter/src/converters/table.ts b/packages/layout-engine/pm-adapter/src/converters/table.ts index 292741bf9..e584c0804 100644 --- a/packages/layout-engine/pm-adapter/src/converters/table.ts +++ b/packages/layout-engine/pm-adapter/src/converters/table.ts @@ -227,7 +227,6 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { const paragraphToFlowBlocks = context.converters?.paragraphToFlowBlocks ?? context.paragraphToFlowBlocks; const tableNodeToBlock = context.converters?.tableNodeToBlock; - const listCounterContext = context.listCounterContext; /** * Appends converted paragraph blocks to the cell's blocks array. @@ -287,7 +286,6 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { context.defaultFont, context.defaultSize, context.styleContext, - listCounterContext, context.trackedChanges, context.bookmarks, context.hyperlinkConfig, @@ -311,7 +309,7 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { context.themeColors, paragraphToFlowBlocks, context.converterContext, - { listCounterContext, converters: context.converters }, + { converters: context.converters }, ); if (tableBlock && tableBlock.kind === 'table') { applySdtMetadataToTableBlock(tableBlock, structuredContentMetadata); @@ -337,7 +335,7 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { context.themeColors, paragraphToFlowBlocks, context.converterContext, - { listCounterContext, converters: context.converters }, + { converters: context.converters }, ); if (tableBlock && tableBlock.kind === 'table') { blocks.push(tableBlock); diff --git a/packages/layout-engine/pm-adapter/src/sdt/document-index.ts b/packages/layout-engine/pm-adapter/src/sdt/document-index.ts index 74ecaff7c..41dfcebbc 100644 --- a/packages/layout-engine/pm-adapter/src/sdt/document-index.ts +++ b/packages/layout-engine/pm-adapter/src/sdt/document-index.ts @@ -48,7 +48,6 @@ export function handleIndexNode(node: PMNode, context: NodeHandlerContext): void defaultFont, defaultSize, styleContext, - listCounterContext, trackedChangesConfig, bookmarks, hyperlinkConfig, @@ -61,8 +60,6 @@ export function handleIndexNode(node: PMNode, context: NodeHandlerContext): void return; } - const { getListCounter, incrementListCounter, resetListCounter } = listCounterContext; - children.forEach((child) => { if (child.type !== 'paragraph') { return; @@ -89,7 +86,6 @@ export function handleIndexNode(node: PMNode, context: NodeHandlerContext): void defaultFont, defaultSize, styleContext, - { getListCounter, incrementListCounter, resetListCounter }, trackedChangesConfig, bookmarks, hyperlinkConfig, diff --git a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js index 294b048df..134e3919c 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js @@ -176,9 +176,6 @@ export const createDocumentJson = (docx, converter, editor) => { }, }; - const translatedLinkedStyles = translateStyleDefinitions(docx); - const translatedNumbering = translateNumberingDefinitions(docx); - return { pmDoc: result, savedTagsToRestore: node, From c5c2d7dc1dd6e13af883410a671994c51f23dd51 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 14:52:05 -0300 Subject: [PATCH 64/85] fix: before and after auto spacing --- .../pm-adapter/src/attributes/paragraph.ts | 5 ++++- .../pm-adapter/src/attributes/spacing-indent.ts | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts index 3f4cd8622..2974319fe 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts @@ -236,7 +236,10 @@ export const computeParagraphAttrs = ( ); } - const normalizedSpacing = normalizeParagraphSpacing(resolvedParagraphProperties.spacing); + const normalizedSpacing = normalizeParagraphSpacing( + resolvedParagraphProperties.spacing, + Boolean(resolvedParagraphProperties.numberingProperties), + ); const normalizedIndent = normalizeIndentTwipsToPx(resolvedParagraphProperties.indent as ParagraphIndent); const normalizedTabStops = normalizeOoxmlTabs(resolvedParagraphProperties.tabStops); const normalizedAlignment = normalizeAlignment(resolvedParagraphProperties.justification); diff --git a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts index 56492f5ae..81ee80b1e 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/spacing-indent.ts @@ -95,17 +95,27 @@ export const normalizeAlignment = (value: unknown): ParagraphAttrs['alignment'] * // { before: 16, line: 32, lineRule: 'exact' } (line converted from twips) * ``` */ -export const normalizeParagraphSpacing = (value: OoxmlParagraphSpacing | undefined): ParagraphSpacing | undefined => { +export const normalizeParagraphSpacing = ( + value: OoxmlParagraphSpacing | undefined, + isList: boolean, +): ParagraphSpacing | undefined => { if (!value || typeof value !== 'object') return undefined; const spacing: ParagraphSpacing = {}; - const before = pickNumber(value.before); - const after = pickNumber(value.after); + let before = pickNumber(value.before); + let after = pickNumber(value.after); const lineRaw = pickNumber(value.line); const lineRule = normalizeLineRule(value.lineRule); const beforeAutospacing = value.beforeAutospacing; const afterAutospacing = value.afterAutospacing; + if (beforeAutospacing && isList) { + before = undefined; + } + if (afterAutospacing && isList) { + after = undefined; + } + const line = normalizeLineValue(lineRaw, lineRule); if (before != null) spacing.before = twipsToPx(before); From 777aebc4f33ac13d2a01d51837d22bc441ba31ff Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 16:36:21 -0300 Subject: [PATCH 65/85] fix: support w:numStyleLink in style resolution --- packages/layout-engine/style-engine/src/ooxml/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index f45ca0da7..4a6420d7b 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -251,7 +251,7 @@ export function getNumberingProperties( const listDefinitionForThisNumId = abstracts[String(abstractNumId)]; if (!listDefinitionForThisNumId) return {} as T; - const numStyleLinkId = listDefinitionForThisNumId.styleLink; + const numStyleLinkId = listDefinitionForThisNumId.numStyleLink ?? listDefinitionForThisNumId.styleLink; if (numStyleLinkId && tries < 1) { const styleDef = params.translatedLinkedStyles?.styles?.[numStyleLinkId]; From 793438a2e5c9cbeb1477a09a2af5911b9109158b Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 16:37:00 -0300 Subject: [PATCH 66/85] fix: dropCap normalization --- .../pm-adapter/src/attributes/paragraph.ts | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts index 2974319fe..627e40a56 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts @@ -110,14 +110,21 @@ export const normalizeFramePr = (value: ParagraphFrameProperties | undefined): P return Object.keys(frame).length > 0 ? (frame as ParagraphFrame) : undefined; }; +export const normalizeNumberingProperties = ( + value: ParagraphProperties['numberingProperties'] | undefined, +): ParagraphProperties['numberingProperties'] | undefined => { + if (value?.numId === 0) { + return undefined; + } + return value; +}; export const normalizeDropCap = ( framePr: ParagraphFrameProperties | undefined, para: PMNode, converterContext?: ConverterContext, ): DropCapDescriptor | undefined => { - if (!framePr) return undefined; + if (!framePr || !framePr.dropCap || framePr.dropCap === 'none') return undefined; - // Keep the legacy dropCap flag for backward compatibility const dropCap = framePr.dropCap; // Build structured DropCapDescriptor for enhanced drop cap support @@ -249,6 +256,7 @@ export const computeParagraphAttrs = ( const tabIntervalTwips = DEFAULT_TAB_INTERVAL_TWIPS; const normalizedFramePr = normalizeFramePr(resolvedParagraphProperties.framePr); const floatAlignment = normalizedFramePr?.xAlign; + const normalizedNumberingProperties = normalizeNumberingProperties(resolvedParagraphProperties.numberingProperties); const dropCapDescriptor = normalizeDropCap(resolvedParagraphProperties.framePr, para, converterContext); const normalizedListRendering = attrs.listRendering as { markerText: string; @@ -266,7 +274,7 @@ export const computeParagraphAttrs = ( indent: normalizedIndent, dropCapDescriptor: dropCapDescriptor, frame: normalizedFramePr, - numberingProperties: resolvedParagraphProperties.numberingProperties, + numberingProperties: normalizedNumberingProperties, borders: normalizedBorders, shading: normalizedShading, tabs: normalizedTabStops, @@ -278,7 +286,7 @@ export const computeParagraphAttrs = ( pageBreakBefore: resolvedParagraphProperties.pageBreakBefore, }; - if (resolvedParagraphProperties.numberingProperties && normalizedListRendering) { + if (normalizedNumberingProperties && normalizedListRendering) { const markerRunProperties = resolveRunProperties( converterContext!, resolvedParagraphProperties.runProperties, @@ -316,10 +324,11 @@ export const computeRunAttrs = ( fontSize: runProps.fontSize ? ptToPx(runProps.fontSize / 2)! : defaultFontSizePx, bold: runProps.bold, italic: runProps.italic, - underline: runProps.underline && { - style: (runProps.underline!['w:val'] as 'single' | 'double' | 'dotted' | 'dashed' | 'wavy') || 'single', - color: runProps.underline!['w:color'] || undefined, - }, + underline: runProps.underline && + runProps.underline!['w:val'] && { + style: (runProps.underline!['w:val'] as 'single' | 'double' | 'dotted' | 'dashed' | 'wavy') || 'single', + color: runProps.underline!['w:color'] || undefined, + }, strike: runProps.strike, color: normalizeColor(runProps.color?.val), highlight: runProps.highlight?.['w:val'] || undefined, From 68820c0534e028002da7be8485cff16b16975acf Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 16:59:55 -0300 Subject: [PATCH 67/85] fix: pm-adapter build --- packages/layout-engine/pm-adapter/package.json | 3 ++- pnpm-lock.yaml | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/layout-engine/pm-adapter/package.json b/packages/layout-engine/pm-adapter/package.json index 5b4690c3a..788e40a68 100644 --- a/packages/layout-engine/pm-adapter/package.json +++ b/packages/layout-engine/pm-adapter/package.json @@ -38,6 +38,7 @@ "@superdoc/measuring-dom": "workspace:*", "@superdoc/style-engine": "workspace:*", "@superdoc/word-layout": "workspace:*", - "@superdoc/url-validation": "workspace:*" + "@superdoc/url-validation": "workspace:*", + "@superdoc/font-utils": "workspace:*" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f6eed3029..88de72e54 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -605,6 +605,9 @@ importers: '@superdoc/contracts': specifier: workspace:* version: link:../contracts + '@superdoc/font-utils': + specifier: workspace:* + version: link:../../../shared/font-utils '@superdoc/locale-utils': specifier: workspace:* version: link:../../../shared/locale-utils From 3892b437c630f12befc45431cdca6952d1b43354 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 17:14:28 -0300 Subject: [PATCH 68/85] fix: handle missing docDefaults --- packages/layout-engine/style-engine/src/ooxml/index.ts | 2 +- packages/layout-engine/style-engine/src/ooxml/styles-types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index 4a6420d7b..c636aaf4d 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -46,7 +46,7 @@ export function resolveRunProperties( const paragraphStyleProps = resolveStyleChain('runProperties', params, paragraphStyleId) as RunProperties; // Getting default properties and normal style properties - const defaultProps = params.translatedLinkedStyles.docDefaults.runProperties ?? {}; + const defaultProps = params.translatedLinkedStyles.docDefaults?.runProperties ?? {}; const normalStyleDef = params.translatedLinkedStyles.styles['Normal']; const normalProps = (normalStyleDef?.runProperties ?? {}) as RunProperties; const isNormalDefault = normalStyleDef?.default ?? false; diff --git a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts index d1e3d061a..cacadab81 100644 --- a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts +++ b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts @@ -11,7 +11,7 @@ import type { */ export interface StylesDocumentProperties { /** Default run and paragraph properties for the document. */ - docDefaults: DocDefaults; + docDefaults: DocDefaults | undefined; /** Latent style definitions and defaults. */ latentStyles: LatentStyles; /** Styles keyed by styleId. */ From 1f93d3c2b3122f51a27642491801dd679c5edde4 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Mon, 19 Jan 2026 17:35:34 -0300 Subject: [PATCH 69/85] test: adjust existing tests --- .../tests/src/section-refs-merging.test.ts | 4 +-- .../permission-ranges.test.js | 9 +++++- .../import-export/footnotes-roundtrip.test.js | 18 +++++++++++ .../src/tests/import/docxImporter.test.js | 30 ++++++++++++++++++- .../tests/import/footnotesImporter.test.js | 15 ++++++++++ 5 files changed, 72 insertions(+), 4 deletions(-) diff --git a/packages/layout-engine/tests/src/section-refs-merging.test.ts b/packages/layout-engine/tests/src/section-refs-merging.test.ts index 646b9f9b8..83f1b6762 100644 --- a/packages/layout-engine/tests/src/section-refs-merging.test.ts +++ b/packages/layout-engine/tests/src/section-refs-merging.test.ts @@ -16,7 +16,7 @@ import type { PMNode, FlowBlock, SectionBreakBlock } from '@superdoc/contracts'; import { toFlowBlocks } from '@superdoc/pm-adapter'; import { layoutDocument } from '@superdoc/layout-engine'; import { measureBlock } from '@superdoc/measuring-dom'; -import { resetBlockIdCounter, PAGE_SIZES } from './test-helpers/section-test-utils.js'; +import { DEFAULT_CONVERTER_CONTEXT, resetBlockIdCounter, PAGE_SIZES } from './test-helpers/section-test-utils.js'; /** * Header/footer ref types for testing. @@ -233,7 +233,7 @@ function createPMDocWithSectionRefs( * Convert PM doc to flow blocks with section breaks enabled. */ function pmToFlowBlocks(pmDoc: PMNode): { blocks: FlowBlock[]; bookmarks: Map } { - return toFlowBlocks(pmDoc, { emitSectionBreaks: true }); + return toFlowBlocks(pmDoc, { emitSectionBreaks: true, converterContext: DEFAULT_CONVERTER_CONTEXT }); } /** diff --git a/packages/super-editor/src/extensions/permission-ranges/permission-ranges.test.js b/packages/super-editor/src/extensions/permission-ranges/permission-ranges.test.js index 0c3966c92..8c5e47229 100644 --- a/packages/super-editor/src/extensions/permission-ranges/permission-ranges.test.js +++ b/packages/super-editor/src/extensions/permission-ranges/permission-ranges.test.js @@ -2,7 +2,9 @@ import { describe, it, expect, vi, afterEach, beforeEach } from 'vitest'; import { TextSelection } from 'prosemirror-state'; import { Editor } from '@core/index.js'; +import { SuperConverter } from '@core/super-converter/SuperConverter.js'; import { getStarterExtensions } from '@extensions/index.js'; +import { getMinimalTranslatedLinkedStyles } from '@tests/helpers/helpers.js'; const VIEWING_MODE = 'viewing'; @@ -83,11 +85,16 @@ describe('PermissionRanges extension', () => { }); const createEditor = (content, extraOptions = {}) => { + const converter = new SuperConverter(); + converter.translatedLinkedStyles = getMinimalTranslatedLinkedStyles(); + converter.translatedNumbering = { abstracts: {}, definitions: {} }; + editor = new Editor({ extensions: getStarterExtensions(), - jsonOverride: content, + content, loadFromSchema: true, documentMode: VIEWING_MODE, + converter, ...extraOptions, }); return editor; diff --git a/packages/super-editor/src/tests/import-export/footnotes-roundtrip.test.js b/packages/super-editor/src/tests/import-export/footnotes-roundtrip.test.js index 9e541d0f0..cfae5025f 100644 --- a/packages/super-editor/src/tests/import-export/footnotes-roundtrip.test.js +++ b/packages/super-editor/src/tests/import-export/footnotes-roundtrip.test.js @@ -12,6 +12,20 @@ import { carbonCopy } from '@core/utilities/carbonCopy.js'; const __dirname = dirname(fileURLToPath(import.meta.url)); const DOCX_FIXTURE_NAME = 'basic-footnotes.docx'; +const minimalStylesXml = parseXmlToJson( + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '', +); // ============================================ // Helper Functions @@ -566,6 +580,7 @@ describe('customMarkFollows attribute', () => { const docx = { 'word/document.xml': documentXml, 'word/footnotes.xml': footnotesXml, + 'word/styles.xml': minimalStylesXml, }; // Import using createDocumentJson @@ -617,6 +632,7 @@ describe('w:footnotePr properties', () => { const docx = { 'word/document.xml': documentXml, 'word/settings.xml': settingsXml, + 'word/styles.xml': minimalStylesXml, }; const { createDocumentJson } = await import('@converter/v2/importer/docxImporter.js'); @@ -648,6 +664,7 @@ describe('w:footnotePr properties', () => { const docx = { 'word/document.xml': documentXml, + 'word/styles.xml': minimalStylesXml, }; const { createDocumentJson } = await import('@converter/v2/importer/docxImporter.js'); @@ -681,6 +698,7 @@ describe('w:footnotePr properties', () => { const docx = { 'word/document.xml': documentXml, 'word/settings.xml': settingsXml, + 'word/styles.xml': minimalStylesXml, }; const { createDocumentJson } = await import('@converter/v2/importer/docxImporter.js'); diff --git a/packages/super-editor/src/tests/import/docxImporter.test.js b/packages/super-editor/src/tests/import/docxImporter.test.js index 088b4680f..13015c6ff 100644 --- a/packages/super-editor/src/tests/import/docxImporter.test.js +++ b/packages/super-editor/src/tests/import/docxImporter.test.js @@ -5,6 +5,20 @@ import { parseXmlToJson } from '@converter/v2/docxHelper.js'; import { getTestDataByFileName } from '@tests/helpers/helpers.js'; import { extractParagraphText } from '@tests/helpers/getParagraphText.js'; +const minimalStylesXml = + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''; + describe('addDefaultStylesIfMissing', () => { const styles = { declaration: { @@ -53,6 +67,7 @@ describe('createDocumentJson', () => { const docx = { 'word/document.xml': parseXmlToJson(simpleDocXml), + 'word/styles.xml': parseXmlToJson(minimalStylesXml), }; const converter = { @@ -150,6 +165,7 @@ describe('createDocumentJson', () => { const docx = { 'word/document.xml': parseXmlToJson(simpleDocXml), + 'word/styles.xml': parseXmlToJson(minimalStylesXml), }; const converter = { @@ -206,7 +222,19 @@ describe('createDocumentJson', () => { const docXml = 'Hello world'; const stylesXml = - ''; + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''; const docx = { 'word/document.xml': parseXmlToJson(docXml), diff --git a/packages/super-editor/src/tests/import/footnotesImporter.test.js b/packages/super-editor/src/tests/import/footnotesImporter.test.js index ac1c8152a..90fffdc7e 100644 --- a/packages/super-editor/src/tests/import/footnotesImporter.test.js +++ b/packages/super-editor/src/tests/import/footnotesImporter.test.js @@ -2,6 +2,20 @@ import { describe, expect, it } from 'vitest'; import { createDocumentJson } from '@core/super-converter/v2/importer/docxImporter'; import { parseXmlToJson } from '@converter/v2/docxHelper.js'; +const minimalStylesXml = + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''; + const collectNodeTypes = (node, types = []) => { if (!node) return types; if (typeof node.type === 'string') types.push(node.type); @@ -48,6 +62,7 @@ describe('footnotes import', () => { const docx = { 'word/document.xml': parseXmlToJson(documentXml), 'word/footnotes.xml': parseXmlToJson(footnotesXml), + 'word/styles.xml': parseXmlToJson(minimalStylesXml), }; const converter = { headers: {}, footers: {}, headerIds: {}, footerIds: {}, docHiglightColors: new Set() }; From 11dc076b4edfd9a4d101995917023f7358ea19e3 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Tue, 20 Jan 2026 10:41:14 -0300 Subject: [PATCH 70/85] fix: font resolution --- packages/layout-engine/style-engine/src/cascade.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/layout-engine/style-engine/src/cascade.ts b/packages/layout-engine/style-engine/src/cascade.ts index ad42e429c..8fdc5bcac 100644 --- a/packages/layout-engine/style-engine/src/cascade.ts +++ b/packages/layout-engine/style-engine/src/cascade.ts @@ -151,7 +151,7 @@ export function orderDefaultsAndNormal( */ export function combineRunProperties(propertiesArray: RunProperties[]): RunProperties { return combineProperties(propertiesArray, { - fullOverrideProps: ['fontFamily', 'color'], + fullOverrideProps: ['color'], }); } From 2622169b52d64a33418592a4067b816a6b477320 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Tue, 20 Jan 2026 11:31:34 -0300 Subject: [PATCH 71/85] fix: resolution of tab stops --- .../pm-adapter/src/converters/paragraph.ts | 2 +- .../pm-adapter/src/converters/text-run.ts | 21 ++++--------------- .../style-engine/src/ooxml/index.ts | 2 +- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index 6487d189e..57e770d48 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -1041,7 +1041,7 @@ export function paragraphToFlowBlocks( } if (node.type === 'tab') { - const tabRun = tabNodeToRun(node, positions, tabOrdinal, para, inheritedMarks); + const tabRun = tabNodeToRun(node, positions, tabOrdinal, paragraphAttrs, inheritedMarks); tabOrdinal += 1; if (tabRun) { currentRuns.push(tabRun); diff --git a/packages/layout-engine/pm-adapter/src/converters/text-run.ts b/packages/layout-engine/pm-adapter/src/converters/text-run.ts index 83474c432..d9ef38acf 100644 --- a/packages/layout-engine/pm-adapter/src/converters/text-run.ts +++ b/packages/layout-engine/pm-adapter/src/converters/text-run.ts @@ -7,7 +7,7 @@ * - Token node conversion (page numbers, etc.) */ -import type { TextRun, Run, TabRun, TabStop, ParagraphIndent, SdtMetadata } from '@superdoc/contracts'; +import type { TextRun, Run, TabRun, TabStop, SdtMetadata, ParagraphAttrs } from '@superdoc/contracts'; import type { PMNode, PMMark, PositionMap, HyperlinkConfig, ThemeColorPalette } from '../types.js'; import { applyMarksToRun } from '../marks/index.js'; import { DEFAULT_HYPERLINK_CONFIG } from '../constants.js'; @@ -70,26 +70,13 @@ export function tabNodeToRun( node: PMNode, positions: PositionMap, tabIndex: number, - paragraph: PMNode, + paragraphAttrs: ParagraphAttrs, inheritedMarks: PMMark[] = [], ): Run | null { const pos = positions.get(node); if (!pos) return null; - const paragraphAttrs = paragraph.attrs ?? {}; - const paragraphProps = - typeof paragraphAttrs.paragraphProperties === 'object' && paragraphAttrs.paragraphProperties !== null - ? (paragraphAttrs.paragraphProperties as Record) - : {}; - const tabStops = - Array.isArray(paragraphAttrs.tabStops) && paragraphAttrs.tabStops.length - ? (paragraphAttrs.tabStops as TabStop[]) - : Array.isArray(paragraphProps.tabStops) - ? (paragraphProps.tabStops as TabStop[]) - : undefined; - const indent = - (paragraphAttrs.indent as ParagraphIndent | undefined) ?? - (paragraphProps.indent as ParagraphIndent | undefined) ?? - undefined; + const tabStops: TabStop[] | undefined = paragraphAttrs.tabs; + const indent = paragraphAttrs.indent; const run: TabRun = { kind: 'tab', text: '\t', diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index c636aaf4d..7f6da1a79 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -173,7 +173,7 @@ export function resolveParagraphProperties( const finalProps = combineProperties(propsChain, { specialHandling: { - tabs: (target: ParagraphProperties, source: ParagraphProperties): unknown => { + tabStops: (target: ParagraphProperties, source: ParagraphProperties): unknown => { // If a higher priority source defines firstLine, remove hanging from the final result if (target.tabStops != null && source.tabStops != null) { return [...(target.tabStops as unknown[]), ...(source.tabStops as unknown[])]; From e2cb8edb5f90d917b637ea8f370df30cfd0aa7ad Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Tue, 20 Jan 2026 11:25:46 -0300 Subject: [PATCH 72/85] fix: style resolution for page references --- .../pm-adapter/src/converters/paragraph.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index 57e770d48..0e5c454ec 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -961,12 +961,16 @@ export function paragraphToFlowBlocks( const bookmarkId = bookmarkMatch ? bookmarkMatch[1] : ''; // If we have a bookmark ID, create a token run for dynamic resolution + let runProperties = {}; if (bookmarkId) { // Check if there's materialized content (pre-baked page number from Word) let fallbackText = '??'; // Default placeholder if resolution fails if (Array.isArray(node.content) && node.content.length > 0) { // Extract text from children as fallback const extractText = (n: PMNode): string => { + if (n.type === 'run') { + runProperties = n.attrs?.runProperties ?? {}; + } if (n.type === 'text' && n.text) return n.text; if (Array.isArray(n.content)) { return n.content.map(extractText).join(''); @@ -991,7 +995,15 @@ export function paragraphToFlowBlocks( hyperlinkConfig, themeColors, ); - tokenRun = applyInlineRunProperties(tokenRun, activeRunProperties); + const resolvedRunProperties = resolveRunProperties( + converterContext!, + runProperties, + resolvedParagraphProperties, + null, + false, + false, + ); + tokenRun = applyInlineRunProperties(tokenRun, resolvedRunProperties); // Apply marks ONCE here - this ensures they override linked styles and honor enableComments applyMarksToRun( tokenRun, From 1cc62b0b8ac1e9b9ffa52090fb1464f98358690a Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Tue, 20 Jan 2026 11:42:52 -0300 Subject: [PATCH 73/85] test: adjust existing tests --- .../src/converters/paragraph.test.ts | 62 +++++++++-- .../src/converters/text-run.test.ts | 100 ++++++------------ .../tests/import/hyperlinkImporter.test.js | 4 +- 3 files changed, 93 insertions(+), 73 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts index 586dd3a5e..06690f04c 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.test.ts @@ -985,7 +985,7 @@ describe('paragraph converters', () => { const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); - expect(vi.mocked(tabNodeToRun)).toHaveBeenCalledWith(tabNode, positions, 0, para, []); + expect(vi.mocked(tabNodeToRun)).toHaveBeenCalledWith(tabNode, positions, 0, {}, []); const paraBlock = blocks[0] as ParagraphBlock; expect(paraBlock.runs).toContain(mockTabRun); }); @@ -998,9 +998,9 @@ describe('paragraph converters', () => { paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); - expect(vi.mocked(tabNodeToRun)).toHaveBeenNthCalledWith(1, expect.any(Object), positions, 0, para, []); - expect(vi.mocked(tabNodeToRun)).toHaveBeenNthCalledWith(2, expect.any(Object), positions, 1, para, []); - expect(vi.mocked(tabNodeToRun)).toHaveBeenNthCalledWith(3, expect.any(Object), positions, 2, para, []); + expect(vi.mocked(tabNodeToRun)).toHaveBeenNthCalledWith(1, expect.any(Object), positions, 0, {}, []); + expect(vi.mocked(tabNodeToRun)).toHaveBeenNthCalledWith(2, expect.any(Object), positions, 1, {}, []); + expect(vi.mocked(tabNodeToRun)).toHaveBeenNthCalledWith(3, expect.any(Object), positions, 2, {}, []); }); it('should skip tab when tabNodeToRun returns null', () => { @@ -1332,7 +1332,20 @@ describe('paragraph converters', () => { vi.mocked(getNodeInstruction).mockReturnValue('PAGEREF _Toc123 \\h'); positions.set(pageRefNode, { start: 10, end: 15 }); - const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); + const blocks = paragraphToFlowBlocks( + para, + nextBlockId, + positions, + 'Arial', + 16, + styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, + ); const paraBlock = blocks[0] as ParagraphBlock; const run = paraBlock.runs[0] as TextRun; @@ -1353,7 +1366,20 @@ describe('paragraph converters', () => { vi.mocked(getNodeInstruction).mockReturnValue('PAGEREF "_Toc456" \\h'); - const blocks = paragraphToFlowBlocks(para, nextBlockId, positions, 'Arial', 16, styleContext); + const blocks = paragraphToFlowBlocks( + para, + nextBlockId, + positions, + 'Arial', + 16, + styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, + ); const paraBlock = blocks[0] as ParagraphBlock; const run = paraBlock.runs[0] as TextRun; @@ -1379,6 +1405,12 @@ describe('paragraph converters', () => { 'Arial', 16, styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, ); expect(vi.mocked(textNodeToRun)).toHaveBeenCalledWith( @@ -1406,6 +1438,12 @@ describe('paragraph converters', () => { 'Arial', 16, styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, ); expect(vi.mocked(textNodeToRun)).toHaveBeenCalledWith( @@ -1439,6 +1477,12 @@ describe('paragraph converters', () => { 'Arial', 16, styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, ); expect(vi.mocked(textNodeToRun)).toHaveBeenCalledWith( @@ -1473,6 +1517,12 @@ describe('paragraph converters', () => { 'Arial', 16, styleContext, + undefined, + undefined, + undefined, + undefined, + undefined, + converterContext, ); // textNodeToRun is called with empty marks (marks are applied separately via applyMarksToRun) diff --git a/packages/layout-engine/pm-adapter/src/converters/text-run.test.ts b/packages/layout-engine/pm-adapter/src/converters/text-run.test.ts index a62d05126..b62c67d6e 100644 --- a/packages/layout-engine/pm-adapter/src/converters/text-run.test.ts +++ b/packages/layout-engine/pm-adapter/src/converters/text-run.test.ts @@ -5,7 +5,7 @@ import { describe, it, expect, vi } from 'vitest'; import type { PMNode, PMMark, PositionMap, HyperlinkConfig } from '../types.js'; -import type { TextRun, TabRun, SdtMetadata, TabStop, ParagraphIndent } from '@superdoc/contracts'; +import type { TextRun, TabRun, SdtMetadata, TabStop, ParagraphIndent, ParagraphAttrs } from '@superdoc/contracts'; import { textNodeToRun, tabNodeToRun, tokenNodeToRun } from './text-run.js'; import * as marksModule from '../marks/index.js'; @@ -302,13 +302,11 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 5, end: 6 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode); + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs); expect(result).toEqual({ kind: 'tab', @@ -326,12 +324,10 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode); + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs); expect(result).toBeNull(); }); @@ -344,14 +340,11 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - attrs: { tabStops }, - }; + const paragraphAttrs: ParagraphAttrs = { tabs: tabStops }; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs) as TabRun; expect(result.tabStops).toEqual(tabStops); }); @@ -365,14 +358,11 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - attrs: { indent }, - }; + const paragraphAttrs: ParagraphAttrs = { indent }; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs) as TabRun; expect(result.indent).toEqual(indent); }); @@ -382,13 +372,11 @@ describe('tabNodeToRun', () => { type: 'tab', attrs: { leader: 'dot' }, }; - const paragraphNode: PMNode = { - type: 'paragraph', - }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs) as TabRun; expect(result.leader).toBe('dot'); }); @@ -397,13 +385,11 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs) as TabRun; expect(result.leader).toBeNull(); }); @@ -412,28 +398,24 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 5, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 5, paragraphAttrs) as TabRun; expect(result.tabIndex).toBe(5); }); - it('handles paragraph with undefined attrs', () => { + it('handles paragraph with empty attrs', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs) as TabRun; expect(result.tabStops).toBeUndefined(); expect(result.indent).toBeUndefined(); @@ -443,17 +425,13 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - attrs: { tabStops: [] }, - }; + const paragraphAttrs: ParagraphAttrs = { tabs: [] }; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs) as TabRun; - // Empty arrays are normalized to undefined for cleaner output - expect(result.tabStops).toBeUndefined(); + expect(result.tabStops).toEqual([]); }); it('handles multiple tab stops in paragraph', () => { @@ -466,14 +444,11 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - attrs: { tabStops }, - }; + const paragraphAttrs: ParagraphAttrs = { tabs: tabStops }; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 2, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 2, paragraphAttrs) as TabRun; expect(result.tabStops).toEqual(tabStops); expect(result.tabStops?.length).toBe(4); @@ -489,14 +464,11 @@ describe('tabNodeToRun', () => { const tabNode: PMNode = { type: 'tab', }; - const paragraphNode: PMNode = { - type: 'paragraph', - attrs: { indent }, - }; + const paragraphAttrs: ParagraphAttrs = { indent }; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs) as TabRun; expect(result.indent).toEqual(indent); }); @@ -509,13 +481,11 @@ describe('tabNodeToRun', () => { type: 'tab', attrs: { leader }, }; - const paragraphNode: PMNode = { - type: 'paragraph', - }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - const result = tabNodeToRun(tabNode, positions, 0, paragraphNode) as TabRun; + const result = tabNodeToRun(tabNode, positions, 0, paragraphAttrs) as TabRun; expect(result.leader).toBe(leader); }); @@ -530,11 +500,11 @@ describe('tabNodeToRun', () => { type: 'tab', marks: [{ type: 'underline', attrs: { underlineType: 'single' } }], }; - const paragraphNode: PMNode = { type: 'paragraph' }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - tabNodeToRun(tabNode, positions, 0, paragraphNode); + tabNodeToRun(tabNode, positions, 0, paragraphAttrs); expect(applyMarksToRunMock).toHaveBeenCalledTimes(1); expect(applyMarksToRunMock).toHaveBeenCalledWith(expect.objectContaining({ kind: 'tab' }), [ @@ -547,12 +517,12 @@ describe('tabNodeToRun', () => { applyMarksToRunMock.mockClear(); const tabNode: PMNode = { type: 'tab' }; - const paragraphNode: PMNode = { type: 'paragraph' }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); const inheritedMarks: PMMark[] = [{ type: 'underline', attrs: { underlineType: 'single' } }]; - tabNodeToRun(tabNode, positions, 0, paragraphNode, inheritedMarks); + tabNodeToRun(tabNode, positions, 0, paragraphAttrs, inheritedMarks); expect(applyMarksToRunMock).toHaveBeenCalledTimes(1); expect(applyMarksToRunMock).toHaveBeenCalledWith(expect.objectContaining({ kind: 'tab' }), [ @@ -568,12 +538,12 @@ describe('tabNodeToRun', () => { type: 'tab', marks: [{ type: 'bold' }], }; - const paragraphNode: PMNode = { type: 'paragraph' }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); const inheritedMarks: PMMark[] = [{ type: 'underline', attrs: { underlineType: 'single' } }]; - tabNodeToRun(tabNode, positions, 0, paragraphNode, inheritedMarks); + tabNodeToRun(tabNode, positions, 0, paragraphAttrs, inheritedMarks); expect(applyMarksToRunMock).toHaveBeenCalledTimes(1); expect(applyMarksToRunMock).toHaveBeenCalledWith(expect.objectContaining({ kind: 'tab' }), [ @@ -587,11 +557,11 @@ describe('tabNodeToRun', () => { applyMarksToRunMock.mockClear(); const tabNode: PMNode = { type: 'tab' }; - const paragraphNode: PMNode = { type: 'paragraph' }; + const paragraphAttrs: ParagraphAttrs = {}; const positions: PositionMap = new WeakMap(); positions.set(tabNode, { start: 0, end: 1 }); - tabNodeToRun(tabNode, positions, 0, paragraphNode); + tabNodeToRun(tabNode, positions, 0, paragraphAttrs); expect(applyMarksToRunMock).not.toHaveBeenCalled(); }); diff --git a/packages/super-editor/src/tests/import/hyperlinkImporter.test.js b/packages/super-editor/src/tests/import/hyperlinkImporter.test.js index dcd945aed..20fc83349 100644 --- a/packages/super-editor/src/tests/import/hyperlinkImporter.test.js +++ b/packages/super-editor/src/tests/import/hyperlinkImporter.test.js @@ -34,7 +34,7 @@ describe('HyperlinkNodeImporter', () => { const textStyleMark = marks.find((mark) => mark.type === 'textStyle'); expect(textStyleMark).toBeDefined(); - expect(textStyleMark.attrs.fontFamily).toBe('Arial, sans-serif'); + expect(textStyleMark.attrs.fontFamily).toBe('Aptos, Arial, sans-serif'); expect(textStyleMark.attrs.fontSize).toBe('10pt'); expect(linkMark.attrs.href).toBe( @@ -45,7 +45,7 @@ describe('HyperlinkNodeImporter', () => { // Capture the textStyle mark expect(textStyleMark.attrs.styleId).toBe('Hyperlink'); - expect(textStyleMark.attrs.fontFamily).toBe('Arial, sans-serif'); + expect(textStyleMark.attrs.fontFamily).toBe('Aptos, Arial, sans-serif'); expect(textStyleMark.attrs.fontSize).toBe('10pt'); }); From 4102f1764be8500bd39dd8688cb69d059b291b2b Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Tue, 20 Jan 2026 18:03:13 -0300 Subject: [PATCH 74/85] feat: add support for "decimalZero" format for lists --- shared/common/list-numbering/index.test.ts | 16 ++++++++++++++++ shared/common/list-numbering/index.ts | 11 +++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/shared/common/list-numbering/index.test.ts b/shared/common/list-numbering/index.test.ts index 65d47f6fe..3cfa0373a 100644 --- a/shared/common/list-numbering/index.test.ts +++ b/shared/common/list-numbering/index.test.ts @@ -11,6 +11,22 @@ describe('generateOrderedListIndex', () => { expect(result).toBe('.12.4)'); }); + it('formats decimalZero markers with leading zeros for single digits', () => { + const singleDigit = generateOrderedListIndex({ + listLevel: [1, 1], + lvlText: '%1.%2', + listNumberingType: 'decimalZero', + }); + expect(singleDigit).toBe('1.01'); + + const doubleDigit = generateOrderedListIndex({ + listLevel: [1, 10], + lvlText: '%1.%2', + listNumberingType: 'decimalZero', + }); + expect(doubleDigit).toBe('1.10'); + }); + it('formats lower roman numerals', () => { const result = generateOrderedListIndex({ listLevel: [4], diff --git a/shared/common/list-numbering/index.ts b/shared/common/list-numbering/index.ts index 5dac90f83..a066f304d 100644 --- a/shared/common/list-numbering/index.ts +++ b/shared/common/list-numbering/index.ts @@ -1,6 +1,6 @@ type NumberingHandler = (path: number[], lvlText: string, customFormat?: string) => string | null; -type NumberFormatter = (value: number) => string; +type NumberFormatter = (value: number, idx?: number) => string; const handleDecimal: NumberingHandler = (path, lvlText) => generateNumbering(path, lvlText, numberToStringFormatter); const handleRoman: NumberingHandler = (path, lvlText) => generateNumbering(path, lvlText, intToRoman); @@ -18,9 +18,11 @@ const handleCustom: NumberingHandler = (path, lvlText, customFormat) => generateFromCustom(path, lvlText, customFormat as string); const handleJapaneseCounting: NumberingHandler = (path, lvlText) => generateNumbering(path, lvlText, intToJapaneseCounting); +const handleDecimalZero: NumberingHandler = (path, lvlText) => generateNumbering(path, lvlText, decimalZeroFormatter); const listIndexMap: Record = { decimal: handleDecimal, + decimalZero: handleDecimalZero, lowerRoman: handleLowerRoman, upperRoman: handleRoman, lowerLetter: handleLowerAlpha, @@ -56,7 +58,7 @@ const createNumbering = (values: string[], lvlText: string): string => { }; const generateNumbering = (path: number[], lvlText: string, formatter: NumberFormatter): string => { - const formattedValues = path.map((entry) => formatter(entry)); + const formattedValues = path.map((entry, idx) => formatter(entry, idx)); return createNumbering(formattedValues, lvlText); }; @@ -67,6 +69,11 @@ const ordinalFormatter: NumberFormatter = (value) => { return `${value}${suffix}`; }; +const decimalZeroFormatter: NumberFormatter = (value, idx) => { + if (value >= 10 || idx === 0) return String(value); + return `0${value}`; +}; + const generateFromCustom = (path: number[], lvlText: string, customFormat: string): string => { if (customFormat.match(/(?:[0]+\d,\s){3}\.{3}/) == null) { return generateNumbering(path, lvlText, numberToStringFormatter); From 0a3b3570170128d661d60e3277e09f2b835d5b8c Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Tue, 20 Jan 2026 18:33:30 -0300 Subject: [PATCH 75/85] fix: apply marks before inline run properties --- .../layout-engine/pm-adapter/src/converters/paragraph.ts | 6 +++--- packages/layout-engine/pm-adapter/src/index.test.ts | 6 +++--- .../layout-engine/tests/src/sd-1495-auto-page-break.test.ts | 2 ++ .../src/core/super-converter/v3/handlers/utils.js | 3 +++ 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index 0e5c454ec..468a2b38d 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -836,8 +836,8 @@ export function paragraphToFlowBlocks( hyperlinkConfig, themeColors, ); - run = applyInlineRunProperties(run, activeRunProperties); applyMarksToRun(run, mergedMarks, hyperlinkConfig, themeColors); + run = applyInlineRunProperties(run, activeRunProperties); // Copy PM positions from the parent footnoteReference node if (refPos) { @@ -867,7 +867,6 @@ export function paragraphToFlowBlocks( hyperlinkConfig, themeColors, ); - run = applyInlineRunProperties(run, activeRunProperties); // Apply marks ONCE here - this ensures they override linked styles applyMarksToRun( run, @@ -877,6 +876,7 @@ export function paragraphToFlowBlocks( converterContext?.backgroundColor, enableComments, ); + run = applyInlineRunProperties(run, activeRunProperties); currentRuns.push(run); return; } @@ -1003,7 +1003,6 @@ export function paragraphToFlowBlocks( false, false, ); - tokenRun = applyInlineRunProperties(tokenRun, resolvedRunProperties); // Apply marks ONCE here - this ensures they override linked styles and honor enableComments applyMarksToRun( tokenRun, @@ -1013,6 +1012,7 @@ export function paragraphToFlowBlocks( converterContext?.backgroundColor, enableComments, ); + tokenRun = applyInlineRunProperties(tokenRun, resolvedRunProperties); // Copy PM positions from parent pageReference node if (pageRefPos) { (tokenRun as TextRun).pmStart = pageRefPos.start; diff --git a/packages/layout-engine/pm-adapter/src/index.test.ts b/packages/layout-engine/pm-adapter/src/index.test.ts index abe9eed5c..a84adce63 100644 --- a/packages/layout-engine/pm-adapter/src/index.test.ts +++ b/packages/layout-engine/pm-adapter/src/index.test.ts @@ -162,9 +162,9 @@ describe('toFlowBlocks', () => { expect(trueVal?.bold).toBe(true); expect(val1?.bold).toBe(true); expect(onVal?.bold).toBe(true); - expect(falseVal?.bold).toBeUndefined(); - expect(zeroVal?.bold).toBeUndefined(); - expect(offVal?.bold).toBeUndefined(); + expect(falseVal?.bold).toBe(false); + expect(zeroVal?.bold).toBe(false); + expect(offVal?.bold).toBe(false); }); it('maps italic mark to Run.italic', () => { diff --git a/packages/layout-engine/tests/src/sd-1495-auto-page-break.test.ts b/packages/layout-engine/tests/src/sd-1495-auto-page-break.test.ts index 6d6d62799..4aef622f1 100644 --- a/packages/layout-engine/tests/src/sd-1495-auto-page-break.test.ts +++ b/packages/layout-engine/tests/src/sd-1495-auto-page-break.test.ts @@ -71,6 +71,8 @@ async function loadDocxFixture(filename: string): Promise<{ pmDoc: PMNode; conve docx, numbering: result.numbering, linkedStyles: result.linkedStyles, + translatedLinkedStyles: result.translatedLinkedStyles, + translatedNumbering: result.translatedNumbering, }; return { pmDoc: result.pmDoc, converterContext }; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js index 9eab8f3ae..9023c34e1 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/utils.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/utils.js @@ -10,6 +10,9 @@ export const generateV2HandlerEntity = (handlerName, translator) => ({ handlerName, handler: (params) => { const { nodes } = params; + if (!translator || !translator.xmlName) { + return { nodes: [], consumed: 0 }; + } if (nodes.length === 0 || nodes[0].name !== translator.xmlName) { return { nodes: [], consumed: 0 }; } From b7a6fc49e9ca1aa02334bdec285a4170397c5144 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 10:26:58 -0300 Subject: [PATCH 76/85] fix: translation of table style properties --- .../style-engine/src/ooxml/styles-types.ts | 16 ++++- .../v3/handlers/w/style/style-translator.js | 69 +++++++++++++++++-- .../handlers/w/style/style-translator.test.js | 38 +++++++++- 3 files changed, 114 insertions(+), 9 deletions(-) diff --git a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts index cacadab81..0a35f8df1 100644 --- a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts +++ b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts @@ -119,7 +119,7 @@ export interface StyleDefinition { /** Table cell properties applied by the style. */ tableCellProperties?: TableCellProperties; /** Table style properties applied by the style. */ - tableStyleProperties?: TableStyleProperties; + tableStyleProperties?: Record; } /** @@ -364,6 +364,20 @@ export interface TableHeaderReference { header: string; } +export type TableStyleType = + | 'wholeTable' + | 'firstRow' + | 'lastRow' + | 'firstCol' + | 'lastCol' + | 'band1Vert' + | 'band2Vert' + | 'band1Horz' + | 'band2Horz' + | 'neCell' + | 'nwCell' + | 'seCell' + | 'swCell'; /** * Table style properties encoded from w:tblStylePr. */ diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js index ad5df542c..c35215cf1 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js @@ -1,9 +1,11 @@ -// @ts-check import { NodeTranslator } from '@translator'; import { - createNestedPropertiesTranslator, createAttributeHandler, createBooleanAttributeHandler, + encodeProperties, + decodeProperties, + encodePropertiesByKey, + decodePropertiesByKey, } from '@converter/v3/handlers/utils.js'; import { translator as wNameTranslator } from '../../w/name'; import { translator as wAliasesTranslator } from '../../w/aliases'; @@ -63,10 +65,67 @@ const attributeHandlers = [ createBooleanAttributeHandler('w:customStyle'), ]; +const propertyTranslatorsByXmlName = {}; +const propertyTranslatorsBySdName = {}; +propertyTranslators.forEach((translator) => { + propertyTranslatorsByXmlName[translator.xmlName] = translator; + propertyTranslatorsBySdName[translator.sdNodeOrKeyName] = translator; +}); + /** * The NodeTranslator instance for the w:style element. * @type {import('@translator').NodeTranslator} */ -export const translator = NodeTranslator.from( - createNestedPropertiesTranslator('w:style', 'style', propertyTranslators, {}, attributeHandlers), -); +export const translator = NodeTranslator.from({ + xmlName: 'w:style', + sdNodeOrKeyName: 'style', + type: NodeTranslator.translatorTypes.NODE, + attributes: attributeHandlers, + encode: (params, encodedAttrs) => { + const { nodes } = params; + const node = nodes[0]; + + const result = { + ...encodedAttrs, + ...encodeProperties(params, propertyTranslatorsByXmlName), + ...encodePropertiesByKey( + wTblStylePrTranslator.xmlName, + 'tableStyleProperties', + wTblStylePrTranslator, + params, + node, + 'type', + ), + }; + + return result; + }, + decode: function (params) { + const currentValue = params.node.attrs?.['style']; + if (!currentValue) { + return undefined; + } + + const decodedAttrs = this.decodeAttributes({ node: { ...params.node, attrs: currentValue } }); + + const elements = [ + ...decodeProperties(params, propertyTranslatorsBySdName, currentValue), + ...decodePropertiesByKey( + wTblStylePrTranslator.xmlName, + 'tableStyleProperties', + wTblStylePrTranslator, + params, + currentValue, + ), + ]; + + const newNode = { + name: 'w:style', + type: 'element', + attributes: decodedAttrs, + elements: elements, + }; + + return newNode; + }, +}); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.test.js index 57b1a35fa..06d23fb5a 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.test.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.test.js @@ -15,13 +15,23 @@ describe('w:style translator', () => { it('should encode nested style properties correctly', () => { const xmlNode = { name: 'w:style', - attributes: { 'w:type': 'paragraph', 'w:styleId': 'CustomStyle' }, + attributes: { + 'w:type': 'paragraph', + 'w:styleId': 'CustomStyle', + 'w:default': '1', + 'w:customStyle': '0', + }, elements: [ { name: 'w:name', attributes: { 'w:val': 'Custom Style' } }, { name: 'w:aliases', attributes: { 'w:val': 'Alias1,Alias2' } }, { name: 'w:uiPriority', attributes: { 'w:val': '1' } }, { name: 'w:pPr', elements: [{ name: 'w:keepNext' }] }, { name: 'w:rPr', elements: [{ name: 'w:b' }] }, + { + name: 'w:tblStylePr', + attributes: { 'w:type': 'firstRow' }, + elements: [], + }, ], }; @@ -30,18 +40,25 @@ describe('w:style translator', () => { expect(result).toEqual({ type: 'paragraph', styleId: 'CustomStyle', + default: true, + customStyle: false, name: 'Custom Style', aliases: 'Alias1,Alias2', uiPriority: 1, paragraphProperties: { keepNext: true }, runProperties: { bold: true }, + tableStyleProperties: { + firstRow: { + type: 'firstRow', + }, + }, }); }); - it('should return undefined if no child properties are present', () => { + it('should return an empty object if no attributes or child properties are present', () => { const xmlNode = { name: 'w:style', elements: [] }; const result = translator.encode({ nodes: [xmlNode] }); - expect(result).toBeUndefined(); + expect(result).toEqual({}); }); }); @@ -50,11 +67,20 @@ describe('w:style translator', () => { const superDocNode = { attrs: { style: { + type: 'paragraph', + styleId: 'CustomStyle', + default: true, + customStyle: false, name: 'Custom Style', aliases: 'Alias1,Alias2', uiPriority: 1, paragraphProperties: { keepNext: true }, runProperties: { bold: true }, + tableStyleProperties: { + firstRow: { + type: 'firstRow', + }, + }, }, }, }; @@ -62,6 +88,12 @@ describe('w:style translator', () => { const result = translator.decode({ node: superDocNode }); expect(result.name).toBe('w:style'); + expect(result.attributes).toEqual({ + 'w:type': 'paragraph', + 'w:styleId': 'CustomStyle', + 'w:default': '1', + 'w:customStyle': '0', + }); expect(result.elements).toEqual( expect.arrayContaining([ { name: 'w:name', attributes: { 'w:val': 'Custom Style' } }, From 743f16acf6c888144ab31fbd1cf2251d6334e508 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 10:55:48 -0300 Subject: [PATCH 77/85] refactor: modify how table info is passed for style resolution --- .../pm-adapter/src/attributes/paragraph.ts | 4 ++-- .../pm-adapter/src/converter-context.ts | 4 ++-- .../pm-adapter/src/converters/paragraph.ts | 10 +++++----- .../layout-engine/pm-adapter/src/converters/table.ts | 2 +- .../layout-engine/style-engine/src/ooxml/index.ts | 12 ++++++++---- .../w/p/helpers/legacy-handle-paragraph-node.js | 2 +- .../v3/handlers/w/style/style-translator.js | 1 + 7 files changed, 20 insertions(+), 15 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts index 627e40a56..39dd7a5e1 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts @@ -239,7 +239,7 @@ export const computeParagraphAttrs = ( resolvedParagraphProperties = resolveParagraphProperties( converterContext, paragraphProperties, - converterContext.tableStyleId, + converterContext.tableInfo, ); } @@ -291,7 +291,7 @@ export const computeParagraphAttrs = ( converterContext!, resolvedParagraphProperties.runProperties, resolvedParagraphProperties, - converterContext!.tableStyleId, + converterContext!.tableInfo, true, Boolean(paragraphProperties.numberingProperties), ); diff --git a/packages/layout-engine/pm-adapter/src/converter-context.ts b/packages/layout-engine/pm-adapter/src/converter-context.ts index bc139b784..4fdd7b727 100644 --- a/packages/layout-engine/pm-adapter/src/converter-context.ts +++ b/packages/layout-engine/pm-adapter/src/converter-context.ts @@ -9,7 +9,7 @@ */ import type { ParagraphSpacing } from '@superdoc/contracts'; -import type { NumberingProperties, StylesDocumentProperties } from '@superdoc/style-engine/ooxml'; +import type { NumberingProperties, StylesDocumentProperties, TableInfo } from '@superdoc/style-engine/ooxml'; export type ConverterNumberingContext = { definitions?: Record; @@ -52,7 +52,7 @@ export type ConverterContext = { * * Style cascade: docDefaults → tableStyleParagraphProps → paragraph style → direct formatting */ - tableStyleId?: string; + tableInfo?: TableInfo; /** * Background color of the containing table cell (hex format, e.g., "#342D8C"). * Used for auto text color resolution - text without explicit color should diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index 468a2b38d..3a94cee71 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -837,7 +837,7 @@ export function paragraphToFlowBlocks( themeColors, ); applyMarksToRun(run, mergedMarks, hyperlinkConfig, themeColors); - run = applyInlineRunProperties(run, activeRunProperties); + run = applyInlineRunProperties(run, activeRunProperties, converterContext); // Copy PM positions from the parent footnoteReference node if (refPos) { @@ -876,7 +876,7 @@ export function paragraphToFlowBlocks( converterContext?.backgroundColor, enableComments, ); - run = applyInlineRunProperties(run, activeRunProperties); + run = applyInlineRunProperties(run, activeRunProperties, converterContext); currentRuns.push(run); return; } @@ -894,7 +894,7 @@ export function paragraphToFlowBlocks( converterContext!, runProperties, resolvedParagraphProperties, - converterContext!.tableStyleId, + converterContext!.tableInfo, false, false, ); @@ -1012,7 +1012,7 @@ export function paragraphToFlowBlocks( converterContext?.backgroundColor, enableComments, ); - tokenRun = applyInlineRunProperties(tokenRun, resolvedRunProperties); + tokenRun = applyInlineRunProperties(tokenRun, resolvedRunProperties, converterContext); // Copy PM positions from parent pageReference node if (pageRefPos) { (tokenRun as TextRun).pmStart = pageRefPos.start; @@ -1098,7 +1098,7 @@ export function paragraphToFlowBlocks( inlineStyleId: paragraphProps.styleId || null, mergedMarksCount: mergedMarks.length, }); - tokenRun = applyInlineRunProperties(tokenRun as TextRun, activeRunProperties); + tokenRun = applyInlineRunProperties(tokenRun as TextRun, activeRunProperties, converterContext); currentRuns.push(tokenRun); } return; diff --git a/packages/layout-engine/pm-adapter/src/converters/table.ts b/packages/layout-engine/pm-adapter/src/converters/table.ts index e584c0804..03c0e6056 100644 --- a/packages/layout-engine/pm-adapter/src/converters/table.ts +++ b/packages/layout-engine/pm-adapter/src/converters/table.ts @@ -220,7 +220,7 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { tableStyleId || cellBackgroundColor ? ({ ...context.converterContext, - ...(tableStyleId && { tableStyleId }), + ...(tableStyleId && { tableInfo: { tableStyleId } }), ...(cellBackgroundColor && { backgroundColor: cellBackgroundColor }), } as ConverterContext) : context.converterContext; diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index 7f6da1a79..a774b1817 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -27,11 +27,15 @@ export interface OoxmlResolverParams { translatedLinkedStyles: StylesDocumentProperties | null | undefined; } +export interface TableInfo { + tableStyleId: string | null | undefined; +} + export function resolveRunProperties( params: OoxmlResolverParams, inlineRpr: RunProperties | null | undefined, resolvedPpr: ParagraphProperties | null | undefined, - tableStyleId: string | null = null, + tableInfo: TableInfo | null | undefined = null, isListNumber = false, numberingDefinedInline = false, ): RunProperties { @@ -53,7 +57,7 @@ export function resolveRunProperties( // Getting table style run properties const tableStyleProps = ( - tableStyleId ? resolveStyleChain('runProperties', params, tableStyleId) : {} + tableInfo?.tableStyleId ? resolveStyleChain('runProperties', params, tableInfo?.tableStyleId) : {} ) as RunProperties; // Get run properties from direct character style, unless it's inside a TOC paragraph style @@ -98,7 +102,7 @@ export function resolveRunProperties( export function resolveParagraphProperties( params: OoxmlResolverParams, inlineProps: ParagraphProperties | null | undefined, - tableStyleId: string | null = null, + tableInfo: TableInfo | null | undefined, ): ParagraphProperties { if (!inlineProps) { inlineProps = {} as ParagraphProperties; @@ -148,7 +152,7 @@ export function resolveParagraphProperties( // Table properties const tableProps = ( - tableStyleId ? resolveStyleChain('paragraphProperties', params, tableStyleId) : {} + tableInfo?.tableStyleId ? resolveStyleChain('paragraphProperties', params, tableInfo?.tableStyleId) : {} ) as ParagraphProperties; // Resolve property chain - regular properties are treated differently from indentation diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js index f5121d657..904ed2c5a 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/p/helpers/legacy-handle-paragraph-node.js @@ -39,7 +39,7 @@ export const handleParagraphNode = (params) => { // Resolve paragraph properties according to styles hierarchy const tableStyleId = getTableStyleId(params.path || []); - const resolvedParagraphProperties = resolveParagraphProperties(params, inlineParagraphProperties, tableStyleId); + const resolvedParagraphProperties = resolveParagraphProperties(params, inlineParagraphProperties, { tableStyleId }); const { elements = [], attributes = {}, marks = [] } = parseProperties(node, params.docx); const childContent = []; diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js index c35215cf1..a2e6adf8d 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/style/style-translator.js @@ -68,6 +68,7 @@ const attributeHandlers = [ const propertyTranslatorsByXmlName = {}; const propertyTranslatorsBySdName = {}; propertyTranslators.forEach((translator) => { + if (!translator) return; propertyTranslatorsByXmlName[translator.xmlName] = translator; propertyTranslatorsBySdName[translator.sdNodeOrKeyName] = translator; }); From 62e39cccf96d321e3a2d8507ef7f5416f1ba9dcc Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 12:33:10 -0300 Subject: [PATCH 78/85] chore: remove unused code --- .../pm-adapter/src/converters/paragraph.ts | 96 ------------------- 1 file changed, 96 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts index 3a94cee71..d12913a3f 100644 --- a/packages/layout-engine/pm-adapter/src/converters/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/converters/paragraph.ts @@ -496,102 +496,6 @@ export function mergeAdjacentRuns(runs: Run[]): Run[] { return merged; } -type RunDefaults = { - fontFamily?: string; - fontSizePx?: number; - color?: string; - bold?: boolean; - italic?: boolean; - underline?: TextRun['underline']; - letterSpacing?: number; -}; - -/** - * Extracts font properties from the first text node in a paragraph's content. - * This is used to match list marker font to the paragraph's first text run. - * - * @param para - The paragraph PM node - * @returns Font properties (fontSizePx already in pixels, fontFamily) or undefined if not found - */ -const extractFirstTextRunFont = (para: PMNode): { fontSizePx?: number; fontFamily?: string } | undefined => { - if (!para.content || !Array.isArray(para.content) || para.content.length === 0) { - return undefined; - } - - // Helper to find fontSize mark and extract value - const extractFontFromMarks = (marks?: PMMark[]): { fontSizePx?: number; fontFamily?: string } | undefined => { - if (!marks || !Array.isArray(marks)) return undefined; - - const result: { fontSizePx?: number; fontFamily?: string } = {}; - - for (const mark of marks) { - if (!mark || typeof mark !== 'object') continue; - - // Look for textStyle mark which contains font info - if (mark.type === 'textStyle' && mark.attrs) { - const attrs = mark.attrs as Record; - // fontSize is stored as a string with unit, e.g., '12pt' or '16px' - if (attrs.fontSize != null) { - const fontSizeStr = String(attrs.fontSize); - const size = parseFloat(fontSizeStr); - if (Number.isFinite(size)) { - // Check the unit - only convert if it's in points - if (fontSizeStr.endsWith('pt')) { - result.fontSizePx = ptToPx(size); - } else { - // px or unitless - already in pixels - result.fontSizePx = size; - } - } - } - if (typeof attrs.fontFamily === 'string') { - result.fontFamily = attrs.fontFamily; - } - } - } - - return Object.keys(result).length > 0 ? result : undefined; - }; - - // Recursively find first text node - const findFirstTextFont = (nodes: PMNode[]): { fontSizePx?: number; fontFamily?: string } | undefined => { - for (const node of nodes) { - if (!node) continue; - - // If it's a text node, check its marks - if (node.type === 'text') { - const font = extractFontFromMarks(node.marks); - if (font) return font; - } - - // If it's a run node, check its content - if (node.type === 'run' && Array.isArray(node.content)) { - // First check the run's own marks - const runFont = extractFontFromMarks(node.marks); - // Then check children - const childFont = findFirstTextFont(node.content); - // Merge: child takes precedence for fontSizePx - if (runFont || childFont) { - return { - fontSizePx: childFont?.fontSizePx ?? runFont?.fontSizePx, - fontFamily: childFont?.fontFamily ?? runFont?.fontFamily, - }; - } - } - - // Handle other container nodes - if (Array.isArray(node.content)) { - const font = findFirstTextFont(node.content); - if (font) return font; - } - } - return undefined; - }; - - const font = findFirstTextFont(para.content); - return font; -}; - const applyInlineRunProperties = ( run: TextRun, runProperties: RunProperties | undefined, From af41d9b36e9b44eee958f9d0f5b48e1d832d2a2a Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 12:33:45 -0300 Subject: [PATCH 79/85] fix: font family resolution --- packages/layout-engine/style-engine/src/ooxml/index.ts | 2 +- .../super-editor/src/tests/import/hyperlinkImporter.test.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index a774b1817..58977f40d 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -294,7 +294,7 @@ export function resolveDocxFontFamily( } let resolved = ascii; - if (docx && themeAscii) { + if (docx && themeAscii && !resolved) { const theme = docx['word/theme/theme1.xml'] as Record | undefined; const themeElements = theme?.elements as Array> | undefined; if (themeElements?.length) { diff --git a/packages/super-editor/src/tests/import/hyperlinkImporter.test.js b/packages/super-editor/src/tests/import/hyperlinkImporter.test.js index 20fc83349..dcd945aed 100644 --- a/packages/super-editor/src/tests/import/hyperlinkImporter.test.js +++ b/packages/super-editor/src/tests/import/hyperlinkImporter.test.js @@ -34,7 +34,7 @@ describe('HyperlinkNodeImporter', () => { const textStyleMark = marks.find((mark) => mark.type === 'textStyle'); expect(textStyleMark).toBeDefined(); - expect(textStyleMark.attrs.fontFamily).toBe('Aptos, Arial, sans-serif'); + expect(textStyleMark.attrs.fontFamily).toBe('Arial, sans-serif'); expect(textStyleMark.attrs.fontSize).toBe('10pt'); expect(linkMark.attrs.href).toBe( @@ -45,7 +45,7 @@ describe('HyperlinkNodeImporter', () => { // Capture the textStyle mark expect(textStyleMark.attrs.styleId).toBe('Hyperlink'); - expect(textStyleMark.attrs.fontFamily).toBe('Aptos, Arial, sans-serif'); + expect(textStyleMark.attrs.fontFamily).toBe('Arial, sans-serif'); expect(textStyleMark.attrs.fontSize).toBe('10pt'); }); From 4bb0abcba12ac60809542d7cc7e20f976b5448a3 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 12:34:11 -0300 Subject: [PATCH 80/85] fix: adjust table band size translators to parse integer --- .../layout-engine/style-engine/src/ooxml/styles-types.ts | 6 +++--- .../w/tblStyleColBandSize/tblStyleColBandSize-translator.js | 4 ++-- .../tblStyleColBandSize-translator.test.js | 4 ++-- .../w/tblStyleRowBandSize/tblStyleRowBandSize-translator.js | 4 ++-- .../tblStyleRowBandSize-translator.test.js | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts index 0a35f8df1..9224e99d7 100644 --- a/packages/layout-engine/style-engine/src/ooxml/styles-types.ts +++ b/packages/layout-engine/style-engine/src/ooxml/styles-types.ts @@ -159,9 +159,9 @@ export interface TableProperties { /** Table style identifier. */ tableStyleId?: string; /** Table style column band size. */ - tableStyleColBandSize?: string; + tableStyleColBandSize?: number; /** Table style row band size. */ - tableStyleRowBandSize?: string; + tableStyleRowBandSize?: number; /** Table width properties. */ tableWidth?: MeasurementProperties; /** Floating table properties. */ @@ -383,7 +383,7 @@ export type TableStyleType = */ export interface TableStyleProperties { /** Table style property type. */ - type?: string; + type?: TableStyleType; /** Paragraph properties for the table style. */ paragraphProperties?: ParagraphProperties; /** Run properties for the table style. */ diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.js index 63c61e39e..3d9465f1c 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.js @@ -1,5 +1,5 @@ import { NodeTranslator } from '@translator'; -import { createSingleAttrPropertyHandler } from '../../utils.js'; +import { createSingleIntegerPropertyHandler } from '../../utils.js'; /** * The NodeTranslator instance for the tblStyleColBandSize element. @@ -7,5 +7,5 @@ import { createSingleAttrPropertyHandler } from '../../utils.js'; * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 657 */ export const translator = NodeTranslator.from( - createSingleAttrPropertyHandler('w:tblStyleColBandSize', 'tableStyleColBandSize'), + createSingleIntegerPropertyHandler('w:tblStyleColBandSize', 'tableStyleColBandSize'), ); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.test.js index 27ba8fedd..7074633ef 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.test.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleColBandSize/tblStyleColBandSize-translator.test.js @@ -5,7 +5,7 @@ describe('w:tblStyleColBandSize translator', () => { describe('encode', () => { it('extracts the w:val attribute', () => { const result = translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] }); - expect(result).toBe('1'); + expect(result).toBe(1); }); it('returns undefined if w:val is missing', () => { @@ -16,7 +16,7 @@ describe('w:tblStyleColBandSize translator', () => { describe('decode', () => { it('creates a w:tblStyleColBandSize element with the value in w:val', () => { - const { attributes: result } = translator.decode({ node: { attrs: { tableStyleColBandSize: '2' } } }); + const { attributes: result } = translator.decode({ node: { attrs: { tableStyleColBandSize: 2 } } }); expect(result).toEqual({ 'w:val': '2' }); }); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.js index 710c3e471..67cdbd08a 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.js @@ -1,5 +1,5 @@ import { NodeTranslator } from '@translator'; -import { createSingleAttrPropertyHandler } from '../../utils.js'; +import { createSingleIntegerPropertyHandler } from '../../utils.js'; /** * The NodeTranslator instance for the tblStyleRowBandSize element. @@ -7,5 +7,5 @@ import { createSingleAttrPropertyHandler } from '../../utils.js'; * @see {@link https://ecma-international.org/publications-and-standards/standards/ecma-376/} "Fundamentals And Markup Language Reference", page 660 */ export const translator = NodeTranslator.from( - createSingleAttrPropertyHandler('w:tblStyleRowBandSize', 'tableStyleRowBandSize'), + createSingleIntegerPropertyHandler('w:tblStyleRowBandSize', 'tableStyleRowBandSize'), ); diff --git a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.test.js b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.test.js index 5175fa464..938b6cb4e 100644 --- a/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.test.js +++ b/packages/super-editor/src/core/super-converter/v3/handlers/w/tblStyleRowBandSize/tblStyleRowBandSize-translator.test.js @@ -5,7 +5,7 @@ describe('w:tblStyleRowBandSize translator', () => { describe('encode', () => { it('extracts the w:val attribute', () => { const result = translator.encode({ nodes: [{ attributes: { 'w:val': '1' } }] }); - expect(result).toBe('1'); + expect(result).toBe(1); }); it('returns undefined if w:val is missing', () => { @@ -16,7 +16,7 @@ describe('w:tblStyleRowBandSize translator', () => { describe('decode', () => { it('creates a w:tblStyleRowBandSize element with the value in w:val', () => { - const { attributes: result } = translator.decode({ node: { attrs: { tableStyleRowBandSize: '2' } } }); + const { attributes: result } = translator.decode({ node: { attrs: { tableStyleRowBandSize: 2 } } }); expect(result).toEqual({ 'w:val': '2' }); }); From 0c3fbc17db57a7aa76e45ff828021e8c633d58d4 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 12:36:15 -0300 Subject: [PATCH 81/85] feat: implement style resolution for table cells --- .../pm-adapter/src/converters/table.ts | 23 ++- .../style-engine/src/ooxml/index.test.ts | 96 ++++++++++++ .../style-engine/src/ooxml/index.ts | 145 +++++++++++++++++- 3 files changed, 249 insertions(+), 15 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/converters/table.ts b/packages/layout-engine/pm-adapter/src/converters/table.ts index 03c0e6056..1a96de999 100644 --- a/packages/layout-engine/pm-adapter/src/converters/table.ts +++ b/packages/layout-engine/pm-adapter/src/converters/table.ts @@ -42,6 +42,7 @@ import { applySdtMetadataToParagraphBlocks, applySdtMetadataToTableBlock, } from '../sdt/index.js'; +import { TableProperties } from '@superdoc/style-engine/ooxml'; type ParagraphConverter = ( node: PMNode, @@ -76,18 +77,21 @@ type ParseTableCellArgs = { cellNode: PMNode; rowIndex: number; cellIndex: number; + numCells: number; + numRows: number; context: TableParserDependencies; defaultCellPadding?: BoxSpacing; - tableStyleId?: string; + tableProperties?: TableProperties; }; type ParseTableRowArgs = { rowNode: PMNode; rowIndex: number; + numRows: number; context: TableParserDependencies; defaultCellPadding?: BoxSpacing; /** Table style to pass to paragraph converter for style cascade */ - tableStyleId?: string; + tableProperties?: TableProperties; }; const isTableRowNode = (node: PMNode): boolean => node.type === 'tableRow' || node.type === 'table_row'; @@ -190,7 +194,7 @@ const normalizeRowHeight = (rowProps?: Record): NormalizedRowHe * // Returns: null */ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { - const { cellNode, rowIndex, cellIndex, context, defaultCellPadding, tableStyleId } = args; + const { cellNode, rowIndex, cellIndex, numCells, numRows, context, defaultCellPadding, tableProperties } = args; if (!isTableCellNode(cellNode) || !Array.isArray(cellNode.content)) { return null; } @@ -217,10 +221,10 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { // This allows paragraphs inside table cells to inherit table style's pPr // Also includes backgroundColor for auto text color resolution const cellConverterContext: ConverterContext | undefined = - tableStyleId || cellBackgroundColor + tableProperties || cellBackgroundColor ? ({ ...context.converterContext, - ...(tableStyleId && { tableInfo: { tableStyleId } }), + ...(tableProperties && { tableInfo: { tableProperties, rowIndex, cellIndex, numCells, numRows } }), ...(cellBackgroundColor && { backgroundColor: cellBackgroundColor }), } as ConverterContext) : context.converterContext; @@ -495,7 +499,7 @@ const parseTableCell = (args: ParseTableCellArgs): TableCell | null => { * // Returns: null */ const parseTableRow = (args: ParseTableRowArgs): TableRow | null => { - const { rowNode, rowIndex, context, defaultCellPadding, tableStyleId } = args; + const { rowNode, rowIndex, context, defaultCellPadding, tableProperties, numRows } = args; if (!isTableRowNode(rowNode) || !Array.isArray(rowNode.content)) { return null; } @@ -508,7 +512,9 @@ const parseTableRow = (args: ParseTableRowArgs): TableRow | null => { cellIndex, context, defaultCellPadding, - tableStyleId, + tableProperties, + numCells: rowNode?.content?.length || 1, + numRows, }); if (parsedCell) { cells.push(parsedCell); @@ -728,9 +734,10 @@ export function tableNodeToBlock( const parsedRow = parseTableRow({ rowNode, rowIndex, + numRows: node?.content?.length ?? 1, context: parserDeps, defaultCellPadding, - tableStyleId: (node.attrs?.tableProperties as { tableStyleId?: string })?.tableStyleId, + tableProperties: node.attrs?.tableProperties as TableProperties | undefined, }); if (parsedRow) { rows.push(parsedRow); diff --git a/packages/layout-engine/style-engine/src/ooxml/index.test.ts b/packages/layout-engine/style-engine/src/ooxml/index.test.ts index bddf90d41..026541b8c 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.test.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.test.ts @@ -5,6 +5,7 @@ import { resolveDocxFontFamily, resolveRunProperties, resolveParagraphProperties, + resolveCellStyles, type OoxmlResolverParams, } from './index.js'; @@ -192,6 +193,41 @@ describe('ooxml - resolveRunProperties', () => { expect(result.underline).toBeUndefined(); expect(result.color).toEqual({ val: '00FF00' }); }); + + it('applies table cell run properties in cascade order', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + styles: { + TableStyle1: { + type: 'table', + runProperties: { color: { val: 'AAAAAA' } }, + tableProperties: { tableStyleRowBandSize: 1, tableStyleColBandSize: 1 }, + tableStyleProperties: { + wholeTable: { runProperties: { bold: true, fontSize: 10 } }, + band1Horz: { runProperties: { italic: true, color: { val: 'BBBBBB' }, fontSize: 11 } }, + band1Vert: { runProperties: { color: { val: 'CCCCCC' }, fontSize: 12 } }, + firstRow: { runProperties: { fontSize: 13 } }, + firstCol: { runProperties: { fontSize: 14 } }, + nwCell: { runProperties: { fontSize: 15 } }, + }, + }, + }, + }, + }); + const tableInfo = { + tableProperties: { tableStyleId: 'TableStyle1', tblLook: { firstRow: true, firstColumn: true } }, + rowIndex: 0, + cellIndex: 0, + numRows: 2, + numCells: 2, + }; + const result = resolveRunProperties(params, {}, null, tableInfo); + expect(result.fontSize).toBe(15); + expect(result.bold).toBe(true); + expect(result.italic).toBe(true); + expect(result.color).toEqual({ val: 'CCCCCC' }); + }); }); describe('ooxml - resolveParagraphProperties', () => { @@ -277,4 +313,64 @@ describe('ooxml - resolveParagraphProperties', () => { const result = resolveParagraphProperties(params, { tabStops: [{ pos: 2160 }] }); expect(result.tabStops).toEqual([{ pos: 2160 }]); }); + + it('applies table cell paragraph properties over table style props', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + styles: { + TableStyle1: { + type: 'table', + paragraphProperties: { spacing: { before: 120, after: 120 }, keepNext: true }, + tableProperties: { tableStyleRowBandSize: 1, tableStyleColBandSize: 1 }, + tableStyleProperties: { + firstRow: { paragraphProperties: { spacing: { after: 240 } } }, + }, + }, + }, + }, + }); + const tableInfo = { + tableProperties: { tableStyleId: 'TableStyle1', tblLook: { firstRow: true } }, + rowIndex: 0, + cellIndex: 2, + numRows: 3, + numCells: 4, + }; + const result = resolveParagraphProperties(params, {}, tableInfo); + expect(result.spacing).toEqual({ before: 120, after: 240 }); + expect(result.keepNext).toBe(true); + }); +}); + +describe('ooxml - resolveCellStyles', () => { + it('respects band sizes and tblLook flags', () => { + const params = buildParams({ + translatedLinkedStyles: { + ...emptyStyles, + styles: { + TableStyleBand: { + type: 'table', + tableProperties: { tableStyleRowBandSize: 2, tableStyleColBandSize: 3 }, + tableStyleProperties: { + wholeTable: { runProperties: { fontSize: 10 } }, + band1Vert: { runProperties: { fontSize: 20 } }, + band2Vert: { runProperties: { fontSize: 30 } }, + band1Horz: { runProperties: { fontSize: 40 } }, + band2Horz: { runProperties: { fontSize: 50 } }, + }, + }, + }, + }, + }); + const tableInfo = { + tableProperties: { tableStyleId: 'TableStyleBand', tblLook: { noVBand: true } }, + rowIndex: 3, + cellIndex: 2, + numRows: 5, + numCells: 6, + }; + const result = resolveCellStyles('runProperties', tableInfo, params.translatedLinkedStyles!); + expect(result).toEqual([{ fontSize: 10 }, { fontSize: 50 }]); + }); }); diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index 58977f40d..18453cb58 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -14,7 +14,7 @@ import { import type { PropertyObject } from '../cascade.js'; import type { ParagraphProperties, RunProperties } from './types.ts'; import type { NumberingProperties } from './numbering-types.ts'; -import type { StylesDocumentProperties } from './styles-types.ts'; +import type { StylesDocumentProperties, TableStyleType, TableProperties, TableLookProperties } from './styles-types.ts'; export { combineIndentProperties, combineProperties, combineRunProperties, orderDefaultsAndNormal }; export type { PropertyObject }; @@ -28,7 +28,11 @@ export interface OoxmlResolverParams { } export interface TableInfo { - tableStyleId: string | null | undefined; + tableProperties: TableProperties | null | undefined; + rowIndex: number; + cellIndex: number; + numCells: number; + numRows: number; } export function resolveRunProperties( @@ -57,9 +61,18 @@ export function resolveRunProperties( // Getting table style run properties const tableStyleProps = ( - tableInfo?.tableStyleId ? resolveStyleChain('runProperties', params, tableInfo?.tableStyleId) : {} + tableInfo?.tableProperties?.tableStyleId + ? resolveStyleChain('runProperties', params, tableInfo?.tableProperties?.tableStyleId) + : {} ) as RunProperties; + // Getting cell style run properties + const cellStyleProps: RunProperties[] = resolveCellStyles( + 'runProperties', + tableInfo, + params.translatedLinkedStyles, + ); + // Get run properties from direct character style, unless it's inside a TOC paragraph style let runStyleProps = {} as RunProperties; if (!paragraphStyleId?.startsWith('TOC')) { @@ -89,9 +102,17 @@ export function resolveRunProperties( delete inlineRpr.underline; } - styleChain = [...defaultsChain, tableStyleProps, paragraphStyleProps, runStyleProps, inlineRpr, numberingProps]; + styleChain = [ + ...defaultsChain, + tableStyleProps, + ...cellStyleProps, + paragraphStyleProps, + runStyleProps, + inlineRpr, + numberingProps, + ]; } else { - styleChain = [...defaultsChain, tableStyleProps, paragraphStyleProps, runStyleProps, inlineRpr]; + styleChain = [...defaultsChain, tableStyleProps, ...cellStyleProps, paragraphStyleProps, runStyleProps, inlineRpr]; } const finalProps = combineRunProperties(styleChain); @@ -152,13 +173,22 @@ export function resolveParagraphProperties( // Table properties const tableProps = ( - tableInfo?.tableStyleId ? resolveStyleChain('paragraphProperties', params, tableInfo?.tableStyleId) : {} + tableInfo?.tableProperties?.tableStyleId + ? resolveStyleChain('paragraphProperties', params, tableInfo?.tableProperties?.tableStyleId) + : {} ) as ParagraphProperties; + // Cell style properties + const cellStyleProps: ParagraphProperties[] = resolveCellStyles( + 'paragraphProperties', + tableInfo, + params.translatedLinkedStyles, + ); + // Resolve property chain - regular properties are treated differently from indentation // Chain for regular properties const defaultsChain = orderDefaultsAndNormal(defaultProps, normalProps, isNormalDefault); - const propsChain = [...defaultsChain, tableProps, numberingProps, styleProps, inlineProps]; + const propsChain = [...defaultsChain, tableProps, ...cellStyleProps, numberingProps, styleProps, inlineProps]; // Chain for indentation properties let indentChain: ParagraphProperties[]; @@ -319,3 +349,104 @@ export function resolveDocxFontFamily( } return resolved; } + +export function resolveCellStyles( + propertyType: 'paragraphProperties' | 'runProperties', + tableInfo: TableInfo | null | undefined, + translatedLinkedStyles: StylesDocumentProperties, +): T[] { + if (tableInfo == null || !tableInfo.tableProperties?.tableStyleId) { + return []; + } + const cellStyleProps: T[] = []; + if (tableInfo != null && tableInfo.tableProperties.tableStyleId) { + const tableStyleDef = translatedLinkedStyles.styles[tableInfo.tableProperties.tableStyleId]; + const tableStylePropsDef = tableStyleDef?.tableProperties; + const rowBandSize = tableStylePropsDef?.tableStyleRowBandSize ?? 1; + const colBandSize = tableStylePropsDef?.tableStyleColBandSize ?? 1; + const cellStyleTypes = determineCellStyleTypes( + tableInfo.tableProperties?.tblLook, + tableInfo.rowIndex, + tableInfo.cellIndex, + tableInfo.numRows, + tableInfo.numCells, + rowBandSize, + colBandSize, + ); + cellStyleTypes.forEach((styleType) => { + const typeProps = tableStyleDef?.tableStyleProperties?.[styleType]?.[propertyType] as T; + if (typeProps) { + cellStyleProps.push(typeProps); + } + }); + } + return cellStyleProps; +} + +function determineCellStyleTypes( + tblLook: TableLookProperties | null | undefined, + rowIndex: number, + cellIndex: number, + numRows?: number | null, + numCells?: number | null, + rowBandSize = 1, + colBandSize = 1, +): TableStyleType[] { + const styleTypes: TableStyleType[] = ['wholeTable']; + + const normalizedRowBandSize = rowBandSize > 0 ? rowBandSize : 1; + const normalizedColBandSize = colBandSize > 0 ? colBandSize : 1; + const rowGroup = Math.floor(rowIndex / normalizedRowBandSize); + const colGroup = Math.floor(cellIndex / normalizedColBandSize); + + if (!tblLook?.noHBand) { + if (rowGroup % 2 === 0) { + styleTypes.push('band1Horz'); + } else { + styleTypes.push('band2Horz'); + } + } + + if (!tblLook?.noVBand) { + if (colGroup % 2 === 0) { + styleTypes.push('band1Vert'); + } else { + styleTypes.push('band2Vert'); + } + } + + if (tblLook?.firstRow && rowIndex === 0) { + styleTypes.push('firstRow'); + } + if (tblLook?.firstColumn && cellIndex === 0) { + styleTypes.push('firstCol'); + } + if (tblLook?.lastRow && numRows != null && numRows > 0 && rowIndex === numRows - 1) { + styleTypes.push('lastRow'); + } + if (tblLook?.lastColumn && numCells != null && numCells > 0 && cellIndex === numCells - 1) { + styleTypes.push('lastCol'); + } + + if (rowIndex === 0 && cellIndex === 0) { + styleTypes.push('nwCell'); + } + if (rowIndex === 0 && numCells != null && numCells > 0 && cellIndex === numCells - 1) { + styleTypes.push('neCell'); + } + if (numRows != null && numRows > 0 && rowIndex === numRows - 1 && cellIndex === 0) { + styleTypes.push('swCell'); + } + if ( + numRows != null && + numRows > 0 && + numCells != null && + numCells > 0 && + rowIndex === numRows - 1 && + cellIndex === numCells - 1 + ) { + styleTypes.push('seCell'); + } + + return styleTypes; +} From 6e7447cfa2c57e65660d08fa96086287bdc768af Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 14:31:47 -0300 Subject: [PATCH 82/85] fix: normalization of underline value --- .../pm-adapter/src/attributes/paragraph.ts | 12 +++++++----- .../pm-adapter/src/marks/application.ts | 3 +++ packages/word-layout/src/types.ts | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts index 39dd7a5e1..0d3006b6e 100644 --- a/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts +++ b/packages/layout-engine/pm-adapter/src/attributes/paragraph.ts @@ -324,11 +324,13 @@ export const computeRunAttrs = ( fontSize: runProps.fontSize ? ptToPx(runProps.fontSize / 2)! : defaultFontSizePx, bold: runProps.bold, italic: runProps.italic, - underline: runProps.underline && - runProps.underline!['w:val'] && { - style: (runProps.underline!['w:val'] as 'single' | 'double' | 'dotted' | 'dashed' | 'wavy') || 'single', - color: runProps.underline!['w:color'] || undefined, - }, + underline: + runProps.underline && runProps.underline!['w:val'] && runProps.underline!['w:val'] !== 'none' + ? { + style: (runProps.underline!['w:val'] as 'single' | 'double' | 'dotted' | 'dashed' | 'wavy') || 'single', + color: runProps.underline!['w:color'] || undefined, + } + : null, strike: runProps.strike, color: normalizeColor(runProps.color?.val), highlight: runProps.highlight?.['w:val'] || undefined, diff --git a/packages/layout-engine/pm-adapter/src/marks/application.ts b/packages/layout-engine/pm-adapter/src/marks/application.ts index 97129b0c0..dcce58bf1 100644 --- a/packages/layout-engine/pm-adapter/src/marks/application.ts +++ b/packages/layout-engine/pm-adapter/src/marks/application.ts @@ -588,6 +588,9 @@ export const collectTrackedChangeFromMarks = (marks?: PMMark[]): TrackedChangeMe * ``` */ export const normalizeUnderlineStyle = (value: unknown): UnderlineStyle | undefined => { + if (value === 'none') { + return undefined; + } if (value === undefined || value === null) { return 'single'; } diff --git a/packages/word-layout/src/types.ts b/packages/word-layout/src/types.ts index 3b8b04691..780f1f0f4 100644 --- a/packages/word-layout/src/types.ts +++ b/packages/word-layout/src/types.ts @@ -41,7 +41,7 @@ export type ResolvedRunProperties = { underline?: { style?: 'single' | 'double' | 'dotted' | 'dashed' | 'wavy'; color?: string; - }; + } | null; strike?: boolean; color?: string; highlight?: string; From 0eb99f13fccb2c4263ae58affc2ea03246641a5f Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 15:19:20 -0300 Subject: [PATCH 83/85] fix: font family resolution --- .../layout-engine/style-engine/src/cascade.ts | 16 +++++++++++++++- .../style-engine/src/ooxml/index.ts | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/layout-engine/style-engine/src/cascade.ts b/packages/layout-engine/style-engine/src/cascade.ts index 8fdc5bcac..054eb63db 100644 --- a/packages/layout-engine/style-engine/src/cascade.ts +++ b/packages/layout-engine/style-engine/src/cascade.ts @@ -10,7 +10,7 @@ * - layout-engine's style resolution (for rendering) */ -import { ParagraphProperties, RunProperties } from './ooxml/types'; +import { ParagraphProperties, RunFontFamilyProperties, RunProperties } from './ooxml/types'; export type PropertyObject = ParagraphProperties | RunProperties; @@ -152,6 +152,20 @@ export function orderDefaultsAndNormal( export function combineRunProperties(propertiesArray: RunProperties[]): RunProperties { return combineProperties(propertiesArray, { fullOverrideProps: ['color'], + specialHandling: { + fontFamily: (target: Record, source: Record): unknown => { + const fontFamilySource = { ...(source.fontFamily as object) } as RunFontFamilyProperties; + const fontFamilyTarget = { ...(target.fontFamily as object) } as RunFontFamilyProperties; + if (fontFamilySource.asciiTheme != null) { + delete fontFamilyTarget.ascii; + delete fontFamilyTarget.asciiTheme; + } + if (fontFamilySource.ascii != null) { + delete fontFamilyTarget.asciiTheme; + } + return { ...(fontFamilyTarget as object), ...(fontFamilySource as object) }; + }, + }, }); } diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index 18453cb58..5e86cb564 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -324,7 +324,7 @@ export function resolveDocxFontFamily( } let resolved = ascii; - if (docx && themeAscii && !resolved) { + if (docx && themeAscii) { const theme = docx['word/theme/theme1.xml'] as Record | undefined; const themeElements = theme?.elements as Array> | undefined; if (themeElements?.length) { From e9d3e8731cae983d657ade5bdbd265539b0f2342 Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 16:28:20 -0300 Subject: [PATCH 84/85] fix: numbering props resolution --- packages/layout-engine/style-engine/src/ooxml/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/layout-engine/style-engine/src/ooxml/index.ts b/packages/layout-engine/style-engine/src/ooxml/index.ts index 5e86cb564..33b0fd799 100644 --- a/packages/layout-engine/style-engine/src/ooxml/index.ts +++ b/packages/layout-engine/style-engine/src/ooxml/index.ts @@ -301,10 +301,12 @@ export function getNumberingProperties( const abstractProps = levelDefinition[propertyType as keyof typeof levelDefinition] as T; - if (levelDefinition?.styleId) { - abstractProps.styleId = levelDefinition?.styleId; + if (abstractProps != null) { + if (levelDefinition?.styleId) { + abstractProps.styleId = levelDefinition?.styleId; + } + propertiesChain.push(abstractProps); } - propertiesChain.push(abstractProps); propertiesChain.reverse(); return combineProperties(propertiesChain); From 22b973c5e58f849c43e12d23a0e59d47b09ee47c Mon Sep 17 00:00:00 2001 From: Luccas Correa Date: Wed, 21 Jan 2026 17:36:09 -0300 Subject: [PATCH 85/85] test: update e2e test screenshots --- ...-advanced-tables-docx-1-chromium-linux.png | Bin 102752 -> 103643 bytes ...st-missing-items-docx-1-chromium-linux.png | Bin 33625 -> 33795 bytes ...nts-contract-acc-docx-1-chromium-linux.png | Bin 28206 -> 28209 bytes ...m-list-numbering-docx-1-chromium-linux.png | Bin 34126 -> 34175 bytes ...nts-custom-list1-docx-1-chromium-linux.png | Bin 28506 -> 28388 bytes ...ported-list-font-docx-1-chromium-linux.png | Bin 25813 -> 25803 bytes ...s-features-lists-docx-1-chromium-linux.png | Bin 42498 -> 42377 bytes ...ist-def-fallback-docx-1-chromium-linux.png | Bin 30601 -> 30660 bytes ...rmatting-indents-docx-1-chromium-linux.png | Bin 26854 -> 27550 bytes ...with-table-break-docx-1-chromium-linux.png | Bin 31007 -> 31209 bytes ...list-base-indent-docx-1-chromium-linux.png | Bin 34184 -> 34275 bytes ...nked-combos-demo-docx-1-chromium-linux.png | Bin 149103 -> 149111 bytes ...nked-combos-demo-docx-1-chromium-linux.png | Bin 150276 -> 150521 bytes ...nked-combos-demo-docx-1-chromium-linux.png | Bin 153641 -> 153897 bytes ...tyle-combos-demo-docx-1-chromium-linux.png | Bin 107828 -> 107833 bytes ...nked-combos-demo-docx-1-chromium-linux.png | Bin 180370 -> 180756 bytes ...nked-combos-demo-docx-1-chromium-linux.png | Bin 170574 -> 170796 bytes ...nked-combos-demo-docx-1-chromium-linux.png | Bin 113151 -> 113159 bytes ...nked-combos-demo-docx-1-chromium-linux.png | Bin 203082 -> 203309 bytes ...mbering-sub-list-docx-1-chromium-linux.png | Bin 27154 -> 27469 bytes ...ts-sublist-issue-docx-1-chromium-linux.png | Bin 27162 -> 27458 bytes ...able-width-issue-docx-1-chromium-linux.png | Bin 37187 -> 37187 bytes ...le-widths-SD-732-docx-1-chromium-linux.png | Bin 122421 -> 124774 bytes ...-block-bookmarks-docx-1-chromium-linux.png | Bin 32121 -> 32149 bytes ...abled-in-viewing-mode-1-chromium-linux.png | Bin 69463 -> 69580 bytes .../ordered-basic-list-chromium-linux.png | Bin 5783 -> 5797 bytes ...rdered-change-list-type-chromium-linux.png | Bin 7022 -> 7017 bytes ...red-change-sublist-type-chromium-linux.png | Bin 7732 -> 7660 bytes ...rdered-enter-after-list-chromium-linux.png | Bin 7350 -> 7389 bytes ...dered-enter-before-list-chromium-linux.png | Bin 7334 -> 7330 bytes ...dered-enter-inside-list-chromium-linux.png | Bin 7329 -> 7345 bytes .../ordered-indent-list-chromium-linux.png | Bin 6957 -> 6965 bytes ...ine-images-within-lists-chromium-linux.png | Bin 45869 -> 45651 bytes ...ed-list-and-delete-item-chromium-linux.png | Bin 6988 -> 7015 bytes ...ed-lists-in-table-cells-chromium-linux.png | Bin 11782 -> 11161 bytes .../ordered-nested-list-chromium-linux.png | Bin 6957 -> 6985 bytes ...ested-list-with-sublist-chromium-linux.png | Bin 8555 -> 8590 bytes ...aste-content-into-lists-chromium-linux.png | Bin 11537 -> 11579 bytes ...twice-and-exit-the-list-chromium-linux.png | Bin 8471 -> 8448 bytes .../ordered-shift-tab-chromium-linux.png | Bin 6988 -> 7000 bytes .../ordered-table-in-list-chromium-linux.png | Bin 9213 -> 9224 bytes ...red-turn-text-into-list-chromium-linux.png | Bin 11735 -> 11718 bytes .../unordered-basic-list-chromium-linux.png | Bin 5721 -> 5725 bytes ...rdered-change-list-type-chromium-linux.png | Bin 7254 -> 7247 bytes ...red-change-sublist-type-chromium-linux.png | Bin 7717 -> 7718 bytes ...rdered-enter-after-list-chromium-linux.png | Bin 6845 -> 6856 bytes ...dered-enter-before-list-chromium-linux.png | Bin 6845 -> 6841 bytes ...dered-enter-inside-list-chromium-linux.png | Bin 6846 -> 6841 bytes .../unordered-indent-list-chromium-linux.png | Bin 6734 -> 6728 bytes ...ine-images-within-lists-chromium-linux.png | Bin 45451 -> 45335 bytes ...ed-list-and-delete-item-chromium-linux.png | Bin 6754 -> 6765 bytes ...ed-lists-in-table-cells-chromium-linux.png | Bin 11275 -> 10643 bytes .../unordered-nested-list-chromium-linux.png | Bin 6734 -> 6728 bytes ...ested-list-with-sublist-chromium-linux.png | Bin 8292 -> 8310 bytes ...aste-content-into-lists-chromium-linux.png | Bin 11051 -> 10914 bytes ...twice-and-exit-the-list-chromium-linux.png | Bin 8443 -> 8409 bytes .../unordered-shift-tab-chromium-linux.png | Bin 6754 -> 6745 bytes ...unordered-table-in-list-chromium-linux.png | Bin 9132 -> 9132 bytes ...red-turn-text-into-list-chromium-linux.png | Bin 10635 -> 10621 bytes ...-inside-a-nested-list-1-chromium-linux.png | Bin 15618 -> 15607 bytes ...-inline-inside-a-list-1-chromium-linux.png | Bin 10940 -> 10926 bytes 61 files changed, 0 insertions(+), 0 deletions(-) diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-tables-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-tables-docx-1-chromium-linux.png index 287225f0970819f9803e44a2f6ff45749760f3d5..d8893084341cdf55e4c878c9a7ef93d0bc5f2c9e 100644 GIT binary patch literal 103643 zcmeFZRZv~g7A*)Nc!1!+-7UC71lOR!-GaMI0wKW(aBz2bcXxM(puyesE$;2t^{T7- zqr3X6>+K&Ro5S8q#vC#ifnVgrQIPPFprD{oBqc-?p`c*FA7R@OUV$&NY}w^dP;a3m zMLsIKCLJups$t!dz@4NkeSpR4W`5h)*r+)=)4FWu;yjC&`)_{v<;pO4YXBWI@#r(3 z8s;D^fqZoD=IUu;YHE_}ob1xV-Z~x{5b!79zn8aD0|xqkt_V0iC~ETmT%m1HG9v%E z@P9zZ{r5(WS1|AYd*ip)aC-l}Zvx>>+kfxNLVx!?@IN<7P`ro2{O<>f{qGNa8J+(< zhUnug}$pY;|ICaxj6@B8-sNerq6_S(|Sc*XinD9v+QY z0@1+AYPrTrldd{J!0l|I+CtQ&+@Ra}XeqzAm`MS@+;o)KQ&6-vJA3OpGz=vXk<;%>u zBqSjr8P{(0_DUL4ARv{FVYG+h;@}wiL*@r@ez4u8ZLhNq3@`#O0jXK8vol=p3bZ4< zxjEfHX!E+eh@c($!rJ0?zMUZ&tS0@iYrWh+^>6W$KawaBRO7X-&!ZCU((Hhm#1mfD!8o z#02k$jEaf_!>Cr4CK`-0Gc$vc@3=c5T7n4&3)`$z?{b`ynwlyw6h$L{cXikZhM$6h zg6?pCDqrbvp*r(Qysy=9H*!ZVRY*`rjHsupOGK)h&3J&rW<}ryPYhm==-b@xWNvgZ z-s9Dx4fvdy@o{vP$^zvA<$SSFd_j*ZEM8txQoYV!C}5OhC9<^}oneu%zU&8{!{(8P z5eqI%PAXlvf%Q@KZPK>kqtv~9fyiO2@gPpU=GU*aTJ`oX0Qjf@0E`yJ!O>BnF^6I83~>8BQ+x7Z_KEX9&v1@%jOKa-Xjo}1%Ypo>dP%)DW2 zXl`mM(QX6-`3r*qO(hVKX{YsBCF;GZ+{c7OlFI zvn^>WD=VyKc9S96?)a7#?_!PWFLE}kEzO06g*)|N?qZlUaaeQ&a>~DOyiDb9G?KEv zc@PZ^jqTA?VfhpR#U)yC++i2Piz%ODJ5TNyMK!g#O!4rfUi`rb3V7$%yh9s) zUS9p=w9jtkFkLJYQ3lKL(Kh;*1GrVI^$zg-h$|ge^m*jnA4NpELJ7FF zw6sp9`@jRtR~T;*9h`3T>b7{IFUL{W7#>6g-B0984$Z#q42~jI`;#l5YQUgpUQ<)U zqno3;+1sB+BcJkjKU}`O0z$7sp941$_25EEO-4pmLa+ABqhx4m`tR@Gw};bsbTwcF zPrL<1MXGb9)u+@GZ!pROESBI6`|)CD!_6RUh8mky<_1G^x67Gg&1R457+qpsdl7X` z6**{q53mP$%u?7*NA527x1>v{RA4$N#6kidPjF9d`Xj0MU5=D>e!K}_AmVox30xc- zd%vePfS0F~J2H_iEf3HIY;VHdpp>{pdX)l+QwWtbjv$}^^+mCgPr z^wg8%cy?1rRIyq)IsJ2aE|JJ89=i!Gfp#xmRE}&SDjr)`PY;|;|JTTkkp6@D%51f6 zuU(_S=LE;Y1*eCb(>Vw4=SP<;-7PGW;RKZmBgs>Y)vep}e+;$gBYl61#_|+0%d!pP zy~%yx4Sadqtt;&|#Og&EpxOQ8EvE~xM>Of=U**gJ1d#fC7u&Xh+{{_k%aYKLsET<^upl@Mv72h`djv= zr+XW^dA;t2#zsRMW$D)M2SLSwM#PhK2+DDS)#73LUwhZ9tQJ)dla%cxB1gp;3(-m9MOiMT^?DM2`dsJyUY6}V1Fkn<_ z8%lc<(4jX~`<`zC;u-B!^@rr?ZojnN;h&fna{FQ>`^m#o5?{>mD^S1 zMrG7jZrE!enc1?nwdG%l29HYkVT&tg{1p3X4KeoTBWl-ce|6>Jh);$jZ%pNF!&q`q zuo|;8YDGly30ZznXK)mO!qV4fFZv3;+6PpWwa(w;tpHwyx4x158%f3_y4;&C)TlPk zk%=cHBDy}9&m0OxK)k;`9!=t{T!ObV>k2@Zuv^bgNzuubOUCE64#~zuQ7_eL)=#vPA0P7jb`|YO2qfm(Cc&tfJwpE(vqeX44eGWF!b`N8(gy2{%k+r)?-xLu66uE zA)uFc`%3{qM`iaju&=S4&oYYX3#~SvrZ;v&$0rD6cO$ZCvuykEyZwiD^7x48cr-2QTJQsPEcWc0?5xAz)L7xUp)nlghA zU(6??CePb5{qLX%wYZ+X!u&c@Tkg&0aztpA38VN4?CBp49|q*blX1FrG&MDcpgz%I zGEdm+%PjxrZ)BC>Bu|1r~;E|&85x(MWLG0!JZ0zxlG~U9( z0uOPwLXK-7#kfwh`{lvB(g<8iN(zrVK;A5Y0f56>@4`RJXOZ6GeDsJ0M5oGfUh${o zl(Zcs6G?|yc3~mE!?sNIbfg{^7uP`S`ra3PKoth?aZv}#|JqmAI{`ANQ4NqYG3f`5 zY{E~B41tHM!^P-Kijd({VG;}Zrmi}k*S!YhA%Q~Rt9^ebMJu3NDkE)bdpFx{KP5MN zA_)wml&3F2Q3|$paByIhi>6m8>*eF;2aAm$>eIH!tNvW_7zJY7cDnXMWr_(kP0izl zYUEVfI}YwKg#|SC6y1;IV!#o4uehaP}7XkFulZiQj}NS@4XvjTSIA4^kEE^PmPsD>_Eq}9yrM8u*?iF97Z zK+iULp|sm%#zaD%bspD8|fRZk5lS63Jb>Nt)wG+pZ0;C&O{RRQy#@~ zlbe!vp=1>GxLgfT5%$-`nzb3tUJ8nW4`PQrLJ@zyMfWSU7~Fz24p1-le&es&tr=~+ zMwFp_K*!E(iFVZehJa{QCPg%pdc|f>D8XEpf`u`7$`;$TS4iP%KgLV0C}VFzvn}hb zz!Fm^#S^0s%N9JR{E;kD&pkk|T9oH`yVeO`PY~_ARgY#_YGzsic)jA8#6l^eT)e2@ zJ!w#O1-WQY9!lB_e!ZvFr>gaP{_G2>;Ap|C>rz5ziJLkb#{Q1r*K&%KrC&)@4qlB zP1=GqHKtaPq_=@YTS8lUU`F`7A6%!#qkkvnnE*OVzJS&d;We?6_kX!N&%&}Aqug;JLq??9QC7C z*yEvNDggL_&fx@0KL;)bgC!@KGDcq6f{ibya5!ScuA^goTtUiQ@}5)D`eoZA)6nFi z5O9H-2fL;u#rMquEMzK-m)fX{i4+djUFv)N4zM?-O0KjT9P=TT5bm3NR(5u!mWzuE zETRE^rVZwW-$&H&)q8)miWNPU%m{G_qYH1s{_|{j@7`H1ROJJ5HI5oMZGW*dPWJhi z#lzPxQvDT$r4BVRe+M-vf7W zV?mYTb=YnKI|~%$j8QOJc4ObZeWRoDQ?o`^#>x2D;?MT^*PDSS^K1PcO7q|^{hKFi zo%Y;&9`;cS=Iq~L!*`|RwtNQ-yS*-ysU*2@kjgfCLiZ=K2Lmx_Mp6U`4i6z=LuVNaNERcrFGWs*nN^OpD!vD4rAZ?0}m&QDNs~%8oZ9BJTTMR%J zfm!=P7=uA+RSf1|!~lvqqiUePAF-P4))>^0twM)sGYbmWb8} zOg=kcnAg_U#&sU^oN=?0uBS{q);j#hSJG~jc=-7lU~Iu!*}98fux$0Z=lWWrH7+OO zc3C74v#>Kq&Ke2^daY+5MezPv+1JmHM99y_ndi&wVthr@ec zo7CiF?Wy(?S+~o*XviDI^I6J**AJ*&pE#^YTe~Fl&?&_J>KbS6pKWAflK%HK*1>*; zsHU57$*%z_TmGhKhOyx6M9yuOG()3GURsgsJ!YdkP{QsPvW$FMMNxZnv8fLPdD04cp(*q*wZ zvbX2c$2yTf3;^W1WqR!^%^uOQee?taPxS|fhtVvCL7F?MGAPBl3#F1(FLMzLL{#50 zkeDw9O1@(D6ftj(s#;iVRW&GC7=d69P80xBg;qC16=yQaTS0NL*`xLW;4L`s@HjpoX=yRl4f3YL7%1wdThpKOUK3}D#^t%Cs)WW#}Sw9Zf#Wq`Gkdt z>D;N~>2-6G4!(6jO|wX?95BRw7CVfOyo+(QW+cHC-jD8EgJ2Vi@&iq{m}$lLj=&l$ zH9t5MdH_IGXxu$wJ|}-a+H>#|7K>Oj9_R&J%=H2xa13gIC=og@=DxZ&-XKbbzP`R9 z(f}w{*;3J)v1%uIXo=l5Y86I-5UdPl?Y)PDF7lREnDVwy{mZb(I3XHpJqh8DZ_*}M z%3j{y@8#|34Gj%>WhD!G_Z;_UWYsOPY~xlk#nFtPff+@w*~p}v_s9MQ?C*imf@o!2 zQ3|i_{Q^0{zXe1e8|v!;`<2FWORCs403}@p9k?;kPso=&V5Ma;hx)2jxl!-}(WJl3Wj$ERrTwx`X;L;q+a~CjKLXW6#t^bjYZ&qMlEE_P;Z^<@2s1;!Hbz6nVW58x9(W-w- z`Nv~gLq_ye&r>ZK{^Mzg0VFF&J~eENcyhxn@{0i%jx!Wf!SFZ=Uypo;N27(PqCt#wmN4AZ|mm|1$h?tIz&h zIfIC3D;8jfG+p=7k|*F9fbj<0;UIOGSB6G&SZfUbRba(vF9Ec~2LpWDr2p zg;jTn0Bzga;Bp*hP`U(vIRvzMkad!F0-G^XixeVqo3K{H)B~qNRN3l}xWA0kfDm@o z6H8vccld((ol_SWlv~*h=HA&aB1fX>bwa>I4ZtA^;V!DHEcw(YK;uQR8TK?0+VW1t z_;J`)fcH6-a+BelUW#u7Rec{7Z3_wfJe~Kb;IPu-CVjvvp69R zc1wg-ci8J}i#&XwJlp^~C4=?$PQP5!@R)|K zfaUoGJ?Ltj4ou=_qrKHuADPU>#l_>5X8wio@`*3^9ejbizdC^g4bJV;Qvni}4|brn zqRWzzk?~6H08yb-b0k&R2khnY)FOZt3uk}924-!Dh={1j^^|o&Y7^KPv|QjQbwb4Z*HKwr&6$(qIVN%7>+1^$mcOBryu3UnCgx@XkmWsgCf?+B zoChyH?Gx)F&o8m0;A{k(!JU9=P+Gg!c=m$I!?6hoL!y)TU93GbF4zGo`}_NYDm~iW z-QC$q0ayu@6ePf~3IP%EHqBRFd@N`%(@{|dRK2Z4(TGqmQViWngt5%kUb2zERMk*p z0(fBO)Ogik<3i3DO#{$Lqr>F@1@r(<4lz)Vk12Ofs~py>-? z0|Gn??}q<_2!#3s!wkfFK~ej&rQz>bGXSw>U5;#caXuPX2gKn)sFw|A37Y_1d2h>> zpdGO>5F?t+mFY*2i*^y6fm*CyX)+8p)aKfYW|*|P1@VqB@_$mpN3}xL;+az2=iNz~ zQ$>Nc{;saBm6fNB-f(Mc>w$&RA3xg1(mzv?1FHWk_5=7yH;jNJ;L zcjzZs6j{x?LHUjZ&!C9+pA<4Es>2`oc)l_htX{Cf!kwX{r3Zn~N#b?L0aX@Q`wDxV zs%fBt?{^2|5)%_=EcW%~0dEXroCVlM2cQJ!J!YH~W@q~ggbdh@B=K_I=IB15zD3VQ zd>Oo#D+_%N0q6gp+2@2K0hi^;`MC$+uvz*bO*1wyn8;V6dC6Wl{8U9meuDQ;K-!%J zg9f~>NHIRQGoue5px8kc9Pw)`CLln6OuKn><4Ncjf$Vr^uNbDRvAa%#c6 zeESP``p@;hX2>rrL1g^=@{)+x-U#f!3X@?CU^D>(S=jwTqUl9>fgK@DR|53l?sFl~ zR6F55Xe2@*VZaRz4l@FptPHq};&*Na2|s|*+08Zsk{XA9Bad5yxYbW!Z6^wOH9)X{ zg*TD@86Lb4Z8eY)GCN+pH}>ZSe>Q2=MXc;@+pLl^eV}11l9oe5dE<$Os4@sN8^U z52ywp4okp*1+E1WHvLqClZ66TllS8ts9A?wTi94w%3$RKxxc@&(`9Vkq*KfOKfM4} zo46u2m{zxQxb#P0!^bf|1WiYh;^~yA>8xKo`^~-xKx04^$O1VAAS9nh0dE*d;A8;L z075EEKkWv`Z@{35GZhpRY!dLgZ)|zW@Vz~P^6c09b0t`HAS7V%Dkt7Wb zO%Xf=MP?5Djt_`m!6UC%y;3y<#RQ+r@*N>zli4`A3`$h@AKI%JMs>CYye~*^-W-6) zH#}S(P=ojFVE8~>2$iX49K)>b4tU+w)s;aX00Y2z2_MUUDclc(cvBz(%skmAem*{f z?5)0tmt+$ZRuWMXaqBZPShQ4VKotkj;v?7tb%?q9 z6$Fi~;MJrZNd#O^05S#0xSef&eE&HWQ1oOTI|E=w2M8kAKi{uD|1tFP@`|uQcN)VC z#Dyu+tVN}3&~5d8hkT325;3{7ybQ(^DAvU+$taLrT7w`BtU0jh{$L=*Be}hC2xz*# zJvZGPD`^}*{ z2%G2rJ3GS7Qk=;LL74q`3g|(-GVan+1&>OA|~>@ z5r85aWRo=m19cxf3y&XZK67D@vj9-4zJiJ%&-a)X!e7G~3=R#JuXjF7*rDTM=vf97 z3iy#_aR^rmvAB)!Jsm0E&p30wcaw0K{QoaZ%w&jh95y74NeV+v}-fLIN&qnlJdUV!bBE&9455FpkYE3CC?6-jM z3mEw2Sv!I5MR}Hn^O{v=WY)Z5A|f@t6Z-n)QwDSurlVne^hj9-19?^^gE1&XYHD55 zA@+MybfC}x?@NynQmWuC`UAIep~6_&lkiv9H(vl#q!nWPFy%Wl#fyN7zvmpH9M}NN zBGRBUokmp}P^zuO1}YUvl2dF7a+pk$MKF(m(4+}BC`gDyiTQT#A{MD^!RrgRH|Yze z5e$;!u9ZhGR(O z5K2r;EaS7LCcl7ymSVTut-HpB2%jk5C+)9p5lrOF6>leS*XO~){DSOtduIF+uZW7U zzU4(R?1u@4E1A;6g1pUEBdcCt1!RoD^RVnI^acV4Z@l{JG@QP<2YFRLK|_uSIl zoF0v0)aZPBIO6dY3`_*tIf&E%vyoJJ5SeIn_=k#=V&J&jY9XUF8(IlPD?2C{&HkJl zv;;rSk%MP8m4`m_o(~v~8Cp(ig*?UIhXV2Wbq1U~B&!ic;0L-_R#paJdt1SlRT_~2 zg-4ZVgd!~_%z(#ya57guw$uS`=-pHFKiQs3G_`y#{?mkBk2DFQU87(WtHQ{G*Wbr%1oDTHsF2_xaV^*E-2 zDL|Z^4eE)DMt9y0cwz3sUGLp}mh?ILEf| z-tYvG@)zh7VILu>Y90r&R;m$eQkvkxEp$6kA7yves0;#rKOk~zU~}F&xv{dxSptM( z(P;{(gfq`&0#!K@=f5@0@n8;pJ_q>K>-6&=_?&u&j*M<;fS(OW9gq~*qTRqxAUk;} zBEXBG{b{}0qOBMmP;0#$B;yJe4{#ZRU*#t!C;#{XZC!Y*zwBQYly28Lpl**MtFq$z7#pzH%>MT@oy+F2kz z3anzRsv%*@bQ8zGk_X7jG|)F*0K##_j5?bukl`c5OVsDl8!`n(pI_`ML446k4HKX} zW3rKE$oBT)R1|D`{uvPe@m>X96|j;hivs~39nA#I`2g(av;f{hkCqhYbd>mFDbAcyMZkOEae zVdrz-$0w1qml!<-i9Ta8M^>}Wb`1~+g*nT`8YXw=;}s$$v7JwNWgwEu$le0cdl)_^ zQa_T4!5a!|H`zEKC_+Ii4rqhPgOEQ3nmcHv5rW}62Iao4p#kvU>G5$p;PnL9f^54z ziK07wQ!`hN$jxKZ zR~Vs}zkSZY2-~)lzj@HqGYL%Ma?*Ei zx}9HZPgw?IGyDo<$o)S2lQby4wz^t$Oq5JRu{y-RfJIJ*RG9)McoIpC7X(Z@pp<7x z_09Pr4AH(ayiehCLK1xOQ3SL=9|4oDq*k=EsqEIhY{pI?{1lY#$`Z4)a4EO;4Y!VeD*AO)rR_HN2M!uzE;1aO83lmDf?(c}N-2Z4_v zC;xxhPDv|^go1K@b$We@jDU(59huOQV$Fw15$xF0(C{K`K+_U^75I2c@{H7fAUl3p z470Qntw$t63GeVobMSZeB_)|?d0vk%u#nOgI{n%lY(rGD&7f@eVmVx|$(;IiPnpeI z1p2%d{1#XuOO4&x>D)+_3+=1JYr}QVypSHHy5^0Tn3(89|88`2b~-t_`o98t>cI@O zvVB7tsLXqm>Ss(2Ob^#hgJ=XIU;!6APtk;O)>~tR^J?_x$sI%)fZ^(1u0_Sz? z&?m#K6pQ73Y{Gt)FC7^cQkXrO^LvePvIlN!ulE8(9q!Q44c4hp;~SLOSkI@ z?7X%gerkUTXG>J_wbZ5L0P#+KKK5;EYXeuP-?5gQi^{o~+_xtLr0e1_%pFx46ALNh2PPFth#}{#Iaw0Am88 zXmCgVZy?&?G{e8&<<$50@7^^E@$vCIeLvuW^$FOe6wGfThtMa3& z;JRGz9vnC9@qT(xKf=VvzdKo@Fg1+@g^zmevNKmM6{phuZYq8tnx0B2=7SwJ;yJj% z-QC>}9)(e(N+LX^dA4+QEX!`gaaSfgwS97M|FQ8Jv_6&9)I0&nx6*w7=FJ5%HvQ)I z_T5(SXvG%8r%#_3s;r5w5t(%=E|iw`luLD6bs8MqJYmf3<%LN}NyGS=KC!{c^+OTT zWiyX|<+Hz-1HEi2Bqh`NhQG}|*D*rljSfr{m<;3J=rs8}6GQXlB&Gh{m5v}_kXz(v z*L~Pbe9BWW6uI*UCF9|#H(S;LP(^7PqW%miCi}GK@_v# zRW1%rTkGEVJlq5Vl6LyjY^lDk4s?{h7_}=+ty@41EiW{=A={(R7$q-Mmpx4$X+s8M znM9c^7HbZHyK;DTSonjj;|!Yt)bmRB;RP~3cu7fUacyu@yMFdY6iw&v=O4$*4b_Dx zC@7ei=b$Ij7vD0oM|Rw6=dU-GN#>QX{Y~1EF!cLQhOfn+?wB-lWI*d;#MszB(2NPJ zJ~0;zYZt=2WFButd3msH774g*)-hiicCvo?%>o=~a=m2>mfZ#_a&sj4ek{H7W(O4Y zXUIkH375xJ(%{#UpjcozCUV$4G}ZfLwisDi`KyFR-b7{(&XlgIRf@?{Zt}>fW=&Gd z;@6tb8~iI-zP~03FxIn_rAra&{zpIdT1HqW*Rmt(ykI$Rlf{1ONrMhA#PG4`^$=o< zdo+Ve*DM(`NkkcycDd&_tr|<;uZCx`x|-trnl+Zz))8CA($dnHm>Z>!)rLusFfL7; zG+h#y_f*JeXyK=r)C=?T`Hwmjy>dxB`FicXgE7ok*Vp0!$($ZFJhME{tFR>{C73iJ zpV`{=AG;)#W=hok{iZ;;S*lUp(XrGd9SWvT7qDvWzC)jAijZy?}^1$qlhS zG?(Kg?K(5`fn3mJ1DT+{EyI2u`1&!kWxQ3l_4#rKlnSQm!c5F(_4T)yG^in=q1hr) z|75MG4fjZNZ)SLS1;u;+w!>@{K3OVfQC@-`Rot($=FrS8Jx1V}91alPx8nv6e54SfrIgED7 z{E?rqXNl5;KOIb4%-S+<$4^$C;SF|M+_hF)0MEw#fxrVQhbQQk2NUGy#!F$I$<=+F`9=L>tdSY^#L zf@_vGRyGFvJhIwo^IV)*yO|;+B=ll^0&?0=-UFn<{lz@{Zfs^IrW>h$l&oUp+11rc z{|X=Ir=!e<<&hIDUznZ6{rAdzwj|n&XLB-r{wWQM?G<rMC z0lLX8* zV^xXJ?0&sFU1++inB6tFY358;+_u7I`@tuWHl7tqsiN(NUe#l&fR{$v2f*6MY*GZa zw@m;fv9WW1Hepa`s@n+(5PQ!bfYJ;_2zDhEQRoM1+J{%6iW~{6K$Dhkj!VD!M;TA1O)~z^pD%~(*#WX)QS2(2_z9G~*;r-i-$}Qi z#~P4t(2g!6rOuQ7{o;OoOZwnMiCTWC+T(hASo6)r~CGtK)j5VCw`#LcDl@_Ia4 z_4!^u9K~OYB@fOobf;Fxg9orZvYE)DtF>N@!I0IYVip8YnoJ+BsIEo1jWgNxJVWI| zp%&LUnLC;W^BlvVStAuaAi08|`sK?>LbU~G9=&fK_TQn7{Cl{+edT^Icgm!}alBHz zKg)hE$>;UZ`#Yfkf>VahD24Z?4U+NT=@lCCbbf)4i8;w4B*bIO@&5f6Voy>^kQNJ> zh7sPR-UIuQ$K`2Y9xqoyf#1p5IbS1t05G!}t7XsiuKwskRrz=Ux;;}^SlCcJerE9P zPr@)H<%ah&5Nk(DBo~)!VB1|EV!Ay#0~zOjao~^dTB5~EHSJ>~!IsSDjCH=0r{G7Y zl#{<)b+tFmpzQvf!oIj7#P){b6QC`p7xC-}ZJ@zYtfyz)eDwLT^!_>W7H(I$@z=&W z04r?e`l@!oP{ zECg$lCKfa&xvh1G!oXeh`s&>QM!dI>T?wfGD(LCKVRP_nsjWL~Ys1_j8cEn2F4w?R zGfOrfAD@WoF;@K!kq5_ECQZ;0AfUMZj(`A#fbX@(AaFKM{dSK@NU6fkwl(Yd7gAb( zyGpjQ(+inYNF9CsE`=pMox}&FRwLGrzh5sQ46r&8=!b zA?I^d6mRYY@|bTtLhx~ls+-Rw&xd}WCrX9)pWP?~$OX=X-fAze{zmJJFuq4k)~L4B zH#e^^+N}`wCONvl-qsuk-4WNU^y%2Rv%awuzH*j2}52OtME2_;e z6Bt(Ub0vlHol$yG#jy#v)6J{5j(Hs{E!m_`W2tdGuabD}H&O##9`Bqs6_stIVwtI^ z&^`CNtv&Ciz8ODf7Ti-KVfCfnP^(Pmq(x_mVoO%DBnvnp5rKr%`{Xa#(@Im|gZuhV zEc#AG#V>OI{-$>V{hYvmO>*F2C>Aa!gRGB8%G?t($s%VAT*C`3J|)bgkj{#Y?CR?1 zloaNP<2pM`VnOdDK@YA6Et;ng$yV>jvg33Z)9W!NDhKOaTe8K4#T(@y(U)(UM0DG#p{c6$XpZz0UnN>T$jI&A=do%l79UkIrF1 zQ`+COyeMpO$~?HQMPE)wk{7Q@1hlGL!7&7Qlc6|js$Au|UxvTE-rTP3R_12ZYtW@D zPWv)w{)oXs`BH?KGg&H!5ZkkO(>t1U}rFb~94uhiXbUY)gtIN`#8}816QCd+lC{`xX z394k!r>*nNz$h}Z^o(Ug!u~h$sYtoqo{0|PFhMp_1YJh< zGiU2+49BdD%-&(Wqs?conp6qg#XN1j)Gc_cR;Krn4!iA?aQ$vm67!-ZS){i^E=2(Q zF|kl13>=h!%!c0+xIEZ|(r2fxUgv~V&YMJ$r=D)mbK71nEQ9pV9CYrfrQV=bgh*YQ zPv4=vqt(?)_EcQN4g3l=JuXf--B(RK3*x%pNHu}9{t zw(#>Ds}?Bt1Iu*u*26k=rP&s#6r7VW>^ zf^b*M>?UXFXm+{4NLf zv}$8>bMKG?1`=~)Xq3fwt}VTSrCCs22HY1f^+u6&cy6C%4LG_p82C zmQ|3Zh$5C-&a(kl%J8+M2!bV2{*`GfAu&-}(oS;YS15rUF%l7NO(tK0uG1On<)~qA z_{Qf{A&)B%_;$Vi+btbqQeM70o_P=C`KheULRNlB3UkYpl}2r(cThmzus9uGAlS1ys6O4**< zH=6Go)jDrm;BB$=kyx3x#VpSAZ_sO|dpC3E70K;O1));{2SpSOF0z`%UD|zb%}w1R zABaKR7OJN(pa+#>bb7tyMxz`K2c4z$U_6rKc9@{TL!Qc`{{Y;MgjzFy3SPp4f!sSl zxdWE&TZx-Leg1rSc#5=OL&;(tuqg2;SRxcz6)1%O$hz zuEHXNTf&guj1Z0{T*lJxm=JPX4}m6KAVYtDk7e?xA^QwRb#vEQRU$g5YA?;ZZhnrk zKbykq!Awe;CLL>irZ<#>q?OY zRT%=Gy4}h_lt7m%LeC;+AcTsEC+xk>o|_8-{zA2MPjHBnN`=#7Eu+r@0U4)Ce$#g- zUJ$uZBdDp8La^W{BR4&LZCw;ux3EOJs!HZ&d=VV?5#1PlyuZHpx_QrFQJ5hbBq6K< zdZo%j|2VN4t}Cd$G;sliH`HqKAm~!kcu!zzYD!npJl_HQi{YfYoDPSr0c;O;A>h zI1ViMU%|kk_H1jP9D4?a>P7Szg2@I|;md>Qy=sf6+rOa{ylUZ$g`K$LuSo)K85#gh z+}Gu$l%ycE-WPr8d5@>M6+6#!fuEEi@oL9>1pg<$au}GP$}u~E>0Nc1;rRmIbt@) zx{J(3*bV+u64aPDkG=O%#3>SHEg+=sN;$(zFb^ddgUh> z`2BHaaM0r9Z|SpFUpwQ%kK&^B=9KP>%;qLu^U>Eby3*1F|1vY01^CV7iy`zp&rAQH z3Z?hN%0PHs=Xr~igxaI)S!*x3 z@&qNitX+cEVS}ualG1Nq*xzsPAUpKxmh%)580UHuJRNn?v5X&CuRuM{9Zdq&iGzcq zFN%i6ytP=P<}L0gnjz3`49wqWa8QN>RXy#)4-gO3ew!2vLW8LMdlCc|o?4TmqhrW7 z3Bn6ab#<~JX}S#Y@FSCLll@tn6V(XvL{4+Pbd9L>e9OS!O3D_q#h6yh(&a}`2r$Xm zE-}=WcjXdu7oj0P3?TJ2bDHMXZw6#v#sk{dS0sjFB4~ z7_IgP2M6ns-mpf0LC_*`db-|?%=`HCmd*ARaaCfR*XZo*?C$M(z=*fUnk8J@zE&i9X;R+bW1+P9Ik#;hdzVD>=L)2*BAHh9Hkv?yGDA07 zl+UpBJL#yr5bcCiKU7qA*W;^KOcU`EBF~(looUKxgDneir63vx28KtQaLM3g@HY^w zWbnKkz=2Tv|N7;2f0HgjK!`z4#pxxe{gMJXIn5IyfDC55^nYn@I)?uL{5NRiRG9*~ z^53|}5>TYbfC(&MWkuasfD}gL!l9h{<2UsGN57hbD%&HtbXD6^+mU;In%N6lT5==% zmy`WdxM67+PvFsr%l)@q^IoBcN}})*89s^z3l@vWYy)SIq)iBcp1X|HjY%c>-r?(J zUC%cs7ibqq2xy4xW$!s8Y>XoNr*e|4e$@CohF)YNXsr1D(Tw^^7rCz3?pJgitgG&B0-wl&8t41f!swjo z3TA7HZ0gZ#K?Q)XJL>TYDpfwp^q`9?qssR=9}_*BqpM(WLw<0V+mOs+AA_r}L4$8q zIs=;6`)h7;l()7}Nou&`%2w5WImA2-HCzd8K!~iR-P%+~@@3cy^7dvciAQ4SX3gGCWWh9GB*1Y7ag{%-Csl#L|bZdZLV{ck%;cSSooCfykzkVEQK8( zs?*#92Zxbtaf{=CBlGh;2hF$W3gqAG6kFmzE5E>03+tJ6J2hL(6G<>_g4% zwY^0Iy&UyP*!$PPwK~L}?)saEK~7* zw=24K=Z}ZAahS^8!xfrpo5O!9bz00e%m`;C72D;W%!UtZXLatI&rh#UW+x`tYPkA$ z^t3(o)I9?Y@TH~2?+>SE~vX8*F+?OAp#p+5eFcO zLJ-o|rR!kF--H?2kEuOrgbg^osSqAd@KcNzO$KVHy-8BlJ%@A=e2YfUh8lTR!*`MCt*m0$+J+s-xQS|SZ|Go|m&)~PgY?Ps@6wvYcIy5@?D8Ds{BsCBd zy7pMiedAI8EE&e7`laO3XnF=QiCj2hk@u>ozwUUS zR&?wb7IGcSp^dkm1~efN)1|Wf|J?VoT?45)NPHbHZ&4~#N664{cCc*=o}ov7lRzfL zx$Ym%CI?~U3xBPL#KB zD34ynWV*UI29t%NgS= z3H}FdXB`#g`~G?PprD8%0wOKlAYB5|-Q6W3-3^1Hv~;(0H$#WgjdXW+Gt5wX^V$8L z-LvPn=j{Hm^Do29GtYfLSKZh9b!|%I@B*_sLVYFkw*Z3r>TG=lvv&R5(m0yQ$1*_o z;;c9Jz*DBQm3N<_^Uqmx*wPz0J_Qxe@d_oe8^q)twNiitHHTdRW<@dw`EX)6j#L-KWF--&sJL8(KOn|pV!Yr1aj{3RgIKi@LVqGcpzt}runiy zGI7T|KxaT#s*NX@dHMY1_3-UF=ID%(1bF+S&r20wCWB`>!@e=Nx?CyoD5H45vv?Ut znW;jSLm8}LI!2ftN^GtC_tI^XQc-mru*wfbiT$5S*h|z;gfe{XFG__D@y5lU~a7`SNi)me$PYJaKfvZwh?j*U&Pl85Xt960~n5$nxil z;YsCgQ%9*s?HsjYTrFR@F_h~hdVNzvf_OT1enxv=2B388q=5K>66c|bML90+N78!d z2z4ht>^akwh+$PvGLjOt4pcXgjAl_fDDQ$X%j3$Zl14U2blo1duoA}CsT0n%7;jtO zbUQr77p;V3SzQtuX0-0}svdv6@xw~>mqIilF3X&<3wB0pYxlbg*^8oqVrvzF zH%;B>539lRj7k0|WdS59Ejcsjm+BYlTvIZ6%=(Kd-X|jsJyFH?sI92{bNtpDbHgbUAb zY3Oc5#N`F0ZXZJqP4!kSucx8$9GDm#eOk;*ai{&A^{?~z!#9v(G+r&sO62T7JDhG7 z5&O3FYO?dN3tTwlbP88j5rW;mRh(SAo8n>IecW_^r+7^iwQFO|KqO4mKvLYmnEO>M zzp*f}u7w|XD;kGj%Ttn)#_x*M>Yh!LQmaO4SDsfv7hg*Z?4{*K1iz=^3`I#6&b^o) zYKfXEbP!E({Q@b^O0eD+L!GmNIp6!*U{5QdNN9%ch+x`pct$yL^ca|`6OE*{#?D5WZbtmt;Q^RkV2!cBq??z`1?PhXLDLPf++l%n!+g9i%rlNUX=GSMyh%LsxcuGXx}y zR@iS_QNLHW*Z_~`R(J$rnr`JuQ`!gt&IM?wQiJ=O$juu4nsu+lB;d~`K9G1bI{07t z1w3-m>MM^dsP687Dr?B;;UO?NYXeW!1)?a> zu8a*rk9eghDDHXblf(~f_}oXY?71*AvLgU$z!TDnoH!jM(twVodS zrpy!^rHyv*lC zn9T2qF|VuTqaF|8tqio`)(+ntd2dvavhoxc_Nvkqo#r@f!OsuWkH5Ij-`~mc%#$K2 zYr^NY0{_~jjFi*Dpze-MA11wR#ZfJb@x~ZFCrVFi;?%C3%XE&7qgj)w9=0E25tpV@NWBifgWNb2b^u|YAvejHwJ zhRic^?K3cG$Ei~4n(pZ?3Cg5lh4(xnT;8FEv6Kh4WNebOq4{{PSniD0Sjd~UH|0A9 zKl&N&*t$+;=CHBLI$&7LDMT(4ou8hWlNH-21nHK8joe<&TE7jOkx6+RIKmb%+mCSPU@U{M2#Op z4@4hz(Uj&HY*<7LZ|GbPOCFu_O3+?R)>4b@CGKh@DDs;%dl|dCPHNK&iqLD@*XzGK zWGtn1LF>&ewq8lg$t2ph^pO3_D}|mS5HVIJmWB?pw%4IK@H+1qJ)h3^@HTI-21&x)sI z2^+^BQBEqrnk}eplGKzZb7Ef&%T^@?b;ao_H20_pruX-jO$lzeq$#Y06*dHf{pdQl&akkq6=!(1Q#0r5;KohPhL8-b()Ewxwo%Mre%!m81 zk)SL#oa%0vOL#(6Qxk{q^}*5t}>%ahg)x7Z@)ad9E|(Pb22VBejN(ricaSPG0$u zj~sY)NZIIcQ-M?wLt`n@1eccxB zTn@ZPFY>#%o*co)o!9g>!TwOp%YjOr4t9yYt+BYfEaTe?#)-S#5^K^W8v5E;$^v}o zYoe!YVFWE2RYY9#(QIC-4p@WS-S*a9Q;l9@xaF#wj_{yA%V&ta)X}FYr_Li$yR7E4 z8I@C4Eu+Mx4U7huq2marIgyG{r&bOlN-nXmvv)A;;j7L8YESYq6J^|jiN5aCpkr>aQcB`?~R%^pNKHp({h}`TBwaBK|K+Vfh z;e56+YjQS}GA;$rfxA-Uhg0?5VJdXehOSvv7jfr3^uh^!)Q6um$82CP9c+DU&@e1Y z+n3?U5|70!z<(jiW$`5sm1vS}BAkJ@KzXv8I?VyD5$vVEJw@;pQ$@~t&`Zt!DHICA zSkf{SpJ%6#6Uv_SVean71=(nZAhDxKm%)~Zr%vfIkUffftE{gjQq>b*VYp>X_S;S1rabSY zix7Hdv1gHmzi)qUNzjIerr8&sF63Pa>=%amqHt~5b-edr&8MQIvG-Y+ljY%iQ=&h< z5<&SHk!FrMYxmNXN>$??o90`5E{RyUjiPUeL|3YNL)qe+8XU}lOtYKWmN@cf_PTy* z?~KV|f}Jj!VMozkY(p{F%4bgIeBf+pOK&FTR=*ok35SS#%8Z*3aV<#EW<7X^T?Agk4vp1f?y4%^PG`uloa4sJ zJ|tr4A&!*O$eqy@6cbcEHwP*5Ae-`?iRq`R&G2?SG~NFl_z>wlJ9$2&OI5_(zXloE z*!Y&G-f5*ccMp-NiaUpIbl;ZLe5N%cfEO=24xNgWN7!aH(};XFwAub!(s7%^MKR$w z7BF|zGx1)~Maheh4gg`KzcsD02dJ;NAnrbYYTu+O@tpTe9$B1a$a_-5*SBM<>KTJQ zbCsA1f;HMepiZR`+W|#9gSpk4KoiL)nHXWSVr0s~3=AygDb7Jh@p*B0T6j1nBcZ>@ z#D!=W1nlJS(1Tm29EiB=FmV`IPRHy>)1Zir+yY)R(}h!*-kCeVbr6}9RdbDkbSj_w2MBv^xX0^ z8V@3CmRYg%O*0l9ua&vgf3{`X;ZCE4!q*S{!Tqsg$OZk{{UQubEWzTfI?~#jM;ZH8 zRUdMv-kX85xCEgut?+T4e&%Bl-G-OXfK&B=)Ajw=tKskFbKr7;Ca@EyJ!I8hFMXf5 zvM$lfb|p8EODdMA5j^+aEw`u+kGp8Xu^9Hy+4PmJYtkRx9QhyH@;d>vu1aHhb_wM)7X*DY4U2~?y8e{mi+jz&!rtGHDkHi zl_D{B#rTiW36iPf#9)X=7O>Q(SW#@Tea2IzQaH9m7F_;c-j{ZB`!jBlhnR)ehZ6`kmTd%fNZt?#lB zEhj9Jwh0x6>uM;cP#najzou*omwWkcoEu$bSd0AP=SxtV$+yggwGVePX@iuRK|o&F zjmKm894YrFrI;9gBhw|nyJU*5d0oy$k;w3(o=+$RgF#*>nWH#r(fo_&9S$!3K&cj_ zUcK>8=C~C&5Bc{XghqX?s7y#qRhh$X!cc|&K?@{x67h4C?EfVDc@X3L?`oXwsqsx& zu771h*bm$3zmg06SO53#8~;~9JBYvkef@uhqE}OrWnT59^3}#k1Jutds}~U9RkuWr z`T{k3KO2yvn2($R&Vj=)pm0gYd;k~pzzPL=@=rr4ctx{qZN}i(J_==T7FyJ_2F|sl zfd!1=1{$DS-y|;E7NEGU!w4TI#mxB!NWKBpG3MqJ$kD(V`Mw6`-heI$*Ot82RA#mCrbX5kIST15E(f!qsq^geGHlLF`ta~jB;aKy>dfqHQbGb?8yA8OTA*EyUS;_3!3(rm z0CsqheshDLpBRv}O2;wq0KTCt503zo{wjwpXm!(!e$b5rdbKY{(1iiu4gmEuIHu*H zp^@ZS2kN~I^~f+HK7Rp;FhcXm;>6HUIiURHbK158nq&86u(~GYfHxH!9~f`kQL5KS zmlt$C0ebHNc_S$?(P(45M8_4d;q>+OdvEJmfijo{6uP-|6F2hzQwy+}r$HDhpBjQ| zP3HG>0qS(HIAK~qjA{$69Y_zDYSpN&fvkL^zO$j({fz3;+UgvL3B?*2=mF$VwIHg# z-hCufOv%1eii{-{+zkL@c%=jSJb|2^_~1ovGN*N$#-pkqazDd=yJi5o)z)yj#>?-} zY%7%)MH*fRK!!bG9u=7U>h^rA@GokSYSYge%wmAJ(KrNI?u#gO7TFj&6Lfi2fZzjVf4&Ejo49yt+v}hCG?!t;rxj7I*=?Qee_k z##Kfj_1`db!_Ck>JOeGhpEg0SRrg7QR`xl7#DIQo{lo7n#DUx31iU+G25N~rgiF!A zMfDr3Xrx#x!1ts~fHpoteh(+G-qV4A&lPnP)hR{j{=Rq->_8()mMx`t(}4t*(~U`( zT6yC88K90@W*jltXXI9~+Zm;V@4dpr{Kg(uQjjv7M+fk|2>=HA!DCc;NU)Mu9ti+l z#CX!V6Mf4_PL6&3DE672@o3XDH++z&8b2HK|H9EX7#n(5$p z$qP*~TJ=77H%gSo(@A7`{pEp}1g;b{TFvrz4fYMF%$>*Fb7TgW;o7yQRc&o;4?P72 zM8Gp94FRT62UnkQnHO$mHd?Qegy{QMFtXrynwg0*0|Tclbb$D1*A!5-In4uFRI)HM zpw1E&k5%QMw|D$33!ZUG*Q{X5VU&M<1CEraJ0tK4QWy3ouglz{pO*uiL!ggC%^w+T z)s3B=VN_+|1?6l-sf+n{8^;cgeH9-yV{Q4>Y&<$ffI|*B1Y3g&zSV^*uirBa757$? zZ;b%9ew7$R0RLqqFH=M2(GCAj$xkHn*5 z=0e*Gkl>Bv27*7M>bydos$r{CCBPu|(LYX~12B6yBiz#Sd|Ro03uxch4*}hlrj~E6 zo%}&QjrJZ>Oy7?Wm03hb0)AG4=y~9RKyGF5Qq_qLihKn0Lq8fDquo}@H zfz5^ljPOgD#L6bB+AIRK@swAL_LOF_05C^CEH0bK`AiT*1_HLA92o(id{9>wCJT?% zy9uB%5GCSQ$(8Mk&rD+M$Vm#gx@|X#fR%p+sHCJH4?iilKeLo_qe-k0)7r`^JE0)8 zLr6%+DPQl585WP-UkAEmQ$}7*S=}>O&{NEU!p=&#pPFT=ytN95q;5|^w98JktKonE zOvD2~I1)9~1pGW%jFO-bP2Y4@a*i*5m%|0`0$s|dF$UMtc%#;Vtv)=huus&dTrr2gHts{5~=_+BTV;i_4(d1L{RjPS;)$ z{uT?o65 zqf~2MrKRMmaVfEB6hGRuGeDI}Dc$`<=Ojv$Q;UIMlT`5ZA+BK5sfk$%mNDn2>>d8w zhK`DYLRT~+<+g$hwC+g{3;_1j6p~lOF&O`-ExO^AfGIQiMB4@pPEv?WFne2(e=@0VKAJ71?5*3>;l223Xan^Cgtuz&2pw(! z@|l-Z1M1Hl(e_iiqL$TXBBy!u0ZuM1F0QWeQGv7I;f>R?N!|rW28*M<7dGt}a|-gp zeHU3)EQg>qu|oHrxnp$E!GXPVe|hY&{o6T`fA@k?Ug)tMoR9LNlzC7+C1(sQTjC!HfZt zeeKL^z;FYKhnR=$^9;aDMx6i*`jx`!$;k;Epg{rB=L9tP0*qEOfQUU1;GX2-(5t_D zo)HeHd%Arhiyws>o%h~YB!q>9_5J<;h|1G~PRqZ)CFIuKJYWaq<>dhj^?Rt9rH00v4HNlIB+?>nQ}LWd7naLdIAt6HlWvQ-!m ze<%tTE9amMi5hwfxSxumf4?Xwrt6Nc`AR@U z(LH4i$due19TmTLXK+j6_oAH^;ih7R7h>Vhe7*Vz`JS5(2kN{<| z)|O;)8m#z<@_4|;Hx`Yj`G8^;`5NiDfKl6HC74JmN#`P1?vQu9fNKwIXkf|DvwwgU zRf3#9(BshnSu<`pv<$dF0}v+xL}a5UjOlU$C=+Ow24iTkqNs=XBxz}Y(*pVkovP2F z*>s})rambuzjK!W%ViU*AIzxnNqO;SNUIi2UF?f?5MB?a^5F)_pZ|H3-$okTkz=Zj-6HB; z4D2@mI+FRUs(^_=;dKc>I6@*1*k_MU2$WP>+Qt?aiB&{0a8$%6rDy-Wjmh=(JZSy^ z*e0wTCEb-$^)>e1_YgINLDz*&r|279s>gyV{z#MKl(1in=h z8lYnxeE_FX3Nxf9mluGsQ^?oJr(xrtjBcW{gn&#Z@EMNim zGoY{uBi%z@IrDT2xPk(h@XjHxGq#5XyeVe$9yCS+k z2f5#ZGBK6K^Eq(GT8T^6-9D2mRceEl&NBUG5O_(a9L&{{*M``rW)pDPfUvm}52Kfc z@d30A-p`7Q8xQWKo2RD_;{4ghHV}{W*;+3)X*s>c!=sdvSp#n>Abe<^9Vr{=>$B*O zdkDFN0P?#LeDegbRwN|pAa?GNv%nz!Fx}QB{BOGX&~k}++Xq&&)_M+v|9mI=tIl+N zNPt=^;Jm8}9uG-mAU%Bu3v~gr4}2OI*o&YD(=%xKFMuZ%gzBZ*P`bz$C7`5{g9DN- z@PP;r)^JS|V!j6Q2IxR=@s5Mw$-x5^P#`Zyd6aGa=We)?*@L=+y>h4tzvNMa+~wmzyD zOKaGo$f*+xU|P!xd6`5H+qr^$KHsVR1PHmJy+I&@lGa1RxSE@vK3*-p8)<1g93K?w zhm{bG*0{rkD-`k!TW1dS4YKR%Sv^1g*-r#NklnH^*W`Y`^^4Unn9HpjSdD*&kQIbP zwxk7RKp2iz4aO2sC0W*HC-DE~8&f@3p$*z6oZ$KJfy_r;hV}(r#Ki9M)#0{e8%|Wx z1b*X9R@wc5kH4g7fqz=*%e#rGjSM18C95lXDN(`nF#?5QX2`~Y!>_sNj|PvIkB^TX z!}VuOp_RRcF5CVlPp(sT%rZd1r#`y!4yP#$^8AdCwmFTkaux83bz7b;_fUjsbkRn6CcVij8W*(;E z9@2*y+;6Xi3owxg#P&o(9Ydow4l36+&WA1z`C7e~PY;g=soi*Nm;8+DtImsc-k54W z-pqdSyP@!V&jIeCp68}V?+Biw?`x-T#p-Lblgf+K^DdiRS+(iLFLBRps9;`qU5>qx z^jzt!E-(b)Tf(G;zP6#s1|izUHyh8*E$@Gg2qh0i-+mX4JGUHZv9Pb-st;hccUj)C z44+C{M0hj+oUmO_TD@9lTP#{v!Tj#_CFEpoF~8rD&6e1r)J(^+_cwZq3WSxLMsGzxgXRU9@K9#1$#p!&cl{drbKb{H#at` zbjt+%L>YcN2yFc#AZ2prY+6&DE&+>P%RPsGsP(75Pqs(o2hVP&=8Kz)LaeC@(K3F) zIqf8qvG6Zi&35tx=$DIg)ILXA#@Gyg?sN9r3F8?<5md2j7xvFz>f<-Ae1W!I)iF6< zrp&qTAmzF^4}ERYYSDj0LWtjRal>ESd_82l2s!@)NfQh)y&!W>j$?f5jHE%-3OP+1 zyD+oa`H7D9xvEr+!2mXEnq8;FbQQ!mT)sT*=?sPTzv*EqSMpPaR~jXpg_mP3Htnom z&M?0>c+=lNiFPwnsXZ=53Hj4}`;U5ho&C%R{PMZ0ipZ^l3y;SHV~G22cv-Us$)&9( zQeJyZdZ3=iLP7FW>iqkrI0~F{C{qeKn|vnDaI~8BqSrsZcQdXl2sVxV_L-8gIkT!m z#S+nzd9CcLz%?e^GVA#2bF~qTbn3@JfySK=Ti*aDVE!svHMFky17v~gy_-{VQcv9J zqvqY%_SUBqY7&gk(4L7g{5ffmI-P%Jm7nJc9>ifkKDJ!8q4bH}5c79oBPXsq6=(3o zTZb;M6?zBZGxI%B>-U!8Y!qtiIePIV%SXSRyC=Tu>~)+S>9o|W>M&@$d9IR` zS0?yw>)q?&ZRJ*j?`Rd_VZ3nLDlSr00)p+>-gKh9gUJ3yjU&M{?<)tlGrG08iMUmi zC-5YbICrnhev@bxgE#a)b{oqU_v_s5mloyb)S2G&2YQx%*hdU=NlfDi*e0%{pPbngoGp*kHi!oRgWR`52R5+@?6_0D)@alr`n9un$x6Q*K!JiK1 z>OSZ{zkECPuOhg5SE0@lXDxnq1xYEjcv&Gbp)1v$7b?~eBukU{7r+jX6Jy>1SnBI!4h`+F% zDeZ&tpKb7!T{?2|HF*D>9PLY{B+tBvOjdZmfrG3qW&fsIkLhrZiD&!lp|P5Kxr_oc z=S}|MUDf^S`b%deA$;he-Huny2HzDT zMCy%uq|cWvcXsM0MxxrKeG6Tw@>$-js*M~l!M9%?ZI*2H-i;@iES9DUaoPp}LdC_+ zg5V^f@awA*X%_5;9Bz^IH#@FI>7NJtaD=NPRJEKY53BM`3~<4p=guqFsa_ z*l~HN!2!rb5J791K;6cT-sAE#=l)<)PsaJ6{cldyCZDJuzaGJ2F`w>3?m0H$BD~Hs z!x~YExlI-H>JW`dCcgfZSFaOcW~Yy0sy|)?3q3##-#y3TB$D7ETIjcSJcqN32enE~=;4e9`TKZ2X>FB}C$!2Tm`bgtz?eyrl1mWA6%< zyc5+M<| zCQkaRr)z)Q%k}H}<{%zfx^GV9X2qC>9v5DRwt4K(!v2&cP^n5nANzjvJM0W#4oT~g+#+da z9i5sJ$jnOVd!+ReQ$~5gok3d7IL)0b5;(E@`)adl-ABnzPdy`qLpB$wEg$`Y=5S)XDED z5F~?F=s~8Ds~;J-l@EW5KJY&B*jV2?7)!=~VWF!O+*Ez{z1wUl zTkn{I8hpqg-O@i_2ZNh&uaD;x1T3of&4zhyLPD8c+p)9Ex`dI}V#`@3b=ys; z494FR&$B|#rIx1&tOAsWgEgJ@@gdhWGE@fizpWmJ1k$L3cEuRFcMPQa8Oqs3S>M;j zTVC|7X~GY>%TQbLYnQo+oMYeMkhS-wGZvZ3nh^p?+2ie#k{>ixRnXuRDcke}aUpYU zr~QVTj|XpSjm$lNXcF$poRDU=6}gfy^YIonUx2VgTZ7I5&k+uWDcu!Weus+8iZh;V z_F?075-lvs*sC;4rWG%hp2kw^%g1Ii3wYp+X=4WisFRRSW{ak(hU{%szDcQ1%7t``+oSzz6n`wiXPb8buyFSiJ zWi%oQkSmzn3bf!Iq{j~SF!Ky0bEi~`-ceZKroE1nG;>@N_+YP2`^q)m%)O%rh` zDwFwEQnsHyc)B;~1!Ih%0*~8c#vziGpWkOAe5&&cC%2-@?%@H8=_PUasx+4esB^Uc|vsWn#Te}LHiLEf%vzoQjizIlfkL$05{lkmf zn-SdmkJxb=@rZw)IHZRuU8)&Y-}dwJF5(Pcnrpj@_V1qBQ|vO1VIM3l=OZp}NNKJl zdmrTt<#Qo|uQ7maH^zVd=aJefh(qOP9gJZcsQK6&w0pneZdY?`g8r$&8#M6rE)}#_ zJ1~a7!rzOpW(!&ISW9?Ex8HiHc_8~IdWs~wr+u%STfReRlO&|@c=O)$GLtljzJ&kYupTS0%#x>OXK*-4Z@o~y z?8wD6LybYdP)iorM=hd9B0)7(bH$`bZM;4W&9?Y{FmQ`&f!t56{+@_WXRkKBB`{to zohXzIdpaPsbwbbQX{pcKub_zbCb=B~y6XnwnLxza8hFSL2L|?tA z7>=WDE;wOx1#+XCl@gFaD3x|o>-%iR4fYA!FbP=^rHFtE9?idF|L}WDHajR1N6TUY z5xq&I*8XL@b@2IARHh?hD{kJ;?IXY);SQ%lW$&y8`*=EPku(V#Nz$%biJ!YHzlC+^ zQQzS0?!?s&E76rPR@&>@EOman%D<5K(0U~mL~bxr^64{S{kO$#-PbT>=qAwt5da{L zJX>BPq2OJYsWeGPaxG)N3Ne4X^!43Fe@D#F>tp-rfC+pT;m=qjhmrKsjVy87-Z#iO zJ-K-;r8i$%848&tb&<>Ku(-8(c?G9!qd)x-gv`k>%4W_Ov1%oNAv<4ah?xZKBaJt) zUQwVLs$?aokAy$igQ=R3=a$dMN_<@Mb->l_JVk%`r{2FvL62Dg;tWEx)r!POB($SJ z>b}UUi90f(fdv77{t&E=_g+{p2Ojr#&WBbl`oneE1YYxg< z3OM&TMaiI?px5O^pvc1F=3HkjL};Y=(?)7$FP+pIU8d4ZD+1{IkfRYF!4u2v&Val3 zk3v#Am=U*sC4#^I53k-aI-jk*^1;t>S`sLl*#NFZG)A{lM@!biK!P2|bN^C>c0_us zzsBZ^&b3t}>=kh<*4$%~{KJ7_HHKDg#ETct8}ax2vXly#c2uctP6ks1x*k~-NmGq1 z`g=$?7kz5u{&erLlv{V9x&ut3pG4U)E+IZ$fjR_GS);QN-1bb)U0=x+H1+=Minw{|B6tA))Ln> z#jd_PY}B2v)nlcN8vDF7U7Fcx4hCX8d(er#o_1NWDf8oV)%}@ko!3<8TVCUGljgx^ z-XFwtR>L3mT0jZw&B1GP%T7)qdzMe*0e?yby=8ukmX~w$Q>!a;tPs2<%-qL%MM#!5 zstQ&7Nx8iWq=g3KDBj5Tj`!42XDvnH**_|4-ZN^vtGvxVz&$EzhOP`8h(~L{w5nw^ zoQFSERlbZQ*;?_Y=|fI$YPnLoGFe$Kp>Cldqbw|$%SO~unLd{;y!?^XHH+n%Hi1`b zJTp?XYC8Gz^Qvmk&h_ww|GdLpX^e8zr#}Z)C1NYERg(*sP7T7=+)30eC;S3@yRIRI zsJzjb66(3ZS+~nSQ=jwca0dKrr6o0|dDPlRq;-Zm%^5qrA6z`>3{C&Hsq~rG<@0%$ zmBl(Rv1bvXU~~z>(u+LXOc6qn?u8;42~6Lc+i3$b@}&y&ZB%UawX+p|_dI!*nSiax zU;E6|49=_YvvK$8LTN8dm7Wl8nA~l1lr`Bg9w_epkFPMq!29o(4xe}+p{A^D>&NF< z?KQC`O;Z(G^}_xh4R0;?{Y@MoEk`#sz2h8ynU>zLVUB<#c|AUh1*07a6pqp#J_?J@ z_)T6U(sogFA!N@7=UkB%n)l+dLQx(P>-k_FLog^UIEhVJ3kIBKvG>eK=kz;>tLbw* zS@NA+}ybc2VT7h ziY5nYDJs(*cZY)4Oz((gXvx46B%#xov-`{pJgSYitI+MBL0-sOMQS|pI>Df0z|K$bQB2V3&XvP2n#njh>IDh`T6U(T>;B}(YK1#Jgr=}TSwjwO|& z>$dcb<{R%kK}_V8ng%e_*v5;n-+X7Mf4SPJ5^0P_6tK_7wCHo)n>QLLwu&#G$3;w> zejA7J#gF1A;_b^ZFhw}2e{*SZ&^Rg3ZGUW=lLMEqu5RyiU=&_S>a_BO7!`&$hF3-~ zD}R8n$k|taL#{KG01{D9#Jkk@h~ll0IbhHSyhAgH!wH zC0oNdN!8uDW5k%x(6*0xqcHEh%W6ws^O6&Fb*5RvHh{h4re{NsVUU%&1Xy{@ zlET!6qxG9Rm5Y&n=}oAd*{9{xmFVO=F7fn6Skw8^!+Bp*wNFUoUYH@t$Ib}>o%QI3 zSM{B-_gHgNN)W!T>VlKM8wY2#`f3tPfA&d>R|lR1SI^z;Pn#dc)y=;q`R^Ws$57!n z-eWJWwQEZe(QKuMhRvw2Ev1M4My&^}cW=L~&$q{~wrF9u6u#-xYnEJWx#-91s(SY2 zaSxV?hnRrM`Jc1r;VGTg5$c;%FJxvi>Sl8tMy4f(<2z5stMzG6NnfV=T(OGquA$`Y zH%!rmnz;TLpe`$7j=G`;x>grXe47XMk9O?Dm;2b{Z zBY4SHl z^7bDRqVGCDxueO~d#Dwb5}*0upul>=m?L;y53)ZCD!W$=&G4(vwvKZ7lN-i9Tttb5 z{YC`5N;@@al3-$1N4~5~(6L=V^lekQf}5JPcSL@Rmq3veNGOe75dTqlt@)uobQxA zIf}YlGfapJEtElm{&{Vloh)xdlbA$65R{w!X?V#EWXK~2?}5p9_8U|RMWryHDMm#v zz0OYr&z9lm@)u_iPtMccMtMHfk{y>KHEEt3;BWPtE(-NNw2I>Ij5lwMxu$S(jANj` z6he7Zi~j2x#(_GbRAQI*WlkP6#RM}y9F$0VfTBJ~i>Hi+;y{IWWthsl;h&nxOe97V z~}`{?neT3Vgwe#^}-5VGCI?_v+9atH_4-3`331@&}i zp`*|CO@b*Pe0F&VnqnA$Z*smXYjK373BryyfU6N{Zx7iRQf7~rgK3*uF%C|kY#yZI z%WFuOUHqC`cJ%)~B|IoAmI)|Mp+a`1-#+6#8EVDf~ZtVCyfKh|FXC1@eb8v?o`#;FL-l z^Wjn-UfG!c56#@$xH0C72g7r@k}+fhb75<svl-x&=}QOS)@=W-AFE9VWAxZxg8+`Q49$h7 z5NAjQfOu?MzmCDuF|=Eb(!Fshg4rw`$AS*_vbi{fVS&(qyP5knC=A&B48lapi9}zp zSL5g-^fI?K6O#>Zr?r!03I;;&ToZQ|azbsn(FS5Hv3`cg97;cX(x z>R~SD3-Kfai{6Jb1Q>HaH>(;rV%WtO^?fo<*CH5Iids3BDTBoh3bA!2TQ`umYLkZ+ zdG5D!iUM4NK4?`e7UK4XAf>flAYQ*x)l@?|WVIy-{yit|BwCv_cYTr^mfo}%Lz-$o znCadPEs7l+6-K!84$S=Y;ksSaZ<>d!=!0X8g{ja^$f(Jmm)49W>Np|i29@2^@1DYa zyc)GB&t|0y$7pWf90|aVDW&K2EaQ~r-?KAVA;QKqKgMG$;_N$~=d0v?9`RZ&0ox0} zX?H>4en`M=rP8DNLmxQM+PK$rb5agJb>T6FD?Y@24JuqD^)207oQzw4i)^$QOGI_0 zu0w0&J3=fG7z+62dy;sSesMM{dA1a(1}3W;Z`>nG=8$g*JAHKz@qc*^e+m(XA~QJt zNYOJ_&xI~USNR)!a6*@BuX=+{t9-PFyPF!FHb#kjRLhH!yMkxcjy8ezUKST`VyKvX zVk|s=d`1EN^3KmD_k)2xzc^*ae;&gv7Wh8jV2)u# z7N7l?)p*7ZMVGiAKB`t==AvJkJQ@-r_l^!s^7az;t+qMjJaw9sF~f;#RE?OW^KcmY zd(oo5jB71&W>-X*(TR_+G?yraFFz^?=nmCA+#wIs-gw#BhMycDq1TQPPS7CmcWNZO zN1cXSuj?Lt*+JrdgVEangUHK9Js`qs!|2coT-*ls>;qCQGZvRO2a=Yl*n3EG@FvS^iTC_)hn-zQXYkf5IIcS;T#& zGRuYiv6;_SoKh=Ca)_Cf7(rca|T0tHfgf^cv|i~kDS_m%{CtD@I!Wuyq?W+pvk z$XlHBTje%i_?-6kc1w97-uqoy{s@na=bsG5YyIj5L=XCnjf|Z@3OqniI2N}_CFU@F zGXWKv{27TW_vwi9#a8(79vF|>6MPG5V5teC&ll1RZjSjI5aSa=lZ84Zqs&Y0L@n@j zaJUbQGTm>PUqLi}kNtk6c^|(f0>|pX0+OvSs7l2X?0X{X)pE#~m%LLzzzu9-R#?a{ zU#D|W^sWDAh8|~N!u7;PimmDLX8&ZSO!0C68nQ()(I76rcb;A=Cxj47#HB|HNM>u~ z)aA%`J{-Wq{JGF9V1gavb5d6K7*R3T=sUxffowaGTuzr7`RC4lK^^_e#_5Vmtxt_i zL2O#s5I8Rd$%7ydbZQT3f_~wI$}~s6h+lL1JH(X)_H(DwMN$WZZD9-Ubm1Hp3z1@| z%=cw3iH-L!t#xw^x9W8;7VWTYjnD{&7rUg87+MN4AYOt_!?CE%xCeAm{hOdXNv@+| z;Bvk@{X!xqd-*V*AjcGt5OA|mjI#n4xuF>bNGGVH+SxxJ9pOHb=RzQ^N%I(`{umo?6dc?pS{oCdIbsa zfxaoZ)r+;&>06$heB55{sR*+GKkb6hSc0ej@O5eVx~i=;xk2if=0AB2<_+6w9bIxX zepJkUlpl7_xZ?gJ& zrt&Q&Km6Zs?^f_)n!Gd#v!nzYEcS`ORcH-I0;a9KYD7K3)yuKz9{kJC+d(W_h`Lft z`-n0LlR2TPza0&_J1Y>u5Lj zw2mcg%bfd8;3LM{N6wG)&V}e!SA6kKEvWvSt@U`xKXoLEscv<@Rda*;bH_|K%N|Gl z+?DFf?qN39I;g4Us)#o90~d>(UXHonhMre!cs(=Iota;=z8pBi`)A$4%G}5Te{G38 zNzHIdvYP*LJ;)YNY$zh0r1GAA0wCSsZ_QX_W`Wm+1oufULVp`K0dS&FWPp^BfG3D> z6(ml9U}!kHWeM9do>05=es{{rZsUQ-Yk&YB=z##z{E$T-4`L{60^sx{ z!iBE+UZH$V$(`Xq28(CS&0<=d^_B4JwR!3f;B5^kE(uq+S98x7TZvZmmIGsGkkpaB zJD$>+3{F_UF_&b`lrG$xorRHTf0Mha`yQgx90e7>v$kd?z~9t`*UuY{ubo*wI2Rf7 zwP35nT%hZ1SP%5kQA|yyOjo;l6n%a8{e-@7B=;}%^5Ecusa$f0%DmKs=c+y_{o;id zrdmFIlPS-VO|H8nhrp$`K|m{%s66k-^(Ppvi#yt|c;iZ0Eu2*23>xt2)L)lT=~vLXRZ4x$0daHoKn-fq(eB`kWxl3GCi{u9{O`U#q7LI# z7hLT+w>4tqnj_WBhZ~_>TFJ9v?`%jMe~KJ;>pDsAy&c2SRd#@VH+-FZ;F+kvK}>NG z8AZ%vnTjGKRv)IMCtSCv_4VX4;#j#6H23fRqY88lGN@{|Vid5IbLQIl~1B zf9H;F@0A<=9s1_SG^At2|J=#j;(!~o`V7zNFeH*PjyyE`n=w6=%%7+t0l(-&`jWgW`>WePw@D)kDz zv!cV7r$f)GZuy$Vf&$}9QUM=SS3t73U%Mfrn!{QCPUDgNsPc~E8=RN|94a%KI8}ul zbZ`(;si#_4&SwK5B_wWw=&5hMDKU^&D+9u8e~rbGc0jy5PDS5oDcu94YnaC7hDe=~ z6o@l_4%lKB^Cv$gfj$RHef8`d0c&BGsu92ypP*^5T0m4bs?&<$&-?U3{kg6PbLuMI z&~JEq4q=?|aXJ*l2!|dz9%|3$I|v3W4(VK~=owO0jGYNv^GM^0yJ4P!eyTkZsdab( zF5y&zYY@M75N9{_!Kk=t@9)5Pvw-8{=tDr&{+z4dGh8uropM@u{hbfgN{ZA{7}|3e zP%2-cx%RgF_ERm5g^PIH81LWX7KNQC3BBS8ec3iZj36%fUIB~Z!wH~fY@v~;qVujfa1>dCq`Q;9Kfs;`8odP&L(k5wVVDIv`LdCxJEO%dM z{n*gNLzO4|uiO7*UGS({1z9QI_UV+aE7SV!W=lL+eER+f;XiS;JFh|Y0ReUO#BJr3 z^<7&TD)^VL7i~;e)G+enG%LD-<=g$-_@Vwn%3GoiZg&>G%70ey^duw&#N<2r0@q63 zNM_)QZG^CDea~tfn|qX~%ncQmK^_{ zQ!SCQLder$3X2e$gPg?WidX)F>ncA(2OJld#7s0^XNsm>N#(hBNGm zwp~*BG~gW6YD(r1iZ8Yxn5=m!E(E3~trqu9Rr+ml`{1&T$P?k?yW}Cqchv@|6dFZf z)BCNZuPWLF0u+beb{gb;56jOkz|ap-vJw%)ufRlrY4BGtjy(B1YXln+HI7KoA@S?0cg=?dyu7U@|2^^*6~Q4H0Q zt&A#|^>&#oY+%yR%c3?X5AcI7Jj%MS9G1QqO44?tp*|Cz|5ckGX%IHH)m5G8Mt(r_^N0?+vv%Rs(QPpATU6~J| zl*oKKf0{bN)Rg4dexLJTj-0_%h@N2&gFZL!r^T3j>RAH(2q{CMXW(4t7;xbqEogE4 z$dxrQ)ba_Lau-XpGBakdd;3cLZj@Hg9lwKOSyoN<1dfvwdNz~Rwd6{xah4I6@&LJt z`Lx>7!<5uLQZ^I|1(6LV>eqD5tT(U{H-&DST)SSaEs3G&iMcDd7m|}1X#Nt;k^Uxm zW(GDS8H#_IgdUpO{Qmt0wvy%6lIq4AIP6m#dPK6ML<^Lw|1FH<{oMylC@-=RDPT zi5($A#(GUr-A{|25s!#X2JH?=nY9K6H9U3Ry3GH=vNU^#!CA`Q)R$`YLbl{TbBv?N zNKb^!5LZj1^A+Dw&!ysoUwif$qDmTQQ$bV51R=>v~b(DlKt?ATdY7ctl*NS!@WcMjG{noTA z*sDwiJGNO`32H%evIQrN0e|o1q?7d%M4hKt31A!SIB6IrGcxX&gWOsWv9FVI2^}{) zdQq|Z*y?#(wPV;_=*U>j3&STrsi+n5Z{>aJI*@WB%>0Tl$=s5JOCct)4J1@W1ovY3 zXg5Px9ntl)5cyy6{=)S1RRzWH)fAEWYYwka#BtM|%_ch4P&+P_8>v#L3d@3ajz{56 zva<6}b~ZW5SxIlw)1C}Y%9OqNf;G>|j8mYho^q9w>X8-r#gR>0DdxOY)ecb5xh`y7 z)}6R)`>fODz5M)XRVlzsyPb^7oMfwoV@dIeFM;EYpLryj#~d;VmvW)tEk+h8f7_H0 zy8Bx{9FPRRk`O{R;^?ht0XF$!BcV~}1@>s}&~Cu>aot6ZO9mzOU{cc##TlHmFX%G% zh;1b>m*$1(%O0dO$*rD{kXYl~h-~ju<^%K|!A#dzax9KF!YZT~$9r6uyGpXU$0@I{ zqg%=LX29uuK`Q)?eFP5|Vz_-JV2py_3mMe0kAL;Zh_XFN>zKhJb7h)Gjn0A^v^Bp2%d>iF2@(EbV^ZG&(yY@J$^=u!oDSPe9g_T z{@ip}*31+TN**bB!CPiKvP>xCkT9RmLA|0?_ZAScIG%Cto~yH{W;8EIvNM{}Ej84i z=K2w#RxKu$zGqf5vv08Jq&yVFOLHnXID*wgerXU~i&Vz)V}B8RT#tW4)lL&{-%7s> z2)~Hh6Rz>0_p1gwx*$EAe)YaYS%KC?c#ysEg=G67zqJhuIBl6Nudi&cdcMt%yScEL zK>yE_F`g!-%!KH5eb?>qv~!{6>i21|%)CrqT8?TsxgeU?@>X4g4uyqKyTaQN|vtw3N5qw|!Zt z_j=2}rl&p5c@g9@!T?||%O=TY)hn87Mn{zFV?WHV5SI(~X436L3!{`;w;`|uVby(4 z$%fNt!f91vdo`RMD`C7}LKV#A1u3}(*=mp^(G+(vQ*~ExnK!8-Z_}dLz7qUCx z9CR>wue17Yq!wp4(dn%cMU$!uzlhpe&$;g;-j%_^|KS4Kf;{WWcAl#8-jV&Re77{) z0M$wBt4gkJY)P1}eI45C6-^ZSG7a%TwaE^vkK=dpP*&r$jCHr$Ep!D7#dkjTmyXAR8CZZqebWP=JD}ze&%S)oJjX^UF_=0>J7bW z1&v8G$V;328;OH?AW!GlLR7N>-5TZO!jc((ycW{BK~tE1bOcN22Q;q{az6(JYy90- z*lI6fkgHeUEXo4EEicqc^I`(=7`}BZoK!DmA)=dcL(Xyh&lrMC8&-RkhFHaC2C`x_ zNKMYaknLF8{l4|0Xuj+v^ylj@iP%oFl5Z+DfTLpssV`w`WK7k^vKkCRL6-U(sGQ%a zFE3I}e?i0s>3dNsU0t#N-KdjqVS9A@Cgts@EN>N#!*;CXGx$^O;&dy05_;b^*)Aa~ z8huhr>-MC?aW`{(hA9a0{Em&OAW)XTEcHe~%G)ENwT(@KC(W_Iv^T~e$Yi4M5?KJ9 zs)>*5M3sEU>+YPN6)XfTVy@=mv0-6OYShKAzU8?Zwu%GK>!>&VkNWJ2uHyvScHWn( zE1#EnrhdArm;Wow5cb_^ejwcG?df5oTtwWT7dL>P%GlLnI-3rXJI-jQ2sV4E;Beis z^J63AHWpchY^-s>v8uz|F`jyB002`Q{(d3TXCt)z8(mRpqmsA=jp@_@`DoPgJcC%@9TUrBOQ z;y0}*dP9o8C7T2b%8M~vx{*EFrz;_mZAthjP7+Ao!#6S<+-}IzUZGah*0t4@Sn9g1 zAe>Og#tc6!@4Ty#b~+O9nX~Lr&ZMrsWqyFp7&CZQV*`a;4Yr0jkHEsMK(2W6PCAWK zVW@*2cF9F-7twGj=i-}$332oH2-MYP&zbRa!iTZnGPeyDujEb*EUn13d}SjAz=Utq zHxk#aTF)<KA^^BfJ_l%1a*yU4GUHfeo3v&K-$ZWM;nme`I3g^Vjt&ZSpFEOiimP=*| zG=o+SImI9yAbfSC+@@Ot#27f>Nv2yr3N+%&v$giS6_VtDI@I&HlRjzvWjD|chizW5 zN?0Q|tb!V%tmIGJeQ0%Mxliydy0iIilCU~#MtFj* z*R$iRm(@9nJ&$+6d0Hh(es1pk|4aOa^?3XU{}Q+F$p65w$`R+p5N{TRvMn+ml2)2? z=+%8j0EZEN4ezem(K0OB%E!2GgjN&>dQ-Kt^p}16`Zj{P_^g9Fd;Z3sAO$$_D0WF} zv#EI|yU?D4LxFikgO%hzdw-AIAIPL9Zgii`@QXo z-l(hPm{or^D~ekLqkn>0Rz7Zv+genDbcAC$W`E|o?7r&c4RBsb%kTd#^ah&af%CAB z$~nc}ZSHSmB1J}h`B5OYb)AsTbW1@t;?6&3&OpfOzdv9Wae4W_Cu`;0HB+;EtZc06 z4i7f!-i@#-Sb!YDb3q*Mvvi)-mV?xE=S+JkM+EGV!eYh(JvhUWo1V@pCspNAQxIH{ zpMH$-=z*WsAwV93aQuY%mXrtXOHE{qRl@8s60Xjj5cUbMRtGyEr5?l;1zr)c3NZWy zRLFAKPnS|oRb!x%#KxO$?7vsY7ni7Yiv-EsXMxY79G^{-q&~0z0S)^5(Mh#fuszc@ z%Jgj}$Qf*KKP+C@$3AUJR$x2O6Hntl?^K#?;|6TFR1x2jOY0;OS!Lg z46zmTkx}2I@6Xp+S(V#O5s!=f-CBx*OS<&N_IVOk&_majV#dnvpXfTYOO}{nk;(_J zya899b)mtXxHCG>*n0WI)up>5?!;Zp#<#3HwC4`*64qAZZQ}$BDp80>Qw{v!+<$(! zbH10y#p1D`{NEs}c5n1tdsLlt)aWa6o{jJ=4HO=EwZNgUhi>hg3t2*VBYXzJdu90Dm7^plyWLW8`g>>dl- zAUCKzwy$<;cCt{ijy!OS$NfWM&2KdCb_n%QgiOj0qsJZ({k}a4I;(39ygn>dm)YJJ zw5UXeXNONjU=Zu$5_Q8|{VUfG$-Ro}E}Y{_e}_-q3nvCf7{7IbO*P);@lV+D0;{3m9L4pJZ+B{Tet4;EgFYDFQHfdGOV0q^4)#x3 z$UpmMc|^BBI+%X|XXLSJJ>v4AYh?{_{`|iz4vn+ob&AwIFD(C)!9q!UIlucvqYv-( zM{D%M;)VVh0*E_+?WR%Vaov|4_HtE?#!H=KO{?y~>3lSZ0)hxa7;Le)L!?1>;8;Vm zycirqOCD~U7=5P_7i(HS>8K*R-}V142!0mp{$C4rgK>h-|Mtpd{|n*x|KE(zTSr#* zvus4hf6ZJ``S)2_>=ZdSSYY=}ZomF3|ISG1D_j}FLHsmiPgUfN(0m1?>6Ljwp2PCD z(=WYbdV`Lb*rV7i^as*(?alw}P%cp0;A3^s4s4sDuB47DUQQXok+?qzQcw5y_x2*c z^;fnAv2t^Rj^veOP;-^}?W4UHzc!&Z!y|sRNQTTA(A7!|KhuKo(8<0%mig=w`x6xv zX14y!kcb?Wm|bT#NlDgORi0Y}zJI9_ur1Hd2dDW-NY&=*i9|0a3b`n)kr|uP?#9fe z$`3tHHXRx!MCOh}X#_b&=H9(Sn% zw2-zM;>cFKb$ObyImw9m#O$oK#f!s^uD!ymETAx6+1!aU*oKeJ0a+6;AUx#W-a0il z>`f4Rc$Odnt5+mv1R1#hr1qrs8I-N9tEGvEJq)3xo!(+9bO6~oFBv5tTg`_Ccdt?Q z+G&@nG;P|^_1+<7?sYA7HgV8&#X-OKjm{8KUnW1_sZG&W4cuku_=YhrLKZYa2q|!3R5N5bn$KPv*QvVWf9v?u8BZ2MEzg}I z(ZU6H#cPxB)aEz5qI;80ZBBQoH^f+NpDq*ECoj1U=`gkJ3}~cLqGmyfzfG~XA}wY& z(C_Y;R@%1c`hsSzHJTHXR?1<|lDCLcExYD+?3XTcb|3ETuQ+Wgfr?g(oGj#cADT(M+Wf8Jr(R9B2L;mi58CEv%PJ4|> zgN}AimY~fk#%a#iphUL&N3xLJH9YrIal|-vU{EGWheFq3EPvYpRkJSwefM3-E>^ct zN6SEd~IP(%7J%Tg&uc%gZ0fP51p zs5;+hVz{XCL&Og+MR|{L3sWaE)>3+M^YsSmS7g!TQrib?y-m5}+S8a~=b8`~oLdp& z462EcriOQbT|Am-{;a;xmHW$Ys3&2ygTi?&iu-1UvIU)hd7v1+-Yem@zVk_Ubg$4Q zUS2figAY@+R-9i~`6c4div#@K8XtvVNlWdXg9iTcS4vW zcb@TfKQ&^I%&{KP!Fa*1ml-sQRyqETLdFS|Croj{!-QWZ<}u5aP^GX2uXTlP4vnBX*w)qqy`gNkJAD!a>}m!~D+q+*|w zpa0D-w7#VCa{|8fgmCCZf2+v5$crgn4`rR5hS6BaRs2Rswn=*Ya*HbpFLh**fV3I1 zDS5N@>HCO;(5BPYC}Am5c~SM)DT1-BgFW#4$I#E$9>21JPaSn^9T?+mjcPPH6YIoK z#%1;vKOS$5!Sw4bH~mt-radv=jmLk%m=DS-g?FkZ;=gcGbzy&XIjzHekVGfnl1tMm z?w@@;Tq5(eCVzYjuEfTc(e@YOlIv>z3`C1oIc)fYOUP^b@+m*T>O8C5$5I~VkGpIM z%ep*N4&%^YW8yIu5%yY~uR*~R9iWL%ln+9Vm>ZWWyc#yrFwSdJQA(`1-vJgj(IwE2 zDjKkZ^`~{l%<-Y?Y^<1zS8X@i!|WE+vfn<}7QGU_AIyZh1n2fb8g2-yGaKHSsvZ0A zaE~O+dauc+LVl?y2Z2K+=$C+I_k#pn1?_r`;>WGQl?~KQc8yUa4@`%ELr*;#_!Fml z>4nrYul*FcoVOjQgpTkrq(61}B%i^xTE6lsCk$Em=RA0Z;M;E-se+=je^H<&Uzd(E zijrlSCy_t3_a|o6YlLHYhY9K~;?nxS>TOrdQuK@|J%gQK_H`>F^U6Cc& zMuI^kgnrb9QIll)xuA7hAl1^JYzp!%4FBa7itq#$`9G1UpC|7$dI+a&CZ}Qn5nQQs zVg_EnXwKDtgdvZKO3ksdZ#Krue@;DG7%)DVQ`C4mv@&wnB`eZj`G?J`#0Z&Sk^+jex)6hm>fG38YgF%#zF`INzu)!YM5 zAa};`!S-_*#^K`1eDJ1}ndYy$OfS#dr74CHoU2=d z3h7j9Yo$&CAW4yww&`jsA*H1owJ@^=tiw&R)4DL~8|ztpD9q)ZVHB0QSK7ssDRR;X zDQ&~feD`bSRs)wEYq)&=xXrhJ>h%qEeE-*^*45+6wDFf&W;xpiSUsM|67gZYkf8d# zHL8vfR$0)7`uXhlb5YSc;*BOvwvZM19*6=*i!Z5ReW&m>$g>CMAAdx-?=#U#n&)Ls zsk*yZ(fzU%h8ua9HLx$IIW(-rd7j{`G;&iI2eQf+*dc83^LNdE^ z3$(9eM_=u)2?`ml8v5`h$zgNRgDo7Nu8{AFh(l)(Q>;7O54*!@tEpdg51A- z?oOj&@tc|tn>zslAK;kUH#@a1K?e^;mo9jmB2r!hB?1I>AB&YN+p_DFeATe5n>2$L zf)I_*MV;(z#8oITQ9Z)Hrh(8k`;yYc_ess3E!zOwM0AU*e@uY#JsBUVxRDiD9h2fs zR2=ow34>z_3zj3I3f3uk{-bx|kYd<*Chk|Fyjc<`{(DFXbDO(v@+P?+6DE-aM z=)JWsdu6ykg!(vq*nN^GwHW}p|J{LMt2^$~4N3Yu zHcz7XetPMr9$yhhS;WJ>l)5^@(d<{yYD1W_C&7JMrqD?Jinomsde#HK-87Inb?$4T zl$+K$>2I=-%hMPaJFzsSXmwhs3-113i}P&7y7q_bqr1yZgpV@3Fo_1!F5eMit=miA zKV!4Mf{3dN${i?RNWu~)j<4O7aT@LY66NZ-cT&z7&7=6@NG1t_cQ_NK`M+G|e>&bYCbD?A zWiyCVdjC|NxwYAbhdVj`blUJ|{nwU;5JCC8!>)JefseciP;rkO!^T@VBNdWbgG;{y zVD9htg_qMqR2%FWVu!PhDx{-?iM4h%NRL}bqcayyJ~f`4f5q+5Q~SEbR}y*D=quPY zZ&qRC=4^N1gsbE||5;kUv|f_LbyW+yzXH8nRnvfw-i%fsMjm^kP_YtY#GgpQU_-MA z&(c<_ZV(+Bsk}WLf*0J|QMW^nFLK+B6ESMl_LHa}3~~>O+?v{w5TrGjxeaG3kn)Hn z5+71`C-AiKQ9(W{UVH`l)E>pJnz~qF+^(;AdPAhlevaDh8f8@Ls#(CeKu) zO{3Ph%Jmc#sk}^QBxpC#gh|larQ+dfi0(;RSy&0Xr~W3@{T{Q3xJ3n&)b)T89jt}K z{eU&LA#UBf==e?z)X}D;;T?Z7brV70WKBZbq-IFL(2}eC2vf+eW2^-D5aI=zZ64x4()W}vu7cU|r5*QJ-L2 z_m~@};-(vHk9>$Mj<*skw|_so42t28)hj3XcH`@E-xX`@;`+Zh?TT9@o04dw``JDlp z!MqU>g+x3+^?eBoxr2HouU(cB2^Z>F&DTY&_-iMRyJHG}HYAHWE{z1;DSo3&&_}Q{ z?Z|x$RoX>+U$WkwCSq4D?Zc%YphyRnLq zLYxx+B&)_y_+@KmWL=}0n!-L;v>r-P(B(HD?S~I!ROG-T9>K+JhBUsCjU|T8tNPxk zxVtvmry~{>#`;njIaSv2L8A;==-w7oet))ARm5v(c$_p=K6H-$V2Mp>pJ3O#54GUB zhC5^@xn<1E4!NR4kDtQg#qXs#Iyu?&rF?0wQF^^MVfgj2FC`M+9sYeCPcML^409D!BC;6`NK-}#4 zm%lT9(Mua~!sic|pl`%iCOSGgTxZ1~pKpS#3wh?V*lou~2T&oS)IQYm=pA}1O-cLH z`Bf)zcdg$+xwqLWwA~3~<;r%G);5EA+1uqF*j4THlq$zGe{|IgQ?E=4cQ^MxNuqMJ z3%Q;YJVqj5-LIaz1Nr#(rxrW9J3djOcoM(z%MX>Xxml6>dL+NJ9EU9h$Lp)idh(2n z?Sg>lZZ)9&`)9}a(WT$8+&>4>aUrTLtqsh!qeWG_XvQVvyR8CyXql@kF|lOw@p^Y6 zgQ1~tjvFw7MKjF^qA4%<$-wXDArM%DLAk99+|fzXhMYU+mm zFSD*3k3(DG=+&cM3tNjnmNj0HJNICoLt@Uv<6mJiZDd<8K6nQH2Z>zB-Q1DFmhTUg zlOgv$--ld)+N&q=qp5T8LHcnj}()V4yqQTqYKC`mSNo)sH91RBl6{`n!O5pUC9Qip#8IeLB* ztULHbNkcB5{i$~zOgZ?xx_Y*#5XeW?|6DK)O7=rOHZVw*@s{V7;<;b~y62>qpI!R* z^km>LA;-1py8b>}t zZh&X1I^wSY=r;1{pMObzzG{kApD00M!;ecRLYQ`T_uGH4dQ`-_tqR*Qu$Xg6_WZ0j z&Q!URjuud=>iG{Bz!preva!k)bZyA`ROodza5TUE`*GK4KJ0IwOZ`f)-d`WDP(m*D z#`9TC?Fy{$aX^m7-%)UZVP1TL-IcRX{d&mw_|3qnCR>4&Nre@>>%cgTI5mk*^{s#L zdlE+~>T>8d+%z;5``s*8L92Dwj7_3EG7hr%yWWbksCWOyTEcuc8}MIGN^PAA0y z3eAH|a{^)lT=l74H|s|jl61^z;X6jPE@`5{MFC8L@4v=5&ub*{%3}Y=6XzCO2gM}_ zjPB(puq4v=W-D7sNAI>i3A6`wk>&r78$LU{QMe^-*@6)S&jt(ij`T5PTA5CAeZ*Z` zS;_P;m^<4z0ThBAV(SWh+&N5Y;|)E{N+!?^Kcf3}h2(G}%FW|s(C{4CVBXijozU<1 zHHYs8jC{FDA&+nvvKD@%Ul4xs$m4@;5T&SNMxH1o1ag$4cJ4BetQ7fx#7ybepyWLE zH|z6o0YpaLYU-aK0;d2jUV}h9?XEOJJ`w{RuI+<14r#@&yLXvlM{*7LVA%dk74}BC zZEmv*V;f(oe>0C2+9r@&EyIIXONKVwC#%CM;e* z{5L+sXr_Zgeg(P5{+FUHkW2TGVc2@MJlT59hu^c_G2e+^WGFk12tl)q2YqY0oQU1g z*DKkE>GQ3ET^=r0Y;{K;ZF*^b8EZKN2@<&Z_qz>Qy_a=AXQ% zMq>V;(FYNIJ$A9KZmwLITCbUL2Bq+HTTI?m3-0iILi?W%igDtg$5!^5+jYuK+}vSr zlBDLryBhQ3lqZ^t_TrxP2KnwjxDSFUExS982@(tED!$MQMylO_Ph< z^N29^LHPLMisqJ$F0azD%gL`|h8k?-p?m;is>$~#x#v-nwf2$6#u{^x(&!RIbXH%= zi2Yvy>oPvuPciBUw(HWi{t-{%HQ)wJbk!(9QoaSSMT09&GR1!cFHP zpDCZ1{vHmx(sOJ6FgKc)*SL;3$jE9oPN4>|*Xo0F*|Si|fqhurQO;#TM##@T=;($= z^9{C;9H!kKs!(FsL$h9pgH6>ramwWgv?^b1#C?DZn>awkd6Q$wV!PAk=AH|w-Dqt-{%Gw6#Y2@$M#8)T zkd{{B8suZBvVS!w^(y9ZlGf+6gV)dIRbtT|-#=k%#herQ`A9wWxBrIw;^5WPrIVp9 zjk`i26llTC1hjBaGytdC5XijVK<)k z`|yi@Bwt8qrt}O`^}%t0j$F*?uAEa``No}xDnEW^j%EEmyl(y?TT3AN%p_8gK%vk} zp4t-=6QE*x^0qxF^ZV4O{)<<1+QX=d`;=Uys6G~v2dXDe7#me!$3#vtj? znznP>2S`gSm)z^rqJM0dOKHQwp0sq@r10L_0 z4?y|D1_lNOl0bS`vUN8NZz3o7a(WUdxq2O4URVSMcq!RCb~0A7?>_uD_j!7nv~K~} z$quf*cjuq0kw_%akB}?CIDVAoiV=3|?a7bkjc<6j`95#dAv{AdQV7v{xqJMVLr|u| zw%bmM^x|9Ke;;3`NveLO{gYw^Q@R(}(5hq#jFeyagMox_17R>~o3)HR3)Lzn@!Kpq z>i`g>J^#LmZsiVtsA`481#{B@&yOo82sg1X*BVS;2_GTLJ}DS;D^rV_Z?(*g;tFN5 zipbYO48lsik2HWLixYCl!|kv{^TgLV6AYSvDJ^)Ib%)hF9T+~Nx6a1D0p8|x=Cn>6 zQSHflcWBvdl`y}$5P%jcNDxQ#^R~!G=Nid~wJ3a3%Xl+%sWfAAvTA5!?AZ!?JGoW$wxOyKqSlJIazB;$JoHiVjg9_{j${7JK=#k1I3Y-( zVYya6JbPE$fUrG4ZjAfoKj*%=3EEQ9K|kHdSIf^p-jzK*>}w$jvepURrxP^ThbaVp z58v&uVYG2!z!e`tjw66F6Uf%y>B*-%lagdw04|8A*VvL4l7r{}W_X{wv?_K!YEJUH5h+&jcGBv) zZf0+Uw#!4nySdf8+@W~5Ia<<`N^%Gg*bpH)`JaK({4-GV<2T3Lkwfk;3{L1G9x0X3 zI@2l5%@?%=msy<`o)&XzjHV--@6qc*zxUTG~r^pW^a8mb1Vnlc6h5HNd zBb#N#F!p+N6I}x`E@C3J475#SRWDo2S1ADIR7EONf{T)$4Z-^}dLIOpe;O(V3w|>e zz*Kya)CEyk@*6Vw6M>F|!k_k)Owb&<6Ru@Y$idE_re9(aAhP}AUaFkoK}jjl-Dtc) zfmYvXo@_tWX^Ho3+#u-b6hgl*oTXN*@$w~;S9K@B!-Y|*GIO1EOyLSdy z|N3kGJXebaMtSy_zh5y*Li;Dn1C@9!VSA&R6gqv!`KZoqY;Lr0fxh}2+PC$`nl5)F zMgzyKQ|-N3D&gQr_yHaAW;iClps8y_~u8q9D!t1=>D$o}MN3)Q4m zU(8oeULdKTr2zb|rDA_hIq7<^ZuOHz!sA5fKAU31uVs~Z0k^32iZ1t{u8$+=u7;}= zY~3-ak56KEr~%Ws+T~9vT4H}kX_RTsu`BnZG3V$E2e#~KM2m{i?a zzM{+1uo05pOBkuol*QDWCy!_=e`1nx-n&rGg11U z2>?UjfBhw|lVW*bM`D34ZFsu$vZhea)+5$_W;UJT;mbFS^MJE$N?}be_GpVTHWYr& zqOj?C4nApA_W@zn+tIMUybKQ=48l3D{VjXBP;#l{4C4@T({_zYjLgiS!noyR#Hnvj zlAv4(%I;uQK7?D+9U;koFOJBgEdfslubAP)D#O8pe&o3LW=;UC^2V=UK z;{fb0k)~Aipd4L>(l&WAt)77m$0SiSSx$)eiDk{!C3 zETC=PwK&5tUiA zT`djkJP60uWD*58my-zq;8l4neaI152~Sr^5QinxVjOq*&)hPgm@cLO89lY1!<(eC zb(1arVC~e3NIDFT5>!ZZa!De2(tN=3X(GS+RbTj)d-Nd6&=YfJ#2RzJdY*lh?*Y^Z zK3xAe$Ph@;#eZCDNaOAQjTgMrf^4T#cE<9R=Q9sL~deg=HP!pzOH%eRZc zOVr1Ee(~?vx^AHgt@Ik1@OriN@;KqK!|h|lBWa1L29K{N;u2?5z!U_zG2PXno0Vlx zKT*>)QOIIn_b`9{FxiVt{`RE)f4G2ZBz70j4iVgtXf<$GBO92&BS+vzcl}_k5eNoh z%*~N=l^Q|gz)=x(TKxrly1=I-2c!NiJ-1jEI}O#&Fl7=TC#C~BVWS_Y_h&BP0u%og z_Dc}4a{O=Oehr4mC2l7@x0tT3b)fTHKqE#7lh8{U4kW!7hDb| zjw3cMu1vNbf%(wNaLNR~^DzWCqT6x{9k5Z+H?lAoMg}*PF>&D_0ExZZ1HZ71p_*RP zEu5&g^4M4Z)NJ$*SD<>P$>hFVXOaTsZofz^<^#$C3T>D~3oEl&m>638pJGHMk=}MR zkQ#s*IPBbk=7)IF0`STE0(xVm{V5tz^fEzYbz$We@6%=gyE~QH*fP099djF)0@IY6 zIM_Y0w%D3|5Dx8gRLDbcCw-E1JMHUx+rRH!>qAlITwB|e=F{vXEUEYn;Yy8 zhuKyy>~8uzdJ>INRNeIa5|}KyzVuA_ADsfc+O&s%D9*6^cH!CLkk6xNK7}wy{bah5 z#|s%QS^7f<8g0&fCAZZpRWUK|iWGi6X!*|szdhU3pFF<=bZw>YSpdrL%wWPGd2;VQ z^w@gQZm+Z3cYZi^ayT0eo({;?>4h%=k>MDy^S@(GGX9za_9YSnJP=C3G-|{+J=wYJ_@jL9Dz}K~jW8|Qx2<1;)ZaV*_@-Dw4bEsL zAhgaTs^U}n>(>4vvSF;kUKug!((=+$CS-aKEcDs?a5br)gK*6OQbEH?w9G4{OuXEB zu-0Ciik2{XAbuRXXZ}*>KO6ys)5aXTF>w7O8b7M@*I#N4xpj#Y3(3q z%N@G?%U1aF0rzwNL5!3`9{rE)-Tf;fS*E$Z-Szn?Qhyhna~;$DF!lP9Uta0e+0L9w zip#6UY63?KsDtR9Xr*%>vG1-4fXC_AyirPfr0%iLG+ZPo=hJqgI`D&=- z3&4@z4*)xjWO$;3xSZal3tBE+b&m&Fnug1u#9-s3AGGqpZpoZ<<83?x^@^#ym$FeV zfY1nt;^N#$zi!S6DSE)s2)Q|XbbQ=>WHSL=ZwuvHnIFESG>~ty)!_P}AVASPrjaP> zobopD#@*X;`6ktk#WFaQy-}R7%q)HO><7!SX@KzEuc3wV*T(Cs0v{59ft*6w)RY7Q zFE{#;=6#pbXSWg2ys^34RuYnu{?P@0D>Pk>{ciC`ok(u0|USkoqug<$^stj7hO4xQv2q;yI-W4*Ha|MmltSd)KGy#HxDjVu_ThKT*M0Fy zmnC2koqK`frfs>jw1j%IGhu*@Ta5;Iyu+}l9S}cG3!GWoks_Y23T;QZ>$kWBJw;2t z-*>72c8|)tjqs~4Q?>3oCHw3B_ExCN2`rH@gq56xFclb6$_^=l{IhceEQd2Nq3R%c z4wr2_;H@9-vh{Zt5SOiLS1-$>o9>4~=UnV3vtV_9a&>vX1}DDXtzOEGQ;iTjBj(Q& zfp`P;wU$&Tj>^}sSL}Rq4d%CAwJWu=Ym2Tt0IH?XxQY^_d`uiyaR^qv?d#YYr}C#I zUKB&wb4ikKP9nBETI9a{gfyN9bdK~lmRpB$)j{)1vsL^aAM6=`XjAYOKKZ_Mac{#$ zhYNW;`}^aqIhN|mcICMqz2rnn52yJKOtK9uwQb~38^Au{0%QH;RpDzepZ%DUmoW{F zz};ve**`7Ujb>);EL$0rH0+VM)^t-mI2X@&gudvN8T9K#C;$)Z|41E|p$MByMjrb> znsS&}KHk;Cjr)hB;1T@L6E9*Act?!j53;M+ue%=XulQ5ivg&dp^b;*qD=TayD_s|luTbYXAjUV`E4^;tJea zwd8T2XcD1bI@Qmpya;9-T9Z{~K2$uP$Qa1h$Jpue1>UCS8>PM+slUJ^Rq3+UD){A9 z=uaFWq^^}HHNX9-ju+u6l&3$HXFqgWCq_cguT(;bf=`ZuAPz9~ln}kEfFQWya6)=l zFb#&H#^$i&=1i=Ihz06<6-{0qRh@!7@#6fahfQFgup8t|d<>h*P`M+xiE1)2NyG@* zW<1MYxV|*csl}yZtLsHb=hWGlOy2d^Q9GlAe{QMa=afX$|JvKf63vq89RrT7g3u7&@6$>Pl zk`h4yX+b3gWYS70ASEI#Z7T`_lM<0oKqRCQq*VlIX=$aqb5h?m*V^ydd!KXmH^v#` z1ph2?$z;wa?)$3e`C&QcIDB)g6yo(QyZ-HQgG#P)1gFE;Ih&xYa>odWaYd!;pG;Q< zeyB!Qq@7uIrMi=Og0-@*;#w-~RQkLP-NK!NvJ|QN|0m+;;Dm(M(g`f+jK9s=pJ`_u zZ?&d6e!t-rUZEcmo@*FH(r#dXxt67M)H7UQRDj{Mty`Jqp2)i{>jI{sjXa*TtFs;E zp5pE!Jo8o0n=C;*IBe?s_y_Vs17!EnPL0IYmby>C2nl>MW=*&tqm-nXS4iSb?e{#P zb8pPw!{-<4x0YuV-YNS$t-4=Otg@!{T9($IHZs@VK1w=x;9e1dtjLyd{3JL0{{@mk zh6WUF58!TWG$xz3KG4Zv_0>z0tI-c{(>>=(Dwq^;Y7>V=m@o7@s)60NJPL(pE8SVk zibxtN8C6DUi4PdMWquY8I5q8T4lfzn;wUIIA#+erREA30kwq8#_PV+>ho{LSM)bcj zGHj}6ny^@$rx?KqRU+=bJXT+H-N#n#NYdqiQ_-YslL}&iUPy$L?-?}cfU>>&sD<_0 zd>JInno?zYVmM@!U$ODZ?%T+6?z9+nWb{R=-AtjqkL+_+A}6WHbk1%;cjn;Sxrs90V^&@yMEck+8&H2~)zL3~P9G=j zPq*S^&3i3Am;Ab9hx4BA;!@oO=;d}QfgkDw$HZGRmA0Elo^v@#woV0~1ak#iX>V+V z+%X{K`-QO18lUtRU3+%l9U2b(Tv@2f{X+Xcx`WL=yG)dHPAfj23~Lq#2(uSV*15i3 zRSr=;s8$^2fYZmeTD>%#ID-R{syCL`#)j3l0mG2V;nH0oSMeMtt&NCqUxv0p-W}V^ zin}CZYXhx{e@vsguMRSPJ5n2dph~E4ZrWTo!;PAqJv;OTTeaT6q2_qK01-$AWXZWE ze;ZJO8*CAKnv6$a9G6BiOYF5GK5*B@QY^-2gN-NvYAjEr|{~WJX}DQYp1j`tV(+v4xBjWOW9SBrF-I%U>mX- z;%;{gwy7*p9(d2As~2-|c-Ye?QSYtU^4C_aQxO}<{)^*n`WbG2O3DelY0n7%O$-e+ zz%eMM{8v|3ll4CLjjxq-a0LCb4YGV??Pjvj*3z;%vpj1m)4t-RRi&M#k&2LGu3haq z?P7#|SQd*z+g$inArXfjv*Nm%a7XK=s3%qRzc}pVizp0j{&`^rNf+%jGv#d6Z)@}2 zIgYH#9e3*~86_U9dW?*JTw(3$%D1T&8;Czxc6mJ7D}YVwi`{b1GE5P9<_8&e$RNsk zN3scApKZ(>tc`H6X!@W%JOd~M@?6==rVX*Mw>nIy*MnB<=F&ZeqTOVFjC685tm#_b zjkMc}ISK)%)VicE6GKTxFWelviageGWy_lRZmdU_k{#5`IvGb#5^lg!NB(hG$Uc*A=xgg4 ze`Z+${U^TrB`jZxl`8s{`NF0h>-pS}HR8!W>W(xV6kX#=bK2wb>G!Mc;JNIlkiRIU zeyD68V@IA{Sm5KMwPDW7J)ap@cArZ%jhoirF$klCKtVA|&SgmNz!UI3S-SN1ET6vq z^@B>l35T}G?HkAU@bdbuOdVXbsOEK46lGh-YQla2%_=dT_VoYNKn( zJqaZX4G8i&vyS13P07}mo%@O<2KFhu7V9U8vwMdS9pE}i-YlVjxdyL#*I{09qiK<~ zlIUaIg0_;5G3Mb4p4B=Yt3SR#Vn4YWVXmo-1dWExaFB1znc$G7KOA|Pi&>o?YdL1d?VMGY7Xf2ImP_&hqANun!KIf zUaarqXez31Unw6xSoVHZIN@eNXAbz5IAgaOKl;(tcV^-o$IM#tVVTCcBJ>SJYOZ5pz;dbUj5*f+_G0$QcqECbfw6 z=(mE~Wo8WgpqG$-WZ>$sgHdADw_y8LJ3?)Q%V_qC7Hj?5SLY^5v$)*1ZzLxT!q!a; z=JBQyc%6xS^7QDlw2?C>^$MT+`l|fwwFee~2H0fL60-26AkV{0zi8d*qvuk*Z^&RT zf}DkJ(;ah{Eb(Ea{`Qf*HWhdV>c+G;u)XwWG`}TrhwXX~OPmVB3p3AP>(hE-PVc4W z`E%*vp2&Hns|}=7KsQTgP*L&iiRBvNdWTd_qJ%GsP`(qLaPjd?+S%-@e3|F{sl-Y9 zns_I>^H%Iy7#YOfprCSZ`^O8Vcv~`NLfb81)?B}b^Oww;fa0IZkzWaa4yx1^4R8l6 zfaS6KtgJ2hKTMwPF|7=ZyO3Ro$!=1K9ce3E{_WAZ7@oV{9@!u+zV6BCu)5W&Z&A(K znyeL=>286uBK;g^5ikb|*g~3CqQ5dWQqROGFN}0(lHk2@7d`cUeR5dqn1A#|C9_-> z*I7~%XcQX+piLC}$=scSDTd5n6k~p%#liHa7V`MIJ2WF)bS)yxn(xw`GT*l`|#AT5De?aXC&D-i&3n^{!UarqIXq#Ps zM~bAM|3e4(QDi{}PKB~x09o**>sU|CEPj=p>(yMP3RvTrM;60*z8i=|9ps4)4|FR3F7_UoYF+# zZj983CWkX{cT3K6b#%C-U4lUiBWX8@=UlDIW{P66hV+OECW9~aFRZbL%GbZ$tO?F= z&U*=aOO>&II{IlwTrPb_-YD$2I-`;*qPSMIi_(Ka>cd~`?`|-dHk=7H`fj7-&*?Kg zgOI_&b?UZ)Za*p$E<{UAnj0nISsatRegonlj^m7X73#EsdD8Mlsq`4n6wa+US_yT9 z@jJ9ZL?aIqR9XtkJy<$F6R!J|$g6q3IjyAsl40F)Hn*vHTw?vez9&I}O`jbCV2(E> zw8Y3KE@0fRelk>Evxr42x*G3dWg-rk02m)~_9c#ANa(yEHC6LkHd~4r_TB9@={+)z zmUlXJ(N|nF%hAS5JFle%M1q>Ngj1;-nnU)jQd>QApPQr^5JD(daAVH#VOYtFpQm2i}AStsQFJdCAtB zWU1Mz&?IRlf*1%Vkw+tc>y9`cU3w1NL!HY5$ez1CKkgThb!#5&Mgvczf}RI+ z0#FyXc#~(r3bSxJ)4&&wHrX3@k3uQ?uJY>KtLkG51D1C6 zX&5T#>A!oTuY2C77H)%cHtC1Hm0sR^R3e{rCrz)n3mzsIlCqM3T7Qg`BF_l|H;2T@7E94z6S%ctb$I@`CU-Sfqu)*3ne*_x&9~`YYr8>VIhVbu{d^^Nl$O2rpV|Z|E0ne|b4fqQN!p zAlh?Uz@T7)&fA-xzgmedK8s}Xf7E4uI~v=$Wi8}5Og;4@cB@nOH7bwDcpXz}16f{j zDAAs$2|Q)+y{wFV$OhtrZmLnD=8>MpwQ}9s!mu&T&JmuP2Qb_xz(n2^sIj> z_QPJ;y@f9G3C^7f12zBFrzhD}SPo0hFYFzNA;c)>-Rg~?2`J?a7n&_e`&L+(f>4q; z?0MGP9HY~7b0_t4r6V>!jup2xG?;e|Ow{cy=!MID0>!&iW>1R7hG=-HVo(Z|=u6AV zQ{xO>MMuv#(*3vM{pCZ^%>qlmnD>yc6Zah#PPmX=dw600m49cQnE>PG%sVD+FMboy zU%e$f`{VgDdiL8ETBbCOS?;r6)^aCB9o)Y+ZyCrI6@KhsYrC_zM1K#(Z}FVJK&KuZ zic_YuTCfTd+x9%E%`w$<q_m8-bcir zY^Gq6qvL{JfBgHOEv`^DZcn?L%F34IOdq`YInT*>`D=$o^PFebo;|{g=Y_)>-BK!uznaRKF=V0 z{WbZQz1h5n+-m;oDvoMLL@G*#r%mZqnpr<_84fVk)>bdF`y%bP`I5pMt%wE6%b(u& zcf~w9-mCH$7#Pe_LInxtd1JR;#SzV}l zhxG;czlVW1j9V4-JQ)s2NN+_O^rHjuIW(nV^RFcPe}_X;&sJ$4YyOhEeleY*m3i%0 zn&Oj`17x!IZ~iIy55fOieG>93{*Mu7{0ix~#^jov20Inoz5mT05uk88Oj&&XWFOfe z!Pn}+|0*H=TP=@Zk=>GNe|s@WNlpmzkj6}ak=T_ zIgTf&MwcRdHK%BOxLkzAd6 z_%*~~xSqB18G|^B`tjV)AO6g)uCAjs zv_iM-M;hbJ>fXf@VxQxOR+pyj25UO;DcMybmRw!Oex=Q~yDp4z@Uo@}S$Byky*^uS z5UUVWv`(r#7yfIEG(WoKuiYP1qh;DM%}q%0YH`85{GRKp=ZoU!LU;`%+(~n)?=H%} zI(nNAz<$;FU+FELM{Hht984gk`H{IIs(NnsVH~d`6lu}X;Oh1gA_vyp>w*K_bf@nuIYSq4n8X$!|Edusf)+z-~~vGa2g^=YM0;jLKeGG$n){ zd>CPg|Sx9_^RDC|zWf@d>5eLA6Yo1HQDRxAJPQ{`}xEQir% zUj6*jE;a2KCDj`-C3?&oig$xgnn~#@|7=|I4%J$C%+$TMGFc>4doQWt{+8{pYr{RJe&4^9$uCzFnBu%J zrlZq|B(>ijZKu~qk0HLohRt@8eOapI%cB^2FD}A#1FyrcT}#1?o~w0oMFiSgb??6O z7OkGxp=t4T6QjCXk%xPy-;Xr+701~qEZAjQrOn2PnjZm^vy|j}=|$|H9pQPMA85#S zp<3+oGWK;T5i+jfFx5GkSLRJxl~Ah%p3=MOnTO)Al~1nVp)f_I4C@Zv0Rx4hQa4Ul*4AGNm$GknVmz8| zEmsgjV~?+ux|~%xf<6)OaG6f% zv|3*rn_R~&>YWOHO!sdqlEhu+%mPoU#_)J@+0Se5OHhk@S(vZ!bp>%MO`k>eWlWtacpVY`1e=dN)rvEWqp&! zoRp7=-A$bcQRj`l)p?2#^K9>*11Bz?yE|q0WH*g{k#Xf=E={=$R8b{w(IXVUTqz8f z;JU^?ib+U#_;Mlr*7TA|>IjN3&n^9tKtXP2ZmPoegj_|dU_ zP>&}DrZ{Y1^yk^^7biN=O-E`jdQs7%Niq_qXJ$BcbEZ%~y!(r*Yd8HiDEa4z-u){z zluuE`0`9Tw;n>`Q`sZ}&YUYoevsw)yx)#LU4y40W2CT2Py(!$v<8>j|isgdIK2;eh zZG{lh6BYh_wCgudEmU0eUTDoQ)iCVy)Cu=^-1v@J_T`whTX{e!doa(nX1SsYhFtrm z>A^_P;MAD0mcU~M9b)W+a{@n zKk_;`ISEI+lVBHCe%p|e&e(FA*9YBi_=)qj^5j>_Mbe-2?Yttk6aolZ-n;*EtSa=( z%EEYq)ogWe;qm}2hZg5bXg1-8RagFJz8`LuL%4!5H11}HR2!q0eETP>fKu?(*a=Sg z%dOv1ZEEfSe)#zJAKXBpgrKeHPACm|o>&yWZA^6`?)x$JEnF+#-_$cl#*Q7G7*Ss1 z|EW`LW;(&=`-WYG;V^Z))(VNFFvlP4)kpBGyy)4g!qRURtq>~eblWR>;4R@>pmy@n zN)*7&g$2@&cZ!t##fjc4BX98IMqok;pNU;jogm}EOt4loo`aXE2dwjkqXwMC|nhG$R7j_5PiUHJpqN4d4(C{wKZ>^!~yHI3;4=SuunnQIoG zb{u4DwDM$se9UP#)p~^&L3`KTGH%s8N2}fu1^4%9=`Ab{7dW5F{$wH0(LYymzLmHaEoT@jM$<6exc);?A-*VqS4;Gy;42@jk{bv6m7WO9yF= z#wQdP#viKnp?xS%w`XbL?sQMQ(`<-O>@&Piwd%Eb+863CBaCa_;F1b|!qt6e*E}|@ z2dAcW1({3u9FBQVPzN=^5_09+;6sK!vyqo70y%tSE9F=lew?|MeOutv5seKorAD`J zrqwxFM4h>zIv|Ibc2q>Ih4VMW7T%+mmcHsO^*M8jCg>NpO-=1>pe0VZQjRZDlym-a zlQ-61+fo`mOpZdvq%l@xiI`1>zxTz5gufWNZyDB@oX-!v0-YwiouK8_U+z#rLYBb^wCe#QS^tSE|2{AbNs-` zpB#D)T6<67P?={c6W2*RR7?2`noiY z#hZM+cNcdU5j;# zug?w(b-P8khu{i11#=)K)=P4q+*X&;GBRdGC9X6jXebKpWt2!t3G$&Abp(W}?xo)M z)_tb0Tt#w?rOpX|Ky|9cr75aLZ_e5DU_4lJKkO4S{;{9gvfQ-%=xTq6fkoqo>$*lA zpY2TPiD;mw&P0jE_FV(IB;)$Y?xGvtpT{YO6Ba~|)3RGvYMrSO*Z*`&Cqm4*ufVGP zQ;^d(_bmy(1B@-jlq`mRz9qy5hYq)9#L?xSe#vG(_N&fqUtcYc!$@N~-_Sy?!>Dn= z4-zq!#m+>GL*WNiSGviIbjj9V=Y-u*IW!W~{r%^y5+72}rT8tM6_hNf1DquYUe(dH z{lNOnhYUCNfEk5@dEvpa%E|*#mTbaOGeNg`b#s1FRsjqPFdVa=A8A7A+I{S-+=CKu zAfK|$iYE2ljn5Br-Sp^qnI7U<9V=<#Ih9lguwv${*zjJ7`OO z(fOnyBqY>oW->}I;dYL!NmBfUEwWSIg8!6z($%bl<%uinXDypA3suEkF7rBQirq&Q z=0iJmgi~G4)*Lq_`D`B)b0;-+$I#Ky9Xo4gIKkJwp`#ck__2|SwOfJBU!5ZsdheP> zdU6bh7Z?8-Qm7Ex`o>V6_+g%_b0uB}3EWM--~3BXr77+Flzy2dAv98(t6N!mEJEDX z*x2h1X*iE)+i$6GAWt#m)Ihm{j|)1hjK3yTyf>Rb6*>iN?^azlMi#6^i}|Rj=q0{GQvFJUd__5qmXRg&A8mox$KG@2eC7 zMAkc4?A@Y61_wkPZ?&4m`rQ_rJ84kp28QUz%q<}yk^7Vd(i&ZriZ4asPC~o?jlj+K z7C*Z#Cffv934fS=oH#_WKlg80$X9AJg@`Cu~R&96?zZ-ec^Q zg!jblWqEItrSsa163J!ylY^+IYmsSwhw7G>cNRaid=!t^S1aMZTq5LB@hm=}#4AXG zI4Aje`bMSi;Ldeo&)9>!MU}gGCA%WuNpsWKPc0^@+$NRC(eqtcyIV(;4dm<2Ul7fk znkb0Yubn7*9@@-m9{)mbt@2HbyiYc*&kB*MMD=WBq!8hkbk)4xrf<)x`#qy2Hlcb@NOd!{kw zKKi}&`(jLE((3BFI9qvD2~F>_r^th5OxBQIbkiOd@UkNk`IM_auaTN)Juh^Gb0D?- zPcDF!LD7P^p2S0?Fyr-x>Fa%eEq5`i5Tb~P@Q+EgjN6LZ31>wESh~*4PP}>Laz^pR zqr>k_?01jeu`O*+NMG^3c2uiV#KSMB27LOQMsF*h!# znVRkI9&LMJbkO>w8^iSMMTh4@ca2&$UKBg|-Ysw;iKzMyNhS3gy0mZxn@=#@(b?=6 z!5AooH%2>yu4iC-0x)7 zZnUGEV6Oh@g{qO5$l_QB(Ut$f<+ActK9ksARDN%ap1cU|(BV)0I(R&hU#ied$jLb- zej>s3_QZl;LSBiU`Sya~hivy3^b(hbts;;5>a%jupRpjA(gYS*^*l9=Q0N!FjO#ln z_ESNl=i15mokOGP+~ARJC0!PmM?)LucC;=ohn<<7lo07%8(ZhptkG^@KD%7ZufF`}2YJ_fs}Fka}R@mw^yf zpYM?~A73QdXyO@@l&X})_b##W($2O8%f=0Kly|ZD*DbI9sq9?iRrpli%w{teSX1%k zy2;wX0VmzRoJ%ermEWt~(bmhcX{lMiougvMu3r-yt6f=inM|5#fg!Vtm)Yk3R9Z5=iLhh0 z{W=w&kgKqle8~3rmQB>DCuP~o=H`3G868>8%c(~u>0B)%2S>F$bY8R9Z|nN4wQUdS zy{67JHgD=d#<&8JvdsCiaylK4dUYrF-xKaA8u5RH91E-A^M3es&_C5MlZ%$&<}GT2 z&3E#3RlnvwQf15wUh7&Kmid`@j<8BOT;zi*qOA@abgwT>y|VN__^8G7BFfh>3vw~1|8%W$-0fcz(TzDRa&(8gY4pAxDxo(48RO$=^|JMn{s(3JzDB7% zI=xTDwOe%kVk={P0E(1XH{p!i`tR7UrU4)B%pLW0x1N~J@vLvZyJ~&9#rD;my(#YN zo*SH#?ba>o`xAeyeDZyyzv4=-mvO0l+WkgZ>fQ*gyF+I&V;q>VSd$No-M#f^d=;&k z6#`2RL`dFsaF~r2D)gYzWQ>^E%UC`9{hQX8$fy{m`1SB>wv*T%DFy}pce0$O`VThT zu85KyjHF*(8)@S4jpdC;^$nB^TKC&oF^2QzrFrtea?AXiL#NjxQt-`r;;Ofg@ zv3E)QDWjiggXBF5?S3dOZclq|ATce@zfOu5&W`Mw_do4+{rj3w3JTKm512#gzi^2M zH;=+QN_oZa`S}ZPJ!mAYGtUaS*YJFHz16d)<(7X&rrcedrY&9~DG>$A`huFL<3is_ z-}2I?@?a5o>_g2aGx997NRer+yz;xta^HOUaQ4g3osvyE<6QbN&7h zm4ce)b1Uu&4~qj(2%S zgS)l%aw-S^SaxM^Sqw+pq}=h}8#NlCVV5>h>IF9mzo%egx&ChsHa^(@LSFQL>#4Q< zJ9#!1ayIX;XoQdd8!1+BiUxM^)Sf0XJ+M95fi^3L60#`zjSgmEW8rzvO8gre(5kD{ys!0yoldy4{h(IF}5`KUpW^z03TFNV}-; zv;i%qmCkhs#eNZBA#NbC0fz0{pRy^v9$I+3>*&qu*G;(&meKkmcc*@fInO||zf8Cd zOw00D?Hge=s`!#lev=9og+RI1jIINk=A1ETk_ zz95%3l}8T@j!@m64J~d;wfq$@$3oMMoRGzZ^R zhu{N%rl_Z7@s;1Gw7h-G_PyL!Gl$@0#8h;G^dQ-mW!}JcqvRPBgVeWYq??#AhPe z;)3t^m6oG0aN=%DcR=!pp{ym~8XeWuN^BPhUQFt|`y5hHJ@L|Ky*em3#4 z?yIzRpP25jri2e!1Qqq0?$4I`(88nef5P%d0M~YJ`V2*B zh96v+cr(`H8rHQl$MH|N0%gY0JP!A&|9pF4W*AVGbA<{@5F41!C_LLuPg-AF5xFz6c?N=A z6(i4mP2$K%QzDRKzvhX=zV;VKd7CQ8zI6fCAg_1R(kaV01>SSiv5Zi&_dw+dU+=Z3Cb9zN*pz@eRo zP12`P9_-?$dZUR$pf|ToEfO54S%YqtD9d? z;FEWD^ew+sJbUFi!sF)f`e2LH%NHXrj{pAsdvw$?zaPxLf+3YvQ1Qa%d_Jkr0?Gp? z9_?e)CuBE1-QuoH42-UxH^y+>%h`37;*lUx3^YH_w!b1=)JZ>G6b4GBc>~LdkuddP zOG^;RcVkC;Znu9@TGML_BBaK&e!P~g;GiWvhC}f&3tpon>L7{cDV0N%J2Xigyl$Z`V z{}b?4Ex^P{F=jhT1K5;u@BDc{$~$khx0pCG?*#47KRP=4HaNt+VqAoE@5%=mpJRBp z!YKVv4OzY@?9n7zKna@Hi;5+@h8K6(5o&!Uk+l*_&mkdDrqFE}-HC;yV2E086D{L2 zC!WYcQTeJ=R!&NLCgHNK%9Wipmd!~Jm6HRX^=DwYvD>KsMb?tu-Gv^(;-K~Ms>b`z zF7p-~SF+({!0N!9hoeb(Yr>C%Vdyg1&jMQ-^9lABK(3PbPdOgB-)j2)KF!mi7-YS-LrH`ejFp+gcDA5?g3d{)_) zbQhlPou8czs6lFA@3FHVpmEnno-wU~e$rG{CW{w*bPD9zHs-^%OtU(e)|`*@wUTwq zLwF+t0yaiUr6ySuP}&mQtDKm^f`Y&_y8WiEA=|neSBHNuFOSC(?{;4dC$CpM z@Zl?%Q9i9*4lBS^q}WC(A1NR$Xq2C)`LP>iM1eUb3*yd7Kf^6Eiz7{zKm3l1I*!S~ zTCeMd)5de{lQ+#5>h-37X#r$n@g>oaWEkRdMNh2e&{QYL!$-tRBs_8*fEZE0z7LhB!x!{ycA$)EV{@Zg{+ z-6kwcN&zq(4Zyb3@Er+r4ZNM5ooX?1f5yhh=hzSjfhcv%Xret^#ly7fmFn@vP(iEL zblXEEJqzhpPA^t|nugH~=cnu2w+kLH@Dot+$q>^X`A$t$pfC&vRDMkbPqM}*rkkQK zF8%=yRsETpRn$8qVWEvecLjiBJ;33X6;n0(`}clv7kl%gP$}C04b&GX$l5T{CnBpn zh?&%P!yLiv7a}?^6AXVD<;r1c>d)W5^UpEEVovOsG?U6;IHuSfmDqgml#$t(XOjPl zPZPNL_ddy0CX+uv*)!*(Q##f2?ycD_G5?$n4-fZDQzI|4kpGz7%_Oh9rODL)cY!hd z{{ML#i>Wc!b7LI{B1JE60lqIV1a`e7P(R?a=Oit-LL`&a1DLAY>CPfNz#>mnPtsO( zXRsTn!qIhe1Z1A(%j*@oIRp1#Z0v1q6@s~SV2QlD==Bc2b-f%1@uZ{wDG}3Hh={Nx zUCU06X+5&4QZ-t=%HFW-Amn}qJos66E zw@v{mF3gAsGTz4ajHxx+VQHCQI#G~;OGf68B>;ILALqc4f=}+rGN)q5eJjHf8 z7FD&L>A_vaRCNXU`8}mRD^infsL3dgv1Z);2F}Cd;{`XXkL}y%i|s+a3hf{nGAhFu zL;mE==dv$f-a<#tb^r5qTl{N8OGMBab4{mye{r7ag-Oe5ncs- zO@CB>t2Mp9HnRIwIovY%2c30we9(jO27;9J+=5kFfn>2eW1sN|To2{z?HflqKLR-& z<{zPdqAprC%c3b}HL)SZPaYrTUU6y&R%AdQ!7CjF#*c#L&WGK^C~An@YlM+x;_>;< zWkg$6PCTv!RX|TVY4=rJFvOtrmwXOfD_4LGP>~Z^&1fe>Qrq`21kR*ioDmv=j%m41Mo*1;rN0sT_+Y&hjc^d8DN0#J~XC zL4Wxy%NC?7(e(iHML9AN-t>i zpB=c+s&@O!gKhJzm0#)j`}K&om}R^_kdt!i4-)@JDndvIDvtno{5thNqaq4CS_wZ1 zG{H$>_<7X95h-GB{{>d6(bfR-fr_BY?vS8bVq3bKZ2VQldQB|}0@L#PYs`!T@SeR z9w_leJLEwY*s-F1(8O>>Eefi2w zUepS5cW&gFziwwQ2{8n2EJp3N#3l$R|Kd!}0Qrs>HGO@3lAEDdAZ&C5I}1IyQwu*W zppX-W#ZlhDEt|Sy^*FXEzV3v!f`ZKwo_sY+!J-HiP1V!%YOmUyd2McR7*qkYf=F>! zL1a3GZg>1D@+@jJ2Le5=L-r;?e=Gc%pEkOhSn#L+8)FGZTuDB*t+P|F>%?23{BZk; zUun!RNBIZ&pMoaBc)v`}Q5|lhEcRs(C(dC}x`aA&FpVn5i&X~xy;I2J`xuxj4Z!*! zyYj8JOnIuLMnl$ka_zlY^@{&2MxKgI>lZ-TDQsS}p2m2>F^u%=>?~GG#MS|ri$dV{ z-5Cm-Q@zdI9vynbno?0Rzcu!EK6DY3Pz5h-i9{qfNY42vn8cG^DF%}AosblQ%%Kxq z-P!o@Y8IzfatE-*U{xq{^kFdBga*Qi|3qCB9kl+%TomiHExxjkdD8@(=5EE6#S~kA zGr0=yTuR9K{5j1DG=Hl5U#DxZ!~S1sljL7rOhtE?qLLaH{R1l^+6l-?kwiW=_SO$7 zVx)vSoaJlt;ClFZ|Ch=X81+B}Z-vvY&<=+O{z zp$9jIC^~@`dVSU$fbr(;pngd#A|%GZb||<2CsT)irS*dMw`ZE$A(IE@>N#62gf-Ok zkgRS!#E~ZC6(%Pp3bAbfi;A4c5eeXpOz1IC2GtSi#0sIxjWKwaz8bubNHNyidj{DA z5G(-TD}M}FvkY{$<*tDR;(dPiq17r1d`OQ*F$wh${gOO>K^Q+gh)iE@|2UvAn&UfJ z->wg;%<=u}U_7OiggC$hOAM!;o*v$sJD_RQcHm{rh8@Z-TV>0f)<06(`{nbY z;}0-65BK*Up39rUJq#1N_cw2g;V%N}A;&3eQM`**Ci1W|O@8=EVIOJx25dHTCXHN) z-$}|lc@_wMBpSkQKk5=*C=_{`$Gn&JS_ER10y`C(Sdp5_4Jh`Q@!utKK;mDR(}8f{VqqpLHQ+OAoc{)p7LZ!B+K(H z1}JyJ_>l9ectl`0`Y%@I`g9p1L52b4^d(X^6CLqWm+;&eaCVJj07GX)VviyGyPLd$ zu9F!*r)H9wM{B0J8pjsLkwy++Z)lY`++YM9U}msZ(qr}ReA=5gZ;o(l|Ag#>W&`cf zv@+NV^$;0?D@!Mgm&3RUChNZ{lZW%kg*%SKd;7mvSNjw=Vm)pg$unL$rb<4=^Iy;e z^8X0_KX7UT)d64R>j&>&`SIn86kMEte37NITMd~G-H?SANI^-yZy8^yTV=NuE1WVY z1TPqb4S)v$@&TV=I|53NyLLOw^vT0DfMSqPn*t>p8b8^gEH1)HPwgLAwTSOH0Oqou1KP`(@=e}(tjNA!?H0g zCz>F7eZP>LjY8wVt7>AqUHxTvGNQpIYfsNH!6&;&B$IhPiO-0>p zwe=3cHYUsHkmZk{^g7SpMEyjQb9Htm(}n%G>R$7M#ndC{83?v}{gkN%(GqbO=^Gdb7I$^j znJ-$Mc`^4!!u={%{-e{_P0~9Lot#49KPF&t3nv%qlSt>W2Lm6?witNI?+y+Wbr?|} zChIh-!3%KXVvqlk-Q0xc2j}Yeu;RO{iyXt|P+5xB7Ou@N zZpmh0N79-s4%G*LI{`LTZWf0{EKLn1@i^5zbPYFD=lC*g@WBdPTQvG$d4b$}AyQ!# zp=X~2tTop1WF{Zom>WloF3=GQ?o}Y^c#3^==cceL)=R6T4k9b~Nb*=aJO@GtFzHL?VE>&y-+7RqylNoq8n;2yxypp5)aantE} zN<2D?n;pYTwv6yUu(Lt(xlI0$RlYm!leDa-X~&_l%b%JN`ighh=L8z#!=U%qZf)b> z6W1T_JZw8q#W6dDpTm;mbUT1_e%LvicZG*mQ5)df$ProOql{#b_8OT@kH3tNBjn7% z+Q^VL4^# zPLj6@8U98|ZSmCV8yVs<7X<&PQ2!Y8Y?Sw~;+LOhj0g>a9k0KS6tL9fI6Z-Y?ocb} z!DVE*JYYk7ZlEil(t$Yi8Im&K&*Jnn4O%i59*SlBm}Ly4CkWW83$yL0Dx!$3a?Dgd zpTM5RFr6`}uwNrN6cr7JiJ`$Q#YK9MiN;xv)oEGS)c{xW7xYIO+OVyq50N(q4B3t} zBUylU1YmQTl7XD4taF_v8K4qE8Bx>@GGm#Ru_!`m6o|MLQw(2{CMss@=@I^mPbI}d~{v|yb2#j2oXxn4pcl79u}q7>aAPu0AtS`_r>6= zV1b}4CMPGOQA2%uLid((N$&cEB<(aT{^OHDO|Mzxsf4ej~x!O^Hj3Y-Vif(ruye)uiXh&4rl9^1v3XcYU`D;(AXj`uyDvU(2zU!iHCWK@7maYrtVrWC>Tla`(b@L;i&zZ*>Xamu9pxfwbV1`mk$OELLm$W}u) z_a)0+tD}AQE}?PsFcA}pF5R(bu2lA~e`1-$khV=gzjga5X zzdvUPSV;P~a?n=%<>vnw;K29)ZbH!=zIVj}gMbSh1|onGk_?I@o@JA(4!S*VCV5FW zy#Ezy-d4MvVDW`^gD*)TKNflP^K(cKpu(om;vA6~cE)}q_zriV8{~$grA4pVFdqGY z6PZ80E>2BNwM2q?plp*x%Sv((Gyui`7;qn1O!HCpdJWChv*lWZggc&amy4R7XgJy! z9}w9IWMTCEdH%TR4JB_$}QR=}~43-}gdt^O; z80;}5EN()%8^{K7&Or&tb;n5u*rxKm=&6LRz^~>=d&8Y+0DnXsmEXWXzW`N?I=^XH z3K~Q68LW_{{t1mgam-wY5L@*J%4`3NA%CG;znEGbFbhOs z_;I}PD$?)w*2Ciqjv>dBL!%BQo4mo>1;^2uNu4XQ9O%y}M(;GaOe4kbhRzGiMAn=7 zfPjViGPjN$5~DCHGtZ9LK|f`OLHj_O@sjBtMmq} z&I&BSPZ}R#c)<-F<2A@hD-_9Gs*^i}v9ut#v2mzA_ap2N&JPrGwxwZNqw)5OWHi52_!fHZQE$m@&@5fjtoT^tL@gv@L>M50Sqy!J| z7M_Qdbz3`s9?**vT{|`4KmSUq%I>^Wl?n=m!-XR+POV!)%$yMg))*MZnc1pW2eDbM z_~NkHPG?tF#bwnHJJy5$Na>~YsVujL8@#emk67URK2f0brWgG*2YRi*k)9$CVf5j~ z@C*kHzwy+WI*o3CW*|gMtasS3A*teq#rK?)r1;E>g_O`g!0knOHKn zm6LwiDD0r2)>j=yj@a#ElxW=15tW?GAUPwFlpqKQ0um+Yk{kueQOO`k&gr(f_TJ~c zy62pF_nmt8{kV0icGceQ0>1f;IY#fTx7Kvda*#lVlz!iLND7UuF#+tpcZ#h(*)4lswFPiGng1+a$n?sA7ak~P;Dhh=v zz0zP}^1)*PWA@CQYi~^^BTZ+^x1W{lK=ox*T6vU(I=p@{#2*Po;NF1T`aPt3qM-@A z$cMv!HhE&Oa3EPTzWe-me}VZ|}pywSl6c@ZZH(2NIIcyVn>e4_1vA5^!%%I!I&-_K=|Msbk#n$3xKxO)EBrm? z?@C_|jnpU>*StTfYpf1;5~ABFtviRW!iB;0PVd0!6urWgLX{9RXW%BSnU#+d4|_!G zhkW-waG9&kH-2u6`^-cBlv%Ll{sHJx*DhjcK?kOpG>dNhwe_L(Rk9r^OyEYrWV8}Dpa7Bz z0D$bltgQVEXFq~6FH^j7r5^u{VcTLHpC7W)OE|U3754#(f-q2Lyl`t5>*k5zZO>dg z@~xA3l3;>T`57xLDoWR>iMqMw$%P+%6TQX7HCJFiI(mqy7Q-%t5E%ZDw?igDL83~! zZV%(JqMt6Kt2l_em7i{msvm-LRP5Yn1WeeRUcs-3i&T$)JAd3_8m@vrqr|kxj<$cAEoqMJ)-8-?#v>DD+x{7iJ;c zrcrT-D@MGB^H<1bqlQIRoy>|nNZyszjAcs(#nyk6PnQ(cKadc?G{$Vj2J&ls=G!ar&RHmQnWJ5UL27v3-Y~< z86O}#y~qjsaFL^*xrxJbL~fl}nf=|V7*k;XYG&Sh5==1n>}!C}u?;K`O(dLQjC=-C zs5SBK$nn3zOv7e?34an(4WFZNy&ZoOWODTam$tv&dA#mfp^kD3=|=&sI%TbSHWRPt zclptDk=_*MP&b)maBCHb=1J+F&Hx#YFjQ7!~eNKt}4nKqt`SPM(Jh}Q! z*-1d+T7}CEl(fc^1T~)Tn%R9;RJJ_FZJ8wlBX~+8mNA-w>F4={=TNxP%^H~6k8g~G ztzFI7sfE7xS*F9L6GYi^Lv5#}s{r%tAByMx3bztjq!e9NM!6TvVBF7*P!}L>(m%LE zREs@hLG1&Ov%Io*aU0hcP&gMeN>~Cb$_%;m+EqfaBWFOL`#m8q(-!Qgybx%vU+fK63G69DM*@r6HH=sJ^jcDS%gakDgt3-yvATn= z1BMiVg8^P~bQ#yI`=Kcvb{Syw=kw_~Wkigy3F;kkY^_|Y4zVoCY&b5eb)G2UwjG}8 zRhr6)vGxCGvLP%YXk;X?ym$`+52{gSqIcZzbo;S2-Md!pmnD=oMk}*#Y$UMUR%i*G zzLy+%X$p)O|JhnsWeKwvm5(UoSBFIMuAkgIhyBCkNg6(CT^`ic(j7= z=xC56`(a;nOfXw4dlI8FUKPKk4?4|b7CM#U`SHu9fU(||06SyrU!r2+tCB%A0rc(u zXUyg*T42AjXcvQ63mA!*ODl5d#PMu|ft7w1H#%m;3q9$EZqv#gGijA}H_eytNnOM( zG#&uwRh7rQ#vMnqo5YO{rhp<_iSJ2Mj{X5)sXQ(4k9jnui-ZEm4(`Cg&HOyzU^4ko55M?jC@OTdKWbCYGk4kA9m5+UcO^5q2U znMfDo&}+96u&w+jS@(-SK(6&}!Ry@|L{tAGB$D>;vEqZ-*p@&y?_aY=8-JM)@Kj64IfgEWnI7;RhU z(fX^n4g6tgTW09FL_^<<(545Z7QRb=B`n)KKw;mwU!>(VUBK#klxC*=_c z+WYFlX`byyu|^z$0o)k6{;sJ~=^%}kN4mqW;N?xQeBK9FzP)GLHFVJ=LvC=d3#Juh zQUBxibcULvuY_rl6$}C z8_e+Ph6LQHKEd%zRYLK=;K-3ZECPz7dK>A=DAzw4#v;GiPJ_{+a}acSDHThM17w(w`fzLW3%oM<*$ zXy3l+r}Jhp9K^{wdro$M^PexY^SMQ@l)VVeaMb;9{k-8v6n%6ShS8UjXu#|Th_@nY zS1Y!^2)Y!%vr@te1H0C|)5i0Z%0k5jmSr+{*|zH$r}@ccso2aD$Txb8LK*Hyw#>LJgFT=m^;fZ8m1`F^I_mQS}Nf^5>&e|Rf;yTU#W+a>I zbmU=US0OMDD`t2>*TC8v~QhY}WQsnHLO3C|L^A3MjemS$-(qSWB&P>chE96bj2jknJRu4`Dz1LMv zOqcOe@gM9>p|@$UaMnwm&MS)!I(W@s#`4d!y_G)$S^yhg_p&9+w73@pxh!`Yo2Qe> z`+pZ+ia8m8VSww(CKqKzmv^-%&S?bhzv5#$NdB+;VS<>mRpl@XfU37T91(vuu$)%!dcte5LW5)I+b63 z{;Sg-15lpcPfvVGD07(rbho~UotbtsimzSeG-WAxz|G*WeFxf~bx#S!%Fwbav-DrM zYFM}KPwP|1eL>-qj7LcKH(B3fquJ@oMvuYlpYGwz!{%1|K=aJGeO55El<+f%_9?Rm zbf|u|txWRQHDzY5bQ?2E7;mT+)|p|I&$_BFpQ>L~yhZClzB6J5Y7d2rx4LDx75TF- z7r(ONlBs$Tu=sc*1&YV7=l-l-v(fRV5?j-(UL`7>462wI8%rA3xby26yGnJ-olEKp zK`R})#vNC^W1>qqB3;f@x;StK|CJ>nH*n={cFgsF#|2jU;>%wR=q&@Af-==fKDO_fcu12U~jr1V~;C44h2l8X_%mtrNJ-P1HEN!zcyH+GjfmqnfH4x+pK z(YH&t9+dUGu&R5LG0F7n`B7~zIw{v}@7|9-ALm}~v~sd+Q9vnRbuTg_`jT0M-@CLE z`zv%-0=v2H7n55WVGtj4kh72m7_^-VEcZ|GDO?Gt-O|H9%xuE{l4Xr$U!C~BxB$6t z0nX~}H_n*IOrGX+e8c|DcJxBX`Nx3`EwgC95`O1s)Hn1;!g#`&r0W71U65;(;en-a zVegfH5B^&Fe1T%X%jE#Y8$G8Ubgbpr+1YjNKet^_Q8`6m@nza#%dpcc%OsYaDmB{f zBAJDYWur32HToQWpV`SZWdCG7OxI8S?z4L>!PQw-iP4p@{$BaxG5wQM*_86eLwtkO zPt&b-IF$S>)b`H^wOQZ&;0Z6L;Vj3e+-4RIYt1qjQ1%RAV{;>UEn_HP65nH=w=?8r zfsR}56b@0`*tKz3Wg#op^vcHX%9@HAMSK0RfdCEt?KbrV4{Lni2;O;Wa;l|>|Gkc` zx5h#&cNrto?yqIub6(*Woadt7?V;dUT9sXV6SrjEHTvg1sazj4tE)An(*CpZS+m7`2aBZoY>3zglv&earvT_aea#S1J z)~?>KccY|!azgD(F4?w%aI4Se*P~dSZyMaqK4i?>wO#yix+||$AC7*&o(DIyLdmRk z3ZRD{pd;J*VcACgeEr2!LgD9pcNN%j2GsKZcpUtdk?iE4rL|&u_Xr>5JEvNVZ1SZS zQN9&b#@_pA#r?g|lHw(!+E>;n9At{)h%yNTyxNwiwe7djX7O5Rhihy3_O<@&8yAhZ zmH{2;G`OlInYvHyX$=_jzG%+4Zd%pL_}TY*&xfrpygR?^R(bd9%NT3#yk40Pla}hj z$CUB;yYsf&HGOW6{OTDTx%fGD2We{1YX7N2x8$FF5#H2luRn6&!RdFhG*nj3Y|Pun zbfXU%6y+`+=`|=~S2W&4%X9#9Ce~w&fYI537)DE2&gy%it9X#B=fJeB5|b*%$CS18*Mx8Kroy^2ka#RqA|L5YOAnvu7?xo-tuYeKq7-V6q|? zX#X5WVap=9POfj?mPE2|J+b-Y6sSzwIU zk@4n}YhnDU4NGQ2lN2NGJG?I&Uh1#07tvwjtj-lFPThyWYkOkK=98mlQSj@ugxg(Pg=`Qo%;P~E*c`{ z6D6}-=+0VhkouBxamN=;=0}$&E^2rT%=+78+~)am9s5GLRv`7)F9;O4!f-t@fp+R* zZI*&-0+TDvdETAkibLE|7y1(-64}YlG4lFVy_{~yFXNon)v~b`Rvnu2f`Ee}`q?yw0}m6nI+e80 zt+ARU-bpY$C)qp>C&u5t0+lYP6oygqt~EQ48i`ktbIxA9@2uVX{8}<5MIQK!oCkzA z1|59<2Dz5i(2@HaUnNzBk}N-S6xO_-7Cs$&6#b6|>wYJft9jk-%|&l-Pnu`qAN#6I zBe>CJMRw}pp~ot(A6>0>x|2C>AGGgtTXzJQ;_}FEw>}6qTB{icVuVI z*k$%#G#ci#=py*ZoBvX>$tmrvuc2PSVUD#er`!^4YXj{2n=*}xINF@VKV-Q6$zEN2 zJ4>Os*i}?!pMdgtNJd^i;;xVdmr{>dJo2Jbs0{fr>2R~sWGM4fyqKA}82{Iy_Q32E zhkm^(#^dN$BcmDzBfr(>X3+_C%*qz^UA|AFbo!a9&D>iIhb?j;2`c(OwH8bBe{g1IQQeP>F@a^G<4h~-xSJ#b@8bMN` zmqzCr_X?N$DKWR4Ak*;}4{f%U*t(6(ua6T+!_HQw@d<1ct&+Atlho1c1+H(C+;x@K zj=1~!IM^*W343`?#;m1I_I>k~i)O4Z-KeaeH;O0etSh@d+~g*s9(yZ1s<$opPr-H; zm*oA4Z%3S14K6JU&<*P?@7Kk_<#8~5!RS9b{jD{+uE%jwSEt2pc`$UCH8!QGwdt7S zIC*iN;jQH?_t~Viun6h$>zOJpgGPF`RSIw7*F;#=Tprd1_RVyo(QL4OvQpP|eSWZT zyrvy|LNAogL<4F0gsQ5etgpujWv?^rx44yRNL8-l{tQ?{Wco*4$p+f)CV;pFXY`^J%NA4{`ra;o+I7cgdy9 z-}O2D$k05Q2}zPX^xVbn2a|=1l&r635}pKklALPKv<^%xHHa~4DE&scQM|c6IeWCV z*mVP~%Ecdl+jSD;;ZgStYb8MU=|Q>b%gL`LdHy>P8YGFP-^^FB%pSLyN&WPjR$n2dEqY@vAtv$DLdWglUo?*d z4jXQq>`N~{=1HMv8fo3<)CI;tpMFAXwDJ<4>-eUjuXwhwgJC*(bl(X2O`U3Jq$in< zP!75Hs;R1$v`4JjXUj5JtHxz4l~ZsYvF?X|m8x5%R^&!m-peJoFi8A z#_{sv(7qSF)06RQyvhwqPF6gzBeZ8Z8OEj=&rb)JR`>Z^k~X!soND^hw#VMI$6eoC zIzGo^X`Zt5XMqbvaSzkJ(B2YJA*M%Cd0daryG;BZ2}qgCl$ep1ayNft)uLr89a7Cn zK~B-PXv@cL(@;vKPk$!F+(mlEcidmnmCYrtEN#uKsqOY1b&qXs3^r}=b9!C{M-|Xc zvokUlJNrtkjJSs?rF-d5`5X4PI$3QFba{^HI|cju%!In~zL44WB2k#a_jc;Wso;C$ zw9K;7)b7DAx~+fb4XcM8A5)UvpQ)oN45~P!S42mm2yg}5OZ`wa0?37iQl$cMCWVqD zC&`*S!F?rCCG*rY;cIw18d{rjw+G8>Bv!{~KlQHj^tvhS@N&?_e1KU}M6gGG=|$s= z&6Me~oao*i5yf8JYI@Axev}C@OfJLnGnD}bx5nE(O%^$3HLG*#$(VbdskH1!nX#6- z`a*KcVCii11#`OyBlf7dKu;Bt)fS#jLuCjX!gd}RH((r|k%{}%dFK;%-Ijrd-}wRV z-_tw%Pxa&SMQy7&nfDStJr&Dp>er(dG)u;RvNrIz?ov6vp|EBqR60G(W8=7H6|PEH zkY?U3-$`>ZVDot-%&6o-bKm^36~p=EJ!=nK-wtu954~|a=HW_iAHb-oyfNxuQ;#n? zlOtu|Tg)LH*K6R(U1e#QI^)jOD!Fy_z6pRJT2xQG7crALp6a zc(jYUdS7YDyUnlnFwK0rrrXkc`_cH&)S{I!9JJo-c9ZZnZ>z&M ziW~(!_^<c>MA<6fjJ7+ef3!^61cDmk2KllYU(8((Ypv*?nalY=vb9+bfPkGxErK zzmY2E>mR{PA!WhMc;pjn#-BmC!=Gk<+IJV`_2p$v$BKDalAF0cz^gBzvn(KQaHtnw ztVw&|eUz#b!;v?^Xs4~sT^&eYI_zof{`Fl!|43isx0JV0memRBSGFrrd+nk+&az=q z=I^JG*Z<(_i<42*SyddsMrVusZ--w#OM?$?aB5hW^r&?`A?~ zp5zro2CqzWObT2g?VvnHu~{3-_0u&544gF0qi5>dp7&+vR2=kY;~z_9!%#ZAvih#E z$gN7DQjrC@xy+Zl*37TicvI_iQP8ul^xb>#!?ofH|1IXwb6aO8BW-)~hF;x{ae(uz ziA{qtwA;kk`KoMld{x$6(iuz`zZ=233U5w-nu6+iPtQMMqV&7oep+AXR4gXd2$500 zbcKFXI2`3TldxZM>ho5-u`U8}NUCkFv=&o3Z${nyYxkh<3h8AeWHBn+<^y#5*bo2p zFD^ikOQBYD{KHqcGmjY$3wMY3O8!d8Bn-n(Xk>IJ@wE~CIdJ^YhXGOEt+WH^l; z`)5g(_M}_Pk=K=0N36(5KV0knxp*X!-!|d`lZPyS3+gQA2{-5;yV1KtBFUqDf<%&g zOf-d@JN&n2GvIGu!vD&zSYMTvmfj(mR#jECk97U#3DU)G)$&F;sg?YX($?np`G<8# z53gY~#sBVGY!WQAiadD(uWqO2eLWzm zW7}-t-OZ)?n9el}lm9lhNreIWT}6zk`>EuZ1jU|&bX4;0!-^X*=+`{%hmcEiUw5OcfaoEy9t}m$%wlb zLcHoFHw&=Q{9QDz-HgATR=AMWs<%3poCadrs)nz;q)BwLV76eku9`%;B|wIc==0=_ z0yZLk6vYC5eT~aPX~?^a&fD>Kp6TZLV!f=os_NR1P;sS-{v~ugIfOh%d?ALHHsmh$ zI2z8jYMDl2*wUTC`4;l$2hWbYrtXFCzK`@;@W{jC+~5yI*XO=R%t5l5WH2xnxN*VJa{yxZCMx`|FfF6*c^f)tc0-#bc~f@(==RClHWnPdOL3?bz{a& zc^Ubf0NRu2RpYeeLNkaKtwV5=FneA2fH!N1Cev0@V%E0n4{7&d0`qh9b=yPW%J`_J zuHIum9NB>A%}t9jA7rGaYdnv3B#vR&anbMmUolo+wo@71q(eXbaX0#zsjmmoYC4jX zoLcpdMfxFGF!k5oPxwhtIWCRzC(*lbT(J>RQ&TD9=W{wAYQ8?~6&gUGdB-PYq+3*E z)IT=!FebpZ%c>mHC8i#3J&?OLQ!SuyaOW`$1czsnc*U1VJC<@l;xpjK(464YF&SnW zWe*L9N?ejP5lYjtihr-;WFZpLI#5_=rV#{T8q&G!ubibl_`jL}7hL zVm!xMTV;O~zb}}nGL5h*b6)JGnvgwaKal3Sew$dt-Jj2mAwMN2T5QZlZ|WF&pNT@( z2rREgYYA;cK)HOH*bI1gEr%aIimQFe$9${!irBOi72yDEEaViw zw;E&e?y4f8)NA!qqD4`BVXn)>BlCoYy413 zsojM~!RB#9%TW%Ipci0%FwdwwaWe8jBM$0^CS}ELtQzbb^?3KFDCJu5&ZCruG>TW6 z5qr_qKMDOzR$gp!k0YX^`0_xYzT-p|+6pmTDoab+*w}bSmI8_?VhBE;qtd5j!_AMs z+9;PFlM=VCvBV0_yjDcm`(KZ7|Anyl-@o#2i3ABjNy)#N+uGc7tcPkF>BH2Khi~pA zrKHr1`MG;q-}D@78#0;^BVASe4^mTNDA`TN#ctd1(>Ilsl+v-sOh(&LIdht%!JnYz z(B~&S7^H&x`FcUR!3LdkyY+W~B2O4B#yD)%??@LLIXF2FiqCyRSQS%jM(c$@6%k4> zCcW0S8r{K+!i@hJ_ycT8DKyY>7l#fxtt9Aq@CO}pNX$5q(`}<2 z5&&-$z1@#T{w@f=lj*EPf(A;<>AF`<1Xf@WV(${conm^(ws=(+osb8SIJo4=tt3~+ zGtJNi!V>%7!a%czem6P?CvlwFHcjG(=`4WzhXHi(9fi=AYFWH4NJLbfE&E@1uzZKf z0oJA!oTbYPherz5!gqgWB}OyCF~sPtaz)&_L7Iv?y6FuIerHhi;c+FL9OA)jJ8mWr zMW|vkJPxmfx;ki|A7tDhYUjBLc&M;cR9GqxB7%AH8?Svh&?DV?$w?Bm6A9=fmI}blKGJ$^jsQ3EV*re z+_?w__rBq0RC?4|y=;$;;gxCe$Lu@yHF2ek{N7)?Pm0af2oO;Ztwff%TBM>7EXSv< zJ4lHWSUv8G&-cCf%MyWib#63})iNQ{#v_Q%8&^(oWmGUVxc@X^MIaNMsbFSwo@;0` zzDqygTxE_lq63(}*N6nh=ei5o@fsDAxNz(Ndo${w>|# zqHWncp`v*+KG=q%^1EeTn-Uh>=`_>4@lAAop5GTchYyg|2>XZwK&(fD-FSNW-#eA` z{At9!Dt4t_(Y2|s28 zp`}JeUTMRx`-N&6{U)Cx=k7lymRrRh0OSbWTpEe6rQ%=D)uQJ(QPu7qU|I7GQpwsN zP`ZEo&x~rGUk$P4@+Twbx@~*a!X5y}xK5W+0pGwdtrGH_LPIAVia=oN<_ zk9N*@Mq@TXAOSeGobrR4-=Xv_Z1AGLbNjKz5x!1H_Cz6I=p%BXqny#zsmU$VC<3jg zfak8rmc*+=Cx{T^GOmwd1Ub~;o-t+9X%YHQ2-BE_ohwbgG@e=SGWIS3u+S46t8BB- z%v}lVXy=7IyyMKElFK9L*HbOs+*m9o_9md#JhJu-B1L(edl7cEB{oI)JJMEp(fKA7 zeTUKbiw8vFurNx?5tssSKy>_WlalOuKjY>I*!}qpzh4Ew#c*ccK(B2ICdc8F6Ojck zeKSP+4&3S_ODT-Azg-MNwO|T<~PzFxh`tF#Xrcv;Tev|MNTe zziQw&dOKM9>s>eQm--S;#*mlj`On3~E@UJ%#QacAgBKWDWsW}bP+gmLFPgTKi%kFG z0t7PVh`@o$5zyiygwS?0$hA>`X`VwW0jBP_vYmSApeJ{>W=H^n_8q_mVpi+NR-OB` z?qB{D0-98=bR*LvUFuntQe+x=;i}5dTMyRs-y!;E5CjtxAg2A3a3{*!usx?(22dTP zMR+5ET7co=tACde^@`OHbqP`C#`U7HuL!gPrY=yU+p&P2->3q0)LArPfh-nOlo|I1 zIu~uUL|uk*DivP!VuVX%Ka+?*UIJ#pwk)~y;iBm!jsAELTk zUPCU>M9a0??+w;`M1R{=vW7}Ab3~&&u?l&PHNd=+7g{%yV-L_%{4j%On<;Ib7!(W! zgoyBfMHPBZ)9_>$oVpc7rSD`F5&)`}%`ydcgh#cZce6VV9;5%tozs<3CGRIq zr8^g-a`{CW!H&ZnZi=M{A?gm?(O*T-+_r6v`xoNE&dkl1ZvFV$ykY7yFAJjzxOY)hiB!tQwP`} zi=*M@Cg8>`V26-6m}I5Wg%&;on}96(Mx@vk?`gd4DSz2xT4{P0Trobzagw?Sq5)Es zZLmCQSd$*P1jSRN*Ow1JJg$q}Q%o>tR)9Q4@*dwhF|QF1_B-&3#At8vCbH2Pv}7mR z5H&hZ!4gneuxi?MBuPVThu8+-PP#j}MDtk#=FZt+WianDq?fLsg2|I8y6`SWSAOYl z65RusL0W)Ga9RNyGoi(Ezq=jNODP?fe!49}Z#mPV8H@35zrfRju{ug4{MQti3yhsh zUHf0g9$`T>_RARHI0W7NK8|`cKzO9npE}32o=Rge4&kP z6O)jSM<4$OT_LC1lkfgh|a`VEGmzp8ah5R8~ZJ8N1R1(DK!sZp4QBa@-nfii%0jP(gBll zIJmcC#Z!MR#%2A%m8TY&wSs(J3QK4LO}^v+I97(SA2orGF*?G$V7iQe-{@b%;LP2R zK@$nm0!$hafMNG%zeJoMzUTI>MU`W43LtJU|FE9u07Lq&bV=@^8~r^wb%)cx$#&A? z2sBOt!_QWpjHU;W!M2r_xQA&BfX%CfMuwt;!C~YLj)le0VKX^Zm(|;dgPBjIi-?ni zNwcYx@9ZP%ad7wo$GmEf?S z9F(X~aMl+GO0}2$hAk6H+V^4w@W(KBAVAUNW+%QD#wt^c{>Djig(BRGtytlrG}eXk zh}hlD>e}3j^4N{hpi2k_4SSzP`0jPDn=L8rsAQb#M23l~il}_HU6&(HDZhdsM8yH?Xfn>=0e_G;4o36FsN#2g@F{^l>hh4<^LIp7=?Ay zag-v-OJ5LH!pTUV4{p1j_ylt#!cKlhxP1WHRPF6Cm!+T5QaY&hl8T)XmTD6)iRK4b zy-E@y%b|yF4%~tRNyA z^#6&uAxpR)!usmA)|mAgf%>2;E68aCi8I4TG)lW_9rLXYRnd+B5w_Lk!#{$|6fQ;? zdyUfA9z||#r`nb&B<)!lzKiyK`!OJ&tK-vnh9Y=oYs_G_{)S?s8>MH#I(WBaCuMS5 zqBbf}ir=EM?Z+Sha`O9Zk22H?N?igNMn8vgQ`(rwV;DSjdpZ@4atvIvKu*xIZdM}( zA)~dD7&En8@0yyDl9DlHphOUh*xAnlgPl3CW?#g*gf`E&enbo|Hl|-T0sUV zyup4??Z+U?Hb!E7Wemahfu(R6s5g`4=h|{N$aU7y45hp#*FvnX#2Chvtx69U&z%u_=Wpgp4yafLpMI}Yv#_49E(+(yf3DI0%U;VtOPO(OXDF0b}(x?l~d1VVYoP}F(P z(LEdaep%E4^b&8GKHl@P!jQ)}ZSb&MG4bL{TDKk)`>-pTAU>sy@2ehrXn2Ha9ofwZ z>5Hdj7%@2|;Ag#XzZcVbna^3U0KUkVW+h9)d#^gDRtyJ%ExKVoc{odr% z{4rceflKd>SUUZDMx~B0p15N;FiGeAe$wX)mr2j_*=H=s&wG+|wspIg^L5?%G%*t@ zy*+n??{=`7x)!`S$-Fj50l9#qtpJN=7~8`29E~3A4!U(z;l!U5YQ(ehnYenS~4k%{DG%f7tXOhz=XYMhE++c`EPn`f9XeO|C(r!Wz@Yy zOHlq4Xfu#aH-H+M4{M2syxQ-(J4n}$Ba%m|1>I$)zZ}NT%K3{dS%F0CfRlf|3JR{u zTYeeinZj`Zi#x_lAYOnWk+Dkulb%Iy@lCP~o&#a4xoRl6)=3vSfNJ2Se3^D75AZOT za32}Q_~?E#Jd%;8V*FjO`@#2^$X;`L;zZC&vJy1|2CZcUUjFd9t^O{)OPBz6zrUP_=@$Nz;pKC zMj!)41*eMZ!P7B2Eln<*VYNK#XF~PRQ-~4?GlFSd??Hn!A!Ha=lFQQj*T&9B#8*vH zMn%p7=q#^)h6Bsu{`|~*gkuC2^$jZ)l_Kmz?w%FEVsB-O9-a%93tzLoX^q~H zlRl`av?o<>^gS_6A0~Id9MFiaLt&1h+39O?RCgK3QS5QaWQ zbq~8hX(pdRUbuA}Q9h$jq7!3vC>IwooizXDn_ZvLugQB%LbYUwaUN~}s)+*A6dlz+ zJy*R=6GrSgh45u#GE+gOI)gq;=HFE0EmUR2=#d*hQgxIOed(22qqLJV^3t*fBvR8^ z7*dR-gVv#VK%)IwpsPpL16^t+{5lMbx-0`Trn~C3(DvqGGu_m67pob%XrLyhovY(y zU~gJ2gqKYS5;=sPGBzulNC+{1d(8eKXyk%IM0(-?wm<%kF-S4p;HC|( z?hFXXd8j6_SeQ7Q_mWUy=pcIsFUm|w4ESA4g*;Bsj3^<+aM(T7&MveWCcCQFxFWMf zIL%bzOPw8!3#=0L|BVjf>~p0uxK_r+-Vq^y5ICXvF|VMOy@&d()VK#v%j59q`B|Pu z^QKdtq0Npt9*^%@F_LWwNz8YOJR+!9TDNHbPw+nh98{9HiQQ=UTk{|k@$qv9wXNY zz7lE68h7^;m*k@sft$&?35itfR$et%<|T;}d)}jQc^o{QHzRK2OxYC;V&u{$$!ia{8K{4mO!+M(!sCx zajnHrYN*n_(*+ss%~T{ay0p15x#=>;jjrE{Ngf}g4UnToo41Ktd79;?3S2GNhV`UB zGFzD^><1h9!1K0Rg{?M%6SEKz_;dI%u>(@TrrmLWKUHz3ceQdrqS0497c zGoe_y38e5noGDYl69k=HD@#xgXBO0nPz`-A@e88P6e8xJ?+KTTIHxhePIHwKLmarh zk=MzZ{unC+aau^!h&7!^@=gQDsy$d)Vm;8A3_ZIRI73bK;iKq!Bv0`)hRHusK&>)X zM$75+UwlDEO7#AJX&v}4a8v(q8)Tg)BtFvAeR4ub;?85raCooT+>sHbWue`?kMzTo z3L!HVa6dZ!Zz22CBczM z5(s?^#eb=e=#Ph6`ER`;+q#1|h`=;Ua6#mNy8Z{7QsYnBx5jcU=Z<(NYYWmFa!L$g zc5@*v2%r(On?jt3TIU*a(WnV@g>cPB2-hbry*w0tzl2=2=Ee|!6!&GD0+?;uH|y#* zrMHq)kE4!iLL+q5=4srN<3t!M)QuZKwFh#W5f@FM?ANIiLjjq1!$dL`^_>M6j}Cm* zjOZS*2@iXI)UecdJ~qg3zW>X*5$0E?$|2Q zf+6*pX2wW?3rnC{GB&gF*YOltkN2FKvPAlj?DrA?wr|DehNH$7l)o4-IHBzuJl~}h zekcE?v~($ey7pipF5?&kT%iagumQnL(GsPF7w}B$Y^N75{y{4_hmzF$T`^3nvCiNb z1_VOO210v_?-*`r0U-b)9d?9Z4Ly+_ zMt4%1dybsh8cQl@JuIXw=1MG$Kz6x4OCn`tHUv5Wc6@L&1JTsa^h zn^Bc;0L~w(;w5RLU{Dyca-L_LP`NSRA+kh(P0B(<4rfn*5Jt$+kg;>5lW$>8uD`Q! z1jdUGUk?xj3Cfj>FFWYG=!AG0b-_6j72Hc&Iz8i!w#HugFbMksVO!+Xhaa;|gFp$q zFbFwy58c!lU}{~5dk0Tci-fg=1Su8cGs&dRZgU|;S*g^!jndQO2h~JH@^ZjzXmcr5 z2Lf*agQAZJA*piANt=NFOVE>91s;;P3K)fQS{;{ZMoXhwWTsc-$J1A^yc(sD|&VPYY`P~I01&kvO(Sy zK2HRDI$;G`+L0;ps`?@WDe)_a6kXLuq5|+ALV@9k-9+5eb8`XQ*El3Mqc`p{r4$9^ za$tjE%%o0N8Q!4AMKMjsm@Nn@k^E+i%~=e9g5)T6LYjr{D*q>+wP; zGnBZmy4g2~!k6L9XSN8L7H=uotlQ*1DCrQC6SF44#F1wY7wDE|eNlSg{ZtS$`UxvB zO3-&!Llq(5$SqDYxt5i~My3KyO+D_DoVrqaje=S^hvkd;JkZnzr3SXr>b_GpKuzUK zDD-hh77Oj{N6vfXlbdr1k_2Mr8^)J0OosvMnrc9-peS6?6?WiWs};nrmG1LDo~e9L zdpRKXvR*%b>54j|Og<<+~0cmQYAWIfdH?VSm5hs&K;;`Tb% zmTT4TWVG?^ZQ^$sQDs}yq4XhFRUgLQp+7T#$b1uuzvuQA;aMPwLtovE$j?)08TmUI z8GVpk`*|?)mxxGGQ2O_nh?m7)d+u(_t4M9|*>g*9l4)A+?w9Qi?!p=yx>DXk5^S8t zrFa%0?QcxeGN*WK?hSlhyEe%7vOFi+*XuQ%>7kf?1Y<#%cuO4#l4UJvX6e;Xn&&7R zbNTU)c;nJ)HpC&2ExY4YD#PW=%&lx2oKy0`OZc5q5$)!p>t<-eucZ}}#q+ZciCan5 z0i=EMo~pB`R-^|7lRVWOIze z7&Axv6*D=B*~?XNgl6(w=}lzyZS~ma^qu^}_A@~gj8r1oPHU)}l#YF@dY{#DO-Y1{ z@ksKkUJd#)o#s7=?`)H8c@EsRa7=Y$C&!XYSDT;r^i95}_c~YRY~A?*Z=h%4=LFIR z$X6Pin4Z9;lc!gIreB&x3{baP_z7w=<(|L2lkxI3=`VRz+DysA<>&I2erGgh`kVgS zS0rQzC5BpsXI*PatsF#R{)&Zq?_|_eMV#K<146~ie;yrSQo?#NNatCff8i7!95t=t ztju>0Wq&vfSiU^BK#IMZ-KR7L%2g;f9nnrT>}Y2*h$c3Xx*KPz2G7(Kl)tl|Cuka? zEJ~Zc)022vR>AkrI?9i0$^-YLS+m>xsPycPb24y)=t?UhWPamjpFsP=gL5cMSc*S? z@+(d$5`bW)wQg6PV{lF0dsuX+|LRWC*fBEdfRIJ*HHb9zZ$4_SpQwSa?ic9&BJ^Tp zHpW+gA-2hW-O5p1E?gXw>rv42a{a@MJ={I{WE3!)m$phx4eJ(1+U~*Q6{cw z)n;mU?kdw7y*FrnK0JJX81%P&y_{j)VrqTAbXM>!E{jfl6!sX}*ytpj11l8}S_Zrm zueDM?9G)Z|i5eb>#+j*15aVifdh-blQkSVgnf3gJW)d-38hKE-u(8;ocyvs>s;DA#v+wA#b$J!2mEF0ehTNon~`B}3m=3IqzZo* z%sW{|!5GSWH`2Q0-8A`5m2ALrlXxHZp;29e4Fvi9ov4nvuStnd z$ch?8X-J<*EA!BCi8WUrD`L|=Au{Dg1+KI&ujyrAng8Ugjoi7#~}O=oS1Bjbf5Q?2p^W!jA6AHy<1PT<|?Zce-n zpuS&5W6IUmsMREbcSz%nK%BkO6yrPSG`Q(V{&04$Z}Orcz1kOqSz}4hTER{(PF<6T z-hDcyU}y|A3lAnm%WmW?M}FS>4NjyLuzg1H2Xc}x!4s+jgB~{`*nx#~^Kt*@pB0%G=kupEY7-mWRty-7Vv);xMe;Jb&~pk%)A9&S@7Nkhaur z))>dldi8Yn2ek+L=)VAkCVA1HHoLm-_INC(P@3CW($$j?Y(ByyHHON)TA{uhhFxvX zY5%iCBN?!{RAEj*oXyA^x62^GfDnn^Pl*#f)bhef8G~0YREhe$LjR;*Z+Irar68wu z<0?203TDT-5ppYIbn?IxUL#skrNB1|+~u=!|04lb&A;IKLdAVV(jZLax#4p_R-^Do zyDmHR=k-#c*G&whK#UcDn*_MO(j~TC#C0RI>7BR7zu57#9$)==^UCZEz+5j~|KO;- zYI+a7=Nvzi?JNM{h_capK6>^-l54|s$eK(qL1YR)I;=vFp-Vh7$s`X`ayOK;5}XVl zfgsH7BiB%Q)GxLv$ugYzbS1i#02+Y+8r?VC7%0hzYXg+3yUjCeJ3^(nUOd%;Z+qu4 zyX(k3)x%K2=$KCuDvz?+^a4Eki=*F9ayCDW2F!IDAZ*=xz0A@y83SJneSAUJV zRg0ZUS~>>`AwjRJ=ZBo(DD>}QdM0zY2Wx2X9#d71%@51{Ng#=hA1&LB0Z$3CI+py4 z3*L@reFwtg0kNsiz=C`nZtbo&qHIdxMYAHZ`w!pOpMEyP@(ccp3wTafc5C3-?}R7^ z4vz`Yd=~}vTe#3@G@57)%y>53c6uEbPK<(Td?9{>E|~FTdK=_iNR3QBfsD>a)xGr} z1o;?JPoJr(NdHXDIIKb_Fq-BY6tcAw~Ky4E|!STxP57JFpr6mS;*CHPk}?g{p|VDK~yLr(QU8~Q6F z(VT+Gk8O7p-~m)mQP8&;+c_>M;jJ+R5YT$Ybo>!?J?Y3P!T`MYFD1zuqJhf8{f5$B z?+PjrqF#l{V`{L`mXm%WU18RF>s_t|!j<9TZ0%G$yT}z!p{{vcoohjPpng}3(u}tn zO0z5+FOWPQrYg1Pv1DFggm?Bgoud~?|4e9wfDb;O8He|}Y_9f}pMM$5F}r+rSgkLS zMRH{%7TWj_Jdgd{sEd2yuQa%%CmH=DPpk>@drF_F<6k?u*pw{CK`8H#^h~6b*$@MX zMrCK(O1hf7EH7iBD!ElouPKL+A<(CyMv(SRO=8-@ozRJEH z!DtI1qb%wsE*|NsDS(VtQUiWc6B>Q>?$1|u&Vw5;NM*SDnT+O)2#UE>XynLO@i6!i z(#Kn{^y@(`L%v%{a(@40VhZ8TsjH1Z6{3x^hMFUa+vpg$8|sZQjbaC6Iv8XM04B<+ z31n4AJBRvS``fLx-1e~5?!BaQ=Sk1cCW4j?-n#Qt3ZhS~NDqo68$ zZ>T0z%cAjuY4v8)lGT}OW>>KHxduQHy3*l-0mR4#5a7U6#IeBV4nx`B#Ob6EkZQJq z>-2qMVjGfia={{`G#wmjgGRIft$?GHHiYBq#WW!vyM#|8Osn_1;TH?}<`;`Moj(#D zVW*)PF+#Wn(?8b=#svo8OrU5GE;y~egj+Uq^Dp!l^=A^Xd%s}YYd{hhnMI(}5#3%x z%K}u6f3yt1iQ=&ULqtTHCWez62m|a>6E{tp@!}BOpM3#(+!1ycqLmx@1{G!t@mf>P zrIbZT5>|z@qD02-LL5>B4APDDDyZT}mSVM^$ZGYOoC7;2>&;0y>HQO*LfZ?6Oj>ab ze>E&T$3p}|M^_LSh?5G}P8zK1gs%jkSrUHsptocXpM}BSL@1&lM`)IZ!GhpYh!(=y zxjYQ(g9z+2LLFwYaH5DrTc8{&23lcKfmv)4l^w7CUl4Z$FaxsUGvPRcx^z|S`rF{5nkCn&IXt183!wA@hi=V9P!fgPu zaiLQmh(p4Y-6#BFihge%B55{qI^YTOR+1(g09iiK9S_ZcJO@-=I>hLEKR!S5HzBU{ z!5?zQ;_hU4a8>D`SCcJ*v~(;yg0R)wOWcFg9c()z^J|$h&vDx0w?024^M7Zcth#+C zt_6-Ag;zo3t&EB1!rw#?)^~b_=wE@t6I($uY6W`)czf>(6y?!9NWkPeO>m@MRm>Rb%ado-DSE7 z#`n^w5T^YliTvIcjRm_?GP&zB^fAI)WmwE$-K2y?uIOy05_ap>*3zQsRUFSj_Y=`q zg;q4Yy*1DShuKeKu#tZyZwwH(4&h zx<5)xr3ZXIFqm>0+={poHYt0BjITBYsY*9`b1JRHf*h>keIuEcN3 zxAFAIW%qXCR3{!OtF9&+KfJ zx!_qL#Ot|c+raOUN-m3*%O0_ElX%BF2So<_de?v3HW19*uyxq|L;l2cfEon`-(X3r z9Ng$IeZBz=06Pg~#+>ZMp8FC1qqZxJYQoCGsY^>oTTXyhKoLoB*xW!s7&NIh30o@# zi$PE*pePh%QP~%@tU~Be3WDIl0@j3L1ZfCDK!yS0Knx-J^*5oC!l-#h); zGk=8K252JH;>d}1Kbg+aLOm2-b2u8R#0bvW~mBD)VF zVYcVcqZe_eJDYmC_RUyIH)uaeuq62>>a{nhH>mDXl0I5vi09hJq84JKFc-V)U$+Vd zs2+lxTuv=`7I2hxkKbYo5qyQmDv5=#f%d$ZnncLF&~vZ``mII!O#zH$o=?Kkx-EDc zbSMW;{Tt_y>#tMzQ;f9;-|e8Q>wl=|FWtH+FFa6p^$UI}VgUfJO5SwRqMtV?R7}S+ z7;IT6&IBm1NVj<@fe}B+FH3X-i-*vpgbF#|Xkte!E&NHGV}6so>dGF$B7L z{-XH$(#wiYu(sRu-3K=!Us)i499&yFZ=+alCe(5|X`3_7uxa+A5;BFxK38a$Ig`0_ z-i&EHV|e~E7fu4JRx!gGyq@tjAIwoBWxqC!|J=9#r{s8AO3?uc8A(C}ymu)zJE&)k zf`R*;4>mrF#&xYL8H2HcZ}sOt6}i97HZCsM#uiSU99WLJKAn(r5$~So2k@x$mKEL= zX#~ZECJ2s3*Lgls%oo1*RDYL|MHr&%alfP*5@`T&g0JzGI%S_yy)V)%mh35x8v%n~ zHFc!pFPiIZx0Ez1@{ydasfm2w+BgjM#_VTsHgW9}AT!*U7T&RC&k4Mh9n%y z9?eCn>NQf8e#E|`KVI9R9p9Buc&X%=5XG|BbR*;Sf$s6LIt#NgA4|8A9mmP@XYB*8 zKtf10pf4!%yUOejCm96ox`{1pHZ2y+pqqn!^baUC_h2Xujw>q0X(l(ldW4V$f+KXd zp)a)pr@Jf$djg0J#(yS5^Vrod zOJkfxlbOWoF#-_ZGBC$4@Tk7NuvQ9e_P^J@ zP7F=9BWn2czS6U?z!-J+S0=kL=6|)XZiNwF_nJ|_+dy|}jLO8M!#+)IH9^RN=pdBV zN%wcs`?n(DmgiNTy8ddLh8XtBoEja`KUaQew<+Wsc8m*23$UtBuETl0T<>O)%7Pcs#AVo9pJ%XM5;+4*=qoovKOh(aq)9?mkMWp~;# zAQxSBEoT@y*p|ooTFakknQY(I@btWfYRW2_J)z*gkjja86f&`?@o?e@$!h>m*FoWA zSAHv&>gC&M(R2v~K&r5yJZdlV_NwF%stJi4zeAb4Jz}CK%5%N)$LA{i0dvIff2GJ< z09cDxS*wK4N8lEz=PSYkWG(6cV)VoBKkxrBVB)`giaG^<%<{5xQy^Kx^Den>D=FO< W&)@q>Cl#lTsTS=0Ea9hLo&OI55omt^ literal 102752 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º{r%%9z$@U02Jwa0F#@Dd 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 T#a`ZpR}`GsuJ$*#`wRX65OtSr diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-broken-list-missing-items-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-broken-list-missing-items-docx-1-chromium-linux.png index a2ae086de2d8d7004527f4c3e967076a1eb4204b..0374f43cf5299a6365127f559805fc55307f2fe0 100644 GIT binary patch literal 33795 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 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-contract-acc-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-contract-acc-docx-1-chromium-linux.png index c7036fd6085611e7494a34c4e6c9af46f7bea39c..210d11e6b021fceb6474fe25b42a577947686a42 100644 GIT binary patch delta 2630 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 z z8$&#y2|S4SmgC#x(|%C}0Dg3bJ#b@~tuxLuuxLw6ILBqSG=8OJYB8FO7(A)^aspT<(EVe>NEv=-)(lV`{fQ}ViFmnhjcYsH| zUpWA+@k+1JR4y;?`zX8^5}ctotbbyIzPC^jKaqg|@c4*g@eV(qY(~1U5{4kgxp)(< zG#zKVOMQWB=ANi$zB(QcW`P%qdnzV{PX;Fm8=bUMV15Lse`?3v&}}$SZY^WsNS*i^-l4Wkhh2?-Mu0@dvD(?*{Qut zz1XZRMV$~gg`;Zg%Sd~&<3cUhKh+H??%lYFP>U8q^~4XZO}8*kqUONWtjp@qP~Ydx zkOBBn3EilyXSBwDV%b&2wQX_4#q|xMX~%!L8F(A_?QY~LQY`hN~h zV}39PdkmgB^jv@`hQIqqr6bZT>oWx~007S_-nn*40Pq#-Oj`8QQQnfI3M6TglCMdW zNI(0CVXE$*ZpHwB8vdW0A#J}Fq)bZkD^}8$8pcPR|KW(L@{uY5efM<>)%cp6OJY@$ zLy*!Bq=mp*rR~&X7F!j#X@Sui003}$VcG8j8xH(i8vr0^PwVJ{qNwr@s4@^$+o9rA SNu?<&fYTY5(={jk?*0u+{(oBl diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list-numbering-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list-numbering-docx-1-chromium-linux.png index 3b9d007275dd3e02c3724b7813834c917bd90365..6bcbe99b2c757b864291e231cf7c9f2b7c5b0322 100644 GIT binary patch literal 34175 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 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list1-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list1-docx-1-chromium-linux.png index 7f560aebc3e45dd350ebcd9c6d3bfefb6c8f4889..55d4df6add395785398e90f73d0e263e4aed1a7b 100644 GIT binary patch literal 28388 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 literal 28506 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 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-exported-list-font-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-exported-list-font-docx-1-chromium-linux.png index b9b1f8b72fb32bdd7274e11878cf67b77038f7ce..3879860e9795e54c7457b4d9f9021bee5354ce23 100644 GIT binary patch literal 25803 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 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-features-lists-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-features-lists-docx-1-chromium-linux.png index 8e364a5dc12ca28010b7172332d43c3e46f838ff..3e62554cb5cde795b43972aba4ef5cb838ea5db9 100644 GIT binary patch literal 42377 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%0DWI$7D94X1j;v}R=agCr* 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 literal 42498 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 Dte6`I diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-size-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-size-rstyle-linked-combos-demo-docx-1-chromium-linux.png index d62e82e498c5a9546fca66f8cd7e6512815261d1..1cfdc807c195cd54f3c08d8b8cc88110c2d0ab6f 100644 GIT binary patch delta 39718 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 delta 39697 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 BcO?J- diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-strike-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-strike-rstyle-linked-combos-demo-docx-1-chromium-linux.png index 2f3b1e7684965c862e5e0b5d37fcc737197ce91a..e6fce0c7b9b27fe69744f4b3edbb85a71365db39 100644 GIT binary patch delta 25483 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 sMbojRJePJK+)swM7RKxPQy=|!ic_Lnby0M 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

homxmwR%0-E0KzS*C@rl<Z*G|AS z>bN3**IjEY;?4h*r~wz~T1*`dfDO84)pc*dbl_-=1i}6_G^(_S_Jhr*M?iSmuXPg1 z1drhLE=XAo=U|gudp93yfjf;K-%HCC`$E8pX7IwSu_#ffVePtLXBpz~U=RbQis6*< z8>7al31hAwgXW2b!~w!_3yE?wujAL|@Y7AFK8b>71a=19zc9fWkW$TlEnMlEEsUY( zumvOPLiX`Z4BSx3QLJYmeSILi%*Sq8CsnZU>op#_N4Feu-Mn`B&3&BAEES%YN{rU5 zHBFz5TLi#V!bC*ExBgAJ4ipxDT?NC!^peb@=NXi7(%v_(#SW(9f1wGnBja7rppE5j zHAAawS}t&}!kBk)I7lfq58n5yDAITPk)ncFocYcf$$8Q(I;qStUDt41oRuE5rkho9 z%T0l>I`PORJm*oClz~IHly#7mjJ;*w{qb<iH>)?03)I`|c7gmK1>GdRJC+f=c2BT; ztCEk)5yJbVsK`V#yLSs;@x^_o@fS*joArM_yi*{N;d*95CUx(mZ6(3<TeM&|rFqtL z5XrM@kSJ~&kaZFtuW`Qq1B&TM2mups@ONG-Tz@ItkisDP3-f&<nHma?z*ttZJa=$@ zAj*LRz(~t#mgoB$F&A5mfrYzp$}~N6v0%T0v5drUv@>~V#KbSy8{^x~Kf}Idky5yZ zrbNHHYptbt^K5t6yV*9aRd0D<OMLC!UhF5a6$Ra+Ix2SmwkU(dW4-`vC)Tpfa*Muh zeTspTLY7TyGN+^RAzD=er+)!}hiyxcdI7_36Sn|ABqBl0Aa|h4ON*t3GfTzF%$Sq^ zOaBsci%WJUJ#`7koH>56`M)57sEP};WnjeME}wip;6uVOSA6yRsFm|*p-$9^`N(Gv z$NzQS*Kixde#oy@wISB6N?xCdy(66`!$hyxMVfXmc1_=K;FP%*P=Y88^Xgc{%o5Oj zvI6xYdjAnkx5mmyX53Hoz*0aZ+zFjLHNhS+W4#g5H9Mfi4#wpj{5vCYx3HI|UeR>k z@nx3MkYsv>&s#&+^r#fz$5J4{W3ch60^WMl$%X&w*GX#OcmZb<KFn}1+SxRv5<(q! zOPV~3i;S!IB?0oI`a9~Ru^nPdJ&zcOXPi6kLf=vXYp7#~C0~O8w<p#A-^5goFL)uM zZYvLNL~IfV`O^ezQsfzLtA$>q`|PjoLz+rHdA22PyQ_Yx|Gf|O?8JoEd_)ai(s!!g zp77_G&-osG$r*bjACp?(RsIF2paTFAI!C6A0tEXX=nA~TC-?(%|Kx*i5TRUAE8Z!D zl5;Ak3uwuJxj3&NV<@v<MUGpXZl6)&y?62^ruc4%##gykmrI|C9Vj~fY{xAtcdIqR zGSn0L543-(ht0wMB6Bqd=}qFHI~vYF&bugT{!k4VM~|XoJ%6#|FJmGq!NIdgvtMX* zZ{E|^_n|T7NfY4h17Hm*aWg4Os1;DEt*L$R&E8nOOMoApgu&Lv&u#*4MWie3^^s3Y z5=9yyn;g}})7L4w5z8%LuGP(NPM}0RN=oL#%X;hP8X&f~N>@Rdxv+;Gr*zYmLvj>E zR-;m^vPDM#O`@n@S}Y;Ji+cHQ_1hQ=*$~=GF$CWbD>;YHt-iDyQNz{<ciq}-tQS0e zO*^w!#m^DfS=pL5L^I%K0c_}KMtsskz-pK17GtI4>Iw*oed#3S>!SbIq`;ttmmqwf zj5hJJYChQ;ta;&rA0yn4uCdsb$~y4-t$5B!T8d70?jhjM^c@kD1QKk5sAu%_&}vDR zUV*chxF9R|&(?K*f^E9Nuv(N9hsx?~qvXx<*K_jywD^V_jHqQ-p^HCVTXdG>k}hK$ z?0!F&iSlNpx)V4AhVK;&GcC~aQpC7}0y}WF=dy=5u5vv6{K8!WbNR~hIAP-$@wuyB zyVA~G<d0VTa&NNqpCtM*@YDd)5nDUW3@mb%MN{cl3$<Z(|J=jYF{m5QBvxYW*Fz}> z{B8|tYjhIT@%kusU3Pp+c&^BZyas9f7>H#Xlh$~TZd2KS-C!OKq{a^96^41uAXAq+ zBe@fBe+5)4BF6l$P8sQ$94+r%2gC(!5&8<i_cF-?dlvQe#w~B+uD!8X(02Lq!z2uj zDC3U)p)<rPGARu~y!vKRNpo*bvpqzTpjs?in)Hf*?bsTGCa_-%dvG7wvEI)btOK8n ziMl<K+JRn}Z?wlJ6m_NN^k}zSf=QRM?-!NWLk2&yI95ucJTqmXxSCm>SS0LUERL|; zHl@<DHS(diD*ZIq=a-`6vU(4M+cKWu)@trZR!i-(*Eo4Kmq#Dcct7quWJ_$8-sw@z z%uXgbxQ7~87-3T0+FKef3Vbc~lINVSv+acMdPWA`!Ii9DT)B&zsi}d?tf9cKe1V?U zh&20Gu-E(t@-eh>(fT0ot}2J1n!1SGfZw*)#{jp~>&hmO2<%nF|H{+<a;{iy7~g<# zia%3I*;@?vC1FHC$8d8|M;-*Lr~-7N7qZ*#cv{3AxjFZx+*dwS&JM(4)6RDVr>&)T z%fLSl`yc%bciM^X6I6mQ+9yWKeA#|inAAf<v9fQ6VjvKXFjnLBJ9KJC;AVbUQJM>i zp=My5Y5p9tavw4)pWlE}T;RDmgOhjNMVD>a5XXn}>k4hV6V4|Q_f<kEmzaS|SYdY3 z__hJRUScudrv~^~Q^F~oY2gA&2Vcdl*_@vc@j@$+V%`dA3!QXPIC#byVdzUHeJvh2 z#>D9OjQNU(P71SxaD%y%k2N<`cD)#AklS-$!(<YV-wAMROww}bLUcyRgR+vFN*w&# z3AcO_^?O-rnk$Zl^v=7lsIrUhQZe5Z^Kv>n-nZ;aX`@++=J~PM`kW1nNRPNKWy-|t zD2bGZ!Wcduohs@U5T~Gg0psRC<Ug^#WqSE=(mS7?-?-aXR~@no?=jF9%LqgWL(l2T zs{>a#`;>&_WO!GTTQfm!h{d;d-9CN5IzN1q3CA-#)X!Xf4HS?YNVcsmO^{3J!O9RF zy=wmx#+`&XSL8mC2#4$JyM0mC_qA`0DStD&lDu%p6GY_>u^YroBIk#6SPb2M`b10^ zIvXN?i(2e&E(HeTD!A2ToINY+2@K^Yq3aS$Z@K(C$z{&T_#C<fWi{kiqRJ~koT0F< zP_GbbPHYLn4p^piA5~Y!4zMN^e(LQj)IBxQH7N`f^KRkl&&t1$*piw^o?YM0+jB)q zVCq5Eb<b!HQT$nE-otyoGFipd0zu8UD<gS$xtN$~SJe}YbA&)@*;(w_wF$<(i-}9w z`GT=16V3lVU}w~1NH5ig=aYK!8kqi4;CbnuP-GZpg~6N@Xn90BcF@bbcc+>iSgF?z zMP{>LLxKUQhY-_geINbO^#4{Xe<LeE*A*o2jFOe_MkQ#PnApje@Ls_+cREh~B`;>7 zVpQv4{{~eQtiBJC#5?9UYS<OMSx;s2Wg)$k#@sWwJ9Tems>T(DoDeb2imq`-<lP!N zHB`LQ<_nkG@qS-lS*Ud}1@mc{?=^z#H~0%$P<+cHtq&J0zed(oMhg+0D1sM!!3XU` z=f9sW6X_V-+4vm&teQguWvLBepkXumr^V>1fVc`bd3z&deSSW~y4y-a*C!WdZLRGB z<U^<EDbJK(=GXpd;^Gp}5Hb&ItL5H4K-1Ry;<(Ng`AqILmUkNVeRSvEOCBx6PGK1* z0%G>()aQ)eLh?}M3+FbhE_xRAf`2`=)T$f|H{_guJ7c;8xu|~XH2QI6S-?7Z|Fam= z>4$d?<PKz?+eA0(fcn+S8rV*icdoZE)T$is|4sD65A>|xZl^fi5!>zM3mF78b{xV+ z?L<CZ42d#fuiw#Kef-$MBXAb~bO+n$L1m{Axh$?WGDF2VBOGY#z`S)*?!CK|8jxDr zCCG@BK<2LKh~X)#|7m;BB8}fjZ)Xgha#GxlBhX+;F}EEdxJp}Kc0B-8A+Jm>PVE$q zLZe5h1g!rR9xa$}JHN{?iTk6|hGtfT-c*qIV&3g~pcFGFJq;PZo_Ju6W$NfSUz+Dk zjl=X;pyMDkcECX&AF+=|!94jtWeLx}6DXqgxVG+C#Y;#y(!qaAE=Q~6s@H(DsEEoT zOysG#oQn<)wxj=X9m%w#XW9P>4GeOEQ%3`m7k<gS=2;p+m{C;XB6>CuIhzL1wFwfo z6%SBhqY7idEGnQpR)e%U6q-4x{)~NXeCeIzIVf?m@EW<%mjT~^ocK{i0_d1U4hk*) zUOoie$6RsA6AK;spE@cmD(n7HYU+tVp<0=bf}Tpi2ie9PjZXRZx$$t!)BQs8IE)fd z5D<RDg=8EIfTfOGf>YcY*mXcFfov`B{TT^k9|5rp16SyIqM=7u%0R>$z=KSB-tIu^ zNB)E`r3--u15Y7GqwU7$3VaCF%t(-pavwPZzP}}zz=ar{gSR?s@y>n>92)>Kkg@o? zt)H*|4C19|6CRqZs_<eQsFN0-T!AiwraWU;-UlKOI&TKT(V~OkCNDaE1A^K<P^BRA z;_Ba_a1lcHF93PMjoJsBQ5Uur(9&eUkE9)I;QA0kXhUc5k=6i6Sg59nR6cqq0C&Q^ z<;^YWp?#2r=qw?1P`{u$)1wSb*H+t<nA5=PXfbgY-xp1*(e2mx9ApmZ%dQYSEQZ0@ zlfW@yun`Gra6TmCDC|BzjPuS(?v$q<W)-n-dU3heZZv<$G)lbP@QvCZb4!p=WnUxk z7j_ru1{EQjm}3bk(e^#G(mePO>k~xdK-Ct5#QC4BDFHvQ*o&f{*w-v3fco+WP+fm7 z<c?m~QUF;m07*=gi2U{0zsaaHagZ`0WG3nn(N76Jl)tjZ;@c6Twy2$VjtyPpR(Kpa zstxdvr9>m|j~gJnpIdM#c+C_JWBM259zcm|k(0j2C8Wuz2ZCW%4oYNfWM=|ezwipt z<0-WS&+95v^D?Mm$@?>)f}Q7O1Z44x1e|)&>V^?>So9{Tqs*cB(02Nbq1I3E6G@jm zpwB<aS2I4`nuBwnhAMhMQC$D;XRInBk^H3;1?e-iwgZQlXWbr%P4M*lODw7%5HSUi z)fjMgjHU!n-yq(i?h3@!3n=A&m_#g^ALuF25;7LGU-YNXMn$KuZgM_PQ)hfhz=#e$ zZ#JAbfNUVXnxDNikdaYIC*#R$pVR=lY}Z#HlBuwT(O12Ol=VQ}RiXv0B6Rq3L@GfS zw59@50urW2DREWH)|f=|F?90UCC}10X?e=HB;h>3IjXUJuv?aJ0jVXl92z0;a|Mia zbGC|?IF#lR9lii;XW_;aEkIKg0nRBk%&AjMnOP4ismx#Wq{k*d>Sil(ib7s5wnUPM zbW>)7Ozl($-g56{lYWq&w5&Q>d{!v`F{lvyiUQ9J+D8FD_a$W(sY~dzMS&mhBe`QR zkLR1@mgu!V!L_+X&M&lHF`^*RCHSA37T+gS4{fGX3|W!o*ap#tV~#g)0OZ^fXdG~8 z$6zv$mmv(7qaMh<jIn;joI5IHlxbM&p}v%C|1phS)jXcM;B5oU@@?Kxs;*cSN{G@{ zq{@&qIz}#B{4a}@=__}fZMZ6?CuJP#r4q`>v5SBIDS7*imf$Q!PurqWIT!hSKm2Pf zxo@a-(}k46mkkL6Li&8yO6479HEbBi5RJc&`*Eo2KiE9_bO`!yjzCW@;OtVPtLVY+ zLh(xU%9_wa!6P{b+UR9#Nzu-Y*y67IUM3vP%V?p+8i(k4_h{hh7BO*l1(i=ow&MMy zKVTqn$NFN)M)K15!IZ(>ttoG!F!Gwawz?qek(y@y1X=>o$kf9vx^F0izMx`@uSp~H zc3`J6Y!smZOiSw4bB?!)&bUQ}wf`XHne0b5mw+gux{~J}PN3MOU(u3oR?kN+ltxSO zxGt&KghL9H@@NYx{rTe^zFd%tZV{j-G4MNz4=fdog_RY2Dry%wPg729Og^TdBS5B1 z6w;VWMj!hSnO1SWFB2B;rb=qE#2TJ|d*zi4DwRN*oEp<B6eji-tPF&^1inoVqI|4M z1rE+#5w{=U8a1nkT%b3Gj(zNjvt55vOP;Lp;bO@yZPDFYGGc8f46t^sBfY6MdTYe_ z^`BB^uoiv-%O(4;OSK3l4LEaxb!;;+U@%<Nbw&oqkEBC*Kn^`Uf{C89a40;4Ws3K! z%JnhN1uXkh7Yd!vLwMbLm<eWn3kNdWyuNu+(w`>EG_K}HhVp=J%2JHtXh{XXB7@rx z?LpuxYYc=FYw}8$>D~C))xNc<%vB#}hjVR}dH1q)nPA%%?3Nh7N{gK!(z+?toyev7 zEZ61nna60p`hxVZ^@d5{X`SP81lo<-->Pm`*3oS4Tg@-}xbrH!=m|7A$C|%Ju6_5j z@q2vZZhra_D9Q<aD-`-x#l2(Hx1V3^m2XGzx_2%V#$BFo?J+^m5#DDzbVtGgC}Q+h zl9H8d0*!IHOE(LG_Q)?|Q4T`u-D15Zw3K8jRUdP$IZu^D+3Tucw^)Trn@j8?fe<4- zXcL7`3ej1#HrJ>3;%bwhyT&1qS^ftDtP!pWI;QJVS(nKE$TNsK`5w0>T`ui0(1`MP zf&cPb!Q)fybr>rm6Tj{A`u?CY6tCyg=QBv1x9+~jD8$+20w5AI*Reg{L6C_Kl>a17 z^m~|B`X#@0hsyk8ZC5`Yb?#Cwt?1)*K_$Xuuq>5sVtkGx{tH?*m{i+<0C>+JfP+UR zmc%*>eUtjx*<zy626RD2ut{pc&YpvOtx|(0m{8U~EB;&~F}U5(iX<J3l^7voMY;?I zXziTAJ;S-33_uTK&o(|Ec0M6#S0GHNN3|a7U%)`9=3(GB>x_o(5hCNc7_XzzPH)C& z#PB6XY=UwGa<n<aC*V%q7CnG|LnZDLnD;7qK!#UXJ{jv{fp@!6fjgjvG)RyEmy6_` zOMXg<q@U!T!HpO=`?|)SN$d}#jKH7-g00NEIw{yy;L!~MLGD@ro2=U(2kl^Ir$LWe ztXAt_lpWC`AN%TVtKIfYK3P(xm#R&WP>FU^-C?4PK@=?@@;r)NsX!YV<++2A^2uBy zXw-mq2KOK{QufsID!n3tIuFKa($Fh{PX_?+>sIqkmSZ${agwbQ1}}r!>(^!0d@!#+ zyjP;f6;9Af*!Li&yWqF`5nVM4zzjU4K8{OEhUhr?-`U0sz=~ZeCfqfD0g0fGL$OV! zcI%q5mVB3&jHrgKmI>7KDV&FLWrE<p^+`d*uSO@_pPmv$3cDIl@C|_=w0O#k1MEV3 zc!Fa9Gt$L<ciN|DS79WQUfiW4&VN>a46Q}K!Oz<#JU)<1d}A=PrRgQc{AM?6WVH|| zQLhAF)<JgWs?HUG%cxYvFLf|KU1oO%rSW2fy-mTrEzlWpR9~{~U70~12~Jm-w1onC zBMZ{CX;beagke+$d^pa3?h>qxM8yX;vOKZs*j_6i*fI55It9mX{((HYRXj{y=s3;M zFa~IYP6EW4m<gM#0}c-{9&*`&+H(Mh8*oYhhzoRQMue-_U1rZsyy+E{{@4E3`0_|s zU?T8hsD+@XTgu!E%st*SB~;FE=Oy4#fG(FIM?wnVBqtC;ML2gw`2C`v!W<mk-n^vD z>fasDR#hk2pbp^xv|D@Jn8I((3up*ED&2S!@6=rO{m*g^vw3$MB$3_rxXAe|a462$ zUWWi~ltm>dz%z!zCg%{{<_d)Q>-Kky1Acc8#%uw%>ryXTb$@|@n-ACy7Hc6pFjJ^g z0xTp*2f)P!b-*Ewo<xG(2pE_nfTeYG&EpmHywC8sR1{IeU6<H%o9`pAssn}i|JXtS zJ@W!ily_$dy)2UsdmcTGsr6>>iZyb(A^9zx$%4{;cF}TE6P4ozn;mSKTR+foIs+i3 znvaEpgn=QP{(o$Dc>G(NfX84BTSEve*aY9AAT9|W@&>Op*49ET05Gg0+@r;wM1V)r z;HeyQH^TEUcM$_4m0`*a$TWHbX$8Fvr42<%`|$L-o6BElSO?%0$j65t1?kbo(<*zo zi|vnUcKJ$UVB-9MwV0MY;M3I*W87VZ2)y^7+{E*91lExC>7P5ogoBu-a{q!2tvl>C zx<jJt_c7!r43Z=*`yq_JV^<GKM*#jqR0aN)^5>j*H89;tnP(vhfKy^SR@6oL>NnKF z55NQ<Wr(o5f|&CrL{;J_uyhA%Rc7oAh9U5Gx3$uaH;HfXr~`%-nHa{W5D2D>?ZSf3 zCrH}MEW(Z3<<xcuDuZSnx_#*MZI|E~AhF&wQO||W7<3LEa&SkmZm_sPa_0=DKMl_3 z*N~~QpGlC>_)}`8gEj6xQ|TPM0xHZDG&4}DC%a;qs_Z8dF7@80;A$e820{eCR|C>_ z7b58L{Q&A1h6dzu40Rj8qk+)f1at<pK<oMmO(pCO;5yq5Wwik+>poQguGDjh{Zj?5 z@IthgmOqe-bZE(yXp}%<BZDTkA{O;QCWPPfV3Iq0{qrHbkx3=#L36lKuF5FH6#?ca zI}1yugY~Y3WaTUIn9YJ1apQh=;JZlPpuez+X`kjkrr3`Y&w0*ZN`OHMDk8@)N`X~8 zVP~~dN+XTeyc==@n&R`|WaOYI%{i&-05;l%u`!%i-lpI&X;qiM+vXU~>>7)f18)+u zgU5#V)C*=vJTJT-#<F8{8k04WUXc~4?B<RP&(Sc49-$>bOH>InL>v$_*o9UuOX%#W z?>{@tT5$6Od3GQLA_1`x=0B}Li~%%TTo_ZJiG=F_atqorESd970#<ecJ16&SrOh78 zb%ogt&<Z}PMz1VA{ou0Lt-hrHKIAuCD5epuaxf#B4t>{<AEmGoWrDk(&)^VJ@#?9y z#P1pOGAm@zP;nBtU0UQvWUz)Be?rs^vV|*bZ87KeC-VizO@b&0^op+L5}k_+5NK(| zW>{2K(=M<CUubz2_=2^uRA;KJ1cpKLBN7|eChh!iSjKzZthJq>klO~1c->a>{W0X} zJdENCh`B#~Gb!Ec2X`;|99m;DFVwEt4is&`32@)`RxtdkcjIgO(OWI<&z!zpgAf9m zUB=cn0hj9$FDOce3=ru-`i=nVldF7q$QD+DN+Xm?E0oG9=?+TxNKn`nuva>0c4(ip zatlZVKLV`}q5=EpXb})06xSzUT|lYPNs-^efC#-06Yiqce^BDolGu*OqA}T&MY@DP zI_;oa$Dm<d+NvX8<8pB^ue{BXgSHY>&{!oIo#8)pK0Vw<3+YJ?vkl@T>fobQw-9a6 zGHka)ijMz0hJooZl3LwHtbYnT96bocke!9Dn$37<&yZPSYXmi%Pex+9m7oK1Ri^FX zC18hwWbl4)w9H%?Wro&QRaHSdgHSR%x&cb#3g>{T2-q}VEmLajW52|S9cBkkQL@Eb zv?S38!&`l6;NM2<YnKrd`>)rP8W2!r$6z`1dJ`I*#h{M{-{|gK_GTu#%9Q^~W^nWA z`j^SbzmX{R%HL=bIM|bW=h+RsM^n(y2oumiq=*Q;>DCgAmq!L8A(L>bK$EHX44kwN zK=MZ;T6E+9a#aIKh0h-fCEthBG~8WcH&F)mnh^5)EuBIXgv4fGi5|VY^jTD_x>M~P z&%rk=YLy(E9?h$`c&y9CA3^7VFqZZ7*Zq%$#ogp09&6RWRJmFnk;wOMjD4B}s3GY4 zZ>`Nfq#{fAccCfZBsAs}URKOup9O{H@UPhQ7ARO#&@od49UEZc|HlRD668e&-#@ft zm=X?ECqwgo>8$`*W={u(454?P3qTe5(3C*-=!s*IE_{P~SBX6e{V`7Q+2bVw=9_l} zoPIUIvNvq?ndcs%s1#8Zz37D8LdHYXp3&4DwDreQ{O|Ahz#bduJn`Y6n<4kDhZi8I zx<)aas|-y7y)|pSXo8k>(Fzx+4D_FJ68kJJv!F#V4J4=xta2rI0Z5|WjmMmZu02)F zLjWa_IkCGu5S0)GQz~q~Jf61azl*kA+KLQ&Xa@bNFHKZX&t}^@DHjwRNOPHt^)C9) zu}2Wq*aMPiMvvj%WWJKGs~<t7djEgig+>0m3=4BYd<<kHxSRCCt}r8OAvF@(=-eEL zZTQvA`p0Ku;5v}%P?lRo@6dQz&ou|3rP3MCG@ud}upOJV=otS*n@rSW4Kj3EsGy5V z?E*KJ0OMl*P=n8qE$jiT$qL)M_jRMTME{pVUq$*MH)a9B1ukeBus$$bZmB9aqi$j6 z1D*^ls)hr&JOP{^N~{TyH?*(-><gXjhu$K|ll1C4fG+Pp&`cWU-cal`*p|bd1{6%T zd0@jaC=|O5G7L5_bqe4MMzpT<e0id0O<2RN!zj!7R1tM<j`<w1W*|)O_Xk<Qb~OLt zdd&Y%kn#V<7>pc705Z^G+R@G;dcC*$;|Qpmyuwsozg}*w!Xg`7*3I_)N%q%Rcr!2- z5jL=SU`+}4t_Tc8>fTfyQ_R;(Ai3TJ!dqbj*z^xTYY<*bK|qcozaP4&*k<=TMxN@= zO#KP`YXYw1e|JOePC<G3UZlGV!^FY|^uj%ikhryOR1pWO9lR4XOvq|ZqojH{1I7zl zD1<&gj64qgPPko09H}omlteEH+A4I(FbSqDh<Y-xYogu^3GZP$=G3lSz*c<VQJCEe zZIvL-UayzH)IG8z1oYrQYbKkC?pUBV1fT|K$FFSu9z@%-y{V#}oJ{mABJ6zLI}1*- z^nxAJl*NPr9G@R=C=z|Gd5xB65h%5J1M{<OCA8%D8dt;$2K1Z_`pYKDwW*wvUH`cZ z6oM)O4`Kp(yWZ)mX{glB)9uNLf-Sr2jW*SH)Ijj99McPH7D`kZdxIjWq*r7B3q@NB zDpnt)RP^fQn{f~_*<9Zi!5ZuH)JiA7P`r-~VI>)9Zt0@--@Bts1s2U~%v+&}WD<Ud zFhAl9TsLRxb@6uL`q^S`z%utY*ca&gpAAghVN)-XmK7Kl25v*LXbxw?I&UX;k(cH{ z&NZah-mUY@n_(BN_n|q4QDZ>hu9q=uQ=pj?-D^9!Eu0u@?%FLhZT*E<<oESX&D{Hj z%9@zvH2k_X4^?mhuXLvq{Us>cc0*a$j79ZC+z#RR`ahoo1oQ!*#|Z`q^lX+*6lEfe zvLnFc*$7${0{PL|^In}6>dhT0Gy(Q`$KVJ!$+cgYiGB+u_<$`=ip1iSE_fd#uq=t* zWMl;7W$svvGjO}n)QiuuU+mWlj7Xv1Z-K3q(!Z-k3y?iYLe9V6P&kmzW_8~edaW6k zL=FLx?$S?SZ(IOI2P(K2aI5ih*~~snc$b*rei#tb@OE-M`-j`=pJN2v*;amCeg-m0 z3E)l`7pO$(F<A~p4Wx_gMQ%JXMk{=<l%ID-0w>{frn_*qNu!9qkJiyy$W?$el`i7W zI&yU$s1AKcb-2;VzjfsY4C(6EvR<`b+JmwAD>n@WRR$#>2l)CCEukVnr=BpH{l|#0 za4FHy8Bkp;iq|^2E&qjVvg(gv{Eu>R(iHqwh!Y5}nu8x!Qan`)OwrQ#8jI;)FN+@z zao7p(>>vY%k#r6i?=3<2$Ab4|B;oxNw_EnC3V6CLv6Am)5lk1v6X_;VU@h{#6_JTS z35E;FTuZXwW+i&A6x5o>VD&=#c32&Efm2x%gjv5?t58PpW<($$%?V{B4@6B}MdrT# zlG9KW==fBK4$#ixXld6dH_P4RP~`AIZ(6nfthCknShBDVcOWL&TL<!-2UD)9-R1oA z03jbWgiZA{0#(hk>+$tArTiJY^X#*(TsY}Ny$=PT!e2g^Mr+O2ZW1rl=QAkkv7eLC zTj#dD7fvr$%WMX4(2u}Oy74iboow`3+8wIs$QV7_?;m9sm(km&Zw26+9U%0vU8wau ze?-GysUZl*ppNV&UlJ+z^Cs9JX}K*{^9CJf1m`IdnF4R(_cCkOOTaR$ukCCeX{B~{ z)vlHGK%1)q8ewj40)3n5_L4&)!g5>vsf9s*zBtmopmNSo&y<*xl6D$1<XvrhTMJw} zmCu{uZP`~~hriw{r79S!<|cL(W-|)CSdUF1w-~`n=}$V4S^L|OM862rO7?a~4fAd* zZ*`CK`$wDv4mST+BUc^`W&8JeQi+m%k4W}ic2Pu)tq94k#@0ecC8h3?oh)OWjGa<R zNFhr#)-fYXJtCs96eU?&Z1MYEJ<s{Q?|<)mPNzTWoMPPfb$#~n#@!*pJJ-}dEmp)` zkCU}L$JZ>b^s(${JyYN^yee^oX)r*j;<&8i(3qM}KPPwk;F8n`?S1a0+hn>5d9m%a zI_3QQgZa@xpScO4vdbM~L*HWn83-x7=rvc+=26d-emx9#(E)RFS>TqmSX}&(nC2p@ z-d)U@Uc^Ub0OnR#KvGh&%<~sg`mFJS+3%L8Kd?(y#@rE|Up!CWB#cgh@}G7CTg;CV zGygFK7JzhX)aD|A+Pf7HyNLhVD$a`+aQsABS9ov;QHPepfd@%ZRZZs|^jx2s_m<b^ znpt~aNK<BCs0HkIFOJ|m4zHd!3GScW^iSL+DCGi#G@$RE@rUtNP75>Ac2X1xjyjvv zkc694P)Z2uirW&4wYsp+i5zZkKlK7q9~nb402r2%SB?xB4#Mjzkj~`g>0giyB&;gs zP#1ZT3l^)8SIn+~LcGmJm4fV1+2&fB16tQ4j%0IOVS(D3Uj?X<X(PxVN}U)Pw+!1| z{0g)j&C?9XEBJM!%AupUXYP+8SB3q2cN!wMN=s+HqJ%43W{c4V(Yg;|?2a4k2a<{l zEh9dI(~=<IQQrte>>w#H)MX<ZQcbVlWf4|Nn6+tzcRq*BG4)<7vb-2Jz1J%Tp;tf* z$afGmYUxabMww5hwBSLS6;AjmU<3jy5jzrFX3@7~|4gwj0uve|GVCDu<-vdl84U;I z-|4XMT!XtiV`UiRbgAdHvGW1>55v3mhnvlR15=}e)Vd^u1@zU2ETAM>X>ed-q&6~1 zV!wkreGz0nrFl88+dD=gPfD)oEkhPVD$AU*U7SCfpnM8P<c|ZBa!E~Wo4bg<Hyz7_ z{fAH>R)-DdSR(GED>-wQKuM)T@H{|bK*qP!O~wKHhsVDwFlCo7JN`fqA{Ih13F1aM zeyxRIjb2&o8-UKF^$C-$(YUu&5_E|PLr7#wEM5i66gbT>fK7#TSq$`Lw0ZRXfLiQE z2n-;@C#p;8G3L!ip>IE{99Co{7xPRlO}Vvi@XTW?P%NknMpNw8!Y^+h8G#Bhi9M9s zR`|=Q+8^nZQFTo5Yg4PxBRL?S9qXPMG5iEDPhc%bMGE*HV5RB$yU-lNg)u<Ft3aq? z)Tj1@uDGUyoI|F4g$mhi4IgW0tu0~I-44-@N^_UxBOGS%6*2Gw;5woLF&0Vf>IV4e znl;mYD8CwnQz-CT<P=zPJdyC#2=O&|#LVP(dfcTP<SU>DL_)mywZ<Nzt!h>rw!_Qy z4b1t(HT|K7M-v3qfQck{v^#>{Wu-Mx1dW!hb;!k#J^I!QqobNRkAKrV?~Nvn-r5JB zhiWxq;sl>Usk|~0LRYAk(=*x+XIO~9*xKwEEEl!1=3w_8iJkA>UnRkN4NZ9f5^ey5 zsc6}g$+ZrAwnQVUi&<ULhurzVw6RqyCM~I?>626l`^|YMV5Q3)jT95qJ1<+!#MXc% zGbLRS@X(dRH63DA+^1Xik03b!2*7pxN_<tA!ZlBR%G7>!gbr)*tm#O8o9rp96$_aH z#I!^Iq9OyWbx4^WTo2_oya)v`!fzPJsQ_`D<5yM<HEks$38;_Ct1{>!BzMs=RJsxw zH){ZOG9rQYU`K1TLROFg3I7PbAtMd>heLIs=h@e6G&>3&qZoYF1HrF?I%sf~vkw-F z8)x}3X%3%Lx!%1-*XZI*O9`-adqb2;b0L+k?<nRQf%y#M<Ri2#Px^p5Y4mn3Q(*I| zDAPne&FmU`RnhurLO<Am=A>%CMRye45h21urEcv3E=3xuD&D9j`Q#KIS{qUjK*^|i zXM526tGG4(N7tOT%r(3USRW;~3Nc#V{+n8G9{a}Z0RVgD*No+C0B~mhFAbo}yMS9Q zpzI=;#tlL9egK&QUzGk=w4iheX33ObtZ1B?QrL2=<UvMWNSqfn;Rhs60s$r}JC^TU z4o2~V@3Vm93GUd5HTe7s`8MqsL=C8x^7<}GT(9{Hc-qLInkTBS?@WGr>hDt^`}E9L z!->Nosxu3bbl|k#3i+Dgqh163Z2an!5wIq?yJT)9E@M`cv(L04IWXCMgDI4<Mdm<p zv$|0q0K6%H>V4oCm?{go2O>@OV-^-L3}ZF`Jxkkv9R!H?M~o#($$0_!Hva<Jo_ppT z$lc&MGvYN~fq*1XF!2aJT99ga3fE1Qair6;A6_C&pvquxdh)N`y*q+87wnz~k$VQn z7LT+gyc+sYA4~KtUI4O!Yzs&dT(G;WxNy=cuK|NM1N1#jPy|esMaybnRtJiMuZIZF zpqQy#^C8SP;()&2LuN-}sxj=GO;m%DH3Tj=<i?5(`9Idf9u=HDBVc2jNcj#_PQbg< zNe6_YIwWI+d{!yP;T9c;ZEmKm>KGi(F(8SfM)Mta7-E5}?wOky$YB0;UqJww1`#mQ z3o5mNKt15sNW|@CJs=6o@c1OBymdOQBs~N7{H!gs-;S@ti7s$W%9=+ivmb8mCKmYC z8eu2M;hyaTjQjxaGOKs`%Nb;GfGS_%HFdi<;DxY1NXc6y6ub0<W)|c<BRiBZ&1bT6 zj%Rw~R2m%{LziZGfBl<U=&|`Xv(V&*lrIGGkh3^8H3%di^(mTJl#lO_x={-!1!&Z| zC<}z6pMj$mo>k-QS+GZnu3dvgDb-G^8(>ogou736oDP4@uD~d91zHK1R%}Nj2KV4& zcTiaR;liFGCp9|W0bvN05bBU13v4IdvMnHy@7<#!82hqmEn;T00cDSJEB*~!OJqe% z#q8dCGtc27W{_9KItzbMLgfpn6gl=GIO9Ao1BaKe_pfN-2QSy_n~qRAybcC^q5}f= zy*B+}?HEj_ArA>&8^(Fp@rsYL5r&`YPcRnePF_T4al66nzQyG1y}%+0DE)PSUvmMQ zm*#_4j)cF=++PK##!B4I1;dRy$)uMc7*lJVY6)JwD+r}Ok>JplX+p}M@-#f%E=NKJ z;l>&1_I{NP<fh_12GdxCnYlp^kow87yh|XUH7Of`lJ=%d*Ua>GvpU&kdgmvmy9Z~U z>Wogi_AR9kURO2xh7-HS9$0~jfU8a(CU7p)1M(n!XuDMCVm__k77S#~s}pX>uHR>m z5+5J>^YF^?$sSXWmo8PeIw57Rp0vB;8l1uyU3aP|WidldZI?%64_=im3$$y!1q}2} z$p>HtorRdA(ZAIT8_lL})m(i0xu1x=U1g{KBw8qY(#`XpA(0AJ*C<*qJs?)%$!x5d zEIod<57#$pe+ML#_E2eGjWNG>W;sS+G>qA5_}wrVfHts})hgzl0gO&MtPiXZbXFws zM?1q}j^4`{FYs|vgA-A33FRyTwYVnXOOyOuezWLazDX2!lB2z2d>?o0DWCGJ__soC z8dhvxHMw<8t;_jmdAWr;Q`A7F<MPU(d8sV_`qs6Fam#L`%vJwRm);k}6Pq?iXEr<c zca~#0AUOAEEt6jE{fZA;^PKp;4!Xk*f5&s2R6(gA^BPg%cP3FXB1iGhiR}UBjWeZP z%XPz8vPZxh!1qapBe2tK@Q!*aQD>Bu7;49xO~2L?RTL~a2{@s)rc;4h;ReLKoh*f~ zoCC))wOVMd;$s`2z#OaBeq(J|;-}9aq^&~(B1D+aNLum~Lrk%zgr(iPNGHL<Zm~ci zK_PiiXy{l0GwR4VwEdiUzXFP*D0FSJsR==A;XFHOaJIkvEj+K0F$_-_?J}it;Tu>f zDCkSDIk)`;xFJKdymPK4YGj6}3kVh}<l^rb`RfKJO6^PRG9<a&>X{ichlf)PR{13_ z1UW8E>{A~BMTB)pG!@+D8`a_WHEFZEp7ZE5pGh8irIIpkW^svVL9_*T?_t#;xw*FM zI5{K_fcrrUjl5a(*QQ3mv4&%ZI%0}Cb)MR!NEjR-ani1@z$qhJb?w9^YLtD2(`X-f zof!23W4GCh(ojIs#{(pOsHOTGu~;r1r*&)5Wp30%tHzR^rJWeIePE}7fK}Pa-%{hU z3!#3CGm@<X&S#(SF`|BOdbBHf?#>TuzT>ym=2mEndTpn-YG*r87Y!2?HD6R55_<I5 z$(ut&E1ozFXssiUEU&N>TeSp_F=j>*VWX<pp6bqHuDxAFy(p(QVYp~c%s&|tQ@$UU z{=r=B*3wX#N9o}yB13=W0s@+&A}22s)Y*fsM~e>eMjtbEuUN4>B7(GW-B8PvRuayG zl{VYj9SH^CTd(NL)|HYgd@JyQ9Fl%RYDx^KpWC!QdsMeYFZNbZC8nAyvb#Q`q3|6& z5lwjn&>z}+=MONx7mk#qdhe}rA%0Aob>yi+1C@~SN>LT<qF*W1y-02dw>KYZwj13u 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 WSV`lG_V@sQ!h|!mK2T=t5%wR==mabP delta 25529 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 Mv@U7Zsb35KA8Z;l`~Uy| diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-underline-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-underline-rstyle-linked-combos-demo-docx-1-chromium-linux.png index b0dc66c474e8ff952da0c63743ac22a09986ab66..b10183b3c9339f447201212c661fd9e05f38fb61 100644 GIT binary patch delta 31267 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 X^9SqOW7Cs!7wC+v;>k1_L(l&Lt<rW0 delta 31050 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 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-restart-numbering-sub-list-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-restart-numbering-sub-list-docx-1-chromium-linux.png index 56bfc2b755a9c3869110e4a10ae909cd4bb4bff0..9d8983e2f3bca7fe7b6ad46993894c43e3e2b280 100644 GIT binary patch literal 27469 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 Pe#7=f9f)k(n_BV>{f>WE literal 27154 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 F{{}Kt=kx#o diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-sublist-issue-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-sublist-issue-docx-1-chromium-linux.png index e6d6b67ec9c40957a163bdea12f7e386ba6e3284..34c930b50e398e59d7473ea57e129379e591b423 100644 GIT binary patch literal 27458 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 Wrls~QTFYRRZ%k$R$z#5<`rcmz{Mj-9 literal 27162 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 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-width-issue-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-width-issue-docx-1-chromium-linux.png index f87c3464bb2597fb1f9857580cd465a997d56bc7..eba3294a6ec17843e582f08cf2b2274b6a9f031d 100644 GIT binary patch delta 10858 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 NsiLl2s%RGa{{WtJqn7{x delta 10894 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 K$`#8R2mc=_(bmua diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-widths-SD-732-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-widths-SD-732-docx-1-chromium-linux.png index 109d0a97ffc10d0cf6d3f4b580f921c8ea91fc77..da337eeaf77d8e787da32ddc38d35b95f12b9abd 100644 GIT binary patch literal 124774 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 Ng(aWlK6>%`e*-cXJDval literal 122421 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 T&gCrPsn;$`T}r*6egFRg>(5Z3 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-with-block-bookmarks-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-with-block-bookmarks-docx-1-chromium-linux.png index 58dc4fd26f6525a6f47404cc73c30df6177d4684..fb98cd27b7d54cb9531ded47cbbf63fc040504e2 100644 GIT binary patch literal 32149 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 literal 32121 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 diff --git a/e2e-tests/tests/visuals/comments.spec.js-snapshots/viewing-mode-comments-visibility-comments-visible-when-enabled-in-viewing-mode-1-chromium-linux.png b/e2e-tests/tests/visuals/comments.spec.js-snapshots/viewing-mode-comments-visibility-comments-visible-when-enabled-in-viewing-mode-1-chromium-linux.png index 8b4400cdcce1b15c6e5938fe08253b256ff36818..f4c8070d859a21917d0c5585437e232526382be0 100644 GIT binary patch literal 69580 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 literal 69463 zcmeFZbySsW+b>E=sHBJ}(ka~?(ntv?-AGAyr!)c*(jg#V5F#L5(j6jQ($b-HoNKQ4 zefJrAd}E(~_SyfO^R2Ol&c&LOIp_Uc_jUj3dLo`G%ihMmkBx+cbX#6dN(~7K9Uh_` zVxqubxyP7!NJw}{@=}kVd1P#5VpS{sJnuYq?KchWGwVv>_!!PWAVEn>Ga{A9s2a*? z!GKRmBq9Gwn=<YO<0DRP`6mgUS+nQY{F~!fyGN7fGtTrou8rB9OOqDamE#7R`mMfA zoBH0_6=h{*Nq7>Nl)><aV_Cu&!M`6<QXyd({qs}!13wV$%fFu#9xjfe^{=N>N=Z>5 zGb3IIPobiEgLL=buf@lgL%R9z*M?)#1cdziwNhvV&Hv-qqx|=;5B~4P`9E7ZdNdg# z-fl-*li9vU+Nqpof-dWCc&s%P5Cw~qYhr53LK$4mFj4Ke^wq4l@oeL>Kgx^2ED^&- zAKE90)hkK58>1f+M18#!w8lbjKhP*O*gkz;>+&0$=+U$Ha&ac@k!HO~{k3x1l`ns~ z&-+@?hSz%@ezTbzdGhhreQwLC3aiy>r<I=F`a|V3ZY$=vCn-YitgSyt*SZr56_QzD z--W-If!*ZDvDZ#)_?lGUVA{UvuY$wx{AAICF6v_4Dw!qixc<IWE{t3E@GQPY5;2XH z8eWg-+Dqf=5);3|z|9hL{q&aN)3c93pDNTIjqAJ5?#$M0$1-UY8L_kyd<>?~_Bkl7 zn&a$j+e>EFHo>9{mU~%&u7er3;kgveclLLaSn&2IqlM-`>#?F#ZmW3O??$Eps(CWA z&VwSp=STf-C|}XCax*WIiuz2D^4UzhL4T+j6oh_r3WeXa<8_VG%2zd9$1!D^dy^WN zls1T+{xQ827BbZ$3yW(X78S4gp^#gJ)C3-fL6zNXFc#q*h5Cge!=|~hs+HbkTxIcN zzoSVD%~Av3mA9Ir`)z~*PRn2Z%kNBqe<&qGGX$JFL|@JOuVuPxe0Z8;Gx_!WXnVTR z_xxa`ciwBWSiMj=6^*U&#N=?bAO5wDK-!+FEME$ySIN2%YKAKqLniXF@bv0@SIBjP z+kIz7F_lyMWA-=O>9Nn6Y$w80*X4tvT%7{WtIMViY0TPRwHQ-;P7k6<xH|r6i@4Cf z!k_iYlKU?Eq^o|`D86y~{+)*pZAI^5KP@-!7j)eaK3RArLr*T|=hN|;M8x~3LMotc zx3SLU_ee=X5iy>$&&J0>C`Z$Qi<6~T$uJzVnwBS*cW&ePT=nzKSH%7(P|_{d;rXXN ziHZO9Zezu|ndIJo){Q?K(pOrKmuQtOjvM;hiq_5{)!R<<dOK6#4?KDM2z^bQodn&| zpQZ}R#e4M)wJc81;Ht;&Tm!u3^742dt1P#=q-OO#lQ0e`zqnPm^Yzu`>EW8}yD3kv zMP{TN1!_x`4F3IY`s|B?UN)<d_mu0ILhg1<HY0^9{)hd1gv$1_wSVoKF3pu2_d6cA z&p38I*VJEeCwjc(x;X|59TiE)*q=bJ@=-0nq<RsXNjM`pecavIv&a94zcG4cd26yf zozMR2@3>(^t!WvRbmY)w(0tS74;3+ELY$2Bht<nbY>n)l70+OSir-{To)WEA@>L+- z+J&Gox1r>gQOIK(n=MU4-%8U?oX`%lWPP_;*YU}RHoZwKVK@&tJD25!LI)mQOx4Ks zu~Rl^qvcSEUF@M2i`#|VBsOp8BU-lLSU=xwvN&-j-cYN2`MinvJ^iWhLg()vh5k1K zF10^0suw6iQ470UWbjR6Q%XIOfZZ7vdAgSEpFu8p;iOWioVnNAU$)uO1y6;A?j${L z@N~UA`->}f@#S(Kmf2lKDN}&r8$2=chp^Y5b+}fub6&RS1{5=O?z=-fYzOv>Z4uBC zVw^EJDKvL#*2pAgNVv>zHTGx+=-Snojl7qK?YlnTB$iboAa7;;^OIS70&F>gzqZrg ziha$mE>5#h?h&;q&HJ5iLkp;FtcA<L@erl^AguS}cUWcpWaus>ewSzZwJwjb&h?{0 z@Y&m=h{dkc69~t&Zg8(HcPAvX>c6y>M)fN2`nwS;d=UP_WX5c+-m`>s6@$IANGZj` zHGE*}B69KeeQwOtwreKM5*KsbJek{6*Ev6NM%+*Kehnm-l$$u6Z&$f*jundsqWGBY z(pa>=82zBCA@{vBQ)w|w9(E@*F7ZLni~Ua3rU6o!7*fx_KQ+^1U$2yzb_!016Om|y zWceJ(>pYUWipapYct_)sp2}r0WnaPh^xn=yuJp~Z;*6+(wf=7sa2bXMQL!o2IHYVc z$i*)Is5d1--TD48+-W#AU=pCTaf0^OaL~h~TuL1NVc{{WPDR)5_vi<FytY#=XMcXP zjuU>fpBMGmTj+>>u=G{evCL+Yle@6kj}X<V>tlxM6&j1a6$61_*x8NGhD>{Tb+%I# zE&1PkjEsYjc<g-lR-|g#$8D=-k6?Fr8z_XIhd!_q_rgyu_rE^6c$3m0;XDT|sED|F zw3H}(RF&~X2lP-2+6VWJV#TiB@zsv9z0<c+O01c$#C#OFcGk^NEBMoD@@u}e(jx)6 zcw;B1ib1jKdhK#^<-gWW>l0;5hW?lB`&@&<l6ED$f}RI7JxS=5{QlCMEr$W*&mvK{ z67@F5v0WaF)iXSY@{b`Gv!hLXpB4mIjFuX3nOu7{nZfp4gZGn@XpIZ=3%S8kJhE7k zqkAPU_cZl_{4k4kupY#BtbCPx_AJr&wV|kaAGFzfO=$b=r;Q9gXW9N&lc(G8;lq<v zm^q|y?u4>a1hy=cR+I9W?S4H%yWHD?c6ohq*kXwPnLAxMj<z-Q_Bm{U;zJ3O`!`qQ z$sHncjp!6p*saHynLOV~*Sc*#kr!@~COz8t8Fhf+-;OO8OD3Y%&}+UnkQppfyiCK9 z<Q^2dHC{^2bNlKgw5}piX1(e+UB&Y&w|?;x>k;tco;)^6`oQyu+l5m@MQiEM`rQ!C zTiXyks*pUEAw+M6?h<?B8#MucrHb%=TRg1-zhSXX<;??Ya&rHRG6Bn>caNb}9j^3N zLGjc$uL-(RQyI4ep+hIE8l(vGI^Kzn<Rbr(uP_d$0-aLYQ=vnu&2a<oeyQA(Cg-(* zHjf{LD)xpuw`AfbNE07D$G&-oQEhpm%rsfgDdO$ZN6$ViT*x`}8MssI1h-`FGc;0> z=@uxGxcpAzvA)Y@@VeB#F^$u#M~QECdB(n5v!u7?jn1JMRj@b-Ra=ZyG`UzKoW29J zxOTr19qxo09YB*ar{#*UDT225lf*#s=Zw!`|4PqWA*W@`m23fLy89hIJYIh+bLS_& zno)o4e1vMzWec5sRd?(49ga?8(Q4~*yIH|VFTfNgBafbc(h8&x#Il*fVz`B34~sGI z`Rd|OWgORTx<C4*PJ`E9400dw=J`naU*oKCa5duOCA&!qZxOEINmL%qeheA*pjAks zd7S^`Ev%2s>c9!_QO)t3w}_#j5v>auCbG5oKpkNr?SyW%gE4jhgLK*SxuNLUI`!0I z#{>Hc);IrLtAADJi>^1wO<$ni2NFJ`I0W3K@|yf&EO{Q$cqj>IX-{^avtL$tIE>6| zy#<53qOv7R#CtF6{LgPwLr(7_8{Lj2uiT(5S+w38AJhv69=gvMx6$mY30qBv+@^!A zOD*%-A(gh}4#U&t)8Q=~p8CIIx&!x!l?8~Z^7`H9JT0Q`vh39Dit3``lJdX7%gyu~ z$PgIl#WywWjA{2;r5;}lQdeqA5qNb|xnb+idX+>7_T>E(olZ>*y4O;?Ntc|wOnCa_ z>_!0s198+CKR-VId{^WMnmvm_J->F2fGPzoYKq|0I8_G0Mb=9iCFrg5zQ_7ImIK^& zGbz($WX6S$53AAGkE)~-iQc#sJ(<{cJ)U(R%oc0%KHkv~#%gkt=U05{nCL%K?YLT? z7d}Z+ZZ2SM7_jm4b2)?23o@)UK6~Zt3O=C=fHR~&6q9hVQlNp#FgxYsM&H<(D9bC) zA6hea?Z%nQ4U9%=r1(Z85q>A;oA^yiH9mg-lb5V<=FO7rX0o9_i*<=HI0lpo<=eNB zGc3YK@cMhxcs~1f#QeCQfr}=(*Noc2)<r3|;=+eTs(pp0{p8VKYjlI<&0Bx@(b@5J z&hH5bzUaamH?Wr2f7W>w9=7d+UR6G(7gJsNGZDEe9qFS0omMiJh4N<8tp~iXZx%PJ zb*Za}xRQNu(#U<#>!<pKNGs1#UqQM+CA-nMH586g1RTC~74qqQu52vXw=<r1J9w%` zvK2`WaVt>jZe>If!y%1r$5t!y`JTqtxaHP1#+z_CrwWuFSOm$EdA3a+!d9KlS0J_s z8p0K(HzM0Zl@^5d#$!G9&PFzd^mIKhww7SXHp9Nq6uCW;Ufx<4ka0JHwW^7HD1s7q zSs!Y#%rOdgzfCThfjL;DT~2W1qF4WgC!G)t6<MuUl|~m6Usk8eF7xsy915$cwh44f zTT6d8$Gt@xEz$ihI#xRA3Al^ZJ*R|{0BN4CBpXhxImTp)-8NhDT1jEat@eRNbmTe4 zD9k4NRtb>T=hDX9h*zd&d@~NMfZHV&@KL?eM7rgDOqKI{h5w@k2+YqM4G8U`?UKk4 zg?VIq#*5QC9?7KN=XuF5wlh`PD@r%Aqj&zULHOomiM|k%r`(kB_jv8SjaOJnQ_qUD zhTk^-<#qD552D}C#Q2W<b|4({s-3!k=SJe?esdtIhL4;M0{CFd>b?uXBSr-@z7Fk} zG82xb3<|8C4S-MX`7PsH^G(-DEV`jM4`0$g;ID>;ba)Z@4!h;$IknSw2Dk6N123Y8 z*$lqfXz#5kyC+y4LAMaL54Omz7+l3ab3R)?8f>WbQ=Z%nivjGu=A-Nl&^Id?c);x8 zK`*M-)l=<p^`7o0iw`z8K9|Z2rY`|lE^|<az5{@T2=^(_uZ8(>d8Z3OdFbAm<eBMo z8E4oRZibpAdIAbb%q_ck%EIzOih4~U<`hF47x#*|M8++J<(q}^*kT?Eb=;9f|1ALs ziX|cIFsx_EN3t^NePuD8#Crz>i6O=v9v<dH`+`zO*mQMfEs+T2<a+g{JKerf8)ysw zeXVZE9ElLUa|v5Lv8g|R57Y1xHf5DMV#)180uQYe>E*A?(||z<w61y{uJT}%7_vB7 z(bG?~-EDT$4fgkpq}q@ES!u0_#*WN=-Zzfi$C3NlZF>sfmgVS&xcQq&1hIznSdOye zOnH}X>3MV7UnXi@KffKN*=CowBVfl3ZdDPx<OU7~B~2k({GQqs!N3S25c``|8B>_o zW@7JmVYWeyQ@(Z8+I#tgq8F{F0ohRi4~4{bCd)fX`Lio-kq?s3D&go2Qwr&<oYf4o zGbt}WYD_L<Aeh%8;e3JEF22XJYpDd~K6@<~v$d|)KMJCqF%Hl>^W%c@@_4&P6B&I{ zs^wr&?{BG;elTnj9X3_@n|`mnkQGryRH|q|ZsQWTECz=2WUm1l82apo2p|rmi~(WK z1FdfH@J^J>K+7-WIel-Lk`L=Q1r)`C<}u$Y0{LnarE9ckQk#B`^k}Cl;fJ>4`KLWL z6;&E}Q~ZGK`6mB5x9uc0!^W3C9}RXgHeDPjaPQ?xN8$BpU^hQUZ;M?^Un^=(LS`b7 z`_<Yejj|dz<gz<=nHMYSlx2K_Nxzmm85r?bXzM_cv099o9>4$BXO06I>%E5G*>8Fi zv!hNZ@~Jv!eOSN(IH|rNeM6bX5kddL#B62S$+GkUfC~o)M^+uVzKZIU*WmN5{iRNC z(RUt?PXLHyqEy?>*1BEvJl}#U`m9xEl9kHuJ~*XW!&)eP!3tl+*i_%|bmbU>-*scO zKq<ZP@@U$=@zflS@}p9j)cLG!kRRTnI7Ac67=n5cl)#||5Y~<smC-W=Eg`^@0&Vr@ zjU(B+IRIPwuK|!xi;-s{sU;&0**MFa6?jyY5<@nxU%_<@mfP}T`Shc~+3um#C(kRL z_(OEAoXIBt>(%~rk*2SPzAwJ`{|a4?KHL`aOV0LZm(CXT&1jKd8>~%a(j3sXS$mL^ zd2u)>c7)oz`e?BCGR+=H7wU~$6nOW~=q&~wbPsEx1%H0_aU@4FjM&h}5ze~-mahZE zW`<flNi3Te>-1Ip*@|pBDrK#0321$&lv+@kzIwS*5mj?upI`p`RFX~VjGnY4z3~-x zAq@eDgHkV7BAH4Y{Ae^*j}@ANN9VkEMb4>9vJOSK2ZqLgCaex-@79u{uixV7?5?o- z5u~z+H<&3je&x~6Gd@wOK9IzcewbP7C-$YreRpoM+=7rsaRSwQ-)y`@AEXtxo~fR< zO!EMzU<L6r+6!#5#G($)HcN%XcrAyT4-Y^F@MsiF2~CFwrm-R#4PLH;<a`CgP3Jpx z%O2Zb=p$^H1@FaYi5|^35B}Yq7dw$~p>z8t7V07X2e#RmCk^x>So#VvwfzP1^n4aN z<qS(&^p;A6)K(faXulHT`CCg&rS+WrUtX_BmLdt(VA?PR<3&71kWQWM41x0Ef}-ZZ zjTz9E28{BM`7Q%7$Q-gtb*oAaZ4vT`djUCzN${m^rG}9@_Xd+eouH$GKH2ha)AiMm zB(8w;6ar={I`pzsO?1k&0O;v_OOLYyZ9dy;<D<|{^{WZ1k*kr?ejsB|hRM%AYy92# zd6Q|fl<pgf{SJwcThS)5S4O)GySniBZmAClHKp|jk(c=D#4I|ahfaxe2`Zw$vB^g8 zl!;V7s?lyX;n~;!3Vjf+K!|rZ`k?zUuz+b^yP0Z0G=#tdU@btw3M!o~GYz{O{!93D zp#A>1^3-7f*OiLEZtW)PnLzwphA|S<xZhGow1z}Pxf|n)lwf(3Rb;V@!Sx%vGR8yD zAsPNK{b1!pG#Ha1E`%bZ2tD}?-Vs+qoA`ZRoA9<rK;z3y+VKe14aOg+V`Wv7eX8H7 z-F)hPbmKepWY?XU8c<~T<~&S+7ZS7Tg$K)+wQu4JVap6vYZU7QYushgsqi^<Dy(37 z_F+imcxFj4Hpv61uI>I_8=;C1&{=pw^~R^qS0D{QBTf|m(7+Z~bm8a1hip{l5Dzeb z?IhV==bO!M<|BkAXg3?F`27k5fC2$v0X9`Q3nD^n?mzEKUc#nQO5>))zE4E-_g5Hs z<LPSpw^>f}zAlN-&qyyU{qj=YjD9h0#oP818%zkMDJWYfK*zpwvRT^HCtJJNa6A`9 z!}|Qw9R;MeX+!UAo<bxy)_tu&ecU6qTfTpWW#QQ5InST2v|jV7a&QVb$kCk6%|!Vz z2-IA``;sIe;aM;bbz&Bg|6<WBIw>6%bt90=0qI((A+q#&|LaQ-4ysVZ>_uOWe&DbA zpyz{tk!b${@C&xF<YHIDvgEFIepfsJgG6g6^`MM8WXUJ9J~U2+mM^4oh1X2FHkeKB zKExQHuQD(2`21H2tM=FBS4de_cnKx*%sIF2+#(;nDobrg7G|TrIM{2&)m@7s6>$2q zJKqFHCy+}#H=+l5(WC++T-m@*hHCmp4nF-ohNqKrz6jsMcox?<Fm9bX+rIV~iN2sr zOYQe?9tN`8VH{`E-R46b?i*7Ro}sbp49<$#{-8eebD%KxX_-)YLOBb$tc!mc7nKxt zhQn<&<!64&D-5ng0=j^uBK;?1bgT%%+4AV;-mlhvomiq14rd3t<^#C6?soc)jvW8@ ziL1s38%I(snA+QEwNJoqhCf%U#gH-}V&BUkq{Dl^omju=WN~VJ6Xo`Tm*^yx0Uc0q zPm=-X)jmeG_u)kGfZi0-dABbvxN%-aJFxnd7oPD1tJ~Bc0_PDuT~5eK232~xa(EnF zDM0>JFG3(DkaVW21GVEHvK>V>QRi+yc#JCaQM-IKkx^Z*+pcEi?qK!@`M!=Nk2oRs z9gvtt0T7-rN&M+rvM#CVc*5{&locI^Pz=7LhlF&N_l`i5eLoVG?P*jWLT<VDkD8kW zg_boW3oR2s)$dfK)KQRILG`X#wBq%61A^=Jbd`O3BvIy?<6r2<hy@nPCW#?TJOaqP z(|B%I7%LZ$51cl<L1?%B$F2nF5U_59x}7C99Q-OO0L~dNe*1p;dkk|Rwc^)*GH4J~ zeG)VW(8e)RQH9|M^iu_?uERogyZU_@8g)2vFIm}izioN%HmrFH$WR}JC|!{8lk(c6 zoDz{JUXH4(WQOgPDw*7m>KQTpjn#6Vr118U>!8T-kcxr-rR(6{f&yDZ+X|egPFWSl z&$2NXxL%q49?6Fakn9`(s2-NW?qmmm7Iyd-0$Kjbx`kF6MFL@5kMBX4tu$I~oI1qJ zT0@_nf97|tPWh)_Q$BJbmBge}BL-FK2ME%~JG0&k&B(%k^=h1mSoNymdr|VT)bTql zca=6>Jy|X`Y6$|lK%PJO&+i{$T@eBu<dy#X?!ej+a^<3c{apR>>P1f6P=>Il6KIPk z1>Q$n-SM<HYfIGfpBUd=MKN(}1+0JbT;0aUa#=5&LMyyCt`aPZ=7;np_s%}SWieh} zY>#r5-IM@jN)TQS;<ww@L>Y8qa4nugvsScngyyG@TrDKQl#x9mV9#we(&ndi$9AUF zP>d-nSi3HfS25m)Y!9s*j!3?y%cBQNQFTTc{O*MO^7)7^KqG}P0tuqBmzdh5yMMKY zsXAs^6Iu*pFlv@$T&|X1U7pXw$))k)ou@dg4*C=d3wVX$UrrDL+VPGrXt$>#@nE`? z3eKNzU;IY6ja0PnssO>l1G|nJ?46ji6B83M(f6MNaS^8UUmwc(s9xB3vKZxd20Zv& zB#8}vqaMS*97cRTxMUuef5(q^=j}z)$Q^n>{sAa;3|9nbi;!s(VA}P$hB{h!(R+4; z4FYfEs18no)sKRe{`7Irk^0)LWJ5p4PlnGp$`;`o>wsM;g)NErqQQ8^ssQ<+dgnaX zG656(QG5f&0;r2cdNl`0x^`uVZ<iQ0hxnQiX4Btnq22R#LY;v<6HnVF-476?>2&ph zNfVl1UT*GCt5hhE*8APKmoLfSmCybskCm<EKSu2TAI(%LK`!$?eo)V0Hx*;%0dm&< z`oaq2Z^Wew@1l6b%Zo6o@jt%v<1*`Uf%??N?+zpP^SC&1wECxxB;-uN><TvuzmzFD zL*Ix&XNC(XA$8-QBE(lh+wpOuyotD|aj*Ut*7iFKAc7Je&dXhKqP}N({+EA4u!(Aa z7o-ci@4%66e)t^t`#fOM&H6()wAL=zetvqsBz(=L{WbU%RA>4tG%o+E3xM@HSSzsa z9~so205~oh?SoBm40ey!{xbY&1C;8Yf;75=4F37A7BC}rtCwOFSZkI;hz%GtOGqOv z$BMK;$i7-mP{AJQeVXzgEr6KSMxUR|V<8awYmKrWoHH6d??8$NG8FZ;$CxNUqY*F) z;+ronBAg7$U<^Wf<(UR=KI1uryA_DXgm+u!UOF0xxGK^2dHev*SeG{3mDVXxOa&=; zlyiy^&L}uKe9nFsf(M}3L+*EyV?W;rvW$q|1%KQ!GU^Q}Y3YW;0U>aPj=)gtO=d&* zb7@__U?ZIZGTxr8I|jo6EK=aMPhDJG`1A8^UU+X7S4~-f_BaTQBX63Kh;kC2T4uR7 zc@R4t;OIaq7d^nDs(C+eIQba&z;fdT(eH^?h2?Oq>n13Qc{I~t+m3!zkDE_6@cM`q zukO)zuw6B8KA7d(pT+}ibGpWvo~{<a`U9Sq%e6N{d=?|<5pp#k?s)qMd*@CNn(&qi zmC}#E$boBFxBYEe4kXCdx}Dma)8;*ijJ{`oW_-aMWmb90Xrn+QJb(taP8z#0N~Ihi z94n|#M>y};K%#y*f(ABQ{!b8CrOZCkojP;_cA5oK5xX4p3OFOxqo9-xo%?wP9zh$< z143dkn6+|1K>K83O~e{s&#)xFrvhg_<^f;K1CnxGMB6!d*TeyT3yVi`+fI#sFiZz% zO2nkmN6MyCVY$E9Zuy?6q}l|^Gb0taG{`7$F71IBNNvB<bnWM|6-O;QRMjP>oa-Ua z?tA9)><@LU@b~BI7NR9Ol^Y=IPn27z0Ett5Vp+&H@8b-h7&hG(f*wg+kzks<VEA7` z9(xoA{1?{#7yGgmGZtW?gNXa?2GAP$KoDZp>)dP;Sp>I1+PVVXBp-1gyF=xo`kFz6 zwT$cWp8NLHTeNgu+wXSpX8cnVuGH@t1+&9B3Yu}i;1Vwr`#Y)*jsc<)&W?9g%Cto( zXrILUFx*ON(I{;=x^LDhsuxvoo4(~_e@S&0Aic5btB?p_)Hyo%t<RRhep#R~L>NBc zD#A~B;#00a9)L_PE%}B8LyyyWRZ)`&uOcNR$!rCM$X5C6CslQ$PYBtn1RAdy9pOhq z*cRQ9SADQ6_Ke`{mEw`45vRa6qTzlbw+H)m@z&#6P_0(G;$AJ`JQRF){8SIq>X`<# zY<~Gr2IC5<ktifaCu`{Q?`6FJ_F|GKhSJ^91Kk@(^y*}3;oRx%A<2UGP7OW(?Ulz- zZX2Um$STZdWu0V_H*}2?z*;3NZrJ+Ti|I|Z_5sC}!>kT`*Qh&;63YpuoQ9AxfI8== z(|Uq8F@WZp3?~iLmIF)9Z=kO6#fPj#51+P}_oq23N+q&8fo`uQN|7*<ui#9O>IDaD zT$6n4$f}!$Q8Le3xmj<ABe;fE9~}sc0ui(?mbCori}g6GOQY2tlyg$NyQ>IVBycm8 zQu2lx!CMiB1#y5ISg(beXf1*r!ATb=`09o>SAI9^Z~hy!jdS$ofP4Q0h2jbS3GtA< z8+$5BN$@VY51FzK`UVq)kn>89S+-Or)tfgWNAlu}RAoa}H;Gwa$He$81Y!&c(*-CN zoq$?i`F4AKIIo8Hq*3qd{9^}20vvMDzH3c=*SFo+A)$UkZd)ltWCJL9Lwyg5!?i#G zXn>VwfKCd!jN;n}Esamlu(Y)xasjaiA^XP@le}@akyXl5Gae;0TgjjrJ1D;Jf8p9p z^9qpG^xC%RT?#EFOnPKqN*!Hcq)Li{OVBkPviNI!iC9cF%wFA&@F2WP#~E8d8?bvZ z_F)Au>{R}3)tiH763|n?HImgzp(R4t^K#~YZXqI3xEtf8u?N4$iqnf<8bMm5Z3lDR z(?EiGcy1+XT|$g-yb{H!OS!d7Ai~6FHPxc1*=-UU0U;ypMOQbx_skRS7wy+w&z$iL zw^AOx^NU+Y1Tlm?In!p)6t<tzJ8rQefAD}7NUxY;B>TQBohuE3DN+#xXaZQWx`ACA zK(dMhLb*}mJ(xF9EbS|5eTn7?+$-ZzOqv?Jk9h|drx4Peqk)Hdz{G@>Nf%-(s_N;^ zq`eJV>Wob<KKQ0_Tom$KuH=kB`5IL5b)tJ=b3bz=G5-0I%Kti(kR@<PegJtm{2>c< zNGj~HcayCizz<oILK?5FpzRcQp3j@0@IherxtUMB;K(RLp<D#GlSjs9H{;QIo9`aF z7Pw%e3!vKYJA>1CJnuih%<Hhw{FX^m2P^2yHuyLDBMNM(v4~>?)VA+Uq&#(&!&Ero za@4-i4W`7dPF}sKR&8p_05x4c5GxmQ5eVm5gThGJSHQ|b4b17_3Qy)E@FYQ|yuELX zokWj>!7u_SZXjE19@{3YV>Bfn`~_$}>?(bJ(7E*nSc=}i16}Xl{6xk@#Et2kC8O{k zkg4gxzW9nCMWI0vuLp86j^aZO#!qk8y?`YE{jh#*zRLxRX5kB6{1VRO7@%)$;rJEF zmqPzEZq6Lce@X){AGQv)T$BMV_7fL`-w0>pU^-vvJT0#135C~<UtzV>_fC44O5fiU z-vYxS2d>C92nrG6P|)!SZD(DnMie>2%9(;ZAV^^gOTQ+S5GJIhi{1=r-8bn=;Q;*& zyf2)6-HMC|-Y`^@QlJOGK?uFBfU!yy#@TiW(~w&XRe<tCU+_*)I_j=3kX}aiztX*q zMD7*T*>Wa5L#2jI5G<fPC{)Qd_+s>Uya8PL$trupcw+;qRzMxA%b=M~m6^(#^sa7C zBIJO0l)UCsF$hV4^a<uF_I{}C7B9GYi1V~k<+G|IRWpJvY+GuGW73s>XyK4ZTh;wy zg#6g(KJjdCl~!N*-4;ZcfklA@cJqQR^CSr2U!8V(0RK?NCox>T*M<jFM2WY)w?-O; z;*#6>g~}qZ8nH+uI5dFc;6MIrbPj*`4xEmWHZPFjDO65F2nT~I7aCbFAVW*(N29YB z!Lf+fQXw~>L3vYU0<a+!@p1tzL?ig|7V%%`<+_Nv$BX-)u=wEr!<+u=(@_2Ih8fjp zVJ$5NIv}pbOUFC*<mCvUDp}dWXl2xYr8BFw!XuS#%&THjezyQ)99T%qIPHh|gu($S zSy}1A#~<h#WTZ7P+FWfy|5zocpwhovl%T=d@cu|#nJH)WK_&887!^omqZnm|qxNSm zzl)YB&oaI!JNF1WuWn8L!A6N<XaC%-s;WBXNy!`F#(-FbeQAUcc}BsX?z1sYC#aOB zUZ|qm?U#+VSmjSIz^&yp)0<kzMc#B6K`C(H;<$CPUv4q*qCf4gaQFyF{;;%vY!np> zUXuVuf00jPVuIpL@4%LuM`#|o$5%jG#Hj9lg+(D1H=s)r|908H@5xW!&_3LUf;Q6H z+T|}IVq(4p;~_FoqjHKiHcneUZY?Y(%K0;4Qg9pxPc%C^c}c0RWf>@gKwCiL;(~JZ zqsF^tpirJLlUmk|=`pb9gY{w4g5?x`g;iz}&iB{zr>32`SMG*P3Q5<QD(vB9fQB<* zw~G>H^4iL9DrJALd9~}bu`G|HoGqFOhar<di&SUK!%ktV+}scME!1Leh`MdvYv(eh zd-U`Re6J4rSI(7rYAu;8_eOb6JF6ZdzEP|5MHZ8!i^~ygVqH`&LFFuAJ|q&iJ_X0f zhLfbVzRB`1+=q*`kX|cL@*XI@?Hh$QIzAY{N+3*2XLxn*x+{*F&KXB5N8#7~iM|O^ zc2~KQsAZs_;iJeoU3s!Gh=gKWc5rJL?$Way5@vjowk+pWl<R2=6Vt&A0pF9oNl>3@ z4H*vn-4&ly3GimEwFb#Cie~pdpi}nV+R`Rnp{a;v`GVgpm-a&Kjz?K%EIHq?gpewF z=*2!E{hJx$mu!D(s)pLz-eWoJbYC<-5}#VH2oB^B%3rzm`0ea0&(9dmv&cjN-}Pf$ zLZQ|}L3*nc4lR5vmLr09`&wAvU(d9^*sL;2Ubt9#>?HeRDZ8oIuUI^J$ux#kfM2wY zJc7$Yn9bOv8}xbCK!*~|o>U-jXkX-59YhR0SAKdP5(^J+?hCrweI2}ph}-8<<x5aT zPokce=+!7cBp*mvo2et*TQ=~rT69n6b$<HkS-0EqHx|Q2;WbU4Kf@b8vlldy81>KQ zyr-v5UwaxeJO4pFcK@O#HX0+Qz@Yo5*f6bPcv$<Zc?18q&za;7tRM@?PE`zp?OUO; zc<=IXuw;oorcfoB)nY&|*&vPnuc)-VeNK!V&SL7f4)He*@xz_h@+%@kn~H<nUh%O4 zUoBK#XiAmmD<tnMw7eoUjHeEp#l9Bsmyc<yh+%0SDNvG?%P8t|E+74l$;%W$p|Vu= zOP4EYpEH5l;c;0+=}4n_+)etQZSo`eO5Tsp*nhqk9v%02-;>z0g~Yd#V`1Wt-TjQb z@$qXf#cWE{hBGwB)_`0b)f-G%ZJX`cjO^FJ_={``k>}|I*Na2*Dcp*01OyJMB<{1z z%XM7j<@PNm3RI-)W(9|Xxhehi3y3esDq;YrNyf=F>+>zLNIW2XshstPV1SUyZTW*L zwXATjrfFxx3B*xF4qdK6FmsvuGoDSt?=dy1>6qRT>;L<wX5j*r*j}?FuwKar2`8UR z$86{7%@!4wilb13rLX+5MLSbne%H&=`nUe!E!abNO~8qw(<Im@=%Z=OTk_?Gsbq1; zPnTlF*0Vt9tyH5QXfY$ti^6Lyq8d)#YftE@<2k)YOem5-6S;Y<Uv_<WWY-6Uz1ZF! zlaGY1MvzDKX()R~VJye%gp0dURWT1mLhBb<0bz7pnMc36Z`O$Sn1JvJ=c@D(2HCkt z)sJ{-`86FGqbEYGn)^JM8_5bMViibtBRcaZ5+rdgD0&{AH=%m-u$;=p=uViI(f_2m z#v)2yNqBTkimbkeF^tX3IJL%R^qP-*H3zFGZe}n(98(rWi{_^H(a!dT9KA#}M0%aG zu1}VJhT)QX{uySS{A#{pn#`J6=i+H|eq;zZ99VSrZ4%B80N^tG->Vk_0`!?YSRrD1 z)|DlqTaqClpk3s#54;&2+2_ytaM@Ca$l;#=m)~j|n-PnsbCd=qV*!r=4_Mta0-XAR z5T`8TKU#o<FIL!lrR1?WlzvVAHVYK&FwDZqTUJ;YTA|ImAS1sCI+9n+1TPPwgid|P ztG9&}Jj?b=so%C;X}`-$!#GuoHVk6idSibeU8|gRHeVZn-z@ctLzSShar2(%4VQP9 zax7;FRxN^s+vQT($F3Z@mz=~o9V(g7D1GnV<woV$Skf-PQh6gwLa^M!)$aK5p@Fg! zNS?nExy?HR*SZr^{e9$jWVIv-*XggDZi{xyF4oZRsSF#RpnBPDW5rv2;i>>XAyCES zG=-aE5J`v}Qzd4c_5IyG0|JHc7c$D_a(8=@7?(V+&dL24^lKAUo1QL4GNttM+0SK& zbPDKeu6+93=P6}$dO*}Te<lf{^fo3L$BlApi|-1An?FBSE#|##I2U#Wr^|iw%rcHj zTG+nI>c=XV#npU>1bZ^9%@gB2zMoqQoVwVjOzXEw_ic}w-F|Sz$k7>?ySUuHy5&qJ zcG4A>m$DzU^+L#TF?jQ`cHehRi8Btgk%a_p)CqEx4B<FhXLE3qD<Y>uICS3?i!<<B z)df$kq#vQ!R!0+m<8ffHVk}o5$9$%ePSf%9*7T1;<+xYfGd3&y4?H?1o?x@rsWvU! zoTW@o_4{&Vc)uM#H9&LuFkfLgn-G{RDxI0InCdvGk}Y6MhQ-Sm*H(swT|<t$ApA<C z|K$QnHU{xhd()KgP68v>_44=6E)m(A@t3q(7pb^K{rh4Ak{MNU;!H!SWvvkj^m(L@ zjY^A(gB|U(9*U&x_mS8<cp0Q*dG*mULJtJUH4H2xM}x<oYYf6cNgb06!{zF)nOh2y zyMnw!<XuJrLc%&oRE`Z)U7u}&YH$MTksq|uZJo*jrR=M*ExshS>%F&{h7W`-jrJNG z`p%9v2Nhpl7cbtmA56{6H4yxst=3~D@$wGyp4=MacVV}nYk!{s$^fO;?I}@Wz;P0W ze&LW`neR@P^YQX_T$R86c=Imvn@3rnW<gu+CZvzj^Q$59SJP=%$xx@<$;_3X9z@;c zJ2O1t>(2BTmn^^T5Fzj*7V<D@B4gh3Y5A>Hsz^xkOrUTd1!q4_T#lF5!BEOtEm~Fx zTk15<KfGBTd0-n)bk~~oy43GSL4O+U&C08J-O{TnW&*QICSerDSd&y2s~@z1#1Dwf zc>S^yCc|)bBjz4%+>tvfTkDQ`g=UYX9ACp)V;E#+Kx*{OJ4N;~;R04aj#kq9NG?f# z47qUSPb$|W3hoHK?N!TztiJ@z_`lZUBpm$&j_Eg=EcPB=S5cj3vzeSkJ;3}VJXbE8 zO`rX8w!k(@D2@7pPC0F6b3aSB>ADdj-#)qxUOeCHv#J(j7l$ZcZEvSt1TLFC@m`@L z6!9-sqRbm;=;1^y3E~PY+`Z><vD+4iigC0%zdN(&o%Ji$B}=&Gp^A-;k0Q~p7I2Ku zv-RtMTT&U<d8$jd58BGRGN;kR2lPcnL_SHV*kms77V^*QI=g=AOi*+w8**{)z(#AL zv?&tHrXsZb8hc^cqX~a9H?Y6amm0J9Fg!wddSl%0V@iY{21<FE`R5wdCQ!Vv>PwlN z7c~_*EzaiEXV!Rs(6!r(J_JJ9+%%yZC!%8TN9vMzyo%VUMB%9g2kouTMvOu?>@!Q> zCf~8UK^gx*I-uQiC0>DbvcbCQurKfx28>s{6_ItjlX<Am=s~eMJpbr<i5FyLot+k% zTW&w#Wq>I4cj>4;GEEbT)ncx!LDXb6L%WF~N|nFcVadEc6Hi5T7;hc^dDlDnz5h1l zXn(KKM~~IM$^JSA)^|4w?s*<81CPb+Bz^zpa*(o_XC6ew8_bUFL=oDz<yDE?8_}nn z>M_sS_Ll}&=CL}q)W4tz-AfoczFogcvjn86pG=|rp5wv1rJIRFf6gm<HwU);@2`vc zm`cA2&JEca^haM3HqE$|;G@<d+rFNYxy-tLNWRAVHB0a<-J@vLrX$bu*(nX9dE`!r z!LfyWBanKQ#vT0q1KY8yPP{4MV3pJa&8m9<q1ZU>vBH;i%2o8=Bq&_QPBTH_9~#i7 zo@80Ln4)skOrm5ipAzmypV^aY!Oq5yLHojA`c6<(?<(iAWC?OmnU*rZlv1Kn_x<O- z6}x;?(^%M@WNWgi%ky+ztNbi_<+0n?aH)H=!mr-(njY1U(*J1W#$FwD?(yU=Nr7sF z5qYPh#zS=>HQQ45R0Yi-m+-qQFRt{oP{$yhej=Okz2h!W`82S@CfLs2!}%96j?4II zQJHwm58owTn8oVyoW1bvt<ok5)x1RIt0-Tx1Uea!P`7mw&U<S!u>t}HPZE&^wl!~c zu_r_@G1Z&dB{DkxdNLSY&3vSfH~wZr3f*AH$Xe&{AgFn6%M@G}?i{0X*)-EpdlOzU zi|&j`n?pAdr*20`?GKU)CZ_23FmBU6XUvcqaP7V%U@o7N)qF9Onp{SI%F=h_eK>8J z!>O`vtE3t0J)&TFWs$IM-{L9$Kbqpl=bNG91<DV2yj+g$^!HO`V($AsU+DpMy!IK? z0O8}A!&ex$L04XjTA~Lc@(I%TM<M4&yZ)XBiTKo^59UAngd9MsY|ZF!m1U(zpX97m zA3L$}2I=~T58M}%&Pigtdyk6nzK&@v+)|C>wtCakfi7m>ME_g<)0;*Izy_f1ynXbX z^JA_B<F`fm&1({?v}a9z%T&(dYwUBX-+dILY8A3YKaxFXzu&!Ukwnlf5b@xi`)ab^ z7N1zAcL^oC1R-NUESb>V%+;9-qoC%aR|LfD>;&E=LDzAaci8sSWeai1MU^~y>T4eD zZxBaV^ZxbN>1}6*l?4v;;q6nkO@&VcPZs?#_&J>Qotn^k<z&~q4CCQJvwmM|hlbj< zll`~rj$e84*PXd)%wAYY{9<xQQ7?YgtaUOQUgZeLtQ@d`LGq)Zv4=d?B8!aubcL}$ zt;*;n=<n9#+ar@Sn`3`fU3M>Vh1;^rzMA#C>8mln_?}YMpUzhY!f9XU#?Mc-Gbj3W zN5^K}@s%pO^hM9Y9TW8-6(8*0_u1^iZ<$d)z`4{<lz3AinO0#n51IMbLftNJd)tLQ zJ}5!AFAPCxLB+svH~@pND#5JlO_^fqh{i_SZl=ifHPw3CrE*I5;mp;VzyE5dx(Xeg z^D9TD?buZ_-ho(+Ak3|H5ffgS_@@2*zPhpE_a{6?J{sju&8V_hX*g33%^yGF2+e(S zq(YwB>C1Lf+L&3cRTMJTF2X~V@zUf)1#5n^K&ODU5q9|pW7?qgX4WA*EExWHMz6S& zY?PmyY?B!_kE{%jQ=6Inx%<=S5|(JS)^fJv8FdwZ3G$BUAU3k{v!2wD5WKi<$oWG# zJuFp-Arp(E{c#%JNVgeH@YInW1D8zrfd|LOwchBw+@~fHk>BI|6)EP{`h+vWZnO>x z54?!*Dj1l@<)!RNy!b(Je!PpzEJhK)W&R{`T(m|`YhH3aZ5!#{n*xr<-iJcAMd&H+ zdvqh8FmOn3)jOZ~-@|Axtx^qFfUzxtIDbnuqbrS|sU6{4Rd}RAelx;f6DdtQs?i-> zTw*+Ki2Y75f6gR{BxuZlOnQA$yv%2Gu(I2e+Jq^C6y_mAhm67>=ii(0CCz_ho>mjf zD9(og1?EdXzHN?G(_!U_ydM!mhn>tQe-x{~z>*VD-7qN=&VKX4X2^<K;fvx_#hRZB z3r7c~Okncefu-YB&u=Go<n6{hrPA!=lJ$Fx6jDDjs>UA^POZc|%kHvQ6u&e-Id-3l z|8xuU%K7wq^J|!;f17y037c}wL6w^BRky;y>!ZUx0%qp`0$#C?9xX?>^v5nF*B9Eq zA$}kJ`%Pfg*J~BE4O%U#@BgF*MMpBC_}isq=}YGaSw`M3SfCJI>luDOP#Nn>xLYnD zu&42bW<uSTu;8o`r9>ctkRqUUCPSK&AbW6Ll8Q9i)N6<MTRhd=gIlR#*JvInX`Gd7 z+3c)asQJ*LiWHHHnjP3pDZB0CW^O1pUi1rX#F7d`%0F#ly#A;IidF{sKZy<8E19fl zf%GjDe!58>HxoI#T><Swu|fL>wOWRDE|0}c->WEhXMPg;_LfR$x_$Qgp_qDx-cLo) zUc{2S%gXh`pDFeH-44e49$PVNHINl8;(FFMx$Jq#Gnv(UVWX(i5Tb^L??*vvJbdep zc?wS1B#JFKt$0*6e+ZZ<r9Lgs#Qq>amw8XuN|UrYV_GrXW%KbL%`Q9&>mRcKA>P42 zaTdbu{6{_eKVooKTcYpH`JTgkCn$c7zq&G+3c+P%jEE9IDH6~`yz!z$jwO6-^jsJm z`PT=b{NI-G{#VlEKcC{ie?4NI|Eq5M-;4AAhQ5sa-n-;KTEKtL<s&xq|A%f`Kmiev zlVq4tBZhINCkzqwGY(+#HvAb;&=5Wa#|Yv?S6AouOq_@yIYjo8S#-Za{9=-;C4!Ki zy$hV=qUB$Z`(18=q>}>yy?m$KEilz|KqD!>qXK%eZskie+8D@w@Lu32>M%R+4_DdG zgT1URFIC@>2bmj?y7-+q$XaQW^-S`S?lNnM8^ZvSo&HnEh3>;ViWU}aT(Ti4h}veS z2P+yEFicMHmA9`AF{BFFY>3kr!Xy`i{0^DnSM&Z_ply&t3z0J&XE1Yn4I@_wAAbz} z`{c}#BV;TfM`A&XGr9|T4m(<|{f&|=ih3AF^xXVj=6C63KI?yV+KI?VQ6Y|$t85VZ z-#sr1j_>Ma!$AyTf)O<oNe@=#)>NhSN#r89VIT{F3+Nv|BZB-M5+9Ib=!>U~GDNY6 zRx|I^DmTBqud*qzz#VglFjs+7mJ`T=uz8c{(F<Do{p}J&=aLhE`5^nf*N&5*<jK6= z{5EYzJ=)O?30r)Q58CB)^AM#!hH2)NWyF{WSn?plYkqoWg&5#EfP{OT6EG|(0ai%o zKn~~%rXeyEVGI|Z2!kI)i(`Q3SEsrY==rQhf{|R|Gi<MuI5t6Q@(_$s7MSHlWNxlb zEtC;qi}x^5u&H#P29LbXb+f~<)S!XCpaL%b<6uNu96;Qfzp{br&*zZYNZlM8DE<Uv z@l-thZ<)qfs%8l42k*`k<EDJgX@OXD3FN*7*!V&hAy@~4(gjqIr)Y$qLv9};Hm2&n ztp4EHllh(ef&>C&OIIPn5EUI=d3e3>3YYx~VkTSD#=j7bu68KmQ^D;CRxWtP^_Gfm z@>YfPLjZ~aYxv3`GPs684QA#)Xu^Ov`#EB+byZW(F$9Z96oMcy+5XM`4-B8b=t;y% zn6fxK+7^OgP59;ag`R!~x8EeUm$eT3cyolcNDoe(HO4xmd7QbIVVoC&D{>D%I_<6g zg!v224^IPMs_Eo5W@y)Y>_fy#5h>xmKzfI(ySgv;^Uzx)c97!QZ9E@nw1Uj%Z=I9| z0M6iky3G!kS}`=kJqn&$x=48U=5uVp737$Dt7$O#K{XFTJlXt?-?gdhOc6t=+@s+c zB-+8H@>axIxd+>@F6#}5LF&)XUO#@K`}Ku<r~wS9C@u^f?$C*}CVYb_L0JeTy~^_e znYcaF(ukEl<@e;|#g+pEtYpYVf`<c*BZAX!ii9aTkUQMBfRvE3<fQJq%UkW=F|fWM zQKvobtm+dh`2;^pb%47Iv<jkkuXli%jcH7>8VzaB=~M?|Y*Wu@7tJL^00pfCzN6i0 zK0k&WKO(UXV`ZpH0q6{^pl1mDu8%S#4Cd;%+_T<<G%rUtyQhg_&|v`)fpBZJ5z%i5 zb+5#t+`Q|yJYSxz>!{Qf3ikEzSxO8yC`EMwzxn2rRQoTiRD}F|WiTn*+Jn))>={7@ z8ewejD1a^R*yAX(3$yKdtTUoa3&S`t_=g6jWfq@3nN@CHo+HH`&0a3t%tGaU!a>bi zmN#Ux9QYmV_T;*Pud#-r$wUO(X5*MHV$C~dDO*9ud57^-sQM{`?F{u!`>aJ@N?_;R zTB?G33{-Z}<e@&_%iCzBP4n{i882B8^N@^O#JSVM&(_69ga{Qg1^@Q4HTl5(F22aT zx^de<u`Kq|7P7CW<fSeU`+_NJ9!6DP5EjK>{h|ghzXuz}BWFC!X~cJ^yb(huLKsO{ zU+A&=WC@<y6s<9%c08_lN5+Av)`Bh1FHO}C0p;liZ}&%0NX_*he!$%?u<L%|fn*t` zu>Rm%o5c99)z!Y#AB{JQ$6%iQ{=@RUIMbJ9P;wA%I|sW6?vJs&40(zGg`VQy_c9>< zhkNx00$HZ$%h3uas#%Czcz|s%SLe<a!?>-CA-Osn6^^u&CsZX~w}Zpq12>+?<taOQ zLn+CB2)ZofQ4^KxypQdsl1<Q#Wts|dEWpgX{0YG*h{o!Nnw24OMBEd9^e$-KBa4TM zW0ME$Z)%H25={3fTlDX#y9iWFLbL)VJQC@my`9KFn`3Lb`2PGEvh@&^pL-R`*V~g3 ze1o(f?%VA2+};j5c_D5rS+s$uWN`sVx!)Yq`#`Or%8W6Ddl~vqDTj%YvPr@iC8@7m zsSy$)fft@(Bq_kf5iLzOiq8|0^7;oSYmls<xnokQLCeb^ZLe_WfVOU!*B*v>;4!)n z_w(M?5dX43Kg;qZZlc4qczynBe2kg+t4)g%#4(~yj@7d?Jh)!pOe1)#5Jtjbg2vMO z%>4AvAwT^K)aZ7_YO~(EJ6&FZD`Ion8D{UlWQAn@zK3aA9=bkhfyhQ8ZnW_oHP~8F z@s=pL@dV7(5F$6Hx14h{(#>I&5SXCKpTeNKPGG*vor3+R{nvD~jW^e#w<twtV8C?g z26~u5=0e?`80$k$SI7$TFY<@XWIjdO$1u4Wu2sQAg`F(uBCW`=cONlqph3DsxA<ql z2H&~)72F--!&(S`oz^?c;oK9+lO7M%;D8Jm%wC~EX}x|CqZ^9xyXQRwvzTw=by6Gz zsHd|TijLsDI{`CP5k*3`Es=jg29sb>`lwQG0!Clcntfj6AWQei3n6ddlLV-DRZ2a2 z8liEoO`8T~$)^G(ws>)Vi8yTuZqZ>k{Vn=#=lyW;1P_>cw!~`k9=32$!(W>T`ixih zhxXP$E!Gw5KGTJ2e2%8%ofPk1p;Wn;g!s$!^)ki9Umo`nzWP3}es{)Xz(~zR2s*zQ z$(-A?tsI4>-t59S_p*%sP*};IJMjsB_?}pXrHQn}o3EgclUt{c9}P8da2B`9_esp( zY{a7swvI_@%PLah$57pyJ-z$4Yp-nz)E!x*U<S4Dfx9*scfFoIuAs>2g1d!$c@+45 z*)2=5qZC)mc)^N+hA=IdBtX}c;jWp41>!ywV4JOwQf#Nl-21lw^)=C)9Q~cw6EMka zU4J8-z5*rC@RoEy+AsOKiHCEI(EU<gIL0`N1x=^f3`f6cFTQz)p?TwVTpnfk_$>5- zt_nrTJ&Pc7PU_L}>`np7Y4<gQi|7UWPH42L+m{_e{!<@rwvq@PhDD&u(v)@6R1aza zNML0J4vw)pTf?8ZN<H=V+P3Nn)an`tx%YFZ-oK(pGxm{+i7=czO=Q-NzwXZxIb?~! zzlQt82$xW4c?7OD3lqvMB%=xw%%s6_ck8*L4O&$nHmdq9XX}_elwj8GXudhQ^&3hO z0r=MkLphQqXi_C0>BpA;gskcGylbGT1&+g%LwO&EL1qKS;6z)1|8K7_uEt#m&`NEE z;Gw0pt;jDW{lX{6<|E&)FJ=!fmm5Hn+6e!u6X=STp_6c<McgC!3uT<~9Zu2w`3B4> zyefKfQwPP!r5MR>O-!uv-;RK1=oWS{9`>C+Wgy#wVcMcElnny!STP^rIJ8B)m%dbh zG-ZE>4Y8k+sqm7KO`U4yP;BUkRrK@Bi0=76YD`0<MV4rWaz(KeM?{)>kIS%nQa4U! zABF^k;47>Ozih*fFtoV&4V49MSn>RG5(kBA&I3G|LsCx4Gw}?M``DB(9z;ID-^a;} z_`#_`!A@q_8_YGLnselMg4#w{TlKlMd||y7F0j^h@z?o#$JEuu-GP{=h)F4SGG3c| z3Pu`wZJRqsduSRCipfV?YmUlYH>O<*5{Ab7mNK&t(Wi6aP0p4Z73Z%(GWaJsePZ&h zLL2$G-E;2fp)HKLG#wab=+0);5x#1rGd5vu%c0>5qC^XE2;CcnSqpiFX20N(jv69? zmiA^^DwhD750JQpNVwx|+vBbP`>;`ZwZN+2Na};6fJ`U4F<W*b7r)+GREc%?kh*0i z=z)pwWQ?^1ADfd4aR#F6bXtP@535qDBMqO-$R<59xsG!DD)4THA%j2qZoLHlVoVD^ zi%oK*LqfTnIX-<`$UuSPjb90Pc56k+B7bbw*TU7_4**JH90c#Ts5)G8es9yJ#f|+F z(&a)0Wt`w3C1EZu&8_5|J}#VnT7x7ki}ym_(y*Ed3pn<rc$4n?)+kJl9!IAzS|5z; z)cMf;=|_kgmtR@ZK5S|IQHt0f54HkL*S7fP1XS+Kdd{8dy#me<^#IH0S71b=-Ncs` zA8w3b&sXYcC-RU)#m_h2v<W|6?6`T3&vqf~Or6MLtnxjyXso;>He0HNpWVHJ?^7y9 zHvyI%15T3X`M^w#vp|Z7_cyK<kU3$VL-tL*O17wFC`=U6EYMqImdV<MJ#(OKcBLK? zft!ugzZ}>6a7Xyrp%Z8Cu$G4S^0aCc&3u!raQ3^q10q+J>)V<4`fCFBAbN`SqHiB= zJ7g(5g%~aKJC3Ihu13V2&#4EPawwVb@m!qjRO$LwNR%SWt>Tj)_zyYhA6M%$GRE&R z0N_bPr_7OMG)uz}IwNo3<3o;&$G;{ggSN#xO|kl{B=g#Y!xY0s->_HL*)rUC_rub7 z(Sk%Kn(KpIvOpuX$OZBu*26in(Il0yW5gPxRq?20e_!rPO^Afsru+h+oi6P8^=$^% zYeTVEX9?bkX-UP-cg4_t1o-{AQ`qaM8ej?nc!{iF_4~h9H(4d%Bb{I?HCD&{M+?w2 z-CJk@Ld4#?S8WCa0jm)Kkk+nQ^=lXIAFU5B6{Ooe2~gPR1_fN@brq!8`ByxQ&<yxr zVXno@SP$n)pUA+#VRI8O6Wqr8WVa$<%&^i!gn9$x)CimKMKeY_7R)$(;d%^bG30eE zv&=76)8W<>qT5gKaQNp}`Mlr!LF3yPE8ct(Fn<cS9|S5hT7Q2WD=r_X0YrihfS7KM zm(oj^`9BB1j!4Bq){$f}p9kwk;0pt6C1(u(D5Q5c@w+KCB%dNim^?Bj3L$&BTFK4- z5vDKyKwk7dpPgQg1p0vPwcXQem|4@q4OerdNp<WOJ6$GR?u3o?AlK$-R)jpS5{1(q z=tG`NG!=6H6U*KoQjWYz87Dux2y2faEBbnruT;^U_FY2xT$$Up4%1%GXTU%4{})|f z8CPZAwM)0K0VzdV8tLxt6bS|C?gmAqyFt1|P-##>L8(njg8~9d38<u?f+C!C&pgk2 z-Vf(|ni+r2uKOQrUF!;W4=NfRkVwRv**fV6dVQ1`&z-le0f(=~di(cGGSasiub90o z+q|yP!W;<Yo<H_c!e+XS;YbUaL<%K8LX!Cg&1_Ydv#@Q+PtSMz2Q4HI@q9cB!V3y! zEzIRuW&QIlvDcw{OgX#~AO=Dv>m4uXrA@5y`E4|X2c-Vlf;g=|pcCRYsXaazVD$SA z#p6hmV~+M4y8eInApD+=CW3gR^mCP(lsSZ_{nEww3kAO`(i_@$rP}*I&SG)&&synZ zJfk^PD#AM=q;TsB$85WZ)S_^+$p&2p%6lMCOKay5WprC6xZP}aX%V5|erW(QFa2sD z=ptYS)Kgw=3}SxVRsngP$lM%o8#}xuacs}V{uu-mybUQ62UrJbHO5bkxptEn5GOrA z3wCv^Z!;uC#YhayvsC7Xmoj+FHLjo&C?7t2m=W3bGB~&%C;E<ta$}F*EZ85}!CQ}W zV`$O(`Sd@QGZqxA;la+c<=9EmA@ufPmHDxJB{^K7&*SP(B}!Dy%6$`k=PGE??5?gF zUy<_fx+i{_2!-b_@FC+U`X1=Kos@LO7A4Z+hl?bIyU&5?B~jW+axZ8c2eCl2Yz$Y* z@ZJT5V}cB^9<|dnI>9PM<|R1BG!eeVTqLhS1mVvaOG^4(jiI+W$-(7%FWuM+x(5L4 zE9_7#%C9COzL24JBTaF(-mP1|D7-0GJUUIP97|#&Sqr1Tjm=?jA5mlvQ)X`?YfFX& zK_2_4*XeCe%2cx$5Krn+UJ<Fe4)F(IQ1=SNJiLn?fbGPa`F-@OjJww27G6fxRPJPB zwwC1EwR+`>FBEOO>_UI1E^HNbx6AXEvV&65`_?qG;rFUpOHeAErv0s3FS0rP9RkI@ zvi_iB2M}HGurp&r`cIoPJ_T<!48@bPHp>5vATcjc#70=lEK!f=4$nwdPHgtx{C(-y zw>H3`G90lyQl=QS|Fx*o+wUM^Pc@q3*i^?7^}Q!6_3(4eCS_0T79C4Y3BT=Y0s=T5 z$u1H^3=4ePE{<-KTEJ~pc1Br3v&ms^+2W|nb2Z}<z6Oz(TgIIXVfJW^2pH|C5Pb${ z1~F<v<i;KN-?5s(*{z~hCGMKZkGqO<Q2yuenvd|mskLkm1V97<3C38tT3T?0U8dM7 zQa2=tl|rK<VG?qk^b!+%3Ggieo@6#KDAnUV`JhYB(=mE&%6q_jyQ2+?Y~a{BvesyD z8~EfsgYyG0p?c8NK(zvLk2~K&GlZlIIiMX=xg`cK&&}-$<viGu5FfTqjFJ8O`osVD zq9E@y#p<L(kb$MStlvWPFM<t&D&qe=;rQRWGGuTp;j^k@Y&?U2amRi;&u0s)EJ)%2 z)ylt&*z=j-7{K8NW(aS!P_T~0<#)cRtC$O!=gZ#@i@?IIwXcGY3TI<Sz(F&J*P*CH zYsJt@c!!q*yvEMc=NI<d6)S$$DuQhV4hOL6dw$3?bOMbdDB@|aTtVIfdCb>X*uq&0 zpkzNEV7&i~0zYj0UyKdhYrxgSI4{A+32EYZ%GnakS>kXCd2V|Ygo3BrT5-_FrpySy z6?v`RfNBALN?@ONky|y{#@zFTZrboXMwEQaZmQn09iEwxeu<23q1a#8B09g}CtU=| zB*?V5z6pV+pyTLUiYF-&f4+jy>vjmR-^we~ne&ybUq(>%!=}&Wx{lZ_`j9hY(oZH| z5=~U~<nb{EqPao2l8LYH_jS$C-}|yHFkI(gr+vWYm_SeASbzM&<$HvIimBO9*DbHt zh?4$h!Wygt5Nn@9S3FgDGVXs5ZbDFF^+|CWR^V)c4bYG-P*Pq4_Yl!}bbk8-c-HrG zP^HL%0(V^Qk2|>B<!E@I=S^p8%@04gHJB5!d?p#X*aMO^5VLGw3POHRERh!VYoKns z`O?<`Tni8+b<F+4GeSlw*#6>6{?mZRIq4zNI)G4A^_z+Gmg7Hro67y%XubXV&We4| z*2D^EVA)Fr?fUa@VDrv`VP^r{EFjXx8(%20cUVd_H;)hyIx#!%Z{P-Pt^EBnWJC^k zO7v62Dc}T9*9>>4Kwyg$f;ugCZ4va^3)cWm3(W+d!oPohZ4N(pORx;a98Cb~hIYVt zd>gtYYgQZ%@BA3=VF1aB;0RCr1vhs=&8cgmj{vzI_W^WopK$LDhUfvZ*$P`Qo{opf z`Z1O(&fDb6;$yTcV9&uc+Dj%M3XYA-Q~hr<!G>;C=A!`5#Wo*M?<talA87!<OOFDf zED@p#0T}Ty7al*@6?6mZG$eL}D>i{u7SO*E>KCDR$gjfpxatu!?~n_1-8NiFYxZza z@5o~LSA$y7eX(tFzN+4}K&a5Qz>5p7ctTHsDciP;1W3=*57o)E^oXZixDu*uJR<Mr zex5UV<-O7aQa|6*<AWP;4Vl!=0Y%Ner}9}JFi!QFUJ?hCr-ps@p8}v;F$#}aeMhzi zRE>}L4PVsMzxoQh;>Ci<oUI;WmU#uB<dK-ML*uOPZ4|6gKpG#c`;rehx1C31SThg_ zK$At06b4?7ZQ1~-Ybw;Hbv0Kj%9J-7Pt!NRhUl5QQFaPEgZ1zyb|4bU#c>9`+Eo&p z#{dfpdLzR2+R+dv?*+W8`kfUl$;BX@zP^kaU5}RfAeHWtGG*KE?fD7{AMm%yd`Tx) z%W6&UIr}drSttTP$-xEjMTG!~PoU^~rC!v3P$*b5!J{)jnE1UAbL;C!`Jb;K4f|s4 zY<*X~wfb{DPF``ID&Wd`e|GC#-nSI6Ulp%2D973yastcR`kNDK0Jyn-?0ET&hFW%0 zfyQ4uxpxN?p;PcR5qGVkUq#WfglBF)z?aQ{b%Q7?oXF@qg8zn41vp*2$bY*Cv#%m^ zUUmjN3HtZoGYeE9wnS*vSRC*5<~u)JD=*z&_Q=J;m4I6PYz`EdfrIJHMJHe{19HJc z{v@k-p0s0-4?MGq1vqSAhxGsk0-6cfHpU`vaL@1y@H>e%x%{7amjRUi7HmAQZNSMc z3UIi>9z?5dVlB&%OTcj#bP`aIGL1v2Ye2jp*e9*B@fk{MTLV$<DG<3Qrl_DFD1NvH z(81W<5O(i^&u}E7J^D_1FQ{rSg4E180VS$x+(CnJH8!V_aRQ;KK`E$YyREsxcz0Wn zr;PfzG?WuBs9P@By)7Kk?sLcJL_)czZKQEl%@(|l{@cjCnlfc%Y$5g3ZmI*MsK8sS zUgf-i77*G4yRV*xN9oWnu2AR`F9iAgr~uoMWh>|}vhLVCgTC7LI|zWg1V6t&e)ume z__{^6xbJqeJ)tiRKAh+G2Mqh!HQGSYhke&p%1MyGYbrFjhK;Ee9`@RV9b>MI@~>-b z&!%k=R32;_1ZYxJwOA`qr3B1G{hDw3*kSp9bOYUy*;)cei8qmBG?7Ui=!q<62PO5B zByA3`RBdo0l<bU+h@&xC;wXG6{^~H=-RP-Q<SobH6!RGF8G!TMbBxv9471!^`7)Z& zp(=}(Sy2~i#ncHQtAmVp_&iW^b_5GvNycMY0J%-Hz{U57@(MuLfLdMQg9mPt__#4I z&63L1YCA??BNGUBIugZAh(EetvFO>pBX)CugfS=jF}rQ1o*tjXAv~c8`Ypkyy~|4R z&GFRLKBtZ(93ab5#+aUWu7&fCLV1!itayH!01kde=|J9~0e=AWeznMiKu5AP*FA>% z@r^#S<lXwMD&pavN7MSkv|N0utGi=2_xWVAI$7&~TpE|0Ak+$g;v;zrv3B`!sp=x- zoganKQ3t1PF=Y;+^Lw_-*J_KK7Qb|)(<MBjb`;niG9?)T@m3nGpe>ZsygN2J9ud^g z0Fw|}ADlBqo6T^Pgfn&k4mq|=M`^<}k?0p|rC~qyJa8AwCTbjwS#$hYf?hpTE0lfl z(kizKvv-<OZp0u)38kRy8HaUbtO^ExbvL8ZQ*vSE$|#s*jpqx;1t(F(A9_>mvR;b% zv&!p>_bc8yRk&1w5|!FTsuqSK_<ZZn<mz&PZ}Quix^%{P>Y{)S&Mewb<Uy43$wtgV z#aamy&TwZO3=w?yX1<|z+qT|1m*-86$TOhyN=X$wCZ;nYk95h7P#_XoVC#xyx3vI; zU8q%uy<c+P{0ooEPlu*^N|s|-vB4K+nY+WjA~jkTQ0)|PO<Kx^Y<uS(6s{V^GW|5! zWWW~c)buoX)e-F^&_FezN?#U`;mSLoe)uT&_RUHS@<pE>=@%Xzy;8zyEkTBEk+11d z#63b)=HvlwOa2(Kc;86rr#)oey2Rj2>Sa^8mHAGVUhE&YHK8rTAB>I&|6m`1Vg3d@ z#VGx+t~+qBUQ$Cd=&ni)owxm2ArZ%Zow|PocY`)TNnGqw+8{#@*`!0FiX|=ST;jFp z<fhO|GrwC?lG!<2<5qoDak(fIHJ-6t$-@v`@ws~xB6d9w=hKXa=-J-P6Ur!93etj8 zN!Ow&9;&G|3tbgjcj0>4>+A|@!-qojYr$i**YfPl2Ufy&M^F2kGb}fj$LOocmCQ;2 z2Q`h=lc{mREs+^u*HAfQLF@$b`ijK$%Z23|?G@rk#w5}7&ekzWa=oFd0ePGw-_xml zDM+vR?OX9kk;QECWW~DVJdo4-U@BPJ7}yobFSfD<vb;pO>NP|wckMP?c;9){Whc^j zyk$$DaGjg4{Ga^ILGF=bsq?h|VgdMGlm3x@UW}AZ3hB#MtHXKKl$eSRG0{vMXHuE9 zV7~Wa*H>|itaOCF<)c15Hb-nD;qMEb1A2ilJ7JOZej3kOo;rb1AG)d&PCju{V))o^ zgKxf{w?y<g)+95Q$p+igkuZ^h2_jNzs|>=hj$*>H#SzT!3vb>}8yq~ZtSO2Q4K?>m zCUf<22x2c=f^|G1$RICQp-I`(bB(|V%EaVQ9k1>VXJhvs(|DfRh&znpo<)SNF@w<p zZA+g~(de?;E)%0@PW-mc;Kw5LlG8WLL<P9GB>RLD_~LAe(ev#F3H?|(56#U96h7u< zIa`Cj<^hir!8QwBh=MqQO_PM;DeI7ds70SE!Ru_=CzHNoOVvkoSuej;Qla=@v0Ps5 z*AS{#U7O^2%#X(*rcKEtsS(~`^Q5o-;g?Nj5{F;1(^n&5ngT-E^jn-P*X*M|U=Ot9 z_plvT^$S4>T~SK;JW%fNi;nv)bTX+h<(?<Z6CQQzUlmE+OkU~Pbxby>`1O;TV*KBg z@$n<^a-5YYp>+FL))bMyq@(0I4|b7rh<7aWh64730FzH2jTmex0#|;`5@G77e|U3G zdNK^B(Ty-I<UtOLwWpjAezT0CD8h20;iu?YJ@@gr*@6}J4za8Xoz&}*!Ja*|W>%;q zmtZjo?~Lc~%e=oo-8lB+Zsa=xybhKg(&*Xb1{c$~nEMu`fPK{8eqA7tt6hQ4x9*81 zR5=Cb6;<9`?mU!YsN0=YG@->ci+7+1E!cWwW!ckYbeyBZtz<Tb`x^I?;LlF$8$2)` zOL@C{;@-kTSy?QM-(r}>#Bsp0&VmQUgk;!La)IEJF*HuDj+|cahv@0{NX2(Jg-Z=Z z%=`3KVbn?dDubXS;LowF?Xv6r8Pe0C!6lOLjqRM$I5}6*-~%92ON}<zN&IuA7)(jz z(NdCoriwg@u|g;VRRdA*cm^7Sg+oR05dJr5<NI)YmuJl{NV)6CCr?YPEQ>JRc=4#s z$tg7pm6Il{-06x}+R70P6UpxbSlD=b6=bsbmmatKc?#Z|s5{o_3A<kh!|v#!u)Wv6 zOlr-#ho2A*#yx&=xQlEyEl^Q$nk@&()%3I6^Uf0yk)Ut$`FSgH2L`ly+S0Bzdtq#C zaY144ZkYb~GL3&9mrUrWfpYDDGE1e9*}+o#Pp}xl&BIvQB4N@Izswa51q*VU8ly*v zT&_j(Kb6y`!|15UEh&e4ouO*Jv!0>eY(Lba-oh_JI}?A8uZ_X<#j4j(B};USrM1GQ z+WUv<X|_0ir>jZ)1)uS-?))TnITiBp++f?af2x+d%u`_ojs;3_w=knXnfY#BK82Pv zBP8^0ZaH}02To69gM)Z~`7a))4rF`KfuHSljS0btE`UX<S?7!6wys6+M`j^1-LA0s z0vz;#1|5IYqW`pR{41ah&=E#lWPTm8lTOu~N+^7hH71<-8^0QU|2I_?lEmXwg6Q`! z7YEzB!9=rod+;anesf5l;2`G7HX?Ct`>&|;AasNMbk!GhZC^dM5|!L5!rM7CS=J4h zOW$|jXHk;yvj!i*C(VB+^(fES=vN!4dV*JaVvvca^vil~i#7pbzrYtH9%q~a+5b%P zU=NUApupm1MhnLsUx4Pp?nf~b?HeIOiSZz=xNy~bwi2xBscaa}fkk4gyAcY4!g#Ix zxJ7S?iPDYG{{WbYM@Ty)ckdE@-*ydK*JpF%&`XE?#)s?-g<u4IVSETDz-NY2-aIC& zON<yln%Dcw{zp#Qu}@$@pltjC&>OUwnAgW-j#(&wTd2~{50(>1%_D-oqGnk(LA2Rk z@3Gi+P+c1K8|;TypTS^sk*+~I?`jrGp7^r6pCzEHDmPyR?defDOYlxSxz54USd0vS zOMp=mppxM8k?6QR$Fz{5r!RJ6Hp<(HoMK~1#$>sB5T@v<F9h})6%D6vfHA8U&F3}f zk-18oWCr?Mg3Ns;LBXGhPQ?CQ34P8pa^^Rv&(CajFy1a3Es%-4+HWzFK+%A&rhG*b zw#W&XeY}V9CeQvHw=4B?Wl`{bS%Jp-ffO|C51>7>FON%AH{DcYH{NwhhrcWqOxWM? z^bRyP(c*RC{jBWzUTi(o6-6tw!<3!_z8J5HF*SG!ZJcB9vHFt<>WTb@S;FEYZR@{H zlt&%PZh~36bA$tcn~u2DFCQ12ls}248|VYHJx|IEZG)$PJ#B9yQ~q|6u`S1;>iFhI zNw&XF=bzr-v9BcmiuiZ3oWr1AG}lgHgLC7mRN6PeCGQP|o;_YhT4pW3g@w-E(rD$= z=eD0yF#$X=`olry&MAzTt&DYOp8|hsllrIII*>OlvH>0y0ai#al_&V}SYdTYg)-TC zf(!0r@E`*Ej?eqLU?DKl0y_zyVqyGs4E3kKc*?vQA;Ad)c2P{VBE6PhQymepgSP>r z1CF%DdU_*wId=s<x|SWR6N=<>vzQqQ-SF9W<>U;22m@Z=(VwDRU16O|5W2UNT`*vO zTnu<+R(Kk~2QbWzw$e4^M;ro|O@ONo+5!W2BABmoKrdDm9KG$0LM%hv2dGk*(GiqC z!JW|Bbu|UdDu_*V51Q>MR-J63T4<O%ecl`}J;9xd+2}2-*2o*{SaO2C7{D#o!HwA} zS`_iG?fI+%TR-0y;<C1sp`K^0ty)v`FfMokp02p8rBJ%h>8svZoo}ygE6XaoYse}> z|Ej0s2ZxHJ#{}N-@0ppscf%#repky(^PDajR&SVQj}%t;9J$aWMr?#YhXrV|?sb|O zenWMCns?}Gr=hO(USBe97HEHJ6|F`7;4YQmDfX60MQUq*Qq#&WtpL1-n^>^KjYY3V zFq^|TXC$LJJD(g(oM|hjYs;hk_`a#Ayl5b?#tX=cij*6=vXgSuEr1WcL2+ja9PSfk zn1|(8jCI0&EDWTz-o`V~bcH#~hvuR4ZjCsu{bvDb=CWU?5nHUV>I{nyojn}#m$}1q zbLM3u)foMt)`feSV{})p=n8qdvYfBz_b{K`EU$pJSVLp+@C0k)#@8{F!sBVzpTv(5 zSiM%IujH3H(Ks1Qr^XSkF$)F@!xnx8etnQcQl%1gs)(8XP_eZ5@F$ARB%s;7fU$nP z6>gH58L>4N^GMKA9JZom&VJ<mFikdb-+o{!qxk$1XGWn5B+#0vG1dRTo1Y%TiekBo z7Up9fqk#`H2>i8^kV+&H#NuT$P{>S-yaBM{C<$JL)=<2?4M|-B4t*l9pnPDAV`pm{ zDW00hrbwNt19*<pd07T(GXi8}f<s5UOVVK4fea}=b#{gnNM(TkA{#s!K)H~HdX%RP zVKyT@4MMEcOe+!usFm#>H!kE4lvFT4r~l8t0g(Lv^+NE9pyo=2BeV{vfA3?EAPX2Q z5y*jJHVq6sKM)nd1fmnMX%~i#6Q7s}U_@3xxu)b*O=b%?75QHuWj+`|tX1LWF<IUJ zR!aC^O!R?~X6STfdO{!3GfU`cdUcTGjnk9ERtQMZd^LK)K{#OCJZ1_~2)0Au7yJW+ z2L5j#6n%0Pj8_1N=QXLN9k>O))o(&WybF@bTuz_nWOiQ%(%C{?QYti+Ym4WAQ_w?i zxedgyCZo$-l`doV8yG~KC%}&iQ2t4<r~}B~oTlJdPnV`~#mL2!2J93Uk&^|6PKX4U z*C$L9>>gp3?;Mt$xx5el6tqPfEY6oYpFXmG3OMg$1LkiPfYgbimFi~Hh+GN|7i$3K z@`L9KRHmXeu#G}&d0$PSgIr&QU&z&Je+Bc_bv58<B1ZH+gD~xFb$$00Jd(Wosloft z1nx}09w<c%z=s`t%mCry9$VJW!$DY;aNhC1T+f7~$RCW#;b^NLIY^hVg0cg#E_It7 zi!Ld<`P>y885PgKI`DIWTfI5JzLMwgRaQAZgCG{ZZ=fwg%6nJ@p)BUmki*Y|sK<T2 z!{b6cXS9UCH3~dG{=#gowhJg5R}mL9XaK*OW&(rKP&Aa)^Jbg(3PdhIv3LTkL>_>e z@xU1*_a&DL0h71-_xoGrap0x!h5Nw}Gpx;-zK<JmqHT61G9hhWfV3C+&DLxE+d?b< zN-@CyuYNX56~?9kHYRuhZCT&(eHb**MsB9DK)1XDIHU%6GkylU6vVk~T;`BO^%ZD| zw=v?alIA8B!6@YlP%;M0AiyXGDxra8cof3#0~N=BmnEzl2;e>9(^~IUeB&+z`nb;4 zd))u=FL%)erV0Ms({!A!i2k^uKjasfF$RDW)^O%Vefuu_j8q&?L|^-SUmvnp%_8@& zP|LY5JUI+l`6K4X0q{Q$P5ZjfRz6In6<h_HCkIdc5^yk~gll6R_{q7?yV(;%?7}{x zLB=tt-zo_cg~lIk{G%BNGsqgpFEe|lCir0Ws1;!Ddte8*aSDSKxLW*v3oFH^URewz zVZ3AukK4q87X;KM4~a@{X#%TsxHVLDx&xN@2HTyqdR4<OGPK<6?EMXdtM05btj}Af z)A|0+|K7`c)GE+A=aR>=#RuTIpzhi)KBXq8CH%v5f~IxF1w-B6Mwgf=J)_~s|GgzP zLIT%I%h^JW<w@|1jC?0BW=px!rVU#F@vye)kx^IynzCc5%S2f>_z1h)ue=TGW~~f9 z`cG=-BLP#yzBaHKrV@Gc(qk_3E#rUk$NcI8^>kOBRsHzHH&Mb$PP_<gU!A<gjKttn z8jd5s?`&BRp@Z9UOYSeXifNjk&=GIur~Qkt{l2DSq*_3L*C^vLJl*o!;N1TgNWkd+ z{(=S|bfh_Xg*E_Gj(8lyRdwMNR&@lp_nmOuzL?7-u#XGYY66h5VY&h3@)>|$2y<~2 zs0eaD=j=8@Vf<lr@5eis93aa(3^81iOZPjrStK=$(ng50G`EA9+nyng?Ws#pCp@?5 z#iPHp=29N$eGN>=ds4s>DlTnsh=fjP`S;wLDkn`&yz{l8IzWyyLqV=?p{@Gn&#tr( z2inFnaUkkfCpd}%(=r^}w7ZReSAv3uBRSEUo}}+YGmHH-P59}-ACU8Ub+Xe+`ExdZ z1#C}XYN^HL?D%5DsQiDifVDI@7FLIRXoS#K_YsHM6N6&dlC6L;!z`F@jL|kv71KRt zR_`8^29y=5B*(*Td#y`>w}7&Itnp-@A8eQsh@`+Fj)$~f8u+GZB8+uit$E*|5PM{K z`ZU(#Nyg6a>2@=pK^W9rAt5VNt9*R?mv&-~d8}Q(804)F2QnE(!)sC~^*uEvV6bFB z@qygWFcvi$%@2MpwIfi&;NO80?^@Q>bDdmh6~td*WrT+`Q3Q&)$h;kj0aTOcbw*gs zbFOM9l0?-D>zI!ad!wdI@^@g|S6(=|Ws&Nqe+Kp@PR2ru>BYx?vvYEgeyYgaumNb* zl!Z)uwQUOcaK}<Bs=h${wC`yf8ixDRicrZ$6lNw1*H%t=n7zycdzneT5?z$j<&y`) zl8)fcNUC<hawgQ_jy4!Gj;eQh8FCR&2w!h<j8HU4ThZYS+vy9h&==bA=D)-By4dS4 zUai&T{E*m3bRTFg^p{of0E$!I<f-&an2`&+nOb?C@Nq7AlZBjJKZ&0Z+&wx3I;0z{ zeGmB!KY3R<jLYr0NWFDJ7QP8>-4~fXaf&_2E!kFBh3<8#4G`&ODvDRsZj{MaHe9n` zST&<8WsmH)Oxea)T#&rC7!Y0hl@)k@8ToJyUv)p)n|{>vF;_<@&oZSqLl9<lPF@#) z$!Y5fLM!HPVByr0kh@6eTjYs(-1HSlO^ui+nxBk&tgzJdd#ttXA}3}x9#-!m)pfSF zFiM}S1Q#5=B8kc9Y9!s}h~*Wq({khOC`)?ORs89yB~>&(w0bc@9fb-HCzQJ?cx?)G z>t6z6MK(?^7azyL9IAATrF?O}D4vwuN{J6e+10xyQ_s=QY^>x?_dH#LgV2pqx`%x8 zT6QCxl5HE^Lj?1N8l<2*P)r`=z2U7hbLsx<IB9VD#{E-`H$p_17s96=u2-tac)R6b z#9xr|GObV{q&G<J7yQZ5Ma9CPWKkRnNh6+eP%94XS{^ZmdXjp#lkY?~_PmrXju4`3 zSv?1Xp+>ZV?U<dbt$z_ZXuv??TaLc)%J3Q*ynPFUNljReb&{8ExDUrR=$ok2JjR-| z*8AQWqN^A0YwH(jO^@QLu$1{UuZ&95-rCQ@!k%*Sp3b-p1%3HrwqQ8cQeLd6aiZRr zCtl?0iGS#znXHmPr0^g^Hr@{}^?@@gOT~?g%C^M0yh+%h%OLrp8spP0k!Mzv=y|oU zIlG@QEvzzp{E!NjLq8$DZC~<<r7nY0W!wCEm)6#e$~`B{)gm+A(w`OW6~9rEb46;^ zDKZ1a-3=)tt?SBu)tXtcI%fJlw>2`%xP-aL4`FBszWte0G&3<ZBZBzJO!bL=H-By) zhE)mY;*7sD36^lOzC4~WxMQ%b(_;a@Ui`gA`hf0^QHz0XEz4s{>jlYBrBlO3tU{W| zq;+u_1dMuu0_O-)Tk_*K?9_@Kk)J)zP752nZAK$PJh-$swv?%lAD%tBe}2|oXq+*8 zOoWrF5k9@WD3dJgN=k6i4AU!022ozz)gGK&rl7dnZTQd{hRp&!{Y2YIU>;s6sfNuO zejp^-pOs{)iIP0F-=NJM{3sQVZNFE`if?;wjO8ALO{jU&O~^aSGnB9-=w4bJR*^gJ zzY~4f-3bFJigp6Mjap(i9A0YgWYGz}Dyfn{0m1u9@6jOyf^^>u8vwk^NP9916<U0* z&ZDB%HD8O+MO&G>Q>bI2kBqxG>ZP~5r6XT&`O*9Pee{$YNo`2bA==!<X*MhDBHVpf zlUrAlLcSfQ?RmuWwmN?h)j7YrP-}uZJQC)*@@`&MM^`yJ%hPV#t6uc7uH{6P<Bx74 zf4+y;8k4U)tsv(Ib+Z-r#FnG@6RO}R65_V#K0Jke1Ga7JtGGYA%FXK(cn;-lGyxDv z$6`$%(d=YzOc0LvR2QL&8GQji-oqa6dX})meyds9-O2bWJ^{I$$_Ksq$dc&UuJ;+x zcow?v#(Fq8pJ7oPah1)U_If=Ps%vcDi(ul>5w+U0mx<3ANLPz;WdC%Oeu>of#NBY^ zktwQkS(BuoQ><+l3~2e@<NDCNjyPrMn&VG_UYXm`#}BP>t0tCNPA=$!f0_z6I76S3 zb#O)!st}^Y^yEhZr&G+7SXW4pSji?*i?A+`C3zbiJc4il=L!*@k4qo#?ckRjfj@<J z)d6pUX(7kw5o%o?0^?Fi4F%02+SYOFh3*r+f<+g6k&+Ycv9Hnk-Wc=dPX!1)@Kv~) zxGZF)?}xU}o!kByjU}XHNBJ^}x@ONmbgN)tE>mA|eVBDH>%%j;d*@rH$yLVb_SFt) zUw<I-puN2(22w7ouZ;RlcE2>28?_H4VynvU;c_Av*)XdnmkA<DAK8;RZ@C@LI=1Dv zqpKm%U0gKBjwv2F0u^X^B)gI8iFkx=5uwGL-Fu>KKX$Rf-&j{3ICBK}SCO2(PbN5e z(83qLZJyw~YTdF>ELMbmf4^{!%yo1k4_s?N1(e=kb2dz#_!>~7Xup@P!1!`}mHN;2 zW7f%~Evoy{k-HgvGRT@{U|jHk3oFLOL|n=GvRGSttg^)Yi;+p$%k0pTWnh8)_<Rk7 zH+>Hf*E1+YQaasATYCxU%Q(G%Cj>}{e_x4Ni<4|w9RYsEKJ!RY>Oqw9r-C`5a*X%0 zqw1%b%OYT~$hxZs<?)0|u;GTKZnQrlHp&W@CS{PB`+@b~I0ucZC;xPTevJ@J&F4<| z1f4c_O|V+nm6Rriu2D@AnjQ(g$>ucdIT^dLC?wrMFIT=3UQi5O1yH<33j-eK`n9it zU1gLVZ}7-7RWL88Rj}Y3D^+EdP@AFo@dv80xj&_R>U*}9Q5b)q#$p&-O85g*n7yYp z^<Sr}5qC+rZtXsvue<Z#xp?K>cNg|of<&WYyh8kA9AuW!*T+y2y$S2erR71)?(W)C zSx>N<RHQIcJjn!y$0bBBU!Tl@_zEJs6(EO@-oNYGQC2hYDc$VnE{5O7210ik%DDr- zD69OJM28g2Dr-#^6q~Iu;%6QCR+ODwLF{CEfZZZ}H(<+$rXppv5?YzLI7~CBW(D}0 zu*OSUzIH1qKm)DY{okEaD?rd9>LH`f@|NWy7r3J95bLNQ>3jF1ls4_suC!c@Gf6eo zTs?ibY|hsCKUcN7NU(e`_C~kr>gChdj9{1yja$*U=ZekRE$GSZ*9S8Id>bi|mG+5+ zk3jyHwKBZ$t<Xzt8L(K!4+;T2i;1<eXbE*|<I;rn{;Bt8z!_aSh$5MP)|7h~s3Uw7 z#Bh~$K%&_(2`C*q@yzaXjhI*70gMdg-z*hxqL-!xh_Hq_%4y=bj%Rrjvb=*13ps<+ zRTM|7R3e3oK6Qi$pP9pOol80XRvC#47PsfBuvp;q@)ywhwQk&K(%|()>WI2viVvhJ zj{7Ap6L6pAdDP5W`02v^=~D*WU0tfkPa?_(&bU%|IbXne7^^GnbF<Yul;MW#xX7d8 z*o}TIiA6w5s~x^ruPhcrJ2^Lbbjw{&s6|XsVFMt$R;)Ka!2Nl&-f`TKMM>4#4;(oC ztw&(=O>=1Pb&RZr<-kG~fRPd>7`62rF(`ONlO&9BYTm=319}YJBZ1$wT{p1_o!Kex ztWp&G01+eFGq9m6v-|<WPLCGmd(zF7A;1u(zd^sEcME(8XP&iv{)8h|LWm++cZ65s zbL<FKdV~Zg>;^!_3i^ak+io#wHGk<TjJ7J%$eWY=YzZ;D=RmZUk6WNGcY=d?ALa=+ z<*>z6F867|#p~j%W|jA+^a2c3ss@^!9r#gbNxr*3L*%Dp+Mdgb#(XNk8_xj!N)D|3 zf;bm&au^&Gz48SBh=Jsi6Nro$9bAG#v%s|M<N>;+X5d7<yG0|ccN*wZ8AKTvsm?$) zi(T_%U~a*ZV|3fBPuB*b(*BOwsiWa35(JJVCwM1$pZEZWJ_a0~KJ4|0E@z;UJ%F6@ z@f~o*Z{PcI<A}TaLZ|xR$mJj(2~?3pMr~XB3={F`aRUHG-EpkR;f?}cN}z)LwfZ+p z{+izYE!Wjs6dY~3Z0sEhOCWWFnT_)7g8BaIeReo9HBSVu<cLT|kSm1-fGun`-z{pI zB6^E=K9Qy=_-dDCrG0m*x;u=ETvsE&^AzLyz*|GoPo&W*`>dn815oc8G04ai&>m2p zesn2vjAnd$p>1!b7(q(AFEKw=!=aTf+bq6JbFc;y##DK!YvCa?Vq@)vxdDb;6(SPd zYyxCA*FI!Qx{09CTO6?ZpPv>c0Am5@Uce$@9aTAjHR~k#mkF)Hiexcm|Ae+n`B@%I z3bY7*hFsjuFgJ+J3rQ@zywZ@Bm*JelZ9xao&I!ld=eHt03HZHs8N#i|s1m=WP}kN5 z2!WxBKS{0Y`=~bZx{X<6<q&*qPVOTj_t7@V7Kr>bVNFLmKXhJlIW4O5(TUj}5};+m za$6i40dCq&GzHcje%44)((hj&g00D<Wotvyy4U3)N&rIlMjThHB5efMV2<EwMYZ|N z{p2V_|9`I<Ghjo%?;Dx%2SVB5{ZhGmwO!aByE~bk+&vvtKV-)UAL{vbW(EiTkl;}6 zWC<bt_u^*b7W=|rqGPzd)G8lTUz8J1rcx3A1hmC_{dF?l%NX~!eX64FUsH`gR^r5~ z8(hULm@i_E*U}jN@lcKsLG-q~XZNNFGQNKSAZAkgPh4&crtVlNn|7t|dNLui5t9oa zGZwJzHb7u_51<pJj&G{*(ZB;F#aaXTV9UD(RHVXHa?^^>IM4W2mSLgK_S68hWv_HO z7%d4gS3o5lg|TG*r!*=S!v7$f2S0j0vGJ;~b=4v|y#APw(xS$fKzS*Jor&1FYT*4R z>p_W4_FruEzepyK=l{P^^@w530MscJ6^PZaQ(x(~`u4F?TDwfd)gKF&$ZTi?(qf+c z0W7tSxEpq1+aKUx*BWa)<vD#md;9XMhW>n}tCUWDbC!Q)ew~0h<Za)ftM73i0YC!` z#T+Udff&$H3!EM$?48S>p9))k1F$BrL}y>+zv63vR8=xrfCbqB$0^*;4<8skF?`sM z^sX%3{~=F)!xDt7W&oMY6IlNT!Zede;J3c(0p$eTVD+}>ntd+JqCbGg$qEu0F$GRn zzS@|*Nih0fEI`9h22^>7ozMVRsI87%=9BY*RwwqM8E(LKkN-o%{0d90*@znqu@tf6 zG#UY&1Sog(6$%QDX275meocYT<y~M3IKrHy2u;)YI=<u{w0i%(eFU7k)L`BHKku*6 zRJorZc%o5t#@JAjZ+sn|GQmn55X3+u%xCiXG8jk0e8<lbKqLS=fgjcjVOB>=L7(!o z{-2m7^LLfhRV9b<lD_~?HnmQzX!+W}2LT7>1t@s{%8APY&$!gY#Q%$cJ_T)9g`?$5 zP}D*Q6ykvi8M=tES~NL?j+TQtETCjZK#APozUy~|a4@Ca3iyl&BlsG^9R`Tm5TZQ* zNHkP`x~H`dRo8Qf6o%D-V4$#0;W`xeD_P{!1nwLNdRjqFuv;Q%r)KdCh>nJ%xWv=| z;(EfQJ$oG<%?}<;IGjP)8^x-@*N9X*wdbCsr_k&P;4=Q>;QzMz^)6r!TFvk-e`+9m zTn3_nRNlHg1Zjq8tyvS$f>nG4eB;#?fu5tQudBHT24wBc-6?bbavUK-iGo$4J;m}E z5LX`oIF4b^G;IW`1|Sx+5ADE|2BO<*1YKZ~j<Ekh<8$jw2B4i{sQ@HL0RVWT&YwcR zgknGd?G1DXWXxF%IRV;FVEmw301PNHT7hsJWLyR(S*+;Eg0#%tA76g}uQqUNBBFV6 z(}l(qYrG$;Ulm@GlkD9&{J5M$@I1dfRXu)B+DUjiyzPF;$?7}3f49tkRN?Yr--kH- z>wv_%;DneQd`AX$qv}La3EL+7?mn~Df*kobs`QHQXokZ+Wt0gPP!T?%`_#Z6a;fNC z(vkcEtAJQtBVh@xuD0PPs3`pCDJhXe!U2Z6BcXlPPAse84g}YRa`_p9wqg1?Br(Jr zQPit-@z1|-?SpTD%&~QwB0U#vlA|2j(C!fjZtNT-eSV{sf#+$a<MtnrWZBUn;0yE4 zRj%k<#G9RQ#YG<iJE!29rBrrEXV_nzW(g->Xp32JD7rG<!csUO1$}KakIPsG5Ex;l z{DuSeKoaJCJ#<CLDYDwQnzdrT#s@m+5B$BLR#?_w)BX#833SP&{dAZ9Wg;TCk?%r# zP=gP>kMr?;5N1>=YAg?BeB|E*5FfY{4Z!~Y1OFJ>gsB0Vtk;e~I?x@CSvxyBpBRAO zEmf95aWcy1jmjXZ^#2@negwIzdD5$MOF-8Kh}VZ5Nb|U!iy-Xrd44c?a9SI_@e)+! zV9A|I6Mvra0j<r7|E7mI3_vyS-IregUK&hs|Es0M2bBW?hZf)Trl2gAz5D)+=$X_o z^(GSLar`U(G)?aJV9V=4Mjt)x{KLGM?07XDEy7mV6#$G5>+q0VkrGj1HBu76ej0TY z{Ah8efqV%6Eyx5YgI{$o^&5{8wSBKuU*5<J*U_0rxz~D@8M@f+=CSKOmc-X?uD5CL zE7@__jd`2Y)|2TU3yKyauBSSD@k<AM{rM2wbJ?pyk(Fg%fQF%^Mtu@J7hSdT0d!>x zJaU1sI4fR$@hU<K9e*zJdB=JC|1L^F8GK8Dyi~mBss!44yqsmbwQc)u2g}`&$4yu^ zufh54kgv6D2nImp75OqLd$YNxByw;v|H7KMkzQP1ZKS+B-`hZdgmU`oJTdcVqS@Z6 za2B|OYnLOE9T$M})#2!JbLnp*^-Bb90(zE~lU{Sbby+JnStIj3m9bvM)qIgX;3;w2 zZJr*eajMvV846tU^#o@!Ly}HUyQtp*dUf=O%Kx!NffrQ5M?AZ>F@jl$@e*@7^oIIS zcN2=DZ2Po(nb%0dE-U7N+>5aR@vyiHXEewG?sdLB7}{?ciU`&Ngg5?tS-|HERs*_N z)vTh1F?bo%DLy={XcMEF&J@pdgx`<exhIN#nS>mhFszh_`Ff}d8bkFpT)GF<2Ta9; z`_hKT!G<a{Fr1F0)GX>Yr#&^cWjglG&Z50|Z5a+0m^y%@bYbbuy}Q@wFLizH!6Fw6 zMFY(n02V`v9%*ndk;KQTg~Nx;$%531k|Ql34pe}Mj3q{4aB%!m+n?Z{{hP{$s9wP| zehMR2w)oz}hnnnd-*fJ>`u+mqgC9-N7+l{h^-3bP5(aKh(|F5=)$~^@o6W4bV+M3y z_&6%9<KM`Ec4}fr)el_MDL=B^c@Nd<>dj}D4r+k#&`q=@^&u65d>}eoFknB`L?xSW zkvxHAifZv;<YnS0)(C?_m?b>=hb!FuIW713+5(PG&OAH1%r7$iVa>wA1w{DY?4Zr# z9(ilgtC7iv&OAFmThw(1$#SJ?&X4?enWR!|u<>Yt^~T0~k_$XO)*+M=Y6=wl_RTCM zL+Y<o;Haea*AO+ix|JisX<LGID}sH4=j-4(L2$nW-|FzZ-&|~-+T$wn8UpzZdaPw1 z>W>Y<@9%G3lfHK>oAp4ND3-;+0EMZRHDI2%>`563bv<y})73hGFS12(YLn>44)aN7 zrH7@86z60N$&y`P6d@_Fh>0cc(7w8RWxu^>LQs#Rr08D1hD0`Bs^|$Svl&bO=Lf>% zJvZDAdLGnB_vFC{y=AnrV`{=p9C>E7__>qc)L)g%dh;>F@4!q;0zH-$Erh}dJW0DE z?Pz;(tcEiX?&eYTMRm$tCarCqSZn2|K68rpK;v#A_q1m`&tY!6DE-t$?qk5LWsbat z+_MW27Xf$9!zK1BIh~B&XoHj^$Dn#ERu(-28i_J9jLnZ`{SD;3-R9EM3T=PJv{s}j z4Ty>pmby<ryba+0KpeD4&kDwlrna^S2CzE(5!d>6i<1jqDFfA_8GE90(9QNuiG=_C z2)k{GC?Y?XfM|m}P}#!VhH`PWBno${K5$&+G;f1oQm3T<*S2;TUiCR@U&P5kE8+e# zDjR)+0_<nhKPvLm-w+roEfUC&-3PeWc@J8+eA#tpQy$cntC=HHBo{1UzFc|Nd#t2a z3@u`NE00wFw?NcFNngvEbkKbCC*h1?P}o4>Bj99al+eP~y~K|5)9UKCPbHLh9HCNT zUR5CnYOzGI1~w_tx7{XE@3*JdI0T6g$I!<~I3Dp_%!h!j4bq)*j7xuiK=rIp<Tj3a z@W?ecr-RyXvQ1v*Zb2t37UQOK+~-kuof2uVLjUe-uWCvJ`Ftdulm>aDtwHel&)&o_ zYBq5@{Z2JB*FezTyBZpDDqn%}%j0U#C?Z;R>-%s!pXNtNEb!nwCS6~I$>dA4jAsEG z?coQ}@3ndzwZ%HRs5=uc%UH`f1!#D<c-y0=O_i5tQ=&GhdCo@H=W~@t44Z7o9(yw_ zzjPeEbQ9DNH=^wgmqS%ZJ^{syU=mSYzIzN8A|w{a{VCYt?)ply;#qO<_>Iq6Kl!1* z+_CjO{R`$Q^6{f`I30g{dij?9jjXVX?hg8}A@jjRz9N+WjX>9PHoF((X~;Tb9r!oI zsMbtyvqZ;Mk=?TeLU6FyH>k=SzdcO(>q$lGy*5#5qQs1|a{8H~$Xfc$j%ir2w%7d1 znv&$(y~P|b<u;^DWFEBZw8T?OV;GG|;7Z_d7|v#nxB1v?hx_qYRP%+5Hvr6lElZw| zgBFxlBaVh$?V@QGHzU&H2}_PeSz^#H(RGX<$_lFs2_A1DuLA*_;FH&OGS8MG8!jx} zW-covpA+#i5H38)!lA5cvD2*|bC1t`p7n%KiA;({MLpqnMcAj{wUp(*<Bpy6mKdG6 zF7s%&Ms!X7>F><aZo-ofS8bU5>K;gNV(3P#KTHMg4x7ktILpf-zRiICq({I>w0qF7 zJs3uPOHdi!FtvPFt<Q+Z`z7kW=h8o?$+ion+cxMBRv4XxPpHPz_V2PgGV9;nyHj*a zhC<)g5fAQ_o=l8XZ*Xy;F}xE-NKoev(|^#3;RNolBSmTvb0@mCd+kbrm3_A~v(k5< z)FBAfuR$5<Ux2ir;+F$ojNJXlc3vg~P%RkQ1GqOWLq;!mynCD)9I>vDXA6JQFM0|I zE8ZfOY0j(T0o!vvAXk`)PlNi6&3}!g1$ET6QQ!t_xm0YJ`F(*~Jm~Ap5Ye_;l~jw< zc-0)D;`;RFUcy&ez9XndaBuOCWd<8TolQi=4FRL2`&YiU0%`rl1NWkx8zA7aurKKU zc<zqdV~a@bsP=WijLOx*Z(I%SY|MDCM>Ca>svzZINs6=1XdTz(FKgRkV(~arg}H=~ zK2T&<`j;w4#B1ay>)1~sMQDb<xR`WZsg}y?3v2PT9n9goTrPiz=I!Y{jPYK%CH+Qs zIj+TJB!4368ttp}kbHs9KKCFF=bEpuetyO11_aH-p#2(;ucn#`pZvJmDftvY;`Nu1 zJa;p($=wSJzSbWoGF^%F^iS_dV1EUz$m83uUr_~L7Isa?^i-n@P;|_aq`Xv|b3RHu zL^tSfmqoQRh&F<ND$^JL96Lg=&$(mPFUy5W$j0Rhk2!wlDd9NynvZ@&$SWLSHwA1L z%5N_y)Z?GLOV9i7R$?uJtgV$xFI=Yk`7u4=c6$q|m1r8UE$9OXse<e;1^8FlLkR*3 zHgsw4T~;R<ww$lPywNGbZ*Tx|PMi9%Q8cekBUW|JAjhjn46NN|Dt#oav{~qu>;WlZ zNV)aN9E8$9)r%uvFJnK5DtZg@pX+(h<&5VE_J-lihOfo<#x+*HkpSiXaRpUy<v!@U z5euP-O+clXoor2@w^~OOqpXaxmOWgW0ublEcttiH$fzG2K%wzd`HooqPa%1Zr~xmI zF2X9;>?~)pl>%rKZ_1@;3=)VJeD$_6f}FHr<M%D(x{o+7Kkt|G3A|hgC5T-q$o34M zLTQ1xEd31BEm-K75XJF%k;}MsZ8hKG2ShI$8k4*OMG{+xE~$x7XNPL6zdMifr?BJq zsa}-FEAE&4*pJGHV+jO|;?Af$ma;#<Fy}LfVsx7UD8<=Z4p@~mJEa)-XG4FY@B2!X zgTyL>AJ;9AU~Jn_6QIJ-!pi)gj(>PpR)z4sCqnlR<zo)AS>xW$h#}#*-628cM36=& z9IN34RU-L_Ntr5=OAE1H1ro<D_Tx5}Z7(q|0B~{ruMfma75P1!l>ILjFuHCkGyWCY ze<<d2ghfQOkXQo~YmSZw21+`0VuU4h2o)^;m6<r{&Oabg+x-z`3r+%>W%5<s*fSe5 za;&3XVEj1Wo^ZvzjjwCXR`f~brNOf7noeQv(P}NLOVL-^cM%luTZ@&?qGj4kC?JTA zEJ;p87oJz0abyesBiB`FcO>%(Xb}ruG?Xkc|7vX^O&$VlFmpf?MrlE`sjhyF32eLA zw?ur`HK;$tcZ`C5C@hGFoUg*q#5L-%HFTy>Z>Y6BXrzsJK2skSv^}TT*aT0H%i?eB zmNwj?(Wn)OGFJKe5YP;uN2!Mcy{S*DyApytK!geL&GW!eDu9rAU<yGYFd8ZfTjo!- zl@U4gy6V3ne!k?X$A@P_?iX}l|3_n7TU~jY82#T@fA}ABQI;?Nik>T<BflQJFF5Kc z{F^EY|M~y+YvjsK`r#p}#Kr@uJURP{2zxFYsDnS@Bl#BB-l%yG=$Kc`03hDL-lE`{ z4~FvpR;#DSBMi8jiskR0LF04tNh!b>0uGQFKK5#B3)I-)z^25uzkR6077jme(3h#c zL^hc449+yc$-*<qcGi%l!Pa!%N1=o+onzuX07`Yn7&O+9U1e3RcV%-3C{S7QKjD=c z%$in#vA1&wWW+XDpTHN(1O^=(vr9!Xpe6n{GdLf#lW>8bLFlWAQTVwJj0pT1p&SCb zMcn-raBkqtq|zjTXh^V?0UI~(l2FJ4Tz!OOh5SV<ptKlP7vd8(!4Ck*9uHthXj%K0 zmKw%PF?Ua{`xLkfG@&Qf;H{Ru0!Ttrv_@E_ou}r$6=Q~m%+iq=vkFVRU%V<iP{aSR z>VokvJWWacdO#teqejYLWNrbx$;c=emLwbk`4HfXFu*sEcuL65!Z!_r%dLnJa1CJU zNk9%|&PQn4ho74m8NgMd6hmZ=$*g{6b2|XE$uq$!gv)R}(aVJ*LAR|G1EAB?QRcuu za7D94c%C9M;>{#)soMz@R{?&ZVToAUj6vCC()(%moc)f+q1?`HU;G81I+B1vH!SMf z6cCr35eF|oJ^sm$%mPTO20X7p&8l*W`mq4O8ZZuh!+>uLO{hA>CIlA73w}Qaajx~g zPLV_t#B~DaDBw-#3Ca-c0O=xZr;z+)m=<2;wWzx(I`bXQvZA1uV5!}fA^8SUFhOMO zo(ce59z-CmN6$yAjYW%3&H-6dfDjA{?f@f{()JZ3i+&9I<Ka}Y$O6p3_;l#r^DnsD ztFG`9PQcg!h*AaF8mt!dN{cf~e$!u|kQcY<!C4;$A^DJct#PZTr4SIVbbxf<RLJw% z35laa(4)&Xg6~NIhT_SZn-<!dgSTs>RrLQ0E+vS-+WScuO!ndAvbyu-(clsy`D9vv z+5tAffGK!Xkogfm+e{%i_5(7eUBSXOTV+5aS%kxztJ#U8PjFMd1Kv~+YIepXxMKzh zi*UqEF`l|#UW^xmi^LX4eq2LfkN6#)+rp-}$A@T($`j5N7>m*L43-30yz=M5Rl~kc z-b}PaWdo}l=qOhaW-YiadinDXO*}gaNdytqYj~~5ERaI8(7lyCngb1TGu+$|lN}Tw z(;3*>s_^UUyKf+!-JU4Nei-Wt^;th#qxkLLSGz8f$PO#ZA^fweHef@S2FK_zP&m7^ zE*54&GT3_}_ce}dx>gm}4-UYw0GSp;k>T<l4zGMM(HmlF;KL%IZOt1Xr~r3`c3ihV zv*$3=qkUwyp?kf_R#lpvadDSD5CV?m3vuQ!-Po3QMdq=|WcDGy7F-!)!oJVhrRB@- z^X^VKY31<d!;Bh$y?IR6afYoB3g+nf{Lh2YdJy|zH#Ys+g|$`+N?)i3WFgIaqhph8 zP25%HfENz)XDR(fI<`-}KFs3&C0aAUsCU4#zH*rFR8k&n;UKQN&(=Ex7qkGK&{f}W zkoWgq>lK$jkbQNC!C1sL9%ygxi;i@*B{^j_bE-@3B+A?T9DwOr^eGbTT&kJcDaX={ z{=Ieka{tX*6pP~V1;%kqT0?|idn|su)xCMJwqtkp^Ku$KX80{{*xGBk`<wTnIxIp* z^x~?^%_sPn1AlM)0E|-O$Wr{ofXRkfV1B;9M3USd^-%5Xv@>Y$HV>+;*Rr2ja0t;- zBwu=$;^sNF9Lzihbhs#rt*J*zJF!?SI5)a5$qm<HSBK&Fr=1r7@E3ZPDR&A)rOQAu zMpw_^d6ks9V#xuMNCEdhB*9{$iqwg5K%@KVdT0=tvv8ADBmx*0Nge{@M8Rk^-R1(i zy3_&XXqK00fLmnOp@xRYPaUJhnBVocT1mw(Ri{f)_=<mI4)pVg_}P1?28vrXMi5aD z+;dA#yZZ~y#5Es;lXseCUqQ|5ji{L&Bh~<Ws^TcyJ&sq`z>;6U6R(Ik<szY0K3#TR zO)4zGo5T5*!35VCjME5h?8l|2+WS+lysf}c<AJQdt$Jr%W6I~fPZzWE#=*5iavpjH z5i&gR%VJcD=Pq+c>{?7Y@kvsj^*b*vy*oJluoSB!z#m{!X^?@SYb^5qSVGlmh~45l zNa<3Sgag*h@AyA9f1yFOXsrQgAt!@P%1T?ztdlsu##hcm+D1_IKBvfa+Oth=Jl<AE z`lcDBC!7>JdbtEXRwhm;Zg8`!Dn)?si-mHiilwN8y`?V#&zQa^pczB=F)NOsGF&?a zr=0sIpJ}!=)oq_D(%zDjoj7E3bo!vk=_?tT_*3+0+AR_=s62w>ACf$8(J5A`p0d-8 z8?MDU<;&hJqe6Kt;*S0VqXVXWow}%$6A<nM?tLu2#2iK53&GUo0*?)ZoQ!@H+3U!c zW5B4|y54$9<0)6Rn!UTw;<0pOtp{*iVM26DahH^6{ACP7PqbqLvA{`-XC~0Gr4@Zo ze~=S)eTiQfDA{fQ2J8dpB4u_n>^~`Q;vu%Vt(%zHHum9=V7>gc;sl`;>b0LMYHL~L z@%z}`zjbxqapn2!nYnRXiv6R+8`)sc7aZ4rw}rXc$ur_S!m<BP_emp`+j%{HrseYR zBAmi7MeUd7IHUY+sGJyAnkXGl3Ns}<25t_Y0WK0uBDB07Ne2Gu%VjrBg|74oOs!bw zDTE#<uHP2EH4OLVp3awC40(4LEIGzW`iQ9zFkjJs%am^5z^azav~L7@UJ>je3%RQs zJ=Fu{9GK!gU(m$<3F{Jsn`(F_Qbg3e8b1i3uxgG8++=fPyJ>4%ZYBp+y9#l}eJE8# z4$=iY+`8)QZ?kVDx+OjN;uy$@$5^Zb<B<MK7lO!a)+P36olMbxA7!oSQ*J-XLJ_eV z4KrdFSw0h&%))z~kfeipXQ6aHAf$1HWOb@ON58#&3Pq}#>Z^cCJ4?t+5XSV-UGW)c zqCL<wVX1BGzOx?nyGIKxu<*<!3MFJ^LrpZIMRX;(doWm0d5WH`iaNSOrx_|Gb#-++ zH8q~%2px_7L|R{-qdFH}HcEWn=S;1%%gi5^(t?+YJ$o;9W40=MEi<iCFrX2P?buX` zF8y*?a`iwa!R*nGFKid1<i;yv>2PbSC!9DLR%~Yq>f%pdJ=%PH(AzQ+yUd`WkrktX zRmmxfBN_XBB<s00<<083+F5~=JfIgDb}+NkX{B0J<G%DV(k-vmo62fpn4X-#&@o`% zSddUpDTiNmah7-TX2ff4;M4lEOUU29r{Zk;y0T&CN&6J~G)a>+njpe24~OiL*}$vJ zP46Vsk+4S3g)z*UKmB_R#!o2f8F;o#tmjbp!ivm2SU9Qi&z3cBonH}S>orFQg|5WV z>`(eA_%I&G6O>5oMKVS;#I{H2r~QdhA5?@+<3MOfHo9avKOg&)n+LUaAp_**)$@8@ z6qGC7HLS+A9BaGXvmf-|t=eBV-&|PV5sKCe=YT{w)x7jJuDWW6360uIa}oa7lT@1n za86KFFS_5row@X$)pzwyw6w^|;@}PS;pCU#MMOHfVbd~u$?Ji{<uUO$>~${RNv2=m zMe<2xKa(RBk>k0>zvJ+xqG|)9*!t$^_@K{6!Lj;yUGD=A;etfeUu6cA?2Dv`UR}z( zwBW9daBIVTzs{1KT`jxK<y=i~tVDE^rQV2V%!MZD&9#BN*)a3sr3tg|P=m5}IY;@7 zC^WuR#=5&e(8GJ|gF%DD22!?QDDoi|SF^ieU@kaDZnHaxSrb6O{3`v4M8x&C)%d>y z-on&_;A;PB*}RUn`vlPur4#PXfad=^{%cWl#rWmB+jH5AiElHHTxZ&-=G4O*2l7N( zH`#gxwb^Q=qw9;4B&rR*I^0Ub%FCBWhhE-%+{A1!@|7V;BD$GwkiccLb#t>JjUeLf zX5jBtk=G}|V*QB;DXXOpU#cylH6#qFd%4AQjoptr74@s9J=KcxeRrZX6v(YtFb&xc ztK)HfMab&qIS6@CpBtyWDbzo;X+bsII8G@drmwT2$wd1Pw8I@8edsY|&G4vKnpy7p z>pKC9iY(l1U+f*QE{37qyzj90`>_yxUA$o1Ir)K*G{5)^C^9}(tuY2$IKa7h6bY)L z_2j?DO`jd;TE39BPURB{GHzPJ?3KYnBi91>MxN_W&p^@94{>m=Gn_;Uwk<-oxC~~G znt-<x!w9;+8gP1;B3gKXcQekJ>{SKehR6ljI%g!)wsM+GKXyeqNVP@f>&-tp$<P0O zkj<bi%u|0;7c6$qJ7D`>$ynG}S?XW@gPXSr4c)QnDxNDnyPJs$Rc9BZmP6fz$@4nN z>Zl%_1;uz44hf+#IO@)9Q-(ozwL`y6-9(?VI?E@kp2894K&t3oF}tVif49BVOjA6j z|1>DbZ3}&{3ipF!qcDm2>#N{%$oehx?+@}YG~WN=>^q~H>Y{B?te_&j!>5Q!2kG5H zQBe@-y@cM85=sa*qy&gam!=@nd#^!yM|vj$(rZE|A$dFBz4wj##{2P#V>m>GB<GyH z*IsL`Ip@kT`ylNrad&xtGCSHfeV|pTqxEOhDgEuJRzv<fnHCR4@|lcn*)1&mSKCxf z+4Mo+e>66g)L{;UB>7PuuQH$0mobkP2jINpS`1``^ozfpUEwUD?nk?|Tn9ErXW(%E z-FxhIKN~bQoq)Wgkd@k=WLz7<xA0yYSYr3O%UpeMuPR!T1b@y+r{DZ;HmCNqwWcpN zVE`}@o1YbXZRnn-ew(yL@n2YgjdYVlN|v=-=aph9Q4y9=-*_NA`g3Kf>gU7-w*?$_ z1w5(u7d|%I1ptle1R>|n4LhDjlHb&v@a@U4EN4t*6oWAq;30h}vhg24$%x}V6n&En z4KL$MKfS^`RTmQ_qn!nOdO#*y#)n|}o_(P;UwGH)s1<VfV8U>4bA^gl2I;{n!QMrG zsp@>3lITR84CoxO5Lhc8o1<2)b^-8C-7nv^j#i=KJbUjQ_1@*zD@mEv)LUw<Ksv;@ z@eeqjOW1zy@rSNF6Z~b_$-5UK^r89h!;DuvIB)NM`0S9!h|hwajbcLZmR^X#yS@fp z{8f)H&vJRnK{vhs0qM<J+NIH-$oa~Y0yI(i*42lKtb!wEoby?52>JAbfz%51w3n>E z8y<)J2>#V}Q`X}!a03~Y|4zK;ie&Wz;Ay}HTu37SfI@dSsc-lb9<+l`LA_=84oX*G zTr;F}1EeXx6ar5Fkk5+%3z-(+0LHg)E-)Qv<dzeky*G#TJR6Syj^%e_B(`~;lUHF$ zUQtHswO{7D|B!!wXxZ$u7(#v3&IdQyW`17+L$SBW;A8kvtdBJu{|{RU=%YOTMrRJl zdKYL+Ts5(3P3v!chn&FZqnW6O-9WJ{FYsYJs1Fn?4sZhp(5{;JMIZ4?lTYhsFEGz4 zc*qKvX@!6-fQcXruBM)1lD#|~vDf+y$go0X=W0A`jjbHsCCoo&)6MM_x!Sw@P;uH% zVgY~@pJ;@`Zd9=jUxa><ieOuays&Yf)jjpMNt6`*uLf!^mCt~v=ve2uRti9e$12Bt zOp}|ZB#W#ZpOEW${gEq^+q&r%2_%;c8+VGqB|lmtJCZ{9Hh^Rj=_mNqa^43PhEI$G zm-%4;`R=y^NQi`Hlho3Ky-AYDA?#%@ARQ4?1vQ=gv^>zBk$5Yg_0NrlVasVK8V2`+ z0RWNV0BkAM`g?_!8&rWE(v5;AqU;K=iLyJX_w2Pc+t)eB-_1ileW3T@g@ew7&G(Oc zHgy$C!vbe2*QEg$Z=wd-PT}Np$X{kw0HOvS>_EU5s}tk=>Al2o*FyclGw~prq@_1w zjM?L0DmkbC&EnD*l3h)X&)%6=G}lkb9J_|a%7HUF*(cWw*E^XYW^0)ta7*cdhlIrG zix=AY;~vL{%o~<q_Cor6k!;v%PFCvUK9!42I&Js31P4)pM9}Bt`r!VxZ_fmX`hb4! z7W`_LTk)>I3oEh%1i~QaHTPqL6vcr25!*cjt$XL(g=rQm_7uB}p+#C*k-iN5uvQ`g zI0xt_K)IjzEaIurZVk`JX}?g5@_<|B)-?GOD2lREfOKwQf&`kYqUXjou8wwG0fMw< z=_k))`3-2IZmOThOD|B3q`abm{$jb#BGx2-P~Hpt$c3K*P)7R6Jg{rG;20=-l=Yp$ zE#%qT=;z6I_9=Y|-p(Q3n5S36N#3BWL1I*1vX6wdY|cLd7<jue?9OFFW(yLI@?2T! z%60QO-c4I00K@b9RAoMo1yl#x(5omh*SVQ6TfXDjsF~F??T9OG$tF>3tA`=_wPvKw zi+|P{o-X0H$m@@poVbgqR4Lh1+dBV7d;UgqtG#J;s}QSF*xdPuNUus+%5w>b_VvMx z%gw2dBJ9|Ijvvb~UH>@J(HSB?{4?}|g-Y4$e)n^olV!8d-VWZp^_1EYx+*xpiM<*O zR8*zvssn$=R$(LjTC~d#0?Yx(4P4-P`(7TI&vRAZNo}hmQ2|u}Is@nrvMU|HyT6&@ zq-?Gu#JqOV`=`kZgpapc`b=uZrE_xTO=ROPzNiPdHbdswgmL@}c8gI^-*Z1K3zF`- zGfMY70_dycyTf%vdH~!`L3jV=3T&f!hw4JZ70TlMMdp#0r1JQM@%lJha>Os5cvaq3 z-`jU3WbR6Ii(e~vI(44it3=o9UyH}3a^P-kd4c=IaTIr!aNyOo_iqayT780-yc&AX z`$S_3r5lj?h^Fi<%|e%{;#8$GBHO!h`S~51u>k#Ui`ZNJ&~SuRn|HhM{N1b;_E#vs zdwDlkl2)@t2ki+*-sCH_H7AD)@H<Ky&VY<6^N#`=v<iT%f*N_-=c)b!?mYBUa}b6= zd={AxIG+W8Lo1!;uzP@Y0)Vc-AMohUAa>rY=ROuXNE*5_cai;gl0n{2p!MRP8N?X7 zVyKn+I<q+dQh7qa$Oo<f08gd?pDz+5)5TyN#RS|tl=%J^T{H1u+|0Et8jugac9bc9 zDF!q=00l0L+Q0q5mMmBidiIsmO#0s2fq*R4z@Ta};r-2ci^(TgBB~)fwwUB!MnE>; z$l}xGrpe^!)`l)VQhs>O|JPjXgnvYX(x!+v1krG&3E2_w)&yt|B%*;!_on7U?R@RE z^DFor>5QZUu}A0TVMo`;P0PS9(K1p0M%y_aGGW|OM9Bh;*7t=NXiUtQKo=YF8VXrE zxnJw`{Px-M<rsRXRmJIjJ9=|6vgK;IQwE2ZO9ywaYaY+i2?oV7zALl3@vd_GI@w$4 z^ls5>#3N6Mi+@0K^uT}b0Dfl5so*pL<~esnveU`~W!dP@m($#Fo0V?{bo7h@`YtjW z3zLV9=EPfD>(vOc5sgEBokZqN8D8+dB1T45W+v8dSmlsNZ-STRW5Xvaj@ieYNq`!y z{-oWJcwmnHx|0GFl?^H0b6%)3s$4h3qo>BRLp&!@18p6OjDnX<jL3_*G>!*B@2|d@ zg3qdK6~Ifg0Cg$zedwiC+Rox=3}`}=LNC{OvXV<%ZpdnHqX7SG#Wl@Quy!>aG_-sG zUAlj{7EF%G2200R6`WJ)5HJ}7GkpXAG^?^_aL0vn<d?Kpi9mg;L<FFiOkM;<&z|Hd zy(7envR)<#{ccjcuWWE8?FRtUd=LVaA>MnSGxNawkSFD(BzpiR$o6Q$IT(kVqg|^4 zPJWaXj;L0eS%3bD%{M(obVTsQ3pwX;m-&kfb~njq{0B_@w<{O<gis0R6cbHY7xBtu zHit=K_Co-;N$7*zkl+7}Is?|d{9*Mav)<Fz9)kw9DWs9ZKvcPfTC_9<e>*+gN;<Ov zxU<WTA|O}gPTIRI$B1ro8B}JRb?;y&QSY1%NkcI#dt-O7wO}%iDiIuTfJr)I%xXI> zBh1=&_AIQEePa|@f5sU)<SY<MkbgiJ?}sY_W~pxe8}Je@FYP4_rS-r+$hr_$a<Y<z zT{b5`tnyl`{rg%?XuM=Gy^q1T7%bI;Za_$pO7&i??tIWAh|cVx5t&F3$<UBqtM=b+ z<VsT3ENVRb$_JgY*bvt>a<6liP&`T&H4Qu)UBAR3<JpPr;rCs<K0YSg{56<a!pSbS zC=$P2M;oc=hv@Tbv)ZgXaydF`ki5%(>N@1u@Puj()!cM6JAF@O2o;FR-yFjTp^lq9 ze2EL&yw2F*11i}c&>#`KOb5G%Qn)k7V|CQ$osNJ)F#y}uAu4M1V&GlFQKFQ)WzqF9 z1;PYZ*~h;2mv0nqlZoOQz~a$V?OqlE=BR&5djymE(m`+AD@vK6YdP+UCIFa$jhEJ8 zonSlYjHpa>!jq1f8vxu5Mi*3F*_)i936)eV-9{4$V5+=xC3t%Jsgs+-pv?->Gdg0B z&q@k(*>K*^r7)t*nmwUmnQ*7Ao7VsJj1#j>JVoCIdT6R~e}U4ap73>5-)BA&ETY+Z zU&Pm7*SU1-YYgNaoFR^djrg!0LR4Sa-hk{zE}vioyG9^>ahuhtco2eAcr!vBtjyL2 zF92=8InN$;BbSQ4UX(R(;b=HQ%PQ1v(5P+JneAL;(Ek%YtX_D_ro*#c6$qKQYKv+Y zO7%?PJUeDHCS?mEc#02-Ec>mC$SpMP8}I@!a~sT5We<Q!+ynWXp!bVwtTI;1=pnFt z&JGoKF+@3;=#m=UuMtK|uvYZJ57J<%!5=Pz>1{Si&br1gNYq%uZm=TYtv*=i2qf&K zWsuRx2VY|@C9y&)CoJXt_ND%QexiWeETe$P0xt1l=KVpZdQ3a@97S+H$ub5I5MiKk zF|H4Zcq}3uW)pAxrVBvZ)l&|6%F>x{a`pg}j}Rf@l$bdtA28f1!rf*`ry6t#87?87 z$pD%4-ZqoMPl?;l0Xxm|FTIMs)P>qwW?)Z3Fe6~&j}bJ?8L#*R**yI~od)P??*LLo z<ju>cF{l+L06z>A0Oo;ZN~Al9*DrD%%!;tatPlY14Gb;+KIbba-)*KOVvvC_VB(1- zfaX6QD9afU)``|}q4r6@nibTe3&V?<6=Q~cae)>hsX%I65`%@3C~t!+Anof(BaKo5 zuBJAdM)F(b!xU!L-#3{l@j$#3Hh}`e99l`EVR%0wyFz@?7QyVifgdjFa5%D{pMnm^ z;&gJCru^Cdux4xIRUe?n2K{nl-?vO%aYio8YX2;6136T`|8md_fWhwsvQR2EzGq>8 z#9Cex`3oi}P(u*0a%l<2?=5Fn#|oxFlK6G!!9X`v0Mb>o@jbZ7^Vu1ZGMmLMSVGCh ztvFi+=QdULj%kSe$xa~AXw~Cr7V28sb+^sKWa%<}>wfF_NRip(jRRiEa#Fjiu~gqh zgfXfRfi}`-1rnY<*xni_<zCE#2~N>eH_ZY}BO?i*YH<ugMqV!{R^zVhV{!s9+CUsd z9^~~0JO|`0uEUPo5f>{)b&Y_tX#R3$yet50A=?xhklPv8>G*s%m!y{yAb`ffVbrI> z>bwui)@5?KqCy?`Y+K$E$Oky+2|)~o_YWD`)Z<{KoW6gf5)$;4A%}~qf4+UV@fA>Q zBxq44BKk06d~xfYwyG1*W>X%ZRhOF2FY6DJ=Mlk)`d;x|ijeW+fX=vs^Th6j)eC3c z#^^lk<_e{>*~aZRu4R1^KxG<ou@tO+5Jty9#CE>U$)W{sI(L~36lo&kY62A_)T(Sz zl4hweY}Z7iWznO20nCRup)lU@cWCUIuqZ``J_FiuzpA`!r(vZqP=2Dy^z0OjtIjxU zX194Gqyxf$&}4xsJ{*lcO2utA$R<gHo~1!r-S&iehUw8^!0N=JhTL*BZNDtB*#tW6 zF|}XHxy6_ocqkOiS%3Id-k)e+bToH{MtaBmq>?d5uM$^UZiJ^bu9nTo<fR;sLvG0K zzs(K;9-HwEN7H;mPP&Jz2VH}z1mBbj-AUgLXO4jV`SrVtXr!E&XXm|+G`DUYJ+#|I z8nXIyDrrpLqacba@Y;NdSidxGUvcI4|HJ~0L$a@_o|ERoDf>w%EC37LurCL7JNu}` zL!*Vvg>9zg*m$$>NO3(go>Q|om>~Mbm}VvgHmQG}|EijSL3%Y`*v7obnAdEnUpd{c zDSOoNY1*kSz>|1Togvupw|TYttkTF*n@YhAJ!a%WGdixy0pG>;2%5UrY+v3)9c4#x zLEc^;H`?n&vH5Kd28L2i1&pU$3Xl@!1i^a--;q*@7=rHi#=ln388?F-*d#gmV3Y&R zpanYc1et?`j2o!Uq0$D{D#G5+?1_%2mU_zCei;KjLJc?7q!c!49gDi*G8JCaTi*I0 zJHTxxPR4%M<!w|kX^gU|kiSaVv=(;P#wx*%^*W#?vuFS-Yx_Ax?DQev?E|<)=}*m{ z_mt_<aBzYv69J`K-f(@e84mUpWbb}!{|vZWaNugJ3~>iXNMvM)TgeiC)yx|ZmWa>p zrO@rLi#uqGO>#YH1Wa-f*qsI+KM(-hu0Y<}ovE_%a#(O&%&=e|y#L<1eA+VM>&kt@ zw82(j{r!h{h9;gJ6b1H?dsvV5J*}7j`hz-=KsZ9FCXj??Vd&9+;G8>kLJVpz0{Nru z*i`o;2!pFgY2fk|_`>w>N<Lo03ByV}83=5|w6g+jgI@0+&>`j6`eS#F<Yh`qmqJ*# zj_uB=w#W||f({k-3Y`{*{r6%fz_;1C^7tfeK%Zr>OxO`4HuW2H%2(K-Gt`{ab&8S` z<{zH^IGL{o`#qcvaQP&axg}ED^=M!2f$r#Sn>(Mv?|kknPbltW)qEunU=Q0j+9Hdx zTjg5(LkSzaYLkO*$i%QEw(o)iqvF|bM8@!Ocq&s}0vCsYT_|^4h?ne;4}YGVO8awv z@UF^$ghetHXrD?7gaVDF{>Q2-5X{ylI8!iv3|L<$aq0ofYbV1`rKsO7=H;J!ps@Ui zIZTLu$};L~hbd@le*in))t924$W5-$XWc6j*R7xUX?Yv+d_gwsVk3y~V9@S^vGs&6 z3*Ssr*5Q}K6!|zH9lH5m)QPuWwKeBhtkJi&D!E1YcBQGnBCP27eCxSsY#L2EuC<@< z8sAzNtynISjq~8Iov68qqrN@U9=<Xud-nh=6n1$(PyV<Gb;z}oFugrjJt@F(hYTpg zVli_-?jokUV>jKl^Kery>;e;K)yM$VyTaG8tX>Lcz%yUTqT^9)S(?yaAHB`_uuvoq zvOqyM^f)T?Y9lzy9FJ%0x;tEcO^n}k4Hx2ui;~X7RbrOn84sLd;Ry+JI=)>9EHu{J zca0R-9dzdx2Flu!T<g92bmH5(Co6isyi5}BvC%BEq4eG^RjNN*=MxIZIBiKlG>q;< z_yBWWc1qM6R;P)L><lD=*9Ctw#eIs03&rZYwxp+#EX8AKWPw`AAi{l)<PYbZ_5{p) zwkNM74`x|>_ym>!-V)(0bNso5k_%~8-09yE9C#WCJn2CO3jKAm(rz}&a+hl$+TbM4 zf3dGB4c5JOGJI~y`HTF~R29+atgvp`Ht@BE^g+1KjAxmEx)jE>ZI-$jDZd<Yd{yS4 zTolm9gTTcU?gSiZpA1Gp%CHaX1{!fY<-?pAR;Rm9sK$hMYHZVdYi$Q~zMkP_9rP7) z8O?kMf3?(;<gBqLD=F+~<sYZxX8s2NyzcG}9G>%8tPrT2IW6TYWR~;!ttfbkT0Q9< z)-d(?<x2@&bz3%A5w|ODLaU!{{Q1SXq~*1;RmI`+`@4}#L!V|xj7|cT;=(FBbc*}@ zp)zACs_SP`n%|Vc4(ez-1v<kLsMIgBSFT?<KDRrt10?D4ryZ!5m~o4xSbvp~fiHUX zQT?F;(A3*xS$u}(gHwonFz_p>Q)2Mu08TYSl=o_be>}Sh?YnzZt)$(Y9yp@^71#w{ zOaxLn6OTS|U+M>nXe`Mv_O6duS^B!pyjHq0>-BxRSM3vHrv6(Yw$!0}@s@vmaSC7G zf*Lx)L4PSUyj$f$L4Lgm<5t^aNbPe?v#>aqUUjk6#SiJ{^p?zZ`k#`fbZBcWZUJ*H zy_neBPxX8tA9w9$Ra9f3>0jwA{vkLiZ74Q-$EakeGyo>1_KAB*NctaIq~^oOx9p1B zC7&U8L@G4B5f1a<CL8GU$F_AseyQY%@d=H!J?J9e1#Zu5v^RaF4D&SP542%Qy6{{N zvDU>*e1m3ts1vQ)-8l{(8LU3cZ$A_nSw(l-(u-o8EPSw?F)Aw~ky*#8SfA7KnF^FY zE<}u;AlROUPguG_E&|nT$%k2P_42o~d_p1-uA<%{t%i)Qp$)7h1L=SrhG|gc?NozB zQH+7o4P=W#ul<yMH`BGl6YpoVr6XMLoezw;z(vCtr_!tb<Ck2Sa<daa2c3i_HKrfO za>k(O5_v6+w277;J-O)L*u;p>46Mp9_tCyTpw5Wr<mK$T*NE{^yHKyszmn{sp5IcU zG7D-$k?WH}Ior^0?<c|_mgyKqBi+W0tlCVy;%?qNrI+I9Yl}j5o~>~lFF!xEj1pMP zGk{^*AVT_gcAE)7&FhAH<Lr*+f6JfxiG0%cD+#`>k{ZYbM1c`uj-IXB$|7=#S2Al~ zDliT+NK3~V!TjVRX7w?$v}lL~!eJtt(b(<R#M2CV{k_eO=5X;W(4~p0;!*?0WMRf8 zr(&^qpl3{7hI(o&QCEps(YvwL4$|>FoL51ndl^$lo#)xdbuyZE1Jz&TsNW$0KQzc{ z_m}lrpZQ@wys2kDRc?^gR@eHpUw&mD|0m>Y1b@+sN{3mQKo*@2Jh5ganOc^UxYLXn zkSD$e97vD8iZKvzi&TgsuR`}LG>alMWKPOeB3M@@#o@mfGBo5)Mq+ih4VX?;KPa#f z){0F7C#)I{BsT+^eo^<D`X4Ou-h%)aHtXoY+;yX5G1tL`7*vXT=l5Wt600hUC&3J; za=>)zfB@|~mpLO;@n|#fUN|SG>!icRmb&a>@<h_^Us|M&G!{RAR$)D}m_3k~IMTSR z1byLgeUD>7NKHGd4r-R$t?68GQ0Z7yW?JvQ@bT(pcG$$W|0cct;oiWf6>`s=ImqHm z2_vu3Q9UE)1GsA=H7c39W-(K=U&eJ$pi&0Ax|pt^v;flvudv-;w^=*#y2o=vcZ_0v z$}6;uVPk(YFfCM3A9tj1|C5>HmRBllK@s5aCvRFAF*S|_75#%91aSfz-Q66cDh{s3 zW7uJ;uz29Jl@av$qjTzdbl(^ZtfHDzYwY&_UVg3Oac`ZzZCoDt$xs*mD8tS{bz0Ie zJBmExcTB9SC}3}eeu9eun-m>F%>7O}v&wr@wwhDjb(HqfUkwJ8@~}$XawFDDYhr23 z`F^01ak41QpkU1T*8M9tISMvK(V|2vN9fk|f!z7{7`oXUe%D3;Fyq6ibqUqk9xB#6 zQ&E`jnlwoHi-V#Jk1<!fFoRD52`jnpLAE30eUro;9Q+*N?M?S{AztQdjR=OC%<>kA z;2!mOZ{1IKPN`EC8%_u0jsRu(Q9q(}6Ok>9(diDPB~e757K@af^zVS(evMNjqdzfL zwc`G7Wu?$#J*IyiJX87!<`q8(tOXgpt$6Mm5nWv=T{%9Di<s|GDy7&TEEpgyObZ_s z=PNR|T?#g0EczI9)PAj<RYQ6yra3z-+RBLsl!mYACU0NuxTD-Dq@bVOP1Q|xg2-o0 zdxOU)re4sQ{S+5VfB&m8zSBV)<PHsMB@!wEVvXC)5rTV4+9urJzty7Ou_y>C@a4hR z=n*EGpbKob*$~ElE{ZqfJln=I{={aLc*Ga`IZb^NM?x(m2>J4^V!9Nc<F;o+`zyG) zM=yMy<6h9S0+;B4wp=D7E!cB{n4xlsKcB+wBxP}@ks#N~<w+s_zZ2Ei0|`E}%9D4u z#P84TW6?uQPc{p~bi}Z3`GpweRt?Ml+^5aN8)5x6eP>4pp;!}u<Qr8wq?}#C5JdWn z!dYbx-!&d>mW(%wQ?ccUb9BTJbAyvycx11v{vki?=^mc)-)Y=S>mbM<XK-r7+-EBs zD#Y8$Nn``p!a&7sT)i#+fp&FK@5fMU*`0J7qx;j5Oc>=O4jncxnu?8l{Ps1?@_f95 zSTt6o!yIsTx@{htUW^b<*02SbO9x&IspBwQ=?oG*X5{csjXaCFvQo$UF@0|~(m!dH zz+4~WpR2C-6T{jd^D4T1@Y5#@(J^MM+;_zfxyl6t^%Q;u6=itD7shrd+7E#!m0vpa z0Hl56w0C2crtun9z$z<EY_1Yt)CEqip?WRP0@RXgtoGYz-6g@a<Llki`xkwUgjq5$ zWvqQi$0AbztEA+v1IG}Flp5*qBKF?<W!q4?9;9<W9PV0j9K$;>&vPwW!=Z2Ggif`T zMPhN?=C7X9$%zq#hxRSn<#e7Cke1GY{CBXCB=yXA%b<vfWmF?v{w6~m04NRzfLti~ z-V(nRnrm|>ESp@Fm@g-=zcIcOrOFYSseNl#=~<RA!EQ{idd#eEt?HlW2$4xpL(KIe z*VBmj6#$pS>nT7=ltgl|JUNs3o1Xb#k#q2OI}XGlPXE3=M~*e2(G(767o$c&gy1ks z(_6jWsK#b!Jbgfb$On<sg_<7ZEurLEhSB;ETTRL1aTGzv_(8$;hf-`clbNy8bBs8> zLT2}M0lw2Qn`dyXKBuv>TBuIdei(o_)HUUhv)m<5ZguyRT)-a4d5h2u9D`c<GnH8a z<|}HuJ4wTf_H&*~G|>x^rw*`3j7@@$A`WF3i^?n+=NZdBrnv2;T91^cX2#D^pwdy` ze#fTd)wl&ux=A-3QbI#QfsMd`&<*CLJ|B><HlBPJ)U4W^^cclwl1k!IHNmj-1%Gmd zIsY_8dK6#L{dSk?>=_ByLAf1+la&Uqjna_n7WF!%!hWJ_<w=~5I)I$xUbeST$tNgA zgi5c6v_vW%c6ML>)B7VNeo`Z7>DZS|+`(!Z8zLL+kZ`nFHLG}-l*W5o#F<)`E57}Q zdZL`P*$;HAS;Dt14cx;#Jc3zGe9ot(uWAXg|8>K~Vd}@G&%5~+#lG$$+%C|n_qSgy z6o=y&WKcKX4%5q0W?)}Q{mpRecHB(urE>38ZaKs4^ms2`=a7?vvr9}`MPGSLO+|6f zS>@#DJ*8mCPtvG9GvBgM8Z*qr&*_hJ?<>)r_rPz$0YVhCpi$B+JV;$o+i8M9=o%*p zG<xfOuS|~BGt8|sb@39#@|6R16Cdv%rRWB%u;wuf0O`8<ieNw{q2es?+VSJ4K7UX~ z45%RDc%91!Rib>jMwYA(#mDry+M~@L^AKl3EKUyI@p9IrAl}%)-7a6<_%B|-Hz$JU zLTjja{4l}<%os2Eun08wT?0I4ZJNr7ryr;ke1KJF>e;h;$tiSOmal4%XyfnZ$01H> z(7&p+%RzPdtGEKNPE$vi%v;`2CsK4!bzno=>ZV=l=y@l6iN~jwZG81ry9aI87|^Fu z>pnqiUCQp_45X3ioc_1N^vc#1?(+#1DaR`4R)TkvO3PW7C^r)bt7<da2V0hretF@X z<)p4@@#xtNeENEvY00sSr3GosI1v=bdtsii9ZhG!RE*qpaA@_JL7fyzy6716V2`K^ z^6=-nM(ewTK>uN|mKXm*x#d2?Q%vlk%}}q?h^REKEZ1iR@&bleZzsG@NB}`kc}ubq z%@rxN0MNglT!YKzg1FHQJa8Cd67}<p{`nGtG!qyD-G6y+^udhBKrJ>*t*BwSTeM%w z3)lqYmYNzWxD6jG`T;w;50}R9HDJ#BEIc^H6jV#{-qX@5{(~1+T&wz)2R+w@tV8iP zLqA2Z0MIe7s6p5J?zm&onGe|>EmDzz8uOF22=O=0cAOU|6#~{W<F|;qsLqnK>zwe# zgK=$W5CUM@jYdZtjD)k9Xmu%xyNe+xHY_M%REBVEj&IvI8klVUG*Qh3?#wQ1n>I+e z%%!&}x;D;7NSY$JCES}o7E~n$$!?7b?-&>qRPgT+YZt>5&pan)p|hC3v_#*<h;hiy z6JR++>)p1**zrTf|4#0&B$rC%wn=_;3ln+kwB(#snSOYQcE$jCz|PjuGOJ0v{)6Wo zLJGv04^%VIr6t8W_4R7(#-mER!3Szaw+AKfk!3lic#VaskS3X>GL}+w$g9M#Kd|Zq z%^@aK+u*f`^N+=t7om3^Oeiy&(8*`W8g>PJIK_T#2VF$Yh~hwe#%8xar9k;B?Iz1& zU=60!umt31z0<ZN!nc?e<-P9qU=?zi$|@h%YxMxZ)lKc}yhaU$$VHVv-U6PvYKz!{ z?wnzS+#$ev7%xTMJqA^KN^DvR(@Ww4xeKL3LX_F9sXpp=*eRP{H8^z!1p&XJ$oZ!8 z)(KCkNCoCH7t0Lr>)0dx20}KQrH*eZ?@GY%Ir=&MdZxV%0aXKW1wlTlCQW@r`WWEs zC&Y4oOG>-NCh|ZfR?nC(Tp-Lmub^@Y_@%Iy-1<5H5n!78zn_#P(we#dsL<!O<m^Zg zfxz9hMN&X3X$k1L>*h6XAGEy@Y`o=0N3}>9RwTZ>0K_a|hGugpurf+6%P8KG`%3Z; zHNTD!Ns=ysS>B>zmEa%C1m<j#9D9`0Do-PIxXt3z1Lyz2XLq()_Ks(E@|Kh%^vd$_ zUztUqBA64ewm{4W>`8<~hhW_%O`bc!M6c$%HR=~YyKBKYm*%&gQ=+VT8o{mmeTjNn zz0n-fOp&HDyVE3;>$0YEvy4rVvV=_nm{H}!82w>L5m>LkT*G3dtfhaxv24M~M&#_n zs6)t!?Go;Jx)PhCjhFbe+05U?ywDgXt}cy>^~Vbcu5Mka=e{<*y(;q2Wr}&0Ke40Y zhvKb8mYa+Sb_>4z;>Ym2d%%*}lJij`S)TFbKTr&x;j~bUSx$DXEC(1E@i#_G-Po}} z{PH!XiK-oPFgS4$bSX-;ksMjcu*YQ%g|V^7^`OLRvLSoh<Y8RX69ppdSVzy;Z$m(` z&Frty&T3glsy|5IPv!Lt4o)45WQa3m1n;TDsCxs7JDYO9T<T_Tj2j04WtV9s;S=kY z!I|b5rp&DubFVdq4b}wk!RdSH*aZZ%@J;8j5v=89m2=Ig1b}wZ62ditugk8*3?t<U zt()<!MKiyGIS7NQ9|Y_6(-*eAx2B1UU-;4^2K`YDx4AjoM@o!b%K{{ZbCZvn^Ge7C zn@@H%g00J3BE-kTLf`-|HSip4i<EENOh`G9oLFs**6?4>xd(ZTI>zr&3fBL?z78ve z6)8HsaZRh^@ZXQR(lotOy$67a({TurMb`VpCMtv(85*AQ0bnME8xqbkUWWC>m*6rm z{oqK%4_~}TX)<|op`Fm-+VDyOBr^1|f!O^FrO#$15-ga(Pl)CoP)gIk6YaiB?FH;F z7$X)trK7ylZ&ma@==sYiC13~G|E;N@_I9qEv>6<VkfW8g%m`p}m;7S!H`5N$0cov# zyx{?Iu(|*2k6w`*JmpXJ(sk++9}kan8F{@xyJy6$ta*Q`)X2F4)B-vDxy~oQ6fqeL zvxD2ntNp`<z;c_yQqi(c^g-Uj7U)~K;?Eg*Pg+9+)7K0v%r=3lils+_aH`@ER?pJ1 zBHjXWD@g_duqi4B)k6nOWN4A_@<JO^4HUEn5SW#tM-kby-$e|!PCjQPzj+=rUI?m@ zke?z`b{ek099pP;_i+%lN`f5FMr62i25zNKvg=Gb>9ToGSOD+$2sftK0Tvbd@7!Z~ z6i0-JC6C{aF1JbQ!?Kb=fyLj>5VWCxF8w~E!0|CJWDTIfCL*dL{XQ(e?sDpQA>3_9 zy)}`j!F{Bc!eJ$7rE!;hvphhQTK$N+5;3SR4f=49?@Q=eiD{?3BNXur^xY#&c!9zV zsgsGVr5lu-<H+%{QCMvvr{cdxYo?X&g<;|}@qGf?#S>2#{X^+_Dp#{NQoX0_sk_3c zLXoXZJ;Dm|%^D+*Av&Q2KS4!fMu(HiHTI(iU8NiUHoeaAun7h9ORuy_vMSP1pNBvn z!cakF-juocT1w?VFm)m}9@XkcPrp3DtSO~{DovdH3(*PhWbdmuW=EKtorI0WvKtld zib+K1GsE383SACummkQ9PXG|w(m&L_y|=xaVdFJ_;=~N-1tLQhM0zkAbdH9)eKMba z!EU3t)EC=d=EB5TIGv}<Yj)ESVD4`q^nC!~gz;$35$V0f&|MU*_b3|MVo51EmGcPy zp51HT9fNvIJWi}VI3%(woniA7O+y#Y-dRiT$?g}U=&0}`foA-k(5+e}g%`SGBL@C` z3W|Kxs(m%P4kZ(2Cr6Y*C;pj)Hb~=Qq5oc_38C5uKTt=7+oQ&y-aujdXH<l`g^5(( z?^q^^VOmsl&^GT%gZY-%SisU!{DSITcsZq(zFa@0;3+!bvZ-%D;P<*amg~|)Mk1o4 za>W$aN?cHA>k;O29W(WABN}qWb`%3NWHE5AA#mpdHge(@OVEO;;(><N>k71S%9PAN zh6>VtxK^jVp7;GPfGFwBw|{R-7iQWT%tp}*s*CO*PQA-hGX!L#kM3Bd(mWGC6v8hY zWaoUzJn|1^<KQ{ku8VFA<=)GW%1}{-<RAYy`toLwx+Z%w=HQ~uyn>4VPRSl<#f?F7 ztn=h9oaT#auu8ufS<*9(?JJ)!lRM6Mm%^|En`S?<>2=|(C(doxZTqwvtZbF<aoQ40 zlJ*T<yIf`qYqpo23afF2vi-6v;R;6z)qrPV`;0eH;?`keyLy;UzEPoiRDN74dqLt2 zR2RSnnPVpa2~C-upI1$jJO;kP2n=XkHoN*=AMXK}ND(ac65?&hvc6xFv4n&6<W@+S z5K7PKdl17Z=pvRGL?InKPwW!6;*8)yeG+Kw=|&-8>z-flEfEVzw9o9akyEVG>C3n$ z-{vK20Mmj>>d)KzTHri%0-Oz@<g)I1A;ro=aO$pto(Z0w<de0hm7mBQ#~~a)3aeS9 z@XDRT?Nl93DbA(11J!d@3S8IA)%|u;vd3Usylq+bvD>zE0U+df>@6lhr7p0Ly`6MD z<T&5ZQ78+ny+c@TyyFn}+qaHC^GQ5XPm!sx*Ycj85Z5&;0G?<%m;R7E$;IrNZX@{p zY|}13c>4Nl@WVVZax&o}$H`Ki3x5DF#M*%V-0_m0>8yPRJMg3e$Aq<B7BS!0lfOY5 zd8J7wvKXdqupt5Z@6(;@z-Q|88<paO`-(j4nJ2P=YR=!k^B!m0Q-+=T*5~qi1Fnnl zte7_20Y#kEynTIbZz*3mClT11H%dADtr9S-T(4RGx-})hhC6>cbF$b~NG%6AnGKs* zKEbgZwYfk{zsa~kk)Fk!BGhT~XN^lcl`DicTSNJiwBW3lX_ccAil$NSfY1Owf^Gcl zVV{l3k}sIGbBfz(Jeb_I5J4jNE01~e3Uy{NE5d=)Z_kk>jC*a&K|o>(MgvUb8_+}Z zeHTKrWT4xyR_b8XX}6>6!444shd|2eJ82zf04589>5Ld&RjC}jspD+jQ762MazK6- zK7XSv6WF^bGAqDVmyNb=ChoSaq;l;3lI1HbcbFdqhA$RT$}-Ns9fud9>Q9F}QtAY2 zFh7j~aD9404ZFSGvYT;8w>oyHBS19ktye$)DyrX~sRXP}z_4mv1C+YEx9w8%xM%<~ zCSLPro}4qcsLeHko%s<*j}_|Wk}sQ_T@xtxryZjOHpcUa>wE)LY`ZQPxn_LNs2>@) z&Vq)1KZD7ax7)QPo4m$ncYi-Y=GQt5EJn(oax$Ks6+fYJse3ieS6F{)MkQ~&v<qpE z6b!Gl;X5*R&dCh))(E?=T2wn_NNTzHIpJ=wcSNu!#oBfr%?Z@8{w}vy6tg=nONs`Q zdF_Fjrkb}AZ|!u&&hKK24A(|Nsn1)0u(hg+85N%Zg>P)^IK-&J1=qIHvZseS#Ud&x zEAp_OOG~<|(tpmNw-xnPIbD4>(NuDT2~;W!9|f8g5$CoW7k}m`&U$Y3jhk(wcPhTF zl*~4>>#o;Ky{D9Lo%zw#ObJaECg83)T>O{L<^>X`0zg5EzNdWM#}X7vd2Gu7kP9P< zidF*pzXm9`X*Qqp6=4zNlCFcLkJEGurs--kwCi5g9S)W>hskfmGCE~xBr!xuVOM^H z(oPB0cdk3;(^8k)mtCY(6%wj8M<l%ERpd)|jj_o1TW3|pkp`2?_K4?BU&(4wFsSdL zX;EZ1^gRYk%hRyF$A4$v$m@V;5-N;6>=Ba31xHkcudzw}X&5*4wHOwtbVj*#3@EUU z72t+Mnm{P5C45R6kwXH%j~-djk6~Ea&Wty>^}+DbMJBShzO&~k`HN={t?$)=QM-&_ z*Dr;XMs1e&xae@`$?c_|$^@L2XU6l?A=P_y3o=Z<#>N7syUUPghAHS=t&IU~EWD1m zp;<3L_y+tBUZyEDG-s>8Fa{Tvvn!T0WCcqnI-}4k$Kk^GElD$>(x+MLKP^t^^+Mmu zxXer}Xez_{wEV!@YxPM#tkcixA5=VT9hNajdE8hqnSq=MG)pr|5_9>g>Yja3o3zcS zHXB@bIyeG+z+j-D^o=4~-v<sqz=of(MbAyT{@#hu1G4f_$3+3&{kFPP-~Yk_%t~>u zF^V!QlJ+##^Ll3RMzwL5wovF)`C1UdMt=WcT0K|uo{f<cqidJzAdS}_Wkw@82NZRd ztf%phPY4W{tZsfn?{~O!G&Qy15_1$<gGlv-p1lFRi?xv)wQID|n3G)#(KMT?DVr>? zMQ=HDy4D{KtvePb{laUIT_Q7A_zftXS{jNg9~Y5fx80(DS}<&<YYPKVzNnFf+85hf z)?b8;d@j0n2F0o7&RCTd@Tm?DW~hJ}-(sk^H}ICMWdTF=WZ}kFmkIEhgl+k_{>%MB z?{)Bp&GOIdJPojCM{}m;?=H=DFM3{2@5N#MPyy|&5~19pMI{4%EVz?uD#$ye`PjAY z6%GVF%hr&AaZ}rt&3M?s5+k4?M?QFCwZ@?)K+7!k!SL6u-(+OHoVsR^f+s|nm997Y z@-3i)1ST={OT!jV(ieBRA`=tK0`vBkLIyy0wkNxqAq!msQ9%l!UXT2~^#Rv#@?19+ ze))!v(0UahbJ>sP_JNwcuUmbUohG#WOe0uk{F@2xM)X~ECQ0x8W_E^?ws-!8rR`vC z_ta&0%3<qVZwIR$eS5b9hT{mLJ`7r>$WWd5xY<AJ>Yc%_l?{AS#`o8uj$uAMaRs8; z^#866SG@bUd?OpC4aKo3`#1U*0=hi~sBMX`#iPac8=MOHKYm!@*uCfMS4?cNCR%qj z;NNyqe8I%<mVW<htfv?#8Xj=OF1d7;(NuR(DT_LCA;uLL78Eb=^5vJW_XrUrFQv*@ zKL>rH{1J}`CYu5;N!U`GEjq9$@LK)cC)V)-BgvnC85J9zbSOiLSt0`kIo|wQ7687A z$+0HPd28MB<395>S?i-k#1<+oP~mj2J`ia18Hc;pm+qJH_4dlOGtF%i{nBJz3xTx1 zLz%$?FIu6J(yYl)(VIO8nJRaQJx8|d&m`^ODc1fR5fg)m#5et^rNn=QBzQn)eWwq` zO_|vR49lHB?BR92VJvL%c+$QFXx<|3_;y;TZdT$<nLk@|58rK7(FB~>|4d`>#{2nW zn&(KX6x511en6E2EIpEi0((~_z<a><a%eP1oKnVgJy*+mDTI@R<Bvc;CRL(fQ=*1l z##0X82^lkiez^8DfkGHia?xxBWGi5L0ReFP<bPKUe7==7BCKDvE$=<$TlG?67B4xs zf5jnDjIZhZzu#_rrRgGAJn*I1_)CHN^I2&(SY`e$)*h^Tt(7W`7pn1B?3aQ;#5O&; zQy*VlJXfttI&tBu9-?IAsP`V=YqD=+G^9VCz9+jzM)r{A0-zz2efbAuAY`8}oMR#* zdwb_f6Zoe)kHB6e`{yd@ZONY9{6GB22(TV~`$pCUHJTGBD?;wT177LvNmDy(fj>61 zLuYleRykwZ<;?bQ8t8KOzX#5yox4hU&8Jf+PT%_k+lS{#p96S&EV$HSF0oHn8Cx$| zBk?`oLC|EDbTJP07C4=QYFH!$8XpJB>lyw$HnB~`RNd!4s=@VNOd4Soe`B?u2o${_ zb+eT-$(>%vB5bt|4Gpa_BUjS=$5`?TCK|WivlgJn=;O`4pw4DI`X?Y&DUf0&c;{!0 z+~n|U3AUu`?maRMSjudnl3h)J5M?&YT>E8K@b@?ZH|sqHoB)5)dwR!bJf({MlK=7d z%SRKCodwBMc)PU!cEx~8-HtSTC|m+iQPV)J=|4I;cI?#JIXobDgjFMAh7bd)18PEz zyYDV<*X?aLa^B!*>@dYC*+e2k2oWq2>%_4n0i$xf_sB<O27~hMuFki<pTIL}!rxji z)U*>IC;}xnK9jW&Wm5#0U@$}h5N1`6>P~Zb?ph$_PoM6iAp-%azNcLPua4LT#KPkg z=&35K;6!W8&~dhf08;{1A>L?65unwB5jIWtiKYRgOCY};`=aLUI9q%0?lODr<g(H7 zB9+!pb?NnlMUrPLFuPd4OP-)weVvAkY%e$kI_X86yG(yH>Alg1jSR^Fn8!*tpP)cJ zox2#vxKUsWcbq<UTh>((^H+;_@DP1n^7KhZBw_^51Ax#I^ivkeR4@Su#19;x?{Ae% z_qTmezC>_8?l;*0b`N`2WP4ZsT|1yR%Fgwh;Rsk^sLu@+KWZ5skXormrE1R$h%}}8 zZ~3pJRHe8Lp*dj1I~IWo4{+RG>$-9(rGSWrId0V&Amv`M!9qXKETm8WZ=QZ)8eeFl zc>JfKc^D)}e!U4IzDL{s+h>?RNSFHgDbPxGsyd6D%m<0Mb=~0>_|CJ(X@EkmV(k+L zUWD;K*2fL0-Os8VgmHk9QqOXsa4rM0&_;Y|;9nuH&FW6T@AOz+%W^_3_5-C-9)2!} z!Qlv8X?$E9n5t4zivdKPG$GVJ=h<lk_3Taqu3v>U|6qY~pl=9V`uTq^eNJYhFtEoN zY7)4mvo$4VWLuz<PUAn+l|^ql8!*s78U?md=&yY;N8%H1PKazx3rgXKEk+}V35)6z zP}E#7$4s5h-lxkP#XF!|Re`yi)VFR$hN_b}N$GP))6D27x1Z%DC;M|G{AOg;E<Bcj zhli0Jc(sId)KZG|EXNrUeTOsSjVFk+RFo^%$Vowv;lBmJRW{sIt8y_JS$4&3dqwQ- zhpZIuA!TB<@#)2XcX2^M)yxl~kt+uj|Ev!0UUlthDp<!43l3HTQ~Sx_xBuT`%_~WA zvbQzapqyeBrh4iI(FPG1#3o+ShUIoZ2_x?d2ncwN^TcP8qLz7N-b}NgfI!z<^h^7o zl~5~l(rvA|=V}!Xa)HjbXtlL)qH{RUzr{!%+{rDEtYs&w{D%{j_Iq3If1ffu=#!T_ zWnFdM4=cY*c+;>Ozp~$O6%<VBlU`n(hYez2XlVG|!XzvIg17+ra_!I;`xEJ=HX~~b zu7X)>3)1^Z7e0=bLEY8u3eRB{9`8$#$i#ZB8DF3zBeO}8QPk6Q>3(keA}Qvaho+OK zHRE@_q9cZ$AyOO`KB9{($p^+i2G;}=Ioh(XCGc5#AR-Ej&)I~|UXY>%VKd=Ln1)ck z+b4_feJPw*<ek@BeZ<L^6DC@JYNRkF87=h*2UZ;03q-aah=Mu<f?Z8I!@t*`)KLCY z53cBRKWA}c%vHMx{^44}tj!DJcdOHw&Kj>CozB`(liUVf(gBgMh@CO2>DFGQWf%SV z@~cRI!>r!{u$$A%a%s5IS<xtP!{h16nC@%C2V8{s**E!~DnVRAys4kldf)vfof#gw zDY-5mK>lZ`{p{H@Q;NvQr@y#|ZDSaCt|gvB{lJD^qVKOAkbSJXX7!N*SrJQ$bjh!! z{z&6|sipWFtX7z-KZj9Xe#$uHs*n)<@w*NEp@`1YX5ZBUx2-(b6TbZy??^wwre}OX zu<&fTXqo=cV~_gJ(R)8@Rw+e`)DIYw`E-*%Qo8oi{CiU`>)b!jh|=zC3cBkL|HqTV zkB^PWf9XkI7&5mrtgz8k>bM3w|2q+3ehz$&S2b6X&$Mv@3Y#_k14S$;p^d_Pygw$p z4XWN4NU1GuqLcsqxH`%9eA=FTlGS|4XGZfB`pv@Hx)!pzT76yxVHvKvJZE<w|HpEC zKyJJAuJY9dK|!JoZ_{p`_Kg-VUXz2|$JEu`l4H96-mfQK%u;$Gzreo}C#9Q&MI8#s z8C~CY{Y1YYy+&b9@;iiD<D>@T4$lSi?~FF4DGuQF(x<q;n!mY9!OlZEO%wdr@pu-! zHW4WfN=X&oeIfYQbK<#f%`giOK4ZpOta*;J!N2dNvxG3Gf8**--te0?;aMy)D|^?$ zeLxJ#dll>`{EaX!msr~qhHaW_y}8|MRn5A(zHgQ8$V`L(YYd}$Q;796TVsS*fOatE zdKF)?e;VDt)nD#H926s75@wd`7H_WC@;*_szDwy+A+}T><s-B`^^$ZQ+c`Jg%hKWl z`NV!B^7J1FkK|Vu8c8+R6!Yjb?)wGx2~hw00iOl!8^P)_9%sN*o`E%XkD!W^>shyM zdcixVs!cPk;iQ}CwGlIhTPq)5Xn5LIwW!WZPDzRe*JFoW-95lhb%lSa<<2a8MP8<A z&p<7C$Zb8WRth9o>!SiWxV;VY%*1yW%}EL@-eK48bw7Ue@4w!9ouFko{<<q1q*J{i zOh5<Mlw)m<n*dv=%pv<sMU@Vo6)!Wwyj;zkdGIrSBnNgHuq3+YDDrQ3`TqE{Pu3<z zDZ>~+xBTVHkRNxZ7q8PNgXfHi9@$sHhIkc}#6d4v-7{RYe7{#`SPkIjq7A0AY20%Q zxO=19<lnbk$w{#bM(6qL{>zO^KR{Tk`|alxxW-OQCOw#5>DV6Bi88eNyxXLs`dJYA zk(1xj$&qc+U!rNj=(7otd*FKvbW+bYI8eL(xmrTrPpn60=yMpfNC|6X59?%*p_cFY zv715Ym-Dan+o~RQ(|kKm+C-X5%%6z<GD+umL4W16;lvLGFQNjLmLu6wK&BO%N@A1@ z|J<Sh7(>lUZeBs-GU#R}oNHSj=_y?^82rxM1|=_S%lso#A-;-ak^lK}LzkJ13>9n_ zUg0wO0Cy6bwzsj3Ki1FEJe&p&R+wehqO<W20YFEp*<ud-tEWMoaWqZ*2FiA;CXMwt z_0Sj)|7P(bd;?82`Kz_RE5b<|Zd1>Mj9_-Da9Rp?-4r%Ii4c?voS7&Y1S2V0K+Pv% zR;+w>v0Ew4ei)vh;Cy<FK?Bb`nc55ukoX`K=VL0y4TQ+MM|l#BpQ6?-m}i-ikqJx2 z5R4C5XWVg$8uCjYpP~TRvOeV1l^JJR2<cEx5~wx@BVpEK9Y?a=<+gsiM_I?2G^)jO zTNXcU&Pw*2k%ywA`qDes$4xz!)McF-+8y{@Ky!B`)uVl*2xU0i1o9XIcp|qeNHADb z^!J2;M6v)o8ifvkHe*y>OALw<!UK-xwg`<!?H`qiFZ~LjtG{r1OvjD>xYnnqM>~wO zKxKkO2+74C32he+-3`<y7C-URV`?e#m=RHJod83KjhE>9y{Tpb(ZEDOPV`CpKHG$U z8jz$PPML3ks^Wp#gwxEO6|R3bmT}PXfvdf<nIGn&q-o$wPyTwh4p1Sx%+)LRwWzvF zT|!Jg;CB5lEZ`lNh^fZ`K!gvGPP)l~a|U`Q?)KU(gyW7`KnTwO;KJW*t{VucuV;p! zwy9r>ldYU_NJ<Rs0kSOr9TXJiInEtN%1AVq6c)>)9YZEXQZUpY)ePCrE3DoG3WIJO zBXm69=NhW{5Au>c<`@D9a@hb~Wi<9&(^Tb5>w5-DG6Xwq%cmQOCskr#Dm+jo!tjd7 zek-TKSer#%Y0iI-aV-kQM&8EpRabjkG|==B{fb>1P7mUZOI2|}vVS|A3F%DymrP5I zkN|o4zn5y*W7a7Fa2nr21tue;HW16l0a;4RNAJH$HIhN$xNqQ^GOCW>5D8}YdpPnK zXdZj!a9i~D5~ozm*#BRx#((NFP60w)hM@+oN}4hG=zuIDdli~Sh#uM@TvU&@^vth0 zeLhJ1f)L8z&7^DJoo_m)Nzu5p%nFILl*zDSQJ!U4mLJa=NV(1;F=I2mm4PejVE0<% zW>o3es+y(A@Y{WdtDJiio!zJa^0;_2Z%kN^m!dhbK{bMnncS&*?yD+c={E#PP=oyj z@W0q<%e#{am%628#qDyFn8pm-#u#i)Eul6~a@wi|A#{qXbu7TPjO28%c^zBF$8F74 zAEZetw<)O5)bXYdu?CpJ*Mjt$F$Uu%{yK-lQ4P~BRW0YQv&=vTdJC^ryvB&HV<W`! zwx0c)XC3CbVOAy=`Xo*3mUDa36X*V~IPA~-KV0`G^@23pBK)w-St$>&by4xA@PpRS z=-ZV`9e09NiD$cj+SveVoyOgnGHR&|jh0K-&0v_5Hij+F-CMzoDhi<1`rk<GD%@qC zx;po)?11@Ggd`e{<;hynxLi+!%Wc<;H=d!_p|j$83@A*D)<8(dOUdblkF-SH8TMQF z2?&sgz}M|<1yOhk(4;Uy<F<3K8C)GUOYgkX0*=u3S&AxM`}4sZ`4)2?0}6Yd1F3mp zxD)6IK>9(&i0{fumhkQV3p9qZjfkfQMX1Ad`J)+np|<T%;05Q55U6V040F6h#j%e> z5QO{`_V%M0P2J|2*=3S_$9%7|@b6Yd6ToOs)f4SmUtGau4$sv%BUg_R5o`M87NnG4 zM~Zjo+knBK71z?W<*ZciF&wC0SJ<maHie)qgs}GCx=zHyXR5)tuccv<M{KO#HnXOp znkhy_=3eEDZx|^&8y{@2jDd1Z9+$7R*Z^G4U4S6*Fb{0n{NV)?%R3+_p2qNK!QGFe zmSVef3yfAYGS(A_B=sq9*~bJjn!>hE81oxX0r{xn5ZF$N`;8#Gc!$PS8YC3f{tmN< zyCmC=KlQ^5-b;n8Kj%B*565Rb;=Doh)CaBZ(z#RCLxn$ou7L9R^i6EEh)wTmX_uYO z0ljHbm7RMxx?k$=@0NJ|(&^&wPY`B?-jhp<CBSx(x)@QH=6{F+?lj0Mr-}pbtQ2?k z&6hp^x5#Dlg>(OikT`9r-Ec16NxKoUov;ixR5*vcOz!Y(osiB_cIA}cH0fNKlLCaA z4>uH?fI1=!JUiQ#y>meSRsxEzg4*?UK>6@PNuonGS)yc3Wft@IB+!<5Tu24MQ>8oo zsuhPa8{73gg+Pz?0-Sq`_9P^yQa{U<h<mYFFo8OHB!V||EZPIC9A==<jpu3%88C4y z@QPG8EQ(+`+rch^n977{1Lj7^f!DG9IjD=<<lu?S?4drSml=2v0|L@v<LSx(0W`El zJ*p3UvB$939vSd$N8W$4!nKcF)ghvz1k(Oj!?iYZlg02dXR(=X>e!tBQ3_G+aOW52 z^=`8Wr#NW2BU*v4Xt>g0^c3fgUXhoDZX3^+*3#aMV`pa<pME^)-5MfPd!(O>wNl!u zb$ZYq8If+iqz4?-5|GlDlH`0}OVDC@?LN-KWPm-F>~fZG{_CVl=S2}@<bRMuTaGc- zWivqa&#M}{^D@N2?Z<ZgT{dJ8tARLfEwWGKnMglq$>)@Ce)l@5!(J7Hv8U8|7RV7m zLs3QAFE%y~2zF{yg}?Komyg~@-uA#eTXbeL%y#++>G<KBwQ3mHgXYa4)mR;8hdsS> zP_xOJuar>zJGj0np_yBEf4ZU-P*PSgl8cyMmvPI%$11a>Kv1$5Z|Xys>=CTF9~QQA z{n%$GfS`>ptWQ4%4suFMmA;5&-vQucq{HO9F=kEe9t?JqaS9O)G%|U~;o@WbN#Vhq ze!_t)v>reY%pSNIMSnvs)t6eRERCWkN>nw1WwKIkq5lV1Svcpafs^HpqP@t3$}4$M zYLM4iFH-+Ud*>O|WV-EflyhW81jb=#N;x{Cjs!uZ4K0~bF$w~r0#YO*O(asp(2I;B zbC4oRQ4vrP=>+LL41x$sCj<x(1nGo8LLd+zXTQwcy3ShX-n-`9`{DA9^)A-Rn>Ww9 zpJ)H~Z~yl*rA{bDsdEn(JDMKp%n8VZ$$DigB>^!uo`Z&liLo+DM*}$N3z7~zsHA$S z8@cDkw1z%6MG^voAc7$Gt%yK`ly1eDuGbBXL~)nSS4~UQ8--A&Ex9(N!)&9#2<$7h zwP4KXh+m2P86`BJx)Cj_cD?<12(li9QmAPL6uNis6b@Rw8(p>C%1nq~jy6J}RwYIf z^z^I!MFlfgfLopfog)xBM_zJaT#}7#LtN_UUmN9S`aI*d@uPqF&m`NC(*E)LZJ1zq z&x|zLALYZ4{fSY*DiP!b&4uw}E>(FZ0C>n)apF~i)VemJR{OGI@7rC{oL?b2Rd#oN z_@=_2-OmXJwRxgNqkcb9g+FNYIG?Rfbx_G|_N4)J$1<0&&i@Z&TL;v2AZF?=q3g}1 zM8(s_ANNOU^v%Wx4@r`TA!xrmr@Y~z{sGnGR<&SR%KSFNj&lhhsFGELa4Yhe;1|(S z{a3<G0|>Bi+G85FLhpXOMgK$j?VF`s^Yw7awc{&s;aQcVCS9)$jWoyVq0d<5I5@Y8 zSbMKWf~92hd0oF}H<@3yWR;tlL9deI$oA7n<YDlOtgNv<!9i;ZWRxPnB?kSlDY{Do z{z(K1qr5o_TA0Wy6Upq-u2wt%ebCvIB==<%-AmirlO1P{^X*&R>ssW*##&%M|1i!G zy{a#azCz;8(M3&s7aFw9HSOU9>Q**Y^1kWsfJqAZwc7>c{5V)Sp^Dkg`{9+;VmDs2 zLEd9H<uKNl!ef2vO&XyAYN_vR_RS$dB18iD=6tBR#kW+b^;o0!ufD<Z9H47bdx`Vt zW!vgr{H>9ubX`{WBY0^Op{G(Qvnuwb0&PYlaez9J2M5USw$CqV&jr9{v%&671%FCW zuF}<acKg3oNeLWx&ZQPjbvrNA?cq$#+sbGuJ{(_YYs$J{g&O>wjo86g%dq{N(a|A^ zI&%KJqSpTKdb>fO8;-SN<$Qao>s;_hu#c1SX_P6U;R_8Ft0qT48Kos%N#&F;+xY8n z2UsV<%wp<m<TPA+^Ns!T3i=xoY~qwFlWx_$F}bwCU=c6+#@-~TPZbY69IUwPIoQ%? zy_+yAM8T<qe{xFUE-Rct^f8;qoT!mEuH{;K1(ts9Wr()Vs)!kzxB>OB{AP1=OXtvx zb*TL0tbH?(=vtH3ytr2!&Jp+`%%FZkA8L9C#x<@|?kqd8@@tj{MY%tDQ3Ht)v72Jl z%&AEEN|_F*KAs!P2K2GrDJ3wuB|P9_>IduxJlNZ!@Bl+2U9#ZFU+8=OY%d&{N>{|K zj#LgXr4D=SR)9R0poW_(s|$Gw#sh9J?!LJa8zJe@Kjmb)9KVxt{;GP#<j99Yi$x%0 zK90wO#MssnZ8x+J36(_9hFcPFQONx0xQSQ*QA(j)bkS$EyNgHXEopbWc{iO6PW~^N zcaKw)Tis6n>D37&)wiJ(IAniO+m(*Jo;#v`T8YG*HqxGJPsJ`rqxVP~V^9(@21?}A z3O;LeRt_N%SF>`%*?EfUR*jx~E8;ca+lKTA>0*2s^nED--+XIP#rhh>wyq9Z=c#33 z0~Y#NZD<RhJw(OA*`1?}!MxRMrKmkCH}1#h`sGzPR(c6y4J+G{FgEl|aI}R4*2Zf^ zOk$?{0E6T+kvEe=$v*lJ!j<j&Lw7($<&AJ<{|#x-9y5k90ju+O0=@cf(C|H`$&G+z zka%-e0N;wU%HChSPb`?WB+CQ~vm}t@-}f?9Y<38*UFm%F*OsTI9*s}IeL4%~5MZS} zIN8LiB{SXzc*PPD6q6DzJ3fIpx%{S4mU#0nRP`bn=LY@lNuNU}l3hveVI!$IVM6Qn zocR}tZpA0;>m*YA{b~gmIc1$$q2|HR6sspbRrC|l@IIC~ZO}%TtN8pb(UlDa<Lbpa z6)HX73SCF{8pw6-a$JaiabgFF+387jrPbJ`p4y#G;w~lr^4vEs>hv1h9A{>+s`y0N zZXU~DxtuX&_D&_0sUs|_I$X)9p%*vBvuDV`?6?UiOqTk{+HQ>PzXa;SOplFIwGTL; zoh9&Fdk+eU=q|p`%3ji$>rLf(bkIb!7l#2Xs2*v~=CRw~nhIkaXD92fxqv?nIo{H* zd<1P0WkV<~Ml9vny-PA$QG2!3QEd-E2RAeGa%YP`n)1DD5V&rG>|j$sJ>M~y7l=4A z1+v%)4g9Lt+W&%n+4pk`X=OY+r%INZMW8C7<&sIO<OE#N<&4X5=_sYr<89j*B+-@f z<2;`acD$hBg~ko`=h5f@j4OVZI}|Mqla3t-X8+TO20bTXY^K)>FM6t7sF;5bN~zZ< zMg7QrkI!vqL=P3=d}7FyONaJf>v9wnkFv3G|5aRhn`w~QN!s^sPc?Zrx$2@<e9lcM z8k}r14ht;sNjPvXSgVLRZ}?Pos>ml{d1$J1dfG+8@6=GxN}3Zde<5BuiC>^<xgVv3 zuV^TtOU!ZloZeOta9TS61vRG7+#dn7af9mR3!;D5%Yo{}V<`J`sEo}Q+v-ZlpG&AU zv-T9&koI$1YNSonA0~PA<u;FoJK0>srMoq|jQxuiV4PC2c+6qB!?`bu&}~r2Occ}j zXR-~bO7=o2p+GA%z^V`{SI(<Jm#RAts78;R6WqLcxn6(T5R|><ISZqLdKBCtrhWHm zt0H`PTTOK#?Ky2P5l-n@ly_DaCrS3pX(Pe6R9!p2Ypx^KtOX?G4Tg&{;CTp2wD?Vi zpnb7-Ct6B+6^Fjo8_ro%G`z1^;?o`Ut&#U++38TOj+hH1d`#5hED$iol)>*AqMj1E zthv=O7*f}nc_Bga;K5PWr?=1~2lg&T;Q4o=`vJ{|o<^ovYus5$K~kfD=U@k&o*dNr zWuu&!-ta-g6NUI5!)HHy$|jyVnXJRgVeN$h*Xx!H5*2fP>|o-J%bHK4WYr4JJbJxS z9GkkdHv~?Z@uG(!l)6JmavHDwqtjR+ED&)?x+1kNK#!sYGw9%G)SjzjMEOf|m7K`N zJhWVXHU{oZbvlf}oSPbZxnJhMBD|eQq&yYD37`|yKL#}c;n9&{GWz|u*!a0O-N#}= z01=ShE(B#qTeez{)?yph(Sc$sdkosI@Zt^7S+4$_mM~`I@e@sMsTMAZvj#F(M7WE` zDhz^J<S<csLNdq7Xo*Dou_^E2+siM5sAV3H%yRp8tql+6%-$W^7jv4*yOrT7)L+av z>O6AS!w#!7U>k#zE}M{dsaiH7RcY%tLRszLO`lsLdpKa!PiJaN9_h(sJ%|=ah>!jF zu_Xm&z+9?lRB`XOg~5zDt>5{am3MO9gQFjI<JM+=tvP{~s)9J*l34n<Nh1j3Itvch z`uh4MG~0<Ju(vu$Q*&T`7FZp6;yodwJzLe7|3WT!nNIPhd0ZI6?5whKt7Q2zmfZTX z$U9Ma1$Fw_HEScmcEgz$UL#zQzAoh#+a62rx8^nhOY6(4jkPm3$~*=u2zL5G3td3M zsP4%A#F-e`CxIWj3Zs`T`r_U^%^UEHlt}i^0s|4u+EK!t$e^lyT>y*Im*1fblq%~! zezc4DMBgATm$Sw}rSi76S8l{yaOplQ?O^gD;@_#Nzu}xkr_Yp6z8Be*S6NHcyr=06 zRcR;~#&v*y{fAAsYrOW)&?c9pt^@SY>4#y`UiDC+j@xEocI?J+{5PPw-fyfJoBpP$ zxlOO_y3D46ui`&j-UfiK7aXO*w2Bgg-wQGKr9<|(U`Yn)$0s>Ox4^$77`9ssWY^AJ z&90BAFHSVRjn;7-Bxt<9eRngr;<j|`baw@Rc4L6a_yf7Sq?l)f?jX=#dXhKQzN;m8 z)G+#a{F%b-3P>2@wuJIoA9Y-uG`I0}p2y08XE$W%=sYW;O@gAqEqX;g_*+%3PP>%g z(+s~b{pz-h80@*j-l`h>N9R#L2mrIdcl`)l`k$c-$Pw%B(hkQ50gxE?M5J6ZEBvz- zWthS6%dW?5WbM%im4g0j%+H4n_h_{8@o{v|KGi8dZkJPJJ+wQTFs=69u>r^j?Q89| z7<`qpM_bR4Jp^#$3P<G*WOj|f*x3!>=H8D-i~+-1Os0U#vnfm=bZ!zs24R5kos?D2 zw_<l>^s8%d1O7?c-c94L-uFr!<#{4DZmjBQ;gBG9T!OH!4{t2q=IUP+WkfV5jp2ad zFvQC|Bp3bgX1ZR#EQr9-I|9qDJo1whmi}rT8^IZQB^q@(kSr!nZ}$tMmjpnA5A%~? z*pED#uM=abQO1o#j|T->B2{<x!4UYueZ0ML7oyjXxr9ZNFiNgDBiDO}@E)B281ED& zbMwbVMEhi5=*5@Pjn-F1dOeAOB0Scw9fe5GJ>u3949jR^eewb>K+P|=xTnt{{YGQ7 z98RYWF}&*Ip-n9<SK+`Ju#u(#rXO@TC@Judiy}HTD-5Mb`cA*NftPNWXvVUV4VZjW z*t$W2qrfTmL56WP4ur(XK1K@#%okaZ3S9>Q?jAIEgIS2;uHf;$30e@Px&u=oqQl7t zHcUvG^HZoti5qDi&D}Vx1>FgSoz1#X;jiBH*ce$tw^!aGP1^ushja0jY)3T`+`CP{ zYGxyk`>`wZPD)|H=rgS9_3jK8$^m9Nlt4~>O54Ui6g<DdP4*qn1R3fh7vAdY@F^~o zn)bmmlTqc=M*G@;;|M#rg5V4Y9WlaF!=)|VS*CHjYWx*Qb^81}gk&(z?{ousam&%( zdOwxT5A6^Ns*)viKU(hdq=4Y2yG~2E%Gr%GC^<((7HhYWT%hXr^3`FoO9{VJIv5KG zHFLcu+id~!1JY>4IbVbo1z$N3U}OwE_zLs`k4!!PiC^Wp7owDBB!N+@2F!WzrukMD z6)h&Cy{lPERvoNFBFV;qOa@ay-wznK2pA5mHCte?5hFs&BFud8(XE=SQ~^!g#g&Yz zY7poVGo>Bf;>eFx+~qgpR@T)TY#lsEPSnWd^=B*LeAz-D6d?cjpr{Gzk4s+V6cj`( z^3PNUE)B3F3R@##c3CbJym?gG(7f13QPCUeDSpg_L(i&afXOIrn?pS2_^*d*y}>AC zN1lq5?Rrhf-o<yD_V&F=YO1oC<*QfLw*cYzR(3|QT_I7U3R>v)x)sft)1q8@@HS7r zdn~B`+Ass;$Z9|K@0l61aIDZ0i~Jr%Cxvl##bT+Q+931-h4`sIn|KMj^3!mqk+SlS zmM=RA+@xg$lS!*k8hY(8I$6e?o>BSBHsKIRZI%+Fg+uPCrhx_3Is^&6%@Xr}nV*_= zgu0Ui8N6-z$G3gy8i8O85P^{UDnCh=7~h?imKHjvHCCXynf`giS@ou+9gv!@Je)hP z6SHeGXfA(_oGobVl#-hFKb*8cic~(ZS>7Q>3%QD2;jG8T$I?Ue=W`IE>vkWpJzvq) zR>C_W_G}x_4;}j?O<i9VtL@#am>v$bQ!p?vK&j@;#Kt{;?NDoNZh7noMxe|mTLJ&7 zxKd&B^BPUBou8o8%Rf;D(4a!9>-EJN#iY$*IsU@LM02yD#Z-jzqhnVT!z1%%_um?0 z4_&p`gU}%3$#u%{(580eK9v7cCF8bv>fv4Abcm_fD!fVLbK1P?(+g9fVy#CNipp91 zFVYQ@B#Dl-(xQpIi<zQ!p4nAW<3w>xZbM925KteUXJrEmQ*d9QxS3x(L%vZ8nh-F! z8aYjNd$6sL8Zm`|OJ8f2x|Z*>D6KFkrs!{egmtn%%KXXBz?XLKiq5FKHqNyo1|?~+ zr@M0{ww3pkHrNUuruFOV8#vbU3ap~yS~J`~>otfnA8CGNiR7}aSr^DR9x%}+5%Px* zHyQlevHNhD{c1$#{?L6Y!wDDB9nb45mVL4B<&z@LeR@-}2~b?vDWKzoQQGdL7dflL zFLB=E6W<inhy^?!Le;wt{d(t_A4ICf@&e=Bu7xK5R=*z&zhB!>Oj{#YZMVJ_C2{lS zkg7zW?KnAe<7dx?@JH^SA}uySx$);a^@c|hc1o4C+qa3_Z9U-@I-1gOCBtIDM9iXt zOc4~on4_h&Jdw=*v8X(lil$sAHH7I>R#r??RXQXb^+HvxG-u2d1)ZFqttW0GC57QC zH$uZ*$98y!76zlNw;4#@YnI1j30dWNrXGte@@ce_zb!{o$Kf2EcJc7qhB4aNKT8J1 zHQSaMrDfXyU}3)Uu3sN{UalF6{1ZEs;ra|lTR_tBR10BvMCfSWV&Y~YTP;q--J?l^ zJ2j#!w%y%`@7`1LSGQ4EnnKg>|6nMV=V2;+2US0+vui@$JR+o7{@GDndMDupN+iBN z{s3}rFgLCF!fY(S>cugI^|~DSq0sME#gRK)6PCv@vX1Y{dk_-x#5_G~CYz%3<9=i< z2FZ!#xthMvo6C3N9Lb^vd`-*QylhM!95-JL?Q7_{xXFqTGpzsAdfVdAf*BV1GO}sA zMLyaf%jh42kjM@E-P6P$id$}d%GN{vZ}GW*z=FBPafI+IeD=)ApDu2_2>%F({sSKP z)<fQU$bU4azqKs4Hje-8jbkg0ZN;&zIJR~E|KqyNwsx_tUF`qIE_U6M58NcqLgK|Y zHXR!u56U6mIjSbOPW-{ej{k%3G|z)C!{go7mgmABJCMARpU=d8ws*eu-UYbAcSg_X KWZv;BKmQHm<v)o4 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-basic-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-basic-list-chromium-linux.png index c4348f61b6dd0a9da8b58f96e3acceb42ec6221c..7d9755d4a1429d021c5ab11b15c4dcc7f6ec90f8 100644 GIT binary patch delta 982 zcmV;{11bEMEu}4xEPvZeh*otU!12d27nO8bL<B(u5)nm2Z49DKi=qgkl@YZF7ZFj> zqHyC~L=Y5F928s$?p%l<h`b;wD7bSYcmo%L;sq~w_dRa|((7x!1B3b1J|CFFng8=Y zhnZP@`JFRUZ{4~z0s!Dan>sc&HUa?PL7O^!&7M7b1OUK;Gk;9Vrj7sr2#{p}011zc zn3$V4Z_b}T|MABkU%7JS=pixus8gm)IeYf(9qZGkO<S;F!M(3NaNxjj?XF$BhVxmo zW_|L>CnEsheljhakkhA6fBp5>2M-<`vTOtZa37eKO~{4~8*bdVv2WkLC!Tm>1ORX! z$g&Cf?6c3dZhzhS?6c2~9y!;qU!OB)&O7hC^ZfJAfByOB+qP}{zn3govgD07-k3gp z`kQaQ`NI!C43Bq50KlZlvI&_nW5#2TJ(_>3pMU;&`SRu8fB*fVLx;Zj;)^f8{BrZ= z&G*<pfByW{t5+{wy7c(*<MZat+q7xZiWMtH0KlZlvVTY4bI(0D<-c9Kc5VEl%a<<? z&u4%C{rB&_`)=6w%{SkC_0?Ak7cTs(Tb(<1ZV0kry7uX(pFZ=<GegD=)3U{j7hk=4 zbp!xRj#vI4eOtC{dFrXB{=D+hM<0!!?BBot!i5XBza4z=!3S&Cu03<+%w2DF@ZiBq zmoB~c-hX?ySB9sbr%s(3CT*|3{`v?2m;_n&=zIVD_wRTsZWx%2pA6Hl;W%^V%sVbQ zapJ^XZ#BOD<daX{UKtO*^XJcx0D#GnW&da|zWCyBT)%$(tFONL=k=Fge)-t3WB<E< z`t<3;@#4jcw^xQ?+i-m8rI$tkz~soXf3z7hW`B&A)`uT{IKFc7<jGsNZaw|<(|6tf z_S<hyn>KCFo;~lr`|kM4-o1NYc;N+E1^|=imH!FZzkmO~{&4f=&BKQekDp(@e0lh2 z-MV!jfBf<2;WXse+_`fXEn2jD_wFlKu58}CdH7v^{PD-X+CMxD{r1~$mn>Pbb?er% zXMfLb+_-Vos#QPz^wXpIZ>j+BcQP%TkfA(w?%X+kzTywV$&n*RUU}t}qeqYK*s){u z(E8<<U*3A_t!2xWZQs6qsIHkaXRcYZ<{tZpokN7pnl)?4xYu5L?YG~4`}NmfM*zU2 zO<B8k?d;jJM*sjkIAddDrey#C39<|TAhX#8Pztl)12h5*a`*&8000I~Nkl<Zvk?V7 z1~d3imW_>#jQ{|6p#BX20RR90F%-4{000I_L_t&o0O5rf<?6f!IRF3v07*qoM6N<$ Ef}<u5O#lD@ delta 960 zcmV;x13&zwEtf5jEPvcf$W`S6fZ=Uf5)=p-T?P_VQUjw41r3T$6cp5;L8EGrpd&#C zf&+2l#IX)Ue-s2As8hkAcSTTipdu)W;6xC_J0f1rI(d-)$k77_+rGy0!2h%Mx4!*t z*zCc}x7OZM@7=pM0s!D?n>sNuF#-VKX`4Fy&6_uG1OUL(Gk@%qO&tLM5FpC{01}=X zF<y7?-d(nA+4IjozjEcu(f{k0Uw--g^Uog|+`D)0lqpko?%etK=dN0{YTC4E_mAIt z>#gO>myZB|0J~*lb@AfG-+%x8<jIpmmW==aCb3&KR_oWVzjNo#!Gi~1c;ST+0Kg=& zY^;9z>8EYmwtr2ZK7I7pJ8<B@k3atS`s=UHo;`c<;>B05UVZ%hVGr;7@4ufhW5%0r zzWLpE-|gD9YXks{kt`dl_uhN&x#!05o}WH_dT6YhH*fCQvuDeeEk}<Y9ZKu=?c0x< zf8oM~FTeb9=FFLg4jmev^4e>!{r1~$*REX~0RZD7%YU9#!<En}|7qx|2WK~J+B9w2 zw9T70&zd#sgAYDfy?XU9f9uw*k6LZTiWM)t^wO$TtKNS5?RVdOcg>nLSFT(c{*M5F zadFH4vucQ~p`s>_96x@1{`~p(kN5B2|Ji4sz542__a6@1VDG>G{;&=9^Upv3*VT?4 zJNC&ZpMOl9`tQ%fE3dpVtbgRlkr4neF0$-d_43OvfBp5>lSdvz)!_2w%lr228@A9U zPx$!bj~}(#`Sa(8O|pm9|DU&`0RT^sEc<(U<Bd1I`R1FYOP5X_oH1j@qvj9WW7n@= zpFA=&*+ZcQ0Q{w7+27Ob*|Rrp-1ya3Up@GS!GDPpCmxeopMLu3h7B8T-MaPSi!Tlj zFI~DcT-N;c*I!2fz__^Of2<B4KD_f!ckkXkbLPzb<C`~c4yV?xUHiiiKa8G`1q&7o zFR^IRq8m4EoH})C$&w`>e)!?><HsL0f9~A57cX9%KY#wYbLWPDn=@z5a1ry5KmHg2 z0BPeQ%f@Qq!iE3%(~x2-R;;*xeE$6T;ndl)XSZ+PK6*l?PoF*{;E+~deDTGsS+jQU z-o0+!x{p5k=uz|EdFP$`zoRj8=FD%u{dO4Hv17+@Wpe}ojLVcYYu3!0H*W+0z|%7^ zG2z~`u?2Vvv)}_F0t{x>vWWly20%$fK~%FL1TO|N{42{QCMHGz06bOy1ONd4|42Uo i)&Kwi21!IgR09B~VHPcRi~?r>0000<MNUMnLSTYd_yLjt diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-list-type-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-list-type-chromium-linux.png index adf6ef6a15bb9787417f370846636f07a035f853..67ba7aeea1202b8cf2f12c0458f6bd39f9004860 100644 GIT binary patch delta 2310 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 delta 2315 zcmX|@c~nz(7RR5W;sT`9Dk@^8wZfSr7*Gr#OH@?q5n*aokX4EhkyRrEgz!KG>>xzO zYEU4lrJ7MTSp*>@0mCA)1O$YHKtPrNfrOBdK-T$X=A8NG{c+ztzjuH4e!rjl=FlSa zBOBPiG%&uXNfLPBAL$qTO78vfO-Ak3jVPO%pPKwPZ%6L^b(gt)MDKOeXS3TZ-HV&w zoa+AZUd#Q@&zFvW-FVMVdi4S7+ujFHF5fsIxjS+A$B(j$7ye2=+28Y=+|_Y5&(g1F zCV5GE_Ic?$IX9A0mnv0N(B(XhN<oC6#Mj-UH4$+CW+;us<xTLp?;<^xhDukb<a0Ft z7?;QmP*+;W1vI`TO4_pBdx2Mv<1+}w&u+JvdRY6_T;Bja%(gBF%iL3tpTCP`k<Kz) z9Igxn(N5F-;ZH&y9JS|Q-K5XX9jc%DgH#(c+HiaBb9aFQQn{6{mDiDM{L%FU?V13N z<-M0=^vL4Bfp%H-ABNI4T-gLY`depEZEf^OZ3rtfSxi?9R-~?MGz*Ap-Qlx0d7(1P zQP*sUYy?-zk`i5(KelF@Ap{g$kJEnWY5>n4eVLZ9*dS>$ht-ovV)*cWkRu_&DQvPU zU-_kup<SuaX%$S}aJySA9u|+89n-O4t<=M9Id6zAisyruS#{O{@0Y46ng!7)%>!zB zpZ_$6oonGdwo;BCg>@R1ydhqg**7q2YZO}c@*IiLTY^zfAc)82|1B)1#WdgD$Py`6 zgnR`<F`BAcGz&_c2zJ%Y6vU=Z9}G_FK04G@<cwcdPk7Ve>8Ji@iV;L8t@2UWB(B{8 z?}_G&7x2|HA>o|YRPwQl1G4=Hm!&2%=4xxlVzQ`S&~=1e7**B$n-zKWl><GZ^QjH$ z_b`^@qO9MW0^)CZP60Xx=34h`iz#HguPQ2KY_-k7D;gEln0Pxe*G)P5<e-li=J1Y7 z_n7Kw7zG|E#2zYr+9o#XMag+j&%%`D4#PnH50=ow$JXYQ=}r<qj%Dl<7(ZAQ))~_< z_o~nHPIqKb^^L(d-h}yI`Vn5nY_d2%G&e~(N2MZnKVSI$7cb7y^-x=jjV?4E49%#% zI!QX?&f6*f)3@qcM<~%XLC(QesNw9Lu+4L~a_5h`v4xccl^jbUB-~PTSW(n0q}H}H zG#5&{nHPrgj{H)}sf*<gG34(;HpzS45rO#8c;sr6;l9N2bTB`6q_Vd>kj9X`L>b#D z+A-RjqYd$_A7%_OtIePZhpHB)=iX1|s+tk0wto%I50;=BX8)v#87eLuS>f7353{1A zEKlL=$21~*Z~`Z+*nr>dBE$7SX=X!(Ipz-F?1YvDyO#dz0d8sv+mk<fYw`+E+omXP zO^1yRg0}3m!&26y0%G`Bp%czT(tREpKaKT6tJMALitUo3fG;vYFLzLQsl9pHGQSv0 zgS5)Luxd8E-P@%SC+Go}&uJ4r*q`fLbG=W}j>N2o!qbvF!=Jrqv$V8q<6nD>q=&ZW zlBSB+jU&_b#>*RgNeWW-5mRp~n`xqk$hpri>v*?1W%q<%%4p+vx1E8rrECm5*_Ok` zxOE9Kg}PY}43`P(mJA<4X}ian!yEw*2eaua5lykcITAmmmsp<1KBv8fsoa_F0=Bcb z5j5}I$0`nX@XaN*tAZ!nY+lQkk`+cb(eYC+vi9AP^?76+0S2-DzB8OsM_-JV&UCBR z*sxnYEm<J~4h~F_v=TAe)d2)#R9w}UUeBG{;uB0*N#?7@@QsreaEVWaR)l9dC-uZF zzqL;i6yZ%!fwwvi7!p23*Nw`7QQ`bLf(S<$smBR6L-`?$-<&RQ6Lf1x(w%OyRq}|K zb5xmZECix1FEpxX{!-@eVR+^`m3(L37VQtzHru3L0M>vPBZHlzf|I77fWqinr7&2h z9OB=Bg=IqlxNe}on={X_`{D<FE;hid#Bst%bj@NcMQiF_350)%qLoomblGQ>n5jD$ zy!J_7$SdI24<Gi&GVVy8m{FFHB+9awM7BR><o-08&(HuB@3q+Vu*|peEAYk@M#|dM zu^FvK1<R``#sZ@ejAqVT+yD#9Q7IGK+_P+a-;QsmthU&m9C;hUnr*_VJq#^x0O9Wr zDoWLe3F73~M3(s>rh0iY*E!~Wj}#jLHD!ANF1_g&7>A+jHSB{3AwI{_$0}=T5BP8q z03xf6gQd6*4EJ7Rr9}EB6uMyZlZ_9OsYMCgf#j^ea|sG~)Zv}8XAc?HWFb=%^Xcao z_k9-)HF*LUNoRAh)LLDQl+zdD+n6XhYgJ_5)s~sg0W>b@ur_b=V~Jv6)kp^_+~f&* zZ()AEqjI*G%ES*7=3i4^B?L?U>EohP0vJEnmiy4>F9E}3c2r3?%QR}tY6Zr%4zIfh z6Bn<*QkZDMcIL13=w~ug8*Tm+r6+Z+iTd))zYd(MwXnU<z2;*9&`-mQ$=bFM#r^GG zj<Qw(o1z0W^j!2}JA$)6R#i64)#{uSe352og-O#*P(8Br(q;WR4P@a{>TB24W{EJ_ zUKNsvp5hJ^+hrbwKYjlu)08`44)Ee;G-5)KgnZ`^fSpg*;(0gQ^<%Dzs@?M{Ot1d3 zy0K&RzD^N8)c|Kmfm5C}^5M8KpxFd&gm9>W34oFy;;rSxri212gV{OBTJ@x9N5blo zV9h+3e%66Laf-nCf34u$n1DZIfK;$U^T}Z>?sRVuFp#sbwAzvgR)j(+tN`Ab^r;9U zOk|kFj5Q{)GL1V)D2%LCUr<Q}LurLs>(H+Y{R#`#E|WYA8RJd>9$o+ER+qn|W6{up z1CUkB9340k8vN~J_GtqsD4+lxePr433Rt??`PFRon$!c8;e?y9_Kou;`Wrwd%{5W- zHLAfGsHrm>(2FVdIt+~??^mBN^)obbJnm=!LEFsEo;q={I>dBfOZD-scI)g{nbspU t5&!+G7|^YUAe}Br_w^hEL7Vi629Pwj=jSv8i~ten>}ju4<tMM+{SW;b4p9IA diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-sublist-type-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-sublist-type-chromium-linux.png index 2578264525f73ca26f666cce684965d5f8279c3d..474e5079a86e99b33dda3deda3d41fe7e03c5fb2 100644 GIT binary patch delta 2814 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 Oz{SbkvHG`L5B~!?D-=oq delta 2898 zcmXArdpO(o7stQawYI8SpSIdn#k&4BUF)(^ahI;E`uQo^r@~yL2(3#@5Gwfgvf0W| zb*p<<C9Mz|BnYBYmx@c(B_VNZ8bLw?k$dvXp8a>u`Qv<^^M2m1&pCYi7Kg_dK><<c z8!+KVh29r$4}5#;(NVTkd!t3zIlPTnuIlGqyi7QlRd&=M-eF~|pxlmAb!@~{U}0kr zb;`=}p@aRgnirpaBRvlWss^`W?<2+CZ4lhqTW2@@QXImiBV6&^0!%f$SuW;^<tTW3 ze7qLWGw%)e_xA^YCNjK`nxP9Ccxz&DK|Zl=4{#449t6I=T=u{b|LWChh5_njeSIgV z$UieMQ7NJ)ZLr!IH^YaYj#EMPLp`T90Kgddl3W@B+P8)+$2!IHSenWCdHXp^Qk8XV z&};0qr$5}<TznHVE5YpnD8=e1@k{JRdjze>^k(g~J4{lH5aJ6q1;2UjoRv8j{%J6e zL+k$Z#O(kOob&{V^|C#Ol`Q>^$K$iagD+h3bL`e$qQ~(*joV`|YQRM(Gzh!iI$)R- zKqmx_+41VD)C#UCx!fr&#o4)U!V{J@dk0sT)tx4vo}L~pwc;^Cb7Sa)xyPq}ssvS1 zL&v_Eh^jyU1SlmY%<9O<$a&^mj|C2rwlj{tpc(bi5#ypPJfS0!)fRW=>Yq;?vAee1 z^7#3?Tt~^`LynNxHAK5neKi~6*rCzt*CQThk0TTxj}PP;QPY*O-F0ShQYsT?BU`D~ z0fNQ(NO?g<Mh3c9SQ<rWS8UNJ39IPUn&KcZRoEBW|K|+mp^jNw@XGtYI4yiu{8-@Y zkiN~OUTxizUT`>kw0G!EiIEfluz4m-+_eh3#P!)$4wOSWV_cPrp7F<fH$=A2HX^7+ z&Nz>XAzEmTZ8&oZ9Zrg4_wNB1Zsp|YDq@OgZHvfy#@dj4sB!am3Tv9vuN(6L_gp&U zOY*ekH}wwDC>tI4B*A>F!+f<%E^+t(@by#8dy|usE#={u!N;dfUDnptO3TXpNhVtN z!idqirFMytX=!P~*>)9oxWw|#hZkta<jqCR^tnbb)qQP9@~1qPOzQQL5Dw?<qa(DV z1{ZI?7ts+g44<J<N%xcu*p%9GA+&#Ib%Lvs3(PU^h6>N)+{?VpmPg9Scej^|jt7i> zB6Ydw0?CboM8`;tOFW&VVKmt?{b*wa^LfNrB~t7le0!u1L0~nWf<`kE>48ZfT#X%f z8KDT(R<ZWM6Pp!+RIYHqsF6T$TKe?}in2}$@o_J);OtCzf(w|$e^lonivzu{hG_wv zxN{qA?3^u_NW()HjzpSn(J=AAWH0c?*E9h5W{^0|l`Ksh!0_9d+DC!+2i{o#_dfrJ zn+HaZ7=9HD>UP^<M<dy?cKUXgo-#U`8mntx2R0tE@1i3kPHhc0?8V3$5ZU(2Zd^zZ zAAADaK1%6@9o*RZG@_)cYv%U>Eofpr-0p6VmUYfb>#NsN3M}ZNY*gB+XUY?IE2&9H zLFfW?+X8F+okx(632TsVlkY0}L+8OOaxz5S%M!s-o)eJDnF&4VZc}yUTy-7s<62fu z=kAjY9u#^EcrTlI8(rvh_cFa$AG8Vxv<I1aI7C3aV5M4JtJX3f4nlNBkyQ!CFnT9_ zNe)k{Pi4kBT873*r-&QOP<04d`d{~foBK~mq;buS4%p+`Sl~<NqSpUuW9sW)CQsyX zMA;xH+9?t}ORqo~%*Zp#mammaQy`8z*?Nkx9jj1*KLg!bj?T8>flX{V#_z_0q#7|@ z*!+4OLS?;8-F#JO4QqOlT0|SO*<la(7>zf~(Gm@Cqkh(?j~~(M9g5G6N$f70mt&^G zN1!UV`{hMtPkWu>7z0<YQMhYPN-U~k-Z4pjZ*0zna*C>}3g&8Bz3>z(d339yB!%js zTTmdSrt^(Eh*+6oO)4g{qPo$l!~UgN#rh~o<hnvfO=3FZAf4gLB7{evazq`#V09{u z{{F}*bK1`K<-~RZ_tGA?4?9MR)~3h{>2iXSPqUUOSt6IDSg<z&TkuzNU{%)<I%1Zc z7vYnp)YhpT^H)#l<nqbvl4*?-QkE7H%WS~A(suet>WVeqLw#GcX{lGSb6L3})EN>4 z{nA^%Udqo_t@@jf_%W_uof7uq3f;ZC7cG`&TVpI!S^V)Nv$NcoR>bNAA(DrWWqnZG zuQc4hv$6TEaYUlXHW%5~^{)GLQQgZjC$4rS_v#^>xGxAe-THJM+uX0)HD9X<G{0cV zjMrf8VaqA_$}+rwH?Cpd(4NGAbIM=E!256+3HI#Jz|zvJuePlnWc<1>@{3~cYR3}m zqHj8E@{Z-gs2u^GWzDKdHr`YHvuL>3x^q1{cYSWjQ^(-DYqNG96oIfKBAl?=hCse{ z8$H3Q8Eyo-(&mZqG8&!(uAu%-Orwp;XJWkzeVE?fsce|ORdi$>wlz-mA){_66K&!H zsZv~4;(4S3S1}`gAHZi`qwSWz%Qq%p^j#gb7nscdW<f=jH%XpfXhuojJwZ^fQ`PA) z-CM8De77)3MNa&JOBYe5OtT83P98U5CMVM|_8myuBKa>>IpBhVb)yP0+rYdJM?P1g zb~{3fcLY;^u_~hP5I?ZKH7F*q6nUi{rar~>EH9`pEv2`%R!W1SD51UmwH|Uoh|Zo% z=R^ER+?}<lC}u}(ZEZ3=+#Ge5I&>kR9fIa-(F14MIuS-t#R8YVlY^(n%#h4NS9)^n z|E#1yf<RJw=)@zXeQw9%A9-9O;U^t@tm@s9-xA9*sR6j%!nB-d>fHAdN<xYf5xiZ- zO?4mH2Pj(ekl4|l`+H-%MAMojBoZvBHz)!#4BXlIMtqpuCuokfl`hrK4|-{2(V%*( zXShj9dKJB0YyB)Sav?mXmuEP6iwbq~=KlaT54~okQD2^?4%xC6^)MZuT7J5U2(bNF zTT#5=Uzp#%x^2x;ZW7lI=>t7c(IFc*d;;S7Iud!6cb7{v%T=GU_I`~7>#Plzl>8o( z)XB<96}1k{NM=#N1G|lC4rVoAN_5X!Bz~P{M=}|*^%eiL>)**Xp#<M17d20+z+3Y& zp&oT>5o}yhVz}q9#>*xs8%YnzQ`OyVGFa5e!5gUC9*SGEdJv~4h|>|Pbt7VRr1V=H zB*52KI4R)K&cxu)joPk0%biS6$n;3*m(bIHXP{5)K6(>qOufE9B8CjZsIem%>MFby zG)9@q$&~fCyPYIBa5w9qU|;nZVRk&e0=n6g<++aGc@{f~2U-WF63*e`ESF;(&1YFP zoaH-lG8a5<I6%%<S7fjo^rvF@ny>ixRLQ*(9Vlyi<vb38P_~ZkoUo1)=4rRe2aZrG z<F|gSGP1_vxD9i8r5o$Cf$xu3*n6Q+(Prd0n#e8d<N@Gz1sLXwPnZBreZ9!5llP~L zgBV>JCuaMXBFf3CwOOgB0>i^f4WL%p(j}TtC00_v++QGt%ij~%Jm993r|`mK1}8}@ z_1i5$;0)zdp=mOb&5-M>gdD@#;iq!_9NFYyB%_dr9@|-p@K!F4`wWSy^r4E6(y1z` z<n%*OhDpIJyV-ZhJ*)g|*Ct%ju|JPRZLnmsW-_vGaYfu<S9MfJQk0L=<(UWyE378o z({82n=Al_kE5|F++T-T{;1bU(PIHGHG=SDW6WOFoS{@iOH*W3&-k+PCo-QrY0<Jtp z0>I(0uYgOR`A*A{1xEpX{=eCNpxO0HoqeBc)k<&xpgY%m;mbdC^EY)|F8<o!>;3PY s>Z3FV06?vt=nAgY1p8gD{OGk8h`K)q<osv+k){H;I(u9pTn>Kle`vI7m;e9( diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-after-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-after-list-chromium-linux.png index 3465e42e0ff940292aa32966d0e62b7aad4e4f56..3dc40b984308d3f0e657a45759a17989a770ede5 100644 GIT binary patch delta 2711 zcmX9=cUY6x8vh&=S_SI06%irz(u%i?D99?1R4L`QjI<AxAu_^7!Vok8L--t&XaQ5D zEJ1R`T1sUm5H?Yw1e*XNGwi(*2oMN_gnakp-ao#7&U3!^ocH~$!?GQ-{nZqXD)S4y zeQU~ZwpcCo&Obl<y!h1jzoq~1$%U#vFP*zmJdM)G{kZg%#=bfAf4iQEH$MKU<2%pK z4<0%2?WsFwE`M38aqlvG{OeN}e{^*^{E6>X-!Gq77R|bH@exmN?6%qC-e=dcZ!Fm^ z3>Jt-qQseA<(Dn@LxGMXi34Rmh7e>`lL=Gd-ap**_CZxshb=<&Xb`0FYbXSLsF&$& z*KIH1+b$GJ7`ZJXUVw6A(J5%>M<ds~s)(LqSa;%juN!u|q1$1*c6&6TJ8q>rMask@ ze?EJ#JE@Mf*$*k7@N>$uxhPnX7yO_BQOc<%;2ecso~f^~mw(b6R=G|KfECj^1q8-h z4QO)WYp|W8Wha_1h#kKvEO$oR8hcgP3(J_&ak4m?C78cw_@I6+$9Ev{t(wl2wRvlH z63?`5l(IdBmA%Dj@tO>wz$b4RwG3fJQ%p^dizN2OaAXN(>QKPWYa`6Md;(E&P|CH3 z&IU;wO>29uY@sj#?h4KIvkGp{0E;2Jn@fZK<drXSubA(L2J%hFO9kg6-=`w0OC@vz zyBdOkfu~6M7Tt;=F2<^mIC_n%Puc8QC?c;S#1}^N<aiARp1AVPQG4v_i}JJ#y)a%E z7Eyd^?3n@Gx-nylpefd4*Ly*Gt-Bq4r5;@3d^b#IhrE5Xo_qJM)>jep{Cu4K`fKL+ zvQjP%XuQ7EDqpq3n3ts}w<=-%uwmjzblnlCN-IR*GO<tn<QiK1i{5E|J26dAiEjb} zMtEPqN(r65<rzG4)X4oLO7~Ffn{*u-INgw^3>Zm~uTWP8*~%@|_kt#FmUO||Sj8G* z4}(FTWZ@jP`gS_b3akhu&>J`@CPaWlHLW%Zy(8W7%|i*Z)m#JL+N=G?d<pAi3*y>A z|ALstr6;6u+oX-z>W59@R&vt{D=QSLT5X<#%lULH!h&zk=Z704uf3|?3+3f#Qq9<k z4M#28kj?4yvx5RSoK6`}S{MVP<mIB-Q)zl>6LY_LxXUKGP{$l;Smn+kv-(LeGXI*0 z9?QWi2}{p&i*7ELqWif&?VCg%2^h8Jzj2$BB<)hPtOURClxlEuOz2-1`09>r!hD8* z4Q8tpw*s!M6Og<v5-_RD!!WYP-pH;5_;d0d|COqLqwhz@_LlX`So@g_3wP|^CTP6t zG{4X`VYntzrIJD)W>~&y){(;};7O0K2mk)-(u*!TadXS|I9bI%(gX#FV04a`OB=>W z^1BJGviTQCAx9Zj5KZKt<CdiiXM6eE;@eW?t4*;r17=Mk#uTRe=3<`*PG9-GAv7t= z3XPg8PB%Nj5WPN%YhG{Hqd7>2mU>I*uu}GnwcWbi;*x9DvL}T{xX$yP1=gE$xRi~o zeq4baX;oEjB&I17x~2JjPPu>)%1b*f7lmWV@4qtwpv}!@;gpNc*xeQ}CAN?Fa-X_u zq0O}|4S>^#mc!;dXB1@<$V(q}(*5}Un1c`@f<fr?S8n8L>sz>HXVOG~BrZ87y0x0Z z40RZlyteEk?WHTPd*2=lra7cx^z>vav9NrNqs^9&i4DlIJuwWk_oRBqu1>6_StrjL zqLOAGI=8ozhVWDubj$VSzEV#7La|f2ClZjx<^VO?M!x_3ly_yr{Np3g+C`Osd)@6? zmM>MF7zwBjdZP{RaOzsO%AYkqh3i&<B#ep@gN6c{6W9GnW3^(eCdG=_=1tdZu_P?; z^CeHUDT|BGXa*No3MLfuRr*NR#wpjz`srT)Mv?*F*s-8=Q%?k)ru$mmAaN25rsu|> z9|<6M7;n8F^8eUJ+T59UZbl_N3E#pw$uXz=N<+M;ppW{A9z5TuWxw_ke=Q;JqDlvg zbmKh7=h0x69OdRxFZGQ8f1g+o&C;Fcn>8*L3oF@5FZOPKTtt1G&4PrEDB?Jo*2>Bf zl8)Jx#I1fWddlt+$BhNx!<UjIoz|#*5c-}8ImN7bt?j9Mied)EJ`={14o6k0$^;AH zJkIN(3+npk%LuJvide34Wnlnv^9<8BrXe(0E#Y{+ebUBGZLplJm_u{@F+xeUHfCqC z%5U%5ZHiP7eh_N@3{yvlHVtT1?99+mIcREsBdJB`_e|%$N|Yu%KrhnH6jj@<GO05v z?bpUV=?K+?yz$nEJ1$1xI`&?)_Z%S5^v=)0>DipgAs${|0*@=!xhNDiAwyseCB6c- zUmn@}#~AQ%6418FcYD&g<Z($6S=_RXgLiwYPTKNwGBs7MfJJ28)QP!ID-++?O~|_N zAsUQKtKr4clA;srIFk+{V9i3ktZLMjkZa}#e}yrh9n*jkFN6p#H%$Lx90SCnnzCE$ z&E7?)P=dKADnLGbmbN9WV^aumi%h%K`e3C(=19+UyBiHQ%U9|q0BtN&rrt$!q^7Y+ zyoAx@TtA{NYsRbGyE;fJ5&%J}Jq(SKZnKfS42v!sQ5B~M;56cC@e|w;x4FSXqmF&# zd<j&ZF(8Z9`zuqnULMdM4astA|A6W=q;}}oD2PUnKU{UOlHar3cU4ybu4Q()CSrB8 zp#)&Aj#;~{Vq-%rCUr~@PTvFnoA|Os^)n9&&f?qt-{0fCRT7&ls^(TSF8_5GX{si9 zYDQ2jq<;nvR6URZhHLp)VHf}&F`z03ZF%wp%6@n885&RrowA+|IJI)$sK~}7#-Fm) zAJr^7OS5rpb1Sk>dQr}L3}Wp=qr$V&3?pbQ*)0!PWld!7w-7|IVTN^Xe11CXDKI;_ zFUvE>)Rzb_Tw!)&DwF4ojc`TD13uy9%1lQH61s!H_5h*b60rLo<QW@yX!DG|*alHZ zN^o?{e#jd(391mZ{d_3At1zkml9zr0{~U*B_`oKpr`V}(G@h5CYXMFb-Z$}O>Jx{i z0$P8F$a1q15SX3cLNFwx0WG9qfWh%9TBO6V6rrynbZg5w$3fep#Qli_S^E0^QFO!X zBaSvU`5;uK>|iWRO{b$(SwRAJl!e12ExmtUQW*cY1{CP<FtnQk;@y%^;+nrPJlHBN zV|INtm3ovl6qJ4hdbvA!z<hu()%G(O!DZks@J`1nNHh@7AX6eh`JxVnrCjxbSf|0s z0LmFdwyZNYZN=Sg<vi#Wr|NZNT*|^vZPfI-`!>YS0lV4bVwKn0Gjzc#OZAxeAAgW8 zQmf=HN)ZT(f-ryVmUnilQCK10EWuI$;94&EAn3=w00_msQq#%M_p1tg1>#6GsjxPF zz6JF@{Rjl<b(Q%r`Aqyjo~s>3;-61I(BZW2zPa!dbN%B-hq9_Znm(V3@EIVxG9hT_ pKgt6Tgdn-PN;?RGK2YsD0A0Nue6O+v(*ahX@0{Gfskj(;=f9y5<9`4E delta 2671 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-before-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-before-list-chromium-linux.png index 42ca4c06b9558a49522673b68b97f681316a4b45..0b40a571c3eea18f30c0d1d530d3a55a0c6e7e56 100644 GIT binary patch delta 2642 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 delta 2647 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-inside-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-inside-list-chromium-linux.png index 92ec5d6f84a83fc7ea61109c3d1eaddf5d9b9fc9..09b7759829f25d7b53d4d5a1e26197b007c955c6 100644 GIT binary patch delta 2672 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 delta 2660 zcmXw*c~n!^7RIkbLCaLD&!Gv#^-y>gkO&%#3~50{9~EqUiii@KglaG-Lx2poY73}H zv{b1C$g{Ol#S#d!nXJ(uL=yp-XM#Z>A;bVl$kda*_5Qkdopsi^dw=Kmef!p6?_qCx z!RKC`N-V2ZpYpVI{b*hOclo~`fL^2){*GLEc1z9YS82CGRua1MPu$Ep5b{qO&#cYs z>w6z;{Lt<6O>i9gQqI5L-QV}cn{|8l{kQ$*F|<SQi;lB~swv;jfGaC}%X%w{Wvb%z zBqf=}%j}pJ-nQ^KixW2xeuWU!+wCT0;^37K{Img+t@Di+6|8}v0SS5=BVakS`HMTt zpe+QyxVV(w>M;$|V!R$R|BDBUdvRW{z}NCrKgSnlOU9i^gFC+MxF3DK`P~mA{-oJK zuy8?<#iTCY4J0qFf>xou7>6q(SwWgtzOaTdVjqQB4sC3yBLtsHd%X)b42;b3VZ*Gl zafG%KLKk{64tG8{#8Hb7q=A&i_HNQ-8HukcQ&IF{Jnj9xJlawxleRQff!7&hbG3ye zZah73v6rmkRfL!2%>2<<2z|GDi`eb$OpNx4vVoB=(Bz?LS;>#<&-Dz`49e^4y-x5c z`okw+(+r-eGP;*%jW@~Q!U3YdG}}B`KITORk4;IXHD_Lztbx#9C-mVeW8Kp`U`%?K zJW>EEQ8dX4dt%7SOSUdqbAQ@edqPSq!&<(U63OsQl3d3d$D7k8X9X6sEi&~fH(OJl zGyQPv!b<3?b$GocY1i}a!(YoHU9v_mX(awch0YxZ>s#AHQ9Q#ehaTuGI&JHm{swL1 zudM4diz|m<izyU&;rT?X#jJ{L`)QkSLB&z=|6f}fX;}Y!Z3I%l#y+xvt>PGEC@0rC zwL6lg8<Udik5(RY2w_j2v<OUlK7;0*wusHd{&Or|_@1fz*S9}OHjcZHVTGD9=_ISc zS@cp_WUd=I{P$&0^leXrVCqeXlWDP0KsBmch-Q?HQ;=@dE}{EYs7rI|*t3k8Ze_L5 zQP}Cuq+IOn4lvDkhC)yGs&89XXQ+7EVRmb-1HvVH;#Q3e=<n$5b-a4??U4v)(-q42 zTIR-}@n?446#3mG*d^!vy{OtVJoODCW%QD5xym@zS;30oEpasxgGmMBRt{n(OMMA( z<<!MKSLpOFFWIYirO974ruf|NEybpZ3M2nGv5Q+5_u?9Z$j_d4Vh^0>IIP}%zpJLj zg$zy{&KyXI#8Vey^PCqclY+&1mNSPg0zi=3wpG|WdxRBlch1CEi@&>*ILzJTd!_*R zBU3JAsyIc<>=E!_BOy3tuu0t!<{dbm@A}}YyBFu%L-7||w@QNyidE3lI>KeD`Z^xT zR(Rm`ZGYOLxD@>dyX{S<O-l<K@D%kbNLTDGc9ZnipUZROy#M8T(1%-e`-q4D_47pW zouO2r1KS?j*vh_I*BS0_`cN!Dy7;lUA8xa_0E<u<g4l%1N^tQEde0xxjalk(p%ad> z651?oxF_}&7_A?amz>*g-51@gV2k<2cixt{JlsyN6_Ds9`|6^iR!SRPf!f&My}|25 z`m@#UphL{9#I-4+f=yv}Jfj*2eP7x-?_3V)oY;h5>P+;=(y&{JJ(T4bg}HFX3@W0? zeVKPLDg8?eGsNb1cV5pBX&MHpH#YAhyY(kw(}LendZ)Eb;6Diq7|d!eONtMT`mXIZ zSy|t6?H?ZJ`Fi;pXpYrJj0-OnI{Fi2aAGoh?5Kdg8nTRkRdnfN1l;tc==&3#OyzII zF*y^rLTB0H?V-*YZy!h1mS@ZFwy)na+a!AsUbcsp*!ttvBDX^&IM}RvktPi!jZn4D zDOUj^NsEd;SYU3!nJ+Y%7kcox<xs<CQJ8yYB&GT;7A+(H(GPYTT*!(VyzbeC?R?!h zI8{GUMC2$N?!j{y)*y%yYa~?fHrM?YRvc6@41MPVWH?rJ5)1I~sA?JqRgtxv5mP;j zsx0u8=*(IHu0PnlEWP7N#*8Sm_hur<F@)txxKrT#n_uZcdrGm(A@f0S6Sdl5G7+Hk z%2ztb^(kn|9K6udzWy^2fiwGLMvjNio~S+Znw=<??3sBC=v9~vDpWLbf1*&ft)kQ? z^I2aK(=;6^$gyStId3P@KWTS%Z^=n+mKyAYU+riKm^@Mi&I)nFCa`#mB|+3B866h{ zB=Cu9NU^6b0+Y!=1eEPM*PU$VutVF>$V>6$+JM|{N$!-ua==nR!E4d_yen45R{c4q z3shxGUFiWn3Ekih!$C4R!8)OKFilz=bnN@uBq@LNvYlK~=5Kb*jU!tOBe-=FEZRb4 zX9Uh<)JRbvOzwIP*nmrWGL$($oj$@W0YS+bUZ`rngJ3H_u{j@F-9s5R@hvDAHcI?e z#_mRb1_70p%tx8thYGPmwG(ab%GR(uCo{T^T4|W&sDdc(KS?b<d9ih_1N}K7WxAOT z8)d>u84K`W?BU9HF-?jj>l9fFOm+oj99;$Vwk7mo=6>_0ew+Ld0HcjZ8G3I=#$fv| zhJ-oL<43{}Hu11~Y3j37^z**M@gYSf<0KB%;M^jK0#l<}h9!iar>W5U5R5xFupeH! zTFgrVlakmXc!zDbfd~$40%EtKT9~`$?I#IL!{B7@p;tiUf`&IUc*{~GZ~CZ^K-l=R zX}$vIT!rc18H^}5k8coc?6#Vy=2&$7*)H?}7-1P6n>rE^Sg)S~QqOC9@VuM_9f>!w z)qB(5N-}nPL{=d&w$?%T+9MBy=bHq2(9-*4v4j6T0GA331#Dv5Pky|qL&7$X81*$j z?wAAVywA?Q<6%kwt_*hp9bh7=k`~#;Jc7}oOO%9!s&4}}HJlOHG#i3idLt*kqhpk4 zM|yNlXU`5R*HrBg$)IdR0Zy#m=pFxCAVm^xfO4)NmVPn+QSA2(`WvL7j2<+BJa*mb z*QVH2jj_VqnhL++EZP6me~y*^9G^QR(nxU@;GWrPX%iSEAi*dghP<g$VR>-m2G8TE z(+?}mQdTBN=f`+~dAgG2GVmDbyQTk--_ZP=(1}hRf#<+nGTjVu)V~kK?WyaxGEQJP zZuJ9mVFO=B9x)7C-BZLgPKa(G@(Q`rk1F>=Pmj5Qbh>}A2>b}7D{5NGGrFTfFsHJ{ zewZvxlk^D83vf+j<m2Nt`eO-}wbq{j^lF0;WlpsYz!)T(n9Mo_I@C~Kx<!;zK&uXn zABFoTm)Rn#)2BKR=bOg7h}mL0ym6u^f<J!EW4(6_7chT_8ALrGYJXrE1u4)_a!@0G zjj+MELQq4QUNaftvJCoUvlxOtP1pq0K3voNk^NG{kQ{>S|9x=pm;b3<_9^A#+G>05 zvYloxF_=jp&Q3FyED!`)ED?ln5a7kex^V?m-%R*osw*Q7tUw3%h3~BjK7IKwcG{`+ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-indent-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-indent-list-chromium-linux.png index 40d75be4921c19f9c33e3bc75622fc90efd1ef8e..cf67aaef49e3baf3f455b2e8386f505e1ff0e801 100644 GIT binary patch delta 2218 zcmXAqc~p|=9>?Em%4wX*<LMNY3#aR(_nb0P%MFEQTC6mjrd!@Zq#|=ll-y83d0S>` zrc^4;B}I=qYRkBxxeH|lE~sOUA|jAdBC@#w0s{Bt+`r!EyyrQ;=l49n@Avbq^?mL8 z$P<ivE>1DOS&Z$dJ;DFy-@FH5PYR!r38_B(ey0O@KV~$~<s|3*HuvNNrD9;0<BsEp z$ccY%z5D3!zpC%eW=_65mu$B;>DZkY6Q{N&wVT;i+|3F6plY~K7EJBF1Y;|xW*R$* z5lmS&M9E4FNV2jJ01ohHhk3j(04R)I=7Q{}dm}K=8cF!s7hDe<zO`=yaKismPpN>F zX__B<<q)*+rk<vKm1};V_G)={P}q^8I6Ds8AGvB61}%bm^B{@lQ`fybgyb$h*tS<} z66-O*t<1h=B0Xqr;T?SKlbs()9K<B92O1m-^Hq;YnF?$;%J4aywv@Zk9^4K!qFZ;N zC1fa2@z-}wzRrogyK`j>&}x#DnWkjom1;j1^2B8gRbq;7o4zNCVqP13MxY0iM=Flh zgJuO<`yxDBCE5%$@UIG71B`Q(4*s7E1~6sh7z~&2VVkTBv;^y?l5~QYvZSE^eiT*J zRKlic=Sdk-C%h5-SYTNyU`LV#(GtT@YF*b-|Nl!ZOUm!N25PL6Epft?DlQz%P!2~W z_U)0CQq}&dcW}#s9ctnB0D`@S7R_s*cE4tN;gHKb9~dGk$U8o4fVKJofm(dObt`a5 zv)XH2mgw15^W80hzwn=qVvuo^hU=r%A#gA=StoBG3YaO1akGj9QaRW-ahIWy>q;HK zioH9%$!IubuH5T7mU*@BD`3K&sWfQ*%*9apYi2lah?E1>cxi(CV^w(jXNyS#a<HfQ z_>~ISU|rZ<&EpW)A^@O<<eMXq&?vZ4qgFu=oPUnv<Fzj%%<^!MVgwBjw|nlQTi0ah zm<UcoT##$Rdq-Q#y-e$k5P0TFb8|idkHV!dytPYJP9#7dwA4UKd*`%$e`FdTm&!<+ z`D65Hwv!)A8I8z|1{(AkpFuitvRR(bXdy`~T(l*DvbHLv(+lc4=3n{@`4gDnE<=jE zs(?0aj|W#r=(H8vASYw%T_gh=VUY`EL-68qxS=;>{I3g5m*3s1#kSH+LWyOP&mvF% z21DV&ux&tTXmvF8Y93eBDnSLa5^EA}YP$8V>7O5CTZo2f2hd+Ys=fGn9y-_x%{N1u z?Uyruu_IYN`8u}j%UZ(h?+x4bp3lnKO%*Ak^nziUZssAP6nd>VF(mNwb&&z<fJ<r~ zk5`y``)em~0ee`F_9)9(sskf4+T_*6vxCKcK0Zx~87@lK7{OY4nro%I<@jG2e0C@t z56+d}=a|_hk;Z0)<M}EO6YwQZ7~dIZ^xIS&->n_rXumz{11`MNFk4*qGYL3cv`=X5 zk_BthXa4XYXE!{Kj$x#Xd$vw_cP^PERtqSmYFuKVV&-4>3EkL`P!Jt+6<aa>mmwEu z(zr;LVUUEG9ZK8q5QZo<KMbd%jB~hDk+$3+bB<+Fo3!;{FwVJ>xtKQpq6QPbIv0XA zKI3;?GtTmBv3|iZB|$Cj^=ymLjUKdA3pw;GtN#!`GKuHKb*8OO%Rok|c!NXGfpvh+ z3vQ6O!SET2`JPyoMO#nL*?IT*@-W&u22ny@Q-&(CC$N`98k+uK*FB`VjlfKbN$PvD zhd?AxC2&uZhla(g96#3D7X+MZvrTK9(APUQPXK8XZCRwVp^MmDgI~A<%ZlJb0=O~u zvI-0>P#gCgZ>;@q;}z}vSlQ}(58C2GeAf3205BC^7r3??=U>%#syiHy3=|;Xqm`}Q zsyIUL!6KxTL7Zw!P>k2+GVV4;59GUKEWFiZ$dEOrLWqWKiyS9zfOORkz54dFpQxFv znjE=|Nbd_pEf)=E-RfLh8sLVyd3k_Hs``%o{vGvdinXYys4^#T{z>TmfX|PPa9T6e z?K0b#!yvY)gst>5f<=fHpKjabJZp!j2!{^ro7(Al$dv@)t8eJ-M5kC=mvCT)_|L>I zOfShUVa{k0#8-T_%W$Jh09933VP2_0Gcp6+W5U^1h%@(b2r&Ir^E$wEXP>Zp<SGGv z^V<r}Bl+}wxU0y=<>+9!4Ts8#oYsSzuG!v@dpMSv^s8^F4Q$Q|d)WSxmPxZ-g5Gq! zGYVO1k;1KonZ_O%YeBAuOJ?gLT$2C(0kS-NS-=#TAga^2E~#0yZv=3nvv&DGMAsE> zum*!vHJ>i_6=mv05HKi^9Z}~w*g$ogR4u-KP|#czwKfAoFZH^0M){Yjb^0P3wCTaR z3FRoxXA3Y95;j04W#w?B#QrsPD%+{tw<xyKkt=L7>x8y6fD91^3(3xQH$h(X#Xcg? z6OWGVC?AY!OOSHBKq6IFOg}TVqbJ*IdPRQkJ12MG4ayxVX;W5>W-s2*zvBr6&h)XD z=VD6JXUia<$zMg_QpR@1lz62NF(~sdge`GcHqD&elz8L&$rK1(!@+u9d{ZgSDCasS z@jTFmzL6WYxT`9N3OuFmu}5U+ifx&p7lEmg8njv7NT4ceTkCM0<n@4(z$EH9B}zzl zuA`Ml9D-MrO~WiDa{yvTx-hPlakFQ$bj%am!n1tSDEk<SH-7ZmY*OH@9T4mVAHEC} z&~+EP(iWAP-Nk6o0=dn{cMtctEEaE?EGDrGP~M48dN5X$e&{cG`_9(2%{)**4!yNu zi@&C8`8Wkbw%n3Ife<qb;W7Rw=PTe=yN{2L)Xm!D<@l%Fw?94A)&syd;*&>z_)pUr z#}}KMK5ceecW{Ay!57*F!3|?}006*hb+7p89kkeF+qeOc#PW)+gr4hx{s1SBVUE`Q Ic<Ijn0B5`6WdHyG delta 2209 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-inline-images-within-lists-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-inline-images-within-lists-chromium-linux.png index c118317134bc3c9128dce732ef04defd5238cf41..5eaaac2e37b3e15e1283514b5ed0ac0884d87ffa 100644 GIT binary patch literal 45651 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 F{x8tjDDeOQ literal 45869 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-list-and-delete-item-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-list-and-delete-item-chromium-linux.png index 23df33d07749b0ca79ec89a333dc278d218f81f2..133682358902604af88aa3bad3e08f93a9580702 100644 GIT binary patch delta 2268 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 delta 2242 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 W`1J8p|KWoj=!d}I@5}!kapQk`T@5z? diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-lists-in-table-cells-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-lists-in-table-cells-chromium-linux.png index 96aabf13177b914d1e811615091eefeeb9021256..a31bf0df907793013700d3db380d9297064ec754 100644 GIT binary patch literal 11161 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 YAHUy!GI9G>xPq8|XK^U|+Y{&i3Y3XzegFUf literal 11782 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-chromium-linux.png index 40d75be4921c19f9c33e3bc75622fc90efd1ef8e..9b2c872a857c288d3fc34eca182dc06b353d5d68 100644 GIT binary patch delta 2238 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 Mj6T@(L*m8%0Yj+yL;wH) delta 2210 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-with-sublist-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-with-sublist-chromium-linux.png index 818a08ca4694303d76c80d55764c6b249bbf80c6..f86efc04884af8231eb6f40f62f971f56265d582 100644 GIT binary patch literal 8590 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 literal 8555 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 J<=<Yt^<ODczU}}3 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-paste-content-into-lists-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-paste-content-into-lists-chromium-linux.png index 94cf58fdd369fbd292c1148e2fac4a00ed90d270..bdbf8e2cf6ed0c94b6b43c52cd438d8797214321 100644 GIT binary patch literal 11579 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 U&)4_i71Z~~UB0dS=G>3}4bCW<{r~^~ literal 11537 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 OQAgMBOTRnw^S=P@N;ok9 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-press-enter-twice-and-exit-the-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-press-enter-twice-and-exit-the-list-chromium-linux.png index 9b8042b28559af97255ae527061a65143598ca62..0bad3668ab6a0cee8f361ca5baadd210a8075aad 100644 GIT binary patch delta 3587 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 SbtrfOojvXOW7WwEzyBY*r_|v9 literal 8471 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 I$Ie{-7v$+mssI20 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-shift-tab-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-shift-tab-chromium-linux.png index 23df33d07749b0ca79ec89a333dc278d218f81f2..d23ad64ef5380abb6956c004ed2198e32c7a8cfe 100644 GIT binary patch delta 2253 zcmXw*dr(tn8paQ$Ez4j*>#U$am>pKwu3`oekXxdzO05WEts-)X$|c$W0g-SC$w956 za)}h>4yjj)NDzX65Qu0satq~}ga8o&iGhTW5E4Re`?0hA@64I+oA*8M`~05g^m}o= z?zzFF->Xv%ZxlpP@e^E}P3d=K|9pDp{^k3k^4e=dpUrfS?*!Z{Kpb&9bmu@q`-{za zNz&i87`EI${HU>cpJyHK`Ds;rt<|?dvGw~>=mfGrVC@imuH6oYm#to(iqL4fXgCcI zgGUL78XhS#GxH1R4Xs5tIy(9#lpUF%QD9-Ma(*iW5vtt3<CDIC4rK2(hrZ_~yjAns zQx~;js_BVqfW(8U?Vn4&$Qa955hYACOD-&0ZQH%J#zGrEbBwdLOgj!)(;;wV^%c7j z4T~7G8ANayX_7T13qPC+_L(0K$2*33nL%93puUzqG1{bs^+G4~TDOg85T=6DT+0|9 zA*}tXq}&syo+iqBwz35#qlQ9OJ<f3=uc36(l@H!siV0i;ssH#HT0{o-LXKNR+wyxP zSz&=%zSh|32TGRi=I^m^%34nB2yi#mv;9~4bCF$ZBso!#&^o0qZe`3rDGF{^_U>|; z*RKqsO~c2LouA=HxyI!jbY<Ff24;P@WY6olUoD}R?_zjc1tZn!<_wecVGg1^L(*;G z<e;OAD^u9DHPybsM3&!lva-ju;cVlqU}|9yHm>}w$vu+z&VKskrJ+ZK$<gNsGdFD$ zc}=ljKvFv=Ej+86;B>W!tBLGLpP65_##xUyU|^F0)(oN?w;`h#nX3zEgCxYHJkvUz zxoB?VpEOq($fo5@4HD&@X+aa#K6Cd#XXYE74Fx(GUWUBSzsBqDE+yx)9vAp7Tqv1L z<wSz(9*ZFvy{F<r<F3oQbW0Tw<ae~#5W-IrkXXX`5)ApzgBAmk=ug?^WRp&ShL!r8 zR<;E!rg61_zAKvRh0yTvOi(B~hG%NNVS`G4)?B<hY%l%FV1OnlBt-s-6J=8BOS)7~ zfd<ZY5M)~d9o*?niBs*^fW@$;O%S1yqQ{r4E^-8I1LO7Kc&0&JCIov)VqE3LmQ<zB z-YH_$6k@<6mcFu$fR{VvB>akKAT%mtel08*ZBW5!M(!q(*iZ2K%6zXUZaf|+E*GPp z#iDgQ5B7fHopr%aW}lcn&G8+1$~LX20$YIO#W_qSvm7lD>7Q<WW8bw}k3WHEW&19^ zC}GU)q^^(F&^ngdPeukhrj9;8U5A+0CyQ>sjO{DVcg`brTSX<Qd02Suol`ZKR{ZqB zSX~JcgEE88bIQug_qr7oTJC^9g&%0`Q>j#-=cKin93+t6M`ubz<Hh%)feP1-kM1l7 z4^2s~4F>}o7#S<io;?%o>C#Qfr@@k4O?M1xK7PLU0VRT|nI^IfOyz@yASk=)XmLVG z2w7R=+!yR8Yp!ePT9@HrU52<S4X7uWP$(?$TjC3h>V8;mSDHL>!h3*<hIg|AWVh@S z)6aIAL9tEJ#(ZeU33VfdBn6|C|GM)y3Xruig3g8KbuJwraTwi%TX;)<{>#GH<0X4K z6(8)ep=2FjFbyUq?6-uL_y400!AB6Kiaw0-N?vbVsP+C&**ZBBZpvjWoNhSRd}#=l z;<I+hV`LMrqHm>v_KbQlni}TtxJi+&SFi>vmuYF8iy4E&Y3?;g4lSxPQ&gF(<d!o; z<v45q<u{>>*}vQ9!f9=@cmHD(a8*FkIHK34(gXp3+r42ek!k^K!ukuhd$6K^^!!m2 zizM=5Y`5zkus~Nq>E8&nFgwkKPw=t<6u5g;ggICU9Z@>oAcBR@9H~eI8Y>L5_li$n zsSxO^H4JeMT0e6ZRu)nH5uv~@#>23YnUbd|rn@KOfl2wz-#<kLMn%n1_F$_sL|;PO zo){i1eU!UreXN0;%JvZl5vmGf7su=Q&6h`F_~+wc#q4{c>=maDV^}C7^-Cm@MOsH< zrAGl%k&lmn4Xbr$>V0Q#J69W3HSnCX({{7gi|_9$hV34lXjz?<)KF1TRYX&5ZS4(f z-%I*Dz_f<j8n8Ng$`yJO?9ylSpsxMliUI}zgHM>eInvbAQoMu0i6Y8Cb*X0qoH4N9 zF4^nn_<g($y)?@9r?3afYI>v4r^OlD;3&_EJLe^wN5WcXxv4{7NL<=!lj{YY$KH$O z;{aZGBA@@^cPUt~GU#jBp&Um7H-)O3bho!Rr^{iJF8Vi5p4TD!5O{rrTCn<+)wX^{ z4?qUDX;>8HS8be!k#HHQ9jwD&X|(rFtR#*BetkB!hjH!bEC#p`%sI43-CNtPq;Hen zTDrc#Fpb6GiD7L?GrKU_-bQ7m*k61EnK|Uf&vU7`Tw8-$t<?YpOj@x<Sb7wlq~?jQ zSs+SDzTQFr#vg$0tfdrc$NEAY6D$QjS{~md!|f%5<Pc=746qzh`t{ls?6$!Cd>7pi zg}hHUW*1Gla(K+{;XqUyup{?)qN;*&a?<W?!c=>zXd_!({x@sH22ic^K@?Fk{M05u z^=E!cJn(5o=3n+?Y8O(_WCpbl$;?_RSoprV0XD#kty2Vkzu1t&>0C<9L1cc`fruLV z8Q7}kwYb{vhow9ZcDky9dUg01$P#f5O7#$kq$08X^4Rm!TcPu=MX?l_H&Z(hpqX5` ziOibe!Yv>l6$`+x;+Th|Oi9^bmZ<a>gMtD_Fwzy$SwQkpq8oruP5ej*0d;oK+AhZb zP>|2wh*0mzq<5!7BU4pFf#~%Cir-S(M%tC*XgrX18)i~iU6f$zP66?=Z{<uwRA-h} zX$e6c?9tKt6umjUdvmtMrs3HeY6!A2J9hZsPxO;pSeEqV?f*90i{<_Q4`IOsL6FIG j``Xb;@bLA<F>`3s@XY3a;lu~Q8|c`P;KQ^-=db@4tla=S delta 2235 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 QcA%g9f`6>~SLDtA0y}LASpWb4 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-table-in-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-table-in-list-chromium-linux.png index c9e096cc1c73f57c3ab25494527b694a0f0fdeed..2ac5d7b883fc0b5121026652c3c77808c681765f 100644 GIT binary patch literal 9224 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 J*3t7n{tG?y_kaKZ literal 9213 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 aU4g7mC5Mb+?VR8Wa{Q>(k-|ggZvGSgJ>q)+ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-turn-text-into-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-turn-text-into-list-chromium-linux.png index e8e00b991c1b0e8550c1cfb409106ad928e4e394..0d95e3e161ab928a3bc4b0d2fed755bb45708a93 100644 GIT binary patch literal 11718 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 YfAKF`cN@SPvmwapi0x1KA1}oG7pDRdRR910 literal 11735 zcmeI2cUaSByT^ZuN-H956{#Y`)+$w&1pzS(tyPK$R1q+&NFgA5Z%9-s)B%VHNLUVr zvZ7&x6{1pRfK)(22q7SwumgmUb)IP3w{OpR-_vuh>-=^2FUj>=d7k_J-k<L`x%q>c zk@VI*TOkONHvay*3lJos0YRJgf3y*Nay0x-D+GN48Gm>3Vra%RBkF;5Q0DxC=J5PJ z^Zgr+r|5nE`IvrmT>OdqpXfAymU{Q%CLOhu+<oOgQSHNKRxXb;eE0O#Mq7zrPPyB5 zy7bSabZ#7Vcldda$yWI<Vs<@lez~pnqdR*2NN)KK$F!F|E(Vo2YVP>)adMib;j#>q z%85Xa?^MwB|4IUSSS71!S9#?9i(HbDS;m7`H=kAxEjY=*(wRyUkl9J>A?4O%jPCC4 z>ArH-{7^k2;A<6?>HeyKEzn513cNjMPhm-kcO!gbmt=2MfGhaa*6~c&SwsL?m5|}r zxI19HqutC7TXfb`+h?HGM6K#8kHhBr%iYP=4m1)*)c*)~6FT8^7iH?snPu!Zimzpr z)LckGaW#DhUwY9iP;tX`yjfnek->!@ez>~<iZf2pdgg=S(POtOgfG1@vMsxkINGu@ zLl2qmP1M5T(94BLULW;L+@9p$4nArbJV)eY1@#~hSw;3W!SjQ!++3UQeqoVsW(t>- zQOwYfSebb9gtsyS4_h3Oghd_+8B0;M4d=`f(SkJ(98r5_8_Xb*hDX^FyiJLgHa5o{ zU;iX6ug#|+{l+sx9Q+z&cSFB6J0p^+2d_(Qm11+}YLO)L?Om#8;f2<?EKOIlzO-+g z8as1Mni60n|It>*`j}iR+j4iyJ(PAzdxma6XO3~Yw%1{G^=vJVo~6kyWo2cH!gBYw zhXsS#0@?9w40;Q6)Bv%P=Rf%J+9)|Se}0dq%Q-(kKdhz+JHXP?Qd;TG=ifZWh=iLr zZ+_P6?%~lCCvR<KWp(l5(ZGpc<K%U!Q(+J`Q6<8{*v-<~TIcf1t1*eUZrv(7Ugb*3 z>UX4M=?B2Q`pS&y4#aS+y|Z)zuCC5N0>a)LPa!^=X4L3-b?xo-8-Dxtt=m}@_*!I~ zQxm)9@m45fD|o7V5kfQyg`$?&Cn%^NI%JGW*#KQ@!RsW?GHM83bZz*W<<<UX@Froe z?!7Ij-Owf_GPb)qh~*Hu&@eqwDg^t<9KeVKZlEHB#kK^8vMX=&IsF05C=N>LsZoNW zTg{IRx9<N4Zeo#lF3k{w1`ljvVgd^tyjD<9;LWIR&(ep(50#gfleq0ZogJkVg9xzE z<sQ^Lftr1_GtE{L+J_Tw(L$rVyy92d<4?;<gIGQHt;`JtOBD1<>GUtT%dIb*nmRJ! zgvXD6Y`J%!s_CApLv3g~R%?b%PzQUX?PU{;&kB8a6O?Gl&^*?o#F#FFS*=IptD~S3 z4zenjo?m|V%gx>S3GL}RuI*m@B0-a)fi}r}3zTvFhLjvuRRa3x75h^&!-j?i1pCm} zUr+SDa1!?s4c|r4HA1ydS8aoul@UFGhrL7jaT#L<s?ch-aY`oI-Q7KSrY~r9eyB)y z=dN92iZ)WvNa{b@FXUFf%yZCc;B*~CPtMk@_-C-=A(yk?-6NFs))fjLDLG(8K9o7Q z??$$R8~(5stu~CE0#*hrUD1NqKy6r05hB4*7<&Hv`D}xzlA77-5F*QdH+0vh?j|kA zAjq<%@>M3L)`c@pT5dCkJrfw7I-Z|6eP4R-F<*Lx7h?bSQh7T4zV+86Brl{f!db<W zzF;Zb(l<a{mx`jvGB5j8j4&j1uB61lpD8stFGLbAg`?9seB5?|E4|d>c@%F&0Uqoe zH_T&-gagEg!h!-Df_LV2c+gbfXtK3p)aEXp2H3;46s^o^K`bt-j>|I?4J+3ppGM^d zkuBED?{0Pb_q`nxqVGk+=Z4G;u&6i+G1Cn!Cpkrx4hr$<`6p*hOq9+&cn*4#>R_13 zC(cEwQ=MCEnQK#pN04al=x<A#HQ+bM#ajFG4mGRQJZD%?W+-MSNoc_?Rh#?4Ryc>u zi2AWRyEVbu9!K+6la;Nv%WJEY_Z3(cc7_5;=nNifOG`Rv+E?ag5f&C^lbT@=6%NYU zz1*tUCKnbtvus=8$z36kh(kvNDP_co$G5?^W;!EExg(NiJEBa;xt!4e!NSXH6692M z^C2ylwg>Oty*uiv?LX37wu$EZ`sYvguW{y(KrL?-S5yS|SNeg=pFVy1RP1&}rQa|M z^Qts2Z>)muZF2j8oI|MNdmZ;sv^bN^dvq<++h%@AU5AR|CUq77U4MCXgY<q`Sy{Ir zf6#GN^;!B6W5M9rlPZYe%kIbe2|mcEC;_s1vBHa9QZ<GJ`aVK2E7$<#cc_X?XWFc8 zXetGhMy^*NtA;tEg+jT~+P<0)pT0cZ=fjPKg@s-BF9k1g_cX=BLRM3OI<GX!`_wLV znsj+0Y<k+Dt7rC+v3*MkAuRSvMUsnt`NCurqHZ*cghU`{pt+rzOwOLYkcLu1vB%nz zl+5d<3JSgJxMSO(D@XA~#)6q&)uPlrIUHtq-Zxm4Nl;dxR!g5CH#f&k4-k3HiTmB= zNAN1ep6D^n?A>~y^Kzus25|B@JSbTY`%p&mxE|ik=eFk7fe^pgn1xsjF$5zR@`wrA z9q6~9<W0Yq`A|_mJZI*Xtn!6h$;rv4X&NXYp9@BcimGbV;5A90PN2NBBUYxTbNFmS z5xb|@){s+0(O;W*A|36T9Tl9C37RDA02$k{*`9I^r9JU(dvv@TexyL%yU)rV<DH+9 zJ5FdZv$MhNg$IiVukzu;DJqD25h}EI4Y#R9h_1RQ-s0k-TUQ=RiFH#cD-^U#2}!u- zB#EnAn<`?Mf-bh+EVWDJ!7;xd&kPrW@vh_F=fvjK3O`QQ@#(<QR}q-S%5u_L+J>uC zg746`r6>scBGj8UnO|9X%)<c86wsPrHzGA{gV%J&pBAO*r@nt?2>SLeDnA>G#e%`A zU=VrCWBZL8H>zTLHbUG3WHZfYjRl2;NKxjyIKhVC+5R-31_#O5i}aowRAgAkC`#e% zK<6Ttv7F%D$BTpMi#o}%1FN!~&X(@@F!q?LeRUwCItVdrOF~Dj*(d0)TsnXL&1pIN zz?pI?82LI9&|<sJH|gDSN`VT30W(s+oz8F#UC2s{f+==ScEQ@}hZiNc@2vzJQS_-N zqk4H5CR)9%UbjjEieJqtiCCezDw$_RcH*d;Act5QJ}<x_HO1P_CX$Dr2@&z%7I7D_ z*x+I*brwSnu0<#KFkd(s^&Fc8=ia+_ui>^_KB78sHH%X_E||lJ-pG9;-2q*#)v)ae zte7dnfrYk98r`cGIFcNlADG(PSMDJxgD$@tvu(FV&{VfIE^K~qnpO(NTV~3huC|_N z8G{G#0H8?32#%TZy()sH^at>8)9~zmdOkNdcgMkVy+ENna2R&G4l`noSas0E1`tq% zs%?dMf09t`Paf{8@&1K2r^@neGDkN5lQ!wQc4U-kIyK(OHA#(!8KOs9lj~!oO^Per z-xf@hZoB_knz%)X(meBQ2LvL`rr5I3YElv@3K0l7BoTkyP&6At;w_TZDIe}RNXIZ) zZwd^uKld|xOEM4*$9mxTx&Yu7N68kUal1A1KpnNG#qHI_gMJwL>C^pZmgbnGhY$D3 z+Io4-099&jZ3Q$Evt6OuZ@7`Pw3%{LDfM7)r|$Cd@*!bc$_6nZwqNehr$kjuO(v6y z1S6K?X0;mG6qfnl<Qa8KYBq5i&g6E$=V~>J<LZFQzyuRUj71qJ?v<*jeb6ww$b`<r zEWeW~$3=Rs(#U8BV*c!=ti*-mE3=IB3b*akl?yvB{J}p7aK6d$z=^w7CS4s5Peykh zr87d9nJB851zJ9o(kXRamPo&>FnA93r6;+RXS+*w>1(&;!hDC0#V<H~0r=V__BD!d zhYJ_{{VnWd^p}3Hp+(L`Fw^0lK&c4cjI8jfXGI=Bqf=Epj*ka<b3>k(bZ(;&Jw(2S z2ppl@jP6><D%BH9+u{7_3F{61`)fkx%<Pl5n5&WN*qL)V%151PLIDq4D}13rPNzpg z7aGJI;eat(p1$I}#;7~=grdNmji0NjtOql`sSd|(Mb17O2sk2`)T*ym5!&IVe_5V* zv){|Q=+eS3JIr(VSPfJwpUb8e+gc-$Bv3po90|R)G)Zfz2Gf#?LmGk_D>q^UcA4U8 z7h8=C78AwOvlL}I-kdmH%FeEH>!%CR{IFu1ozo1=Dic;nT%L6ez=Z$L)K0lQiGk+L zOyZfs6+)MzNGOm~x#YVPA;A;V-qubLO6+LftbU-Wm0rF94)c1fJ-u{H8{L!bOhXFV zpqDJ$O5aB`4e078{XpFgsi}2f%}<^@*%Yq;F2ZaB@YSJv*u#bLep|(dIRjnH%X0y= z8!H3rz@Bn+bew%u4xK=^;JeNhyqKDrA}yIM<Z&T*$gH?21IQTm6>9aolI8%n%T~SB z?1z7HLpGq{S&SNv40=A=<<7TI=nl}u!*ge{>7zxv5Lw%P11zVrn$Aek8Z}@JE(z_4 zR`J*(M<TXcriO%1+>|Sg>;*$0ULj5x-)ieaT*i~tJeYM+z%*<}^mGFnq#&aPh%!|E zS_ltsQ2|i$RkUP&<`<`8&Sf6gn%S!t>bo*cdt#ITz<+L}B?%Te|EfO?kchF#-G8u> z+j)OhPw|s8afek^GmkjFj**rZcKU=(Jc<R}Bgj>cIwS$@iBs`#hhapt%;RMb0w^mg zu(f3t;mVuGWl4CqjtpHl*Ty@$O;Xhq4AK17WaU_C`4k(kw*{7NwWn`eQ_lf`(sk?1 zF-_M_PEDm?wLCyofwB7RtxdUmGJ2jOyd~gqFkCXS4sbk}{Tk52H_iBi%M~4}I0f{I z;XrAWIpa~$r(n@8a~DSs)q=ZO*x6-_wVjFIi?FnO``_|WHZc_ga9H7ZU?r$!P3Yk_ zE#Uex!^{<y>xv-M)U@Z=1sh<4q(49M&@t!n<1dTNW@)8LA-$!plzubd;yNp=aSqb4 zz)u$9aE7zj%?-FC3L*V|zxiQc6(2;tD4E<g7txbDcSWb_p=|f>SwNkCK+lzbXbq^O z{?xCfq(oo+k^tB1cyuaO%r=4Lot>S4QJevzY(rc7-F|!>!}XtYk_3+3btoYuhlG!8 z*2j?Wc)SO-q$xi2{{0*cve~Zz6n(<%Qvmjbj`LE;)z>ow<^X#?$MrY08Yhu_nSF+8 z$U0nY=;iF~g#HCyezxJ=QDflCffl7J2o9g{b_Q>Z;`bUyD<z`9bgp7|z!Ma>-T4N| z2Ps=*6#2`dX6P#a9?H~pxQmCMPLOE`HKJ-FbwfvlNWst~in@)ZG4bx5d4I(L_(}cn zrSIvo%2qi$f!|I4peX>9(ySE!;_Lj1!S*-TWR!h|MKf|!9k7BX;d`UBtD!2>CMAn` z5bozj^q=m10W47Q)2Em4&c?GZoNvpiJCwSZf}J3f$@!+~z?BaDVbbDo?_!#m&29<p zbL=%G&w>7*k$Xa;8!2l^H2nX9gs>gylUr1Dk~W+e0NS5~vlZ??Hk*Aqcf-qPN&f{Q zg?tSCiIBv$SSxAiPl(j5<1<a;ybf-PFAB|Bxov_@B|84qwk3M?S1v@u_=A4YfLhh@ zMWEkDl2tq|xK^k{I(H4siTDY){K&eo<o7mhzJ@874I9r)9i@}iNf{N))kd8@g2*XW zA?jNrw#uW8FVi2qKUpo(ohOXpTpnxqJywaYuC6YdVUjR4!85`o^V%IdpvAUf=k$x| zRyTN4Y+Xv(-&d4LAay_z0@U008bq$*QRE75#&P%Vr=X}m-f_^g_xVscl_|Ceb$KnI zl#)=U1*V0XD+<l7Da$OX&zr}m-CUQa-Uf`d8N)SQ+AdWGPOdHtTbJ1Bf^)mw3$2RJ z4y)RfeNRsVxeN9vpkmX}(a}<ucI;n`R@av<psqoOFMtkzTX6anyaUeez*G*(v0Kr4 z!<hs-dbt-XQmAz7-;zv@Y|HiQ*Drd4>|wYu4pcJW^F4qI8sp@Vyv-EgYs)=pi-kzR z6qDc1v<s%8V7%TYMfB<rXyQ$viFfXFcC9#E`<$M}DJkZ@d+b`r1{&{R7fCK>;Q4<m zugTl^L2D-6wY0R{I;NG8+*U(DmmzUf)rUKxWXMft@(+q>8JIF9)6)tZUw*Lbu7M*3 zBVL)d2DbLuqo-!Ao*$JA?hg$L3c`LyjyFIK_bv=?N3xQPwD#tGTzWEk3t&tYj}VIw zMP_DOL0XGy41kZSlKm-6Tv3rYAAB)<;J|@rZFq|m4K>r}#QE1!X>$;CqE6frDe6l0 zVI7&uA;R&bpsGX%AFrqh-<6SyC`4A^+<<;aEE>4z_w-`mKl1$^y(*QO;dpqbjM$pB zC@6vv1qLN-?blevg<g&KF-Kq)-I6&z<3;K#Zm%7s5Nk!h(yPldj!aKml8P7>Az!}- zm~GXSt2+o@EoMI?DC&0xH{6mv)Bv~(#7G(#As-mpl#~>M`IizPMFVCdT|Xi?_`-!) zaVmO)F`A0Zs$lX4I1V5HC@iU-N`$$*AM|-ii>xHkYIjpiHv0xiA7^>{dLJ>?O7DUu z3t2HPJgSQN`>K>#6j%-{{6#0`S`PtG@Y>2u`r(-?ABAVAKqH7(*EdTYd`~g)HB6Cu zm?t`$YUl{;E+RnQkY$da#-UxH!R6eWGJm+X@rm@;>8AghVa#IETcCY&f94n+%9Hx7 zQc{3eB6|?7V$`W3Odm~hF9Mxkg;n8*rHOV220;TwAb=@nQ@pg?oQ;`M^qIbZ`A2c; zYIU3&sSXB9jTk*sD-bO^gAod*ygk9&zUM0dHZcB#kzpU`b^yv?84CcAir%KWZG@Cs zMRw`kbY@@pq^Vq)%Hapgf*EBD0`Bs|c*~Qscnj@6VqlP1@WymVVGXj@=RiaS;)rbF zQhwKAcX5D012dXn9T?`)bWOx-&ku+t(ftOKPZ{AYN`DWQ_NzV^@M}^4L!pD{tl6F< zn2$Bo3!K=L$APZuG<$+*u(qiFl)QuIF}sB;GgCnkc#G$Mku~_*E;6mu71U9+53>&B z4e0q-k^!!H2buwX<B%i+PH^5(eXKeFr@w-dLxg}gM<M|yDy?o{&YNrlIU^Xo;?4*# zYue>n4tFwYR~8)+dU2v=9%m1Pzo8xs_F<0QnckUm8CbmYeF%`ah@;|;znw0LEnH`{ z^FO6aIz9vaAe4@Up+iAF2a+9YWYn^RjGj1JKLI=eAuu$kCG=hLc=xRSQFa7<7oX0K zUJG31za2+$1O8L`EDyFCG*11;`_J6@UMlflrO%4G{`_0+rl#!xLO5|gk;6}5f-8N& zlbxeoU=uYddPyJ|7#qOnSp=Rr*=N8<s#^+J?5e~8dkX($#6V|7kRwCL*Yo)@*V5je zadm^lo->_0slaX#T`91XvtnqVi<Q1FFYS3uJ=pQLRBFCksgrsri1<LrHIx-G+d}j` zlqtH6<i7)Y*dl9fm-r!eF=NzO&)vr?(gf1`6FmFGAy|hYVL7H)-Ie<sWQAp>0hgQN ztgWr{551V4U~9!IhzcoH$JlL}6yPLdQZENjbx%INt+qDfgAvD_AmHejb9ibPdW_XO zyNVf)-JU&_`i=aEcjI3~az|=ODM+=WC1u76)Rc;^0cEMHA{0%E1A~S9sR7%bM~)-* z#J*YJkXpQWA50#YSnu<zD)3W7XRDL<{8zw9ivSaauMWiq#JXwEQc1!f1Og%M3NX%1 zW+NVjP<yiFc|9Ea{voG&iXyy{%`hx92wi$3#xeYA01>}~3fLcfQ5$o;h3{H%hb;2i zvJEjn4uSs$6SZ2n#>zL(&dMwT;Ylb6SpjAdIRg>E0*QY!DeXAUl7OwA5a052+ri~| z3~}j314$m3N?52*eqbmFA|8mC1W`8q8ETU2h2N3dvm5xU^wwwpCTZUalFfz8xkx2@ zUl3A&JvAjg1~CGdV#Sw%DDF@)Yr7IDtD`48V;1ozQH*GU4}hKJmj0e&RT8F`x@tXs z2DK?oAw$q&vnOqGJmZN5G}wL`R6HrX>vL${Fii!7^Ctl!{<IGq1Y#`^fi=Ikd%K|% zAK|w_`!<0!{p9-kVb1FdvR)zUz3_h^4po(8@J9jZK=J<q*1K$7hu0_0`UqZUl6Cr8 z$I*507XR?H4&LkFy$;_02jIQlS^pnlyB3R*l2dDgpet4)5N(S@Ij;s&!QZpDi2auY aG<v}Cv#~uvufQje@oBT~O1`~({XYN^9{WWA diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-basic-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-basic-list-chromium-linux.png index 0dd2f39ed5a08a14d79a342755ca2252fc4626d3..ad4cf4e6e4e0ca08b6b993127d197a8cf9c58c5d 100644 GIT binary patch delta 898 zcmV-|1AYA2EZr=SFMk!+0)XMI97qTWn1mEbs*t1!fsjX$kdOy?pp}YPDOxF5Xk~H1 zLTyxRL=@2@3ZgcOh=pL~MNm*ww6m~Lun`*{D8A4;H^RYO;x)~|U;IAU!`f@s9+>WD z&9KKFKYly{0N_O%8y_DZ0RZr#jSZj0ix-ao0C;hRowBhJ0Dk}hvJ3zqVd{vN-}&?B zr%ai0=+L46nV&IZ#_zxX{@kB`@WBUb*RCA~TefU@?X}lN0Kki2w+sLvL6!jkBzTDV z3faAT_m4mRIBnXrpMLsj)22<&{mZ(;hYx@I?YD2e_14E9e>`W-oGVwZi~xX1Bg_7g z8#iuj-MaPY(SM_(m)5?0`xY!%@a30ZUc7j5)v8rPmMvet{Qs;UZg%$U+4JVjyL|cb z-o1N=<FaMTMgYL1k!8<!?b@~PzWZ*;k|n?X`s<1nD@IkbX3d)NS4WN<nK-*+$By5A z`)%XKjqknp-Y>uWvU26hq0EL`d)C!fuU<WO?%btImw&$V&O5`N+4}YC4<0;t_Uzda z05CaZ+4CJccI?813s1(|w{IU+ty#0?-+wja)RR+>9z8mK{P>V%6N`WT`R4}@9-KIF z;#pTackbLb-+VLi^~w0mnKL5*U~+in|M@=p=%b18r=Na0s`~7+&xY7~dS=?RX%8Ph z90qsq-haJw=gz<W^z?$OSFir<rEcE5dF$4#H{N(-V&=^^-yDv^<Ol$m9J1{BzW(~_ zEnBuMU%veF&p+R}bLZ$KGz8Y$Z@;~8;li0SXFfgu$tRyYYyH%zQ*YnCJu&kn$libd z{Sg2#Ib_*CvgA*rm)TceeRci%^@;7Y`}gl(x_@-(!w*0F+r?vJW5WZ`lP6D3%$z!P zYB&yIIsyPDhj+_f6{}aTK6vopu3ftxJ$iKF#EJRy=l}7?ANTIvd)E3PL-+6Bzj^cK zA?A)9J2q?<PM<#gi!Z(y0RWRjmc1&z|Ni^ar%w+-HtdiMfpzod%>xGxy#D&@&sslk z-YdLy>(*`9u;JZz-(9q5(GNfTuxHPn5dbi0rfl1`ZSms8BLDziobmB-@3TP!=nIqJ z1MLjGF~0Kv00st0L_t)uVFmOBG~vHlHa<Q+0s!EJ`VRmA0RR6U>c3O~000I_L_t&o Y03bI9pBRNNR{#J207*qoM6N<$g5q`DdH?_b delta 894 zcmV-^1A+YAEZHoOFMm~M8i3(_f<yud1Y*dAAcR~<AckB>AVn?&1q&MsD{T}M1_TQQ zL9rBTK}3&eqlMbqdshTS3l%}JvJnJPydWYvD{&A<<~W7p_8oa1IES_W{qI%n;^qGq zd)lK%k469hylT@XCnrY$0K96`hQDRYmW==acy)%8vS}j#0Dl5x82~`S8zcS?Em*MN z=bwLmX7T9JqZ1Po2M->6{%1FD-aLK!^vBm9fBf-=4I4%PK!DRS0DuHp1^|#?i22$& zapJ_hdGkK_;DcGSX02Ym`qr&m&)<LX;>Edh=gych<D-v0nloq4p+kp80Kgc@vaz~( z^X8T<TlVkYKYx13E?>SpG}gU)_l_JnvUl&^vuDo^rS;&!gQ@mkyLRo@Uw@rBbLOd2 zr-qNb|Ni@n7A?Ac`}PO`7#Bm#@fp(R_uqfNaN)vmy=Kjt_3PJ<UckwdCnqK*rh0ex z?%mU;Pv5g=&wKB^H@qBL@Y7E}-M4Sw{Q2|$<Nl2sH-EnM)?1r5Z=N>oudl?`ty@3& z<dfn5%9Sfe0Kix{EgPR<Ecm#|2HUo68@-sXzyA8bzuUBF)020PA3y%nPd`0wvcYf+ z_SIKk4aZ<p-R<1Db3gp>!{a6!yz|aG!~M^kIWqzP#>Hvb_zdS&Pp-fC;)~IXdHe0R z|M=sNr+-(TMAhi;Y3Z?J$DTP(`~Lgyr@GtKt5-k&{PSn-|6d<R0|5SqWZC%q_~Vbm zlyKFmRo{H`&5j*AMlaKcAAb1fpMS1fx9;i188c=~wSPDsyL0Ex(<?)hJrimGz)K~| z#_At`8@+t9X3g5QYu9hT{r1Ki|C&<|^V8>K)_;(UJ9qB9fB*iQZ@xLaym8~kFxFhS zaN!657#Gi$y`EOASn=@T!{KD^?%lhWE?ru?cI~&{etZ7>`Kk6VUApx8_3O)*FTZl- z$`Ei%mMj^Dn2Q%L9svO3BFkP+@4ox)>C>l&wEE?jU%veE%fp8cZ{NQCyYIf6YX4`S zeJJ+$cQj_soH={;>|y1=fdj*2a|8g4%f!~LTbC_cHUa?P)tQ`}^lY=S19%LR-~(U` z#57MA000I8Nkl<Zv(W?b1vCE2vdPKG5dZ+M)IR|L0RR7jO%Toi000I_L_t&o046f| UD}5FT#sB~S07*qoM6N<$g7s$EN&o-= diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-list-type-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-list-type-chromium-linux.png index b23706dc76e7c31e662cd0505c3f1703a9f04c51..53acdcce75e5e56019a90c09cf8992ea04121170 100644 GIT binary patch delta 2541 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 Bm8Adx delta 2549 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-sublist-type-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-sublist-type-chromium-linux.png index c207a1018e82cbd1076703b06d318e9c99615b33..4e1a1bb889a338a56c8f471c82ca9ea5c7326d61 100644 GIT binary patch delta 2902 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 delta 2901 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-after-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-after-list-chromium-linux.png index 9d2e32d589b0967b80bc7e4858f128a11f2e23a7..0a1acf98f7020f20cf714c9046524c6a79ea0d47 100644 GIT binary patch delta 2153 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 delta 2143 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 U6m?@3u7EQqgFmnP+m*ck14DeqDF6Tf diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-before-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-before-list-chromium-linux.png index 5264e98997fadb594e0a073bf81f3ca3da672f90..2ba95bdf4d58f3308a37b62eae1f209b365bc3f8 100644 GIT binary patch delta 2137 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 Dr0=Li delta 2143 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 QI0H@{5Br$)_e(ea2WSVqmjD0& diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-inside-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-inside-list-chromium-linux.png index 4f408cf792563e8b8e9dc15d98c9d6a8a8bd59aa..b6d23aea4882dc333d34b3f2f0638e823789bd5e 100644 GIT binary patch delta 2139 zcmYk7dr(tX9>=faDz%ENWwwZ*>DsZjvm!DGA%bSDb{K~OQ(HkE5;Qzqc?9GYAj!4j zngt}$x`G0dMHf-fWF(kCAPE%+k3b@%7$JlZ0zn86!Ygm?o^*C+_WpV1%sJ<NAD^GV zuhs9a7fg80$We9}Qt;1?RD|p~Ulfgba_Cm*?I-E7wDT?p>k5YZ|1oy;>@cdhjdb_h zHy=;$>COxkpZ+O)-@$DoCF3XRj)%&=z8GJ3^X7>?Xk-%0vGVdJGltiQXQ+HC%Wa`2 zhb%SnI4U-pq2sEevZs6RZGmp!(}t#}ry;20HO#qcW9P4G9gE4;|Mc1iL7&`BgrFTe zooH~Lifp{OZ6{@e&EQ|Pll6tF+s+=^cH4ljbexx?BOded$($-ayc?VoAH5yA`-K>S zJ`3t1Ih%**l;(o<`MQt_W)xdnsIpE}<D!hEINOwMRf=m$=u@aRH(V&oMX*cIat8zr zctmY9cm@$O6r8lejRkjF4Awpu&T3!j&yt=r))X$aZj7b$9BH%6H{vcMrX*I&R7sf! zdICo5SaV;vNZ!cgU4tNP*^w&6&s&|2woKmiis8JB;VxCCFx?xD3T-RfkaXjc(ih8D z-}ZRV!XZjM#keMe!-dnoga|AnELx(!;7vuFB1eA7sCI!(Y=(W|MSaZ)$$((}6+xLT z3(cFzp9N2KiSp;Zc=5t+HHM?~A7101TSREVYon?R<7a=`Np(?O7klB$2UFwPau-*n zSXlRpD;QTU@pQ~pNgzR+Z86aTm-a$8%<3<ZEI5XfIyzujnGsVP{`8lKJFoo;6X%BO zyxW)G5|@F_LH0EnlJ(nyvkTU?47ZQeo}tzdr;58v-J~z8Nh^ICT}uE2t)3|#Oq=O{ z;Ogoci6gILW~<p*vl4Z{@$K(DR3;G}wrNnN4yPm*gS;{7&4tx({~msF{kMVsZ20cu zOp*Im=omI(w6SUCxth39V{D%_^q?5-^(T$vSw>}^Dk}N$ItuL_-F%e<@dzrxqX&xg zwlvcI&TJq#Ra(xEh|N>xpn*m}w@!xy1-e%#`^RAKwuPo-aOcbh-JO>rXX;_ZiXR9K z4K3?@YZMsydP;<`%?XO9^ft*$c7mS{hb^+b37T7}yI!85?p6{tWrrVU4~rL7Etwj$ z&^)Lo%?8##&K-LeT6L87@d*ks^?<h%K2KE%$gA4Htq{~BnV$Z)^#18jkHSLN)e9Kn z@+2osv9U1f>#$DN)Ve<)BYv>b&uY}8=)#o;ERtP^LqX7{;(M{y-_OranecRfVD2s; zYDaTwy13k{3KJ(FnIY(y3)sQAKGR=Z?9iVT{pQ-N<ndOhBj}h{;RTMT-|sR0Ukwu6 z?^o|Q08dtU?}v{HOjFJt{sVEXW^I+*k&DML7)+tzKEpO$rLt+&h~~eA3X!A8YeR-j z^aN4!`(e4ZC~msap;~fHeo|86wQKXYT*LOdB@+~FdHT|MXXxwui9L)EZ~j{AY)#ev z%lL9WV%Iyejb>j5&4I@Y^?Z$F3ltF6+oX|hbBoRB|E7Lnl$~r@>pRQ<u|SA34<b*Q zCW~OJLiNn8=Z8@fk7BpXIWtUMhs!~U68e5Ij4dj-;d*y8o&Hsxe!~8qE65pXxZrJx z$z2?KbEUfk&7TXc@=q(6z8Ab5im&NwikzAJwFq<>uKK1HpF)bu?>kiSJyrg(JSN?p zc4`#3sKU?&!F5HBe&6wx?4^5yj>5nTd=f|;IWji0yB;tgaH$0!i#2q)_Q+qwa4G7Y zxQF1gN8ah)xJM^V<5AWRDrD0LSU}laWuTxN`Co~(xsx3~XZAKHipyaiGP6}%`RDk7 zCIvxg2eC%cc8eldapaZ0!?^6B?_^RRx+i7@;3#+8_W+_r3mqP@gqs#nR(-Q9%sN~l zI4&q<krz`mbkPr^8O^gy-h6|ho~_4XFlG*yzbM9St_;_O$eEX{FT%+V3_SuE3dkQ5 z!Z5OCpzRO5edBeVNRC4+^3EZ6qS7x#ROBNO?enNwSZdQBKm~^B%{m-%;*`M?6)cGj z3>$h@pD2r9#+rw%2(aiOxv%tzGxX4<>Hh-x$7N<7U*|>07YBHFI3;nFxr%^y`)IUx zBAL)O<E^pi;*30aE~4;bEmd@SY$2sb1}ZgJU6Vb0&YO?m=_mcI4RYb;Iw+7dVRT%S zKit*THPu}j`6~JiphxZH&fCr~5Y-6G2O)5vEEc1C$(8`Tkb}!Y{gvkl#7++fjz-;R z^;s0gDBz`KO%^V#mPi6X4tks5NMM4OgEava1wDZiKF4DV=IQ_}<fzSMYN@xt1oHea z&NC%7wJA{Fo~3Q{5k2#Kdd;(TFqUXt<kCAikpgo-iHB-I-ASzvhs|Of7&k#6^^NN~ zITo?4qQ^5j*E;+EhJRw8j}%&Fu?WVVj|?SNT;g2mhD)R*tuMau<Vx?C^0>mqi`N;} z@!2@D7G-%yJwRIi)th1{4W@ZMs;uN~T66$KAiSE9xq8N_u(t;&CiO^Tr1S{$Qd@2+ z>&GxmqPDR2bFb)TfHFhvwCP`~3vB5GXrdJ8<iOVhf*@VVBY-M_#kiIX^&tQ%Fy&CY zf{`M}?5NtN;1X2r`KylE>x;p(UWK49{>mQO)8(`)Xr$`|1buqt+}YDVvG;tI{|P%| z$A>MxHe7jVSlDg|^869m2|);g4T>#>AZWW|-&W{g%fmnPsgsFd1v>X#*jeVc@i+ei Dy;ikp delta 2145 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 KcMX3@$o&uT`?To* diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-indent-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-indent-list-chromium-linux.png index cd5a5fa12dcfcb856fe22021812cc2938d4973ef..05db7743ae44b539f2d73eb04699cbc6eaaaf7b4 100644 GIT binary patch delta 1982 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 delta 1986 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 G*Z&8?c}0x? diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-inline-images-within-lists-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-inline-images-within-lists-chromium-linux.png index de929de8f98bf2bcb4dcd06b54a53f934cef1e49..55dd2531d298251eb57e98bcae005989160d9cd5 100644 GIT binary patch literal 45335 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 literal 45451 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 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-list-and-delete-item-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-list-and-delete-item-chromium-linux.png index 9cdb18e286299611c254cdccded0cd03c1ce69a5..9387a230cfe1527a9aa02ac9bc5703b58a5a6334 100644 GIT binary patch delta 2022 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 N9y}b){zuBC{{d+AYhnNZ delta 2009 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 ALI3~& diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-lists-in-table-cells-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-lists-in-table-cells-chromium-linux.png index 834354e53e332e7ff397a8c53057ae8a8a5a9331..6c06fe5f1fcd299bf75265a6954730a45407f288 100644 GIT binary patch literal 10643 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 Dl=492 literal 11275 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 SEULgOh~{y<AF?#gU;i(z7XP{c diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-chromium-linux.png index cd5a5fa12dcfcb856fe22021812cc2938d4973ef..05db7743ae44b539f2d73eb04699cbc6eaaaf7b4 100644 GIT binary patch delta 1982 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 delta 1986 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 G*Z&8?c}0x? diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-with-sublist-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-with-sublist-chromium-linux.png index 392a955ac4411bbacaf4c4121573cd39f40a16b6..2c5c5f06ba22bfeee74559dc871d3d2fcaeb1ab8 100644 GIT binary patch literal 8310 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 QVFdZ~px1%2Kb}hdD``#Nb^rhX literal 8292 zcmeHNX;_nIy8e_ZbwS2j^-#8Us4^CW$|9SP@jyjEL1hiQvdJ102ojc{R;{wNB0<?w zp#)h15+FbV35bFw$i9RG2ufKK2x|ga&x;*9*L7y*{5-$NpCs?MywCeQ_jBL(w>-FL zXRWaNtKAR;DV#fNbs2)>^dRUnjnB7(5d%~T4TAmxowGXacr%wf8uk+=dQ7(D`znWN za3r(;WlhJ0zBk(EXgQ4!d_vBhbtP=qFFH%of9QN$t)`>;Yu7V@G__FkzZGfj^#3KT z&>4rj`|ua|>CbWao9S?48GEupc16clz#QNfHhFcwy)N#YFviL6Kv1ZWowE!k(`_5H z=+0sE_d9<4;VOM<7~;GGYDN^Fr<po~D1Y{cp#7$fxp#4Pd8Wbr&nFJK;N6^DT<YRC zmNVF_?(Xg)+brgFYNBM0!_k7iP6|?j{{9(!C-j$=qf;g!YjXp2>_pM)!``Rj*B6Vi zi71&=qDhq|>r(3Hi7eFSb_DxvhGtz&jU&{o^ew&fc~hLA6AMER6Z{7%Ls`VIqN;uB z7L7M1X?OP=4j-wndOT<klSCD8V&<8K0Ub}I5>cglUByT*IffUv&@kP6OYR^Pfn&Tn z6=@?(Q8o&vV~$U*SE3~xwv=Bt_hq>!nOIS=V8x?Ig&a>(RP02m5sJ@++u82fr((Q_ zuN%wO^QY;0$v!0O=A)$>3JMCUX3{S77pbYKSzf51*gX9}yB$#Oew=@x-SDAuL-<m! zt*%pXz?+}Hc_(ABWl{k#1}0u?RSvIzHt6?*(jCv}0Vn^x$b#Z9X3Z>#Q&DCJ@4>s* zEsGVDPl821z3PUXdK~M-TFP|sg6Cydc#_l9VHAmtyQ5P((iXNperKXBNaIY3aZewT z%Q$hZ``3wl83LBJ6Use9;C3jP-0&Md62JUb^S**IpQcsmNX1zs2+u$H{{3(uHjK(B zbE!Pw>D}fluc#JEy`0UhzbFSKIuW=jsF^2oLq?!5Ltb%VTt=0usW=2n;$ri^t+vsl z2<OVI(^O_h8X`?bs{`$a2Xjw`xq*crvv5a-qgH#Y)78w~jz-?!r^+NnbHHwu4O7|g za*VJu!l(Ly3u8@jeC{wPe%P*h5syj@y=sTGXxa{SehEj0&-E0x3)eWdZmDYKsKxOX zE$4FA7d|buAdmu1W&MYTOu@BP9vj{J+d2QDhK2@is53~^<sk;cIApMVH<ZM-b8yJ$ z!fb=AJ|fib6Y5U?ITVjjDh}>=aw0?1KAcL3n(ZZ#NH`phpR6CyQNP-2TPCym1GQ+1 zR3cz!O;b0fat=bdmVV&453e48kc{KkBUm=JwzkD~d9<q{dUj4udYKXQt2w-_B>Vd- zFMrXnW?H+xC73PL`)({xhH1Iig-e8-N_r+h;C4cagCS~lW?_`9>rO03qQ;wVrCSJR zD53=xB|(I{kQ1Ej@969mf*vgK_&!0ndP`0o$r;3tuow(iGS0(;cr;5JuIJO7bgA%+ zs=(pUaW{jgnQl<oj$D(->CQY5Yb1!Zl<P8fgMPer@jGYGnX0T|6+OSRN;w0E=q*3( z*AVjO-P3rDE1i`TVX5Ds5j$SrpY~W@Jw9TT6z$(+o24^ZOQA>~Xy#u7ADM<t)o6lX zR4^9Do5rFo0ASnI(T&@aBGa@B-N?v!tV}#z;!upSE0t;;p%0eBs{_08=NLYr06m^$ zWD`hXi0BC(kLOWki48avDmW9EBhLsiwl?I=274Fhqe?#;S?Pj#k9}82m~-tiUw)%8 zIm+)s1P7DE%XDn))Kh?o6m^*Nmb}_?XgpVg{+xF5!-v<&hjl#Gld1f5^d+~_MvzAG zKvfH){`v&%^n>clzC~{>B&&Udc~^44L|dwVdv&Naanv1mtu_e$?#(Y6XsKA2Dkeyd zxBs9F<tqCr4Jg9I5hE?=xw*1R3YS2qg_iH_u#m1#=yjK-rFPS11F;FtgJv-c9wD`= zX2{2<-9&NpSx`BqU6&cJ5ipcsVRW8H8o#~gJIHu?-4tF5lg!%tw^nh#=zMabP>8sY ze=1fYTm$X5Fo<WR8jZO+>oolS=t}E7yamnxjxW+_Tzn}J3F@d-xl$HSpFC5Lyie7% zAIY?s0PDWuc4jS$D)t{Jb&{>O!-D1Tvd$lO9XJ`vcmc@pgl}8aTz?7CRn0Y<n_+Je zBnnO;Si=iSQ@WYq9@POCl!$ra_x@kH+=~E>iqE4+_^f{*rv0~b8HwVh_8of;)gZ`^ zu5H4D7{&_53UtGp)&`$h-nRhsRWyKH7}*$!?8<x;$E|9&lP;1MNFgHreB@L|P*_-4 zP|#B&gx3yeS_R%V+XKi~Zx<*DuPsfLMKn$nulIV5l4B4eHA0%InT}h{^H3X1YUk-Y zI}MGDbiEqaaXI0p8?Bmlx$7_Y=xW0WzggbjrytlEzcHCr=1U!iZ)-OBt)i;xI>6XL z2%_fUa7WcQ<e{IwrbEzQ-{?U}pA+^%U*Fc2`<Efa#<Yq-^jtrYs?{9;k{2BvP0!MW zZ8QNU2Yg?mD&P!NQYe(|N%}8qKApqoKnA;Hpv(pE)%;=a_@%}7t=L52ET|4vEYzi} ze;~5LIh)%l37Yo#BfY(sw>1YHp|6`WiDB+R<*oM>D?J)+ynlHY2#$8qTAw{EZ$=0@ zB2`Hrhn7h}Uu)H^E{uxu;}%RJ#{a$pDo)qdcny<nbcM^<-Ont`9IBD?Op**A<-{Ua zQl+RY9nZ0w6R9nC<Q0|l{G{TINnza>ieqITxAgjO7fdF;ckkXdxt)8zGI$QM1j3rE z-JaCf9!USZ_as{Q{=RytgTvJ_M@La6pyaN6b23s42FD^=70l!K<$0JB3?~;)r#2r4 z-1&{ypOlHiSn`%pA4h0+v0q%V{21iKNPlg}(9%SEop(@j=~doXlY0E(X{BeiRG(Kr z?bk#xL3wFEbL*#Ntn|Wd&1fskQe1zrJ$BcDqo+jN>iNTQYje>B9QsY}c*~u67n=;# z!@*F*LqDZsG|bhIkdWvzd(|z(fcTZokfHbY$%Hp2F~{BQ9>F!N)8f|#T+&rcdK)6A zZ;$}d5b!2|k#<9N>gpTQf|(v`b#p+l0Q|8t-OqrccIKH0vO_9{8)H`<RA5aarvUeY z!zA-{Y)leaCKb_-POZ-NX+g#beo9npaIh;iG2vWUPocG<+NqnbA0FIuNV}fT46%=r z9CY!xBvMNS?!rFXprqWu$S5oC9he$RYHMqQR|hyjkQkYrogGj71fhR}%<(w-_|T?F z*>pJGa8gu|r>CcbgM;X`l74^(YPM(qUEobkTw7a%d4uqH^c8me%Ddf3)ep7rcn`gL zaKNS9_4@kadtxRAg8>FC^EE#U^pCm=0uqnC(OZwc07M>;+q_1(->_=TNEL8p#7vNh zM9JFFByD#R`viO^wF0a!hBuY~993<focz9cpxuJe7&d>NWfaDAbk{B<EW3%S?Iv%} z_7y9t7{35AHaP~C$uyk&Krn3Zd;16=E#)i2xq2+&T2BEW2>xte;8e#`z>ejR@t(JO z#?St6ZB+boshK}@8RH&aa@VCQc%XES(K+?=H<mO;Inj0BnUw$P0e<gB{B&MSA}H>W zY6?({V-C1ez~pT9$fhAXRtfT9e`?9f($Z3-e(B*nU=<3`5rFxXpgx>Apy-28;5T4l zp+gm({;q4?mWr7_W}C%?NAI@5;6ZHw+&86xQRNFH3$^mjXo!Ep-QAsymPu}0FiGS! z2{1aIriigdP9>EB0Ag>x=D0BnnkqiFEQMC;Yc6=Bk^VS_1*4Xf%r4V)(Nj+Y0nknW zR+Cq|`Rn#^?QiMhS(&>A0aAn8b(>Z%gPCnJhho?Xb$rJ4iMGr;Uj!Dl*<>ULXN&z= zRmgX3smk=Uz~Qt|a^3l!;66e&unwT7y%RV5Meb?IC!x+mguRKwz`L^2DjSz+b6<KS ztPNy&BH>R{Gj9z85%$>WHc++S%|ybj?xLZ9{D<I)zU^sxXG72klhHbaH)}R_I!~}N z4LX!8@jUDiae7BH{4AzLS1Ymva0N{KUa{~@Drz#*rPM(`cKP=;z=B>)Bv5Okv75ed zAWXLR6qJd=C%t~P7}Da)Jpvw^Ep59YL{Pi91<5+5Q8O1=L8277aqYj-$A45q%{&9# zgxMHW2kJD}59}roHU%x03Kji;^T03#Cx6TUu%%(%sh8YdSUCaG7_AR@m#r6Sw$V!e zTZPyb2z?Dw$Y&v3pxnEDO1Zl-j$RNhwW}Z2cD=|dFF*Ex-)Y7J*8q5atn9;}J3<u% z(W(gZa0>$o=rR|09BXJ-i{t*TNaa+Ji3qkuU}x^&;2>z0*p(@#f1DE_QzzpEk0J^O zCM7I+qCH)AegF&-dEamtRTBk2B-3zy!!s%d*Dgjzt^l8bAkE@3VDZ2M>H>j&bi@|S z`aMv+EbqhyQ~sWOfWFNC#RC7lR{A$ibZhAUu<2XL`7=4uLpg{~_X7U)dS)w8e<o@x zIsf^xcMB$4F!|#K+&^!HY++&x6I+=0Pd5s;x?`(5wz^}hJHRumEy>)n)?3#4<Kx?{ zR`~yHg>|fUNN{i|1g&3?z`$z(vMH3B5BT1;`Cfo*hv_5m7#`ZW`3F4jh$`F$bDMhz QMxb*)*jZKlx6keW0Wt0Mpa1{> diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-paste-content-into-lists-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-paste-content-into-lists-chromium-linux.png index 6afc6691a0770708c2758a97b623ffda72eb0965..8c47001de37dbcbaacc3e39a4b078f7610a6697b 100644 GIT binary patch literal 10914 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 literal 11051 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 PK^!}5^(*z4^Vk0ivXzEd diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-press-enter-twice-and-exit-the-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-press-enter-twice-and-exit-the-list-chromium-linux.png index f1f205ec7e65d4780fac3b38f41ada066e335422..3b98579ff30ebc612d5f3b59d9b995f7de538475 100644 GIT binary patch literal 8409 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 literal 8443 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 UwfC;If+Nu31Ht=i_nx};XJ;~kSO5S3 diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-shift-tab-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-shift-tab-chromium-linux.png index 9cdb18e286299611c254cdccded0cd03c1ce69a5..b7142757be821be073714e6b9f020b2fafcce33c 100644 GIT binary patch delta 2003 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 delta 2010 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 A>i_@% diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-table-in-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-table-in-list-chromium-linux.png index fc10a4803e375260fcf8f01397cecc50daa7f8da..0cad057efe8bf20c9b77d6a4a3ba181f723f3f74 100644 GIT binary patch literal 9132 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 Q!3tz`;>_`)AI|^uPicwfo&W#< literal 9132 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 Omkdq6reC;m>puYTovoSx diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-turn-text-into-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-turn-text-into-list-chromium-linux.png index 4d54b39f8d2266eee5a5831483a59cd879bf850e..34db0e9b59f399223e6aec1cfeecadff0443c4f3 100644 GIT binary patch literal 10621 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 literal 10635 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 TeV7TaAm1LgJ5+S=^bh|B?Z|+% diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-04600-tructured-content-inline-inside-a-nested-list-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-04600-tructured-content-inline-inside-a-nested-list-1-chromium-linux.png index 3fa6b80d186666ce8011fed4304ac4702bdd932a..7dcb697cb3b3757028ce65727f298687d055cb5d 100644 GIT binary patch literal 15607 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 V;fKF{gRh{pF6v##J8$vF{{hKam|_3` literal 15618 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 GfBP^0<pP5M diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-a706e-nsert-structured-content-inline-inside-a-list-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-a706e-nsert-structured-content-inline-inside-a-list-1-chromium-linux.png index e952360807e27111edb152cfe0d3ba1a118b074e..f431c5e98114edc5563fd037d4bf4ff253e6501d 100644 GIT binary patch literal 10926 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 S?t&G_`7@VJlYjI4<G%pV9kgQr literal 10940 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

oh)kD}-8iA4QenR^C2IShc9 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 H?mG5&(oTtb literal 30601 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 QNP$deup~9HDIs(7zcQ1u?f?J) literal 26854 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 K;k@nx*0x__iT@=4 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-with-table-break-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-with-table-break-docx-1-chromium-linux.png index ea03573127cb72fd4d7c18f4a5ac150f102701c8..d48bf1bc17ed97a98f2564a7ab87f561415b0712 100644 GIT binary patch literal 31209 zcmeFZWmJ^y+c!Gcf}$WHQVJqSib$7ADgvT(DhMbIL$`qlLx`lbAks0UG$Ne}(%sz+ z!_0eJ|Mz+J+Iy|%PUmd64Qzf~J#Mg*XDAdJA^3u;xsMGM< zQ#&Ei+ zX6RkM=>$=iXO_Fm12pi0oU0ke@XKcu(Nz@6`{ubC_`}Tys52rRA$=fP}yjCJ+#?vO=6`xgc7uOY^3RY$8^ zostHV3O$(`)?MG5Gct1q3*U5?IV_oA(oGXQb}RQrTdA7tTDeNbJdcbq8J@?7Blg{j zrK@uCry4dX57|LBh9ACRUuUshJ$_(J-i-Pr{74%*A!d zzW$f?S4EEAVf^h`*@o6GfmcnR`8tHAc;w7S%63Ram-DtdMCBMdsCedL(H-Nz-WQzC z#~&`qWwcSL#aQGw!yAZM^Eg~cozj(+WwBjMPep!g>1x`9Tr=yjU zy@hVm)hTIqp`+yj1DBa_^V~`SBZdG@yN!Bk!W1Jx=yP(dPr-Yqsdd+JTb(6lJ&WH%l`;&f zJ=I-sGlSR~3mtDUqN{0j`2DG1SVgDaEUkkZw!>qk=sAZzJ*VuV-e@tG&3>#=g8OE( z=vu{ApMh6>!eS5c3OtozOICjpA8dCBE3FI`70C2&w(@u_q(qva?%#&b zNbWZK)s$F=Ph{NtE7q!sy}HN0O&Av>y4vKVk*RLktti-z z@~+3AE~pwZdTgt_TszMi`&qf#N5p>q4{W@WQCE&WovhR2f0O0rct`_?=UkVv1?T9J zqUg@w8KXt(n5CyYj+Ht-+)3V#UBbf~FmPKb^1H$+>&H*tCrfJ?)*h4oJhh>#K`iyj z*Zf*y4(a>todwc9B$rcKbrX+gA`SGNCwzE~8dS5j`Ta*P(h9WA4#0UR9dR6z5k9Ut zc`5eJ%ZFCuD^tV>SFUt*nts2e!u4l%VO+P=e>-8;j6+wu=56w_J95 zG|(g1)Wx36$o8Gzy8F*8MscTC;CMQ^%TK2C8)W;x+Ij&c*Scb(VSi(4Digce!eO1? zeCyy+zb~UF>>J71GNX7buik%9e6;o!)TeRvpa7z?*Td+QT+7aAZYOb=;`k zg`+!_=u+cNR5EO*fbUw$N+X(p?clQNTTMpDDV>dWTP;mpC!W4+JHtrWmkax8-kT*n zr|LtJ2c-#lmdcXH_G48ZQ}Tj>cOo2Nv$xGYpK1t9UUXakb#~5IY`x|r%b9Wc2OB?} zV4Gi(#64Y3$u1sb7tlNPJdWU~1K02JEGq9<61bol>PnS&%OXui|M_xit zC}5po&tdi{ynHV)>I)6E3yz7g6VS?{WFBxLaJ901Qvr`smEwXV@%xk-y1e==29Fp_ zpKw?0Pg>;6daP`=;Q57@^L|6g3)r8=Eg2B}w{?VkG2CUZ-(M7H+G%h)$ZzH57?!h@ zz12Y+=en4VO`W|_CYga(ut=2?A8Cn$U8Pi2C(mt8_%d=^)TTKm64AnF zlbb_A-*zLFLv+W--gebJu0PSJk**2vTSCCLgCiotye|iy8M-*JWr_9N3zb`_li`}! z7!9|b#UeJbWd5L-DWUwjNG4}Gw`Httn#i02@1tqo($roy+6JL|(gCS(cD2nBTU}2m zo%oGL#+1N2)x<*>f1^WqGFj_A$`S`RgEo^Rgd&COYNcuJ5Wh!PQH07xw-^}fB{f~5 z*0uRnO*mc?Ht^RrUQO!$#4;D>G+O6(rNAeNQD?L%Au%L>dQuD`e8H5^#m&{`h+**piy%x>CLG&s=O#OPXARA4<}hrQ&@_A|oR!;M1Mjq*MjS}ol7%89*DgDx_K*AQq&eSS z!~)<6&^>J7$Q9dcVz$jna9e;vH3nURB)23W(qEC`N`rRe*tr`jY?#Yma;5bE0+cW3 zD@@!DcE;46qb9jhKOL^2FP!1SrxS87 z`6M55J~>qZP>E8B|4r9-!%M>*Ype2#NST1L&2XAvA<=#`7;f82?H@=tRrjTF?_Sld z4O;S)L0oyG_VnG+Yvx&G%vsP0ljVYgzEby=7#-2sHQitl5c$kCzgDALC!AR86f9y% z;ijSeCPmZxTuMm)R$sN)RvRCdr+CmTbJ_Yoj}w6yX8+R28hxPVnoiW1Vx;9>eM{3{ z1-x@0dPo(Np_bXO@tV$f)^$q0P%fBZq}-{~^gYtTgW{EiXToqdrF==-8~25_11Q3( zWo)vU5b!wawiZVcs=^b0uT!4a=RXVG#a)vRqxNqL@{+S z1IyLn(k+RjTX&vD$v)NIfbYo<7>{h8xaVCLgfFpM_2Z z@3aIn9%MfXy>)Pb&Ro1&*ydN5t?3M{QLBH(l4-21Y)&~WFjhpzs?^xsurZLfFH5T+ zO6^sL{B?7R=4>O+!E;I^!%7a)(K8V`t8m(^D~zm~;1#b~Q_nGPPD#(+rt&sAnv+sh zr&yWHlJ@jkfyRAFZ2f+&er5i_y)|=dgYF` z&#qH%8GfkT9psP*J;2c4Qi{Dgf{n?4##ys=|BYebav?W$4@%I{L!*}rP$VcKax5wB2r0)*jGCI zR)&ki;=krg&3$js#MbAQd$WgPFHTE`WUSlp5zA>UB;~8>F9>p&HI?N3dw$hB`C-gj zkdW(Y=^RygugK#KtjNKrP%XE`yKQPtZ+DQx<~(?RW`N)TAiDm8 z*5CBc-AbaCH^RIM?yhCIOa0RND;#au-QYj$zSWMfgy+iQ4)AQ-4nAaTB4uZ~+gj;+ z`8kz?(I)K!*B9#c;SVO7F~$*ECLPC=j7LJ45Va^fLNrA~ZI8OnO5%G`cDjkQc^&WcZT+4a z|GED6sY`t{U8`?e6b=E~mx8w_SdGAr{c0tW4||x)vle! zZk$@b-H`a+Fy9>i?-2jFu6UQyPnRA|r1DyCwF~krAJ4{EZ;q(E;St*-JIbu{LCSK0 zze<%ssF1P1+<>nx_Fk^TQg6L1Tkka&{NM-j_O-Q|icet-W1oZ*oGB#DH+)+5l;TAA zV;KLl9=6#-_8j4uiJ z;{xIM=rmFTYgUfWt%ikZ{gRM#49Mra55fbXy}We=X~x zK>zhk_nf0fMz4S?f=jv8o{d5DF_c=+(dOK%lu9{Pq`H3EPSuXqVr~&{sj;mrE&-wZ zm!s#_A@HF!$G!SieY{V^6`$VPQE29VbFUv4qN-1B88-ybY+Rw{xXSp=Y1D<)bDNk^ z6(7l^O8vYFIaI8ulbB$Z2+bsqkgWN|I)q6)4%-`XGMIS(WcBA%kR^1}7|Y^jcG=Kd zivD`k(HhI&6ydim;ZgqL|E8g%w9P)47>V*}sWgsm4rQf|Xpe;YqAQ0@rJ`(A@-d8= zK564=&~`M934;#_U6A{P4aJ{LsZsVXOF@5nfRNKep9U6uJNs=)K77c#kxrbwuk7Dw z#K^e@U!g+yj{0cJp82!CRO3!B^xc8Z!n<7J$gLos;Ny@CHy=6?7NU^&w*ENzLG^YaM=g#j9cy|_iIF^rLTien5IB9p3lQWj-kol|mZuVpt2Ghnh zQUXsdr&n5J zaOTh2PT)w}^ehPbs(@2TRm8b@k0Xo=G;%CSp31V<)EFWqm`W`zy!=Hiq z);*X5*czkeT{=vqsriZYK!+_-%j9eAME&Y-&h}WYhiaeY7(MQd(eG5chYr?LU01It zewP=@yy8Ao}#zslo?!FB!{z^3VfP6?gKm9X4uyz8rR;1)tB(8cH2iiycQ zA6vL^bCkWho{7Tj_kE8#y-y!i4j5k?nx2o;Bz2YyhKlz9Iwy9uY^iF!mPCcFgGzn| z`k?VmfOkEq37*%A^4-@wk5(e9MM|QeYeAiiKS0G&>N#o}qPW!~+FJX#2wigtUU=BI zVa_{7*mAZlm)w3sL`7g3P24ZJDrlwq5;Y27VQVMT5QC6O*tdmsUn%s(V-hm@r?GO6 zW86cY1&Nx6tEnHDh8RFuIo=!dLI57TG90j(glpk$yURe*zjB@M_b`|o>I3p6EQhgf z0lr^AoX6&+IE(Cdbcp%j^)Xu3Z%VK%`#SyeuK10=B#CyGI^K8f&fj~gCG&T=>jad| z7F}8HUQV-#3B8Gw_hdbf-L;>+JjsU^G;RsIB(a}Z7rCj(I5VAKbEPMyw$};X-vma{ zw&ivz1r;j^<5E6sENX7YmzY03RRCdd7i&t>AIDY{j_d(Xh_`K^Q8^cP#B53x?ccAZ za#>^?}1&j`F#k*_T2Cu4bv1ogby)C^e;qF{j z?y@xt$93)_t(E3-h*3Rp>sHEtJ_Wh=+ZHn*!aU1?+FEav4+Fmpg5DIf7ARF&>-d^j zL8ri^-4)~_fOO~c^8Vo>0fhb#KHEUF0VE@GZRB-w;AZ>nzHFV6JjIbNhP(q<=}Yt? z_xwMQIQ|~R9YV<^1-4kLIrKv@W~F$D8&;Eym|8R57(^|fO3~GyMt-4Vzyw(Y z=;=hQnm*rXWN@>9kNDXAr|t4K2mrZE(e&IZG*0U7HB4QNrpq7|EDV*b#a@x^2v~_- zi)+1@1eMUO_%au0MmiQ)nJPhb_YU9ohN_>l(dPM^cjgAUq76bzqsCxCK83e9fgEJk zQEO*$P?|u*S$Gw+p#00oN~EVmw4|nI&0|IM%It4*3e48MbS<$OA@;QfT;P*El2gzj z;xlCc;>Ce!kBJPmjND;#Zl=f-s-&N68rXx|_Pol~u41SswPeL0*SR}M|3bKSzt|LN zZy65ON@4ddV7Iimh_z79Et9q=Uic4D`4CEx9cCRZ#9>y79A}Q*5An72K{a$3jpYLl z9suJP1&2Sc1u9kowhR|?xmgK#ph$D$j-&KTe@*MkoqPhvV&KY9NpP7xMcv~zTFP(0 zV~SS*ZVhH?~9Zybyo279xMX+2+lJm`~{hi7ap1(4A&C&uJq zCGSpj3B*94rzRweJbhMV2hnZGaM;-tC&bIp`hnyIWdQuzE1L`JEudQZxOu;QybN_M z_*_V}>0PtyAVEEs&WhmDfrEMPo%HmmA=eMtjqm-6;h-Wu`d*GZ{UMZ9Spqaeox;~x zKqp+K(_b!$Z$Fium)F{I!02&mQUro@(aM%BhFkv)HR;vMLUYhYCGi`bKqeE@r&P)95V2RvFJw@E!iKvb$Ci3s$_5$BrsP*oUb#-lh z6?9BQt^D)|dyELN{q(_NoARD(AB0@FV=MZ#8$TYxb3&*{+B^01XEW)k@nz6uHixoJ z+M{imlKW58T|jrT1%3GkJevAjWntr1SaSYy*1mk!&q;qE#>P2<68^q)cJk7b{C&E7 zN<`9?9-#O65dB=IP*%6^k;0#s>J;000#E?mr@#m`w|oE7+P1VM!22 zjl2}u$xj-|Ovb9*thB%%&kP<18ibzatFAtoa$D??AW(|_SpsfOGKSwgf>L}GH;LiF zw<@SoRa=te)gaOlCV2&VT0S5-A8N^9j%O_tUR2JYEsWIO07e*`-{wtplK8Br?#;eR z5a{YAUc5wcJMQUyYx1;x0qYYiq5r+kmgxzVo5>?iDNaqg_p^)wTk;{~tihYDNLk|I zM34`hLVdRt{y7De%iP8N*uUIm^GW1$-IZ>8wXK{5UwU0t;X5SZAz{St^Cwxq+|n-1 z#85v(akqB(KWAr+wRuRDOOJeWa`Px!WTsQut`<$(G&$QV0rusRH1)(uIehQZ{OK^ zD)i9e05qs?>s{f7RH;ZG1=z-30)nipXH;Z=cjANhtvuCY8JeIE5DA%8uqaW|tod`~ zu>zaK@>9v<1ju{$K*WHRk(*Po*;4iHGt6gLk&P8E7ptW&c z>|i=n!GiJUA1WOSTY$jSw3Z;D^K6ju8<(y-SKR}&-m7E1^5@&{SRNTaiOCH_VdYA5 z(JGf&H-8q5$O$T0O+e(I4Q7_|G!2*F42vy^S{|a#uvfMV3~@eYYy?aMZCPdV99bwL z^Ft4$%uJoBCz}SP5VXGS-fSIe(qO5|vkcBJKni24Fx}^o>8gT)y*uVbs5Po%%Ugz` zM7As9w5mJ!!4~BTiWZ{Pu}CD{CbeO%83U5C)n(T4&abWOUe@%NV)Y-)(SgnjGZKwXmwFYV(+u}30e=yE?67UK9{`tvDykFP+o-lT;0g2zy* zTd3OxUvLkRnk)FNhMhr=ijRDx1k61x7Q{>EdxY`f+s}Wv<2D+};t?zxr8DtfcGhaP z?JH>6CUh~L0FR5z`+{^47}`Eniwm^V`0WXM3wvyYow_PAIjrmd0{vCY&~j_Geac2` z(I1_#2xdfJ;4tuQ=f>r=rx9^GM{Cv9N2}#ijll#cbTI;!h#1moRJf05=(ow&7#^7G zGo%#!S%xlf5F^7(3lRl~TTMNVc2~Mm6e7-4pG1YfQ%EH8cG(0q z2(e9&a{s2}`>69&pwEgYwS>r36xC_%w`WlJL1P)a5i)zIPL-hK7g~*oIQim&CGkSe z>*E|bKba&wk^W!K#fZXlgQdCNw+l}W5gJ;;ZkLV@pNuu@%c<;hZ9CgHvhE15u4lO)IS2W8Cfx;>Am^?iDo>e)NJIy~>| z2SMJ$!`H~I2ohJTWvKdz(S=VS?QAB-^OzK+O8mdg*gxl}{?G7auR9=HYEzE7H==0awYiPxaQmI3aI%!EA`0KMv#Vzfo&PA|}q zZSZA2yQPDs1-Q<-_z%73{=`LmuA<<`y^oD!2u~4#Iv=^D`2vKXns~QW8hQ{@5hLqO zG9Xho#GVn5tb!T?{rDIT_}^oIPVP`J|8Bsaz^Cg#C)mI)0aIdKSC-9Ir5Y?E=W_V4 z##`5WU4zAUn_4=DOZ0i6`P6#hw-PR(*yB+b?w<#4P=dSy9QBYVfcHZ|k*GH7$$)yl z1PvwrI2)`nfs~re+^TCQr`8M_nhqQg`r>)GkWzWgZ)3!1tbMi-I)@NII@g^=8Kp?i z;s4eG_P~dYBdOV%+<}w3jBNy;xD9;y$2RT!ebNtU@4f!hKx?fFd!7xeZ(C0ZTt)xX z)bKfky8whnKJFSE++^86{~JIa8>>OOW+O#BQx$0s_+mRFPxxB|2wfO9%gpWoeQ$Vb z4|#WpY!BdH#km5Cxt)=07v?Qs8$CF)%8GTz*SbY_^P`H_@5B$ zg=01#l9&qMOY)}kGIFjcoBpC8%V0H-Z*0+tn|1-T+ABk?cMsaQCMN5(Q9P6iY?VrA za8O#;oNNr(sl1JJ;0nipmp${%mmwN`%Xad*Zrr#n(AlpGThFHA4R!(?0*ly!PmzXF z$6&sezE#N$3in?b2Fnt(Vb8^X>7^6z&t9^6e$!FfJx3NK*<#Bf-6dmN@>ijX0xqDl z-bF>7g|p4#45~kKr}Q=#opTM**?WL?`;OOtUy=k-+yK})v?Ye~Tpy)nT{oLq8Qs@^ zv1!QuIh>Ou(4=#cYtMDW0V^e3y&7^`_9wV_%rbJze(8uZJ0Hlo4Q7lxG=>mQW}Fxt zL(nuD0rWb7>uW;7&NT2$fs0Z>$f7?FRHYkTCdG+}$@R$xQSd&DY899OUr>N%J`QI2 z6))xusvw$|qF>DHrE3GeYo|O8M|=ra#ORX`Kllqavj!M-`!VH<``yZtfm`Qn$#0PF zsA=ehi^hB|fj-i>@E+L5`i~f^7XQ0uv9CW>Udg1oLP~S@rr;oa2fZI}?MqzXg|BX7 zvGYM5WGVsz3$V`_uZ+SoLFbtKJD75p&eG#-08zw%gM8(0eNu=rr+mBE8QARZ*|~vvo2jt|g!Hbe(|GuE!iQjo^+6&K)(V z`s|_Pj2${`4PBU;=t1Hm8)tq>53Uv&R~S^-iD3W6uYU;KL*)1$%>be}eHSISsY@RJ5!`h(I+Px zH3mTq_ur38xH&2=U}r@Q=tQVPuI{t&+%RB2AxkoPpaynf$IRQaALVv)w0Am_efmE_ zomNzRUyzi>=+JjA2a7i1ncE#?&&(pvyyJ=6pU-(VT}#3fK*p3$<(3QJoH@zD-7d)u z;NmArzo4{0FkPoq(t}E%J!(gC>oH|E()jMz)D6{7_M|^&CAZ75U|`GxX^`oz&Gd?4 z>J8Kj?!prn@1JL~2J9$^rn&J*>BzQI~CQgmNSzICzgsdme)x3LxTlg z4;)UFw*g(|b;W=uZ)YU>Y?VTxN1t9#L(5J;RqrKhPNKWEUq^6CFfPF~R3GgH~6K3#wN69lW^=e3afgj8gA>0%eb9 z@)t%vzlyllPM=A>%Wnk6Vult_t!gnNGl?|T%K_R;(BUifFukcY zASh%-lb>417LuD>V6h5c|1|_*q;*yf>oO~IYGt5cZXq=RpFqH|ntjI-Z8>$yK5h#Z z0RKeDD`ZU%3U!|@x}7bD$}RF-PARPi^J+t;Z7~z!SzSlk3>B>;dk>iqI+A6s5`q>8 zRRxNQpoifva|Zr`fh+-0^gGjr##`rxY$ce+Xszk3BXwrygJzojbB2S0uJTE|Jut?k z%LdWW@WGd+-ZXSMLrQnmT6_OCoOPS?_fRaKUXu+>{gJxVE`InL0JsWkz;F??uLyx= z2DfEf$i>WDFcSEyO+PPE`5Ay~l}wRRVvK)BFISTl(&0m@EXBcp)%xmE4wl zYkLASNa+^WMxU26(1=tqMVZ>7oXpxGV+o6b+laL!WYG*eeC28L%) zkVNu5lIu%mVuQBy$6!SN%cVCxmGo2?D!Oho7llmg@H7j%K<9jWAe~P)o0VK_&^9ga zQ8Q~oTgfA;2iu?|VS*rIbQ2HyPT4^z;5cqagMUWoN)<_@q@puJ-6H$(S}Nmh;ug0T z*Lh3MeXWl$gN+;P6rfR%bp6`gi7Gbot>%=m8&V(Lp^cTUgi`7~rcXsN(KeQP!^dF% zSQmjvLP9fm>Cd9jXOYI3HP1bX z)b?7ms-IEpuy_*5Y?lI$IN%Q?GR4Lv8y&qR@Xv(;WBcngb=|Z2$1+yI(-G#%9JB5K zkz_MCdlOY(;WgXYzRdZTKxN-DK)3VPo5T!}j+8lYJjqD$J4Nfz5rvK=`($vgA#L$C%9O$%{Xj6*W%etzp1lg-dm|bq$;Pbw zBwwXQzbNNqXUw_ZSgMe(Yv92QmwwTVholvkz$O4dAUFo;U&?Xkz3<7qYbp8>lLfd} z(oXLT>gN5^|Id7>yf%Qcg2Dj=?q}aWc{3XVI|sXOuTU&8=v+UE>PjTz^!_&jDFE=p z7)2c|BBIicWe>&wi(ve3GGuev{~m8Dg!94El6G)g!edUx;LT_*+gT=f#i?35*Lwd_H18WhHxMw0MF&6_xyE3XOU z^J*vn9=#PVTL;lMyVj`3p5*9d%1+H(`=^=jsy=FhKh%+4a>m?h<$7*Q<4mMZ*W%Nu zKNG%Lb!6GQ_Mcb&@q6ujco1aqBvg(9w{>il^FBS*3(HJZj1w3^-;JU!m19>;f5xK2 zHo1ai6dgsP%PT7~SBj~c*S{8txsPsPzwfuE){r_MUff2B z<(?^OL)*3&_0c=&<^rGK&vd@Rsw9T{l2iw2fOYPprOixzLij+P;~;Pt?&*$D4(6kAnK6(hF?P>S(4+TkCf!L;!m&VJ;{ z19MRBvHRkJsYypHO(keQ<^%cl@c^p;N*m9ZA`DP`+a{|iGq%m!u&s^7XDy_zig2fqHsYW2YId9kh4Mh7!_jZ8#`V|YaI)JS) z)pY2TaP`H(oxJwJBItNBostqJ*uyRIhRNRsfO(K0O{R0{n7^>Epk>)$kA|Ms-$*Wm zmRowRS+xG1hHA_u0)DMv%`|dI+V?ek>Ube+!&`8`ByS(4R5{ zggXBiFB}TLWWcI;xY;@%6huUA@DotcD@@*g;jlyB$Y1PQRU9q9S=fX6%iiDYKKZwR zRP8zUXK1M}*I-bHHNnn|u5d?ec0SzLvM0FuMirb$mTsosq7|I&kT^V*6HFe(M?^F6(BGQAXxhq8{ z=L8egw{c$3t6Xq@WaWcGsFhGbgD-dYT$VRj!9#kjzMU<(&v-W6S%Ax$=?9Z&|XIy@6dn6*90y-r;{Im_sKv2>djgo^Fl zE6NP^Q#*g@>47GB`h^x+Rj$fV>wi90{77246(Yyj>R)wT+>Id=S^0D}+eD;SjS_0! zv&QY`S{4t8Na70qCRzro45UuXMO2R=~{G4QQg(3?vryPh{GZr*0$?|)r5oO#(*~!lf)i}v7_)h z0B-I<_$pA~P^ZiKLkWh5VSSS$chiZKB$TQCkVX1~?07=7<6 zzMD`=W;tgD2g1C>|WG4MrS46E! z{ykGLHjXeTHYCv+TtA>Z8@A!&A2b!T^tF1?x}Hg^^ctT@+y410#e*5YMa*+OX4Et! z`EUc3vs-0j)!UN_JixS4LWD~e|KR(Lf&*6=t*`Zr%MY@~_lxSxC-u8QiE6xCmud+1 z$uVxr57O8R8iDDJqL88;6#*uMOEeVPomect>_uD3-t|-N~viupqwOW70%?QkRQafQ2$~U74 z{2B(7UQWYrBKJk7dtL48gsBa1TcNY4_+-f z^kr-0uHKb#;uEm!Pfa9TVJ{KVTWzQHPXh-4bfbsRy#vBHzjgMv8^)do&(2=+FZ4J%$CL||EyYqG{n z^=uD}_axWHW0*%d=|H`kvKlFCz`7OhYa9AWUiv=y>bZIj9+z0P{?Hy2{~Rsj%Z=$O zS$JS)le+gCgND>}Q_TBAmFvfxF-6+N6;|Ur%91Qt(fF)(@QyoPN%tJfbkt{mz*>=ZG}27G$r z+2u!Q38ZSJkyPIhZ0MZr-r}kFxgs!BN1)cKci#VYc2ktC4qSI4a}sY7Kr9`$nHm?` zV&LN$Ga+-O^OOdePH@oXx30C!z4E78b*c51x}2v@+@WM5J*7Y=u{ag1Q>e)o=_$3< zqmgS+t*<)0*po|LKe{ti+-GlkGv+z9V#pUs+lN+LM##>;Rm1Q1OED_nPA7)Kfc%I0d=xllks7 z>CNdTn*{EQTJ(nsUSv>BRayy_4Qx>+@7Zh!)Trh-So4!IDLio-|@k(tK`%NV_=|g&PlPB)uoeNIA zULZy74y~nOr@vGx3*o&_5;j2Zl;P}*i^eUaE-=egQ7e?Y7MKjUmw{h5WiaviqJSm= zz+1e>uCR60j=H*u8m6ta=JfMP-;8(91}fNExqcWEvNPvp^KJ#u@@=k2D%&@VQE};H z7w8Y!S)VeWZ8JDKX5S6xflzJ99d{~9a+sX zw2Xm|P>~Wv`IsFlOZH^!c*W~KFL#V%OjX33Y(#um26t(BP&acmU_fL)!EJN8*>=@^ z`KPU||2CwGXaud?eYr{i|HUNJ9l|)xh|N?Y`Y=v>&aFLGcxzk2!wXg(N1)lDavI~e zpSUM-H<+me0t?J;YelB^h`Cpko3jPLdbx5>|F2HbYpheh=h3iumruu%my!i`I3i$j zecd!6=H4673$w$xbi)lvG(N~!*82j^fTF-Ia7RK|>%ed8DFS8H?azFpyEJKpIYzS9 z%JIXm2aLB)f&+E5Ps{3*e>yzZX@*p7Y7N6vNkJgiA!+3>QkenHNC3BfsVCD3iZ3M> zZhHTy?#gdc$qG4jhD~K|7qBZqG|qq$C!&6Hb}UP)`!}ihO`V@VloLF=9;F7*hzcm> z*5z8cFN1f}`Ql3D#ufT<3kU(0W>M0c#=EHF>|rFP0Zb8BbpZt~wWSaGjg6@(PHXxj zWqVP)Q*&7s#MV{qPLV=38+kP)Q4y`ydNP9VddgPLn3q_E9{p$}1W^7xr``$uA|Y&8 z=hf+UCJNf@fRz)nHNZ!l2H*Dn(30}Q~ zP7<#+{8Z=B{S37ujkPP2O?OForzAVrKIo%Y9F99AVBaSoPRdjdbWVEb#YkP%>r;>~qsvWdZ?w90dUNda%02v%b%n&_ ziqojyRO|3(yXsK~eN}%hT{8B1e*>`>HO7(0skXu+YlrZBnBymm28%H#J!OG(csd4JuTM16380^-9pi+%YOWa-K$0H&|eIW3G zvMFiUW!K7|pK8wPV6I$a)( z!UPu2&+#NL+*Bd}5}LD2DwiZDo09XZo0F=2IGUhH`effXJ$>=Pn0t47YP{=XbrWpR zC2D@Jo;Q0VE!d4|A@ULPPH|?`rK*M51wNCyHs)pV^>Ha!E`y4)K7BX!r=b}Kt;}eH zocy{1unQ~khqPQeg+HgiV79hOCmJ4LiLC>!{(2jfebT@(If zJ_>CZsO7hvtYb}ZhsdX_X`GAf>Sn0?IN9ePo%;tM{P_Q*m2w<@>HFzd>2~=fF^8@V z-UX!Rb}IP_m9W~67u`0yJ0*sS$AwS)J>E>vZ;moGb|JMH@LB@rAxr4ko}gFaaWM0} zy?8!vMu46pi7X2d@&AnfDpg1<@Gq4UoQ3l4X1~&9+{}_0d4x+IrS&Vx%gOw&XT}eX zRBF8YV#%0^O!##Uk!J~TIQe^DGn{?2fgudc|K;k{<>M$DwQGy|3k6JLqOen9Z+I`X zdaZmcp`E%XLkm62Q~gSYdQgqy*`R0xp_e*#Oj6`OITk~vawJzZf*)|$nI*XSjgS8l z6yID=K0xVCs%|)qbsSAA{f5C(ygFu+D(5Mt!=I4QCHFw;k9GByk~#wtdW0b;j;aDs z_W`&R_Zx1VDp@U!lPqAf8_t7@!wko#oHY>J{=4i*_4K_kYOF9=+ zb^_>tY#TJMa>A=@5nQfQKU&YsoOAC=5KXsX~TCd;g09LfCZkVV=WGM$d=5gtjjPf5nw-t3X!Qf@cMUzWn`!DDwWKe8k#0h1M z3|OtrK7r2LPETk~NA%l6M=<*|y2h$(1*6Ejf{(ZkXSwn@;?2*MRYX7XN=zgBL8@c* zRas&tO>WQ1JO|q#bxAyy?POSIz=?*#9QS+88d|_F-VJHgTq&UlOH^+E8Q=F z^xW{h{RSZ>1nK9{Iv>Zotz40_v(1Z<>~X@`iZk!w3v`0Pq0H{dHx4NN_l(AQ`__MJ z0fZslUN7!S&UceQE@PK0OBQ|ra&nq~sRscUbW8KrNMe1`b<(f|7n6NSQjxs=8yd09 zKX=RCLag{{xg(2#WGTcG3azW_(`7Dg4nWXGSp>WHFI{qb0o^cQ8uxWWa(B=z!CgVP zRPOqyYpbHlU6CJiwxw^G<$?kT#%RXYEV~xQY0Bagag_H?jr_2<6x7i!$^KbcY(sh* zelqt4_l%nMZLx=eo$l`6x3XJ5;1e$t|rY=|4dtuyxIl)c@=t?XssEz=*)Uzv=`uTxJQ%{>En16d#!!J`-Q2*<@Xf`LNraT|(;T<->zSokz-#3j)klfWD9` z^K$AyD^J?Z!NdGqx8smQqy^a@fO8(APE~W&gut$C%aSp&ozYH-WBb|MYEpXFqnf3h zW5BhO-}R3V6&hb_(bUcDBJRxUPXb{~4qqtm$1G@eZ)`|dkl!=NYQNN5q<`!RLF1)=Oalq+*H$X*|3>IS zjy`|Wrfx#qs_bAkjdjj-ZjW87(Zv(0r(i%Am6xVdHPQ9o#?gNqCcXEE4vUdaqNDi_myghl=1ckzlKqN8bK?)P<`R#+E)2My7^hZx=&ey=V{7<*RJnXsfA_s;f z`@y?K%!-pJ@0KU0uSUfHVnt%&a2ti&Ot?n=U0^_xP-?v-A$NpW77`wZ*Sv*9(ge&FAH#G$GFnbnJJkar9I)fS zFwV(uVTTN&Ib2n@((Ob8$@U6E;BbOz})ZxM?O+oKO}l`2@*!Up+$m8g{1@UoPbZj$BX+x%2MW+$QV_jjfNa>ui?p(D_uigm zV0+T~5`-UQz{R$aK9UGkbArtKEpZ>@;j+^B7j%c)ze3gr2X|svPDClj2n34QfbVkl z!quljb`x1JEe=_}TQEYPjJ(}TFn?^rkzLpYi8@Hxj7jSW3f`PFKQ#gu(KxM*R`xgP zKpGE`;rD1{#e#(3=+xlAqs_Z68*p_4l9jPgHnxQDpoc)RA=3b|i7-R$4%aXwfJFvy z>_1zAv!D&O#1T+e0tD(*@FO5S8BW6tf$MZrNa^{rml$v`m@X~%eG-O!m<8|XANN(` z!;zOtdp0TaF^`Q_$mT^bgZN!4e@Jx((u)?`G=awM2=Zft{yd~g+P?BZM)eVCb6S9^ z_uEn!Pk-X~+l`_bg-YD~|HfTM878RkMhs6?KgpQ=MDR_{YAu6{A3|m6yDH0WhxUU9G^dpxAfi4Dn0t3mRv?oj(aC=NS>=ei? z55PG_d^L*);_%2p<_-vwf~zY)#^^+$G>6aE+)v@Pn{GNuDs-K=7#dfMxZCdgOA=Ax zzrZxzg*Z(d+*^TUp&`+94AV_;ITdFwWV=+aAw3s>AAD6m4ExQx7M$LJodmN;87faY zc95hS67zwp0KO8T^7fw*ona4zf5(GG>t|*e=7mgMA@}*5@q`hz4JVlNKR((^*waGp zKSIK;RZfs-0pm&s@I?sn6TpvujMRxiB&iLhAq`axg$c=fgS^`fOSUo9h*722tlN7|rB0Yc)=1hZ_GWliVll0(&@A+uixU%qLOfYg3;CTI5e( zl~)SyqK7k!tmf^&7evjrGbE_{(f?;$w57&(T@40|+TbJ-pm0%<(uvr=hT<*>D+c$0 zQSq?XhQ_x$`8UH|;))yLt+*LPZ1r57la32rPyNxPI zvlbaR>ZC$WUF|vKhuHkS*a-`p#ipYab>|z*IR6FhygE{76Z%ESv4 z=R={=$M#9fmnBeuqQ;>ix z5)Q<5u^mA}_rKV=`6`!>2Vxl8!dPE_`AiOWqTYeu5pi|+v81d5yA5(H<=8+d^g@h^ zqbJUPP+QYIZjSS?t27P~5}pw+dQ~qb-ZcnS5iT6`T!CObt5`ZJURX?SSR@Xy$bBO2 z_S*pk;T4)zL#~)CK79`hNw<=U7Cn;JQ3eNeR}37G(3Y`5XY{^_wuUL}+zo@K(PAfn zMibU)Mc=B;lr{K`$uZhie)qZ4{^yU3+vxO0jKjQ~Q%U!``TIw%|1zN2Lg2}jKHDG(uZr8e; z8R~KosMpGmEyjJ$`uQ9#8&fpxkTVA%tXNCU{%vKeJubT<`PGZj`mYNC6C9xZMJyf~ z6u@JRSZ8^|YyGKZoI25BAIxZbNM7KX`?0s2)!()t7qge@SI=cwb8=<2JwIDb8RW{4H8A(R?8b>vbs4nO`K-SNxX9*rZiC z?bW6>B7wIc%8E8|x>%NsJds6^s@8KKYX;omfNh;!3dEVGe@mtvq8kiVCHMxkjNK)9 z;ujiS(S#H1Wr_$lBLAeItb))7u96Cs&!kT}elj=5w)%9CuvU}?A-<>sE@6fTr{-jD zbzU8t2Sr64&saOq)KCwZ&OeLYYg2Q-%b#2TseK+MFW~)oy;H&PQtajUl3()b$*pS2 zwRgU$?d!*v%yMd3{a_k+%7GEb1754kA6lV@Ngmy0xWx@GD0&2o;i~A!L{!Yk%`%2i|xYfjpjZ2#rK?W^uD#*c;768ZjkN; z@^Cs+b8573BJ;ld9~2KhCiy$uw9)i8%xD2mZU#`?)n#c?YEUjL55v9Co4Dt=QTZ85 z>b&!Z)I`q{{R#?zB(tds#mM;-p~8*E9;d7xZZ-o82dDKqQ8S5ua?%}vq$I`JzX`A4 z{J#MC)B??LuN7fu;E~vYZRK?09}tD9<~I7PfA(C)RNVDxEMNGtEsYfYA9PXtRRm!%x zl7Mz(`lepED}h#r3vDXldQW0f(6)AY(@e3|w5=Q+P&ZPO>Bzg3re3fG@2(SON28vH z0!2*R-=@yg?ph>)Lf9$O5c8J+uf>)>UJaio8ErX(lr-@|$6>3uG1$}LVaCSSoI zt|8-Tk@c_9)z4fv$sSd0;lFUk|4O3_mCOiGjvepFn)HnfbX7o*Lv#+nsOz2$k8+E} zWrA*|2<+cARJrIyZv78#Y;3d=F7n{{Zku>ViPCENl9vTqoPkCHCB5kw{sd9ll*K~z zg51UGL`kBWjQl!km$Io#3#Ws7NA1j(5X0Xo5+l)NbFNcmyMITjcOCvTV8!-c^KBvB0=l5f+{q%K}Pv-ak!sNhvCJL*#9My^h4uBkENAOT0P z7_-vuuKcZaUmxmN?k&P4WM)Hgo%@bD`U_TV8j;T&9TJt)7ct1BpXoH67hakW+Vdvf z>(I*pft*W$Yn4`h{G9sQHnP#mtSe$5Ln}Reb03qC6sMa{$TR{Gq|)u<0I*OCVmOl# zNaEiHJVu)Ax84U4FtLj-=xCeUo6mhoSGR9^=+~|D`*WeM*yG4kdeaT{6@0wJ8C`>zD2cPKFfy$zC&IpfA9JO zud8`vM#REUJ-qK`G7fBGI7Dc<@$64w%mn~lK@fK{k>!E07lY!)=zk1~TfmleE>D?> zFdiH)S#Ffd#Z0U*8}vJ5a!1-VI*>A2Z({bvg$&I}7wUo^7`-azb+ra9l5U#jogca6 zXVI`{$Mvlwi7Z#9&#BKnK_Jt}>D<4J;`SY^?t%H&@m7F5QwuX0X-*7{>G@f=VdwZo zUO>BO40JkQgu@D?k;_ReV-E2F2U!62&&?a#Ook3(DvdFXU0pt1k~{*rM;l(jlTXl_ zvXATD^@KIoRMG;7aS&`OIEF&!4wSrHdQC8CbgKA)zN>pvfWh$sU~XBj)yF+^DdSi?CZBOL4zZyz^Q;0?Q0m`DEL&1@ca?$tpa3y- zoxn44V7`V~2H*M$?bP^LQBjh?5Ie%?A=R*!ZlK~XGO5LaBTl}OS^Bl}Uh=F%U4x@T zew;?Z8)lBr!a#jcBbyDzyH8}Px;pk@z6mV!SQUGIbFcO%Jfjjl?e=RlSI+LAm+!el z_hE-MI@7hEzXm@i^zHT&EDskOV@ddeM}PHdhi&GO-c4`A z%g+a&hMz73#52Gh;e3hdNI7or&ARtP5D+;zeQ%44GVv`F;pJ9gEpL!Elw1~hCw4}= zeu-~6A!|Qgf;yHiMw-F*@R8Dt{bG7N#BU%2+FL5cq*K9BPKntWFDOT+Z6wuZytLMZ zzzTr!BAmaH-k|?<@J{rCUPfQX=|VPm`U9&-6x54zDd!P5Z{CbT^Jov?Uc{R^j-SY&^pKgos!aq2(mMGG^F-uz|CAE0A=pRiNY@&ZURY#)%vHd^fP>TZ^Q zLX98If&gK9HXRnm3@&ie3s3HYvH6srZw+l<&xA^C-q?G8%qh6G&A$gHb-Zh{!D7j9 zzwISKZ(5nuohyH)fnz|iDY|F*FH%RtG|UUf8+{sa|DO2K#+2x*zZD@sp`Fw1xR}7O z{9P>J@{al+XTk}+Sp}Mp9Feh&rJ?*fDLgLzYj%3n7Ntb0O-RLc^Do@7gIY4k;vn z6#?Q`RkkI8@H?WTc6A#&IeRpGqqf6sPWCbUN+#b}jQ(@xIBB;@Ct|}Vl?8G80>hqv zvU9WFkYrDvyFqI2xoe>l^jax06EbZxf1S5+g1&Xa(vFi0|L8JfoyMINz3wkdU;oi! zoJ_+j;4$glY7TuLU1(-G)IE(!Rty&D%+r>ci3TYh#%lXnCMUOGM@xauW4iMY#a0WuC@ z#T2lrf$yudKPk38>sabsk%Gdf) z$)KT^>~prvy*Ul+Tt(im=8*-|!cG=GWAx9T%W>*&hhrvj%>u4ZF=dE9v@>Z+_b+LD z`R)BF`HcJ2DoGJAu_@1y4WP%SOA#sZKM>oW)pD3&q3W$+^mBOQO3INP)rRG_v12-5 zSR8S1!`(N`rDBF0N*6X5&PPHvR;Z|o1Piz6((mvhA93g7Fh}G~h*9E^lv;+k6QC+h6EEZI(=T z5v1NYxZpb=>0^tlA$dX4QC{nxvF{O%ook$-N;bWJd zJv#7f6EuJ=tD~B`SEC_<}iOY z11w!++*aO3vszZ1QD>9w0VCOuuE`C|V@i~!LXV-vdr&7!vK^Mfgn}_@7DCSklwIjE zB#r1Xamkez?9*u?0jSJOarKn>o@*gq3dMH&W|~R8y@^-mH#1PJQCd|A66VJcgmckr_iMVifJ|r_4jR8Cf5|M%n!*l^a*qJlD z!@Ka;yX52eKe7Zr8@?CH{zi~DF;wdv1TU98p<2$7C0XumreQ|U9+uy1FD^@?Ufw!1 z-IC$IOvOwul^=Pe_0>u#^~&R@VJU!ng=&>XN?&cQZGDWRDEF;NBhA?E>h>f0++D#g z%nyWhxpWj)vQ(Ky61@F+OKSn$HT6OGTWtGUClpG+<9Hrx?mKKBGnsXcl>5%SFMY4y zDwr7iM>WLX!{fVm{wOo^JNZUQrs2@a%{}r z%Np->7v?9}stM@JyXL&{x1=@4IjJJa4Z`>bgkiI>i)$~=_~4gQ%j-vc!+$a;NOR^ zd_YZgYi;`)G}c_%Nb~x$scjB)TxmOcs8JA*YH*wS;ou{8I&0gelC|=2WBCV~Hj>W* zTwag5zG7RaSoeATX9PBUdBc-wI5Q2`qoHs#)X0YJ(a1uf2`tbhi~kE8Q{MBZ-)rU AZ2$lO literal 31007 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 k-%g3%&uJ`AZjQE}&4TOA3!3s-aLM@F|Jtxs&h# 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 literal 34184 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%0DbEOMO-|bM_5uj0BSz|)`g_nPD$ap+$a7G7_5uUQ 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 LhP9ciw;%ftDHl<1 diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-bold-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-bold-rstyle-linked-combos-demo-docx-1-chromium-linux.png index e3261949f5371efcee0f5c43b6f9a1f68f62c81b..1f3a4a25d476b494646b8f1640e55ef3848fd007 100644 GIT binary patch delta 18506 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 OP`FQ{MG#OrBn1fpC8Rqs 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 delta 22305 zcmb?@byQVvx3z$jNQ0yxEe+Cb(2anIAl=;!TM-HAZjcsfkWT4F1f{$40Ee#gJ^aS| z-f_P%?)S&N_d8?o2XM~b`#gI+Yt1>=T>BysGavyoisS(S2J*do_ok8txIWTU(;#8M zq2UWB$_b~wO*ehmMov(VYvxWEOj~Q?<|b`N_jJd^Pov`6efH*PfKx+IsS|b&5z7BI zmQiWBvf6Q_dp(Ira_EoF4`m;M# zg-g!cE1{F3Bp3csyUNTo;lnICH8#-oVbC0`yLoTQduQGomdHikjrEnUCSl36b$2LJm87aDA| z!Gq%6xvD3ed2+GcEgagFx%Ely>8J=J@o}e#()T;q+O2-R$J(qZW&tx-s1Jw^sG)>o zx1m&l$Xl%L!|#omzNb@ljw^$obru|GebCRt1?ImFgyAxDFA;7fn`dCQ&^>AYIkNpL zN5JD?ar;jZ`Z2-l>1xhh?dRADe@yf}R6dEgY(_n1nl-~@n&meazvYR*&E&KG8<6H1 zz}FzU>KfXHNV|l8?Qf-Z!e_o0DvJTpC%kWTX0{_eQ*QM-*>)r|pQVm0!Ru@s zJubGzc>7>&ESgRxCb;(x*)tO^672X#{Uu}hN_6))^;^ zR_?O(S{kDc&wj3f&$))#V&`uOXY=vvMz_7edaMbj(%jbbWh^7&X53wI`M_tQdQ*Eun*LgCLRHua#l(KmWi8W_9y5H{Z<;l*3d1Mt#c5$pg1vXwt zIFLv9ajeFEp~c0)!GJ3Yg}EO!eW&5dvzgSdhUC*)jqOar=1ePuz<`2O>pr#WxBA6F z)E0a8HblxZ zYqkUrZ{fjt2b)@qt`#!BOcQcGzh^Q~rMfWq?6-d@o>i|Q;o#%M?t3FwD;KY=8a$~I2oGtPHSd^N!)(d9{&2H*;0kclhk2CBm8eApLw6rX*FPxaQMKQ z&+1IV%+>=;5JRy@#JyFt%@U`R#;bpPuTD?)=Tbk&Tji0sOv=FfNH4rUqW z3T4GS_qHM;wN1SWBUJoE)t@`1?;DRe9f$oE>?g|&K}7bYiwK;^aV%?>eW2bbe&2X{ zu+(uO;CZwP!rX*Yvi>hpdv)5wHU|3`dbvq=jgGo@#;B?|3~M6o=^vI%DjCdyjASswFYdN0R-a&94#-fW~uBJq*CP|&V4SyIid{hU*3K9Uh; zmg%9$>;ao^-d(o(^L@_mYR|1FeMcLn?{1ZGT1@W+vA_G#+fqZuNv@u+Xt~hh+g6L_ z|5@~0h{^(r?j?BRl%TW~YY*b;54DZ&&=n@SX|SOh$=$yD2{i^j3L_ zQLi1`lXe24^TGMHYn`oM&tvy;e49jSUlse-o0=POpWfskk@Suwo}eyn!iaAeGik}* zk;RR{&@=K^?#o_hjh$Pw<`zlpv=;wQv=f8~&(ykV2 z_qRvH`9yWq^&LOmXc*&=jx8kl?OUNe`Rr#qDDNIyDO|0Ly|7w39=ZSJS53u!o2^{~ zBLfw$*=O#uhMCzqp$ksqd8b;0ulcZq3B`3I1VeJyrp_RTG8*T|FV+uIxi!NtB#ciR zb(~roJyCv~?)7ebeWfr_Qa<_{Qd8 zP+&7r_qg*XqXXxf{D#kC8*{(8vo7(C#ktLjQh)i0#q%Q^W38&HsyE704a!``I3F|? z#cmIF4Lw_@GTv?|k_!=p6)r8MG|auf#I_@=%1))Xmv9bbn!SHpu5-h&h_;J9M_%lx zP$=0`Y_}DE-17IaM+t@YOnq5Z{lMki7_MCrIsUU zOLn!q@7ijAHMN|2P-kj2unXAn=Rdj5NF}fhZ!WgC6G*}vo<>`F6E9M~XO6|@fPi0h zzyB#|jx)P^`o@F5zG&B1y&(p=f>G7J_N}u2u`|nk)4unUere)gw-og)J^%g89sVf} z=bf~92$pQYeer>(K#YKQSU-#L2WC@9X5rFC9+^nU64&pZ?R zlB#4E9^a}l>fK9&jnd*6fB$PuK^{pAzeNgym{ld#=5y2glTKPj`O%17>2_a$R2DrD z1-2EkRG~wVH@f}(^f}mPzvULaz1s}cW8y`QeV!s9a9=q)FPbqsrk*4 zyo2DH`m z!|a^&Rl?6xJG5tiG>tSPF4P2^_r*1(ahP-|klplI-J8!7YY<30(A{oNq(L=^zQ1jF z)+dKb8!@&p^m1s{TbrVBsxUv~jntW8yYZ}!16HHv&z?`+eQS)rNoMJjC&JxgePH}< z)bX>w&P=D_mXVIsNwfXo5ZRpmP9gN2gS@nmvrh9@(d?C{_ou^fJN9Gy zGn&4Tc7d-s-U`kTS}oEk_pr`z4OV+KjltPXW+S&k;APiJ*#1iA-^OI2^sAD&t*l4K z`4lc=^>f&!DmTlc7H4K#ly=eekym@mFU^&SJ#oL>C3ri6bV0}VVBI&%%gfW%*5;B% zJ@^8b(>Tar<DnAj?Sw2?J84BQWBC})qQ#|6zm6B9q!rX)J^rO zi8RO*lEXoM=-|y%jXZ-euDc!6TMu%_KNTrD>FYhVyLF?b<$i(m_U_%1l1BdjRp|l& z@z0BZkmv(A8+g$(-kt95C99}9px=2vesxmJlUIydkW&28RV`~e z>MyCC_c~a7LC6XC1H56U)VLrC-iFU-(Dng?&SOK3x5u0}!{?}P#;$RwcMaCZq|__c zhoo5;6B3lbDd6+reH3AXlPP@Cm?p5+(l|u`02Z3N;;&69;pa13=QxzYH;^h|4l%aW_fgx``( z=9@f`IzowAPj9baOmZ=ux&*~ifN$D09d>IJz9wdSTdrQ9oXT(ejD$S(8^AJ1D6vc` zx4#uQld*!ryYr1vQk*yTcJA#=l)-*Oc>_gdEh)mTR&f2r=U$gv1vjtsJeEH5TK>j+ zvX=>XD2OQ|K#Sb>rcG~43NpODONBlf4f70%9C1Dxkw6^p&ow$MwOfwmm%Oc5ZvTu$ zhbv$QLqlikP>6f_({cwJaXh9{q*;`}Z7i*Pak@7%vybaNj5bqas}oQ=xCX&e?bA9* zk6JNydXP@W)z^P7uAB~5fjGH+4e)-|6I$`3UOJO1fdwCU4>hzqUA<#n*6fD3Ih%3M z^juE{EF(2^%DtKA6nocYWUMeU<>RX&-gqO7JGq@RO%TU|S5Q*Os9igQf9=ue;zSA$m#leYm}j zEv_zmqv_57F3*+r*C_{}zTCN^S?7m^T7NI&gT$kAQ7y_g0F{?` z3|)^ileF9wO4#;=i23LmJ~C5V7tE$rs+%e9+ncHDBVaXdak@Kozs9&Hg8Lc}_eDNP z3!xjQ-h6D<%f~A9eQ&1rD)H!KLVu!IJNCQsaGKE0cp?1eY=I}LLEm96-+5!W8(S)P z77cN&ZS)ZtwJyVNBi+3_;&G$FPh{u)CLKj)5x76G&15+ZYj47#R;egp$}|m=SYGcm zYizXpweR!yzq#)uf`h6!b41Q(wL1?r&!i@}Zm?ul18zK%?mn*#HYpj88QuvqG=-n9 zoGxz~M)rtBBiIqc07;=>TULB9nhu@hQnTpI&EhBA!9tyA^PvKqm(Ae1_xHaY=Yktwv-(I zJiNBuwwtT7TAQhu_tF%TiepsL82-%KP)?hEbNO76u0L`#Ljfv9%42WGxF)V{mO|H@9z^d zY!ATbm^vBEBurRhs{mAFMEr`aL&!z@g)mWR{W|%ZaM!HueOm|}r|E&Yd^ByB_QH|R z?Zw8f_1}o00j9pcB|72Wk#f9D-gR_b23k%Bah&?%DjA~P%@_WW7_j%sn%*-~b&r+S z3m8DAJsaWCWKqv*??XH@)EXgUhx|Is>%|fZxg?IGm~|&}RbYxcCEPsbt9s38EXS*T z!x~|IJ5yCCHA&8_&v*vYrg*JZ>D@*eVJW*)L-AU|)-U{O-1eNhN1{70Pc@6k&)|b~ zsiWsL**q`XhFE_jbpPV+5*2adT~d+6#|P}nkwGCL41#3B$)(KBfm~B3yEj>}5{OMf z+H1<|xeJQGk#x&eek#U$K=$%f`|@T&Ia@4Pg#s8j1*0F;^&gV}f_~#3qq6lo54t&- z0IV?fl?`U%z{1%lm#yDjbr{ z58)yN<7^A9)d&U?*eNE80|Mroy9TKBag$=8GFJ%lj0)o`??J-%!W3bzp{|R=_A#|=(ej=`8l zlihy}$_^V|1>qEb-NUn-{=r-X|D&bvm`3P=S<2rQWW&Ym`#V<-d`G5pHRy_gkK41? zw)f@M{fqX-C`9d~Bdq0$BQysqB*9@ZoQ#KYH3>gr1c*+mf@_QPbB+loo1=6lX)E^& zB<|``SYM^hS8VqTaZo&L^iIjkl4)j=OSUsp=hky|?J+K5!zu0R9IKv|-E?db8qQfh ztUr{mj1HBR!+qR1m?i*`zpBr;Q6669GQ*%4l60?3J&^fIEyLFH(0mNk9KtMyB{$w1 zK@;N!s=@ljoXa5U!F(kj+GNcl#pe^9h+Fe{j}FB&3%{%INRn54zFl7yPX!rf_vfaV z%|>aN^jfYf-2F6D0443lHIg{zF^h9pD0eR3Htk)W`URXrA+ zyuJ~jHeFBDe;9NRmT{>c;CU$3!6Zx(A{9Hr{_-S&J&?zBgi5`+Aq&QOZA)nWwVJbO z@w(P5yf5X?V49_*Wc!^+HYUq=Ur0|CE$h^1AVe37pbrD>PVn)M{AI*RiK42Ib=_rJ z>xiXV)_Us&J=geJBljm*_h&WZL`2+f-6R8+8dD)2y?%?2;>*0=8m4~!^XO#G-bBlg zueveh0!vZs(B&4>%KQ!%hfd*3!lG{x&!QB}rSqe@h!5u67nH=(=I^frn!E|ZGTOE= z5w))>e=wf@R5?)R7$mW&@8iaWE2hI~$&~GHP9oc+AfB11wRs=-(6wAbzMZs94U9n7 zGAWU^t`7HU6}6bxcnfjqn$5NA&fmiX$JQHQ(B z6~QQ~+TXI4po2lvX-QlAcxqONOsLxr44n#$Ml8UVD`Y40RkhnD(n)I*tU#@r?2 zEmi}u$BO|=l~uF*)R}3%pqA#91rXC$jKxaD&+q@bM~R~GMw@ag?h6A&Pk@BVSe^n2 z35kqE*8pehAkuU57j3qaCNFPKCc2qpZ%?5a`=!7cxo;BQ9oqL_BtG+QbLigC7wPk) z{mmng%_tJO^4)r(^mx}}fe^>D^6Ik)GRncyE2fvvd)|~siKL*FACB3+jU^c_JosPru4@(5U#sCO@#D!4`T7#@1z+=*k{l=i?{k}gE`r|qA=T1~3`Pa#w?MU%%g%b%1D8GTq{Zu{wAqv1o z=7i}M(+=DYSvLBU^p-FrM&n;j1SHzS3gxRoqd79(tg^&&de7BK2M4M*nCB<7_x39B zss47Yc1plhzU-ZvX&^9kJ7fRuW;QX_c%~kEaj^SNiXfS~mHAPXuF;!RLZ<1$uDuT* zno|GU=OtD-O6ufWA4WK zBVlhdD=%33?_!5YXlfWbe&i_aN(tL-B5rnSc}cqbD+UyNr}?Tl|E!-d`L2-gs_HTD9x zxJ~}3;lZ+kmyZpiN!w2nw8{=RPOh&fa&%o@BOl#1%}d$VXqD-KY7)>X!Lff6TWc}u zAA_HmRAoMrPYaP8#4B?M7nTE!`KdwHc-*&5w1>G3M)ozwq50TU*%1lHs1b_uqXO35RC#3lD!iP_`+ieK{I77Pzn zE(UqTUVe9NV@I`5djRGqbleOP_tNHzG^!wg+9luSR6&&r$1DxEe=~^tk~!i5(^8Ad z)$mwsLxN>#Qx^T)!xW0*Gu_&V~dA!r%90#Zrgo1(x4aTX!i|gVqI0F zNAd>K@b-^+OmHVHP&y`;HL+ezSDJ?U{zQd1G^2Ivo$zTI-1hoW@2F|>s7=JO6`z6A z7b%nBEe>zaAJkLvm+Yo0-mbEPSAZL6O9H44;3_#+CBkmf+3J(jaHfEL#+gq}=*MFb ztMR8_w(lD}l1wl_y>TykEy47~q&MoLtLKb6#X_RKpQXO)i)=-ifc5XwP{&3vgij}a zxtRm{R54LE?q2o)Ewr{uuSi>P^fP14IL$6~1QpJrC9V&%=nhPj=(x|=)@ll$=wt(i zR?FF5GO9g_`igO?#x|8bmC%M3A&+f)VD-Ievc=aMG}&ynzp8G9OJh#!Q<%4E6i#R5 zZ~t2>c>VdP5^>Mt20EDtaVuul2@}?frj=@n&sGHzK58Ac)kucetylHh%~PVG^<9k3 zPj#fdQ8wmo-$*_PC2r+l`cZ1gE)A=%%u8Hv6=V`11X;domF?TU3MDpCaN;83)SJc8 z26(E#t!}CNhOrf~Xjs>bn!e=Hc))BzxVw=FDYKXbO;ce*SGh$|;gJUkT~kYQhjz2} zFH*mHGqi^|+?Q@+@p#P9WMG`45aAsBT%imLp@z-ze)=v~wyr~Hi1*0H5~{wYFIkHA zrqc(TM@tULo|cY@$)YA9gxy^1e(SZ&rm?i4XDdYY4i(x+bUejUC#)$G!fUc))w^#m zm9X3@VRiyp!OQ$2lz@C=_Yok6e5F+B+*KB5fFa}L_v==0r1$yz+{;THtjzgU7|u8j9JlhAu))ioW0ma7GQsR6c97*%{Oh zU-U^~Yl`b6IN;rK184Kz_6Ln5QQ?Gul0aS+CGbr}vZ=O=#Lnd`&dw8eBun zK^w;Gq>v)kra4&@KFC9l?cWa&L?XLRw~o#8FQt#`HC(81rP+N;u1@MobZT3Ue=F$v zT+KWWqu0l#;2)e<67xAf0Nt3s-_$zNava#rH)8NkVG9Vb_&B6oAD*{2YP_L?iq%ZU zy{GDdVq*G6apt>bQEzLqr0&J(_ypM&r-4&tlp~O10@~AWw%+p-^>l-Nx&;g0a~$@g z*Eg3Z7tX7_(e!#T6g{|}sTlogpd#U3joX>MZgAP^)#u2Qmn(rqO57gc97PGTxx?o7 z=0a{3wrA^kynl&Xe90Cw-GEF_vC`Er+%ud~+_!!+aBxIKU2Nt=^4m_2doQO4t=#oz zSKs2q(7X!tIr*anXhS$x8VU^H>1x~}ohA?NKTcQY?(%E9)#%hdQD_diuCV#^Lv^(t zQTuRmKH8q?4X!c2n%D64p}nC&bK)h8un)$Q-nl#l+uDuqWP5EO+A_`~|IO(?<+!#b z>5}rr*cZgc!^T(db^8$t2}vR_mwnF~+{S0aEY2;0wX8w9#{JjhL5TB?^AQ5^gw2R2 zmNNy|#o8-P4p*;V=IDft3)@WgnG51l?~4xi`(@yNYDPEad3o@rSiQ&d-boO3%FR{! zh7`OE6byhBoX8=PYGT$ms|4Y?0-$MlMO+PkB?ee!A%{pPW$SfUF7hjQY4-mXk`~K?@?<+Mnkc2c5**c!}Z8=EMhi zKNt1gLfCAle*ig#Owi$pVGc-kal_q_)S1sr`+=4N#f zQ_JqKOwiT^*Uy!SNyr!#P6y#8-?X0^%J9%QSM^{re^bd6zqLN+; zXTOFakhV`@M2{|{bMz6N>MPtIK3a!MWRM2%xTA2D9INK{W1x(rVtstCqK`|h%{D5& z&6d)WtAiiWhM_*1+>6vLB!!e#)mLO3^y=RJLM!4kcAIg}k(zO7Lw`L<3jH8d;Q(u< zkzQeMXUUwcwytVSmz66__;GR2G2AxathCTFEErA^ z?$%&XfFeg81AhM=o9QqmQ|8QJ>*W_ad}E0bP$@I)x_)$pinN|;e0{!%JyP;6ncp_8 z27j8_RKVh^{!4=Ba)R_P-txLrArvsEpSLw0=*2j({o73BPOF$YnK-YxEoOBfshxC zW!&}w2?)^EKmAdIuqn)z!@U9dPEqC9p7_Mz4>C+uVjU?m6O`-qhQ7Zn1}Oi%kZkSq zfi;=4nLAnidc#GIF_G@(Va(lcpwsoAI?0zfp#9>qn*{eJfHfK4rpw2tWj12)JAB2w zbXSeFaZMTT4_lD|Q7r|nhV4t+6r_G<&?%gbpbyNqYGUyKG~RZ?c`Adv#* zv`h`p9rnBKwh@r`S0%Vjzg!%v^Y}Hvy+)|Un(7G!%UY%{*7~q1lq29H62qJ-k2rR( zYfQSnm@TzeJ?vpE6Wj`3VvtXYrc=QY_4tJu`x9Y1v%Z?WxP*$8Qmj4H8Io_QUS*wl zp+YZbG!HEhu|Bd)E68}p{*DyFv^+9_@08s&E9gJm6)%OoO*Qytj@j;8=Pu&m%*Vol zWF9|}V`)BlZqkeuCtvLHFa;At_VtYwq-IME!ADZjumP86)Tt@&&?@6Uo7=cQ;l0mI z4cU~+|LHNTH_lr{ansC6=Bf?~3PZuBgXsz^VpUAx=x zgdvxZDGeoLE}c2{uAy%N1S!x1%x)XoRQIGnCxJz6G>-2U=d*?>c}O)&}2QqV97*=gtR@IeZnQls1Y zl(`CLTmwh+Z-o9ABBliv_4TkNn@6D*H?0UE)C~jm0%0jL`61p$9RcUnV0Cjwp^+3< zFUlHtxPbIDV-pqs;FOGwnD+=ztiE@N`ozfsa?H^~F)_&~Qwba|*mq>#-`z%JT)0 z^;dRdP-|=bg_&~)_OP}6FpwI1Oj3A<2Pp*j_cfrf$an)= z$;MwhLci3gHYOz}yN%m*idf!4xrD(f)4^Y%Ums;zcc2xh8;sIcc~n%bAagA>!i25m z=e+;06c8v&_&eq>3&nmH3>}Ui5F(AC$K+=J=G1zTKPDYNg~Wi3f*{_hs166 z{Yhw@!k6Beow8Zj=S{`I>W5JVxotslH&g1Ja}o&NsVWie%bduxZz?7XCcoK_dZ?Kw zx_>aM3x^|4b(omO_(RvDOPQ~nNvm3HcqP_Hbl%qPuex#B6=2TY=Z&NbD(}yx+a)>e ziet`KXDZ;#_w(IAMJJ$$bx`K~Bt~*xr9@#)$2GFlkuIM85heUCqd@>VK$wq6j)@k& z+2I=%`Z_KtOOuQIm9y5}Hy_-TOeE(^TO|x@Hw(g1mZzbQBAfT1`_4e1A&VSvzu$<> zXjYI39yNpRN+lFE!7oq01ag055Lbcao2&v2HU; zRIB$rH*_9gXLPrNFNbEahPzNsuJ&~|oxEYH|CpybPoL}fP!;!#W#%Wwc8%a5OL;%F z&tem!J>gz(qseHE?NAVP2GzpCZdA_AO>L|tbK7s5zbPM-RFBIah(X@MMRIQ$?p68Q zNaOKsgkgte$eIbR3#fE)KmKQ7*+90l$iDGJcIBHtG_Pfa;_-}L86g&d9?+|iE`x+9*JJ~C;j{^ zvL^UImxz7mkH}3M6ZG2AL29%PY0`NmeE7#`xmtjQt@*GMX5LRYQ<+y*;wbW$AJ>*l zwPj*Gkuu~Uyn7rFZNjd@9>3$yPz|DRZ|p}M7Y%=W5V1KNQyFG&qZmqw`Q>8ZOyCoOJ6L$YRY-nk>8W~j?Hxlnd^XOB* zX9#^iM?FH*zRY6ep;DcREv19=)W=S|I8`|^>0Gd(1%#_E!$k zcgX@2$xGQp%$2t6uszNc+J=PtQ-1sE0Lug8uXbkIYNUTc$>+-blO2&iPBC13hC2LV zO-ji7ayTtgQV{m3mE6Gr9T@u*aY*YVkW0Oqjb`iT2>+Rwd*0x9WP z(AMckbEH^8#x1+AvkgX{)hi1A_P64{GYz5_Kg*a|l)LS!Am_SRi4<{<2Tl0iH7R0X zeAwB@RB3r4t|pcfDE%Z?!vYpr?RU-Xf@C|8FjmG)|EwfaDN@hlz>hUpm?FA+p3bU7 zAF70`He{xTu$l!Hb~~wH{Kf>k0tK3J)rd4DJeia1YdKn zHq(!Fk>>5~HV5kD2azA)I?1zjhsT+z{OKI7F=!!UnSR@|Cf2NdYId;>n@%?-5pmpC>#6C(4A~Y`&qI zkmeNTPDST4z|NHE_@^QVzH8*fR$D8jE5*A~Wb-)+;kk|1%Gg)QGVk06b;_OJ3H0OS$DxCe1)Bqm zg?kbsH|;<9-Am!eHY=ww<3(o+*SZN{+0t0=j55LFhO=K~sT5*5J$vy;c4~V6HrB$A zrvYe*c@JOD_jccSq5U(~eS7s<7keu-8dEBsHIw^ghUl>KhvbC8HpO5_FVAjWu|QW* zDc+Jv(cz`X!Q(E;LtJr4(3kEIJ|Yqu6%g{uWBtJeag3s++P-%)U(&u&44G zm}_K36E{0At|3`~>Syt%H-?;BYQe-{O=tQ`XAe<{{LJe^q-7b|J@^oga>yvA)%nfv1)O6od3>KAY_m?;b7(UI9%>p zZ+a~1QEoAsUDk4G#Y;ym;uf|B22VQEGMUx$fr8eNmI)f$37nArJUtr_=}Xmex(`=+ z?yz33CoqZ0eMsT8jCmRd2slNE@|_se288NRvsHSz7+{UL>iR;=<1Aug$EW z2P7P6;=Y%_JMVkc$23nr&V@-jp%3}yD<;4DVc~eN`16A&&^}sC2NEXUyT1p%FBYJi z42!_-a|)~qEwSh#Yiiz)<)qfH0a0pP7L2kI)29)Ab`z?^s95rjMA z`1a5r6|1t#YW!P;_n94Gzx#r3&u{HcV5ND^ehj*EHZZMWOEHo4=;{Y)I zGC#ae$n5WJY?A3hf5HJAn(_$_eO#YszC?eZAC1>P*$sR~$;5r-K#>D& zTy`*kmB<0T-xa(bSj`ob_5jzz{LpT){O3XvFgP@wPFu5mJ~3Js^Ex)j=*G^w-&?!j zcLkazg}_=Tb~d|Ws)jq7e$QTCW{gUuF8+Osk5F>5ZmszU)tggbS25!4HmCHT1rD>b zl}L#it3Os?Z~gS%%Y<%e6wO95(r3??Lpg6D7=)lhp%5?u9YaqrB4YywEm$!i?IY>G zG+R-BW-3#x-}+Pqgxng=@8g?4-1gM zypwjh0n#3m8@Ss*%4}wAVlA!n-&K+r0Oyt)*m5&;c68wuc+}5tPMHD?6;B4X-d^s2 zQ7z2A-Fyt&d(8yE^HJ)nWY7Yd1OIIMda&(7Xznip1ESi+sw)_@>g56!z;NHtFqyc9 z^%Uz{7~-}J$dL4Shybui?8)JEQWeq9rDn5@cBP`LB3_;6I!)HvFMu&70=P{Ly*j?l z)8oUGC+~`(x7?f?Ux6yu-E5xvfN5o;FE&V`(BJQ3Epc8@vIq3153@nA{Fr4`Ag{d^ z0kX7_D0^0$tSDo3OoFF17{uWXBb(-wimjBjz9r5=mNRMsE}?6b9Lq>zC(}&teIctA z4H3*tuu}vm7We~wltYpX6y<7w8R+;)(i0cxY1E!J$(w|Fr4-(fw*wCCT*Qkau%_5Q zS;&fl^aoc=^qK@O_UstCf#uS5s?wCGZBMu|aq5|to@X9Jz>njZN;)Ds5YH+@jpV9j zB+(eCS$DCXN*0tmvu73F>kPjmA>1Y$yrm?S3O{7tfoAU6xS~ zhfVcs8}NMYW=1&-w5~EBo_kB!@~%XgU~~ghXfp_3+XIwpNh{www-9KhL{JK~(?*IOFxwYE+A%}n7F3er+)jh^|4`l_7BODAm%m#U3+)@ zZ~oNIQl8i6hb!|hbL{Vyc1p0AZOzV}x3L=2n_kTR$=3A!3!vANUI2@36*SExs?L|^ zFMriMO8W6x3)Bv};v{TuqtIp~Y%L1L6&HE!Dug|>(?uZnb&M=6|F9v9`{%&sdJX)k zs~ayrKbUg#0F_|>106kSsIfY!yUf_1cBFOeTK1(U*I?fuQ}GPjysG)xGLV4lo>&KJ zlPoWowh18~pC#wDcutfxEd9|1aeH&?-kfAIi;hE98@!E8vxV=ioEFlM2jN8b&{!5I zBu4Z@S!W9TxMIh67YFfLdQ0rxxq+6$(GnuuI;lHN-3PEBYQIhUhp1L7elJpFrMX2x zYRi!hH>&6N(|`VxRl)n4!zBeA)R(E+>lvZkmC_F%=U4rZ)@FNGCSAy%fDy5P-(c6Q zjbtK#osy=Ip!L--(^ng+!PHh;p93qWUP!G4N6_HuX`s!gyE<8q2eexw)KPbkQ}?E; z=~BsRZ`Ywjt1J>V(!I-_va=qATY3rg=cj=nEr>sfmm&=cm;#-XpP$e{TfbQ;mH+fT z`LA-rS2_<(?q4zdajrBScy#6eP0o-9I8WzwfGut$P3Z1|_plA`>+G*XsG&L6SHPbM z(%~^M#pt&9)I&9j3JDR{k0&r*maGl@UK|o+m74MjaJGMboK4DBYNC@5V%)&m}$E1-X|jnd%FLUEN19>r7SC zS?^TKF!m?v-e(QCkjIPn!X6pB!NB-DZOy_k3wmp+X6EaZ?1*c4oW)iSCq@B6XS@&o=kv5ZIh11ex{}b1nG~5u^=aY zyKgzCqzAGko1b;H-#CE1#NQje4@!^BjK_OmY4vBINIRAtihWKc+L3ApHH7e=?ad_m zN-8x1G{l=K4aU)qrpz;|U!-7ai*VZO+;tAQr+c2ozSA}W2m@tb4fhx5eSumVtsFk1 z-nJ^_ybfx)Nrh3@x8#{}VV`q{<=W=VG}5MPjWZ;=^UwpTtM@zH#@$@6tm@hP_u3e( ze&=FZ-}KT&{^Gxc7(rn+wU@!2LK9)FA-0@t$q@6dAql&i56I5F$40;!!=$1t>3KKd zOAkESjH>uN?l1w7|DV>1e<(i$Mg>BgPhZHyDfYQ`3cW50c?TL}tZ#~C zH;vlCEt?MV_IxXYOvB6#zT*8>;BTMVkYayZZUA6{4YpNC9BndJ-BbAnERSrbxb_mZ z9YN#nhx76PfPpzv?d1SM|X(gTMeccfN{U*ciEkUfC~ZdZ8To64yf9DKP<<>I#Ga0Tn^mWgY=7k z>W^eA3L9-=CKxT%+by$KwbTVO^3ms65aRY9IM)O;d2pbA4UpXJ&;K6X`)A|_X#4-K zk(B@b5$~@0?tlao_|a8&<0im^A0DjB(ih7F?UdBsEv>F9Aky51z*Q0nN!)q>TR3Rp zrU4HwU=6^nu=^|P)#)5~KLTXjb)#v3j)8^WX?+kBKu71o^9gGZd?0T6lekv^^gaLv z;5&>ey(;ksER$r`5Br7rPO9`0FlTBB=4(0wfN%XMFHz5GvU~~HSgQc20T9EvH;P8m z2$~mmT<&~@E9O#xasWOJ$cW@+vxyWt!s`Y!bAd5xFrIZHh0j{g=depf;^qf19e@*^ zfQ;P?`w|+uGE%5sFfGvtrlO6)hTnh+Vgk}5!B=2}RFeT8`&&JsHL$|IbVPnsSeC&04NUjOEwf}-*Ukyl>rE09GkWiND6L? zw>MX0$zL1+_OLhw%yIAFU;G9F1m{Nr3t71NB4Ar!z~R-!H^t;blxTgt1pFjsPYMX=z}_Ch zS>0WfTvr_d+YP+IHnGkffSG&<0{Rt(*`B%iFBl-tz zmHQ1l9P1-KvRg6{locH#2pfj^JFI}rY0sUOQ3nEK(}oy7T0su!Ej^MvAj7~FkO6?E z6AX~85j@(vnV9bCd;w*Ux$EkhmcOt97T1{xd|JkX-uv}Ejip_{!UK?;I3i633M2jL zL)zlH^M=FC8x$$vE(nYy<5|CX0-P8>)VYTNWVV_podcnPiuDLYP8SZ~*f4M~1yA#{ z{kcvUIQRiaNBt_G)9hM(AahPuTa%O+Egr26kYxe@`1_)W38WToj7$jk=qOK>?Za@{a0( zMFWqVAancyoFQrA-C{dJo+7T>$9F?2W%`*UY2s;oAl5PGUY&|!yAxbQ8wl-Swy~K4 z;2f}|25fLx?ln|`4j&wbH&E1p@wi?AO5_mMk&;|}{agL36agEDVe@N(rBh&Uc)G{} zN;jy&ec4*?T{YY2P2Tml0|)#t80SyS4d?@`xWhX!N(e9l79L$UxH+H#^`&`FB@;N_ z6u%8fP)y>=0?3Of+`jqbjg|Jb5D;EYnLT!3CzQ&Cwj_dhvxu*RT;izN^XB1zH~!DAZk z|1r>urGm(0r&nh~90)uCQj^BZYaiSJaEic7u4cVGz2xgkSe+fkY>`$OhR$>IB9OTp z?&ikd0{qr|CJeBshSSri*Xqmub-KN1_Dm^*A&=Z$SP6uy0D=JL{+l zShGQ?_Y@FPf0Io_Sx+|Z4Z`0ZLSgA$B4kn)b=ysHY~3|4n<$YEC!Yfz@VKzk{ka|N zjg-{4%1fJIG@b#)Bh(L&wk-a_=$Y;(uB4uG-?>#X@kW{XFxa+7Nh9 z#f^YD66Z6sL5mS&s{)W&;KMJ<6j;Gy7p_y8)funMK}N;MYYK+IHz$oHtO3vN0NB)= zvfI4=?u*v}QrUD;$%8BR&$oUE@-^lg@PG#7K-I?#V-X-Xfg&9jChW3_7e!pJVLO`L z1qdwjF5U-Q?Y<6EUc{Xhl*woJRS9@1iXaEaK430)kKaIHwz>lYHRXd2u%ZyEt0ZW1 zaf$8bu!s7L^AboH&o+#J;UiM?s23Dx3SJ9vbH%oskzNU61t&5MkAq48EYQl?!0Gdl zN;HXHoRRJCYk*dA&pZw#Db-PPMToz64f$UkZL34=~bm7aLcu z;<&^#RwcI-VG#3!DP-k3*gf^FbWzWvPq^Zn)OtD6*jJBRkx?H^!fv%C_d$SG{DY4v zl&3sF)zA%9$A)vJ5cw)gL_7oW?|%bEKs2%?G3lHvM#L;ELsKSB)hEauWd#(td04S^$m9GLOxNX zH6otMM2YZnR9a|-pzm_G&`i4&hsb9vl2Y)biZyKp+$T~YsG$l4zQGtY% ziLu!@&Ty;4NbyhEy%ritfb6!py8Xv3~M zOvg6es;3BS%^!gbHw6XNXiXE;hYh9)-GLA=)3!vqPQ)1ce_FZna4PdQtQw)sSemF% zj-xT~YyO$<`uv5%`=0lAe!u6r@B4Y4+q>gWz2BXw#4T*66qo~fM*Lcn;4${LKA_e1 zM4`#o{TAZ?@Bu~iSw%$!7(s27$#!)qRfq5PuF2FPb(@_V=0Kp|LNjA3%k&slIfj8T zP02YQ4H2`$SS8*)NUMnOeP=(9)el~p19D|73>2q=4>sUO0^6EIOaBH{_!qJg@y+0H z-5|zkTh{H0aVFK}hiZ5PwARHDzv3ie&xPt<%J&bKoD?uOQHntLJH1~T-9^lN+?X_Y z;g(}~?gbY0+A|=Eo{|M(_Pi1;xfEMdem3#|4MvNR1hTxeFH3`~P z4Z`gJXS5b{)Ah~qw#9XrRejsde^_N!EVJj)W##>M*Pu%gANMN`Be&3y0A~4AvBE9@ zoV7o5^TB&*A5w<(WXS^t6}vW8*$&$c2j;)v*LPK`PI9ubSD`V-t2zd0$YjYTyymqo{ZebTS*vN^l1cWkK{`b zy1&ZC1A_fUAdl!!RcR|~SFD3PlkntMN91)tvse<>YL6^QH?j?HtsB;|y* z-08gflAXnZBq)4Dj=3;J`*JzE#$%3w+ z|6o;-JhO9G)cSn0Y_g;i*Lj@|3Et^{o8VK3;#&ue5G)h}o~vV<@iug~2WP+yD8XPb za+8pc4ee9~)_vkM`lZ7e_#>|sF>yH3P=LYJf<-8C!sV!zJPFjvKHgOpxI{+n=+h~q zP5Uw=au~Or6HJG;4!m&#&O#h2h7k~Y?H{6Nbb-LKBNLSo#HvE(ukQ@LOi;SWF6UlO zb{$^1qUO>HZvot-4arTA60PU_9;bi<8bcaBU0Q-2*8%YG%L8|psP{;ap9VXgc?#ZO zx^wxp*9I)DU}rB9S-GR)a=bddDZIi`x-XR3S<}7036P~~93Q7@)c1ips>KF&gzvBk zbsd89{OJ4+@=i-Od@d`2(1eWF2UOdNl1Hrq2R?S$M{hk@7%uPjKM) z_D+Y@lkVF{c~!mkWeBf`k55R5Gzf@%c2PJzai|UcJW%>ZT1<4MwcVY8^Q@clL2}$f z>zy8@3bd|GI4*jkm+)QahbRSzFbk0F5(1VPKt&4U;xrbG^gXlq7~CAtN|rU;lsqaH zE?pTeW1!Dlu4Z!&s%f6ada-b`vtQ^mB`X}u>b;aVE7*p#cW&9#EkXIA0NQJ-wlvek zID$vFow^$4!d9O)+ttU8$*}@R82}2TUMI9$B%`u72A`_1;4eU0gV45Rh2TxS^sqRi zCBZ84>lAz@{Tlb$y!P(D6Z6n(Pau<52YqS&G%_C5^ANNd1ds(OhweFxFm7Cx&3DcI z0=}CtR-C;yemC_5cZnHa|5>z zFIAr(QV;972P(NXX~|fw>yq3$S4XQba?~zu4EHz#YI>yF+?8j+)XWCr#t^v$#EO}p zeJ6er7M8deocI+0yX_mPHzI!6+u@vN77#C^?;9sMVreFU@>*2gT$>$D-6sozl-}`I z>YL(eguR{5$NRJfEALyY#Z`pT;s3_5_VcP~w8#A+pyy7Unhj$m~6sn0mXp=}b% z*G?BtA+VTAME`zda0{h%l{{)p14YUu6J>N)C_54p*aHH)t33?N67M|H6lYdKuI6}b`itmDnY zT>q}hu}g+JB+*hDk34Ck*jXi9vVIch=r;Z7RP=81w-HAZ3FA1ekc3)!#P@6xI&l}3 z+-8NFrAXlrgW7J~-~pksbF(KcH_y4=0ls$)E<&ZK2(Yy)i%a#oMw@I;#^;_Dz`3d% zPjO}!q11X?iKpih&#>Ax@~p1Nq4$1B8XB2B^BR&1@7>SB8is8Ix@b6R!F&hzEMoNX z_B#a_eHO11%;eDNuPhfyN*t546J-moPnk(MXIDj$`~3XP0gKIHJ#8hO#(A^9e4um$ z9NeO>G(QMV7rI`{Z?(va9L*ftEGzmm36J#I8nnHmS;S#btc@FHpeN0vbbJF-FOp<+ zb{`&QV<_=T=e#0YH7|JOq)sW=T&{*m2Ns#slG=->;EVXtwt+RRHvJ~nE{%9)_8~U< z4x+)2Ud1E>a58Vy!1*8dcpSB^ro#9FX>6#chpCqBT$8(G^ZM{>jAd@J9JkQXMedsh z54N0Izj>AJEJ8`n^_l+KJYvM=qa0T=RqO?tOf_5u8I9&UQu54hY9_G4$}%3NJOH(E zH6K2qeYb}7FK>O*l2gKd%8jG4JjcERTLz=K1s!EoNd`ozCh4J=BsKN|^$6v*ty;}+ z>e{J5R<$PtqsK+k5%XF|CkjQ|w5Ph$L*=CSN(Z1JLg+7$*;WI&6vS5j(SQoGI&1;J zz~<#*gk%&oM|~71d-Qz@p^%KH=hhPf1<+t<-9O9c*p!PG_10dWLT;1zq+!|L`1_-2 z1}OzAIiV0#;|yoMgQOFg%&}@222VsOM`#w6*58^k4wP!Tiw!B=ylzD_0wjGX_Ysmi zasf0!!LFpOV3Mn!^whx?wkXlV@lJ@yVCDx}MM^_+0|BWV<+vff4nc{bO48JPV4fBQ zQW@6X0}vq6^>zfsQYU~Z8NZ3O$-MwULnjN8NeuBcX+aLSy4AD8_U9ETBHP+?ZjHqQGe9{Vo~omtWx)qM~}DpStKE@(ig7fH4NP%6}1J z#TP=4oR40mfXnon$A?tffCIf}T zp6+hc;8nql4oY;bw-sy!M^TA21_Ii7Tl_I59jQVIE4`|+tfK89($-!htv&!3_ZPU@ zmkBLbyQP1BSk@$ztoDaHQeQ{yy0&JRNZEBY^vUw(VeEyQy*myRLH~qnVffHp*+O3v zebsVOXaphxWln^N#Pc3>Gu-zYcCbCQ^o%Q@Es+YK;2Yiswk?tuvOZyMGw&3C(|q2zTX z<2M`9(U1`+oejC$s`qSfyi<%HiR$If&&{iU>#H|sKO|>Q%)Qk8EH`Bi{wrznA1+h? z?U4Mc&z`<{@i1viG$#YY)@bhQe>5TbTg4a6IQaU1Uh$t@koeXp>2KfTKfB`JUT|m@ oX1BAm-q*71@C|sIk@W(;A*zD)_c9t3L;Q-*%!F#3x$Ut3U(4=XEdT%j diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-highlight-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-highlight-rstyle-linked-combos-demo-docx-1-chromium-linux.png index 083d3aa092d5e8320f417d7f52b3903cdd7e8784..d876ed5553140ea8d0c59452b165be6a76f714a4 100644 GIT binary patch delta 4555 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 Wq}VU3ORj=XXbh01h-w|DsQ&>|QPF?^ delta 4561 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 WWgi-MR)D`i%#E#oDg4>}{=We++scdp delta 3069 zcmbVOS6CC-9#3?EivkudQY^6`8fj8P3%DYy^c8_njnX1WmEJOz6>yb~L`X;W?-mQdwdji~C+4JU} zB04EzGo>hYBtAtspg)EclDJF-Uoc~z?iHsS4t6j3(*v>O^a-dXJT?6PCT6 zVU2dQ6{f9r)5Zj?!;saySDPR`lDs|~8j#5EK!nw@^W#yklg92zm1esOZhlEg*XuMA zZ?Dtq3$fiXS9@w4m#1<8NAtMFF$Z+WumYOcgF+`$iei3Z3*)&(>pv{_bvyufR{QAN zt2@#9eICmmHL09;X|gG*s!Lp`Jwy4DVY=X!UP>V*l!lEqb=f1lS$xD$_?KOKH7eS) z>MP9!f1k>fQ96ITJW4o20mP#9wp=j6;GH(j>VW{fH=rt774VBQ%?G3Vym4+mkJ_uy zbgZpb?UbD9+~Q{`m~%Q>!n4{u1Ns~Em%`Yl+UiG{P!be)t3qGkvqraLz(O6pZ-ZUi zm_>^RdlE(>8OQ-+xIG3QZ?@WfP5WcFQ>NMSmFp(6Z)pbyVF}YOsw7S;y=rUfaxj%u zI{&=Av{pS~Vd*;z?U!xEAto+3Ew^&a)`ucpCWCs=VqxFrLOl;dO3u$gm6Rgap60fR zAdvk4#QM^&&i%dvQ+W-`Mz(Wtms%fwgr|{ZwmEu|X9uU@PLz%roDN0@OA7Fj&L)V~KMa zw(&npD6ZboJsM{v#PthxWo1vT^E#xT4IbuQh9!3kw-iub*-OP$w%Ncy79;CzB*j9$ z2xplC9Rxz?b~Pgjvj!yNxr#4NoYqe3@5rnCe9zFCAS9O%*}1~o>Grm06H_?4#X*!L zoUWW&as-53D|D8Y3sStrcQhAFogv0eY>tYtypcvnV|JcKCD^P`aFC8r&Ck*IBo4h% znE~%(7=7&i-Vf8kak`GZW?xxH(i#c@nXFX}lrHyfO!TEg*W<>wHV1FNBQyJxbTdiu zoB~c+($_j;Q#E|>2XOW#FLW$V0NZ?0?x+*d{-F7MW!LggV=f^#j_`tXsh3b1A3%us z*7CeZ=lhYa2zat^r3G?%SNO3rm>9zGNjUr0-`)ij2EHcDNWqfA`8_gCQ3*gcK-5U5 zq~3ALqZwel20c|m99|Nhm7K@CaGwaRpU>x)8H+Y1GwEB)ZD_23?K1gcu~$!L-q6>w z%S_>It*-9ui(VTwR+Swq_WL~Sbb5U*l zl()^4XeS+|F!EZ$c#Z48b)Q8Gv4D{g`@>pNT?ekLAzJM&NUS)7^oS}8ZQ4E52m7abXnjcdB?ln7G<ZGum@e~Kt zab?ck6hJhKmfCXk9MJr%R{yg7gl)SCed*ib62{KZ*iOv9fH7x$S$1A|=?E5% zIk$D1U2(4vtY8}Z2X_gCH}1R_(eboiNb#9iitS^2*ST?2_|6P4anot1GHQ5Dn;xXF z5Ixf9#l4#PUu5)DB`H+AtTx(~=$m0oZCo2X)_HR{x=*vuH*?WXd(=*A2GM#03WUBCiN-zLt0?76oEg ziecoinf|qz=^4dVg=lWETVQO&K6X4@!GmQoECaYU~2BoHZNpOIQ zvAI5=2S<=;+l{Om~GDAr_HA;~`h8`H2c@wh{sV9QDz zf2i2H${0Q?2){3__9j71VMcXc{~v>1w_=%t{_W)Xi7Ae--IUkRbJn`7?TmHG9f0|& zO^~xX7x#cl^@jT@9FtHn$wR)2p(!#X#+lAlwoT;$JRoCsJD5kX@ zhbcPQde$!JZ+N~dQt#G}=aq{V+e?}3JzIb9M@0*<#*F8g6S!cs9|j+C_Aa(3wc-n%?i+yzU`%HBZj+Nqqt z*9B@vhe{75i1{S3KH8?nJ{>_Gb_gTqc82P@ty}c4_*T_|#V`BT`+YOJg9e-GS?RAH z?noTKZXL%E<(S+IP&W>7-HfYP(aRMTSaa;`*`Jp$PukGXH$YhsV?= z;m^G1WyF~%l)h$FzmM_$M|ey zo0sQt)QyWPi*sk0q4=BH9l`%tDHehBo^t|-Jmh!0xGa{Prd>03U(q}2YL72mpyu{E zKFaoU$DkULEqYTU1>vw3eV75G9G=dPQbyp2?^oN(jbes zwCgblMujJP3_*q&3@QVT#!qFti!Y_Mi|b~ooSyH2*@g0;_7d{a$h74?&aTv#SNn3TNMs z-JH)&za~YD?sZ4G`#)U(9-r1J#-nJMI~q18ZQkF0sNf3R5(RdFmc^h^d?b$r5rcmoT%6Fn{{+_x8MxmvSX0xnrYr~Lhp&pBN=7Y=%g3>rHmw;6;1E}%f6EgqMd z!TCkm$kvF#j10mY=n&|$X(wSS${{VxRN2EZOJ5an+NM)0LtqPa3v(SyD@S_ws&B8p z1H2=?DinBj3WKfqcI~M>_hkX&QJU3&w`HnaN2&{7zdfazctFuB{MTJc0XZsh=Jgro z!s!Fo5pthm`){G=iZsX6&x1H7DoQK6&-lTjyRRyEn{JFfKnzE9Jvu|I*>zW?>+~e+ ziiFaJ1$*slNp)VBD7lde^11ULCgvoS;5`jJeX3S8XZkh&bM##<(2J18kW-M|;vEN@ z2i_@% diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-rFonts-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-rFonts-rstyle-linked-combos-demo-docx-1-chromium-linux.png index 71f4fe750c1c443c1a616f3f18b88936581d1478..320df3fc8ee8c82970c02981e3c0ddf09d69419d 100644 GIT binary patch delta 48038 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≪z?B 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