diff --git a/packages/super-editor/src/core/super-converter/SuperConverter.js b/packages/super-editor/src/core/super-converter/SuperConverter.js
index b8f1b74912..64752213fa 100644
--- a/packages/super-editor/src/core/super-converter/SuperConverter.js
+++ b/packages/super-editor/src/core/super-converter/SuperConverter.js
@@ -269,6 +269,14 @@ class SuperConverter {
this.convertedXml[file.name] = addDefaultStylesIfMissing(this.convertedXml[file.name]);
}
});
+ if (!this.convertedXml['word/styles.xml']) {
+ for (let i = 1; i <= 5; i += 1) {
+ if (this.convertedXml[`word/styles${i}.xml`] != null) {
+ this.convertedXml['word/styles.xml'] = addDefaultStylesIfMissing(this.convertedXml[`word/styles${i}.xml`]);
+ break;
+ }
+ }
+ }
this.initialJSON = this.convertedXml['word/document.xml'];
if (!this.initialJSON) this.initialJSON = this.parseXmlToJson(this.xml);
diff --git a/packages/super-editor/src/core/super-converter/SuperConverter.test.js b/packages/super-editor/src/core/super-converter/SuperConverter.test.js
index 07c13c6a99..cb0cee48c5 100644
--- a/packages/super-editor/src/core/super-converter/SuperConverter.test.js
+++ b/packages/super-editor/src/core/super-converter/SuperConverter.test.js
@@ -927,3 +927,51 @@ describe('XML whitespace preservation', () => {
expect(textNodes[2].elements[0].text).toBe('Trimmed text ');
});
});
+
+describe('SuperConverter styles fallback', () => {
+ const baseDocumentXml = {
+ name: 'word/document.xml',
+ content: `
+
+ Test
+ `,
+ };
+
+ const buildStylesXml = (styleId) => ({
+ name: 'word/styles2.xml',
+ content: `
+
+
+
+
+ `,
+ });
+
+ it('uses styles2.xml when styles.xml is missing', () => {
+ const styles2Xml = buildStylesXml('AltStyle2');
+ const converter = new SuperConverter({ docx: [baseDocumentXml, styles2Xml] });
+ const styles = converter.convertedXml['word/styles.xml'];
+
+ expect(styles).toBeTruthy();
+ expect(styles.elements?.[0]?.name).toBe('w:styles');
+ expect(styles.elements?.[0]?.elements?.[0]?.attributes?.['w:styleId']).toBe('AltStyle2');
+ });
+
+ it('prefers the lowest-indexed styles file when multiple exist', () => {
+ const styles2Xml = buildStylesXml('AltStyle2');
+ const styles4Xml = {
+ name: 'word/styles4.xml',
+ content: `
+
+
+
+
+ `,
+ };
+
+ const converter = new SuperConverter({ docx: [baseDocumentXml, styles4Xml, styles2Xml] });
+ const styles = converter.convertedXml['word/styles.xml'];
+
+ expect(styles?.elements?.[0]?.elements?.[0]?.attributes?.['w:styleId']).toBe('AltStyle2');
+ });
+});