docxmlater 10.0.4 → 10.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/Document.d.ts +22 -0
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +170 -26
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +71 -6
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +6 -0
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +23 -0
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +23 -1
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +97 -0
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/TableCell.d.ts +5 -0
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +13 -0
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableRow.d.ts +3 -0
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +10 -0
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +4 -0
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +15 -0
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts +6 -0
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +55 -1
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +4 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +17 -0
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/Style.d.ts +6 -0
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +20 -0
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +23 -0
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +65 -0
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +30 -7
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/package.json +1 -1
- package/src/core/Document.ts +287 -31
- package/src/core/DocumentParser.ts +88 -7
- package/src/elements/Hyperlink.ts +47 -0
- package/src/elements/StructuredDocumentTag.ts +230 -1
- package/src/elements/TableCell.ts +36 -1
- package/src/elements/TableRow.ts +24 -1
- package/src/formatting/AbstractNumbering.ts +31 -0
- package/src/formatting/NumberingInstance.ts +88 -1
- package/src/formatting/NumberingLevel.ts +37 -3
- package/src/formatting/Style.ts +46 -0
- package/src/formatting/StylesManager.ts +125 -0
- package/src/index.ts +2 -2
- package/src/tracking/DocumentTrackingContext.ts +38 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.js","sourceRoot":"","sources":["../../src/elements/TableRow.ts"],"names":[],"mappings":";;;AAIA,2CAAwC;AACxC,kDAA2D;AAQ3D,4CAAgD;AA+EhD,MAAa,QAAQ;IACX,KAAK,GAAgB,EAAE,CAAC;IACxB,UAAU,CAAgB;IAE1B,YAAY,CAA2B;IAEvC,eAAe,CAAyD;IAExE,UAAU,CAAc;IAOhC,YAAY,SAAkB,EAAE,aAA4B,EAAE;QAC5D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,IAAI,qBAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAOD,mBAAmB,CAAC,OAA8D;QAChF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAKD,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAKD,aAAa,CAAC,MAA8B;QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;IAC3B,CAAC;IAKD,eAAe;QACb,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAOD,OAAO,CAAC,IAAe;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,UAAU,CAAC,IAAa;QACtB,MAAM,IAAI,GAAG,IAAI,qBAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,OAAO,CAAC,KAAa;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAOD,YAAY,CAAC,KAAa,EAAE,IAAe;QACzC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAOD,YAAY,CAAC,KAAa;QACxB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI;YAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAMD,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAoBD,gBAAgB;QACd,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,SAAS,IAAI,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAsBD,qBAAqB,CAAC,eAAuB;QAK3C,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE3C,IAAI,UAAU,KAAK,eAAe,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACvC,CAAC;QAED,MAAM,OAAO,GACX,oCAAoC,UAAU,8BAA8B,eAAe,IAAI;YAC/F,eAAe,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI;YACpC,CAAC,UAAU,GAAG,eAAe;gBAC3B,CAAC,CAAC,+CAA+C;gBACjD,CAAC,CAAC,6CAA6C,CAAC,CAAC;QAErD,sBAAa,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;QAE5C,OAAO;YACL,OAAO,EAAE,KAAK;YACd,UAAU;YACV,OAAO;SACR,CAAC;IACJ,CAAC;IAQD,SAAS,CAAC,KAAa,EAAE,OAAoC,SAAS;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;YACtC,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,SAAS,CAAC,QAAQ,GAAG,IAAI;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,YAAY,CAAC,SAAS,GAAG,IAAI;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;QACtC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAYD,gBAAgB,CAAC,SAA2B;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,SAAS,CAAC;QAC1C,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAYD,SAAS,CAAC,MAAM,GAAG,IAAI;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAaD,aAAa,CAAC,OAAe;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC;QACrC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAaD,YAAY,CAAC,OAAe;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC;QACpC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAuBD,0BAA0B,CAAC,UAAmC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,UAAU,CAAC;QACrD,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,UAAU,CAAC,KAAa,EAAE,IAAI,GAAG,KAAK;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;QACnC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;YACtC,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,SAAS,CAAC,KAAa,EAAE,IAAI,GAAG,KAAK;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;YACtC,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,iBAAiB,CAAC,OAAe,EAAE,IAAI,GAAG,KAAK;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;QACvC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC;YACtC,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,WAAW,CAAC,QAAgB;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,IAAI,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,0BAA0B;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC;IACjD,CAAC;IAMD,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAUD,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAMD,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IACpC,CAAC;IAMD,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,CAAC;IAMD,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,KAAK,CAAC;IAC5C,CAAC;IAMD,gBAAgB;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IACvC,CAAC;IAMD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC;IACzC,CAAC;IAOD,eAAe,CAAC,KAA0C;QACxD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAMD,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAOO,+BAA+B,CAAC,UAAmC;QACzE,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAGlC,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,MAAM,EAAE;gBACrC,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QAGD,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC;QAGD,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBAC/C,KAAK,EAAE,UAAU,CAAC,WAAW;gBAC7B,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QAGD,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACvC,KAAK,EAAE,UAAU,CAAC,WAAW;gBAC7B,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAChE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAGD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO;gBAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;YAC/E,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK;gBAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7E,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI;gBAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;YAC1E,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU;gBAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;YAC5F,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS;gBAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;YACzF,IAAI,UAAU,CAAC,OAAO,CAAC,cAAc;gBAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;YACxG,IAAI,UAAU,CAAC,OAAO,CAAC,aAAa;gBAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC;YACrG,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU;gBAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;YAC5F,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS;gBAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;YACzF,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAMO,eAAe,CAAC,OAAqB;QAC3C,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,MAAM,WAAW,GAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAErG,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,KAAK,GAAoC,EAAE,CAAC;gBAClD,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gBAChD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC3D,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gBAChE,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gBAElD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAMD,KAAK;QACH,MAAM,YAAY,GAAiB,EAAE,CAAC;QAOtC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzF,CAAC;QAKD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7F,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5C,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1C,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,SAAS,EAAE;gBAC5C,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;gBAC9B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,KAAK;aAC/C,CAAC,CAAC,CAAC;QACN,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC3C,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAC7B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK;aAC9C,CAAC,CAAC,CAAC;QACN,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACnD,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,KAAK,GAAoC;gBAC7C,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;aAChC,CAAC;YACF,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC/B,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAChD,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACnD,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9C,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBACnD,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;gBAClC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,KAAK;aACnD,CAAC,CAAC,CAAC;QACN,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,KAAK,GAA2B,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACtE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YACpF,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,CAAC;QAID,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,WAAW,GAAoC;gBACnD,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;gBAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAClC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;aAC/B,CAAC;YACF,MAAM,gBAAgB,GAAiB,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAChD,IAAI,IAAI,EAAE,CAAC;gBAGT,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAClF,CAAC;gBACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAClC,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBACtF,CAAC;gBACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBACjC,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACpF,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC/B,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,SAAS,EAAE;wBAChD,KAAK,EAAE,IAAI,CAAC,OAAO;wBACnB,QAAQ,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;qBACpC,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC9B,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;wBAC/C,KAAK,EAAE,IAAI,CAAC,MAAM;wBAClB,QAAQ,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;qBACnC,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvD,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,WAAW,GAAoC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC9E,IAAI,IAAI,CAAC,UAAU;wBAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC9D,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvD,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACnC,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE;wBACvD,KAAK,EAAE,IAAI,CAAC,WAAW;wBACvB,QAAQ,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK;qBACxC,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,MAAM,SAAS,GAA2B,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;oBAC1E,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;gBAClH,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,gBAAgB,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YACD,MAAM,QAAQ,GAAG,uBAAU,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;YACnE,YAAY,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC;QAGD,MAAM,WAAW,GAAiB,EAAE,CAAC;QAGrC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,WAAW,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC;YAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;YACtG,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC,uBAAU,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAMD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,uBAAU,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;IAQD,MAAM,CAAC,MAAM,CAAC,SAAkB,EAAE,UAA0B;QAC1D,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF;AA7yBD,4BA6yBC","sourcesContent":["/**\r\n * TableRow - Represents a row in a table\r\n */\r\n\r\nimport { TableCell } from './TableCell';\r\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\r\nimport { TableBorder, TableBorders } from './Table';\r\nimport {\r\n BasicShadingPattern,\r\n RowJustification as CommonRowJustification,\r\n ShadingConfig,\r\n buildShadingAttributes,\r\n} from './CommonTypes';\r\nimport { defaultLogger } from '../utils/logger';\r\n\r\n// ============================================================================\r\n// RE-EXPORTED TYPES (for backward compatibility)\r\n// ============================================================================\r\n\r\n/**\r\n * Row justification/alignment options\r\n * @see CommonTypes.RowJustification\r\n */\r\nexport type RowJustification = CommonRowJustification;\r\n\r\n/**\r\n * Shading pattern values per ECMA-376\r\n * @see CommonTypes.BasicShadingPattern for the canonical definition\r\n */\r\nexport type ShadingPattern = BasicShadingPattern;\r\n\r\n/**\r\n * Shading configuration\r\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\r\n */\r\nexport type Shading = ShadingConfig;\r\n\r\n/**\r\n * Table property exceptions - overrides table-level properties for this row\r\n * Per ECMA-376 Part 1 §17.4.61 (w:tblPrEx)\r\n */\r\nexport interface TablePropertyExceptions {\r\n /** Border overrides for this row */\r\n borders?: TableBorders;\r\n /** Shading override for this row */\r\n shading?: Shading;\r\n /** Cell spacing override in twips */\r\n cellSpacing?: number;\r\n /** Table width override in twips */\r\n width?: number;\r\n /** Table indentation override in twips */\r\n indentation?: number;\r\n /** Table justification override */\r\n justification?: RowJustification;\r\n}\r\n\r\n/**\r\n * Row formatting options\r\n */\r\nexport interface RowFormatting {\r\n height?: number; // Height in twips\r\n heightRule?: 'auto' | 'exact' | 'atLeast';\r\n isHeader?: boolean; // Whether this is a header row\r\n cantSplit?: boolean; // Prevent row from breaking across pages\r\n justification?: RowJustification; // Row justification/alignment\r\n hidden?: boolean; // Hide row\r\n gridBefore?: number; // Grid columns before first cell\r\n gridAfter?: number; // Grid columns after last cell\r\n tablePropertyExceptions?: TablePropertyExceptions; // Table property exceptions for this row\r\n wBefore?: number; // Width before row in twips (per ECMA-376 §17.4.83)\r\n wBeforeType?: string; // Width before type (dxa, pct, auto)\r\n wAfter?: number; // Width after row in twips (per ECMA-376 §17.4.82)\r\n wAfterType?: string; // Width after type (dxa, pct, auto)\r\n cellSpacing?: number; // Row-level cell spacing override in twips\r\n cellSpacingType?: string; // Cell spacing type (dxa, pct)\r\n cnfStyle?: string; // Conditional formatting bitmask (per ECMA-376 §17.3.1.8)\r\n}\r\n\r\n/**\r\n * Table row property change tracking (w:trPrChange)\r\n * Per ECMA-376 Part 1 §17.13.5.38\r\n */\r\nexport interface TrPrChange {\r\n author: string;\r\n date: string;\r\n id: string;\r\n previousProperties: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Represents a table row\r\n */\r\nexport class TableRow {\r\n private cells: TableCell[] = [];\r\n private formatting: RowFormatting;\r\n /** Parent table reference (if row is inside a table) */\r\n private _parentTable?: import('./Table').Table;\r\n /** Tracking context for automatic change tracking */\r\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\r\n /** Table row property change tracking (w:trPrChange) */\r\n private trPrChange?: TrPrChange;\r\n\r\n /**\r\n * Creates a new TableRow\r\n * @param cellCount - Number of cells to create (optional)\r\n * @param formatting - Row formatting options\r\n */\r\n constructor(cellCount?: number, formatting: RowFormatting = {}) {\r\n this.formatting = formatting;\r\n\r\n if (cellCount !== undefined && cellCount > 0) {\r\n for (let i = 0; i < cellCount; i++) {\r\n const cell = new TableCell();\r\n cell._setParentRow(this);\r\n this.cells.push(cell);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the tracking context for automatic change tracking.\r\n * Called by Document when track changes is enabled.\r\n * @internal\r\n */\r\n _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {\r\n this.trackingContext = context;\r\n }\r\n\r\n /**\r\n * Gets the table row property change tracking info\r\n */\r\n getTrPrChange(): TrPrChange | undefined {\r\n return this.trPrChange;\r\n }\r\n\r\n /**\r\n * Sets the table row property change tracking info\r\n */\r\n setTrPrChange(change: TrPrChange | undefined): void {\r\n this.trPrChange = change;\r\n }\r\n\r\n /**\r\n * Clears the table row property change tracking\r\n */\r\n clearTrPrChange(): void {\r\n this.trPrChange = undefined;\r\n }\r\n\r\n /**\r\n * Adds a cell to the row\r\n * @param cell - Cell to add\r\n * @returns This row for chaining\r\n */\r\n addCell(cell: TableCell): this {\r\n this.cells.push(cell);\r\n cell._setParentRow(this);\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates and adds a new cell\r\n * @param text - Optional text content for the cell\r\n * @returns The created cell\r\n */\r\n createCell(text?: string): TableCell {\r\n const cell = new TableCell();\r\n if (text) {\r\n cell.createParagraph(text);\r\n }\r\n this.cells.push(cell);\r\n cell._setParentRow(this);\r\n return cell;\r\n }\r\n\r\n /**\r\n * Gets a cell by index\r\n * @param index - Cell index (0-based)\r\n * @returns The cell at the index, or undefined\r\n */\r\n getCell(index: number): TableCell | undefined {\r\n return this.cells[index];\r\n }\r\n\r\n /**\r\n * Inserts a cell at the specified index\r\n * @param index - Position to insert (0-based)\r\n * @param cell - Cell to insert\r\n */\r\n insertCellAt(index: number, cell: TableCell): void {\r\n this.cells.splice(index, 0, cell);\r\n cell._setParentRow(this);\r\n }\r\n\r\n /**\r\n * Removes and returns the cell at the specified index\r\n * @param index - Position to remove (0-based)\r\n * @returns The removed cell, or undefined if index is out of bounds\r\n */\r\n removeCellAt(index: number): TableCell | undefined {\r\n if (index < 0 || index >= this.cells.length) return undefined;\r\n const removed = this.cells.splice(index, 1);\r\n const cell = removed[0];\r\n if (cell) cell._setParentRow(undefined);\r\n return cell;\r\n }\r\n\r\n /**\r\n * Gets all cells in the row\r\n * @returns Array of cells\r\n */\r\n getCells(): TableCell[] {\r\n return [...this.cells];\r\n }\r\n\r\n /**\r\n * Gets the number of cells in the row\r\n * @returns Number of cells\r\n */\r\n getCellCount(): number {\r\n return this.cells.length;\r\n }\r\n\r\n /**\r\n * Calculates the total grid span of the row (considering column spans)\r\n *\r\n * For tables with merged cells, this returns the number of logical columns\r\n * this row spans based on the columnSpan values of each cell.\r\n *\r\n * @returns Total grid span (sum of all cell spans, where unspanned cells count as 1)\r\n *\r\n * @example\r\n * ```typescript\r\n * // Row with 3 cells, middle one spanning 2 columns\r\n * const row = new TableRow();\r\n * row.createCell('A'); // span = 1\r\n * row.createCell('B').setColumnSpan(2); // span = 2\r\n * row.createCell('C'); // span = 1\r\n * row.getTotalGridSpan(); // Returns 4\r\n * ```\r\n */\r\n getTotalGridSpan(): number {\r\n let totalSpan = 0;\r\n for (const cell of this.cells) {\r\n const formatting = cell.getFormatting();\r\n totalSpan += formatting.columnSpan || 1;\r\n }\r\n return totalSpan;\r\n }\r\n\r\n /**\r\n * Validates the row's grid alignment\r\n *\r\n * Checks if the total grid span matches the expected column count.\r\n * Logs a warning if there's a mismatch, which can indicate:\r\n * - Missing cells (grid span < expected)\r\n * - Extra cells (grid span > expected)\r\n * - Incorrect columnSpan values\r\n *\r\n * @param expectedColumns - Expected number of columns in the table grid\r\n * @returns Object with validation result and details\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = row.validateGridAlignment(4);\r\n * if (!result.isValid) {\r\n * console.log(result.message); // \"Row has 3 grid columns but expected 4\"\r\n * }\r\n * ```\r\n */\r\n validateGridAlignment(expectedColumns: number): {\r\n isValid: boolean;\r\n actualSpan: number;\r\n message?: string;\r\n } {\r\n const actualSpan = this.getTotalGridSpan();\r\n\r\n if (actualSpan === expectedColumns) {\r\n return { isValid: true, actualSpan };\r\n }\r\n\r\n const message =\r\n `Row grid alignment mismatch: has ${actualSpan} grid columns but expected ${expectedColumns}. ` +\r\n `Cell count: ${this.cells.length}. ` +\r\n (actualSpan < expectedColumns\r\n ? \"Missing cells or incorrect columnSpan values.\"\r\n : \"Extra cells or excessive columnSpan values.\");\r\n\r\n defaultLogger.warn(`[TableRow] ${message}`);\r\n\r\n return {\r\n isValid: false,\r\n actualSpan,\r\n message,\r\n };\r\n }\r\n\r\n /**\r\n * Sets row height\r\n * @param twips - Height in twips\r\n * @param rule - Height rule\r\n * @returns This row for chaining\r\n */\r\n setHeight(twips: number, rule: RowFormatting['heightRule'] = 'atLeast'): this {\r\n const prevHeight = this.formatting.height;\r\n const prevRule = this.formatting.heightRule;\r\n this.formatting.height = twips;\r\n this.formatting.heightRule = rule;\r\n if (this.trackingContext?.isEnabled()) {\r\n if (prevHeight !== twips) {\r\n this.trackingContext.trackTableChange(this, 'height', prevHeight, twips);\r\n }\r\n if (prevRule !== rule) {\r\n this.trackingContext.trackTableChange(this, 'heightRule', prevRule, rule);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Clears the row height, allowing Word to auto-size the row based on content\r\n * @returns This row for chaining\r\n */\r\n clearHeight(): this {\r\n delete this.formatting.height;\r\n delete this.formatting.heightRule;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets whether this is a header row\r\n * @param isHeader - Whether this is a header row\r\n * @returns This row for chaining\r\n */\r\n setHeader(isHeader = true): this {\r\n const prev = this.formatting.isHeader;\r\n this.formatting.isHeader = isHeader;\r\n if (this.trackingContext?.isEnabled() && prev !== isHeader) {\r\n this.trackingContext.trackTableChange(this, 'isHeader', prev, isHeader);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets whether row can split across pages\r\n * @param cantSplit - Whether to prevent splitting\r\n * @returns This row for chaining\r\n */\r\n setCantSplit(cantSplit = true): this {\r\n const prev = this.formatting.cantSplit;\r\n this.formatting.cantSplit = cantSplit;\r\n if (this.trackingContext?.isEnabled() && prev !== cantSplit) {\r\n this.trackingContext.trackTableChange(this, 'cantSplit', prev, cantSplit);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets row justification/alignment\r\n * Per ECMA-376 Part 1 §17.4.79 (w:jc)\r\n * @param alignment - Row justification ('left' | 'center' | 'right' | 'start' | 'end')\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * row.setJustification('center'); // Center-align the entire row\r\n * ```\r\n */\r\n setJustification(alignment: RowJustification): this {\r\n const prev = this.formatting.justification;\r\n this.formatting.justification = alignment;\r\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\r\n this.trackingContext.trackTableChange(this, 'justification', prev, alignment);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets whether row is hidden\r\n * Per ECMA-376 Part 1 §17.4.23 (w:hidden)\r\n * @param hidden - Whether to hide the row\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * row.setHidden(true); // Hide this row from display\r\n * ```\r\n */\r\n setHidden(hidden = true): this {\r\n const prev = this.formatting.hidden;\r\n this.formatting.hidden = hidden;\r\n if (this.trackingContext?.isEnabled() && prev !== hidden) {\r\n this.trackingContext.trackTableChange(this, 'hidden', prev, hidden);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets grid columns before first cell\r\n * Per ECMA-376 Part 1 §17.4.15 (w:gridBefore)\r\n * Specifies number of grid columns that must be skipped before the first cell\r\n * @param columns - Number of grid columns to skip before first cell\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * row.setGridBefore(2); // Skip 2 columns before first cell\r\n * ```\r\n */\r\n setGridBefore(columns: number): this {\r\n const prev = this.formatting.gridBefore;\r\n this.formatting.gridBefore = columns;\r\n if (this.trackingContext?.isEnabled() && prev !== columns) {\r\n this.trackingContext.trackTableChange(this, 'gridBefore', prev, columns);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets grid columns after last cell\r\n * Per ECMA-376 Part 1 §17.4.14 (w:gridAfter)\r\n * Specifies number of grid columns that must be left after the last cell\r\n * @param columns - Number of grid columns to leave after last cell\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * row.setGridAfter(1); // Leave 1 column after last cell\r\n * ```\r\n */\r\n setGridAfter(columns: number): this {\r\n const prev = this.formatting.gridAfter;\r\n this.formatting.gridAfter = columns;\r\n if (this.trackingContext?.isEnabled() && prev !== columns) {\r\n this.trackingContext.trackTableChange(this, 'gridAfter', prev, columns);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets table property exceptions for this row\r\n * Per ECMA-376 Part 1 §17.4.61 (w:tblPrEx)\r\n *\r\n * Allows this row to override table-level properties like borders, shading, and cell spacing.\r\n * Typically used when merging tables or preserving formatting from legacy documents.\r\n *\r\n * @param exceptions - Table property exceptions configuration\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * // Override borders for this row\r\n * row.setTablePropertyExceptions({\r\n * borders: {\r\n * top: { style: 'single', size: 8, color: 'FF0000' },\r\n * bottom: { style: 'single', size: 8, color: 'FF0000' }\r\n * },\r\n * shading: { fill: 'FFFF00', pattern: 'clear' }\r\n * });\r\n * ```\r\n */\r\n setTablePropertyExceptions(exceptions: TablePropertyExceptions): this {\r\n const prev = this.formatting.tablePropertyExceptions;\r\n this.formatting.tablePropertyExceptions = exceptions;\r\n if (this.trackingContext?.isEnabled() && prev !== exceptions) {\r\n this.trackingContext.trackTableChange(this, 'tablePropertyExceptions', prev, exceptions);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets width before row (w:wBefore) per ECMA-376 Part 1 §17.4.83\r\n * @param width - Width in twips\r\n * @param type - Width type (dxa, pct, auto)\r\n * @returns This row for chaining\r\n */\r\n setWBefore(width: number, type = 'dxa'): this {\r\n const prevWidth = this.formatting.wBefore;\r\n const prevType = this.formatting.wBeforeType;\r\n this.formatting.wBefore = width;\r\n this.formatting.wBeforeType = type;\r\n if (this.trackingContext?.isEnabled()) {\r\n if (prevWidth !== width) {\r\n this.trackingContext.trackTableChange(this, 'wBefore', prevWidth, width);\r\n }\r\n if (prevType !== type) {\r\n this.trackingContext.trackTableChange(this, 'wBeforeType', prevType, type);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets width after row (w:wAfter) per ECMA-376 Part 1 §17.4.82\r\n * @param width - Width in twips\r\n * @param type - Width type (dxa, pct, auto)\r\n * @returns This row for chaining\r\n */\r\n setWAfter(width: number, type = 'dxa'): this {\r\n const prevWidth = this.formatting.wAfter;\r\n const prevType = this.formatting.wAfterType;\r\n this.formatting.wAfter = width;\r\n this.formatting.wAfterType = type;\r\n if (this.trackingContext?.isEnabled()) {\r\n if (prevWidth !== width) {\r\n this.trackingContext.trackTableChange(this, 'wAfter', prevWidth, width);\r\n }\r\n if (prevType !== type) {\r\n this.trackingContext.trackTableChange(this, 'wAfterType', prevType, type);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets row-level cell spacing override (w:tblCellSpacing on row)\r\n * @param spacing - Cell spacing in twips\r\n * @param type - Spacing type (dxa, pct)\r\n * @returns This row for chaining\r\n */\r\n setRowCellSpacing(spacing: number, type = 'dxa'): this {\r\n const prevSpacing = this.formatting.cellSpacing;\r\n const prevType = this.formatting.cellSpacingType;\r\n this.formatting.cellSpacing = spacing;\r\n this.formatting.cellSpacingType = type;\r\n if (this.trackingContext?.isEnabled()) {\r\n if (prevSpacing !== spacing) {\r\n this.trackingContext.trackTableChange(this, 'cellSpacing', prevSpacing, spacing);\r\n }\r\n if (prevType !== type) {\r\n this.trackingContext.trackTableChange(this, 'cellSpacingType', prevType, type);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets conditional formatting bitmask for this row (w:cnfStyle)\r\n * Per ECMA-376 Part 1 §17.3.1.8\r\n * @param cnfStyle - Binary string (e.g., '100000000000' for firstRow)\r\n * @returns This row for chaining\r\n */\r\n setCnfStyle(cnfStyle: string): this {\r\n const prev = this.formatting.cnfStyle;\r\n this.formatting.cnfStyle = cnfStyle;\r\n if (this.trackingContext?.isEnabled() && prev !== cnfStyle) {\r\n this.trackingContext.trackTableChange(this, 'cnfStyle', prev, cnfStyle);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets table property exceptions\r\n * @returns Table property exceptions or undefined\r\n */\r\n getTablePropertyExceptions(): TablePropertyExceptions | undefined {\r\n return this.formatting.tablePropertyExceptions;\r\n }\r\n\r\n /**\r\n * Gets the row formatting\r\n * @returns Row formatting\r\n */\r\n getFormatting(): RowFormatting {\r\n return { ...this.formatting };\r\n }\r\n\r\n // ============================================================================\r\n // Individual Formatting Getters\r\n // ============================================================================\r\n\r\n /**\r\n * Gets the row height in twips\r\n * @returns Height in twips or undefined if not set\r\n */\r\n getHeight(): number | undefined {\r\n return this.formatting.height;\r\n }\r\n\r\n /**\r\n * Gets the row height rule\r\n * @returns Height rule ('auto', 'exact', 'atLeast') or undefined\r\n */\r\n getHeightRule(): string | undefined {\r\n return this.formatting.heightRule;\r\n }\r\n\r\n /**\r\n * Checks if this row is marked as a header row\r\n * @returns True if this is a header row\r\n */\r\n getIsHeader(): boolean {\r\n return this.formatting.isHeader ?? false;\r\n }\r\n\r\n /**\r\n * Gets whether the row can split across pages\r\n * @returns True if row cannot split\r\n */\r\n getCantSplit(): boolean {\r\n return this.formatting.cantSplit ?? false;\r\n }\r\n\r\n /**\r\n * Gets the row justification (alignment)\r\n * @returns Justification ('left', 'center', 'right') or undefined\r\n */\r\n getJustification(): string | undefined {\r\n return this.formatting.justification;\r\n }\r\n\r\n /**\r\n * Checks if this row is hidden\r\n * @returns True if row is hidden\r\n */\r\n isHidden(): boolean {\r\n return this.formatting.hidden ?? false;\r\n }\r\n\r\n /**\r\n * Sets the parent table reference for this row.\r\n * Called by Table when adding rows.\r\n * @internal\r\n */\r\n _setParentTable(table: import('./Table').Table | undefined): void {\r\n this._parentTable = table;\r\n }\r\n\r\n /**\r\n * Gets the parent table reference for this row.\r\n * @internal\r\n */\r\n _getParentTable(): import('./Table').Table | undefined {\r\n return this._parentTable;\r\n }\r\n\r\n /**\r\n * Builds XML for table property exceptions\r\n * Per ECMA-376 Part 1 §17.4.61\r\n * @private\r\n */\r\n private buildTablePropertyExceptionsXML(exceptions: TablePropertyExceptions): XMLElement[] {\r\n const children: XMLElement[] = [];\r\n\r\n // Add table width exception (w:tblW)\r\n if (exceptions.width !== undefined) {\r\n children.push(XMLBuilder.wSelf('tblW', {\r\n 'w:w': exceptions.width,\r\n 'w:type': 'dxa'\r\n }));\r\n }\r\n\r\n // Add table justification exception (w:jc)\r\n if (exceptions.justification) {\r\n children.push(XMLBuilder.wSelf('jc', { 'w:val': exceptions.justification }));\r\n }\r\n\r\n // Add cell spacing exception (w:tblCellSpacing)\r\n if (exceptions.cellSpacing !== undefined) {\r\n children.push(XMLBuilder.wSelf('tblCellSpacing', {\r\n 'w:w': exceptions.cellSpacing,\r\n 'w:type': 'dxa'\r\n }));\r\n }\r\n\r\n // Add table indentation exception (w:tblInd)\r\n if (exceptions.indentation !== undefined) {\r\n children.push(XMLBuilder.wSelf('tblInd', {\r\n 'w:w': exceptions.indentation,\r\n 'w:type': 'dxa'\r\n }));\r\n }\r\n\r\n // Add table borders exception (w:tblBorders)\r\n if (exceptions.borders) {\r\n const borderChildren = this.buildBordersXML(exceptions.borders);\r\n if (borderChildren.length > 0) {\r\n children.push(XMLBuilder.w('tblBorders', undefined, borderChildren));\r\n }\r\n }\r\n\r\n // Add shading exception (w:shd)\r\n if (exceptions.shading) {\r\n const shdAttrs: Record<string, string> = {};\r\n if (exceptions.shading.pattern) shdAttrs['w:val'] = exceptions.shading.pattern;\r\n if (exceptions.shading.color) shdAttrs['w:color'] = exceptions.shading.color;\r\n if (exceptions.shading.fill) shdAttrs['w:fill'] = exceptions.shading.fill;\r\n if (exceptions.shading.themeColor) shdAttrs['w:themeColor'] = exceptions.shading.themeColor;\r\n if (exceptions.shading.themeFill) shdAttrs['w:themeFill'] = exceptions.shading.themeFill;\r\n if (exceptions.shading.themeFillShade) shdAttrs['w:themeFillShade'] = exceptions.shading.themeFillShade;\r\n if (exceptions.shading.themeFillTint) shdAttrs['w:themeFillTint'] = exceptions.shading.themeFillTint;\r\n if (exceptions.shading.themeShade) shdAttrs['w:themeShade'] = exceptions.shading.themeShade;\r\n if (exceptions.shading.themeTint) shdAttrs['w:themeTint'] = exceptions.shading.themeTint;\r\n children.push(XMLBuilder.w('shd', shdAttrs));\r\n }\r\n\r\n return children;\r\n }\r\n\r\n /**\r\n * Builds XML for table borders\r\n * @private\r\n */\r\n private buildBordersXML(borders: TableBorders): XMLElement[] {\r\n const children: XMLElement[] = [];\r\n\r\n const borderNames: (keyof TableBorders)[] = ['top', 'left', 'bottom', 'right', 'insideH', 'insideV'];\r\n\r\n for (const name of borderNames) {\r\n const border = borders[name];\r\n if (border) {\r\n const attrs: Record<string, string | number> = {};\r\n if (border.style) attrs['w:val'] = border.style;\r\n if (border.size !== undefined) attrs['w:sz'] = border.size;\r\n if (border.space !== undefined) attrs['w:space'] = border.space;\r\n if (border.color) attrs['w:color'] = border.color;\r\n\r\n if (Object.keys(attrs).length > 0) {\r\n children.push(XMLBuilder.wSelf(name, attrs));\r\n }\r\n }\r\n }\r\n\r\n return children;\r\n }\r\n\r\n /**\r\n * Converts the row to WordprocessingML XML element\r\n * @returns XMLElement representing the row\r\n */\r\n toXML(): XMLElement {\r\n const trPrChildren: XMLElement[] = [];\r\n\r\n // Ordered per CT_TrPr (ECMA-376 §17.4.79):\r\n // cnfStyle → divId → gridBefore → gridAfter → wBefore → wAfter →\r\n // cantSplit → trHeight → tblHeader → tblCellSpacing → jc → hidden\r\n\r\n // 1. cnfStyle (conditional formatting bitmask)\r\n if (this.formatting.cnfStyle) {\r\n trPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': this.formatting.cnfStyle }));\r\n }\r\n\r\n // 2. (divId not supported)\r\n\r\n // 3. gridBefore\r\n if (this.formatting.gridBefore !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('gridBefore', { 'w:val': this.formatting.gridBefore }));\r\n }\r\n\r\n // 4. gridAfter\r\n if (this.formatting.gridAfter !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('gridAfter', { 'w:val': this.formatting.gridAfter }));\r\n }\r\n\r\n // 5. wBefore\r\n if (this.formatting.wBefore !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('wBefore', {\r\n 'w:w': this.formatting.wBefore,\r\n 'w:type': this.formatting.wBeforeType || 'dxa',\r\n }));\r\n }\r\n\r\n // 6. wAfter\r\n if (this.formatting.wAfter !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('wAfter', {\r\n 'w:w': this.formatting.wAfter,\r\n 'w:type': this.formatting.wAfterType || 'dxa',\r\n }));\r\n }\r\n\r\n // 7. cantSplit\r\n if (this.formatting.cantSplit) {\r\n trPrChildren.push(XMLBuilder.wSelf('cantSplit'));\r\n }\r\n\r\n // 8. trHeight\r\n if (this.formatting.height !== undefined) {\r\n const attrs: Record<string, string | number> = {\r\n 'w:val': this.formatting.height,\r\n };\r\n if (this.formatting.heightRule) {\r\n attrs['w:hRule'] = this.formatting.heightRule;\r\n }\r\n trPrChildren.push(XMLBuilder.wSelf('trHeight', attrs));\r\n }\r\n\r\n // 9. tblHeader\r\n if (this.formatting.isHeader) {\r\n trPrChildren.push(XMLBuilder.wSelf('tblHeader'));\r\n }\r\n\r\n // 10. tblCellSpacing\r\n if (this.formatting.cellSpacing !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('tblCellSpacing', {\r\n 'w:w': this.formatting.cellSpacing,\r\n 'w:type': this.formatting.cellSpacingType || 'dxa',\r\n }));\r\n }\r\n\r\n // 11. jc (map 'start'/'end' to valid ST_JcTable values)\r\n if (this.formatting.justification) {\r\n const jcMap: Record<string, string> = { start: 'left', end: 'right' };\r\n const jcVal = jcMap[this.formatting.justification] || this.formatting.justification;\r\n trPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': jcVal }));\r\n }\r\n\r\n // 12. hidden\r\n if (this.formatting.hidden) {\r\n trPrChildren.push(XMLBuilder.wSelf('hidden'));\r\n }\r\n\r\n // Add table row property change (w:trPrChange) per ECMA-376 Part 1 §17.13.5.38\r\n // Must be last child of w:trPr\r\n if (this.trPrChange) {\r\n const changeAttrs: Record<string, string | number> = {\r\n 'w:id': this.trPrChange.id,\r\n 'w:author': this.trPrChange.author,\r\n 'w:date': this.trPrChange.date,\r\n };\r\n const prevTrPrChildren: XMLElement[] = [];\r\n const prev = this.trPrChange.previousProperties;\r\n if (prev) {\r\n // Ordered per CT_TrPr: cnfStyle → gridBefore → gridAfter → wBefore → wAfter →\r\n // cantSplit → trHeight → tblHeader → tblCellSpacing → jc → hidden\r\n if (prev.cnfStyle) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': prev.cnfStyle }));\r\n }\r\n if (prev.gridBefore !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('gridBefore', { 'w:val': prev.gridBefore }));\r\n }\r\n if (prev.gridAfter !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('gridAfter', { 'w:val': prev.gridAfter }));\r\n }\r\n if (prev.wBefore !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('wBefore', {\r\n 'w:w': prev.wBefore,\r\n 'w:type': prev.wBeforeType || 'dxa',\r\n }));\r\n }\r\n if (prev.wAfter !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('wAfter', {\r\n 'w:w': prev.wAfter,\r\n 'w:type': prev.wAfterType || 'dxa',\r\n }));\r\n }\r\n if (prev.cantSplit) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('cantSplit'));\r\n }\r\n if (prev.height !== undefined) {\r\n const heightAttrs: Record<string, string | number> = { 'w:val': prev.height };\r\n if (prev.heightRule) heightAttrs['w:hRule'] = prev.heightRule;\r\n prevTrPrChildren.push(XMLBuilder.wSelf('trHeight', heightAttrs));\r\n }\r\n if (prev.isHeader) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('tblHeader'));\r\n }\r\n if (prev.cellSpacing !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('tblCellSpacing', {\r\n 'w:w': prev.cellSpacing,\r\n 'w:type': prev.cellSpacingType || 'dxa',\r\n }));\r\n }\r\n if (prev.justification) {\r\n const jcPrevMap: Record<string, string> = { start: 'left', end: 'right' };\r\n prevTrPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': jcPrevMap[prev.justification] || prev.justification }));\r\n }\r\n if (prev.hidden) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('hidden'));\r\n }\r\n }\r\n const prevTrPr = XMLBuilder.w('trPr', undefined, prevTrPrChildren);\r\n trPrChildren.push(XMLBuilder.w('trPrChange', changeAttrs, [prevTrPr]));\r\n }\r\n\r\n // Build row element\r\n const rowChildren: XMLElement[] = [];\r\n\r\n // Add row properties if there are any\r\n if (trPrChildren.length > 0) {\r\n rowChildren.push(XMLBuilder.w('trPr', undefined, trPrChildren));\r\n }\r\n\r\n // Add table property exceptions (tblPrEx) if present\r\n if (this.formatting.tablePropertyExceptions) {\r\n const tblPrExChildren = this.buildTablePropertyExceptionsXML(this.formatting.tablePropertyExceptions);\r\n if (tblPrExChildren.length > 0) {\r\n rowChildren.push(XMLBuilder.w('tblPrEx', undefined, tblPrExChildren));\r\n }\r\n }\r\n\r\n // Add all cells - each cell is independent\r\n // Note: gridSpan (columnSpan) means a single cell spans multiple columns in the grid,\r\n // it does NOT mean subsequent cells should be skipped. Each cell in the array\r\n // represents a distinct cell that should be output to the XML.\r\n for (const cell of this.cells) {\r\n rowChildren.push(cell.toXML());\r\n }\r\n\r\n return XMLBuilder.w('tr', undefined, rowChildren);\r\n }\r\n\r\n /**\r\n * Creates a new TableRow\r\n * @param cellCount - Number of cells to create\r\n * @param formatting - Row formatting\r\n * @returns New TableRow instance\r\n */\r\n static create(cellCount?: number, formatting?: RowFormatting): TableRow {\r\n return new TableRow(cellCount, formatting);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"TableRow.js","sourceRoot":"","sources":["../../src/elements/TableRow.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * TableRow - Represents a row in a table\r\n */\r\n\r\nimport { TableCell } from './TableCell';\r\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\r\nimport { TableBorder, TableBorders } from './Table';\r\nimport {\r\n BasicShadingPattern,\r\n RowJustification as CommonRowJustification,\r\n ShadingConfig,\r\n buildShadingAttributes,\r\n} from './CommonTypes';\r\nimport { defaultLogger } from '../utils/logger';\r\n\r\n// ============================================================================\r\n// RE-EXPORTED TYPES (for backward compatibility)\r\n// ============================================================================\r\n\r\n/**\r\n * Row justification/alignment options\r\n * @see CommonTypes.RowJustification\r\n */\r\nexport type RowJustification = CommonRowJustification;\r\n\r\n/**\r\n * Shading pattern values per ECMA-376\r\n * @see CommonTypes.BasicShadingPattern for the canonical definition\r\n */\r\nexport type ShadingPattern = BasicShadingPattern;\r\n\r\n/**\r\n * Shading configuration\r\n * @see ShadingConfig in CommonTypes.ts for the canonical definition\r\n */\r\nexport type Shading = ShadingConfig;\r\n\r\n/**\r\n * Table property exceptions - overrides table-level properties for this row\r\n * Per ECMA-376 Part 1 §17.4.61 (w:tblPrEx)\r\n */\r\nexport interface TablePropertyExceptions {\r\n /** Border overrides for this row */\r\n borders?: TableBorders;\r\n /** Shading override for this row */\r\n shading?: Shading;\r\n /** Cell spacing override in twips */\r\n cellSpacing?: number;\r\n /** Table width override in twips */\r\n width?: number;\r\n /** Table indentation override in twips */\r\n indentation?: number;\r\n /** Table justification override */\r\n justification?: RowJustification;\r\n}\r\n\r\n/**\r\n * Row formatting options\r\n */\r\nexport interface RowFormatting {\r\n height?: number; // Height in twips\r\n heightRule?: 'auto' | 'exact' | 'atLeast';\r\n isHeader?: boolean; // Whether this is a header row\r\n cantSplit?: boolean; // Prevent row from breaking across pages\r\n justification?: RowJustification; // Row justification/alignment\r\n hidden?: boolean; // Hide row\r\n gridBefore?: number; // Grid columns before first cell\r\n gridAfter?: number; // Grid columns after last cell\r\n tablePropertyExceptions?: TablePropertyExceptions; // Table property exceptions for this row\r\n wBefore?: number; // Width before row in twips (per ECMA-376 §17.4.83)\r\n wBeforeType?: string; // Width before type (dxa, pct, auto)\r\n wAfter?: number; // Width after row in twips (per ECMA-376 §17.4.82)\r\n wAfterType?: string; // Width after type (dxa, pct, auto)\r\n cellSpacing?: number; // Row-level cell spacing override in twips\r\n cellSpacingType?: string; // Cell spacing type (dxa, pct)\r\n cnfStyle?: string; // Conditional formatting bitmask (per ECMA-376 §17.3.1.8)\r\n divId?: number; // HTML div association (per ECMA-376 §17.4.9)\r\n}\r\n\r\n/**\r\n * Table row property change tracking (w:trPrChange)\r\n * Per ECMA-376 Part 1 §17.13.5.38\r\n */\r\nexport interface TrPrChange {\r\n author: string;\r\n date: string;\r\n id: string;\r\n previousProperties: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Represents a table row\r\n */\r\nexport class TableRow {\r\n private cells: TableCell[] = [];\r\n private formatting: RowFormatting;\r\n /** Parent table reference (if row is inside a table) */\r\n private _parentTable?: import('./Table').Table;\r\n /** Tracking context for automatic change tracking */\r\n private trackingContext?: import('../tracking/TrackingContext').TrackingContext;\r\n /** Table row property change tracking (w:trPrChange) */\r\n private trPrChange?: TrPrChange;\r\n\r\n /**\r\n * Creates a new TableRow\r\n * @param cellCount - Number of cells to create (optional)\r\n * @param formatting - Row formatting options\r\n */\r\n constructor(cellCount?: number, formatting: RowFormatting = {}) {\r\n this.formatting = formatting;\r\n\r\n if (cellCount !== undefined && cellCount > 0) {\r\n for (let i = 0; i < cellCount; i++) {\r\n const cell = new TableCell();\r\n cell._setParentRow(this);\r\n this.cells.push(cell);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the tracking context for automatic change tracking.\r\n * Called by Document when track changes is enabled.\r\n * @internal\r\n */\r\n _setTrackingContext(context: import('../tracking/TrackingContext').TrackingContext): void {\r\n this.trackingContext = context;\r\n }\r\n\r\n /**\r\n * Gets the table row property change tracking info\r\n */\r\n getTrPrChange(): TrPrChange | undefined {\r\n return this.trPrChange;\r\n }\r\n\r\n /**\r\n * Sets the table row property change tracking info\r\n */\r\n setTrPrChange(change: TrPrChange | undefined): void {\r\n this.trPrChange = change;\r\n }\r\n\r\n /**\r\n * Clears the table row property change tracking\r\n */\r\n clearTrPrChange(): void {\r\n this.trPrChange = undefined;\r\n }\r\n\r\n /**\r\n * Adds a cell to the row\r\n * @param cell - Cell to add\r\n * @returns This row for chaining\r\n */\r\n addCell(cell: TableCell): this {\r\n this.cells.push(cell);\r\n cell._setParentRow(this);\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates and adds a new cell\r\n * @param text - Optional text content for the cell\r\n * @returns The created cell\r\n */\r\n createCell(text?: string): TableCell {\r\n const cell = new TableCell();\r\n if (text) {\r\n cell.createParagraph(text);\r\n }\r\n this.cells.push(cell);\r\n cell._setParentRow(this);\r\n return cell;\r\n }\r\n\r\n /**\r\n * Gets a cell by index\r\n * @param index - Cell index (0-based)\r\n * @returns The cell at the index, or undefined\r\n */\r\n getCell(index: number): TableCell | undefined {\r\n return this.cells[index];\r\n }\r\n\r\n /**\r\n * Inserts a cell at the specified index\r\n * @param index - Position to insert (0-based)\r\n * @param cell - Cell to insert\r\n */\r\n insertCellAt(index: number, cell: TableCell): void {\r\n this.cells.splice(index, 0, cell);\r\n cell._setParentRow(this);\r\n }\r\n\r\n /**\r\n * Removes and returns the cell at the specified index\r\n * @param index - Position to remove (0-based)\r\n * @returns The removed cell, or undefined if index is out of bounds\r\n */\r\n removeCellAt(index: number): TableCell | undefined {\r\n if (index < 0 || index >= this.cells.length) return undefined;\r\n const removed = this.cells.splice(index, 1);\r\n const cell = removed[0];\r\n if (cell) cell._setParentRow(undefined);\r\n return cell;\r\n }\r\n\r\n /**\r\n * Gets all cells in the row\r\n * @returns Array of cells\r\n */\r\n getCells(): TableCell[] {\r\n return [...this.cells];\r\n }\r\n\r\n /**\r\n * Gets the number of cells in the row\r\n * @returns Number of cells\r\n */\r\n getCellCount(): number {\r\n return this.cells.length;\r\n }\r\n\r\n /**\r\n * Calculates the total grid span of the row (considering column spans)\r\n *\r\n * For tables with merged cells, this returns the number of logical columns\r\n * this row spans based on the columnSpan values of each cell.\r\n *\r\n * @returns Total grid span (sum of all cell spans, where unspanned cells count as 1)\r\n *\r\n * @example\r\n * ```typescript\r\n * // Row with 3 cells, middle one spanning 2 columns\r\n * const row = new TableRow();\r\n * row.createCell('A'); // span = 1\r\n * row.createCell('B').setColumnSpan(2); // span = 2\r\n * row.createCell('C'); // span = 1\r\n * row.getTotalGridSpan(); // Returns 4\r\n * ```\r\n */\r\n getTotalGridSpan(): number {\r\n let totalSpan = 0;\r\n for (const cell of this.cells) {\r\n const formatting = cell.getFormatting();\r\n totalSpan += formatting.columnSpan || 1;\r\n }\r\n return totalSpan;\r\n }\r\n\r\n /**\r\n * Validates the row's grid alignment\r\n *\r\n * Checks if the total grid span matches the expected column count.\r\n * Logs a warning if there's a mismatch, which can indicate:\r\n * - Missing cells (grid span < expected)\r\n * - Extra cells (grid span > expected)\r\n * - Incorrect columnSpan values\r\n *\r\n * @param expectedColumns - Expected number of columns in the table grid\r\n * @returns Object with validation result and details\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = row.validateGridAlignment(4);\r\n * if (!result.isValid) {\r\n * console.log(result.message); // \"Row has 3 grid columns but expected 4\"\r\n * }\r\n * ```\r\n */\r\n validateGridAlignment(expectedColumns: number): {\r\n isValid: boolean;\r\n actualSpan: number;\r\n message?: string;\r\n } {\r\n const actualSpan = this.getTotalGridSpan();\r\n\r\n if (actualSpan === expectedColumns) {\r\n return { isValid: true, actualSpan };\r\n }\r\n\r\n const message =\r\n `Row grid alignment mismatch: has ${actualSpan} grid columns but expected ${expectedColumns}. ` +\r\n `Cell count: ${this.cells.length}. ` +\r\n (actualSpan < expectedColumns\r\n ? \"Missing cells or incorrect columnSpan values.\"\r\n : \"Extra cells or excessive columnSpan values.\");\r\n\r\n defaultLogger.warn(`[TableRow] ${message}`);\r\n\r\n return {\r\n isValid: false,\r\n actualSpan,\r\n message,\r\n };\r\n }\r\n\r\n /**\r\n * Sets row height\r\n * @param twips - Height in twips\r\n * @param rule - Height rule\r\n * @returns This row for chaining\r\n */\r\n setHeight(twips: number, rule: RowFormatting['heightRule'] = 'atLeast'): this {\r\n const prevHeight = this.formatting.height;\r\n const prevRule = this.formatting.heightRule;\r\n this.formatting.height = twips;\r\n this.formatting.heightRule = rule;\r\n if (this.trackingContext?.isEnabled()) {\r\n if (prevHeight !== twips) {\r\n this.trackingContext.trackTableChange(this, 'height', prevHeight, twips);\r\n }\r\n if (prevRule !== rule) {\r\n this.trackingContext.trackTableChange(this, 'heightRule', prevRule, rule);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Clears the row height, allowing Word to auto-size the row based on content\r\n * @returns This row for chaining\r\n */\r\n clearHeight(): this {\r\n delete this.formatting.height;\r\n delete this.formatting.heightRule;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets whether this is a header row\r\n * @param isHeader - Whether this is a header row\r\n * @returns This row for chaining\r\n */\r\n setHeader(isHeader = true): this {\r\n const prev = this.formatting.isHeader;\r\n this.formatting.isHeader = isHeader;\r\n if (this.trackingContext?.isEnabled() && prev !== isHeader) {\r\n this.trackingContext.trackTableChange(this, 'isHeader', prev, isHeader);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets whether row can split across pages\r\n * @param cantSplit - Whether to prevent splitting\r\n * @returns This row for chaining\r\n */\r\n setCantSplit(cantSplit = true): this {\r\n const prev = this.formatting.cantSplit;\r\n this.formatting.cantSplit = cantSplit;\r\n if (this.trackingContext?.isEnabled() && prev !== cantSplit) {\r\n this.trackingContext.trackTableChange(this, 'cantSplit', prev, cantSplit);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets row justification/alignment\r\n * Per ECMA-376 Part 1 §17.4.79 (w:jc)\r\n * @param alignment - Row justification ('left' | 'center' | 'right' | 'start' | 'end')\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * row.setJustification('center'); // Center-align the entire row\r\n * ```\r\n */\r\n setJustification(alignment: RowJustification): this {\r\n const prev = this.formatting.justification;\r\n this.formatting.justification = alignment;\r\n if (this.trackingContext?.isEnabled() && prev !== alignment) {\r\n this.trackingContext.trackTableChange(this, 'justification', prev, alignment);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets whether row is hidden\r\n * Per ECMA-376 Part 1 §17.4.23 (w:hidden)\r\n * @param hidden - Whether to hide the row\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * row.setHidden(true); // Hide this row from display\r\n * ```\r\n */\r\n setHidden(hidden = true): this {\r\n const prev = this.formatting.hidden;\r\n this.formatting.hidden = hidden;\r\n if (this.trackingContext?.isEnabled() && prev !== hidden) {\r\n this.trackingContext.trackTableChange(this, 'hidden', prev, hidden);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets grid columns before first cell\r\n * Per ECMA-376 Part 1 §17.4.15 (w:gridBefore)\r\n * Specifies number of grid columns that must be skipped before the first cell\r\n * @param columns - Number of grid columns to skip before first cell\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * row.setGridBefore(2); // Skip 2 columns before first cell\r\n * ```\r\n */\r\n setGridBefore(columns: number): this {\r\n const prev = this.formatting.gridBefore;\r\n this.formatting.gridBefore = columns;\r\n if (this.trackingContext?.isEnabled() && prev !== columns) {\r\n this.trackingContext.trackTableChange(this, 'gridBefore', prev, columns);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets grid columns after last cell\r\n * Per ECMA-376 Part 1 §17.4.14 (w:gridAfter)\r\n * Specifies number of grid columns that must be left after the last cell\r\n * @param columns - Number of grid columns to leave after last cell\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * row.setGridAfter(1); // Leave 1 column after last cell\r\n * ```\r\n */\r\n setGridAfter(columns: number): this {\r\n const prev = this.formatting.gridAfter;\r\n this.formatting.gridAfter = columns;\r\n if (this.trackingContext?.isEnabled() && prev !== columns) {\r\n this.trackingContext.trackTableChange(this, 'gridAfter', prev, columns);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets table property exceptions for this row\r\n * Per ECMA-376 Part 1 §17.4.61 (w:tblPrEx)\r\n *\r\n * Allows this row to override table-level properties like borders, shading, and cell spacing.\r\n * Typically used when merging tables or preserving formatting from legacy documents.\r\n *\r\n * @param exceptions - Table property exceptions configuration\r\n * @returns This row for chaining\r\n * @example\r\n * ```typescript\r\n * // Override borders for this row\r\n * row.setTablePropertyExceptions({\r\n * borders: {\r\n * top: { style: 'single', size: 8, color: 'FF0000' },\r\n * bottom: { style: 'single', size: 8, color: 'FF0000' }\r\n * },\r\n * shading: { fill: 'FFFF00', pattern: 'clear' }\r\n * });\r\n * ```\r\n */\r\n setTablePropertyExceptions(exceptions: TablePropertyExceptions): this {\r\n const prev = this.formatting.tablePropertyExceptions;\r\n this.formatting.tablePropertyExceptions = exceptions;\r\n if (this.trackingContext?.isEnabled() && prev !== exceptions) {\r\n this.trackingContext.trackTableChange(this, 'tablePropertyExceptions', prev, exceptions);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets width before row (w:wBefore) per ECMA-376 Part 1 §17.4.83\r\n * @param width - Width in twips\r\n * @param type - Width type (dxa, pct, auto)\r\n * @returns This row for chaining\r\n */\r\n setWBefore(width: number, type = 'dxa'): this {\r\n const prevWidth = this.formatting.wBefore;\r\n const prevType = this.formatting.wBeforeType;\r\n this.formatting.wBefore = width;\r\n this.formatting.wBeforeType = type;\r\n if (this.trackingContext?.isEnabled()) {\r\n if (prevWidth !== width) {\r\n this.trackingContext.trackTableChange(this, 'wBefore', prevWidth, width);\r\n }\r\n if (prevType !== type) {\r\n this.trackingContext.trackTableChange(this, 'wBeforeType', prevType, type);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets width after row (w:wAfter) per ECMA-376 Part 1 §17.4.82\r\n * @param width - Width in twips\r\n * @param type - Width type (dxa, pct, auto)\r\n * @returns This row for chaining\r\n */\r\n setWAfter(width: number, type = 'dxa'): this {\r\n const prevWidth = this.formatting.wAfter;\r\n const prevType = this.formatting.wAfterType;\r\n this.formatting.wAfter = width;\r\n this.formatting.wAfterType = type;\r\n if (this.trackingContext?.isEnabled()) {\r\n if (prevWidth !== width) {\r\n this.trackingContext.trackTableChange(this, 'wAfter', prevWidth, width);\r\n }\r\n if (prevType !== type) {\r\n this.trackingContext.trackTableChange(this, 'wAfterType', prevType, type);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets row-level cell spacing override (w:tblCellSpacing on row)\r\n * @param spacing - Cell spacing in twips\r\n * @param type - Spacing type (dxa, pct)\r\n * @returns This row for chaining\r\n */\r\n setRowCellSpacing(spacing: number, type = 'dxa'): this {\r\n const prevSpacing = this.formatting.cellSpacing;\r\n const prevType = this.formatting.cellSpacingType;\r\n this.formatting.cellSpacing = spacing;\r\n this.formatting.cellSpacingType = type;\r\n if (this.trackingContext?.isEnabled()) {\r\n if (prevSpacing !== spacing) {\r\n this.trackingContext.trackTableChange(this, 'cellSpacing', prevSpacing, spacing);\r\n }\r\n if (prevType !== type) {\r\n this.trackingContext.trackTableChange(this, 'cellSpacingType', prevType, type);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets conditional formatting bitmask for this row (w:cnfStyle)\r\n * Per ECMA-376 Part 1 §17.3.1.8\r\n * @param cnfStyle - Binary string (e.g., '100000000000' for firstRow)\r\n * @returns This row for chaining\r\n */\r\n setCnfStyle(cnfStyle: string): this {\r\n const prev = this.formatting.cnfStyle;\r\n this.formatting.cnfStyle = cnfStyle;\r\n if (this.trackingContext?.isEnabled() && prev !== cnfStyle) {\r\n this.trackingContext.trackTableChange(this, 'cnfStyle', prev, cnfStyle);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the HTML div ID for web round-trip\r\n * Per ECMA-376 Part 1 §17.4.9\r\n * @param id - Div ID number\r\n * @returns This row for chaining\r\n */\r\n setDivId(id: number): this {\r\n this.formatting.divId = id;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the HTML div ID\r\n * @returns Div ID or undefined\r\n */\r\n getDivId(): number | undefined {\r\n return this.formatting.divId;\r\n }\r\n\r\n /**\r\n * Gets table property exceptions\r\n * @returns Table property exceptions or undefined\r\n */\r\n getTablePropertyExceptions(): TablePropertyExceptions | undefined {\r\n return this.formatting.tablePropertyExceptions;\r\n }\r\n\r\n /**\r\n * Gets the row formatting\r\n * @returns Row formatting\r\n */\r\n getFormatting(): RowFormatting {\r\n return { ...this.formatting };\r\n }\r\n\r\n // ============================================================================\r\n // Individual Formatting Getters\r\n // ============================================================================\r\n\r\n /**\r\n * Gets the row height in twips\r\n * @returns Height in twips or undefined if not set\r\n */\r\n getHeight(): number | undefined {\r\n return this.formatting.height;\r\n }\r\n\r\n /**\r\n * Gets the row height rule\r\n * @returns Height rule ('auto', 'exact', 'atLeast') or undefined\r\n */\r\n getHeightRule(): string | undefined {\r\n return this.formatting.heightRule;\r\n }\r\n\r\n /**\r\n * Checks if this row is marked as a header row\r\n * @returns True if this is a header row\r\n */\r\n getIsHeader(): boolean {\r\n return this.formatting.isHeader ?? false;\r\n }\r\n\r\n /**\r\n * Gets whether the row can split across pages\r\n * @returns True if row cannot split\r\n */\r\n getCantSplit(): boolean {\r\n return this.formatting.cantSplit ?? false;\r\n }\r\n\r\n /**\r\n * Gets the row justification (alignment)\r\n * @returns Justification ('left', 'center', 'right') or undefined\r\n */\r\n getJustification(): string | undefined {\r\n return this.formatting.justification;\r\n }\r\n\r\n /**\r\n * Checks if this row is hidden\r\n * @returns True if row is hidden\r\n */\r\n isHidden(): boolean {\r\n return this.formatting.hidden ?? false;\r\n }\r\n\r\n /**\r\n * Sets the parent table reference for this row.\r\n * Called by Table when adding rows.\r\n * @internal\r\n */\r\n _setParentTable(table: import('./Table').Table | undefined): void {\r\n this._parentTable = table;\r\n }\r\n\r\n /**\r\n * Gets the parent table reference for this row.\r\n * @internal\r\n */\r\n _getParentTable(): import('./Table').Table | undefined {\r\n return this._parentTable;\r\n }\r\n\r\n /**\r\n * Builds XML for table property exceptions\r\n * Per ECMA-376 Part 1 §17.4.61\r\n * @private\r\n */\r\n private buildTablePropertyExceptionsXML(exceptions: TablePropertyExceptions): XMLElement[] {\r\n const children: XMLElement[] = [];\r\n\r\n // Add table width exception (w:tblW)\r\n if (exceptions.width !== undefined) {\r\n children.push(XMLBuilder.wSelf('tblW', {\r\n 'w:w': exceptions.width,\r\n 'w:type': 'dxa'\r\n }));\r\n }\r\n\r\n // Add table justification exception (w:jc)\r\n if (exceptions.justification) {\r\n children.push(XMLBuilder.wSelf('jc', { 'w:val': exceptions.justification }));\r\n }\r\n\r\n // Add cell spacing exception (w:tblCellSpacing)\r\n if (exceptions.cellSpacing !== undefined) {\r\n children.push(XMLBuilder.wSelf('tblCellSpacing', {\r\n 'w:w': exceptions.cellSpacing,\r\n 'w:type': 'dxa'\r\n }));\r\n }\r\n\r\n // Add table indentation exception (w:tblInd)\r\n if (exceptions.indentation !== undefined) {\r\n children.push(XMLBuilder.wSelf('tblInd', {\r\n 'w:w': exceptions.indentation,\r\n 'w:type': 'dxa'\r\n }));\r\n }\r\n\r\n // Add table borders exception (w:tblBorders)\r\n if (exceptions.borders) {\r\n const borderChildren = this.buildBordersXML(exceptions.borders);\r\n if (borderChildren.length > 0) {\r\n children.push(XMLBuilder.w('tblBorders', undefined, borderChildren));\r\n }\r\n }\r\n\r\n // Add shading exception (w:shd)\r\n if (exceptions.shading) {\r\n const shdAttrs: Record<string, string> = {};\r\n if (exceptions.shading.pattern) shdAttrs['w:val'] = exceptions.shading.pattern;\r\n if (exceptions.shading.color) shdAttrs['w:color'] = exceptions.shading.color;\r\n if (exceptions.shading.fill) shdAttrs['w:fill'] = exceptions.shading.fill;\r\n if (exceptions.shading.themeColor) shdAttrs['w:themeColor'] = exceptions.shading.themeColor;\r\n if (exceptions.shading.themeFill) shdAttrs['w:themeFill'] = exceptions.shading.themeFill;\r\n if (exceptions.shading.themeFillShade) shdAttrs['w:themeFillShade'] = exceptions.shading.themeFillShade;\r\n if (exceptions.shading.themeFillTint) shdAttrs['w:themeFillTint'] = exceptions.shading.themeFillTint;\r\n if (exceptions.shading.themeShade) shdAttrs['w:themeShade'] = exceptions.shading.themeShade;\r\n if (exceptions.shading.themeTint) shdAttrs['w:themeTint'] = exceptions.shading.themeTint;\r\n children.push(XMLBuilder.w('shd', shdAttrs));\r\n }\r\n\r\n return children;\r\n }\r\n\r\n /**\r\n * Builds XML for table borders\r\n * @private\r\n */\r\n private buildBordersXML(borders: TableBorders): XMLElement[] {\r\n const children: XMLElement[] = [];\r\n\r\n const borderNames: (keyof TableBorders)[] = ['top', 'left', 'bottom', 'right', 'insideH', 'insideV'];\r\n\r\n for (const name of borderNames) {\r\n const border = borders[name];\r\n if (border) {\r\n const attrs: Record<string, string | number> = {};\r\n if (border.style) attrs['w:val'] = border.style;\r\n if (border.size !== undefined) attrs['w:sz'] = border.size;\r\n if (border.space !== undefined) attrs['w:space'] = border.space;\r\n if (border.color) attrs['w:color'] = border.color;\r\n\r\n if (Object.keys(attrs).length > 0) {\r\n children.push(XMLBuilder.wSelf(name, attrs));\r\n }\r\n }\r\n }\r\n\r\n return children;\r\n }\r\n\r\n /**\r\n * Converts the row to WordprocessingML XML element\r\n * @returns XMLElement representing the row\r\n */\r\n toXML(): XMLElement {\r\n const trPrChildren: XMLElement[] = [];\r\n\r\n // Ordered per CT_TrPr (ECMA-376 §17.4.79):\r\n // cnfStyle → divId → gridBefore → gridAfter → wBefore → wAfter →\r\n // cantSplit → trHeight → tblHeader → tblCellSpacing → jc → hidden\r\n\r\n // 1. cnfStyle (conditional formatting bitmask)\r\n if (this.formatting.cnfStyle) {\r\n trPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': this.formatting.cnfStyle }));\r\n }\r\n\r\n // 2. divId\r\n if (this.formatting.divId !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('divId', { 'w:val': this.formatting.divId }));\r\n }\r\n\r\n // 3. gridBefore\r\n if (this.formatting.gridBefore !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('gridBefore', { 'w:val': this.formatting.gridBefore }));\r\n }\r\n\r\n // 4. gridAfter\r\n if (this.formatting.gridAfter !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('gridAfter', { 'w:val': this.formatting.gridAfter }));\r\n }\r\n\r\n // 5. wBefore\r\n if (this.formatting.wBefore !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('wBefore', {\r\n 'w:w': this.formatting.wBefore,\r\n 'w:type': this.formatting.wBeforeType || 'dxa',\r\n }));\r\n }\r\n\r\n // 6. wAfter\r\n if (this.formatting.wAfter !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('wAfter', {\r\n 'w:w': this.formatting.wAfter,\r\n 'w:type': this.formatting.wAfterType || 'dxa',\r\n }));\r\n }\r\n\r\n // 7. cantSplit\r\n if (this.formatting.cantSplit) {\r\n trPrChildren.push(XMLBuilder.wSelf('cantSplit'));\r\n }\r\n\r\n // 8. trHeight\r\n if (this.formatting.height !== undefined) {\r\n const attrs: Record<string, string | number> = {\r\n 'w:val': this.formatting.height,\r\n };\r\n if (this.formatting.heightRule) {\r\n attrs['w:hRule'] = this.formatting.heightRule;\r\n }\r\n trPrChildren.push(XMLBuilder.wSelf('trHeight', attrs));\r\n }\r\n\r\n // 9. tblHeader\r\n if (this.formatting.isHeader) {\r\n trPrChildren.push(XMLBuilder.wSelf('tblHeader'));\r\n }\r\n\r\n // 10. tblCellSpacing\r\n if (this.formatting.cellSpacing !== undefined) {\r\n trPrChildren.push(XMLBuilder.wSelf('tblCellSpacing', {\r\n 'w:w': this.formatting.cellSpacing,\r\n 'w:type': this.formatting.cellSpacingType || 'dxa',\r\n }));\r\n }\r\n\r\n // 11. jc (map 'start'/'end' to valid ST_JcTable values)\r\n if (this.formatting.justification) {\r\n const jcMap: Record<string, string> = { start: 'left', end: 'right' };\r\n const jcVal = jcMap[this.formatting.justification] || this.formatting.justification;\r\n trPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': jcVal }));\r\n }\r\n\r\n // 12. hidden\r\n if (this.formatting.hidden) {\r\n trPrChildren.push(XMLBuilder.wSelf('hidden'));\r\n }\r\n\r\n // Add table row property change (w:trPrChange) per ECMA-376 Part 1 §17.13.5.38\r\n // Must be last child of w:trPr\r\n if (this.trPrChange) {\r\n const changeAttrs: Record<string, string | number> = {\r\n 'w:id': this.trPrChange.id,\r\n 'w:author': this.trPrChange.author,\r\n 'w:date': this.trPrChange.date,\r\n };\r\n const prevTrPrChildren: XMLElement[] = [];\r\n const prev = this.trPrChange.previousProperties;\r\n if (prev) {\r\n // Ordered per CT_TrPr: cnfStyle → gridBefore → gridAfter → wBefore → wAfter →\r\n // cantSplit → trHeight → tblHeader → tblCellSpacing → jc → hidden\r\n if (prev.cnfStyle) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': prev.cnfStyle }));\r\n }\r\n if (prev.gridBefore !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('gridBefore', { 'w:val': prev.gridBefore }));\r\n }\r\n if (prev.gridAfter !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('gridAfter', { 'w:val': prev.gridAfter }));\r\n }\r\n if (prev.wBefore !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('wBefore', {\r\n 'w:w': prev.wBefore,\r\n 'w:type': prev.wBeforeType || 'dxa',\r\n }));\r\n }\r\n if (prev.wAfter !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('wAfter', {\r\n 'w:w': prev.wAfter,\r\n 'w:type': prev.wAfterType || 'dxa',\r\n }));\r\n }\r\n if (prev.cantSplit) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('cantSplit'));\r\n }\r\n if (prev.height !== undefined) {\r\n const heightAttrs: Record<string, string | number> = { 'w:val': prev.height };\r\n if (prev.heightRule) heightAttrs['w:hRule'] = prev.heightRule;\r\n prevTrPrChildren.push(XMLBuilder.wSelf('trHeight', heightAttrs));\r\n }\r\n if (prev.isHeader) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('tblHeader'));\r\n }\r\n if (prev.cellSpacing !== undefined) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('tblCellSpacing', {\r\n 'w:w': prev.cellSpacing,\r\n 'w:type': prev.cellSpacingType || 'dxa',\r\n }));\r\n }\r\n if (prev.justification) {\r\n const jcPrevMap: Record<string, string> = { start: 'left', end: 'right' };\r\n prevTrPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': jcPrevMap[prev.justification] || prev.justification }));\r\n }\r\n if (prev.hidden) {\r\n prevTrPrChildren.push(XMLBuilder.wSelf('hidden'));\r\n }\r\n }\r\n const prevTrPr = XMLBuilder.w('trPr', undefined, prevTrPrChildren);\r\n trPrChildren.push(XMLBuilder.w('trPrChange', changeAttrs, [prevTrPr]));\r\n }\r\n\r\n // Build row element\r\n const rowChildren: XMLElement[] = [];\r\n\r\n // Add row properties if there are any\r\n if (trPrChildren.length > 0) {\r\n rowChildren.push(XMLBuilder.w('trPr', undefined, trPrChildren));\r\n }\r\n\r\n // Add table property exceptions (tblPrEx) if present\r\n if (this.formatting.tablePropertyExceptions) {\r\n const tblPrExChildren = this.buildTablePropertyExceptionsXML(this.formatting.tablePropertyExceptions);\r\n if (tblPrExChildren.length > 0) {\r\n rowChildren.push(XMLBuilder.w('tblPrEx', undefined, tblPrExChildren));\r\n }\r\n }\r\n\r\n // Add all cells - each cell is independent\r\n // Note: gridSpan (columnSpan) means a single cell spans multiple columns in the grid,\r\n // it does NOT mean subsequent cells should be skipped. Each cell in the array\r\n // represents a distinct cell that should be output to the XML.\r\n for (const cell of this.cells) {\r\n rowChildren.push(cell.toXML());\r\n }\r\n\r\n return XMLBuilder.w('tr', undefined, rowChildren);\r\n }\r\n\r\n /**\r\n * Creates a new TableRow\r\n * @param cellCount - Number of cells to create\r\n * @param formatting - Row formatting\r\n * @returns New TableRow instance\r\n */\r\n static create(cellCount?: number, formatting?: RowFormatting): TableRow {\r\n return new TableRow(cellCount, formatting);\r\n }\r\n}\r\n"]}
|
|
@@ -7,6 +7,7 @@ export interface AbstractNumberingProperties {
|
|
|
7
7
|
multiLevelType?: number;
|
|
8
8
|
numStyleLink?: string;
|
|
9
9
|
styleLink?: string;
|
|
10
|
+
tmpl?: string;
|
|
10
11
|
}
|
|
11
12
|
export declare class AbstractNumbering {
|
|
12
13
|
private abstractNumId;
|
|
@@ -15,6 +16,7 @@ export declare class AbstractNumbering {
|
|
|
15
16
|
private multiLevelType;
|
|
16
17
|
private numStyleLink?;
|
|
17
18
|
private styleLink?;
|
|
19
|
+
private tmpl?;
|
|
18
20
|
constructor(idOrProps: number | AbstractNumberingProperties, name?: string);
|
|
19
21
|
private validate;
|
|
20
22
|
getAbstractNumId(): number;
|
|
@@ -27,6 +29,8 @@ export declare class AbstractNumbering {
|
|
|
27
29
|
setNumStyleLink(link: string | undefined): this;
|
|
28
30
|
getStyleLink(): string | undefined;
|
|
29
31
|
setStyleLink(link: string | undefined): this;
|
|
32
|
+
getTemplate(): string | undefined;
|
|
33
|
+
setTemplate(tmpl: string): this;
|
|
30
34
|
addLevel(level: NumberingLevel): this;
|
|
31
35
|
addLevels(levels: NumberingLevel[]): this;
|
|
32
36
|
getLevel(levelIndex: number): NumberingLevel | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractNumbering.d.ts","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,MAAM,WAAW,2BAA2B;IAE1C,aAAa,EAAE,MAAM,CAAC;IAGtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAG1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AbstractNumbering.d.ts","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,MAAM,WAAW,2BAA2B;IAE1C,aAAa,EAAE,MAAM,CAAC;IAGtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAG1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAS;gBAOV,SAAS,EAAE,MAAM,GAAG,2BAA2B,EAAE,IAAI,CAAC,EAAE,MAAM;IAiC1E,OAAO,CAAC,QAAQ;IAahB,gBAAgB,IAAI,MAAM;IAO1B,KAAK,IAAI,MAAM;IAOf,OAAO,IAAI,MAAM,GAAG,SAAS;IAQ7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,iBAAiB,IAAI,MAAM;IAc3B,iBAAiB,CACf,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,kBAAkB,GACtD,IAAI;IAcP,eAAe,IAAI,MAAM,GAAG,SAAS;IAQrC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ/C,YAAY,IAAI,MAAM,GAAG,SAAS;IAQlC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ5C,WAAW,IAAI,MAAM,GAAG,SAAS;IAQjC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS/B,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAerC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IASzC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAOxD,YAAY,IAAI,cAAc,EAAE;IAShC,SAAS,IAAI,cAAc,EAAE;IAO7B,aAAa,IAAI,MAAM;IAQvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAQrC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAOxC,KAAK,IAAI,UAAU;IAgFnB,MAAM,CAAC,gBAAgB,CACrB,aAAa,EAAE,MAAM,EACrB,MAAM,SAAI,EACV,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,iBAAiB;IA2BpB,MAAM,CAAC,kBAAkB,CACvB,aAAa,EAAE,MAAM,EACrB,MAAM,SAAI,EACV,OAAO,GAAE,CAAC,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC,EAA0E,GAC3J,iBAAiB;IAyCpB,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;IA0BrE,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;IAyClE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,2BAA2B,GAAG,iBAAiB;IASzE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;CA+D/C"}
|
|
@@ -11,6 +11,7 @@ class AbstractNumbering {
|
|
|
11
11
|
multiLevelType;
|
|
12
12
|
numStyleLink;
|
|
13
13
|
styleLink;
|
|
14
|
+
tmpl;
|
|
14
15
|
constructor(idOrProps, name) {
|
|
15
16
|
if (typeof idOrProps === "number") {
|
|
16
17
|
this.abstractNumId = idOrProps;
|
|
@@ -27,6 +28,7 @@ class AbstractNumbering {
|
|
|
27
28
|
properties.multiLevelType !== undefined ? properties.multiLevelType : 1;
|
|
28
29
|
this.numStyleLink = properties.numStyleLink;
|
|
29
30
|
this.styleLink = properties.styleLink;
|
|
31
|
+
this.tmpl = properties.tmpl;
|
|
30
32
|
if (properties.levels) {
|
|
31
33
|
properties.levels.forEach((level) => {
|
|
32
34
|
this.addLevel(level);
|
|
@@ -93,6 +95,13 @@ class AbstractNumbering {
|
|
|
93
95
|
this.styleLink = link;
|
|
94
96
|
return this;
|
|
95
97
|
}
|
|
98
|
+
getTemplate() {
|
|
99
|
+
return this.tmpl;
|
|
100
|
+
}
|
|
101
|
+
setTemplate(tmpl) {
|
|
102
|
+
this.tmpl = tmpl;
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
96
105
|
addLevel(level) {
|
|
97
106
|
const levelIndex = level.getLevel();
|
|
98
107
|
if (levelIndex < 0 || levelIndex > 8) {
|
|
@@ -138,6 +147,9 @@ class AbstractNumbering {
|
|
|
138
147
|
children.push(XMLBuilder_1.XMLBuilder.wSelf("multiLevelType", {
|
|
139
148
|
"w:val": multiLevelTypeValue,
|
|
140
149
|
}));
|
|
150
|
+
if (this.tmpl) {
|
|
151
|
+
children.push(XMLBuilder_1.XMLBuilder.wSelf("tmpl", { "w:val": this.tmpl }));
|
|
152
|
+
}
|
|
141
153
|
if (this.name) {
|
|
142
154
|
children.push(XMLBuilder_1.XMLBuilder.wSelf("name", { "w:val": this.name }));
|
|
143
155
|
}
|
|
@@ -260,12 +272,15 @@ class AbstractNumbering {
|
|
|
260
272
|
const numStyleLink = numStyleLinkMatch?.[1] || undefined;
|
|
261
273
|
const styleLinkMatch = /<w:styleLink[^>]*w:val="([^"]+)"/.exec(xml);
|
|
262
274
|
const styleLink = styleLinkMatch?.[1] || undefined;
|
|
275
|
+
const tmplMatch = /<w:tmpl[^>]*w:val="([^"]+)"/.exec(xml);
|
|
276
|
+
const tmpl = tmplMatch?.[1] || undefined;
|
|
263
277
|
const abstractNum = new AbstractNumbering({
|
|
264
278
|
abstractNumId,
|
|
265
279
|
name,
|
|
266
280
|
multiLevelType,
|
|
267
281
|
numStyleLink,
|
|
268
282
|
styleLink,
|
|
283
|
+
tmpl,
|
|
269
284
|
});
|
|
270
285
|
const lvlRegex = /<w:lvl[^>]*>[\s\S]*?<\/w:lvl>/g;
|
|
271
286
|
const lvlMatches = xml.match(lvlRegex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractNumbering.js","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":";;;AAQA,kDAA2D;AAC3D,qDAAkD;AAClD,4CAAgD;AA+BhD,MAAa,iBAAiB;IACpB,aAAa,CAAS;IACtB,IAAI,CAAU;IACd,MAAM,CAA8B;IACpC,cAAc,CAAS;IACvB,YAAY,CAAU;IACtB,SAAS,CAAU;IAO3B,YAAY,SAA+C,EAAE,IAAa;QAExE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAElC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YAEN,MAAM,UAAU,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;YAC9C,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc;gBACjB,UAAU,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;YAEtC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtB,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAKO,QAAQ;QACd,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAKD,KAAK;QACH,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAKD,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAMD,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,iBAAiB;QACf,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,YAAY,CAAC;QACtB,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,kBAAkB,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAMD,iBAAiB,CACf,IAAuD;QAEvD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACvC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAMD,eAAe,CAAC,IAAwB;QACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAMD,YAAY,CAAC,IAAwB;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,QAAQ,CAAC,KAAqB;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEpC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,SAAS,CAAC,MAAwB;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAKD,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CACtC,CAAC;IACJ,CAAC;IAKD,SAAS;QACP,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAKD,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAMD,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAMD,WAAW,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAKD,KAAK;QACH,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAKlC,IAAI,mBAA2B,CAAC;QAChC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC9B,mBAAmB,GAAG,YAAY,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YACrC,mBAAmB,GAAG,kBAAkB,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,mBAAmB,GAAG,aAAa,CAAC;QACtC,CAAC;QAED,QAAQ,CAAC,IAAI,CACX,uBAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE;YACjC,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CACH,CAAC;QAGF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,uBAAU,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC;QAGD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAGH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,uBAAU,CAAC,CAAC,CACjB,aAAa,EACb,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,EACpD,QAAQ,CACT,CAAC;IACJ,CAAC;IAyBD,MAAM,CAAC,gBAAgB,CACrB,aAAqB,EACrB,MAAM,GAAG,CAAC,EACV,OAAkB;QAElB,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI,EAAE,aAAa;YACnB,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAElC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;gBAClD,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBAEN,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAQD,MAAM,CAAC,kBAAkB,CACvB,aAAqB,EACrB,MAAM,GAAG,CAAC,EACV,UAAuF,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC;QAE5J,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI,EAAE,eAAe;YACrB,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAE9B,IAAI,KAAqB,CAAC;YAC1B,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,aAAa;oBAChB,KAAK,GAAG,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,GAAG,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC1D,MAAM;gBACR,KAAK,aAAa;oBAChB,KAAK,GAAG,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,GAAG,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC1D,MAAM;gBACR,KAAK,SAAS,CAAC;gBACf;oBACE,KAAK,GAAG,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACvD,MAAM;YACV,CAAC;YAED,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAMD,MAAM,CAAC,oBAAoB,CAAC,aAAqB;QAC/C,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI,EAAE,kBAAkB;YACxB,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QAGH,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGlE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGrE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAElE,OAAO,WAAW,CAAC;IACrB,CAAC;IAMD,MAAM,CAAC,iBAAiB,CAAC,aAAqB;QAC5C,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI,EAAE,cAAc;YACpB,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QAGH,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGrE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGlE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGrE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGlE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAGtE,WAAW,CAAC,QAAQ,CAAC,+BAAc,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAErE,OAAO,WAAW,CAAC;IACrB,CAAC;IAMD,MAAM,CAAC,MAAM,CAAC,UAAuC;QACnD,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAOD,MAAM,CAAC,OAAO,CAAC,GAAW;QAExB,MAAM,kBAAkB,GAAG,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpF,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAG1D,MAAM,SAAS,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAIvD,MAAM,mBAAmB,GAAG,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,aAAa;gBAAE,cAAc,GAAG,CAAC,CAAC;iBAC3C,IAAI,KAAK,KAAK,YAAY;gBAAE,cAAc,GAAG,CAAC,CAAC;iBAC/C,IAAI,KAAK,KAAK,kBAAkB;gBAAE,cAAc,GAAG,CAAC,CAAC;QAC5D,CAAC;QAGD,MAAM,iBAAiB,GAAG,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAGzD,MAAM,cAAc,GAAG,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAGnD,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACxC,aAAa;YACb,IAAI;YACJ,cAAc;YACd,YAAY;YACZ,SAAS;SACV,CAAC,CAAC;QAGH,MAAM,QAAQ,GAAG,gCAAgC,CAAC;QAClD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,+BAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC7C,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBAExB,sBAAa,CAAC,IAAI,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AA1fD,8CA0fC","sourcesContent":["/**\r\n * AbstractNumbering - Defines a multi-level numbering scheme\r\n *\r\n * An abstract numbering definition is a template that defines up to 9 levels of\r\n * list formatting. It's referenced by numbering instances which link it to actual\r\n * paragraphs in the document.\r\n */\r\n\r\nimport { XMLBuilder, XMLElement } from \"../xml/XMLBuilder\";\r\nimport { NumberingLevel } from \"./NumberingLevel\";\r\nimport { defaultLogger } from \"../utils/logger\";\r\n\r\n/**\r\n * Properties for creating an abstract numbering definition\r\n */\r\nexport interface AbstractNumberingProperties {\r\n /** Unique identifier for this abstract numbering */\r\n abstractNumId: number;\r\n\r\n /** Optional name for the numbering scheme */\r\n name?: string;\r\n\r\n /** The numbering levels (up to 9 levels, 0-8) */\r\n levels?: NumberingLevel[];\r\n\r\n /** Optional multiLevel type (0 = single level, 1 = multilevel) */\r\n multiLevelType?: number;\r\n\r\n /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */\r\n numStyleLink?: string;\r\n\r\n /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */\r\n styleLink?: string;\r\n}\r\n\r\n/**\r\n * Represents an abstract numbering definition\r\n *\r\n * Abstract numbering defines the template for a multi-level list. Each instance\r\n * of a list in the document references an abstract numbering definition.\r\n */\r\nexport class AbstractNumbering {\r\n private abstractNumId: number;\r\n private name?: string;\r\n private levels: Map<number, NumberingLevel>;\r\n private multiLevelType: number;\r\n private numStyleLink?: string;\r\n private styleLink?: string;\r\n\r\n /**\r\n * Creates a new abstract numbering definition\r\n * @param idOrProps The abstract numbering ID (number) or properties object\r\n * @param name Optional name (if first param is a number)\r\n */\r\n constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {\r\n // Support both simple (numId) and object constructor patterns\r\n if (typeof idOrProps === \"number\") {\r\n // Simple constructor: new AbstractNumbering(id)\r\n this.abstractNumId = idOrProps;\r\n this.name = name;\r\n this.levels = new Map();\r\n this.multiLevelType = 1; // default multilevel\r\n } else {\r\n // Object constructor: new AbstractNumbering({ abstractNumId, ... })\r\n const properties = idOrProps;\r\n this.abstractNumId = properties.abstractNumId;\r\n this.name = properties.name;\r\n this.levels = new Map();\r\n this.multiLevelType =\r\n properties.multiLevelType !== undefined ? properties.multiLevelType : 1;\r\n this.numStyleLink = properties.numStyleLink;\r\n this.styleLink = properties.styleLink;\r\n\r\n if (properties.levels) {\r\n properties.levels.forEach((level) => {\r\n this.addLevel(level);\r\n });\r\n }\r\n }\r\n\r\n this.validate();\r\n }\r\n\r\n /**\r\n * Validates the abstract numbering\r\n */\r\n private validate(): void {\r\n if (this.abstractNumId < 0) {\r\n throw new Error(\"Abstract numbering ID must be non-negative\");\r\n }\r\n\r\n if (this.levels.size > 9) {\r\n throw new Error(\"Cannot have more than 9 levels (0-8)\");\r\n }\r\n }\r\n\r\n /**\r\n * Gets the abstract numbering ID\r\n */\r\n getAbstractNumId(): number {\r\n return this.abstractNumId;\r\n }\r\n\r\n /**\r\n * Alias for getAbstractNumId for backward compatibility\r\n */\r\n getId(): number {\r\n return this.abstractNumId;\r\n }\r\n\r\n /**\r\n * Gets the name\r\n */\r\n getName(): string | undefined {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Sets the name\r\n * @param name The numbering scheme name\r\n */\r\n setName(name: string): this {\r\n this.name = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the multi-level type\r\n */\r\n getMultiLevelType(): string {\r\n if (this.multiLevelType === 1) {\r\n return \"multilevel\";\r\n } else if (this.multiLevelType === 2) {\r\n return \"hybridMultilevel\";\r\n } else {\r\n return \"singleLevel\";\r\n }\r\n }\r\n\r\n /**\r\n * Sets the multi-level type\r\n * @param type The multi-level type ('multilevel' or 'singleLevel')\r\n */\r\n setMultiLevelType(\r\n type: \"multilevel\" | \"singleLevel\" | \"hybridMultilevel\"\r\n ): this {\r\n if (type === \"multilevel\") {\r\n this.multiLevelType = 1;\r\n } else if (type === \"hybridMultilevel\") {\r\n this.multiLevelType = 2;\r\n } else {\r\n this.multiLevelType = 0;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the numStyleLink (reference to a numbering style definition)\r\n */\r\n getNumStyleLink(): string | undefined {\r\n return this.numStyleLink;\r\n }\r\n\r\n /**\r\n * Sets the numStyleLink\r\n * @param link The numbering style name\r\n */\r\n setNumStyleLink(link: string | undefined): this {\r\n this.numStyleLink = link;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the styleLink (reference to a style that uses this abstract numbering)\r\n */\r\n getStyleLink(): string | undefined {\r\n return this.styleLink;\r\n }\r\n\r\n /**\r\n * Sets the styleLink\r\n * @param link The style name\r\n */\r\n setStyleLink(link: string | undefined): this {\r\n this.styleLink = link;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a numbering level\r\n * @param level The numbering level to add\r\n */\r\n addLevel(level: NumberingLevel): this {\r\n const levelIndex = level.getLevel();\r\n\r\n if (levelIndex < 0 || levelIndex > 8) {\r\n throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);\r\n }\r\n\r\n this.levels.set(levelIndex, level);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds multiple numbering levels at once\r\n * @param levels The numbering levels to add\r\n */\r\n addLevels(levels: NumberingLevel[]): this {\r\n levels.forEach((level) => this.addLevel(level));\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets a numbering level by index\r\n * @param levelIndex The level index (0-8)\r\n */\r\n getLevel(levelIndex: number): NumberingLevel | undefined {\r\n return this.levels.get(levelIndex);\r\n }\r\n\r\n /**\r\n * Gets all levels\r\n */\r\n getAllLevels(): NumberingLevel[] {\r\n return Array.from(this.levels.values()).sort(\r\n (a, b) => a.getLevel() - b.getLevel()\r\n );\r\n }\r\n\r\n /**\r\n * Alias for getAllLevels for backward compatibility\r\n */\r\n getLevels(): NumberingLevel[] {\r\n return this.getAllLevels();\r\n }\r\n\r\n /**\r\n * Gets the number of levels defined\r\n */\r\n getLevelCount(): number {\r\n return this.levels.size;\r\n }\r\n\r\n /**\r\n * Checks if a level exists\r\n * @param levelIndex The level index (0-8)\r\n */\r\n hasLevel(levelIndex: number): boolean {\r\n return this.levels.has(levelIndex);\r\n }\r\n\r\n /**\r\n * Removes a level\r\n * @param levelIndex The level index (0-8)\r\n */\r\n removeLevel(levelIndex: number): boolean {\r\n return this.levels.delete(levelIndex);\r\n }\r\n\r\n /**\r\n * Generates the WordprocessingML XML for this abstract numbering\r\n */\r\n toXML(): XMLElement {\r\n const children: XMLElement[] = [];\r\n\r\n // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*\r\n\r\n // Add multiLevelType\r\n let multiLevelTypeValue: string;\r\n if (this.multiLevelType === 1) {\r\n multiLevelTypeValue = \"multilevel\";\r\n } else if (this.multiLevelType === 2) {\r\n multiLevelTypeValue = \"hybridMultilevel\";\r\n } else {\r\n multiLevelTypeValue = \"singleLevel\";\r\n }\r\n\r\n children.push(\r\n XMLBuilder.wSelf(\"multiLevelType\", {\r\n \"w:val\": multiLevelTypeValue,\r\n })\r\n );\r\n\r\n // Add name if present\r\n if (this.name) {\r\n children.push(XMLBuilder.wSelf(\"name\", { \"w:val\": this.name }));\r\n }\r\n\r\n // Add styleLink / numStyleLink if present\r\n if (this.styleLink) {\r\n children.push(XMLBuilder.wSelf(\"styleLink\", { \"w:val\": this.styleLink }));\r\n }\r\n if (this.numStyleLink) {\r\n children.push(XMLBuilder.wSelf(\"numStyleLink\", { \"w:val\": this.numStyleLink }));\r\n }\r\n\r\n // Add all levels in order\r\n const sortedLevels = this.getAllLevels();\r\n sortedLevels.forEach((level) => {\r\n children.push(level.toXML());\r\n });\r\n\r\n // If no levels defined, add a default level 0\r\n if (sortedLevels.length === 0) {\r\n children.push(NumberingLevel.createDecimalLevel(0).toXML());\r\n }\r\n\r\n return XMLBuilder.w(\r\n \"abstractNum\",\r\n { \"w:abstractNumId\": this.abstractNumId.toString() },\r\n children\r\n );\r\n }\r\n\r\n /**\r\n * Creates a bullet list abstract numbering with specified levels\r\n *\r\n * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,\r\n * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.\r\n *\r\n * @param abstractNumId The abstract numbering ID\r\n * @param levels Number of levels (default: 9)\r\n * @param bullets Array of bullet characters (default: ['•', '○', '▪'])\r\n *\r\n * @example\r\n * // Standard bullet list\r\n * const bulletList = AbstractNumbering.createBulletList(1);\r\n *\r\n * @example\r\n * // Custom bullets using helper method\r\n * const bullets = [];\r\n * for (let i = 0; i < 9; i++) {\r\n * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');\r\n * bullets.push(symbol);\r\n * }\r\n * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);\r\n */\r\n static createBulletList(\r\n abstractNumId: number,\r\n levels = 9,\r\n bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding\r\n ): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Bullet List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n for (let i = 0; i < levels && i < 9; i++) {\r\n if (bullets && bullets.length > 0) {\r\n // Custom bullets provided - use them with default font\r\n const bullet = bullets[i % bullets.length] || \"•\";\r\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));\r\n } else {\r\n // No custom bullets - use Word-native encoding (correct font per level)\r\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i));\r\n }\r\n }\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates a numbered list abstract numbering with specified levels\r\n * @param abstractNumId The abstract numbering ID\r\n * @param levels Number of levels (default: 9)\r\n * @param formats Array of formats for each level\r\n */\r\n static createNumberedList(\r\n abstractNumId: number,\r\n levels = 9,\r\n formats: (\"decimal\" | \"lowerLetter\" | \"lowerRoman\" | \"upperLetter\" | \"upperRoman\")[] = [\"decimal\", \"lowerLetter\", \"lowerRoman\", \"upperLetter\", \"upperRoman\"]\r\n ): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Numbered List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n for (let i = 0; i < levels && i < 9; i++) {\r\n const format = formats[i % formats.length] || \"decimal\";\r\n const template = `%${i + 1}.`;\r\n\r\n let level: NumberingLevel;\r\n switch (format) {\r\n case \"lowerLetter\":\r\n level = NumberingLevel.createLowerLetterLevel(i, template);\r\n break;\r\n case \"lowerRoman\":\r\n level = NumberingLevel.createLowerRomanLevel(i, template);\r\n break;\r\n case \"upperLetter\":\r\n level = NumberingLevel.createUpperLetterLevel(i, template);\r\n break;\r\n case \"upperRoman\":\r\n level = NumberingLevel.createUpperRomanLevel(i, template);\r\n break;\r\n case \"decimal\":\r\n default:\r\n level = NumberingLevel.createDecimalLevel(i, template);\r\n break;\r\n }\r\n\r\n abstractNum.addLevel(level);\r\n }\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates a multi-level list with mixed formats\r\n * @param abstractNumId The abstract numbering ID\r\n */\r\n static createMultiLevelList(abstractNumId: number): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Multi-Level List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n // Level 0: 1, 2, 3, ...\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, \"%1.\"));\r\n\r\n // Level 1: a, b, c, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, \"%2.\"));\r\n\r\n // Level 2: i, ii, iii, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, \"%3.\"));\r\n\r\n // Level 3: 1, 2, 3, ... (with more indent)\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, \"%4.\"));\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates an outline list abstract numbering\r\n * @param abstractNumId The abstract numbering ID\r\n */\r\n static createOutlineList(abstractNumId: number): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Outline List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n // Level 0: I, II, III, ...\r\n abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, \"%1.\"));\r\n\r\n // Level 1: A, B, C, ...\r\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, \"%2.\"));\r\n\r\n // Level 2: 1, 2, 3, ...\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, \"%3.\"));\r\n\r\n // Level 3: a, b, c, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, \"%4.\"));\r\n\r\n // Level 4: i, ii, iii, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, \"%5.\"));\r\n\r\n // Level 5: A, B, C, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, \"%6.\"));\r\n\r\n // Level 6: 1, 2, 3, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, \"%7.\"));\r\n\r\n // Level 7: a, b, c, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, \"%8.\"));\r\n\r\n // Level 8: i, ii, iii, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, \"%9.\"));\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Factory method for creating an abstract numbering definition\r\n * @param properties The abstract numbering properties\r\n */\r\n static create(properties: AbstractNumberingProperties): AbstractNumbering {\r\n return new AbstractNumbering(properties);\r\n }\r\n\r\n /**\r\n * Creates an AbstractNumbering from XML element\r\n * @param xml The XML string of the <w:abstractNum> element\r\n * @returns AbstractNumbering instance\r\n */\r\n static fromXML(xml: string): AbstractNumbering {\r\n // Extract abstractNumId (required)\r\n const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId=\"([^\"]+)\"/.exec(xml);\r\n if (!abstractNumIdMatch?.[1]) {\r\n throw new Error(\"Missing required w:abstractNumId attribute\");\r\n }\r\n const abstractNumId = parseInt(abstractNumIdMatch[1], 10);\r\n\r\n // Extract name (optional)\r\n const nameMatch = /<w:name[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const name = nameMatch?.[1] ? nameMatch[1] : undefined;\r\n\r\n // Extract multiLevelType (optional)\r\n // Values: \"singleLevel\" = 0, \"multilevel\" = 1, \"hybridMultilevel\" = 2\r\n const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n let multiLevelType = 1; // default to multilevel\r\n if (multiLevelTypeMatch?.[1]) {\r\n const value = multiLevelTypeMatch[1];\r\n if (value === \"singleLevel\") multiLevelType = 0;\r\n else if (value === \"multilevel\") multiLevelType = 1;\r\n else if (value === \"hybridMultilevel\") multiLevelType = 2;\r\n }\r\n\r\n // Extract numStyleLink (optional, ECMA-376 §17.9.21)\r\n const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const numStyleLink = numStyleLinkMatch?.[1] || undefined;\r\n\r\n // Extract styleLink (optional, ECMA-376 §17.9.27)\r\n const styleLinkMatch = /<w:styleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const styleLink = styleLinkMatch?.[1] || undefined;\r\n\r\n // Create abstract numbering\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name,\r\n multiLevelType,\r\n numStyleLink,\r\n styleLink,\r\n });\r\n\r\n // Extract and parse all levels\r\n const lvlRegex = /<w:lvl[^>]*>[\\s\\S]*?<\\/w:lvl>/g;\r\n const lvlMatches = xml.match(lvlRegex);\r\n\r\n if (lvlMatches) {\r\n for (const lvlXml of lvlMatches) {\r\n try {\r\n const level = NumberingLevel.fromXML(lvlXml);\r\n abstractNum.addLevel(level);\r\n } catch (error: unknown) {\r\n // Skip malformed levels but continue parsing\r\n defaultLogger.warn(`Failed to parse level: ${error}`);\r\n }\r\n }\r\n }\r\n\r\n return abstractNum;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"AbstractNumbering.js","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * AbstractNumbering - Defines a multi-level numbering scheme\r\n *\r\n * An abstract numbering definition is a template that defines up to 9 levels of\r\n * list formatting. It's referenced by numbering instances which link it to actual\r\n * paragraphs in the document.\r\n */\r\n\r\nimport { XMLBuilder, XMLElement } from \"../xml/XMLBuilder\";\r\nimport { NumberingLevel } from \"./NumberingLevel\";\r\nimport { defaultLogger } from \"../utils/logger\";\r\n\r\n/**\r\n * Properties for creating an abstract numbering definition\r\n */\r\nexport interface AbstractNumberingProperties {\r\n /** Unique identifier for this abstract numbering */\r\n abstractNumId: number;\r\n\r\n /** Optional name for the numbering scheme */\r\n name?: string;\r\n\r\n /** The numbering levels (up to 9 levels, 0-8) */\r\n levels?: NumberingLevel[];\r\n\r\n /** Optional multiLevel type (0 = single level, 1 = multilevel) */\r\n multiLevelType?: number;\r\n\r\n /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */\r\n numStyleLink?: string;\r\n\r\n /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */\r\n styleLink?: string;\r\n\r\n /** Template code (ECMA-376 §17.9.30) - 8-char hex string identifying the template */\r\n tmpl?: string;\r\n}\r\n\r\n/**\r\n * Represents an abstract numbering definition\r\n *\r\n * Abstract numbering defines the template for a multi-level list. Each instance\r\n * of a list in the document references an abstract numbering definition.\r\n */\r\nexport class AbstractNumbering {\r\n private abstractNumId: number;\r\n private name?: string;\r\n private levels: Map<number, NumberingLevel>;\r\n private multiLevelType: number;\r\n private numStyleLink?: string;\r\n private styleLink?: string;\r\n private tmpl?: string;\r\n\r\n /**\r\n * Creates a new abstract numbering definition\r\n * @param idOrProps The abstract numbering ID (number) or properties object\r\n * @param name Optional name (if first param is a number)\r\n */\r\n constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {\r\n // Support both simple (numId) and object constructor patterns\r\n if (typeof idOrProps === \"number\") {\r\n // Simple constructor: new AbstractNumbering(id)\r\n this.abstractNumId = idOrProps;\r\n this.name = name;\r\n this.levels = new Map();\r\n this.multiLevelType = 1; // default multilevel\r\n } else {\r\n // Object constructor: new AbstractNumbering({ abstractNumId, ... })\r\n const properties = idOrProps;\r\n this.abstractNumId = properties.abstractNumId;\r\n this.name = properties.name;\r\n this.levels = new Map();\r\n this.multiLevelType =\r\n properties.multiLevelType !== undefined ? properties.multiLevelType : 1;\r\n this.numStyleLink = properties.numStyleLink;\r\n this.styleLink = properties.styleLink;\r\n this.tmpl = properties.tmpl;\r\n\r\n if (properties.levels) {\r\n properties.levels.forEach((level) => {\r\n this.addLevel(level);\r\n });\r\n }\r\n }\r\n\r\n this.validate();\r\n }\r\n\r\n /**\r\n * Validates the abstract numbering\r\n */\r\n private validate(): void {\r\n if (this.abstractNumId < 0) {\r\n throw new Error(\"Abstract numbering ID must be non-negative\");\r\n }\r\n\r\n if (this.levels.size > 9) {\r\n throw new Error(\"Cannot have more than 9 levels (0-8)\");\r\n }\r\n }\r\n\r\n /**\r\n * Gets the abstract numbering ID\r\n */\r\n getAbstractNumId(): number {\r\n return this.abstractNumId;\r\n }\r\n\r\n /**\r\n * Alias for getAbstractNumId for backward compatibility\r\n */\r\n getId(): number {\r\n return this.abstractNumId;\r\n }\r\n\r\n /**\r\n * Gets the name\r\n */\r\n getName(): string | undefined {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Sets the name\r\n * @param name The numbering scheme name\r\n */\r\n setName(name: string): this {\r\n this.name = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the multi-level type\r\n */\r\n getMultiLevelType(): string {\r\n if (this.multiLevelType === 1) {\r\n return \"multilevel\";\r\n } else if (this.multiLevelType === 2) {\r\n return \"hybridMultilevel\";\r\n } else {\r\n return \"singleLevel\";\r\n }\r\n }\r\n\r\n /**\r\n * Sets the multi-level type\r\n * @param type The multi-level type ('multilevel' or 'singleLevel')\r\n */\r\n setMultiLevelType(\r\n type: \"multilevel\" | \"singleLevel\" | \"hybridMultilevel\"\r\n ): this {\r\n if (type === \"multilevel\") {\r\n this.multiLevelType = 1;\r\n } else if (type === \"hybridMultilevel\") {\r\n this.multiLevelType = 2;\r\n } else {\r\n this.multiLevelType = 0;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the numStyleLink (reference to a numbering style definition)\r\n */\r\n getNumStyleLink(): string | undefined {\r\n return this.numStyleLink;\r\n }\r\n\r\n /**\r\n * Sets the numStyleLink\r\n * @param link The numbering style name\r\n */\r\n setNumStyleLink(link: string | undefined): this {\r\n this.numStyleLink = link;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the styleLink (reference to a style that uses this abstract numbering)\r\n */\r\n getStyleLink(): string | undefined {\r\n return this.styleLink;\r\n }\r\n\r\n /**\r\n * Sets the styleLink\r\n * @param link The style name\r\n */\r\n setStyleLink(link: string | undefined): this {\r\n this.styleLink = link;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the template code (w:tmpl per ECMA-376 §17.9.30)\r\n */\r\n getTemplate(): string | undefined {\r\n return this.tmpl;\r\n }\r\n\r\n /**\r\n * Sets the template code\r\n * @param tmpl 8-char hex string identifying the template\r\n */\r\n setTemplate(tmpl: string): this {\r\n this.tmpl = tmpl;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a numbering level\r\n * @param level The numbering level to add\r\n */\r\n addLevel(level: NumberingLevel): this {\r\n const levelIndex = level.getLevel();\r\n\r\n if (levelIndex < 0 || levelIndex > 8) {\r\n throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);\r\n }\r\n\r\n this.levels.set(levelIndex, level);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds multiple numbering levels at once\r\n * @param levels The numbering levels to add\r\n */\r\n addLevels(levels: NumberingLevel[]): this {\r\n levels.forEach((level) => this.addLevel(level));\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets a numbering level by index\r\n * @param levelIndex The level index (0-8)\r\n */\r\n getLevel(levelIndex: number): NumberingLevel | undefined {\r\n return this.levels.get(levelIndex);\r\n }\r\n\r\n /**\r\n * Gets all levels\r\n */\r\n getAllLevels(): NumberingLevel[] {\r\n return Array.from(this.levels.values()).sort(\r\n (a, b) => a.getLevel() - b.getLevel()\r\n );\r\n }\r\n\r\n /**\r\n * Alias for getAllLevels for backward compatibility\r\n */\r\n getLevels(): NumberingLevel[] {\r\n return this.getAllLevels();\r\n }\r\n\r\n /**\r\n * Gets the number of levels defined\r\n */\r\n getLevelCount(): number {\r\n return this.levels.size;\r\n }\r\n\r\n /**\r\n * Checks if a level exists\r\n * @param levelIndex The level index (0-8)\r\n */\r\n hasLevel(levelIndex: number): boolean {\r\n return this.levels.has(levelIndex);\r\n }\r\n\r\n /**\r\n * Removes a level\r\n * @param levelIndex The level index (0-8)\r\n */\r\n removeLevel(levelIndex: number): boolean {\r\n return this.levels.delete(levelIndex);\r\n }\r\n\r\n /**\r\n * Generates the WordprocessingML XML for this abstract numbering\r\n */\r\n toXML(): XMLElement {\r\n const children: XMLElement[] = [];\r\n\r\n // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*\r\n\r\n // Add multiLevelType\r\n let multiLevelTypeValue: string;\r\n if (this.multiLevelType === 1) {\r\n multiLevelTypeValue = \"multilevel\";\r\n } else if (this.multiLevelType === 2) {\r\n multiLevelTypeValue = \"hybridMultilevel\";\r\n } else {\r\n multiLevelTypeValue = \"singleLevel\";\r\n }\r\n\r\n children.push(\r\n XMLBuilder.wSelf(\"multiLevelType\", {\r\n \"w:val\": multiLevelTypeValue,\r\n })\r\n );\r\n\r\n // Add template code (position 3 per CT_AbstractNum)\r\n if (this.tmpl) {\r\n children.push(XMLBuilder.wSelf(\"tmpl\", { \"w:val\": this.tmpl }));\r\n }\r\n\r\n // Add name if present\r\n if (this.name) {\r\n children.push(XMLBuilder.wSelf(\"name\", { \"w:val\": this.name }));\r\n }\r\n\r\n // Add styleLink / numStyleLink if present\r\n if (this.styleLink) {\r\n children.push(XMLBuilder.wSelf(\"styleLink\", { \"w:val\": this.styleLink }));\r\n }\r\n if (this.numStyleLink) {\r\n children.push(XMLBuilder.wSelf(\"numStyleLink\", { \"w:val\": this.numStyleLink }));\r\n }\r\n\r\n // Add all levels in order\r\n const sortedLevels = this.getAllLevels();\r\n sortedLevels.forEach((level) => {\r\n children.push(level.toXML());\r\n });\r\n\r\n // If no levels defined, add a default level 0\r\n if (sortedLevels.length === 0) {\r\n children.push(NumberingLevel.createDecimalLevel(0).toXML());\r\n }\r\n\r\n return XMLBuilder.w(\r\n \"abstractNum\",\r\n { \"w:abstractNumId\": this.abstractNumId.toString() },\r\n children\r\n );\r\n }\r\n\r\n /**\r\n * Creates a bullet list abstract numbering with specified levels\r\n *\r\n * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,\r\n * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.\r\n *\r\n * @param abstractNumId The abstract numbering ID\r\n * @param levels Number of levels (default: 9)\r\n * @param bullets Array of bullet characters (default: ['•', '○', '▪'])\r\n *\r\n * @example\r\n * // Standard bullet list\r\n * const bulletList = AbstractNumbering.createBulletList(1);\r\n *\r\n * @example\r\n * // Custom bullets using helper method\r\n * const bullets = [];\r\n * for (let i = 0; i < 9; i++) {\r\n * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');\r\n * bullets.push(symbol);\r\n * }\r\n * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);\r\n */\r\n static createBulletList(\r\n abstractNumId: number,\r\n levels = 9,\r\n bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding\r\n ): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Bullet List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n for (let i = 0; i < levels && i < 9; i++) {\r\n if (bullets && bullets.length > 0) {\r\n // Custom bullets provided - use them with default font\r\n const bullet = bullets[i % bullets.length] || \"•\";\r\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));\r\n } else {\r\n // No custom bullets - use Word-native encoding (correct font per level)\r\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i));\r\n }\r\n }\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates a numbered list abstract numbering with specified levels\r\n * @param abstractNumId The abstract numbering ID\r\n * @param levels Number of levels (default: 9)\r\n * @param formats Array of formats for each level\r\n */\r\n static createNumberedList(\r\n abstractNumId: number,\r\n levels = 9,\r\n formats: (\"decimal\" | \"lowerLetter\" | \"lowerRoman\" | \"upperLetter\" | \"upperRoman\")[] = [\"decimal\", \"lowerLetter\", \"lowerRoman\", \"upperLetter\", \"upperRoman\"]\r\n ): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Numbered List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n for (let i = 0; i < levels && i < 9; i++) {\r\n const format = formats[i % formats.length] || \"decimal\";\r\n const template = `%${i + 1}.`;\r\n\r\n let level: NumberingLevel;\r\n switch (format) {\r\n case \"lowerLetter\":\r\n level = NumberingLevel.createLowerLetterLevel(i, template);\r\n break;\r\n case \"lowerRoman\":\r\n level = NumberingLevel.createLowerRomanLevel(i, template);\r\n break;\r\n case \"upperLetter\":\r\n level = NumberingLevel.createUpperLetterLevel(i, template);\r\n break;\r\n case \"upperRoman\":\r\n level = NumberingLevel.createUpperRomanLevel(i, template);\r\n break;\r\n case \"decimal\":\r\n default:\r\n level = NumberingLevel.createDecimalLevel(i, template);\r\n break;\r\n }\r\n\r\n abstractNum.addLevel(level);\r\n }\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates a multi-level list with mixed formats\r\n * @param abstractNumId The abstract numbering ID\r\n */\r\n static createMultiLevelList(abstractNumId: number): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Multi-Level List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n // Level 0: 1, 2, 3, ...\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, \"%1.\"));\r\n\r\n // Level 1: a, b, c, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, \"%2.\"));\r\n\r\n // Level 2: i, ii, iii, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, \"%3.\"));\r\n\r\n // Level 3: 1, 2, 3, ... (with more indent)\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, \"%4.\"));\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates an outline list abstract numbering\r\n * @param abstractNumId The abstract numbering ID\r\n */\r\n static createOutlineList(abstractNumId: number): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Outline List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n // Level 0: I, II, III, ...\r\n abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, \"%1.\"));\r\n\r\n // Level 1: A, B, C, ...\r\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, \"%2.\"));\r\n\r\n // Level 2: 1, 2, 3, ...\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, \"%3.\"));\r\n\r\n // Level 3: a, b, c, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, \"%4.\"));\r\n\r\n // Level 4: i, ii, iii, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, \"%5.\"));\r\n\r\n // Level 5: A, B, C, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, \"%6.\"));\r\n\r\n // Level 6: 1, 2, 3, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, \"%7.\"));\r\n\r\n // Level 7: a, b, c, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, \"%8.\"));\r\n\r\n // Level 8: i, ii, iii, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, \"%9.\"));\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Factory method for creating an abstract numbering definition\r\n * @param properties The abstract numbering properties\r\n */\r\n static create(properties: AbstractNumberingProperties): AbstractNumbering {\r\n return new AbstractNumbering(properties);\r\n }\r\n\r\n /**\r\n * Creates an AbstractNumbering from XML element\r\n * @param xml The XML string of the <w:abstractNum> element\r\n * @returns AbstractNumbering instance\r\n */\r\n static fromXML(xml: string): AbstractNumbering {\r\n // Extract abstractNumId (required)\r\n const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId=\"([^\"]+)\"/.exec(xml);\r\n if (!abstractNumIdMatch?.[1]) {\r\n throw new Error(\"Missing required w:abstractNumId attribute\");\r\n }\r\n const abstractNumId = parseInt(abstractNumIdMatch[1], 10);\r\n\r\n // Extract name (optional)\r\n const nameMatch = /<w:name[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const name = nameMatch?.[1] ? nameMatch[1] : undefined;\r\n\r\n // Extract multiLevelType (optional)\r\n // Values: \"singleLevel\" = 0, \"multilevel\" = 1, \"hybridMultilevel\" = 2\r\n const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n let multiLevelType = 1; // default to multilevel\r\n if (multiLevelTypeMatch?.[1]) {\r\n const value = multiLevelTypeMatch[1];\r\n if (value === \"singleLevel\") multiLevelType = 0;\r\n else if (value === \"multilevel\") multiLevelType = 1;\r\n else if (value === \"hybridMultilevel\") multiLevelType = 2;\r\n }\r\n\r\n // Extract numStyleLink (optional, ECMA-376 §17.9.21)\r\n const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const numStyleLink = numStyleLinkMatch?.[1] || undefined;\r\n\r\n // Extract styleLink (optional, ECMA-376 §17.9.27)\r\n const styleLinkMatch = /<w:styleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const styleLink = styleLinkMatch?.[1] || undefined;\r\n\r\n // Extract template code (optional, ECMA-376 §17.9.30)\r\n const tmplMatch = /<w:tmpl[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const tmpl = tmplMatch?.[1] || undefined;\r\n\r\n // Create abstract numbering\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name,\r\n multiLevelType,\r\n numStyleLink,\r\n styleLink,\r\n tmpl,\r\n });\r\n\r\n // Extract and parse all levels\r\n const lvlRegex = /<w:lvl[^>]*>[\\s\\S]*?<\\/w:lvl>/g;\r\n const lvlMatches = xml.match(lvlRegex);\r\n\r\n if (lvlMatches) {\r\n for (const lvlXml of lvlMatches) {\r\n try {\r\n const level = NumberingLevel.fromXML(lvlXml);\r\n abstractNum.addLevel(level);\r\n } catch (error: unknown) {\r\n // Skip malformed levels but continue parsing\r\n defaultLogger.warn(`Failed to parse level: ${error}`);\r\n }\r\n }\r\n }\r\n\r\n return abstractNum;\r\n }\r\n}\r\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { XMLElement } from '../xml/XMLBuilder';
|
|
2
|
+
import { NumberingLevel } from './NumberingLevel';
|
|
2
3
|
export interface NumberingInstanceProperties {
|
|
3
4
|
numId: number;
|
|
4
5
|
abstractNumId: number;
|
|
@@ -7,6 +8,7 @@ export declare class NumberingInstance {
|
|
|
7
8
|
private numId;
|
|
8
9
|
private abstractNumId;
|
|
9
10
|
private levelOverrides;
|
|
11
|
+
private fullLevelOverrides;
|
|
10
12
|
constructor(numIdOrProps: number | NumberingInstanceProperties, abstractNumId?: number);
|
|
11
13
|
private validate;
|
|
12
14
|
getNumId(): number;
|
|
@@ -17,6 +19,10 @@ export declare class NumberingInstance {
|
|
|
17
19
|
setLevelOverride(level: number, startValue: number): this;
|
|
18
20
|
clearLevelOverride(level: number): this;
|
|
19
21
|
getLevelOverride(level: number): number | undefined;
|
|
22
|
+
setFullLevelOverride(level: number, levelDef: NumberingLevel): this;
|
|
23
|
+
getFullLevelOverride(level: number): NumberingLevel | undefined;
|
|
24
|
+
getFullLevelOverrides(): Map<number, NumberingLevel>;
|
|
25
|
+
clearFullLevelOverride(level: number): this;
|
|
20
26
|
toXML(): XMLElement;
|
|
21
27
|
static create(propertiesOrNumId: NumberingInstanceProperties | number, abstractNumId?: number): NumberingInstance;
|
|
22
28
|
static fromXML(xml: string): NumberingInstance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberingInstance.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingInstance.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"NumberingInstance.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingInstance.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKlD,MAAM,WAAW,2BAA2B;IAE1C,KAAK,EAAE,MAAM,CAAC;IAGd,aAAa,EAAE,MAAM,CAAC;CACvB;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,kBAAkB,CAAqC;gBAOnD,YAAY,EAAE,MAAM,GAAG,2BAA2B,EAAE,aAAa,CAAC,EAAE,MAAM;IAiBtF,OAAO,CAAC,QAAQ;IAahB,QAAQ,IAAI,MAAM;IAOlB,gBAAgB,IAAI,MAAM;IAQ1B,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAW7C,KAAK,IAAI,MAAM;IAQf,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAYxC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBzD,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWvC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYnD,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAWnE,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAO/D,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAOpD,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3C,KAAK,IAAI,UAAU;IA8CnB,MAAM,CAAC,MAAM,CACX,iBAAiB,EAAE,2BAA2B,GAAG,MAAM,EACvD,aAAa,CAAC,EAAE,MAAM,GACrB,iBAAiB;IAYpB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;CAgD/C"}
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NumberingInstance = void 0;
|
|
4
4
|
const XMLBuilder_1 = require("../xml/XMLBuilder");
|
|
5
|
+
const NumberingLevel_1 = require("./NumberingLevel");
|
|
5
6
|
class NumberingInstance {
|
|
6
7
|
numId;
|
|
7
8
|
abstractNumId;
|
|
8
9
|
levelOverrides = new Map();
|
|
10
|
+
fullLevelOverrides = new Map();
|
|
9
11
|
constructor(numIdOrProps, abstractNumId) {
|
|
10
12
|
if (typeof numIdOrProps === 'number') {
|
|
11
13
|
this.numId = numIdOrProps;
|
|
@@ -61,10 +63,29 @@ class NumberingInstance {
|
|
|
61
63
|
getLevelOverride(level) {
|
|
62
64
|
return this.levelOverrides.get(level);
|
|
63
65
|
}
|
|
66
|
+
setFullLevelOverride(level, levelDef) {
|
|
67
|
+
if (level < 0) {
|
|
68
|
+
throw new Error('Level index must be non-negative');
|
|
69
|
+
}
|
|
70
|
+
this.fullLevelOverrides.set(level, levelDef);
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
getFullLevelOverride(level) {
|
|
74
|
+
return this.fullLevelOverrides.get(level);
|
|
75
|
+
}
|
|
76
|
+
getFullLevelOverrides() {
|
|
77
|
+
return new Map(this.fullLevelOverrides);
|
|
78
|
+
}
|
|
79
|
+
clearFullLevelOverride(level) {
|
|
80
|
+
this.fullLevelOverrides.delete(level);
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
64
83
|
toXML() {
|
|
65
84
|
const children = [];
|
|
66
85
|
children.push(XMLBuilder_1.XMLBuilder.wSelf('abstractNumId', { 'w:val': this.abstractNumId.toString() }));
|
|
67
86
|
for (const [level, startValue] of this.levelOverrides) {
|
|
87
|
+
if (this.fullLevelOverrides.has(level))
|
|
88
|
+
continue;
|
|
68
89
|
children.push({
|
|
69
90
|
name: 'w:lvlOverride',
|
|
70
91
|
attributes: { 'w:ilvl': level.toString() },
|
|
@@ -73,6 +94,18 @@ class NumberingInstance {
|
|
|
73
94
|
]
|
|
74
95
|
});
|
|
75
96
|
}
|
|
97
|
+
for (const [level, levelDef] of this.fullLevelOverrides) {
|
|
98
|
+
const overrideChildren = [];
|
|
99
|
+
if (this.levelOverrides.has(level)) {
|
|
100
|
+
overrideChildren.push(XMLBuilder_1.XMLBuilder.wSelf('startOverride', { 'w:val': this.levelOverrides.get(level).toString() }));
|
|
101
|
+
}
|
|
102
|
+
overrideChildren.push(levelDef.toXML());
|
|
103
|
+
children.push({
|
|
104
|
+
name: 'w:lvlOverride',
|
|
105
|
+
attributes: { 'w:ilvl': level.toString() },
|
|
106
|
+
children: overrideChildren,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
76
109
|
return XMLBuilder_1.XMLBuilder.w('num', { 'w:numId': this.numId.toString() }, children);
|
|
77
110
|
}
|
|
78
111
|
static create(propertiesOrNumId, abstractNumId) {
|
|
@@ -92,10 +125,31 @@ class NumberingInstance {
|
|
|
92
125
|
throw new Error('Missing required w:abstractNumId element');
|
|
93
126
|
}
|
|
94
127
|
const abstractNumId = parseInt(abstractNumIdMatch[1], 10);
|
|
95
|
-
|
|
128
|
+
const instance = new NumberingInstance({
|
|
96
129
|
numId,
|
|
97
130
|
abstractNumId,
|
|
98
131
|
});
|
|
132
|
+
const lvlOverrideRegex = /<w:lvlOverride[^>]*w:ilvl="(\d+)"[^>]*>([\s\S]*?)<\/w:lvlOverride>/g;
|
|
133
|
+
let match;
|
|
134
|
+
while ((match = lvlOverrideRegex.exec(xml)) !== null) {
|
|
135
|
+
const levelStr = match[1];
|
|
136
|
+
const content = match[2];
|
|
137
|
+
const level = parseInt(levelStr, 10);
|
|
138
|
+
const startOverrideMatch = /<w:startOverride[^>]*w:val="([^"]+)"/.exec(content);
|
|
139
|
+
if (startOverrideMatch?.[1]) {
|
|
140
|
+
instance.setLevelOverride(level, parseInt(startOverrideMatch[1], 10));
|
|
141
|
+
}
|
|
142
|
+
const lvlMatch = /<w:lvl[^>]*>[\s\S]*?<\/w:lvl>/.exec(content);
|
|
143
|
+
if (lvlMatch) {
|
|
144
|
+
try {
|
|
145
|
+
const levelDef = NumberingLevel_1.NumberingLevel.fromXML(lvlMatch[0]);
|
|
146
|
+
instance.setFullLevelOverride(level, levelDef);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return instance;
|
|
99
153
|
}
|
|
100
154
|
}
|
|
101
155
|
exports.NumberingInstance = NumberingInstance;
|