@sme.up/doc-alchemist 1.1.0-SNAPSHOT-20250623155458 → 1.1.0

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.
Files changed (127) hide show
  1. package/README.md +278 -30
  2. package/dist/assets/gfx-data.d.ts +1 -0
  3. package/dist/assets/gfx-data.js +2 -0
  4. package/dist/assets/gfx-data.js.map +1 -0
  5. package/dist/converters/excel/commons.d.ts +35 -0
  6. package/dist/converters/excel/commons.js +216 -0
  7. package/dist/converters/excel/commons.js.map +1 -0
  8. package/dist/{src/excel/excel-generator.types.d.ts → converters/excel/excel-converter.types.d.ts} +1 -0
  9. package/dist/{src/excel/excel-generator.types.js → converters/excel/excel-converter.types.js} +4 -2
  10. package/dist/converters/excel/excel-converter.types.js.map +1 -0
  11. package/dist/{src/excel/matrix-generator.d.ts → converters/excel/matrix-converter.d.ts} +4 -2
  12. package/dist/{src/excel/matrix-generator.js → converters/excel/matrix-converter.js} +32 -17
  13. package/dist/converters/excel/matrix-converter.js.map +1 -0
  14. package/dist/{src/excel/tree-generator.d.ts → converters/excel/tree-converter.d.ts} +2 -2
  15. package/dist/{src/excel/tree-generator.js → converters/excel/tree-converter.js} +5 -5
  16. package/dist/converters/excel/tree-converter.js.map +1 -0
  17. package/dist/{src/excel/excel-generator.d.ts → converters/excel-converter.d.ts} +2 -1
  18. package/dist/{src/excel/excel-generator.js → converters/excel-converter.js} +4 -4
  19. package/dist/converters/excel-converter.js.map +1 -0
  20. package/dist/converters/images/charts-generator.d.ts +9 -0
  21. package/dist/converters/images/charts-generator.js +250 -0
  22. package/dist/converters/images/charts-generator.js.map +1 -0
  23. package/dist/converters/pdf/autotable-renderer.d.ts +3 -0
  24. package/dist/converters/pdf/autotable-renderer.js +89 -0
  25. package/dist/converters/pdf/autotable-renderer.js.map +1 -0
  26. package/dist/converters/pdf/cover-renderer.d.ts +1 -0
  27. package/dist/converters/pdf/cover-renderer.js +26 -0
  28. package/dist/converters/pdf/cover-renderer.js.map +1 -0
  29. package/dist/converters/pdf/formulas-helper.d.ts +40 -0
  30. package/dist/converters/pdf/formulas-helper.js +227 -0
  31. package/dist/converters/pdf/formulas-helper.js.map +1 -0
  32. package/dist/converters/pdf/matrix-converter.d.ts +16 -0
  33. package/dist/converters/pdf/matrix-converter.js +198 -0
  34. package/dist/converters/pdf/matrix-converter.js.map +1 -0
  35. package/dist/converters/pdf/pdf-converter.types.d.ts +12 -0
  36. package/dist/converters/pdf/pdf-converter.types.js +2 -0
  37. package/dist/converters/pdf/pdf-converter.types.js.map +1 -0
  38. package/dist/converters/pdf/sch-converter.d.ts +3 -0
  39. package/dist/converters/pdf/sch-converter.js +99 -0
  40. package/dist/converters/pdf/sch-converter.js.map +1 -0
  41. package/dist/converters/pdf-converter.d.ts +8 -0
  42. package/dist/converters/pdf-converter.js +44 -0
  43. package/dist/converters/pdf-converter.js.map +1 -0
  44. package/dist/index.d.ts +7 -4
  45. package/dist/index.js +4 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/types/component.d.ts +53 -0
  48. package/dist/types/component.js +53 -0
  49. package/dist/types/component.js.map +1 -0
  50. package/dist/types/data-structures/smeupDataStructure.d.ts +215 -0
  51. package/dist/types/data-structures/smeupDataStructure.js +99 -0
  52. package/dist/types/data-structures/smeupDataStructure.js.map +1 -0
  53. package/dist/types/data-structures/smeupDataTable.d.ts +116 -0
  54. package/dist/types/data-structures/smeupDataTable.js +43 -0
  55. package/dist/types/data-structures/smeupDataTable.js.map +1 -0
  56. package/dist/types/data-structures/smeupDataTree.d.ts +13 -0
  57. package/dist/types/data-structures/smeupDataTree.js +2 -0
  58. package/dist/types/data-structures/smeupDataTree.js.map +1 -0
  59. package/dist/types/data-structures/smeupSch.d.ts +72 -0
  60. package/dist/types/data-structures/smeupSch.js +11 -0
  61. package/dist/types/data-structures/smeupSch.js.map +1 -0
  62. package/dist/types/dynamism.d.ts +45 -0
  63. package/dist/types/dynamism.js +30 -0
  64. package/dist/types/dynamism.js.map +1 -0
  65. package/dist/types/general.d.ts +22 -0
  66. package/dist/types/general.js +24 -0
  67. package/dist/types/general.js.map +1 -0
  68. package/dist/types/helpers.d.ts +4 -0
  69. package/dist/types/helpers.js +6 -0
  70. package/dist/types/helpers.js.map +1 -0
  71. package/dist/{src/types → types}/index.d.ts +8 -2
  72. package/dist/{src/types → types}/index.js +1 -0
  73. package/dist/types/index.js.map +1 -0
  74. package/dist/utils/commons-utility.d.ts +59 -0
  75. package/dist/{src/utils/generator-utility.js → utils/commons-utility.js} +63 -10
  76. package/dist/utils/commons-utility.js.map +1 -0
  77. package/dist/utils/datastructure-utility.d.ts +2 -0
  78. package/dist/utils/datastructure-utility.js +5 -0
  79. package/dist/utils/datastructure-utility.js.map +1 -0
  80. package/dist/{src/utils → utils}/dates-utility.d.ts +9 -0
  81. package/dist/{src/utils → utils}/dates-utility.js +18 -0
  82. package/dist/utils/dates-utility.js.map +1 -0
  83. package/dist/utils/formatter-utility.d.ts +3 -0
  84. package/dist/utils/formatter-utility.js +36 -0
  85. package/dist/utils/formatter-utility.js.map +1 -0
  86. package/dist/{src/utils → utils}/math-utility.d.ts +1 -0
  87. package/dist/{src/utils → utils}/math-utility.js +10 -0
  88. package/dist/utils/math-utility.js.map +1 -0
  89. package/dist/utils/objects-utility.js.map +1 -0
  90. package/dist/utils/regex-utility.js.map +1 -0
  91. package/package.json +13 -11
  92. package/dist/assets/sample-data.d.ts +0 -48
  93. package/dist/assets/sample-data.js +0 -372
  94. package/dist/assets/sample-data.js.map +0 -1
  95. package/dist/debug.d.ts +0 -1
  96. package/dist/debug.js +0 -29
  97. package/dist/debug.js.map +0 -1
  98. package/dist/src/excel/commons.d.ts +0 -21
  99. package/dist/src/excel/commons.js +0 -120
  100. package/dist/src/excel/commons.js.map +0 -1
  101. package/dist/src/excel/excel-generator.js.map +0 -1
  102. package/dist/src/excel/excel-generator.types.js.map +0 -1
  103. package/dist/src/excel/matrix-generator.js.map +0 -1
  104. package/dist/src/excel/tree-generator.js.map +0 -1
  105. package/dist/src/index.d.ts +0 -1
  106. package/dist/src/index.js +0 -2
  107. package/dist/src/index.js.map +0 -1
  108. package/dist/src/pdf/pdf-generator.d.ts +0 -7
  109. package/dist/src/pdf/pdf-generator.js +0 -28
  110. package/dist/src/pdf/pdf-generator.js.map +0 -1
  111. package/dist/src/types/index.js.map +0 -1
  112. package/dist/src/utils/datastructure-utility.d.ts +0 -2
  113. package/dist/src/utils/datastructure-utility.js +0 -5
  114. package/dist/src/utils/datastructure-utility.js.map +0 -1
  115. package/dist/src/utils/dates-utility.js.map +0 -1
  116. package/dist/src/utils/generator-utility.d.ts +0 -34
  117. package/dist/src/utils/generator-utility.js.map +0 -1
  118. package/dist/src/utils/math-utility.js.map +0 -1
  119. package/dist/src/utils/objects-utility.js.map +0 -1
  120. package/dist/src/utils/regex-utility.js.map +0 -1
  121. package/dist/tests/excel-generator.test.d.ts +0 -1
  122. package/dist/tests/excel-generator.test.js +0 -406
  123. package/dist/tests/excel-generator.test.js.map +0 -1
  124. /package/dist/{src/utils → utils}/objects-utility.d.ts +0 -0
  125. /package/dist/{src/utils → utils}/objects-utility.js +0 -0
  126. /package/dist/{src/utils → utils}/regex-utility.d.ts +0 -0
  127. /package/dist/{src/utils → utils}/regex-utility.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix-converter.js","sourceRoot":"","sources":["../../../src/converters/excel/matrix-converter.ts"],"names":[],"mappings":"AACA,OAAO,OAA4B,MAAM,SAAS,CAAC;AAQnD,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,4BAA4B,EAC5B,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAStB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,SAGC,EACD,UAAkC,EAClC,gBAAkC,EAChB,EAAE;IACpB,oEAAoE;IACpE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAEhD,MAAM,WAAW,GAA2C,KAAK,CAAC,OAAO,CACvE,KAAK,EAAE,MAAM,CACd;QACC,CAAC,CAAC,KAAK,CAAC,MAAM;QACd,CAAC,CAAC,EAAE,CAAC;IAEP,wEAAwE;IACxE,8CAA8C;IAC9C,MAAM,YAAY,GAAa,WAAW,CAAC,GAAG,CAC5C,CAAC,KAA2C,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAC9D,CAAC;IAEF,MAAM,eAAe,GAAG,kBAAkB,CACxC,cAAc,CAAC,OAAO,EACtB,KAAK,EACL,WAAW,CACZ,CAAC;IAEF,MAAM,oBAAoB,GAA8B,EAAE,CAAC;IAE3D,IAAI,SAAS,GAAW,CAAC,CAAC,CAAC,mBAAmB;IAE9C,gBAAgB;IAChB,qBAAqB,CAAC,SAAS,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC;IAExE,kDAAkD;IAClD,MAAM,IAAI,GAAG,UAAU,CACrB,cAAc,EACd,eAAe,EACf,KAAK,EAAE,OAA0C,CAClD,CAAC;IAEF,IAAI,YAAY,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,mDAAmD;QACnD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBACjC,MAAM,IAAI,GACR,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,SAAS;oBAC5C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;oBACvB,CAAC,CAAC,EAAE,CAAC;gBACT,MAAM,IAAI,GACR,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,SAAS;oBAC5C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;oBACvB,CAAC,CAAC,EAAE,CAAC;gBACT,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,SAAS,GAAG,0BAA0B,CACpC,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,eAAe,EACf,cAAc,CAAC,OAAO,EACtB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,CAAC,EACD,oBAAoB,EACpB,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAA2B,CAChD,CAAC;QAEF,6BAA6B;QAC7B,6BAA6B;QAC7B,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM;YAAE,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAC3E,2BAA2B,CAAC,SAAS,CAAC,CAAC;QACvC,SAAS,CAAC,UAAU,CAAC,iBAAiB,GAAG;YACvC,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,SAAS,GAAG,mBAAmB,CAC7B,SAAS,EACT,IAAI,EACJ,eAAe,EACf,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,IAAI,4BAA4B,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;QAC9D,kBAAkB,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC1E,CAAC;IAED,qBAAqB;IACrB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;QAC1B,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,KAAK,GAAG,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,gBAAgB;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,iCAAiC;IACjC,oCAAoC;IACpC,SAAS,CAAC,UAAU,GAAG;QACrB,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QAC3B,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE;KACvD,CAAC;IAEF,sDAAsD;IACtD,QAAQ,CAAC,cAAc,GAAG;QACxB,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,CAC5B,SAAoB,EACpB,eAAkC,EAClC,iBAA4C,EAC5C,EAAE;IACF,SAAS,CAAC,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC5C,oBAAoB,CAAC,iBAAiB,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,KAAK;YACjB,GAAG,EAAE,GAAG,CAAC,IAAI;YACb,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,qCAAqC;YACzE,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC;SACV,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CACjC,SAA4B,EAC5B,IAAoB,EACpB,MAAgB,EAChB,eAAkC,EAClC,iBAAoC,EACpC,SAAiB,EACjB,UAAkC,EAClC,gBAAkC,EAClC,sBAA8B,CAAC,EAC/B,oBAA4C,EAC5C,MAA8B,EACtB,EAAE;IACV,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,mBAAmB,CACxB,SAAS,EACT,IAAI,EACJ,eAAe,EACf,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,GAAG,eAAe,CAAC,GAAG,MAAM,CAAC;IAClD,MAAM,iBAAiB,GAAG;QACxB,GAAG,IAAI,GAAG,CACR,IAAI;aACD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;aACvD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CACxC;KACF,CAAC,IAAI,EAAE,CAAC;IACT,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CACpD,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;QAC3C,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAC7B,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,KAAK,UAAU,CAClE,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9D,oBAAoB;QACpB,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;YACxB,GAAG,WAAW,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,UAAU,EAAE,CAAC;QACjE,MAAM,eAAe,GAAG,EAAE,SAAS,CAAC;QAEpC,SAAS,GAAG,0BAA0B,CACpC,SAAS,EACT,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GAAG,CAAC,EACvB,oBAAoB,EACpB,MAAM,CACP,CAAC;QACF,MAAM,WAAW,GAAG,SAAS,CAAC;QAE9B,kCAAkC;QAClC,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,GAAG,8BAA8B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1D,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAExB,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,YAAY,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,CAAC,SAAS,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;gBAEzC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC1C,CAAC,CAAC;wBACE,OAAO,EAAE,0BAA0B,CACjC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAChC,eAAe,GAAG,CAAC,EACnB,eAAe,CAChB;qBACF;oBACH,CAAC,CAAC;wBACE,OAAO,EAAE,uBAAuB,CAC9B,SAAS,EACT,YAAY,EACZ,QAAQ,GAAG,CAAC,EACZ,eAAe,GAAG,CAAC,EACnB,WAAW,CACZ;qBACF,CAAC;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAG,CAC1B,SAA4B,EAC5B,IAAoB,EACpB,eAAkC,EAClC,SAAiB,EACjB,UAAkC,EAClC,gBAAkC,EAClC,oBAA+C,EACvC,EAAE;IACV,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC3C,MAAM,IAAI,GAAkB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5D,oBAAoB,CAAC,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAErE,OAAO,MAAM,CAAC,OAAO;gBACnB,CAAC,CAAC,cAAc,CACZ,wBAAwB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,EACnE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EACnC,UAAU,EACV,gBAAgB,CACjB;gBACH,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,4BAA4B,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;QAED,SAAS,EAAE,CAAC;IACd,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,UAAuB,EACvB,OAA0B,EAC1B,GAAiC,EACjC,EAAE;IACF,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACtC,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;QAC9C,MAAM,SAAS,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,kBAAkB,GAAG,SAAgC,CAAC;QAC5D,IACE,kBAAkB,EAAE,KAAK;YACzB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAChD,CAAC;YACD,wBAAwB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;aAAM,IACJ,GAA2B,EAAE,KAAK;YACnC,MAAM,CAAC,IAAI,CAAE,GAA2B,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAChE,CAAC;YACD,wBAAwB,CACtB,kBAAkB,EAClB,IAAI,EACH,GAA2B,CAAC,KAAK,CACnC,CAAC;QACJ,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,IAAmB,EAAE,QAAc,EAAE,EAAE;IACxE,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC3D,QAAQ,CAAC,MAAM,GAAG,iBAAiB,CAChC,IAAI,CAAC,IAAI,EAAE,QAAmB,IAAI,CAAC,EACnC,IAAI,CAAC,IAAI,EAAE,QAAmB,IAAI,CAAC,CACrC,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,CAC/B,IAAmB,EACnB,QAAc,EACd,iBAAiC,EACjC,EAAE;IACF,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE1C,MAAM,SAAS,GAAG,iBAAiB,IAAK,IAA4B,EAAE,KAAK,CAAC;IAC5E,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,QAAQ,CAAC,SAAS,GAAG;YACnB,UAAU,EAAE,SAAS,CAAC,SAOL;SAClB,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,GAAG;YACd,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;SACxD,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,IAAI,MAAM,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,GAAG;YACd,GAAG,QAAQ,CAAC,IAAI;YAChB,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,GAAG;YACd,GAAG,QAAQ,CAAC,IAAI;YAChB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;SAC5C,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,MAAuB,EACvB,MAA8B,EACtB,EAAE;IACV,MAAM,cAAc,GAAW,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,CAAC,2CAA2C;IACzD,CAAC;SAAM,CAAC;QACN,OAAO,iBAAiB,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,YAAoB,EACpB,YAAoB,EACZ,EAAE;IACV,4DAA4D;IAC5D,IAAI,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAE1E,0DAA0D;IAC1D,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,WAAW,GAAG,WAAW;aACtB,KAAK,CAAC,EAAE,CAAC;aACT,OAAO,EAAE;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACxE,OAAO,EAAE;aACT,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,iCAAiC;IACjC,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE9E,mEAAmE;IACnE,IAAI,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IACvC,MAAM,IAAI,UAAU,MAAM,EAAE,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAAwB,EAAE,EAAE;IACrD,UAAU,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,UAAU,CAAC,SAAS,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAC9C,UAAU,CAAC,IAAI,GAAG;QAChB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE;KAC5C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC9B,SAA4B,EAC5B,cAAsB,EACtB,QAAgB,EAChB,YAAoB,EACpB,WAAmB,EACX,EAAE;IACV,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAEzD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CACV,sBAAsB,cAAc,sBAAsB,EAC1D,gBAAgB,CACjB,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,gBAAgB,CACrB,GAAG,iBAAiB,GAAG,YAAY,IAAI,iBAAiB,GAAG,WAAW,EAAE,EACxE,SAAS,CACV,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,GAAG,iBAAiB,GAAG,YAAY,IAAI,iBAAiB,GAAG,WAAW,GAAG,CAAC;IACnH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,SAA4B,EAAE,EAAE;IACpE,MAAM,uBAAuB,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IACD,oEAAoE;IACpE,SAAS,CAAC,OAAO,CAAC,CAAC,GAAgB,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvC,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,KAAK,GAAG,SAAS;iBACnD,QAAQ,EAAE;iBACV,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,SAA4B,EAAE,EAAE;IAC7D,OAAO,CACL,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B;SAC/C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CACzD,CAAC;AACJ,CAAC,CAAC;AAEF,mEAAmE;AACnE,MAAM,2BAA2B,GAAG,CAAC,SAA4B,EAAE,EAAE;IACnE,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAClC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAE3D,IAAI,QAAQ,EAAE,CAAC;gBACb,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAgB,CAAC,OAAO,CAC7D,GAAG,EACH,EAAE,CACH,CAAC;gBACF,MAAM,aAAa,GAChB,SAAS,CAAC,KAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B;gBAClF,GAAG,CAAC,YAAY,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,sCAAsC;gBAC3E,gBAAgB,GAAG,YAAY,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAC,6CAA6C;YACpF,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type { Properties as CSSProperties } from \"csstype\";\nimport ExcelJS, { Worksheet, Cell } from \"exceljs\";\nimport {\n GenericObject,\n WebupManagerData,\n ColumnFilter,\n SmeupDataCellStyled,\n SupportedExportFormats,\n} from \"../../types/index.js\";\nimport {\n getFilteredColumns,\n filterRows,\n updateMaxValueLength,\n calculateCellValue,\n hexToArgb,\n calculateValue,\n} from \"../../utils/commons-utility.js\";\nimport {\n exportTypeSupportsFormatting,\n allowedTotals,\n} from \"./excel-converter.types.js\";\nimport { isColumnHidden } from \"../../utils/datastructure-utility.js\";\nimport {\n addFooterTotalsRow,\n getDistinctCount,\n getExcelColumnLetter,\n initializeWorksheet,\n setHeaderStyling,\n smeupFormulaToExcelFormula,\n smeupFormulaToExcelValue,\n} from \"./commons.js\";\nimport {\n SmeupDataCell,\n SmeupDataColumn,\n SmeupDataRow,\n SmeupDataTable,\n} from \"../../types/data-structures/smeupDataTable.js\";\nimport { SmeupDataNode } from \"../../types/data-structures/smeupDataTree.js\";\n\nexport const dataTableToExcelWorkbook = (\n component: {\n smeupDataTable: SmeupDataTable;\n props: GenericObject;\n },\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n): ExcelJS.Workbook => {\n // Create a new ExcelJS.Workbook and return it as a resolved Promise\n const { smeupDataTable: smeupDataTable, props } = component;\n const workbook = new ExcelJS.Workbook();\n const worksheet = initializeWorksheet(workbook);\n\n const groupsArray: { column: string; visible: boolean }[] = Array.isArray(\n props?.groups,\n )\n ? props.groups\n : [];\n\n // Visible attribute is used only to determine if the column is visible,\n // ant not to determine if the group is active\n const activeGroups: string[] = groupsArray.map(\n (group: { column: string; visible: boolean }) => group.column,\n );\n\n const filteredColumns = getFilteredColumns(\n smeupDataTable.columns,\n props,\n groupsArray,\n );\n\n const maxColumnValueLenght: { [key: string]: number } = {};\n\n let rowNumber: number = 1; // Start row number\n\n // Headers setup\n setDataTableHeaderRow(worksheet, filteredColumns, maxColumnValueLenght);\n\n // Filter and sort rows (if filters are available)\n const rows = filterRows(\n smeupDataTable,\n filteredColumns,\n props?.filters as { [key: string]: ColumnFilter },\n );\n\n if (activeGroups?.length > 0) {\n // Sort rows based on the first active group column\n rows.sort((a, b) => {\n for (const group of activeGroups) {\n const valA =\n a.cells && a.cells[group]?.value !== undefined\n ? a.cells[group]?.value\n : \"\";\n const valB =\n b.cells && b.cells[group]?.value !== undefined\n ? b.cells[group]?.value\n : \"\";\n if (valA !== valB) return valA.localeCompare(valB);\n }\n return 0;\n });\n\n // Recursive grouping\n rowNumber = insertDataTableGroupedRows(\n worksheet,\n rows,\n activeGroups,\n filteredColumns,\n smeupDataTable.columns,\n rowNumber,\n fileFormat,\n webupManagerData,\n 1,\n maxColumnValueLenght,\n (props?.totals ?? {}) as Record<string, string>,\n );\n\n //INTERACTIVE GROUPS MANAGING\n //TODO: Add groups subtotals\n if (worksheet.getColumn(1).hidden) ensureGroupRowHasDescription(worksheet);\n applyDataTableOutlineLevels(worksheet);\n worksheet.properties.outlineProperties = {\n summaryBelow: false,\n summaryRight: false,\n };\n } else {\n // Process rows normally if no grouping\n rowNumber = insertDataTableRows(\n worksheet,\n rows,\n filteredColumns,\n rowNumber,\n fileFormat,\n webupManagerData,\n maxColumnValueLenght,\n );\n }\n\n if (exportTypeSupportsFormatting[fileFormat] && props?.totals) {\n addFooterTotalsRow(worksheet, filteredColumns, props, webupManagerData);\n }\n\n // Apply column width\n worksheet.columns.forEach(col => {\n const columnKey = col.key;\n if (columnKey) {\n col.width = (maxColumnValueLenght[columnKey] ?? 10) * 1.1;\n } else {\n col.width = 10 * 1.1; // Default width\n }\n });\n\n // Apply filter to column headers\n // TODO: look if it breaks groupings\n worksheet.autoFilter = {\n from: { row: 1, column: 1 },\n to: { row: rowNumber, column: filteredColumns.length },\n };\n\n // Forces full calculation when the workbook is opened\n workbook.calcProperties = {\n fullCalcOnLoad: true,\n };\n\n return workbook;\n};\n\n/**\n * Creates the first row of the table by looking at dataTable columns.\n * Also updates column width calculations\n * @param worksheet\n * @param filteredColumns\n * @param maxValueLengthMap\n */\nconst setDataTableHeaderRow = (\n worksheet: Worksheet,\n filteredColumns: SmeupDataColumn[],\n maxValueLengthMap: { [key: string]: number },\n) => {\n worksheet.columns = filteredColumns.map(col => {\n updateMaxValueLength(maxValueLengthMap, col.title, col.name);\n return {\n header: col.title,\n key: col.name,\n width: maxValueLengthMap[col.name], // Set the width to the updated value\n hidden: isColumnHidden(col),\n } as ExcelJS.Column;\n });\n\n setHeaderStyling(worksheet);\n};\n\nconst insertDataTableGroupedRows = (\n worksheet: ExcelJS.Worksheet,\n rows: SmeupDataRow[],\n groups: string[],\n filteredColumns: SmeupDataColumn[],\n unfilteredColumns: SmeupDataColumn[],\n rowNumber: number,\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n currentOutlineLevel: number = 1,\n maxColumnValueLength: Record<string, number>,\n totals: Record<string, string>,\n): number => {\n if (!groups.length) {\n return insertDataTableRows(\n worksheet,\n rows,\n filteredColumns,\n rowNumber,\n fileFormat,\n webupManagerData,\n maxColumnValueLength,\n );\n }\n\n const [currentGroup, ...remainingGroups] = groups;\n const uniqueGroupValues = [\n ...new Set(\n rows\n .map(row => row.cells && row.cells[currentGroup]?.value)\n .filter(value => value !== undefined),\n ),\n ].sort();\n const columnTitles = Object.fromEntries(\n unfilteredColumns.map(col => [col.name, col.title]),\n );\n\n for (const groupValue of uniqueGroupValues) {\n // Filter rows for the current group\n const groupedRows = rows.filter(\n row => row.cells && row.cells[currentGroup]?.value === groupValue,\n );\n const indentation = \" \".repeat((currentOutlineLevel - 1) * 8);\n\n // Insert header row\n const headerRow = worksheet.addRow([]);\n headerRow.getCell(1).value =\n `${indentation}▼${columnTitles[currentGroup]} - ${groupValue}`;\n const headerRowNumber = ++rowNumber;\n\n rowNumber = insertDataTableGroupedRows(\n worksheet,\n groupedRows,\n remainingGroups,\n filteredColumns,\n unfilteredColumns,\n rowNumber,\n fileFormat,\n webupManagerData,\n currentOutlineLevel + 1,\n maxColumnValueLength,\n totals,\n );\n const lastDataRow = rowNumber;\n\n // Compute totals and format cells\n for (const [colIndex, col] of filteredColumns.entries()) {\n const cell = headerRow.getCell(colIndex + 1);\n cell.numFmt = getExcelNumFormatForGroupedRow(col, totals);\n decorateHeaderRow(cell);\n\n if (!totals) continue;\n const totalFormula = totals[col.name];\n if (totalFormula && col.visible) {\n cell.alignment = { horizontal: \"right\" };\n\n cell.value = totalFormula.startsWith(\"MATH\")\n ? {\n formula: smeupFormulaToExcelFormula(\n totalFormula.replace(\"MATH\", \"\"),\n headerRowNumber - 1,\n filteredColumns,\n ),\n }\n : {\n formula: getSubGroupTotalFormula(\n worksheet,\n totalFormula,\n colIndex + 1,\n headerRowNumber + 1,\n lastDataRow,\n ),\n };\n }\n }\n }\n\n return rowNumber;\n};\n\n/**\n * Inserts normal rows (without grouping).\n */\nconst insertDataTableRows = (\n worksheet: ExcelJS.Worksheet,\n rows: SmeupDataRow[],\n filteredColumns: SmeupDataColumn[],\n rowNumber: number,\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n maxColumnValueLenght: { [key: string]: number },\n): number => {\n for (const row of rows) {\n const rowData = filteredColumns.map(column => {\n const cell: SmeupDataCell = (row?.cells ?? {})[column.name];\n updateMaxValueLength(maxColumnValueLenght, cell?.value, column.name);\n\n return column.formula\n ? calculateValue(\n smeupFormulaToExcelValue(column, filteredColumns, row?.cells ?? {}),\n cell.obj ?? { t: \"\", p: \"\", k: \"\" },\n fileFormat,\n webupManagerData,\n )\n : calculateCellValue(cell, fileFormat, webupManagerData);\n });\n\n const newRow = worksheet.addRow(rowData);\n if (exportTypeSupportsFormatting[fileFormat]) {\n addStyleToExceljsRow(newRow, filteredColumns, row);\n }\n\n rowNumber++;\n }\n\n return rowNumber;\n};\n\nexport const addStyleToExceljsRow = (\n exceljsRow: ExcelJS.Row,\n columns: SmeupDataColumn[],\n row: SmeupDataRow | SmeupDataNode,\n) => {\n exceljsRow.eachCell((cell, cellIndex) => {\n const columnIndex = cellIndex - 1;\n const columnName = columns[columnIndex]?.name;\n const smeupCell = row?.cells?.[columnName];\n const smeupCellWithStyle = smeupCell as SmeupDataCellStyled;\n if (\n smeupCellWithStyle?.style &&\n Object.keys(smeupCellWithStyle.style).length > 0\n ) {\n cellToXlsxStyleConverter(smeupCellWithStyle, cell);\n } else if (\n (row as SmeupDataCellStyled)?.style &&\n Object.keys((row as SmeupDataCellStyled).style ?? {}).length > 0\n ) {\n cellToXlsxStyleConverter(\n smeupCellWithStyle,\n cell,\n (row as SmeupDataCellStyled).style,\n );\n } else if (smeupCell) {\n applyDefaultXlsxCellStyle(smeupCell, cell);\n }\n });\n};\n\nconst applyDefaultXlsxCellStyle = (cell: SmeupDataCell, xlsxCell: Cell) => {\n if (typeof xlsxCell.value === \"number\" || xlsxCell.formula) {\n xlsxCell.numFmt = getExcelNumFormat(\n (cell.data?.decimals as number) ?? 0,\n (cell.data?.integers as number) ?? 0,\n );\n }\n};\n\n/**\n * Converts SmeupDataCell.style attributes to ExcelJS styles\n * @param cell SmeupDataCell - The TBL cell containing styless\n * @param xlsxCell ExcelJS.Cell - XLSX cell where styles will be applied\n * @returns any\n */\nconst cellToXlsxStyleConverter = (\n cell: SmeupDataCell,\n xlsxCell: Cell,\n optionalRowStyles?: CSSProperties,\n) => {\n applyDefaultXlsxCellStyle(cell, xlsxCell);\n\n const cellStyle = optionalRowStyles ?? (cell as SmeupDataCellStyled)?.style;\n if (!cellStyle) return;\n\n if (cellStyle.textAlign) {\n xlsxCell.alignment = {\n horizontal: cellStyle.textAlign as\n | \"left\"\n | \"center\"\n | \"right\"\n | \"fill\"\n | \"justify\"\n | \"centerContinuous\"\n | \"distributed\",\n };\n }\n\n if (cellStyle.backgroundColor) {\n xlsxCell.fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: hexToArgb(cellStyle.backgroundColor) },\n };\n }\n if (cellStyle.fontWeight == \"bold\") {\n xlsxCell.font = {\n ...xlsxCell.font,\n bold: true,\n };\n }\n if (cellStyle.color) {\n xlsxCell.font = {\n ...xlsxCell.font,\n color: { argb: hexToArgb(cellStyle.color) },\n };\n }\n};\n\nexport const getExcelNumFormatForGroupedRow = (\n column: SmeupDataColumn,\n totals: Record<string, string>,\n): string => {\n const totalOperation: string = totals?.[column.name];\n if (totalOperation === \"Distinct\") {\n return \"0\"; // Distinct count does not require decimals\n } else {\n return getExcelNumFormat(column.decimals ?? 0, column.integers ?? 0);\n }\n};\n\nexport const getExcelNumFormat = (\n cellDecimals: number,\n cellIntegers: number,\n): string => {\n // Step 1: Build the integer part with necessary '#' and '0'\n let integerPart = cellIntegers ? \"#\".repeat(cellIntegers - 1) + \"0\" : \"0\";\n\n // Step 2: Insert commas every three digits from the right\n if (cellIntegers > 3) {\n integerPart = integerPart\n .split(\"\")\n .reverse()\n .map((char, index) => (index > 0 && index % 3 === 0 ? char + \",\" : char))\n .reverse()\n .join(\"\");\n }\n\n // Step 3: Build the decimal part\n const decimalPart = cellDecimals > 0 ? \".\" + \"0\".repeat(cellDecimals) : \".00\";\n\n // Step 4: Construct the full format, including negative formatting\n let numFmt = integerPart + decimalPart;\n numFmt += `;[Red]-${numFmt}`;\n\n return numFmt;\n};\n\nconst decorateHeaderRow = (headerCell: ExcelJS.Cell) => {\n headerCell.font = { bold: true };\n headerCell.alignment = { horizontal: \"left\" };\n headerCell.fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: `${hexToArgb(\"e0e0e0\")}` },\n };\n};\n\nconst getSubGroupTotalFormula = (\n worksheet: ExcelJS.Worksheet,\n totalOperation: string,\n colIndex: number,\n firstDataRow: number,\n lastDataRow: number,\n): string => {\n const columnExcelLetter = getExcelColumnLetter(colIndex);\n\n if (!allowedTotals[totalOperation]) {\n console.warn(\n `Total operation [' ${totalOperation} '] is not supported`,\n \"exportUtils.ts\",\n );\n return \"\";\n }\n\n if (totalOperation === \"Distinct\") {\n return getDistinctCount(\n `${columnExcelLetter}${firstDataRow}:${columnExcelLetter}${lastDataRow}`,\n worksheet,\n );\n } else {\n return `${allowedTotals[totalOperation]}${columnExcelLetter}${firstDataRow}:${columnExcelLetter}${lastDataRow})`;\n }\n};\n\nconst ensureGroupRowHasDescription = (worksheet: ExcelJS.Worksheet) => {\n const firstVisibleColumnIndex = getFirstVisibleColumn(worksheet);\n if (!firstVisibleColumnIndex) {\n console.warn(\"No visible columns found in the worksheet.\");\n return;\n }\n // Iterate through each row and check if the first cell contains \"▼\"\n worksheet.eachRow((row: ExcelJS.Row) => {\n const cellValue = row.getCell(1).value;\n if (cellValue && cellValue.toString().includes(\"▼\")) {\n row.getCell(firstVisibleColumnIndex).value = cellValue\n .toString()\n .replace(\"▼\", \"\");\n }\n });\n};\n\nconst getFirstVisibleColumn = (worksheet: ExcelJS.Worksheet) => {\n return (\n [...Array(worksheet.columnCount)]\n .map((_, i) => i + 1) // Convert to base 1 index\n .find(col => !worksheet.getColumn(col).hidden) || null\n );\n};\n\n// Function to analyze header indentation and assign outline levels\nconst applyDataTableOutlineLevels = (worksheet: ExcelJS.Worksheet) => {\n let lastOutlineLevel = 0;\n\n worksheet.eachRow((row, rowIndex) => {\n if (rowIndex !== 1) {\n const firstCell = row.getCell(1);\n const isHeader = firstCell.value?.toString().includes(\"▼\");\n\n if (isHeader) {\n row.getCell(1).value = (row.getCell(1).value as string).replace(\n \"▼\",\n \"\",\n );\n const leadingSpaces =\n (firstCell.value as string).match(/^ */)?.[0].length || 0;\n const outlineLevel = Math.floor(leadingSpaces / 8) + 1; // Each 8 spaces = 1 level\n row.outlineLevel = outlineLevel - 1; // Ensure headers get an outline level\n lastOutlineLevel = outlineLevel;\n } else {\n row.outlineLevel = lastOutlineLevel; // Normal rows follow the last assigned level\n }\n }\n });\n};\n"]}
@@ -1,6 +1,6 @@
1
- import { SmeupDataTree } from "@sme.up/kokos-sdk-node";
2
- import { GenericObject, SupportedExportFormats, WebupManagerData } from "../types/index.js";
1
+ import { GenericObject, SupportedExportFormats, WebupManagerData } from "../../types/index.js";
3
2
  import ExcelJS from "exceljs";
3
+ import { SmeupDataTree } from "../../types/data-structures/smeupDataTree.js";
4
4
  export declare function dataTreeToExcelWorkbook(component: {
5
5
  smeupDataTree: SmeupDataTree;
6
6
  props: GenericObject;
@@ -1,9 +1,9 @@
1
- import { exportTypeSupportsFormatting } from "./excel-generator.types.js";
1
+ import { exportTypeSupportsFormatting } from "./excel-converter.types.js";
2
2
  import ExcelJS from "exceljs";
3
3
  import { addFooterTotalsRow, initializeWorksheet, setHeaderStyling, } from "./commons.js";
4
- import { isColumnHidden } from "../utils/datastructure-utility.js";
5
- import { getFilteredColumns, calculateCellValue, } from "../utils/generator-utility.js";
6
- import { addStyleToExceljsRow } from "./matrix-generator.js";
4
+ import { isColumnHidden } from "../../utils/datastructure-utility.js";
5
+ import { getFilteredColumns, calculateCellValue, } from "../../utils/commons-utility.js";
6
+ import { addStyleToExceljsRow } from "./matrix-converter.js";
7
7
  export async function dataTreeToExcelWorkbook(component, fileFormat, webupManagerData, splitNodesToColumns = true) {
8
8
  const { smeupDataTree, props } = component;
9
9
  const workbook = new ExcelJS.Workbook();
@@ -114,4 +114,4 @@ export const TREE_HEADER_COLUMN_NAME = "TREE_NODE_LVL_";
114
114
  export const getTreeNodeColumnName = (level) => {
115
115
  return `${TREE_HEADER_COLUMN_NAME}${level}`;
116
116
  };
117
- //# sourceMappingURL=tree-generator.js.map
117
+ //# sourceMappingURL=tree-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-converter.js","sourceRoot":"","sources":["../../../src/converters/excel/tree-converter.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n GenericObject,\n SupportedExportFormats,\n WebupManagerData,\n} from \"../../types/index.js\";\nimport { exportTypeSupportsFormatting } from \"./excel-converter.types.js\";\nimport ExcelJS from \"exceljs\";\nimport {\n addFooterTotalsRow,\n initializeWorksheet,\n setHeaderStyling,\n} from \"./commons.js\";\nimport { isColumnHidden } from \"../../utils/datastructure-utility.js\";\nimport {\n getFilteredColumns,\n calculateCellValue,\n} from \"../../utils/commons-utility.js\";\nimport { addStyleToExceljsRow } from \"./matrix-converter.js\";\nimport { SmeupDataColumn } from \"../../types/data-structures/smeupDataTable.js\";\nimport {\n SmeupDataTree,\n SmeupDataNode,\n} from \"../../types/data-structures/smeupDataTree.js\";\n\nexport async function dataTreeToExcelWorkbook(\n component: {\n smeupDataTree: SmeupDataTree;\n props: GenericObject;\n },\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n splitNodesToColumns = true,\n): Promise<ExcelJS.Workbook> {\n const { smeupDataTree, props } = component;\n const workbook = new ExcelJS.Workbook();\n const worksheet = initializeWorksheet(workbook);\n const columnsMaxWidth: { [columnName: string]: number } = {};\n\n // Add ExcelJS columns\n const headerColumns = addTreeColumns(\n worksheet,\n smeupDataTree.columns ?? [],\n smeupDataTree.children,\n splitNodesToColumns,\n props,\n );\n\n // Add ExcelJS rows\n addTreeNodeRows(\n worksheet,\n fileFormat,\n webupManagerData,\n columnsMaxWidth,\n headerColumns,\n smeupDataTree.children,\n splitNodesToColumns,\n );\n\n // Totals\n if (exportTypeSupportsFormatting[fileFormat] && props?.totals) {\n addFooterTotalsRow(worksheet, headerColumns, props, webupManagerData);\n }\n\n // Set ExcelJS columns width\n worksheet.columns.forEach(col => {\n if (col.key) {\n col.width = columnsMaxWidth[col.key] ?? 10;\n } else {\n col.width = 10;\n }\n });\n\n // Forces full calculation when the workbook is opened\n workbook.calcProperties = {\n fullCalcOnLoad: true,\n };\n return workbook;\n}\n\nconst addTreeColumns = (\n worksheet: ExcelJS.Worksheet,\n columns: SmeupDataColumn[],\n nodeRows: SmeupDataNode[],\n splitNodesToColumns: boolean,\n props: GenericObject,\n): SmeupDataColumn[] => {\n const addTreeNodeColumns = (\n nodeRows: SmeupDataNode[],\n nodeColumns: SmeupDataColumn[],\n level = 0,\n ) => {\n if (\n !nodeColumns.some(\n nodeColumn => nodeColumn.name === getTreeNodeColumnName(level),\n )\n ) {\n nodeColumns.push({\n name: getTreeNodeColumnName(level),\n title: `.${level + 1}`,\n });\n }\n\n nodeRows.forEach(row => {\n if (row.children?.length ?? 0 > 0) {\n addTreeNodeColumns(row.children ?? [], nodeColumns, level + 1);\n }\n });\n };\n\n const nodeColumns: SmeupDataColumn[] = [];\n if (splitNodesToColumns) {\n // New column for each tree node\n addTreeNodeColumns(nodeRows, nodeColumns);\n } else {\n // All tree nodes are under the same column\n nodeColumns.push({\n name: getTreeNodeColumnName(0),\n title: \"\",\n });\n }\n\n const filteredColumns: SmeupDataColumn[] = getFilteredColumns(columns, props);\n const headerColumns: SmeupDataColumn[] = [...nodeColumns, ...filteredColumns];\n\n /* Add ExcelJS columns*/\n worksheet.columns = headerColumns.map<Partial<ExcelJS.Column>>(column => ({\n header: column.title ?? \"\",\n key: column.name,\n hidden: isColumnHidden(column),\n }));\n // Add style to ExcelJS columns\n setHeaderStyling(worksheet, true);\n return headerColumns;\n};\n\nconst addTreeNodeRows = (\n worksheet: ExcelJS.Worksheet,\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n columnsMaxWidth: { [columnName: string]: number },\n columns: SmeupDataColumn[],\n nodeRows: SmeupDataNode[],\n splitNodesToColumns: boolean,\n level = 0,\n): void => {\n const getParsedRowData = (row: SmeupDataNode): (string | number | Date)[] => {\n return columns.map<string | number | Date>(column => {\n /* Set cell value */\n let cellValue: string | number | Date = \"\";\n\n if (column.name.includes(TREE_HEADER_COLUMN_NAME)) {\n /* Node column */\n if (!splitNodesToColumns) {\n // Level-based indentation\n const indent = ` `.repeat(level);\n cellValue = `${indent}${row.obj?.k}: ${row.value}`;\n } else if (column.name === getTreeNodeColumnName(level)) {\n // No indentation\n cellValue = `${row.obj?.k}: ${row.value}`;\n }\n } else {\n /* Standard column */\n cellValue = calculateCellValue(\n row.cells?.[column.name] ?? { value: \"\" },\n fileFormat,\n webupManagerData,\n );\n }\n\n /* Update column max width */\n const currentMaxWidth = columnsMaxWidth[column.name] ?? 10;\n const cellLength =\n cellValue instanceof Date ? 10 : cellValue.toString().length;\n columnsMaxWidth[column.name] = Math.max(currentMaxWidth, cellLength);\n\n return cellValue;\n });\n };\n\n nodeRows.forEach(row => {\n /* Add ExcelJS row */\n const parsedRowData = getParsedRowData(row);\n const exceljsRow = worksheet.addRow(parsedRowData);\n\n if (exportTypeSupportsFormatting[fileFormat]) {\n addStyleToExceljsRow(exceljsRow, columns, row);\n }\n\n if (row.children?.length ?? 0 > 0) {\n addTreeNodeRows(\n worksheet,\n fileFormat,\n webupManagerData,\n columnsMaxWidth,\n columns,\n row.children ?? [],\n splitNodesToColumns,\n level + 1,\n );\n }\n });\n};\n\nexport const TREE_HEADER_COLUMN_NAME = \"TREE_NODE_LVL_\";\n\nexport const getTreeNodeColumnName = (level: number) => {\n return `${TREE_HEADER_COLUMN_NAME}${level}`;\n};\n"]}
@@ -1,5 +1,6 @@
1
- import { SmeupDataTable, SmeupDataTree } from "@sme.up/kokos-sdk-node";
2
1
  import { GenericObject, SupportedExportFormats, WebupManagerData } from "../types/index.js";
2
+ import { SmeupDataTable } from "../types/data-structures/smeupDataTable.js";
3
+ import { SmeupDataTree } from "../types/data-structures/smeupDataTree.js";
3
4
  export declare const dataTableToExcelData: (component: {
4
5
  smeupDataTable: SmeupDataTable;
5
6
  props: GenericObject;
@@ -1,7 +1,7 @@
1
1
  import { SupportedExportFormats, } from "../types/index.js";
2
- import { convertToBuffer } from "../utils/generator-utility.js";
3
- import { dataTableToExcelWorkbook } from "./matrix-generator.js";
4
- import { dataTreeToExcelWorkbook } from "./tree-generator.js";
2
+ import { convertToBuffer } from "../utils/commons-utility.js";
3
+ import { dataTableToExcelWorkbook } from "./excel/matrix-converter.js";
4
+ import { dataTreeToExcelWorkbook } from "./excel/tree-converter.js";
5
5
  export const dataTableToExcelData = async (component, fileFormat, webupManagerData) => {
6
6
  const workbook = dataTableToExcelWorkbook(component, fileFormat, webupManagerData);
7
7
  return convertToStreamData(workbook, fileFormat);
@@ -28,4 +28,4 @@ const convertToStreamData = async (workbook, fileFormat) => {
28
28
  throw new Error(`Unsupported export format: ${fileFormat}`);
29
29
  }
30
30
  };
31
- //# sourceMappingURL=excel-generator.js.map
31
+ //# sourceMappingURL=excel-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-converter.js","sourceRoot":"","sources":["../../src/converters/excel-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,SAGC,EACD,UAAkC,EAClC,gBAAkC,EACJ,EAAE;IAChC,MAAM,QAAQ,GAAG,wBAAwB,CACvC,SAAS,EACT,UAAU,EACV,gBAAgB,CACjB,CAAC;IAEF,OAAO,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,SAGC,EACD,UAAkC,EAClC,gBAAkC,EACJ,EAAE;IAChC,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAC5C,SAAS,EACT,UAAU,EACV,gBAAgB,CACjB,CAAC;IAEF,OAAO,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAC/B,QAAkB,EAClB,UAAkC,EACJ,EAAE;IAChC,kDAAkD;IAClD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;YACjC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrD,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,sBAAsB,CAAC,GAAG,CAAC;QAChC,KAAK,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC/C,gBAAgB,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE;aACrC,CAAC,CAAC;YACH,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,CAAC","sourcesContent":["import {\n GenericObject,\n SupportedExportFormats,\n WebupManagerData,\n} from \"../types/index.js\";\nimport { convertToBuffer } from \"../utils/commons-utility.js\";\nimport { dataTableToExcelWorkbook } from \"./excel/matrix-converter.js\";\nimport { Workbook } from \"exceljs\";\nimport { dataTreeToExcelWorkbook } from \"./excel/tree-converter.js\";\nimport { SmeupDataTable } from \"../types/data-structures/smeupDataTable.js\";\nimport { SmeupDataTree } from \"../types/data-structures/smeupDataTree.js\";\n\nexport const dataTableToExcelData = async (\n component: {\n smeupDataTable: SmeupDataTable;\n props: GenericObject;\n },\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n): Promise<Buffer | Uint8Array> => {\n const workbook = dataTableToExcelWorkbook(\n component,\n fileFormat,\n webupManagerData,\n );\n\n return convertToStreamData(workbook, fileFormat);\n};\n\nexport const dataTreeToExcelData = async (\n component: {\n smeupDataTree: SmeupDataTree;\n props: GenericObject;\n },\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n): Promise<Buffer | Uint8Array> => {\n const workbook = await dataTreeToExcelWorkbook(\n component,\n fileFormat,\n webupManagerData,\n );\n\n return convertToStreamData(workbook, fileFormat);\n};\n\nconst convertToStreamData = async (\n workbook: Workbook,\n fileFormat: SupportedExportFormats,\n): Promise<Buffer | Uint8Array> => {\n // Convert workbook to buffer based on file format\n switch (fileFormat) {\n case SupportedExportFormats.XLSX: {\n const xlsxBuffer = await workbook.xlsx.writeBuffer();\n return convertToBuffer(xlsxBuffer);\n }\n case SupportedExportFormats.TXT:\n case SupportedExportFormats.CSV: {\n const csvBuffer = await workbook.csv.writeBuffer({\n formatterOptions: { delimiter: \";\" },\n });\n return convertToBuffer(csvBuffer);\n }\n default:\n throw new Error(`Unsupported export format: ${fileFormat}`);\n }\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import { SmeupDataTable } from "../../types/data-structures/smeupDataTable.js";
2
+ import { ChartOptions } from "../../types/index.js";
3
+ /**
4
+ * Converts SmeupDataTable to chart image buffer
5
+ * @param dataTable - SmeupDataTable containing the data
6
+ * @param chartType - Type of chart (bar, line, pie, scatter)
7
+ * @returns Promise<Buffer> containing the chart image
8
+ */
9
+ export declare const dataTableToChart: (dataTable: SmeupDataTable, chartType: string, chartOptions: ChartOptions) => Promise<Buffer>;
@@ -0,0 +1,250 @@
1
+ import * as echarts from "echarts";
2
+ /**
3
+ * Converts SmeupDataTable to chart image buffer
4
+ * @param dataTable - SmeupDataTable containing the data
5
+ * @param chartType - Type of chart (bar, line, pie, scatter)
6
+ * @returns Promise<Buffer> containing the chart image
7
+ */
8
+ export const dataTableToChart = async (dataTable, chartType, chartOptions) => {
9
+ // Check if we're in Node.js or browser environment
10
+ const isNode = typeof window === "undefined";
11
+ if (isNode) {
12
+ return await generateChartInNode(dataTable, chartType, chartOptions);
13
+ }
14
+ else {
15
+ return generateChartInBrowser(dataTable, chartType, chartOptions);
16
+ }
17
+ };
18
+ /**
19
+ * Generate chart in Node.js environment using canvas
20
+ */
21
+ async function generateChartInNode(dataTable, chartType, chartOptions) {
22
+ try {
23
+ // Dynamic import for Node.js canvas
24
+ const { createCanvas } = await import("canvas");
25
+ const width = Number(chartOptions.Width);
26
+ const height = Number(chartOptions.Height);
27
+ // Create canvas
28
+ const canvas = createCanvas(width, height);
29
+ // Create a minimal DOM-like environment for ECharts
30
+ const mockElement = {
31
+ clientWidth: width,
32
+ clientHeight: width,
33
+ style: {},
34
+ addEventListener: () => { },
35
+ removeEventListener: () => { },
36
+ getAttribute: () => null,
37
+ setAttribute: () => { },
38
+ getContext: (type) => {
39
+ if (type === "2d") {
40
+ return canvas.getContext("2d");
41
+ }
42
+ return null;
43
+ },
44
+ appendChild: () => { },
45
+ removeChild: () => { },
46
+ ownerDocument: {
47
+ createElement: (tagName) => {
48
+ if (tagName === "canvas") {
49
+ return createCanvas(width, height);
50
+ }
51
+ return mockElement;
52
+ },
53
+ createElementNS: () => mockElement,
54
+ defaultView: {
55
+ getComputedStyle: () => ({ getPropertyValue: () => "" }),
56
+ },
57
+ },
58
+ };
59
+ // Initialize ECharts with the mock element
60
+ const chart = echarts.init(mockElement, null, {
61
+ renderer: "canvas",
62
+ useDirtyRect: false,
63
+ width: width,
64
+ height: height,
65
+ });
66
+ // Convert data table to chart configuration
67
+ const config = convertDataTableToChartConfig(dataTable, chartType, chartOptions);
68
+ // Set chart options
69
+ chart.setOption(config);
70
+ // Force render by calling resize
71
+ chart.resize();
72
+ // Get image buffer from canvas
73
+ const imageBuffer = canvas.toBuffer("image/jpeg");
74
+ // Cleanup
75
+ chart.dispose();
76
+ return imageBuffer;
77
+ }
78
+ catch (error) {
79
+ console.error("Error generating chart in Node.js:", error);
80
+ throw new Error(`Failed to generate chart: ${error instanceof Error ? error.message : "Unknown error"}`);
81
+ }
82
+ }
83
+ /**
84
+ * Generate chart in browser environment
85
+ */
86
+ function generateChartInBrowser(dataTable, chartType, chartOptions) {
87
+ try {
88
+ const width = Number(chartOptions.Width);
89
+ const height = Number(chartOptions.height);
90
+ // Create temporary canvas element
91
+ const canvas = document.createElement("canvas");
92
+ canvas.width = width;
93
+ canvas.height = height;
94
+ canvas.style.position = "absolute";
95
+ canvas.style.left = "-9999px";
96
+ document.body.appendChild(canvas);
97
+ // Initialize ECharts with canvas
98
+ const chart = echarts.init(canvas, null, {
99
+ renderer: "canvas",
100
+ useDirtyRect: false,
101
+ width: width,
102
+ height: height,
103
+ });
104
+ // Convert data table to chart configuration
105
+ const config = convertDataTableToChartConfig(dataTable, chartType, chartOptions);
106
+ // Set chart options
107
+ chart.setOption(config);
108
+ // Get image data
109
+ const imageDataUrl = chart.getDataURL({
110
+ type: "jpeg",
111
+ pixelRatio: 1,
112
+ backgroundColor: "#fff",
113
+ });
114
+ // Convert data URL to buffer
115
+ const base64Data = imageDataUrl.replace(/^data:image\/jpeg;base64,/, "");
116
+ const imageBuffer = Buffer.from(base64Data, "base64");
117
+ // Cleanup
118
+ chart.dispose();
119
+ document.body.removeChild(canvas);
120
+ return imageBuffer;
121
+ }
122
+ catch (error) {
123
+ console.error("Error generating chart in browser:", error);
124
+ throw new Error(`Failed to generate chart: ${error instanceof Error ? error.message : "Unknown error"}`);
125
+ }
126
+ }
127
+ /**
128
+ * Convert SmeupDataTable to ECharts configuration
129
+ */
130
+ function convertDataTableToChartConfig(dataTable, chartType, chartOptions) {
131
+ if (!dataTable.columns || !dataTable.rows || dataTable.rows.length === 0) {
132
+ throw new Error("Invalid data table: missing columns or rows");
133
+ }
134
+ // Get visible columns
135
+ const visibleColumns = dataTable.columns.filter(col => col.visible !== false);
136
+ if (visibleColumns.length < 2) {
137
+ throw new Error("Data table must have at least 2 visible columns for chart generation");
138
+ }
139
+ // First column is typically used for categories/labels
140
+ const categoryColumn = visibleColumns[0];
141
+ const seriesColumns = chartOptions.Series?.split("|");
142
+ if (!seriesColumns || seriesColumns.length === 0) {
143
+ throw new Error("Chart options must specify at least one series");
144
+ }
145
+ const dataColumns = seriesColumns
146
+ .map(name => visibleColumns.find(col => col.name === name))
147
+ .filter((column) => column !== undefined);
148
+ if (dataColumns.length === 0) {
149
+ throw new Error("No valid data columns found for chart series");
150
+ }
151
+ // Extract categories from first column
152
+ const categories = dataTable.rows.map(row => row.cells?.[categoryColumn.name]?.value?.toString() || "");
153
+ // Extract data series from remaining columns
154
+ const normalizedType = normalizeChartType(chartType);
155
+ const series = dataColumns.map(column => {
156
+ const data = dataTable.rows.map(row => {
157
+ const cellValue = row.cells?.[column.name]?.value;
158
+ return parseFloat(cellValue?.toString() || "0") || 0;
159
+ });
160
+ const seriesData = chartType.toLowerCase() === "pie"
161
+ ? data.map((value, index) => ({ value, name: categories[index] }))
162
+ : data;
163
+ // Create properly typed series based on chart type
164
+ switch (normalizedType) {
165
+ case "pie":
166
+ return {
167
+ name: column.title || column.name,
168
+ type: "pie",
169
+ data: seriesData,
170
+ };
171
+ case "line":
172
+ return {
173
+ name: column.title || column.name,
174
+ type: "line",
175
+ data: seriesData,
176
+ lineStyle: { width: 8 },
177
+ };
178
+ case "bar":
179
+ return {
180
+ name: column.title || column.name,
181
+ type: "bar",
182
+ data: seriesData,
183
+ };
184
+ case "scatter":
185
+ return {
186
+ name: column.title || column.name,
187
+ type: "scatter",
188
+ data: seriesData,
189
+ };
190
+ default:
191
+ return {
192
+ name: column.title || column.name,
193
+ type: "bar",
194
+ data: seriesData,
195
+ };
196
+ }
197
+ });
198
+ // Build chart configuration based on type
199
+ const config = {
200
+ tooltip: {
201
+ trigger: chartType.toLowerCase() === "pie" ? "item" : "axis",
202
+ },
203
+ series,
204
+ backgroundColor: "#fff",
205
+ textStyle: {
206
+ fontSize: 36,
207
+ },
208
+ };
209
+ // Add legend for multiple series or pie charts
210
+ if (series.length > 1 || chartType.toLowerCase() === "pie") {
211
+ config.legend = {
212
+ data: series.map(s => s.name),
213
+ textStyle: { fontSize: 32 },
214
+ };
215
+ }
216
+ // Add axes for non-pie charts
217
+ if (chartType.toLowerCase() !== "pie") {
218
+ config.xAxis = {
219
+ type: "category",
220
+ data: categories,
221
+ axisLabel: { fontSize: 32 },
222
+ };
223
+ config.yAxis = {
224
+ type: "value",
225
+ axisLabel: { fontSize: 32 },
226
+ };
227
+ }
228
+ return config;
229
+ }
230
+ /**
231
+ * Normalize chart type to ECharts supported types
232
+ */
233
+ function normalizeChartType(chartType) {
234
+ const type = chartType.toLowerCase();
235
+ switch (type) {
236
+ case "bar":
237
+ case "column":
238
+ return "bar";
239
+ case "line":
240
+ return "line";
241
+ case "pie":
242
+ return "pie";
243
+ case "scatter":
244
+ return "scatter";
245
+ default:
246
+ console.warn(`Unknown chart type: ${chartType}, defaulting to bar`);
247
+ return "bar";
248
+ }
249
+ }
250
+ //# sourceMappingURL=charts-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts-generator.js","sourceRoot":"","sources":["../../../src/converters/images/charts-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import * as echarts from \"echarts\";\nimport type { EChartsOption } from \"echarts\";\nimport { SmeupDataTable } from \"../../types/data-structures/smeupDataTable.js\";\nimport { ChartOptions } from \"../../types/index.js\";\n\n/**\n * Converts SmeupDataTable to chart image buffer\n * @param dataTable - SmeupDataTable containing the data\n * @param chartType - Type of chart (bar, line, pie, scatter)\n * @returns Promise<Buffer> containing the chart image\n */\nexport const dataTableToChart = async (\n dataTable: SmeupDataTable,\n chartType: string,\n chartOptions: ChartOptions,\n): Promise<Buffer> => {\n // Check if we're in Node.js or browser environment\n const isNode = typeof window === \"undefined\";\n\n if (isNode) {\n return await generateChartInNode(dataTable, chartType, chartOptions);\n } else {\n return generateChartInBrowser(dataTable, chartType, chartOptions);\n }\n};\n\n/**\n * Generate chart in Node.js environment using canvas\n */\nasync function generateChartInNode(\n dataTable: SmeupDataTable,\n chartType: string,\n chartOptions: ChartOptions,\n): Promise<Buffer> {\n try {\n // Dynamic import for Node.js canvas\n const { createCanvas } = await import(\"canvas\");\n\n const width = Number(chartOptions.Width);\n const height = Number(chartOptions.Height);\n\n // Create canvas\n const canvas = createCanvas(width, height);\n\n // Create a minimal DOM-like environment for ECharts\n const mockElement = {\n clientWidth: width,\n clientHeight: width,\n style: {},\n addEventListener: () => {},\n removeEventListener: () => {},\n getAttribute: () => null,\n setAttribute: () => {},\n getContext: (type: string) => {\n if (type === \"2d\") {\n return canvas.getContext(\"2d\");\n }\n return null;\n },\n appendChild: () => {},\n removeChild: () => {},\n ownerDocument: {\n createElement: (tagName: string) => {\n if (tagName === \"canvas\") {\n return createCanvas(width, height);\n }\n return mockElement;\n },\n createElementNS: () => mockElement,\n defaultView: {\n getComputedStyle: () => ({ getPropertyValue: () => \"\" }),\n },\n },\n };\n\n // Initialize ECharts with the mock element\n const chart = echarts.init(mockElement as unknown as HTMLElement, null, {\n renderer: \"canvas\",\n useDirtyRect: false,\n width: width,\n height: height,\n });\n\n // Convert data table to chart configuration\n const config = convertDataTableToChartConfig(\n dataTable,\n chartType,\n chartOptions,\n );\n\n // Set chart options\n chart.setOption(config as EChartsOption);\n\n // Force render by calling resize\n chart.resize();\n\n // Get image buffer from canvas\n const imageBuffer = canvas.toBuffer(\"image/jpeg\");\n\n // Cleanup\n chart.dispose();\n\n return imageBuffer;\n } catch (error) {\n console.error(\"Error generating chart in Node.js:\", error);\n throw new Error(\n `Failed to generate chart: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n}\n\n/**\n * Generate chart in browser environment\n */\nfunction generateChartInBrowser(\n dataTable: SmeupDataTable,\n chartType: string,\n chartOptions: ChartOptions,\n): Buffer {\n try {\n const width = Number(chartOptions.Width);\n const height = Number(chartOptions.height);\n // Create temporary canvas element\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n canvas.style.position = \"absolute\";\n canvas.style.left = \"-9999px\";\n document.body.appendChild(canvas);\n\n // Initialize ECharts with canvas\n const chart = echarts.init(canvas, null, {\n renderer: \"canvas\",\n useDirtyRect: false,\n width: width,\n height: height,\n });\n\n // Convert data table to chart configuration\n const config = convertDataTableToChartConfig(\n dataTable,\n chartType,\n chartOptions,\n );\n\n // Set chart options\n chart.setOption(config as EChartsOption);\n\n // Get image data\n const imageDataUrl = chart.getDataURL({\n type: \"jpeg\",\n pixelRatio: 1,\n backgroundColor: \"#fff\",\n });\n\n // Convert data URL to buffer\n const base64Data = imageDataUrl.replace(/^data:image\\/jpeg;base64,/, \"\");\n const imageBuffer = Buffer.from(base64Data, \"base64\");\n\n // Cleanup\n chart.dispose();\n document.body.removeChild(canvas);\n\n return imageBuffer;\n } catch (error) {\n console.error(\"Error generating chart in browser:\", error);\n throw new Error(\n `Failed to generate chart: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n}\n\n/**\n * Convert SmeupDataTable to ECharts configuration\n */\nfunction convertDataTableToChartConfig(\n dataTable: SmeupDataTable,\n chartType: string,\n chartOptions: ChartOptions,\n): EChartsOption {\n if (!dataTable.columns || !dataTable.rows || dataTable.rows.length === 0) {\n throw new Error(\"Invalid data table: missing columns or rows\");\n }\n\n // Get visible columns\n const visibleColumns = dataTable.columns.filter(col => col.visible !== false);\n\n if (visibleColumns.length < 2) {\n throw new Error(\n \"Data table must have at least 2 visible columns for chart generation\",\n );\n }\n\n // First column is typically used for categories/labels\n const categoryColumn = visibleColumns[0];\n const seriesColumns = chartOptions.Series?.split(\"|\");\n if (!seriesColumns || seriesColumns.length === 0) {\n throw new Error(\"Chart options must specify at least one series\");\n }\n const dataColumns = seriesColumns\n .map(name => visibleColumns.find(col => col.name === name))\n .filter(\n (column): column is NonNullable<typeof column> => column !== undefined,\n );\n\n if (dataColumns.length === 0) {\n throw new Error(\"No valid data columns found for chart series\");\n }\n\n // Extract categories from first column\n const categories = dataTable.rows.map(\n row => row.cells?.[categoryColumn.name]?.value?.toString() || \"\",\n );\n\n // Extract data series from remaining columns\n const normalizedType = normalizeChartType(chartType);\n const series = dataColumns.map(column => {\n const data = dataTable.rows.map(row => {\n const cellValue = row.cells?.[column.name]?.value;\n return parseFloat(cellValue?.toString() || \"0\") || 0;\n });\n\n const seriesData =\n chartType.toLowerCase() === \"pie\"\n ? data.map((value, index) => ({ value, name: categories[index] }))\n : data;\n\n // Create properly typed series based on chart type\n switch (normalizedType) {\n case \"pie\":\n return {\n name: column.title || column.name,\n type: \"pie\" as const,\n data: seriesData,\n };\n case \"line\":\n return {\n name: column.title || column.name,\n type: \"line\" as const,\n data: seriesData,\n lineStyle: { width: 8 },\n };\n case \"bar\":\n return {\n name: column.title || column.name,\n type: \"bar\" as const,\n data: seriesData,\n };\n case \"scatter\":\n return {\n name: column.title || column.name,\n type: \"scatter\" as const,\n data: seriesData,\n };\n default:\n return {\n name: column.title || column.name,\n type: \"bar\" as const,\n data: seriesData,\n };\n }\n });\n\n // Build chart configuration based on type\n const config: EChartsOption = {\n tooltip: {\n trigger: chartType.toLowerCase() === \"pie\" ? \"item\" : \"axis\",\n },\n series,\n backgroundColor: \"#fff\",\n textStyle: {\n fontSize: 36,\n },\n };\n // Add legend for multiple series or pie charts\n if (series.length > 1 || chartType.toLowerCase() === \"pie\") {\n config.legend = {\n data: series.map(s => s.name),\n textStyle: { fontSize: 32 },\n };\n }\n\n // Add axes for non-pie charts\n if (chartType.toLowerCase() !== \"pie\") {\n config.xAxis = {\n type: \"category\",\n data: categories,\n axisLabel: { fontSize: 32 },\n };\n config.yAxis = {\n type: \"value\",\n axisLabel: { fontSize: 32 },\n };\n }\n\n return config;\n}\n\n/**\n * Normalize chart type to ECharts supported types\n */\nfunction normalizeChartType(chartType: string): string {\n const type = chartType.toLowerCase();\n switch (type) {\n case \"bar\":\n case \"column\":\n return \"bar\";\n case \"line\":\n return \"line\";\n case \"pie\":\n return \"pie\";\n case \"scatter\":\n return \"scatter\";\n default:\n console.warn(`Unknown chart type: ${chartType}, defaulting to bar`);\n return \"bar\";\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { UserOptions } from "jspdf-autotable";
2
+ import { CellStyleData, CellValueProps } from "./pdf-converter.types.js";
3
+ export declare const getAutoTableOptions: (visibleHeaders: string[], data: CellValueProps[][], optimalFontSize: number, cellStyles: CellStyleData[][], logoBase64?: string) => UserOptions;
@@ -0,0 +1,89 @@
1
+ export const getAutoTableOptions = (visibleHeaders, data, optimalFontSize, cellStyles, logoBase64) => {
2
+ const { styles, columnStyles, headStyles } = getTableStyles(visibleHeaders, optimalFontSize);
3
+ return {
4
+ head: [visibleHeaders],
5
+ body: data.map(row => row.map(cell => cell.text)),
6
+ startY: 25,
7
+ margin: { left: 5, right: 5, top: 25, bottom: 10 },
8
+ styles,
9
+ columnStyles,
10
+ headStyles,
11
+ didDrawPage: dataArg => didDrawPageHandler(dataArg, logoBase64),
12
+ didParseCell: dataArg => didParseCellHandler(dataArg, cellStyles),
13
+ };
14
+ };
15
+ const getTableStyles = (visibleHeaders, optimalFontSize) => {
16
+ const styles = {
17
+ font: "helvetica",
18
+ fontSize: optimalFontSize + 1,
19
+ cellPadding: 1,
20
+ overflow: "visible",
21
+ cellWidth: "auto",
22
+ minCellWidth: 5,
23
+ };
24
+ const columnStyles = {
25
+ ...Object.fromEntries(visibleHeaders.map((_, index) => [
26
+ index,
27
+ {
28
+ cellWidth: "wrap",
29
+ halign: "left",
30
+ overflow: "visible",
31
+ cellPadding: { top: 1, right: 1, bottom: 1, left: 1 },
32
+ },
33
+ ])),
34
+ };
35
+ const headStyles = {
36
+ fillColor: [255, 0, 0],
37
+ textColor: [255, 255, 255],
38
+ fontStyle: "bold",
39
+ halign: "center",
40
+ };
41
+ return { styles, columnStyles, headStyles };
42
+ };
43
+ const didParseCellHandler = (dataArg, cellStyles) => {
44
+ if (dataArg.section === "body") {
45
+ const rowIndex = dataArg.row.index;
46
+ const colIndex = dataArg.column.index;
47
+ const cellStyle = cellStyles[rowIndex]?.[colIndex];
48
+ if (cellStyle) {
49
+ // Apply styles from the Excel cell
50
+ if (cellStyle.fontStyle) {
51
+ dataArg.cell.styles.fontStyle = cellStyle.fontStyle;
52
+ }
53
+ if (cellStyle.textColor) {
54
+ dataArg.cell.styles.textColor = cellStyle.textColor;
55
+ }
56
+ if (cellStyle.fillColor) {
57
+ dataArg.cell.styles.fillColor = cellStyle.fillColor;
58
+ }
59
+ if (cellStyle.halign === "right") {
60
+ dataArg.cell.styles.halign = "right";
61
+ }
62
+ }
63
+ }
64
+ };
65
+ const didDrawPageHandler = (dataArg, logoBase64) => {
66
+ // Add the logo on each page
67
+ if (logoBase64) {
68
+ const pageWidth = dataArg.doc.internal.pageSize.getWidth();
69
+ const logoWidth = 40; // Logo width in mm
70
+ const logoHeight = 15; // Logo height in mm
71
+ const logoX = pageWidth - logoWidth - 10; // 10mm from the right margin
72
+ const logoY = 5; // 5mm from the top margin
73
+ // Add the text "Intestazione" aligned to the left margin
74
+ const text = "Intestazione";
75
+ const textFontSize = 14;
76
+ const textX = 5;
77
+ const textY = 10;
78
+ dataArg.doc.setFontSize(textFontSize);
79
+ dataArg.doc.setFont("helvetica", "normal");
80
+ dataArg.doc.text(text, textX, textY, { align: "left" });
81
+ try {
82
+ dataArg.doc.addImage(logoBase64, "PNG", logoX, logoY, logoWidth, logoHeight);
83
+ }
84
+ catch (error) {
85
+ console.warn("Error adding logo:", error);
86
+ }
87
+ }
88
+ };
89
+ //# sourceMappingURL=autotable-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autotable-renderer.js","sourceRoot":"","sources":["../../../src/converters/pdf/autotable-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { UserOptions } from \"jspdf-autotable\";\nimport { CellStyleData, CellValueProps } from \"./pdf-converter.types.js\";\nimport type {\n Styles,\n OverflowType,\n FontStyle,\n CellHookData,\n HookData,\n} from \"jspdf-autotable\";\n\ntype TableStyles = {\n styles: Partial<Styles>;\n columnStyles: Record<string, Partial<Styles>>;\n headStyles: Partial<Styles>;\n};\n\nexport const getAutoTableOptions = (\n visibleHeaders: string[],\n data: CellValueProps[][],\n optimalFontSize: number,\n cellStyles: CellStyleData[][],\n logoBase64?: string,\n): UserOptions => {\n const { styles, columnStyles, headStyles } = getTableStyles(\n visibleHeaders,\n optimalFontSize,\n );\n return {\n head: [visibleHeaders],\n body: data.map(row => row.map(cell => cell.text)),\n startY: 25,\n margin: { left: 5, right: 5, top: 25, bottom: 10 },\n styles,\n columnStyles,\n headStyles,\n didDrawPage: dataArg => didDrawPageHandler(dataArg, logoBase64),\n didParseCell: dataArg => didParseCellHandler(dataArg, cellStyles),\n };\n};\n\nconst getTableStyles = (\n visibleHeaders: string[],\n optimalFontSize: number,\n): TableStyles => {\n const styles: Partial<Styles> = {\n font: \"helvetica\",\n fontSize: optimalFontSize + 1,\n cellPadding: 1,\n overflow: \"visible\" as OverflowType,\n cellWidth: \"auto\",\n minCellWidth: 5,\n };\n\n const columnStyles: { [key: string]: Partial<Styles> } = {\n ...Object.fromEntries(\n visibleHeaders.map((_, index) => [\n index,\n {\n cellWidth: \"wrap\",\n halign: \"left\",\n overflow: \"visible\" as OverflowType,\n cellPadding: { top: 1, right: 1, bottom: 1, left: 1 },\n },\n ]),\n ),\n };\n\n const headStyles: Partial<Styles> = {\n fillColor: [255, 0, 0],\n textColor: [255, 255, 255],\n fontStyle: \"bold\" as FontStyle,\n halign: \"center\",\n };\n\n return { styles, columnStyles, headStyles };\n};\n\nconst didParseCellHandler = (\n dataArg: CellHookData,\n cellStyles: CellStyleData[][],\n) => {\n if (dataArg.section === \"body\") {\n const rowIndex = dataArg.row.index;\n const colIndex = dataArg.column.index;\n const cellStyle = cellStyles[rowIndex]?.[colIndex];\n\n if (cellStyle) {\n // Apply styles from the Excel cell\n if (cellStyle.fontStyle) {\n dataArg.cell.styles.fontStyle = cellStyle.fontStyle;\n }\n if (cellStyle.textColor) {\n dataArg.cell.styles.textColor = cellStyle.textColor;\n }\n if (cellStyle.fillColor) {\n dataArg.cell.styles.fillColor = cellStyle.fillColor;\n }\n if (cellStyle.halign === \"right\") {\n dataArg.cell.styles.halign = \"right\";\n }\n }\n }\n};\n\nconst didDrawPageHandler = (dataArg: HookData, logoBase64?: string) => {\n // Add the logo on each page\n if (logoBase64) {\n const pageWidth = dataArg.doc.internal.pageSize.getWidth();\n const logoWidth = 40; // Logo width in mm\n const logoHeight = 15; // Logo height in mm\n const logoX = pageWidth - logoWidth - 10; // 10mm from the right margin\n const logoY = 5; // 5mm from the top margin\n\n // Add the text \"Intestazione\" aligned to the left margin\n const text = \"Intestazione\";\n const textFontSize = 14;\n const textX = 5;\n const textY = 10;\n dataArg.doc.setFontSize(textFontSize);\n dataArg.doc.setFont(\"helvetica\", \"normal\");\n dataArg.doc.text(text, textX, textY, { align: \"left\" });\n\n try {\n dataArg.doc.addImage(\n logoBase64,\n \"PNG\",\n logoX,\n logoY,\n logoWidth,\n logoHeight,\n );\n } catch (error) {\n console.warn(\"Error adding logo:\", error);\n }\n }\n};\n"]}
@@ -0,0 +1 @@
1
+ export declare const createCoverPdf: (title: string, subtitle: string, subtitle2?: string) => ArrayBuffer;
@@ -0,0 +1,26 @@
1
+ import * as jsPDFModule from "jspdf";
2
+ export const createCoverPdf = (title, subtitle, subtitle2) => {
3
+ const doc = new jsPDFModule.jsPDF("landscape");
4
+ const pageWidth = doc.internal.pageSize.getWidth();
5
+ const titleFontSize = 24;
6
+ const subtitleFontSize = 16;
7
+ const subtitle2FontSize = 14;
8
+ let currentY = 45;
9
+ doc.setFont("helvetica", "bold");
10
+ doc.setFontSize(titleFontSize);
11
+ doc.text(title, pageWidth / 2, currentY, { align: "center" });
12
+ currentY += 1;
13
+ if (subtitle) {
14
+ doc.setFont("helvetica", "normal");
15
+ doc.setFontSize(subtitleFontSize);
16
+ currentY += subtitleFontSize - 8;
17
+ doc.text(subtitle, pageWidth / 2, currentY, { align: "center" });
18
+ }
19
+ if (subtitle2) {
20
+ doc.setFontSize(subtitle2FontSize);
21
+ currentY += subtitle2FontSize;
22
+ doc.text(subtitle2, pageWidth / 2, currentY, { align: "center" });
23
+ }
24
+ return doc.output("arraybuffer");
25
+ };
26
+ //# sourceMappingURL=cover-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cover-renderer.js","sourceRoot":"","sources":["../../../src/converters/pdf/cover-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,OAAO,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAa,EACb,QAAgB,EAChB,SAAkB,EAClB,EAAE;IACF,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAC5B,MAAM,iBAAiB,GAAG,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC/B,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,QAAQ,IAAI,CAAC,CAAC;IAEd,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACnC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAClC,QAAQ,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QACnC,QAAQ,IAAI,iBAAiB,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC,CAAC","sourcesContent":["import * as jsPDFModule from \"jspdf\";\n\nexport const createCoverPdf = (\n title: string,\n subtitle: string,\n subtitle2?: string,\n) => {\n const doc = new jsPDFModule.jsPDF(\"landscape\");\n const pageWidth = doc.internal.pageSize.getWidth();\n const titleFontSize = 24;\n const subtitleFontSize = 16;\n const subtitle2FontSize = 14;\n let currentY = 45;\n\n doc.setFont(\"helvetica\", \"bold\");\n doc.setFontSize(titleFontSize);\n doc.text(title, pageWidth / 2, currentY, { align: \"center\" });\n currentY += 1;\n\n if (subtitle) {\n doc.setFont(\"helvetica\", \"normal\");\n doc.setFontSize(subtitleFontSize);\n currentY += subtitleFontSize - 8;\n doc.text(subtitle, pageWidth / 2, currentY, { align: \"center\" });\n }\n\n if (subtitle2) {\n doc.setFontSize(subtitle2FontSize);\n currentY += subtitle2FontSize;\n doc.text(subtitle2, pageWidth / 2, currentY, { align: \"center\" });\n }\n\n return doc.output(\"arraybuffer\");\n};\n"]}