@@ -111,8 +111,25 @@ export class DOCXExporter<
111
111
nestingLevel = 0
112
112
) : Promise < Array < Paragraph | Table > > {
113
113
const ret : Array < Paragraph | Table > = [ ] ;
114
+ let currentNumberingStart = 1 ;
115
+ let numberingInstanceCount = 0 ;
116
+ let isFirstNumberedListItem = false ;
114
117
115
118
for ( const b of blocks ) {
119
+ if ( b . type === "numberedListItem" ) {
120
+ if ( ! isFirstNumberedListItem ) {
121
+ currentNumberingStart = 1 ;
122
+ numberingInstanceCount += 1 ;
123
+ isFirstNumberedListItem = true ;
124
+ }
125
+ if ( b . props . start !== undefined ) {
126
+ currentNumberingStart = b . props . start as number ;
127
+ numberingInstanceCount += 1 ;
128
+ }
129
+ } else {
130
+ isFirstNumberedListItem = false ;
131
+ }
132
+
116
133
let children = await this . transformBlocks ( b . children , nestingLevel + 1 ) ;
117
134
children = children . map ( ( c , _i ) => {
118
135
// NOTE: nested tables not supported (we can't insert the new Tab before a table)
@@ -128,7 +145,13 @@ export class DOCXExporter<
128
145
}
129
146
return c ;
130
147
} ) ;
131
- const self = await this . mapBlock ( b as any , nestingLevel , 0 /*unused*/ ) ; // TODO: any
148
+ const self = await this . mapBlock (
149
+ b as any ,
150
+ nestingLevel ,
151
+ 0 /* unused */ ,
152
+ currentNumberingStart ,
153
+ numberingInstanceCount
154
+ ) ; // TODO: any
132
155
if ( Array . isArray ( self ) ) {
133
156
ret . push ( ...self , ...children ) ;
134
157
} else {
@@ -160,27 +183,29 @@ export class DOCXExporter<
160
183
. default ;
161
184
162
185
const bullets = [ "•" ] ; //, "◦", "▪"]; (these don't look great, just use solid bullet for now)
186
+ const generateNumberingConfig = ( start : number ) => ( {
187
+ reference : `blocknote-numbered-list-${ start } ` ,
188
+ levels : Array . from ( { length : 9 } , ( _ , i ) => ( {
189
+ start,
190
+ level : i ,
191
+ format : LevelFormat . DECIMAL ,
192
+ text : `%${ i + 1 } .` ,
193
+ alignment : AlignmentType . LEFT ,
194
+ style : {
195
+ paragraph : {
196
+ indent : {
197
+ left : DEFAULT_TAB_STOP * ( i + 1 ) ,
198
+ hanging : DEFAULT_TAB_STOP ,
199
+ } ,
200
+ } ,
201
+ } ,
202
+ } ) ) ,
203
+ } ) ;
204
+
163
205
return {
164
206
numbering : {
165
207
config : [
166
- {
167
- reference : "blocknote-numbered-list" ,
168
- levels : Array . from ( { length : 9 } , ( _ , i ) => ( {
169
- start : 1 ,
170
- level : i ,
171
- format : LevelFormat . DECIMAL ,
172
- text : `%${ i + 1 } .` ,
173
- alignment : AlignmentType . LEFT ,
174
- style : {
175
- paragraph : {
176
- indent : {
177
- left : DEFAULT_TAB_STOP * ( i + 1 ) ,
178
- hanging : DEFAULT_TAB_STOP ,
179
- } ,
180
- } ,
181
- } ,
182
- } ) ) ,
183
- } ,
208
+ ...[ ...this . numberingSectionStarts ] . map ( generateNumberingConfig ) ,
184
209
{
185
210
reference : "blocknote-bullet-list" ,
186
211
levels : Array . from ( { length : 9 } , ( _ , i ) => ( {
@@ -246,12 +271,13 @@ export class DOCXExporter<
246
271
documentOptions : { } ,
247
272
}
248
273
) {
274
+ const transformedBlocks = await this . transformBlocks ( blocks ) ;
249
275
const doc = new Document ( {
250
276
...( await this . createDefaultDocumentOptions ( ) ) ,
251
277
...options . documentOptions ,
252
278
sections : [
253
279
{
254
- children : await this . transformBlocks ( blocks ) ,
280
+ children : transformedBlocks ,
255
281
...options . sectionOptions ,
256
282
} ,
257
283
] ,
0 commit comments