UNPKG

prosemirror-docx-web

Version:

Export from a prosemirror document to Microsoft word forked from curvenote/prosemirror-docx

105 lines 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createNumbering = void 0; const docx_1 = require("docx"); function basicIndentStyle(indent) { return { alignment: docx_1.AlignmentType.START, style: { paragraph: { indent: { left: (0, docx_1.convertInchesToTwip)(indent), hanging: (0, docx_1.convertInchesToTwip)(0.18) }, }, }, }; } const numbered = Array(3) .fill([docx_1.LevelFormat.DECIMAL, docx_1.LevelFormat.DECIMAL, docx_1.LevelFormat.DECIMAL]) .flat() .map((format, level) => ({ level, format, text: `${new Array(level + 1).fill(1).reduce((res, _, idx) => `${res}%${idx + 1}.`, '')}`, ...basicIndentStyle((level + 1) / 2), })); const bullets = Array(3) // .fill(['●', '○', '■']) .fill(['●', '●', '●']) .flat() .map((text, level) => ({ level, format: docx_1.LevelFormat.BULLET, text, ...basicIndentStyle((level + 1) / 2), })); const styles = { numbered, bullets, }; const NumberedListTypes = { decimal: docx_1.LevelFormat.DECIMAL, 'lower-alpha': docx_1.LevelFormat.LOWER_LETTER, 'lower-roman': docx_1.LevelFormat.LOWER_ROMAN, 'upper-roman': docx_1.LevelFormat.UPPER_ROMAN, }; const BulletListTypes = { disc: '●', circle: '○', square: '■', }; function makeLevels(type, extraStyles) { if (type === 'numbered') { const listStyleType = styles ? NumberedListTypes[extraStyles.listStyleType] || docx_1.LevelFormat.DECIMAL : docx_1.LevelFormat.DECIMAL; return new Array(6).fill(listStyleType).map((format, level) => ({ level, format, text: `${new Array(level + 1).fill(1).reduce((res, _, idx) => `${res}%${idx + 1}.`, '')}`, alignment: docx_1.AlignmentType.START, style: { run: { size: extraStyles?.size || 18, color: extraStyles?.listStyleColor || 'auto', }, paragraph: { indent: { left: (0, docx_1.convertInchesToTwip)((level + 1) / 2), hanging: (0, docx_1.convertInchesToTwip)(0.18), }, }, }, })); } return new Array(6).fill(docx_1.LevelFormat.BULLET).map((format, level) => ({ level, format, text: BulletListTypes[extraStyles?.listStyleType] || '●', alignment: docx_1.AlignmentType.START, style: { run: { size: '18', color: extraStyles?.listStyleColor || 'auto', }, paragraph: { indent: { left: (0, docx_1.convertInchesToTwip)(0.25 * (level + 1)), hanging: (0, docx_1.convertInchesToTwip)(0.25), }, }, }, })); } function createNumbering(reference, style, extraStyles = null) { let numbering = styles?.[style]; if (extraStyles) { const levels = makeLevels(style, extraStyles); if (levels) numbering = levels; } return { reference, levels: numbering, }; } exports.createNumbering = createNumbering; //# sourceMappingURL=numbering.js.map