@sme.up/doc-alchemist 1.5.0 → 1.6.0-20251215100834

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 (62) hide show
  1. package/dist/converters/excel/commons.d.ts +1 -0
  2. package/dist/converters/excel/commons.js +11 -1
  3. package/dist/converters/excel/commons.js.map +1 -1
  4. package/dist/converters/excel-converter.js +2 -1
  5. package/dist/converters/excel-converter.js.map +1 -1
  6. package/dist/converters/images/charts-converter-types.d.ts +15 -0
  7. package/dist/converters/images/charts-converter-types.js +11 -0
  8. package/dist/converters/images/charts-converter-types.js.map +1 -0
  9. package/dist/converters/images/{charts-generator.d.ts → charts-converter.d.ts} +4 -4
  10. package/dist/converters/images/charts-converter.js +82 -0
  11. package/dist/converters/images/charts-converter.js.map +1 -0
  12. package/dist/converters/images/charts-data-converter.d.ts +7 -0
  13. package/dist/converters/images/charts-data-converter.js +94 -0
  14. package/dist/converters/images/charts-data-converter.js.map +1 -0
  15. package/dist/converters/pdf/pdfmake/adapter-processor.js +4 -2
  16. package/dist/converters/pdf/pdfmake/adapter-processor.js.map +1 -1
  17. package/dist/converters/pdf/pdfmake/adapters/chart-adapter.d.ts +38 -0
  18. package/dist/converters/pdf/pdfmake/adapters/chart-adapter.js +117 -0
  19. package/dist/converters/pdf/pdfmake/adapters/chart-adapter.js.map +1 -0
  20. package/dist/converters/pdf/pdfmake/{image-adapter.d.ts → adapters/image-adapter.d.ts} +1 -1
  21. package/dist/converters/pdf/pdfmake/adapters/image-adapter.js.map +1 -0
  22. package/dist/converters/pdf/pdfmake/adapters/layout-adapter.d.ts +16 -0
  23. package/dist/converters/pdf/pdfmake/adapters/layout-adapter.js +76 -0
  24. package/dist/converters/pdf/pdfmake/adapters/layout-adapter.js.map +1 -0
  25. package/dist/converters/pdf/pdfmake/adapters/page-element-adapter.d.ts +9 -0
  26. package/dist/converters/pdf/pdfmake/{page-element-adapter.js → adapters/page-element-adapter.js} +14 -7
  27. package/dist/converters/pdf/pdfmake/adapters/page-element-adapter.js.map +1 -0
  28. package/dist/converters/pdf/pdfmake/{table-adapter.d.ts → adapters/table-adapter.d.ts} +1 -1
  29. package/dist/converters/pdf/pdfmake/{table-adapter.js → adapters/table-adapter.js} +5 -5
  30. package/dist/converters/pdf/pdfmake/adapters/table-adapter.js.map +1 -0
  31. package/dist/converters/pdf/pdfmake/pdfmake.types.d.ts +28 -2
  32. package/dist/converters/pdf/pdfmake/pdfmake.types.js.map +1 -1
  33. package/dist/converters/pdf-converter.d.ts +0 -2
  34. package/dist/converters/pdf-converter.js +13 -11
  35. package/dist/converters/pdf-converter.js.map +1 -1
  36. package/dist/index.d.ts +4 -4
  37. package/dist/index.js +5 -6
  38. package/dist/index.js.map +1 -1
  39. package/dist/types/component.d.ts +2 -2
  40. package/dist/types/component.js.map +1 -1
  41. package/dist/types/data-structures/smeupSch.d.ts +1 -1
  42. package/dist/types/data-structures/smeupSch.js.map +1 -1
  43. package/dist/types/general.d.ts +4 -0
  44. package/dist/types/general.js +6 -1
  45. package/dist/types/general.js.map +1 -1
  46. package/dist/types/index.d.ts +0 -5
  47. package/dist/types/index.js.map +1 -1
  48. package/dist/utils/datastructure-utility.js.map +1 -1
  49. package/package.json +1 -2
  50. package/dist/converters/images/charts-generator.js +0 -287
  51. package/dist/converters/images/charts-generator.js.map +0 -1
  52. package/dist/converters/pdf/pdfmake/image-adapter.js.map +0 -1
  53. package/dist/converters/pdf/pdfmake/page-element-adapter.d.ts +0 -8
  54. package/dist/converters/pdf/pdfmake/page-element-adapter.js.map +0 -1
  55. package/dist/converters/pdf/pdfmake/table-adapter.js.map +0 -1
  56. package/dist/converters/pdf/sch-converter.d.ts +0 -3
  57. package/dist/converters/pdf/sch-converter.js +0 -136
  58. package/dist/converters/pdf/sch-converter.js.map +0 -1
  59. package/dist/types/helpers.d.ts +0 -4
  60. package/dist/types/helpers.js +0 -9
  61. package/dist/types/helpers.js.map +0 -1
  62. /package/dist/converters/pdf/pdfmake/{image-adapter.js → adapters/image-adapter.js} +0 -0
package/dist/index.js CHANGED
@@ -1,23 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SupportedExportFormats = exports.preProcessPdfMakeDocument = exports.smeupTableToPdfMakeTableAdapter = exports.funToSmeupTableAdapter = exports.createAdapterRegistry = exports.dataTableToChart = exports.fillPdfForm = exports.pdfmakeDocumentToPdfData = exports.dataTableToPdfData = exports.schedaToPdfData = exports.dataTreeToExcelData = exports.dataTableToExcelData = void 0;
3
+ exports.SupportedExportFormats = exports.preProcessPdfMakeDocument = exports.smeupTableToPdfMakeTableAdapter = exports.funToSmeupTableAdapter = exports.createAdapterRegistry = exports.dataTableToChart = exports.fillPdfForm = exports.pdfmakeDocumentToPdfData = exports.dataTableToPdfData = exports.dataTreeToExcelData = exports.dataTableToExcelData = void 0;
4
4
  // Public API exports
5
5
  var excel_converter_1 = require("./converters/excel-converter");
6
6
  Object.defineProperty(exports, "dataTableToExcelData", { enumerable: true, get: function () { return excel_converter_1.dataTableToExcelData; } });
7
7
  Object.defineProperty(exports, "dataTreeToExcelData", { enumerable: true, get: function () { return excel_converter_1.dataTreeToExcelData; } });
8
8
  var pdf_converter_1 = require("./converters/pdf-converter");
9
- Object.defineProperty(exports, "schedaToPdfData", { enumerable: true, get: function () { return pdf_converter_1.schedaToPdfData; } });
10
9
  Object.defineProperty(exports, "dataTableToPdfData", { enumerable: true, get: function () { return pdf_converter_1.dataTableToPdfData; } });
11
10
  Object.defineProperty(exports, "pdfmakeDocumentToPdfData", { enumerable: true, get: function () { return pdf_converter_1.pdfmakeDocumentToPdfData; } });
12
11
  Object.defineProperty(exports, "fillPdfForm", { enumerable: true, get: function () { return pdf_converter_1.fillPdfForm; } });
13
- var charts_generator_1 = require("./converters/images/charts-generator");
14
- Object.defineProperty(exports, "dataTableToChart", { enumerable: true, get: function () { return charts_generator_1.dataTableToChart; } });
12
+ var charts_converter_1 = require("./converters/images/charts-converter");
13
+ Object.defineProperty(exports, "dataTableToChart", { enumerable: true, get: function () { return charts_converter_1.dataTableToChart; } });
15
14
  // Pdfmake adapter system
16
15
  var adapter_registry_1 = require("./converters/pdf/pdfmake/adapter-registry");
17
16
  Object.defineProperty(exports, "createAdapterRegistry", { enumerable: true, get: function () { return adapter_registry_1.createAdapterRegistry; } });
18
- var table_adapter_1 = require("./converters/pdf/pdfmake/table-adapter");
17
+ var table_adapter_1 = require("./converters/pdf/pdfmake/adapters/table-adapter");
19
18
  Object.defineProperty(exports, "funToSmeupTableAdapter", { enumerable: true, get: function () { return table_adapter_1.funToSmeupTableAdapter; } });
20
- var table_adapter_2 = require("./converters/pdf/pdfmake/table-adapter");
19
+ var table_adapter_2 = require("./converters/pdf/pdfmake/adapters/table-adapter");
21
20
  Object.defineProperty(exports, "smeupTableToPdfMakeTableAdapter", { enumerable: true, get: function () { return table_adapter_2.smeupTableToPdfMakeTableAdapter; } });
22
21
  var adapter_processor_1 = require("./converters/pdf/pdfmake/adapter-processor");
23
22
  Object.defineProperty(exports, "preProcessPdfMakeDocument", { enumerable: true, get: function () { return adapter_processor_1.preProcessPdfMakeDocument; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qBAAqB;AACrB,gEAGsC;AAFpC,uHAAA,oBAAoB,OAAA;AACpB,sHAAA,mBAAmB,OAAA;AAGrB,4DAKoC;AAJlC,gHAAA,eAAe,OAAA;AACf,mHAAA,kBAAkB,OAAA;AAClB,yHAAA,wBAAwB,OAAA;AACxB,4GAAA,WAAW,OAAA;AAIb,yEAAwE;AAA/D,oHAAA,gBAAgB,OAAA;AAEzB,yBAAyB;AACzB,8EAAkF;AAAzE,yHAAA,qBAAqB,OAAA;AAC9B,wEAAgF;AAAvE,uHAAA,sBAAsB,OAAA;AAC/B,wEAAyF;AAAhF,gIAAA,+BAA+B,OAAA;AACxC,gFAAuF;AAA9E,8HAAA,yBAAyB,OAAA;AAWlC,uCAAuD;AAA9C,+GAAA,sBAAsB,OAAA","sourcesContent":["// Public API exports\nexport {\n dataTableToExcelData,\n dataTreeToExcelData,\n} from \"./converters/excel-converter\";\n\nexport {\n schedaToPdfData,\n dataTableToPdfData,\n pdfmakeDocumentToPdfData,\n fillPdfForm,\n} from \"./converters/pdf-converter\";\nexport type { FillPdfFormOptions } from \"./converters/pdf-converter\";\n\nexport { dataTableToChart } from \"./converters/images/charts-generator\";\n\n// Pdfmake adapter system\nexport { createAdapterRegistry } from \"./converters/pdf/pdfmake/adapter-registry\";\nexport { funToSmeupTableAdapter } from \"./converters/pdf/pdfmake/table-adapter\";\nexport { smeupTableToPdfMakeTableAdapter } from \"./converters/pdf/pdfmake/table-adapter\";\nexport { preProcessPdfMakeDocument } from \"./converters/pdf/pdfmake/adapter-processor\";\n\nexport type {\n PdfmakeAdapter,\n PdfMakeConverterContext,\n AdapterRegistry,\n AdapterError,\n} from \"./converters/pdf/pdfmake/pdfmake.types\";\n\n// Export types that users might need\nexport type { WebupManagerData, GenericObject } from \"./types/index\";\nexport { SupportedExportFormats } from \"./types/index\";\nexport type { SmeupDataTable } from \"./types/data-structures/smeupDataTable\";\nexport type { SmeupDataTree } from \"./types/data-structures/smeupDataTree\";\n\nexport type ColumnGroup = {\n column: string;\n visible: boolean;\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qBAAqB;AACrB,gEAGsC;AAFpC,uHAAA,oBAAoB,OAAA;AACpB,sHAAA,mBAAmB,OAAA;AAGrB,4DAIoC;AAHlC,mHAAA,kBAAkB,OAAA;AAClB,yHAAA,wBAAwB,OAAA;AACxB,4GAAA,WAAW,OAAA;AAIb,yEAAwE;AAA/D,oHAAA,gBAAgB,OAAA;AAEzB,yBAAyB;AACzB,8EAAkF;AAAzE,yHAAA,qBAAqB,OAAA;AAC9B,iFAAyF;AAAhF,uHAAA,sBAAsB,OAAA;AAC/B,iFAAkG;AAAzF,gIAAA,+BAA+B,OAAA;AACxC,gFAAuF;AAA9E,8HAAA,yBAAyB,OAAA;AAWlC,uCAAuD;AAA9C,+GAAA,sBAAsB,OAAA","sourcesContent":["// Public API exports\nexport {\n dataTableToExcelData,\n dataTreeToExcelData,\n} from \"./converters/excel-converter\";\n\nexport {\n dataTableToPdfData,\n pdfmakeDocumentToPdfData,\n fillPdfForm,\n} from \"./converters/pdf-converter\";\nexport type { FillPdfFormOptions } from \"./converters/pdf-converter\";\n\nexport { dataTableToChart } from \"./converters/images/charts-converter\";\n\n// Pdfmake adapter system\nexport { createAdapterRegistry } from \"./converters/pdf/pdfmake/adapter-registry\";\nexport { funToSmeupTableAdapter } from \"./converters/pdf/pdfmake/adapters/table-adapter\";\nexport { smeupTableToPdfMakeTableAdapter } from \"./converters/pdf/pdfmake/adapters/table-adapter\";\nexport { preProcessPdfMakeDocument } from \"./converters/pdf/pdfmake/adapter-processor\";\n\nexport type {\n PdfmakeAdapter,\n PdfMakeConverterContext,\n AdapterRegistry,\n AdapterError,\n} from \"./converters/pdf/pdfmake/pdfmake.types\";\n\n// Export types that users might need\nexport type { WebupManagerData, GenericObject } from \"./types/index\";\nexport { SupportedExportFormats } from \"./types/index\";\nexport type { SmeupDataTable } from \"./types/data-structures/smeupDataTable\";\nexport type { SmeupDataTree } from \"./types/data-structures/smeupDataTree\";\n\nexport type ColumnGroup = {\n column: string;\n visible: boolean;\n};\n"]}
@@ -48,6 +48,6 @@ export declare enum ToolbarState {
48
48
  COLLAPSED = "Collapsed",
49
49
  INVISIBLE = "Invisible"
50
50
  }
51
- export interface ComponentOptions extends Record<string, string> {
52
- Name: string;
51
+ export interface ComponentOptions {
52
+ Name?: string;
53
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/types/component.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,MAsCX;AAtCD,WAAY,MAAM;IAChB,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;AACb,CAAC,EAtCW,MAAM,sBAAN,MAAM,QAsCjB;AAED;;GAEG;AACH,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,qCAAqB,CAAA;IACrB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA;AACzB,CAAC,EAJW,YAAY,4BAAZ,YAAY,QAIvB","sourcesContent":["/**\n * Supported shapes.\n */\nexport enum Shapes {\n ACC = \"ACC\",\n ACT = \"ACT\",\n ATM = \"ATM\",\n BOX = \"BOX\",\n BTN = \"BTN\",\n CAL = \"CAL\",\n CHA = \"CHA\", // = EXA\n DFT = \"DFT\",\n DYN = \"DYN\",\n DSH = \"DSH\",\n EML = \"EML\",\n EXA = \"EXA\", // = CHA\n EXB = \"EXB\", // = MAT\n EXD = \"EXD\", // = SCH\n EXU = \"EXU\",\n FBK = \"FBK\",\n FLD = \"FLD\",\n FOR = \"FOR\",\n GNT = \"GNT\",\n HTM = \"HTM\",\n IML = \"IML\",\n IMG = \"IMG\",\n INT = \"INT\",\n INP = \"INP\",\n JSO = \"JSO\",\n LAB = \"LAB\",\n MAT = \"MAT\", // = EXB\n PLN = \"PLN\",\n PDF = \"PDF\",\n SCH = \"SCH\", // = EXD\n SPL = \"SPL\",\n TED = \"TED\",\n TRE = \"TRE\",\n TXT = \"TXT\",\n CND = \"CND\",\n UNK = \"UNK\",\n OGN = \"OGN\",\n}\n\n/**\n * ToolbarState Info.\n */\nexport enum ToolbarState {\n EXPANDED = \"Expanded\",\n COLLAPSED = \"Collapsed\",\n INVISIBLE = \"Invisible\",\n}\n\nexport interface ComponentOptions extends Record<string, string> {\n Name: string;\n}\n\n"]}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/types/component.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,MAsCX;AAtCD,WAAY,MAAM;IAChB,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;IACX,qBAAW,CAAA;AACb,CAAC,EAtCW,MAAM,sBAAN,MAAM,QAsCjB;AAED;;GAEG;AACH,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,qCAAqB,CAAA;IACrB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA;AACzB,CAAC,EAJW,YAAY,4BAAZ,YAAY,QAIvB","sourcesContent":["/**\n * Supported shapes.\n */\nexport enum Shapes {\n ACC = \"ACC\",\n ACT = \"ACT\",\n ATM = \"ATM\",\n BOX = \"BOX\",\n BTN = \"BTN\",\n CAL = \"CAL\",\n CHA = \"CHA\", // = EXA\n DFT = \"DFT\",\n DYN = \"DYN\",\n DSH = \"DSH\",\n EML = \"EML\",\n EXA = \"EXA\", // = CHA\n EXB = \"EXB\", // = MAT\n EXD = \"EXD\", // = SCH\n EXU = \"EXU\",\n FBK = \"FBK\",\n FLD = \"FLD\",\n FOR = \"FOR\",\n GNT = \"GNT\",\n HTM = \"HTM\",\n IML = \"IML\",\n IMG = \"IMG\",\n INT = \"INT\",\n INP = \"INP\",\n JSO = \"JSO\",\n LAB = \"LAB\",\n MAT = \"MAT\", // = EXB\n PLN = \"PLN\",\n PDF = \"PDF\",\n SCH = \"SCH\", // = EXD\n SPL = \"SPL\",\n TED = \"TED\",\n TRE = \"TRE\",\n TXT = \"TXT\",\n CND = \"CND\",\n UNK = \"UNK\",\n OGN = \"OGN\",\n}\n\n/**\n * ToolbarState Info.\n */\nexport enum ToolbarState {\n EXPANDED = \"Expanded\",\n COLLAPSED = \"Collapsed\",\n INVISIBLE = \"Invisible\",\n}\n\nexport interface ComponentOptions {\n Name?: string;\n}\n"]}
@@ -2,8 +2,8 @@ import { SmeupDataStructure, SmeupDataStructureType, SmeupSetupBase, SmeupVariab
2
2
  import { SmeupDataTable } from "./smeupDataTable";
3
3
  import { SmeupDataTree, SmeupDataNode } from "./smeupDataTree";
4
4
  import { Shapes, ToolbarState } from "../component";
5
- import { YesNo } from "../helpers";
6
5
  import { RawDynamism } from "../dynamism";
6
+ import { YesNo } from "../general";
7
7
  export interface SmeupSch extends SmeupDataStructure {
8
8
  type: SmeupDataStructureType.SmeupScheda;
9
9
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"smeupSch.js","sourceRoot":"","sources":["../../../src/types/data-structures/smeupSch.ts"],"names":[],"mappings":";;;AA0EA,IAAY,YAQX;AARD,WAAY,YAAY;IACtB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,iCAAiB,CAAA;IACjB,+BAAe,CAAA;IACf,+BAAe,CAAA;IACf,iCAAiB,CAAA;IACjB,6BAAa,CAAA;AACf,CAAC,EARW,YAAY,4BAAZ,YAAY,QAQvB","sourcesContent":["import {\n SmeupDataStructure,\n SmeupDataStructureType,\n SmeupSetupBase,\n SmeupVariable,\n} from \"./smeupDataStructure\";\nimport { SmeupDataTable } from \"./smeupDataTable\";\nimport { SmeupDataTree, SmeupDataNode } from \"./smeupDataTree\";\nimport { Shapes, ToolbarState } from \"../component\";\nimport { YesNo } from \"../helpers\";\nimport { RawDynamism } from \"../dynamism\";\n\nexport interface SmeupSch extends SmeupDataStructure {\n type: SmeupDataStructureType.SmeupScheda;\n title: string;\n sections: SmeupSchSection[];\n info?: string;\n id?: string;\n styles?: SmeupStyle[];\n layout?: string;\n /** other setup: for example \"Menu\", left menù */\n laySetup?: unknown;\n dynamisms?: RawDynamism[];\n}\n\nexport interface SmeupSchSection {\n id: string;\n layout: string;\n dim?: string;\n variables?: SmeupVariable[];\n sections?: SmeupSchSection[];\n components?: SmeupSchComponent[];\n type?: SectionTypes;\n}\n\nexport interface SmeupSchComponent {\n type: Shapes;\n title: string;\n load?: boolean;\n subNote?: string;\n id?: string;\n fun?: string;\n data?: SmeupDataTree | SmeupDataTable;\n dynamisms?: RawDynamism[];\n variables?: {\n [key: string]: SmeupVariable;\n };\n options?: SmeupSetupBase;\n icon?: string;\n buttons?: SmeupDataNode[];\n toolbarState?: ToolbarState;\n context?: string;\n}\n\nexport interface SmeupStyle {\n name: string;\n value: SmeupStyleOptions;\n}\n\nexport interface SmeupStyleOptions {\n Align?: string;\n FontBold?: YesNo;\n FontItalic?: YesNo;\n FontName?: string;\n FontSize?: string;\n FontULine?: YesNo;\n FontUnder?: YesNo;\n FontColor?: string;\n BackColor?: string;\n Padding?: string;\n Border?: string;\n TxtOri?: string;\n}\n\nexport enum SectionTypes {\n Acc = \"Acc\",\n Tab = \"Tab\",\n TabVer = \"TabVer\",\n Radio = \"Radio\",\n Combo = \"Combo\",\n OneBut = \"OneBut\",\n Menu = \"Menu\",\n}\n\n"]}
1
+ {"version":3,"file":"smeupSch.js","sourceRoot":"","sources":["../../../src/types/data-structures/smeupSch.ts"],"names":[],"mappings":";;;AA0EA,IAAY,YAQX;AARD,WAAY,YAAY;IACtB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,iCAAiB,CAAA;IACjB,+BAAe,CAAA;IACf,+BAAe,CAAA;IACf,iCAAiB,CAAA;IACjB,6BAAa,CAAA;AACf,CAAC,EARW,YAAY,4BAAZ,YAAY,QAQvB","sourcesContent":["import {\n SmeupDataStructure,\n SmeupDataStructureType,\n SmeupSetupBase,\n SmeupVariable,\n} from \"./smeupDataStructure\";\nimport { SmeupDataTable } from \"./smeupDataTable\";\nimport { SmeupDataTree, SmeupDataNode } from \"./smeupDataTree\";\nimport { Shapes, ToolbarState } from \"../component\";\nimport { RawDynamism } from \"../dynamism\";\nimport { YesNo } from \"../general\";\n\nexport interface SmeupSch extends SmeupDataStructure {\n type: SmeupDataStructureType.SmeupScheda;\n title: string;\n sections: SmeupSchSection[];\n info?: string;\n id?: string;\n styles?: SmeupStyle[];\n layout?: string;\n /** other setup: for example \"Menu\", left menù */\n laySetup?: unknown;\n dynamisms?: RawDynamism[];\n}\n\nexport interface SmeupSchSection {\n id: string;\n layout: string;\n dim?: string;\n variables?: SmeupVariable[];\n sections?: SmeupSchSection[];\n components?: SmeupSchComponent[];\n type?: SectionTypes;\n}\n\nexport interface SmeupSchComponent {\n type: Shapes;\n title: string;\n load?: boolean;\n subNote?: string;\n id?: string;\n fun?: string;\n data?: SmeupDataTree | SmeupDataTable;\n dynamisms?: RawDynamism[];\n variables?: {\n [key: string]: SmeupVariable;\n };\n options?: SmeupSetupBase;\n icon?: string;\n buttons?: SmeupDataNode[];\n toolbarState?: ToolbarState;\n context?: string;\n}\n\nexport interface SmeupStyle {\n name: string;\n value: SmeupStyleOptions;\n}\n\nexport interface SmeupStyleOptions {\n Align?: string;\n FontBold?: YesNo;\n FontItalic?: YesNo;\n FontName?: string;\n FontSize?: string;\n FontULine?: YesNo;\n FontUnder?: YesNo;\n FontColor?: string;\n BackColor?: string;\n Padding?: string;\n Border?: string;\n TxtOri?: string;\n}\n\nexport enum SectionTypes {\n Acc = \"Acc\",\n Tab = \"Tab\",\n TabVer = \"TabVer\",\n Radio = \"Radio\",\n Combo = \"Combo\",\n OneBut = \"OneBut\",\n Menu = \"Menu\",\n}\n"]}
@@ -20,3 +20,7 @@ export declare class Fun {
20
20
  INPUT?: string;
21
21
  SS?: string;
22
22
  }
23
+ export declare enum YesNo {
24
+ Yes = "Yes",
25
+ No = "No"
26
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Fun = exports.FunObject = void 0;
3
+ exports.YesNo = exports.Fun = exports.FunObject = void 0;
4
4
  class FunObject {
5
5
  t;
6
6
  p;
@@ -26,4 +26,9 @@ class Fun {
26
26
  SS;
27
27
  }
28
28
  exports.Fun = Fun;
29
+ var YesNo;
30
+ (function (YesNo) {
31
+ YesNo["Yes"] = "Yes";
32
+ YesNo["No"] = "No";
33
+ })(YesNo || (exports.YesNo = YesNo = {}));
29
34
  //# sourceMappingURL=general.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","sourceRoot":"","sources":["../../src/types/general.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IACpB,CAAC,CAAU;IAEX,CAAC,CAAU;IAEX,CAAC,CAAU;CACZ;AAND,8BAMC;AAED;;GAEG;AACH,MAAa,GAAG;IACd,SAAS,CAAU;IACnB,OAAO,CAAU;IACjB,QAAQ,CAAU;IAElB,IAAI,CAAa;IACjB,IAAI,CAAa;IACjB,IAAI,CAAa;IACjB,IAAI,CAAa;IACjB,IAAI,CAAa;IACjB,IAAI,CAAa;IAEjB,CAAC,CAAU;IACX,KAAK,CAAU;IAEf,gEAAgE;IAChE,EAAE,CAAU;CACb;AAjBD,kBAiBC","sourcesContent":["export class FunObject {\n t!: string;\n\n p!: string;\n\n k!: string;\n}\n\n/**\n * Fun\n */\nexport class Fun {\n component!: string;\n service!: string;\n function!: string;\n\n obj1?: FunObject;\n obj2?: FunObject;\n obj3?: FunObject;\n obj4?: FunObject;\n obj5?: FunObject;\n obj6?: FunObject;\n\n P?: string;\n INPUT?: string;\n\n // The implementation of java FunDTO expects SS to be uppercased\n SS?: string;\n}\n\n"]}
1
+ {"version":3,"file":"general.js","sourceRoot":"","sources":["../../src/types/general.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IACpB,CAAC,CAAU;IACX,CAAC,CAAU;IACX,CAAC,CAAU;CACZ;AAJD,8BAIC;AAED;;GAEG;AACH,MAAa,GAAG;IACd,SAAS,CAAU;IACnB,OAAO,CAAU;IACjB,QAAQ,CAAU;IAElB,IAAI,CAAa;IACjB,IAAI,CAAa;IACjB,IAAI,CAAa;IACjB,IAAI,CAAa;IACjB,IAAI,CAAa;IACjB,IAAI,CAAa;IAEjB,CAAC,CAAU;IACX,KAAK,CAAU;IAEf,gEAAgE;IAChE,EAAE,CAAU;CACb;AAjBD,kBAiBC;AAED,IAAY,KAGX;AAHD,WAAY,KAAK;IACf,oBAAW,CAAA;IACX,kBAAS,CAAA;AACX,CAAC,EAHW,KAAK,qBAAL,KAAK,QAGhB","sourcesContent":["export class FunObject {\n t!: string;\n p!: string;\n k!: string;\n}\n\n/**\n * Fun\n */\nexport class Fun {\n component!: string;\n service!: string;\n function!: string;\n\n obj1?: FunObject;\n obj2?: FunObject;\n obj3?: FunObject;\n obj4?: FunObject;\n obj5?: FunObject;\n obj6?: FunObject;\n\n P?: string;\n INPUT?: string;\n\n // The implementation of java FunDTO expects SS to be uppercased\n SS?: string;\n}\n\nexport enum YesNo {\n Yes = \"Yes\",\n No = \"No\",\n}\n"]}
@@ -1,5 +1,4 @@
1
1
  import type { Properties as CSSProperties } from "csstype";
2
- import { ComponentOptions } from "./component";
3
2
  import { SmeupDataCell } from "./data-structures/smeupDataTable";
4
3
  export interface SmeupDataObj {
5
4
  t: string;
@@ -40,7 +39,3 @@ export declare enum SupportedExportFormats {
40
39
  PDF_SCHEDA = "pdf_scheda",
41
40
  PDF = "pdf"
42
41
  }
43
- export interface ChartOptions extends ComponentOptions {
44
- Width: string;
45
- Height: string;
46
- }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AAUA,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,uCAAuB,CAAA;IACvB,qDAAqC,CAAA;IACrC,qCAAqB,CAAA;IACrB,kDAAkC,CAAA;AACpC,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAwBD,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,uCAAa,CAAA;IACb,qCAAW,CAAA;IACX,qCAAW,CAAA;IACX,uCAAa,CAAA;IACb,mDAAyB,CAAA;IACzB,qCAAW,CAAA;AACb,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC","sourcesContent":["import type { Properties as CSSProperties } from \"csstype\";\nimport { ComponentOptions } from \"./component\";\nimport { SmeupDataCell } from \"./data-structures/smeupDataTable\";\n\nexport interface SmeupDataObj {\n t: string;\n p: string;\n k: string;\n}\n\nexport enum DatesFormats {\n ISO_DATE = \"YYYY-MM-DD\",\n ISO_DATE_TIME = \"YYYY-MM-DD HH:mm:ss\",\n ISO_TIME = \"HH:mm:ss\",\n ISO_TIME_WITHOUT_SECONDS = \"HH:mm\",\n}\n\nexport interface GenericObject {\n [index: string]: unknown;\n}\n\nexport interface WebupManagerData {\n mathLocale: string;\n datesLocale: string;\n themeBackground: string;\n}\n\n/**\n * Applies dataTable filters to the excel table rows\n */\nexport type ColumnFilter = {\n checkBoxes?: { value: string }[];\n textField?: string;\n};\n\nexport interface SmeupDataCellStyled extends SmeupDataCell {\n style?: CSSProperties;\n}\n\nexport enum SupportedExportFormats {\n XLSX = \"xlsx\",\n CSV = \"csv\",\n TXT = \"txt\",\n FILE = \"file\",\n PDF_SCHEDA = \"pdf_scheda\",\n PDF = \"pdf\",\n}\n\nexport interface ChartOptions extends ComponentOptions {\n Width: string;\n Height: string;\n}\n\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AASA,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,uCAAuB,CAAA;IACvB,qDAAqC,CAAA;IACrC,qCAAqB,CAAA;IACrB,kDAAkC,CAAA;AACpC,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAwBD,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,uCAAa,CAAA;IACb,qCAAW,CAAA;IACX,qCAAW,CAAA;IACX,uCAAa,CAAA;IACb,mDAAyB,CAAA;IACzB,qCAAW,CAAA;AACb,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC","sourcesContent":["import type { Properties as CSSProperties } from \"csstype\";\nimport { SmeupDataCell } from \"./data-structures/smeupDataTable\";\n\nexport interface SmeupDataObj {\n t: string;\n p: string;\n k: string;\n}\n\nexport enum DatesFormats {\n ISO_DATE = \"YYYY-MM-DD\",\n ISO_DATE_TIME = \"YYYY-MM-DD HH:mm:ss\",\n ISO_TIME = \"HH:mm:ss\",\n ISO_TIME_WITHOUT_SECONDS = \"HH:mm\",\n}\n\nexport interface GenericObject {\n [index: string]: unknown;\n}\n\nexport interface WebupManagerData {\n mathLocale: string;\n datesLocale: string;\n themeBackground: string;\n}\n\n/**\n * Applies dataTable filters to the excel table rows\n */\nexport type ColumnFilter = {\n checkBoxes?: { value: string }[];\n textField?: string;\n};\n\nexport interface SmeupDataCellStyled extends SmeupDataCell {\n style?: CSSProperties;\n}\n\nexport enum SupportedExportFormats {\n XLSX = \"xlsx\",\n CSV = \"csv\",\n TXT = \"txt\",\n FILE = \"file\",\n PDF_SCHEDA = \"pdf_scheda\",\n PDF = \"pdf\",\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"datastructure-utility.js","sourceRoot":"","sources":["../../src/utils/datastructure-utility.ts"],"names":[],"mappings":";;;AAEO,MAAM,cAAc,GAAG,CAAC,MAAuB,EAAW,EAAE;IACjE,OAAO,CACL,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;QACvD,MAAM,CAAC,OAAO,KAAK,KAAK,CACzB,CAAC;AACJ,CAAC,CAAC;AALW,QAAA,cAAc,kBAKzB","sourcesContent":["import { SmeupDataColumn } from \"../types/data-structures/smeupDataTable\";\n\nexport const isColumnHidden = (column: SmeupDataColumn): boolean => {\n return (\n Object.prototype.hasOwnProperty.call(column, \"visible\") &&\n column.visible === false\n );\n};\n\n"]}
1
+ {"version":3,"file":"datastructure-utility.js","sourceRoot":"","sources":["../../src/utils/datastructure-utility.ts"],"names":[],"mappings":";;;AAEO,MAAM,cAAc,GAAG,CAAC,MAAuB,EAAW,EAAE;IACjE,OAAO,CACL,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;QACvD,MAAM,CAAC,OAAO,KAAK,KAAK,CACzB,CAAC;AACJ,CAAC,CAAC;AALW,QAAA,cAAc,kBAKzB","sourcesContent":["import { SmeupDataColumn } from \"../types/data-structures/smeupDataTable\";\n\nexport const isColumnHidden = (column: SmeupDataColumn): boolean => {\n return (\n Object.prototype.hasOwnProperty.call(column, \"visible\") &&\n column.visible === false\n );\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sme.up/doc-alchemist",
3
- "version": "1.5.0",
3
+ "version": "1.6.0-20251215100834",
4
4
  "description": "Library for generating documents in various formats, including Excel and PDF.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Smeup LAB <info@smeup.com> (https://www.smeup.com/)",
@@ -38,7 +38,6 @@
38
38
  "typescript-eslint": "^8.33.1"
39
39
  },
40
40
  "dependencies": {
41
- "canvas": "^3.1.1",
42
41
  "echarts": "^5.6.0",
43
42
  "exceljs": "^4.4.0",
44
43
  "image-size": "^2.0.2",
@@ -1,287 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.dataTableToChart = void 0;
37
- const echarts = __importStar(require("echarts"));
38
- /**
39
- * Converts SmeupDataTable to chart image buffer
40
- * @param dataTable - SmeupDataTable containing the data
41
- * @param chartType - Type of chart (bar, line, pie, scatter)
42
- * @returns Promise<Buffer> containing the chart image
43
- */
44
- const dataTableToChart = async (dataTable, chartType, chartOptions) => {
45
- // Check if we're in Node.js or browser environment
46
- const isNode = typeof process !== "undefined" && process.versions && process.versions.node;
47
- if (isNode) {
48
- return await generateChartInNode(dataTable, chartType, chartOptions);
49
- }
50
- else {
51
- return generateChartInBrowser(dataTable, chartType, chartOptions);
52
- }
53
- };
54
- exports.dataTableToChart = dataTableToChart;
55
- /**
56
- * Generate chart in Node.js environment using canvas
57
- */
58
- async function generateChartInNode(dataTable, chartType, chartOptions) {
59
- try {
60
- // Dynamic import for Node.js canvas
61
- const { createCanvas } = await Promise.resolve().then(() => __importStar(require("canvas")));
62
- const width = Number(chartOptions.Width);
63
- const height = Number(chartOptions.Height);
64
- // Create canvas
65
- const canvas = createCanvas(width, height);
66
- // Create a minimal DOM-like environment for ECharts
67
- const mockElement = {
68
- clientWidth: width,
69
- clientHeight: width,
70
- style: {},
71
- addEventListener: () => { },
72
- removeEventListener: () => { },
73
- getAttribute: () => null,
74
- setAttribute: () => { },
75
- getContext: (type) => {
76
- if (type === "2d") {
77
- return canvas.getContext("2d");
78
- }
79
- return null;
80
- },
81
- appendChild: () => { },
82
- removeChild: () => { },
83
- ownerDocument: {
84
- createElement: (tagName) => {
85
- if (tagName === "canvas") {
86
- return createCanvas(width, height);
87
- }
88
- return mockElement;
89
- },
90
- createElementNS: () => mockElement,
91
- defaultView: {
92
- getComputedStyle: () => ({ getPropertyValue: () => "" }),
93
- },
94
- },
95
- };
96
- // Initialize ECharts with the mock element
97
- const chart = echarts.init(mockElement, null, {
98
- renderer: "canvas",
99
- useDirtyRect: false,
100
- width: width,
101
- height: height,
102
- });
103
- // Convert data table to chart configuration
104
- const config = convertDataTableToChartConfig(dataTable, chartType, chartOptions);
105
- // Set chart options
106
- chart.setOption(config);
107
- // Force render by calling resize
108
- chart.resize();
109
- // Get image buffer from canvas
110
- const imageBuffer = canvas.toBuffer("image/jpeg");
111
- // Cleanup
112
- chart.dispose();
113
- return imageBuffer;
114
- }
115
- catch (error) {
116
- console.error("Error generating chart in Node.js:", error);
117
- throw new Error(`Failed to generate chart: ${error instanceof Error ? error.message : "Unknown error"}`);
118
- }
119
- }
120
- /**
121
- * Generate chart in browser environment
122
- */
123
- function generateChartInBrowser(dataTable, chartType, chartOptions) {
124
- try {
125
- const width = Number(chartOptions.Width);
126
- const height = Number(chartOptions.height);
127
- // Create temporary canvas element
128
- const canvas = document.createElement("canvas");
129
- canvas.width = width;
130
- canvas.height = height;
131
- canvas.style.position = "absolute";
132
- canvas.style.left = "-9999px";
133
- document.body.appendChild(canvas);
134
- // Initialize ECharts with canvas
135
- const chart = echarts.init(canvas, null, {
136
- renderer: "canvas",
137
- useDirtyRect: false,
138
- width: width,
139
- height: height,
140
- });
141
- // Convert data table to chart configuration
142
- const config = convertDataTableToChartConfig(dataTable, chartType, chartOptions);
143
- // Set chart options
144
- chart.setOption(config);
145
- // Get image data
146
- const imageDataUrl = chart.getDataURL({
147
- type: "jpeg",
148
- pixelRatio: 1,
149
- backgroundColor: "#fff",
150
- });
151
- // Convert data URL to buffer
152
- const base64Data = imageDataUrl.replace(/^data:image\/jpeg;base64,/, "");
153
- const imageBuffer = Buffer.from(base64Data, "base64");
154
- // Cleanup
155
- chart.dispose();
156
- document.body.removeChild(canvas);
157
- return imageBuffer;
158
- }
159
- catch (error) {
160
- console.error("Error generating chart in browser:", error);
161
- throw new Error(`Failed to generate chart: ${error instanceof Error ? error.message : "Unknown error"}`);
162
- }
163
- }
164
- /**
165
- * Convert SmeupDataTable to ECharts configuration
166
- */
167
- function convertDataTableToChartConfig(dataTable, chartType, chartOptions) {
168
- if (!dataTable.columns || !dataTable.rows || dataTable.rows.length === 0) {
169
- throw new Error("Invalid data table: missing columns or rows");
170
- }
171
- // Get visible columns
172
- const visibleColumns = dataTable.columns.filter(col => col.visible !== false);
173
- if (visibleColumns.length < 2) {
174
- throw new Error("Data table must have at least 2 visible columns for chart generation");
175
- }
176
- // First column is typically used for categories/labels
177
- const categoryColumn = visibleColumns[0];
178
- const seriesColumns = chartOptions.Series?.split("|");
179
- if (!seriesColumns || seriesColumns.length === 0) {
180
- throw new Error("Chart options must specify at least one series");
181
- }
182
- const dataColumns = seriesColumns
183
- .map(name => visibleColumns.find(col => col.name === name))
184
- .filter((column) => column !== undefined);
185
- if (dataColumns.length === 0) {
186
- throw new Error("No valid data columns found for chart series");
187
- }
188
- // Extract categories from first column
189
- const categories = dataTable.rows.map(row => row.cells?.[categoryColumn.name]?.value?.toString() || "");
190
- // Extract data series from remaining columns
191
- const normalizedType = normalizeChartType(chartType);
192
- const series = dataColumns.map(column => {
193
- const data = dataTable.rows.map(row => {
194
- const cellValue = row.cells?.[column.name]?.value;
195
- return parseFloat(cellValue?.toString() || "0") || 0;
196
- });
197
- const seriesData = chartType.toLowerCase() === "pie"
198
- ? data.map((value, index) => ({ value, name: categories[index] }))
199
- : data;
200
- // Create properly typed series based on chart type
201
- switch (normalizedType) {
202
- case "pie":
203
- return {
204
- name: column.title || column.name,
205
- type: "pie",
206
- data: seriesData,
207
- };
208
- case "line":
209
- return {
210
- name: column.title || column.name,
211
- type: "line",
212
- data: seriesData,
213
- lineStyle: { width: 8 },
214
- };
215
- case "bar":
216
- return {
217
- name: column.title || column.name,
218
- type: "bar",
219
- data: seriesData,
220
- };
221
- case "scatter":
222
- return {
223
- name: column.title || column.name,
224
- type: "scatter",
225
- data: seriesData,
226
- };
227
- default:
228
- return {
229
- name: column.title || column.name,
230
- type: "bar",
231
- data: seriesData,
232
- };
233
- }
234
- });
235
- // Build chart configuration based on type
236
- const config = {
237
- tooltip: {
238
- trigger: chartType.toLowerCase() === "pie" ? "item" : "axis",
239
- },
240
- series,
241
- backgroundColor: "#fff",
242
- textStyle: {
243
- fontSize: 36,
244
- },
245
- };
246
- // Add legend for multiple series or pie charts
247
- if (series.length > 1 || chartType.toLowerCase() === "pie") {
248
- config.legend = {
249
- data: series.map(s => s.name),
250
- textStyle: { fontSize: 32 },
251
- };
252
- }
253
- // Add axes for non-pie charts
254
- if (chartType.toLowerCase() !== "pie") {
255
- config.xAxis = {
256
- type: "category",
257
- data: categories,
258
- axisLabel: { fontSize: 32 },
259
- };
260
- config.yAxis = {
261
- type: "value",
262
- axisLabel: { fontSize: 32 },
263
- };
264
- }
265
- return config;
266
- }
267
- /**
268
- * Normalize chart type to ECharts supported types
269
- */
270
- function normalizeChartType(chartType) {
271
- const type = chartType.toLowerCase();
272
- switch (type) {
273
- case "bar":
274
- case "column":
275
- return "bar";
276
- case "line":
277
- return "line";
278
- case "pie":
279
- return "pie";
280
- case "scatter":
281
- return "scatter";
282
- default:
283
- console.warn(`Unknown chart type: ${chartType}, defaulting to bar`);
284
- return "bar";
285
- }
286
- }
287
- //# sourceMappingURL=charts-generator.js.map
@@ -1 +0,0 @@
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\";\nimport { ChartOptions } from \"../../types/index\";\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 =\n typeof process !== \"undefined\" && process.versions && process.versions.node;\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-adapter.js","sourceRoot":"","sources":["../../../../src/converters/pdf/pdfmake/image-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { SmeupDataTree } from \"../../../types/data-structures/smeupDataTree\";\nimport {\n ContentImageExtension,\n ElementWithImageExtension,\n PdfMakeConverterContext,\n} from \"./pdfmake.types\";\n\nconst hasSmeupUrl = (element: unknown): boolean => {\n const image = (element as Record<string, unknown>)\n .image as ContentImageExtension;\n const url = image?.smeup?.url;\n return typeof url === \"string\" && url.length > 0;\n};\n\nfunction hasSmeupObject(element: unknown): boolean {\n const image = (element as Record<string, unknown>)\n .image as ContentImageExtension;\n const obj = image?.smeup?.obj;\n return typeof obj === \"object\" && obj !== null;\n}\n\n/**\n * Downloads an image from a URL and converts it to a data URL format.\n * Validates that the content-type is an image MIME type.\n *\n * @param url - The URL of the image to download\n * @param fetchData - Callback function to fetch the image data\n * @returns A data URL string in the format: data:image/jpeg;base64,<base64>\n * @throws If the download fails, content-type is not an image, or network error occurs\n */\nconst downloadImageAsDataUrl = async (\n url: string,\n fetchData: (url: string) => Promise<Response>,\n): Promise<string> => {\n const response = await fetchData(url);\n\n if (!response.ok) {\n throw new Error(\n `Failed to download image from ${url}: ${response.status} ${response.statusText}`,\n );\n }\n\n // Extract content-type from headers\n const contentType = response.headers.get(\"content-type\") || \"image/jpeg\";\n\n // Validate that content-type is an image\n if (!contentType.startsWith(\"image/\")) {\n throw new Error(\n `Invalid content-type for image: expected image/*, got ${contentType}`,\n );\n }\n\n // Get image data and convert to base64\n const arrayBuffer = await response.arrayBuffer();\n const base64 = Buffer.from(arrayBuffer).toString(\"base64\");\n\n return `data:${contentType};base64,${base64}`;\n};\n\n/**\n * Adapts a Smeup image structure to the PDFMake image format.\n *\n * This adapter function checks if the provided element contains an image with a smeup URL.\n * If so, it downloads the image using the fetchData callback from context, validates the\n * content-type, and transforms it into a data URL format that PDFMake can use.\n * The data URL is stored in context.pdfDocument.images to avoid redundancy when the same\n * image is referenced multiple times.\n * All properties of the original image except `smeup` are preserved.\n *\n * @returns An async function that takes an element and returns the adapted element for PDFMake,\n * or the original element if it does not contain a valid smeup image.\n * @throws If the context does not provide a fetchData function when the smeup image is used.\n * @throws If the image download fails or the content-type is not a valid image MIME type.\n */\nexport const urlToImageAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ContentImageExtension> => {\n if (!hasSmeupUrl(element)) {\n return element as ContentImageExtension;\n }\n\n if (!context.fetchData) {\n throw new Error(\n \"fetchData function is required in context when the smeup image property is used\",\n );\n }\n\n const elementImage = element as { image: { smeup: { url: string } } };\n const url = elementImage.image.smeup.url;\n\n // Ensure pdfDocument exists in context\n if (!context.pdfDocument) {\n throw new Error(\n \"pdfDocument is required in context when the smeup image property is used\",\n );\n }\n\n // Initialize images dictionary if not present\n if (!context.pdfDocument.images) {\n context.pdfDocument.images = {};\n }\n\n // Download and cache the image only if not already present\n if (!context.pdfDocument.images[url]) {\n const dataUrl = await downloadImageAsDataUrl(url, context.fetchData);\n context.pdfDocument.images[url] = dataUrl;\n }\n\n // Extract all properties except 'smeup' from the image object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { smeup, ...imageRest } = elementImage.image;\n\n return {\n ...elementImage,\n image: url,\n ...imageRest,\n };\n };\n};\n\nexport const objectToUrlAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ElementWithImageExtension> => {\n if (!hasSmeupObject(element)) {\n return element as ElementWithImageExtension;\n }\n if (!context.getSmeupDataStructure || !context.damSvcEndpoint) {\n throw new Error(\n \"getSmeupDataStructure function and damSvcEndpoint prop are required in context when the smeup image obj property is used\",\n );\n } else {\n const elementImage = element as ElementWithImageExtension;\n const obj = elementImage.image.smeup?.obj;\n if (!obj || !obj.t || !obj.p || !obj.k) {\n throw new Error(\n \"Smeup object must have t, p, and k properties to build GET.PATH function\",\n );\n }\n const funToGetPATH = `F(TRE;JASER_12W;GET.PATH) 1(${obj.t};${obj.p};${obj.k})`;\n const dataTree = (await context.getSmeupDataStructure(\n funToGetPATH,\n )) as SmeupDataTree;\n if (dataTree.children?.length === 0) {\n throw new Error(`No data found for function ${funToGetPATH}`);\n } else {\n const pathNode = dataTree.children[0].value.replace(/\\\\/g, \"/\");\n const pathEncoded = encodeURIComponent(pathNode);\n const url = context.damSvcEndpoint + \"/\" + pathEncoded;\n\n // Extract all properties except 'smeup' from the image object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { smeup, ...imageRest } = elementImage.image;\n\n return {\n ...elementImage,\n image: {\n smeup: {\n url,\n },\n ...imageRest,\n },\n };\n }\n }\n };\n};\n\nexport const imageAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ContentImageExtension> => {\n try {\n const adaptedElement = await objectToUrlAdapter()(element, context);\n return await urlToImageAdapter()(adaptedElement, context);\n } catch (error) {\n console.error(error);\n const errorMessage = (error as Error).message;\n const cause = (error as Error & { cause?: Error }).cause;\n const causeMessage = cause ? `\\nCause: ${cause.message || cause}` : \"\";\n return {\n text: `Error loading image: ${errorMessage}${causeMessage}`,\n fontSize: 10,\n color: \"#8B0000\",\n } as unknown as ContentImageExtension;\n }\n };\n};\n"]}
@@ -1,8 +0,0 @@
1
- /**
2
- * Adapter for header elements with page number placeholder support.
3
- */
4
- export declare const headerAdapter: () => (element: unknown) => unknown;
5
- /**
6
- * Adapter for footer elements with page number placeholder support.
7
- */
8
- export declare const footerAdapter: () => (element: unknown) => unknown;
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-element-adapter.js","sourceRoot":"","sources":["../../../../src/converters/pdf/pdfmake/page-element-adapter.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAM,WAAW,GAAG,CAClB,OAAgB,EAChB,YAAe,EACiC,EAAE;IAClD,OAAO,CACL,OAAO,KAAK,IAAI;QAChB,OAAO,OAAO,KAAK,QAAQ;QAC3B,YAAY,IAAI,OAAO;QACtB,OAAmC,CAAC,YAAY,CAAC,KAAK,SAAS,CACjE,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,CAC1B,GAAY,EACZ,WAAmB,EACnB,SAAiB,EACR,EAAE;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG;aACP,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;aAChD,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAAG,CAAC,YAAiC,EAAE,EAAE;IACrE,OAAO,CAAC,OAAgB,EAAW,EAAE;QACnC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAE5C,oDAAoD;QACpD,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,6EAA6E;QAC7E,MAAM,cAAc,GAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE;YAChE,OAAO,mBAAmB,CACxB,aAAa,EACb,WAAW,EACX,SAAS,CACC,CAAC;QACf,CAAC,CAAC;QAEF,OAAO;YACL,GAAG,OAAO;YACV,CAAC,YAAY,CAAC,EAAE,cAAc;SAC/B,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAAzD,QAAA,aAAa,iBAA4C;AAEtE;;GAEG;AACI,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAAzD,QAAA,aAAa,iBAA4C","sourcesContent":["import { Content, DynamicContent } from \"pdfmake/interfaces\";\n\n/**\n * Type guard to check if an element has a specific property\n */\nconst hasProperty = <T extends string>(\n element: unknown,\n propertyName: T,\n): element is Record<T, Content | DynamicContent> => {\n return (\n element !== null &&\n typeof element === \"object\" &&\n propertyName in element &&\n (element as Record<string, unknown>)[propertyName] !== undefined\n );\n};\n\n/**\n * Recursively searches for [CurrentPage] and [PageCount] placeholders in an object\n * and replaces them with the actual values.\n *\n * @param obj - The object to process\n * @param currentPage - The current page number\n * @param pageCount - The total page count\n * @returns The processed object with replaced placeholders\n */\nconst replacePlaceholders = (\n obj: unknown,\n currentPage: number,\n pageCount: number,\n): unknown => {\n if (typeof obj === \"string\") {\n return obj\n .replace(/\\[CurrentPage\\]/g, String(currentPage))\n .replace(/\\[PageCount\\]/g, String(pageCount));\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => replacePlaceholders(item, currentPage, pageCount));\n }\n\n if (obj !== null && typeof obj === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = replacePlaceholders(value, currentPage, pageCount);\n }\n return result;\n }\n\n return obj;\n};\n\n/**\n * Adapts a header or footer to support dynamic page number placeholders.\n *\n * This adapter function checks if the provided element contains the specified property (header or footer).\n * - If the property is already a function, it leaves it unchanged.\n * - If the property is an object, it wraps it in a function that replaces\n * [CurrentPage] with the current page number and [PageCount] with the total\n * page count at rendering time.\n *\n * @param propertyName - The name of the property to adapt ('header' or 'footer')\n * @returns A function that takes an element and returns the adapted element for PDFMake,\n * or the original element if it does not contain the specified property.\n */\nconst createPageElementAdapter = (propertyName: \"header\" | \"footer\") => {\n return (element: unknown): unknown => {\n if (!hasProperty(element, propertyName)) {\n return element;\n }\n\n const propertyValue = element[propertyName];\n\n // If property is already a function, leave it as is\n if (typeof propertyValue === \"function\") {\n return element;\n }\n\n // If property is an object, wrap it in a function that replaces placeholders\n const dynamicContent: DynamicContent = (currentPage, pageCount) => {\n return replacePlaceholders(\n propertyValue,\n currentPage,\n pageCount,\n ) as Content;\n };\n\n return {\n ...element,\n [propertyName]: dynamicContent,\n };\n };\n};\n\n/**\n * Adapter for header elements with page number placeholder support.\n */\nexport const headerAdapter = () => createPageElementAdapter(\"header\");\n\n/**\n * Adapter for footer elements with page number placeholder support.\n */\nexport const footerAdapter = () => createPageElementAdapter(\"footer\");\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-adapter.js","sourceRoot":"","sources":["../../../../src/converters/pdf/pdfmake/table-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { TableCell } from \"pdfmake/interfaces\";\nimport { SupportedExportFormats } from \"../../../types\";\nimport { SmeupDataStructureType } from \"../../../types/data-structures/smeupDataStructure\";\nimport {\n SmeupDataCell,\n SmeupDataTable,\n} from \"../../../types/data-structures/smeupDataTable\";\nimport { calculateCellValue } from \"../../../utils/commons-utility\";\nimport {\n ElementWithTableExtension,\n PdfMakeConverterContext,\n TableExtension,\n} from \"./pdfmake.types\";\n\nconst hasTableWithDataTable = (\n element: unknown,\n): element is ElementWithTableExtension => {\n const table = (element as Record<string, unknown>)?.table as TableExtension;\n const data = table?.smeup?.data;\n return (\n data?.type === SmeupDataStructureType.SmeupDataTable &&\n data?.rows !== undefined &&\n data?.columns !== undefined\n );\n};\n\nconst hasTableWithFun = (\n element: unknown,\n): element is ElementWithTableExtension => {\n const table = (element as Record<string, unknown>)?.table as TableExtension;\n const fun = table?.smeup?.fun;\n return typeof fun === \"string\" && fun.length > 0;\n};\n\n/**\n * Adapts a Smeup table structure to the PDFMake table format.\n *\n * This adapter function checks if the provided element contains a table with data.\n * If so, it transforms the table's columns and rows into the PDFMake `body` format,\n * where the first row is the header (column titles) and subsequent rows are the data.\n * All properties of the original table except `data` are preserved.\n *\n * @returns A function that takes an element and returns the adapted element for PDFMake,\n * or the original element if it does not contain a valid table with data.\n */\nexport const smeupTableToPdfMakeTableAdapter = () => {\n return (\n element: unknown,\n context: PdfMakeConverterContext,\n ): ElementWithTableExtension => {\n if (!hasTableWithDataTable(element)) {\n return element as ElementWithTableExtension;\n }\n\n const { columns, rows } = element.table.smeup!.data!;\n\n // Build header row from column titles\n const headerRow = columns.map(col => col.title);\n\n // Build data rows by extracting values in column order\n const dataRows = rows.map(row =>\n columns.map(col => {\n const cell = row.cells?.[col.name] as SmeupDataCell;\n const value = calculateCellValue(\n cell,\n SupportedExportFormats.PDF,\n context.webupManagerData,\n );\n return {\n text: value != null ? String(value) : \"\",\n alignment: col.obj?.t === \"NR\" ? \"right\" : \"left\",\n };\n }),\n );\n\n // Combine header and data rows\n const body = [headerRow, ...dataRows] as TableCell[][];\n\n // Extract all properties except 'data' from the smeup object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { data, ...smeupRest } = element.table.smeup!;\n // Extract all properties except 'smeup' from the table object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { smeup, ...tableRest } = element.table;\n\n return {\n ...element,\n table: {\n ...tableRest,\n smeup: {\n ...smeupRest,\n },\n body,\n },\n };\n };\n};\n\n/**\n * Adapter function for converting a table element with a `fun` property to a Smeup table structure.\n *\n * This function returns an asynchronous converter that checks if the provided element contains\n * a table with a `fun` property. If present, it uses the `getSmeupDataStructure` function from\n * the context to fetch the table data corresponding to the `fun` string, and replaces the original\n * table's `fun` property with the fetched data under the `data` property. All other properties\n * of the table are preserved.\n *\n * @returns An asynchronous function that takes an element and a context, and returns the adapted element.\n *\n * @throws If the context does not provide a `getSmeupDataStructure` function when the `fun` property is used.\n *\n * @param element - The input element to be adapted.\n * @param context - The conversion context, which must provide `getSmeupDataStructure` if the `fun` property is present.\n */\nexport const funToSmeupTableAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ElementWithTableExtension> => {\n if (!hasTableWithFun(element)) {\n return element as ElementWithTableExtension;\n } else {\n if (!context.getSmeupDataStructure) {\n throw new Error(\n \"getSmeupDataStructure function is required in context when the fun property is used\",\n );\n } else {\n const elementWithTable = element as ElementWithTableExtension;\n const funStr = elementWithTable.table.smeup!.fun!;\n const dataTable = (await context.getSmeupDataStructure(\n funStr,\n )) as SmeupDataTable;\n // Extract all properties except 'fun' from the smeup object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { fun, ...smeupRest } = elementWithTable.table.smeup!;\n // Extract all properties except 'smeup' from the table object\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { smeup, ...tableRest } = elementWithTable.table;\n\n return {\n ...elementWithTable,\n table: {\n ...tableRest,\n body: tableRest.body,\n smeup: {\n ...smeupRest,\n data: dataTable,\n },\n },\n };\n }\n }\n };\n};\n\nexport const dataTableAdapter = () => {\n return async (\n element: unknown,\n context: PdfMakeConverterContext,\n ): Promise<ElementWithTableExtension> => {\n const adaptedElement = await funToSmeupTableAdapter()(element, context);\n return (await smeupTableToPdfMakeTableAdapter()(\n adaptedElement,\n context,\n )) as ElementWithTableExtension;\n };\n};\n"]}
@@ -1,3 +0,0 @@
1
- import * as jsPDFModule from "jspdf";
2
- import { SmeupSch } from "../../types/data-structures/smeupSch";
3
- export declare const schedaToPdfDoc: (sch: SmeupSch) => Promise<jsPDFModule.jsPDF>;