@sme.up/doc-alchemist 1.9.0-SNAPSHOT-20260330134530 → 2.0.0-alpha.2

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 (28) hide show
  1. package/dist/converters/excel/matrix-converter.js +5 -4
  2. package/dist/converters/excel/matrix-converter.js.map +1 -1
  3. package/dist/converters/excel/tree-converter.js +2 -2
  4. package/dist/converters/excel/tree-converter.js.map +1 -1
  5. package/dist/converters/pdf/pdfmake/adapters/box/box-layouts.js +2 -2
  6. package/dist/converters/pdf/pdfmake/adapters/box/box-layouts.js.map +1 -1
  7. package/dist/converters/pdf/pdfmake/adapters/cell-converter.js +2 -2
  8. package/dist/converters/pdf/pdfmake/adapters/cell-converter.js.map +1 -1
  9. package/dist/converters/pdf/pdfmake/adapters/image/image-adapter.js +4 -3
  10. package/dist/converters/pdf/pdfmake/adapters/image/image-adapter.js.map +1 -1
  11. package/dist/converters/pdf/pdfmake/pdfmake.types.d.ts +1 -0
  12. package/dist/converters/pdf/pdfmake/pdfmake.types.js.map +1 -1
  13. package/dist/types/data-structures/smeupDataTable.d.ts +1 -1
  14. package/dist/types/data-structures/smeupDataTable.js.map +1 -1
  15. package/dist/types/index.d.ts +0 -1
  16. package/dist/types/index.js.map +1 -1
  17. package/dist/utils/cells-utility.d.ts +6 -0
  18. package/dist/utils/cells-utility.js +14 -1
  19. package/dist/utils/cells-utility.js.map +1 -1
  20. package/dist/utils/commons-utility.d.ts +2 -6
  21. package/dist/utils/commons-utility.js +11 -7
  22. package/dist/utils/commons-utility.js.map +1 -1
  23. package/dist/utils/filters-utility.d.ts +2 -6
  24. package/dist/utils/filters-utility.js +2 -2
  25. package/dist/utils/filters-utility.js.map +1 -1
  26. package/dist/utils/objects-utility.d.ts +4 -4
  27. package/dist/utils/objects-utility.js.map +1 -1
  28. package/package.json +1 -1
@@ -8,6 +8,7 @@ const exceljs_1 = __importDefault(require("exceljs"));
8
8
  const commons_utility_1 = require("../../utils/commons-utility");
9
9
  const excel_converter_types_1 = require("./excel-converter.types");
10
10
  const datastructure_utility_1 = require("../../utils/datastructure-utility");
11
+ const cells_utility_1 = require("../../utils/cells-utility");
11
12
  const commons_1 = require("./commons");
12
13
  const dataTableToExcelWorkbook = (component, fileFormat, webupManagerData, sheetName = "", title = "") => {
13
14
  // Create a new ExcelJS.Workbook and return it as a resolved Promise
@@ -200,13 +201,13 @@ const insertDataTableGroupedRows = (worksheet, rows, groups, filteredColumns, un
200
201
  const [currentGroup, ...remainingGroups] = groups;
201
202
  const uniqueGroupValues = [
202
203
  ...new Set(rows
203
- .map(row => row.cells && row.cells[currentGroup]?.value)
204
- .filter(value => value !== undefined)),
204
+ .map(row => row.cells?.[currentGroup] ? (0, cells_utility_1.getCellDisplayValue)(row.cells[currentGroup]) : undefined)
205
+ .filter((value) => value !== undefined)),
205
206
  ].sort();
206
207
  const columnTitles = Object.fromEntries(unfilteredColumns.map(col => [col.name, col.title]));
207
208
  for (const groupValue of uniqueGroupValues) {
208
209
  // Filter rows for the current group
209
- const groupedRows = rows.filter(row => row.cells && row.cells[currentGroup]?.value === groupValue);
210
+ const groupedRows = rows.filter(row => !!row.cells?.[currentGroup] && (0, cells_utility_1.getCellDisplayValue)(row.cells[currentGroup]) === groupValue);
210
211
  const indentation = " ".repeat((currentOutlineLevel - 1) * 8);
211
212
  // Insert header row
212
213
  const headerRow = worksheet.addRow([]);
@@ -251,7 +252,7 @@ const insertDataTableRows = (worksheet, rows, unfilteredColumns, filteredColumns
251
252
  const cell = (row?.cells ?? {})[column.name];
252
253
  (0, commons_utility_1.updateMaxValueLength)(maxColumnValueLenght, cell?.value, column.name);
253
254
  return column.formula
254
- ? (0, commons_utility_1.calculateValue)((0, commons_1.smeupFormulaToExcelValue)(column, unfilteredColumns, row?.cells ?? {}), cell.obj ?? { t: "", p: "", k: "" }, fileFormat, webupManagerData)
255
+ ? (0, commons_utility_1.calculateValue)((0, commons_1.smeupFormulaToExcelValue)(column, unfilteredColumns, row?.cells ?? {}), cell.obj ?? { t: "", p: "" }, fileFormat, webupManagerData)
255
256
  : (0, commons_utility_1.calculateCellValue)(cell, fileFormat, webupManagerData);
256
257
  });
257
258
  const newRow = worksheet.addRow(rowData);
@@ -1 +1 @@
1
- {"version":3,"file":"matrix-converter.js","sourceRoot":"","sources":["../../../src/converters/excel/matrix-converter.ts"],"names":[],"mappings":"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","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\";\nimport {\n getFilteredColumns,\n filterRows,\n updateMaxValueLength,\n calculateCellValue,\n hexToArgb,\n calculateValue,\n sortRows,\n applyBordersToWorksheet,\n} from \"../../utils/commons-utility\";\nimport {\n exportTypeSupportsFormatting,\n allowedTotals,\n STARTING_ROW_WITH_TITLE,\n STARTING_ROW_WITHOUT_TITLE,\n} from \"./excel-converter.types\";\nimport { isColumnHidden } from \"../../utils/datastructure-utility\";\nimport {\n addFooterTotalsRow,\n columnLetterToNumber,\n getDistinctCount,\n getExcelColumnLetter,\n getRealColumnsCount,\n groupedCellFormatAttributes,\n initializeWorksheet,\n resolveWorksheetFormulas,\n setHeaderStyling,\n smeupFormulaToExcelFormula,\n smeupFormulaToExcelValue,\n} from \"./commons\";\nimport {\n SmeupDataCell,\n SmeupDataColumn,\n SmeupDataRow,\n SmeupDataTable,\n} from \"../../types/data-structures/smeupDataTable\";\nimport { SmeupDataNode } from \"../../types/data-structures/smeupDataTree\";\nimport { SortObject } from \"../../types/component-props\";\n\nexport const dataTableToExcelWorkbook = (\n component: {\n smeupDataTable: SmeupDataTable;\n props: GenericObject;\n },\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n sheetName: string = \"\",\n title: string = \"\",\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, sheetName);\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 let filteredColumns = getFilteredColumns(\n smeupDataTable.columns,\n props,\n groupsArray,\n );\n\n // If there is a totalization on a column that matches the first visible column\n // filter out all hidden columns that precede the column.\n // This is necessary to avoid issues with formulas on grouped rows, due to the change\n // that hides columns instead of removing them so some total formulas can be resolved programmatically,\n // see resolveWorksheetFormulas function, and only after, removed.\n filteredColumns = filterColumnsWhenFirstVisibleHasTotal(\n filteredColumns,\n props,\n );\n\n const maxColumnValueLength: { [key: string]: number } = {};\n\n // Determines the initial row of the data by checking if title is valid\n const documentInitialRow = title\n ? STARTING_ROW_WITH_TITLE\n : STARTING_ROW_WITHOUT_TITLE;\n\n let rowNumber: number = documentInitialRow; // Start row number\n\n // Header row\n setDataTableHeaderRow(worksheet, filteredColumns, maxColumnValueLength);\n\n // Insert title (header row automatically pushes down other rows)\n if (title) {\n insertTitleRow(worksheet);\n }\n\n // Filter and sort rows (if filters are available)\n const rows = filterRows(\n smeupDataTable,\n smeupDataTable.columns,\n props?.filters as { [key: string]: ColumnFilter },\n webupManagerData,\n );\n\n if (activeGroups?.length > 0) {\n sortRows(rows, component.props.sort as SortObject[], activeGroups);\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 maxColumnValueLength,\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 sortRows(rows, component.props.sort as SortObject[]);\n\n // Process rows normally if no grouping\n rowNumber = insertDataTableRows(\n worksheet,\n rows,\n smeupDataTable.columns,\n filteredColumns,\n rowNumber,\n fileFormat,\n webupManagerData,\n maxColumnValueLength,\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 = (maxColumnValueLength[columnKey] ?? 10) * 1.1;\n } else {\n col.width = 10 * 1.1; // Default width\n }\n });\n\n // Resolve formulas and values for grouped rows and totals before removing hidden columns\n resolveWorksheetFormulas(worksheet, webupManagerData);\n\n // Remove hidden columns\n removeHiddenColumns(worksheet);\n\n // Iitle is set at the end due to issues with spliceColumns\n // and merged cells\n if (title) {\n updateTitleRow(worksheet, title);\n }\n\n // Apply filter to column headers\n worksheet.autoFilter = {\n from: { row: documentInitialRow, column: 1 },\n to: {\n row: rowNumber,\n column: getRealColumnsCount(worksheet),\n },\n };\n\n // Forces full calculation when the workbook is opened\n workbook.calcProperties = {\n fullCalcOnLoad: true,\n };\n\n // Restore borders (when setting background color the default excel behaviour removes them)\n applyBordersToWorksheet(worksheet);\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],\n hidden: isColumnHidden(col), // Set the width to the updated value\n } as ExcelJS.Column;\n });\n\n setHeaderStyling(worksheet);\n};\n\n/**\n * Inserts empty rows at the top of the worksheet for the title section\n * @param worksheet - The worksheet to insert rows into\n */\nconst insertTitleRow = (worksheet: Worksheet): void => {\n worksheet.insertRow(1, \"\");\n\n // Insert empty row for better spacing\n worksheet.insertRow(2, \"\");\n};\n\n/**\n * Updates the title row with content, merges cells, and applies styling\n * Merges cells across all columns and applies bold font with center alignment\n * @param worksheet - The worksheet containing the title rows\n * @param title - The title text to display in the merged cells\n */\nconst updateTitleRow = (worksheet: Worksheet, title: string): void => {\n const firstCol = 1;\n const lastCol = getRealColumnsCount(worksheet);\n\n // Merge all cells in the new title row\n worksheet.mergeCells(1, firstCol, 2, lastCol);\n\n // Assign the value to the merged area\n worksheet.getRow(1).getCell(firstCol).value = title;\n\n // Style\n const row = worksheet.getRow(1);\n row.font = { bold: true, size: 14 };\n row.alignment = { horizontal: \"center\", vertical: \"middle\" };\n};\n\n/**\n * Given a formula string, shifts all column-letter references inside SUBTOTAL(...)\n * expressions that fall after than removedColNumber by decrementing them by one.\n * Handles simple ranges like SUBTOTAL(9,C2:C5) and compound expressions\n * like `\"Label\" & SUBTOTAL(9,C2:C5)`.\n */\nconst shiftSubtotalColumnReferences = (\n formula: string,\n removedColNumber: number,\n): string => {\n return formula.replace(/SUBTOTAL\\([^)]+\\)/g, subtotalMatch =>\n subtotalMatch.replace(\n /([A-Z]+)(\\d+)/g,\n (_, colLetter: string, rowNum: string) => {\n const colNum = columnLetterToNumber(colLetter);\n return colNum > removedColNumber\n ? getExcelColumnLetter(colNum - 1) + rowNum\n : colLetter + rowNum;\n },\n ),\n );\n};\n\n/**\n * Scans every cell in the worksheet and, for cells whose formula contains\n * SUBTOTAL, decrements any column references that point past removedColNumber.\n * Must be called before spliceColumns so that formulas stay consistent.\n */\nconst updateSubtotalFormulasBeforeColumnRemoval = (\n worksheet: ExcelJS.Worksheet,\n removedColNumber: number,\n): void => {\n worksheet.eachRow(row => {\n row.eachCell(cell => {\n if (cell.formula?.includes(\"SUBTOTAL\")) {\n cell.value = {\n formula: shiftSubtotalColumnReferences(\n cell.formula,\n removedColNumber,\n ),\n };\n }\n });\n });\n};\n\n/**\n * Removes all hidden columns from the worksheet.\n * Before each removal, updates any SUBTOTAL formulas in the sheet so that\n * column references past the deleted column are decremented accordingly.\n * @param worksheet\n */\nconst removeHiddenColumns = (worksheet: ExcelJS.Worksheet): void => {\n const hiddenColumnKeys = worksheet.columns\n .filter(col => col.hidden)\n .map(col => col.key);\n hiddenColumnKeys.forEach(colKey => {\n if (colKey) {\n const colNumber = worksheet.getColumn(colKey).number;\n updateSubtotalFormulasBeforeColumnRemoval(worksheet, colNumber);\n worksheet.spliceColumns(colNumber, 1);\n }\n });\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 unfilteredColumns,\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 const headerCell = headerRow.getCell(1);\n headerCell.value = `${indentation}▼${columnTitles[currentGroup]?.replace(/\\n/g, \" \")} - ${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) {\n cell.alignment = { horizontal: \"right\" };\n const cellValue = cell.value;\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 if (cellValue) {\n cell.value = { formula: `\"${cellValue} - Tot: \" & ${cell.formula}` };\n cell.alignment = { horizontal: \"left\" };\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 unfilteredColumns: SmeupDataColumn[],\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(\n column,\n unfilteredColumns,\n row?.cells ?? {},\n ),\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 Object.assign(headerCell, groupedCellFormatAttributes);\n};\n\n/**\n * Filters columns when the first visible column has a total applied\n * @param columns - The columns to filter\n * @param unfilteredColumns - The unfiltered columns to determine the index\n * @param props - Component props containing totals configuration\n * @returns The filtered columns\n */\nexport const filterColumnsWhenFirstVisibleHasTotal = (\n columns: SmeupDataColumn[],\n props: GenericObject,\n): SmeupDataColumn[] => {\n const firstVisibleColumnName = columns.find(\n col => !isColumnHidden(col),\n )?.name;\n\n if (\n !firstVisibleColumnName ||\n !props?.totals ||\n typeof props.totals !== \"object\" ||\n !(firstVisibleColumnName in props.totals)\n ) {\n return columns;\n }\n\n const firstVisibleColumnIndex = columns.findIndex(\n col => col.name === firstVisibleColumnName,\n );\n\n return columns.filter((_, index) => index >= firstVisibleColumnIndex);\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 worksheet.eachRow((row, rowIndex) => {\n if (rowIndex === 1) return;\n const firstCell = row.getCell(1);\n const cellStr =\n firstCell.formula?.toString() ?? firstCell.value?.toString() ?? \"\";\n const isHeader = cellStr.includes(\"▼\");\n if (isHeader) {\n const cleanStr = cellStr.replace(\"▼\", \"\");\n if (firstCell.formula) {\n firstCell.value = { formula: cleanStr };\n } else {\n firstCell.value = cleanStr;\n }\n // Replace double quotes with empty chars because they can\n // be included in formulas causing issues with\n // the regex and the outline level calculation\n const leadingSpaces =\n cleanStr.replace(/\"/g, \"\").match(/^ */)?.[0].length || 0;\n const outlineLevel = Math.floor(leadingSpaces / 8) + 1;\n row.outlineLevel = outlineLevel - 1;\n lastOutlineLevel = outlineLevel;\n } else {\n row.outlineLevel = lastOutlineLevel;\n }\n });\n};\n"]}
1
+ {"version":3,"file":"matrix-converter.js","sourceRoot":"","sources":["../../../src/converters/excel/matrix-converter.ts"],"names":[],"mappings":"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","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\";\nimport {\n getFilteredColumns,\n filterRows,\n updateMaxValueLength,\n calculateCellValue,\n hexToArgb,\n calculateValue,\n sortRows,\n applyBordersToWorksheet,\n} from \"../../utils/commons-utility\";\nimport {\n exportTypeSupportsFormatting,\n allowedTotals,\n STARTING_ROW_WITH_TITLE,\n STARTING_ROW_WITHOUT_TITLE,\n} from \"./excel-converter.types\";\nimport { isColumnHidden } from \"../../utils/datastructure-utility\";\nimport { getCellDisplayValue } from \"../../utils/cells-utility\";\nimport {\n addFooterTotalsRow,\n columnLetterToNumber,\n getDistinctCount,\n getExcelColumnLetter,\n getRealColumnsCount,\n groupedCellFormatAttributes,\n initializeWorksheet,\n resolveWorksheetFormulas,\n setHeaderStyling,\n smeupFormulaToExcelFormula,\n smeupFormulaToExcelValue,\n} from \"./commons\";\nimport {\n SmeupDataCell,\n SmeupDataColumn,\n SmeupDataRow,\n SmeupDataTable,\n} from \"../../types/data-structures/smeupDataTable\";\nimport { SmeupDataNode } from \"../../types/data-structures/smeupDataTree\";\nimport { SortObject } from \"../../types/component-props\";\n\nexport const dataTableToExcelWorkbook = (\n component: {\n smeupDataTable: SmeupDataTable;\n props: GenericObject;\n },\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n sheetName: string = \"\",\n title: string = \"\",\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, sheetName);\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 let filteredColumns = getFilteredColumns(\n smeupDataTable.columns,\n props,\n groupsArray,\n );\n\n // If there is a totalization on a column that matches the first visible column\n // filter out all hidden columns that precede the column.\n // This is necessary to avoid issues with formulas on grouped rows, due to the change\n // that hides columns instead of removing them so some total formulas can be resolved programmatically,\n // see resolveWorksheetFormulas function, and only after, removed.\n filteredColumns = filterColumnsWhenFirstVisibleHasTotal(\n filteredColumns,\n props,\n );\n\n const maxColumnValueLength: { [key: string]: number } = {};\n\n // Determines the initial row of the data by checking if title is valid\n const documentInitialRow = title\n ? STARTING_ROW_WITH_TITLE\n : STARTING_ROW_WITHOUT_TITLE;\n\n let rowNumber: number = documentInitialRow; // Start row number\n\n // Header row\n setDataTableHeaderRow(worksheet, filteredColumns, maxColumnValueLength);\n\n // Insert title (header row automatically pushes down other rows)\n if (title) {\n insertTitleRow(worksheet);\n }\n\n // Filter and sort rows (if filters are available)\n const rows = filterRows(\n smeupDataTable,\n smeupDataTable.columns,\n props?.filters as { [key: string]: ColumnFilter },\n webupManagerData,\n );\n\n if (activeGroups?.length > 0) {\n sortRows(rows, component.props.sort as SortObject[], activeGroups);\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 maxColumnValueLength,\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 sortRows(rows, component.props.sort as SortObject[]);\n\n // Process rows normally if no grouping\n rowNumber = insertDataTableRows(\n worksheet,\n rows,\n smeupDataTable.columns,\n filteredColumns,\n rowNumber,\n fileFormat,\n webupManagerData,\n maxColumnValueLength,\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 = (maxColumnValueLength[columnKey] ?? 10) * 1.1;\n } else {\n col.width = 10 * 1.1; // Default width\n }\n });\n\n // Resolve formulas and values for grouped rows and totals before removing hidden columns\n resolveWorksheetFormulas(worksheet, webupManagerData);\n\n // Remove hidden columns\n removeHiddenColumns(worksheet);\n\n // Iitle is set at the end due to issues with spliceColumns\n // and merged cells\n if (title) {\n updateTitleRow(worksheet, title);\n }\n\n // Apply filter to column headers\n worksheet.autoFilter = {\n from: { row: documentInitialRow, column: 1 },\n to: {\n row: rowNumber,\n column: getRealColumnsCount(worksheet),\n },\n };\n\n // Forces full calculation when the workbook is opened\n workbook.calcProperties = {\n fullCalcOnLoad: true,\n };\n\n // Restore borders (when setting background color the default excel behaviour removes them)\n applyBordersToWorksheet(worksheet);\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],\n hidden: isColumnHidden(col), // Set the width to the updated value\n } as ExcelJS.Column;\n });\n\n setHeaderStyling(worksheet);\n};\n\n/**\n * Inserts empty rows at the top of the worksheet for the title section\n * @param worksheet - The worksheet to insert rows into\n */\nconst insertTitleRow = (worksheet: Worksheet): void => {\n worksheet.insertRow(1, \"\");\n\n // Insert empty row for better spacing\n worksheet.insertRow(2, \"\");\n};\n\n/**\n * Updates the title row with content, merges cells, and applies styling\n * Merges cells across all columns and applies bold font with center alignment\n * @param worksheet - The worksheet containing the title rows\n * @param title - The title text to display in the merged cells\n */\nconst updateTitleRow = (worksheet: Worksheet, title: string): void => {\n const firstCol = 1;\n const lastCol = getRealColumnsCount(worksheet);\n\n // Merge all cells in the new title row\n worksheet.mergeCells(1, firstCol, 2, lastCol);\n\n // Assign the value to the merged area\n worksheet.getRow(1).getCell(firstCol).value = title;\n\n // Style\n const row = worksheet.getRow(1);\n row.font = { bold: true, size: 14 };\n row.alignment = { horizontal: \"center\", vertical: \"middle\" };\n};\n\n/**\n * Given a formula string, shifts all column-letter references inside SUBTOTAL(...)\n * expressions that fall after than removedColNumber by decrementing them by one.\n * Handles simple ranges like SUBTOTAL(9,C2:C5) and compound expressions\n * like `\"Label\" & SUBTOTAL(9,C2:C5)`.\n */\nconst shiftSubtotalColumnReferences = (\n formula: string,\n removedColNumber: number,\n): string => {\n return formula.replace(/SUBTOTAL\\([^)]+\\)/g, subtotalMatch =>\n subtotalMatch.replace(\n /([A-Z]+)(\\d+)/g,\n (_, colLetter: string, rowNum: string) => {\n const colNum = columnLetterToNumber(colLetter);\n return colNum > removedColNumber\n ? getExcelColumnLetter(colNum - 1) + rowNum\n : colLetter + rowNum;\n },\n ),\n );\n};\n\n/**\n * Scans every cell in the worksheet and, for cells whose formula contains\n * SUBTOTAL, decrements any column references that point past removedColNumber.\n * Must be called before spliceColumns so that formulas stay consistent.\n */\nconst updateSubtotalFormulasBeforeColumnRemoval = (\n worksheet: ExcelJS.Worksheet,\n removedColNumber: number,\n): void => {\n worksheet.eachRow(row => {\n row.eachCell(cell => {\n if (cell.formula?.includes(\"SUBTOTAL\")) {\n cell.value = {\n formula: shiftSubtotalColumnReferences(\n cell.formula,\n removedColNumber,\n ),\n };\n }\n });\n });\n};\n\n/**\n * Removes all hidden columns from the worksheet.\n * Before each removal, updates any SUBTOTAL formulas in the sheet so that\n * column references past the deleted column are decremented accordingly.\n * @param worksheet\n */\nconst removeHiddenColumns = (worksheet: ExcelJS.Worksheet): void => {\n const hiddenColumnKeys = worksheet.columns\n .filter(col => col.hidden)\n .map(col => col.key);\n hiddenColumnKeys.forEach(colKey => {\n if (colKey) {\n const colNumber = worksheet.getColumn(colKey).number;\n updateSubtotalFormulasBeforeColumnRemoval(worksheet, colNumber);\n worksheet.spliceColumns(colNumber, 1);\n }\n });\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 unfilteredColumns,\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?.[currentGroup] ? getCellDisplayValue(row.cells[currentGroup]) : undefined)\n .filter((value): value is string => 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?.[currentGroup] && getCellDisplayValue(row.cells[currentGroup]) === groupValue,\n );\n const indentation = \" \".repeat((currentOutlineLevel - 1) * 8);\n\n // Insert header row\n const headerRow = worksheet.addRow([]);\n const headerCell = headerRow.getCell(1);\n headerCell.value = `${indentation}▼${columnTitles[currentGroup]?.replace(/\\n/g, \" \")} - ${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) {\n cell.alignment = { horizontal: \"right\" };\n const cellValue = cell.value;\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 if (cellValue) {\n cell.value = { formula: `\"${cellValue} - Tot: \" & ${cell.formula}` };\n cell.alignment = { horizontal: \"left\" };\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 unfilteredColumns: SmeupDataColumn[],\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(\n column,\n unfilteredColumns,\n row?.cells ?? {},\n ),\n cell.obj ?? { t: \"\", p: \"\" },\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 Object.assign(headerCell, groupedCellFormatAttributes);\n};\n\n/**\n * Filters columns when the first visible column has a total applied\n * @param columns - The columns to filter\n * @param unfilteredColumns - The unfiltered columns to determine the index\n * @param props - Component props containing totals configuration\n * @returns The filtered columns\n */\nexport const filterColumnsWhenFirstVisibleHasTotal = (\n columns: SmeupDataColumn[],\n props: GenericObject,\n): SmeupDataColumn[] => {\n const firstVisibleColumnName = columns.find(\n col => !isColumnHidden(col),\n )?.name;\n\n if (\n !firstVisibleColumnName ||\n !props?.totals ||\n typeof props.totals !== \"object\" ||\n !(firstVisibleColumnName in props.totals)\n ) {\n return columns;\n }\n\n const firstVisibleColumnIndex = columns.findIndex(\n col => col.name === firstVisibleColumnName,\n );\n\n return columns.filter((_, index) => index >= firstVisibleColumnIndex);\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 worksheet.eachRow((row, rowIndex) => {\n if (rowIndex === 1) return;\n const firstCell = row.getCell(1);\n const cellStr =\n firstCell.formula?.toString() ?? firstCell.value?.toString() ?? \"\";\n const isHeader = cellStr.includes(\"▼\");\n if (isHeader) {\n const cleanStr = cellStr.replace(\"▼\", \"\");\n if (firstCell.formula) {\n firstCell.value = { formula: cleanStr };\n } else {\n firstCell.value = cleanStr;\n }\n // Replace double quotes with empty chars because they can\n // be included in formulas causing issues with\n // the regex and the outline level calculation\n const leadingSpaces =\n cleanStr.replace(/\"/g, \"\").match(/^ */)?.[0].length || 0;\n const outlineLevel = Math.floor(leadingSpaces / 8) + 1;\n row.outlineLevel = outlineLevel - 1;\n lastOutlineLevel = outlineLevel;\n } else {\n row.outlineLevel = lastOutlineLevel;\n }\n });\n};\n"]}
@@ -89,11 +89,11 @@ const addTreeNodeRows = (worksheet, fileFormat, webupManagerData, columnsMaxWidt
89
89
  if (!splitNodesToColumns) {
90
90
  // Level-based indentation
91
91
  const indent = ` `.repeat(level);
92
- cellValue = `${indent}${row.obj?.k}: ${row.value}`;
92
+ cellValue = `${indent}${row.value}: ${row.decode ?? ""}`;
93
93
  }
94
94
  else if (column.name === (0, exports.getTreeNodeColumnName)(level)) {
95
95
  // No indentation
96
- cellValue = `${row.obj?.k}: ${row.value}`;
96
+ cellValue = `${row.value}: ${row.decode ?? ""}`;
97
97
  }
98
98
  }
99
99
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"tree-converter.js","sourceRoot":"","sources":["../../../src/converters/excel/tree-converter.ts"],"names":[],"mappings":";;;;;;AA4BA,0DAyDC;AAhFD,mEAGiC;AACjC,sDAA8B;AAC9B,uCAKmB;AACnB,6EAAmE;AACnE,iEAGqC;AACrC,yDAA0D;AAOnD,KAAK,UAAU,uBAAuB,CAC3C,SAGC,EACD,UAAkC,EAClC,gBAAkC,EAClC,mBAAmB,GAAG,IAAI,EAC1B,QAAgB,EAAE;IAElB,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,iBAAO,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,IAAA,6BAAmB,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,eAAe,GAAqC,EAAE,CAAC;IAE7D,sBAAsB;IACtB,MAAM,aAAa,GAAG,cAAc,CAClC,SAAS,EACT,aAAa,CAAC,OAAO,IAAI,EAAE,EAC3B,aAAa,CAAC,QAAQ,EACtB,mBAAmB,EACnB,KAAK,CACN,CAAC;IAEF,mBAAmB;IACnB,eAAe,CACb,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,CAAC,QAAQ,EACtB,mBAAmB,CACpB,CAAC;IAEF,SAAS;IACT,IAAI,oDAA4B,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;QAC9D,IAAA,4BAAkB,EAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxE,CAAC;IAED,4BAA4B;IAC5B,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,IAAA,kCAAwB,EAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAEtD,sDAAsD;IACtD,QAAQ,CAAC,cAAc,GAAG;QACxB,cAAc,EAAE,IAAI;KACrB,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,cAAc,GAAG,CACrB,SAA4B,EAC5B,OAA0B,EAC1B,QAAyB,EACzB,mBAA4B,EAC5B,KAAoB,EACD,EAAE;IACrB,MAAM,kBAAkB,GAAG,CACzB,QAAyB,EACzB,WAA8B,EAC9B,KAAK,GAAG,CAAC,EACT,EAAE;QACF,IACE,CAAC,WAAW,CAAC,IAAI,CACf,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,IAAA,6BAAqB,EAAC,KAAK,CAAC,CAC/D,EACD,CAAC;YACD,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,IAAA,6BAAqB,EAAC,KAAK,CAAC;gBAClC,KAAK,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE;aACvB,CAAC,CAAC;QACL,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrB,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,IAAI,mBAAmB,EAAE,CAAC;QACxB,gCAAgC;QAChC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,2CAA2C;QAC3C,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,IAAA,6BAAqB,EAAC,CAAC,CAAC;YAC9B,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;IACL,CAAC;IAED,MAAM,eAAe,GAAsB,IAAA,oCAAkB,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAsB,CAAC,GAAG,WAAW,EAAE,GAAG,eAAe,CAAC,CAAC;IAE9E,wBAAwB;IACxB,SAAS,CAAC,OAAO,GAAG,aAAa,CAAC,GAAG,CAA0B,MAAM,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QAC1B,GAAG,EAAE,MAAM,CAAC,IAAI;QAChB,MAAM,EAAE,IAAA,sCAAc,EAAC,MAAM,CAAC;KAC/B,CAAC,CAAC,CAAC;IACJ,+BAA+B;IAC/B,IAAA,0BAAgB,EAAC,SAAS,EAAE,kDAA0B,EAAE,IAAI,CAAC,CAAC;IAC9D,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,SAA4B,EAC5B,UAAkC,EAClC,gBAAkC,EAClC,eAAiD,EACjD,OAA0B,EAC1B,QAAyB,EACzB,mBAA4B,EAC5B,KAAK,GAAG,CAAC,EACH,EAAE;IACR,MAAM,gBAAgB,GAAG,CAAC,GAAkB,EAA8B,EAAE;QAC1E,OAAO,OAAO,CAAC,GAAG,CAAyB,MAAM,CAAC,EAAE;YAClD,oBAAoB;YACpB,IAAI,SAAS,GAA2B,EAAE,CAAC;YAE3C,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAAuB,CAAC,EAAE,CAAC;gBAClD,iBAAiB;gBACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACzB,0BAA0B;oBAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACtC,SAAS,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;gBACrD,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAA,6BAAqB,EAAC,KAAK,CAAC,EAAE,CAAC;oBACxD,iBAAiB;oBACjB,SAAS,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC5C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,SAAS,GAAG,IAAA,oCAAkB,EAC5B,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EACzC,UAAU,EACV,gBAAgB,CACjB,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3D,MAAM,UAAU,GACd,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;YAC/D,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YAErE,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACrB,qBAAqB;QACrB,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAEnD,IAAI,oDAA4B,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,IAAA,uCAAoB,EAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,eAAe,CACb,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,GAAG,CAAC,QAAQ,IAAI,EAAE,EAClB,mBAAmB,EACnB,KAAK,GAAG,CAAC,CACV,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEW,QAAA,uBAAuB,GAAG,gBAAgB,CAAC;AAEjD,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;IACrD,OAAO,GAAG,+BAAuB,GAAG,KAAK,EAAE,CAAC;AAC9C,CAAC,CAAC;AAFW,QAAA,qBAAqB,yBAEhC","sourcesContent":["import {\n GenericObject,\n SupportedExportFormats,\n WebupManagerData,\n} from \"../../types/index\";\nimport {\n exportTypeSupportsFormatting,\n STARTING_ROW_WITHOUT_TITLE,\n} from \"./excel-converter.types\";\nimport ExcelJS from \"exceljs\";\nimport {\n addFooterTotalsRow,\n initializeWorksheet,\n resolveWorksheetFormulas,\n setHeaderStyling,\n} from \"./commons\";\nimport { isColumnHidden } from \"../../utils/datastructure-utility\";\nimport {\n getFilteredColumns,\n calculateCellValue,\n} from \"../../utils/commons-utility\";\nimport { addStyleToExceljsRow } from \"./matrix-converter\";\nimport { SmeupDataColumn } from \"../../types/data-structures/smeupDataTable\";\nimport {\n SmeupDataTree,\n SmeupDataNode,\n} from \"../../types/data-structures/smeupDataTree\";\n\nexport async function dataTreeToExcelWorkbook(\n component: {\n smeupDataTree: SmeupDataTree;\n props: GenericObject;\n },\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n splitNodesToColumns = true,\n title: string = \"\",\n): Promise<ExcelJS.Workbook> {\n const { smeupDataTree, props } = component;\n const workbook = new ExcelJS.Workbook();\n const worksheet = initializeWorksheet(workbook, title);\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 // Resolve formulas and values for grouped rows\n resolveWorksheetFormulas(worksheet, webupManagerData);\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, STARTING_ROW_WITHOUT_TITLE, 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
+ {"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\";\nimport {\n exportTypeSupportsFormatting,\n STARTING_ROW_WITHOUT_TITLE,\n} from \"./excel-converter.types\";\nimport ExcelJS from \"exceljs\";\nimport {\n addFooterTotalsRow,\n initializeWorksheet,\n resolveWorksheetFormulas,\n setHeaderStyling,\n} from \"./commons\";\nimport { isColumnHidden } from \"../../utils/datastructure-utility\";\nimport {\n getFilteredColumns,\n calculateCellValue,\n} from \"../../utils/commons-utility\";\nimport { addStyleToExceljsRow } from \"./matrix-converter\";\nimport { SmeupDataColumn } from \"../../types/data-structures/smeupDataTable\";\nimport {\n SmeupDataTree,\n SmeupDataNode,\n} from \"../../types/data-structures/smeupDataTree\";\n\nexport async function dataTreeToExcelWorkbook(\n component: {\n smeupDataTree: SmeupDataTree;\n props: GenericObject;\n },\n fileFormat: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n splitNodesToColumns = true,\n title: string = \"\",\n): Promise<ExcelJS.Workbook> {\n const { smeupDataTree, props } = component;\n const workbook = new ExcelJS.Workbook();\n const worksheet = initializeWorksheet(workbook, title);\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 // Resolve formulas and values for grouped rows\n resolveWorksheetFormulas(worksheet, webupManagerData);\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, STARTING_ROW_WITHOUT_TITLE, 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.value}: ${row.decode ?? \"\"}`;\n } else if (column.name === getTreeNodeColumnName(level)) {\n // No indentation\n cellValue = `${row.value}: ${row.decode ?? \"\"}`;\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"]}
@@ -30,7 +30,7 @@ const buildLayout5 = (row, columns, columnNames, context, options) => {
30
30
  // Get the cell
31
31
  const cell = row.cells?.[columnName] ?? {
32
32
  value: "",
33
- obj: { t: "", p: "", k: "" },
33
+ obj: { t: "", p: "" },
34
34
  };
35
35
  // Check if this is an image cell
36
36
  if ((0, cells_utility_1.cellIsImage)(cell) && !imageCell) {
@@ -95,7 +95,7 @@ const buildTwoColumnLayout = (row, columns, columnNames, context, options, label
95
95
  // Get the cell value (empty string if missing)
96
96
  const cell = row.cells?.[columnName] ?? {
97
97
  value: "",
98
- obj: { t: "", p: "", k: "" },
98
+ obj: { t: "", p: "" },
99
99
  };
100
100
  body.push([
101
101
  {
@@ -1 +1 @@
1
- {"version":3,"file":"box-layouts.js","sourceRoot":"","sources":["../../../../../../src/converters/pdf/pdfmake/adapters/box/box-layouts.ts"],"names":[],"mappings":"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","sourcesContent":["import { Content, Style } from \"pdfmake/interfaces\";\nimport {\n SmeupDataRow,\n SmeupDataColumn,\n SmeupDataCell,\n} from \"../../../../../types/data-structures/smeupDataTable\";\nimport { PdfMakeConverterContext } from \"../../pdfmake.types\";\nimport { BoxOptions } from \"../../../../../types/component\";\nimport { cellIsImage } from \"../../../../../utils/cells-utility\";\nimport { imgCellConverter, txtCellConverter } from \"../cell-converter\";\nimport { addWordBreakOpportunities } from \"../../../../../utils/formatter-utility\";\nimport { labelDefaultStyle, valueDefaultStyle } from \"./box-styles\";\n\nexport const buildLayout1 = (\n row: SmeupDataRow,\n columns: SmeupDataColumn[],\n columnNames: string[],\n context: PdfMakeConverterContext,\n options: BoxOptions,\n): unknown => {\n return buildTwoColumnLayout(\n row,\n columns,\n columnNames,\n context,\n options,\n labelDefaultStyle,\n valueDefaultStyle,\n );\n};\n\nexport const buildLayout2 = (\n row: SmeupDataRow,\n columns: SmeupDataColumn[],\n columnNames: string[],\n context: PdfMakeConverterContext,\n options: BoxOptions,\n): unknown => {\n return buildTwoColumnLayout(\n row,\n columns,\n columnNames,\n context,\n options,\n labelDefaultStyle,\n { ...valueDefaultStyle, alignment: \"right\" },\n );\n};\n\nexport const buildLayout5 = (\n row: SmeupDataRow,\n columns: SmeupDataColumn[],\n columnNames: string[],\n context: PdfMakeConverterContext,\n options: BoxOptions,\n): unknown => {\n const body: unknown[][] = [];\n\n // Check if there's an image cell\n let imageCell: SmeupDataCell | null = null;\n const dataCells: Array<{ label: string; content: Content }> = [];\n\n for (const columnName of columnNames) {\n // Find the column definition\n const columnDef = columns.find(col => col.name === columnName);\n\n if (!columnDef) {\n console.warn(`Column \"${columnName}\" not found in data columns`);\n continue;\n }\n\n // Get the label (title with fallback to name)\n const label = columnDef.title || columnDef.name;\n\n // Get the cell\n const cell = (row.cells?.[columnName] as SmeupDataCell) ?? {\n value: \"\",\n obj: { t: \"\", p: \"\", k: \"\" },\n };\n\n // Check if this is an image cell\n if (cellIsImage(cell) && !imageCell) {\n imageCell = cell;\n } else {\n const content = txtCellConverter(\n cell,\n {},\n \"box__value\",\n context.webupManagerData,\n );\n dataCells.push({ label, content });\n }\n }\n\n // Build the table body\n const hasImage = imageCell !== null;\n\n for (let i = 0; i < dataCells.length; i++) {\n const { label, content } = dataCells[i];\n\n const labelCell = {\n text: addWordBreakOpportunities(label),\n style: \"box__label\",\n alignment: \"right\",\n ...labelDefaultStyle,\n };\n\n const valueCell = {\n ...(content as object),\n style: \"box__value\",\n ...valueDefaultStyle,\n };\n\n const row: unknown[] = [];\n\n // Add image column if present\n if (hasImage) {\n if (i === 0) {\n // First row: include image with rowspan\n row.push(imgCellConverter(imageCell!, options, dataCells.length));\n } else {\n // Subsequent rows: empty cell (handled by rowspan)\n row.push({});\n }\n }\n\n row.push(labelCell, valueCell);\n body.push(row);\n }\n\n return buildCard({\n table: {\n widths: hasImage ? [\"33%\", \"*\", \"*\"] : [\"*\", \"*\"],\n body: body,\n },\n layout: \"noBorders\",\n padding: [10, 10, 10, 10],\n } as Content);\n};\n\nconst buildTwoColumnLayout = (\n row: SmeupDataRow,\n columns: SmeupDataColumn[],\n columnNames: string[],\n context: PdfMakeConverterContext,\n options: BoxOptions,\n labelInnerStyle: Style,\n valueInnerStyle: Style,\n): unknown => {\n const body: unknown[] = [];\n\n for (const columnName of columnNames) {\n // Find the column definition\n const columnDef = columns.find(col => col.name === columnName);\n\n if (!columnDef) {\n console.warn(`Column \"${columnName}\" not found in data columns`);\n continue;\n }\n\n // Get the label (title with fallback to name)\n const label = columnDef.title || columnDef.name;\n\n // Get the cell value (empty string if missing)\n const cell = (row.cells?.[columnName] as SmeupDataCell) ?? {\n value: \"\",\n obj: { t: \"\", p: \"\", k: \"\" },\n };\n\n body.push([\n {\n text: [{ text: addWordBreakOpportunities(label), ...labelInnerStyle }],\n style: \"box__label\",\n noWrap: false,\n },\n cellIsImage(cell)\n ? imgCellConverter(cell, options)\n : txtCellConverter(\n cell,\n valueInnerStyle,\n \"box__value\",\n context.webupManagerData,\n ),\n ]);\n }\n\n return buildCard({\n table: {\n widths: [\"*\", \"*\"],\n body: body,\n },\n layout: \"noBorders\",\n padding: [10, 10, 10, 10],\n } as Content);\n};\n\nconst buildCard = (content: Content): unknown => {\n return {\n table: {\n widths: [\"*\"],\n body: [[content]],\n },\n layout: {\n hLineWidth: function (_i: number, _node: unknown) {\n return 1;\n },\n vLineWidth: function (_i: number, _node: unknown) {\n return 1;\n },\n hLineColor: function (_i: number, _node: unknown) {\n return \"#CCCCCC\";\n },\n vLineColor: function (_i: number, _node: unknown) {\n return \"#CCCCCC\";\n },\n },\n margin: [0, 0, 0, 10],\n unbreakable: true,\n };\n};\n"]}
1
+ {"version":3,"file":"box-layouts.js","sourceRoot":"","sources":["../../../../../../src/converters/pdf/pdfmake/adapters/box/box-layouts.ts"],"names":[],"mappings":"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","sourcesContent":["import { Content, Style } from \"pdfmake/interfaces\";\nimport {\n SmeupDataRow,\n SmeupDataColumn,\n SmeupDataCell,\n} from \"../../../../../types/data-structures/smeupDataTable\";\nimport { PdfMakeConverterContext } from \"../../pdfmake.types\";\nimport { BoxOptions } from \"../../../../../types/component\";\nimport { cellIsImage } from \"../../../../../utils/cells-utility\";\nimport { imgCellConverter, txtCellConverter } from \"../cell-converter\";\nimport { addWordBreakOpportunities } from \"../../../../../utils/formatter-utility\";\nimport { labelDefaultStyle, valueDefaultStyle } from \"./box-styles\";\n\nexport const buildLayout1 = (\n row: SmeupDataRow,\n columns: SmeupDataColumn[],\n columnNames: string[],\n context: PdfMakeConverterContext,\n options: BoxOptions,\n): unknown => {\n return buildTwoColumnLayout(\n row,\n columns,\n columnNames,\n context,\n options,\n labelDefaultStyle,\n valueDefaultStyle,\n );\n};\n\nexport const buildLayout2 = (\n row: SmeupDataRow,\n columns: SmeupDataColumn[],\n columnNames: string[],\n context: PdfMakeConverterContext,\n options: BoxOptions,\n): unknown => {\n return buildTwoColumnLayout(\n row,\n columns,\n columnNames,\n context,\n options,\n labelDefaultStyle,\n { ...valueDefaultStyle, alignment: \"right\" },\n );\n};\n\nexport const buildLayout5 = (\n row: SmeupDataRow,\n columns: SmeupDataColumn[],\n columnNames: string[],\n context: PdfMakeConverterContext,\n options: BoxOptions,\n): unknown => {\n const body: unknown[][] = [];\n\n // Check if there's an image cell\n let imageCell: SmeupDataCell | null = null;\n const dataCells: Array<{ label: string; content: Content }> = [];\n\n for (const columnName of columnNames) {\n // Find the column definition\n const columnDef = columns.find(col => col.name === columnName);\n\n if (!columnDef) {\n console.warn(`Column \"${columnName}\" not found in data columns`);\n continue;\n }\n\n // Get the label (title with fallback to name)\n const label = columnDef.title || columnDef.name;\n\n // Get the cell\n const cell = (row.cells?.[columnName] as SmeupDataCell) ?? {\n value: \"\",\n obj: { t: \"\", p: \"\" },\n };\n\n // Check if this is an image cell\n if (cellIsImage(cell) && !imageCell) {\n imageCell = cell;\n } else {\n const content = txtCellConverter(\n cell,\n {},\n \"box__value\",\n context.webupManagerData,\n );\n dataCells.push({ label, content });\n }\n }\n\n // Build the table body\n const hasImage = imageCell !== null;\n\n for (let i = 0; i < dataCells.length; i++) {\n const { label, content } = dataCells[i];\n\n const labelCell = {\n text: addWordBreakOpportunities(label),\n style: \"box__label\",\n alignment: \"right\",\n ...labelDefaultStyle,\n };\n\n const valueCell = {\n ...(content as object),\n style: \"box__value\",\n ...valueDefaultStyle,\n };\n\n const row: unknown[] = [];\n\n // Add image column if present\n if (hasImage) {\n if (i === 0) {\n // First row: include image with rowspan\n row.push(imgCellConverter(imageCell!, options, dataCells.length));\n } else {\n // Subsequent rows: empty cell (handled by rowspan)\n row.push({});\n }\n }\n\n row.push(labelCell, valueCell);\n body.push(row);\n }\n\n return buildCard({\n table: {\n widths: hasImage ? [\"33%\", \"*\", \"*\"] : [\"*\", \"*\"],\n body: body,\n },\n layout: \"noBorders\",\n padding: [10, 10, 10, 10],\n } as Content);\n};\n\nconst buildTwoColumnLayout = (\n row: SmeupDataRow,\n columns: SmeupDataColumn[],\n columnNames: string[],\n context: PdfMakeConverterContext,\n options: BoxOptions,\n labelInnerStyle: Style,\n valueInnerStyle: Style,\n): unknown => {\n const body: unknown[] = [];\n\n for (const columnName of columnNames) {\n // Find the column definition\n const columnDef = columns.find(col => col.name === columnName);\n\n if (!columnDef) {\n console.warn(`Column \"${columnName}\" not found in data columns`);\n continue;\n }\n\n // Get the label (title with fallback to name)\n const label = columnDef.title || columnDef.name;\n\n // Get the cell value (empty string if missing)\n const cell = (row.cells?.[columnName] as SmeupDataCell) ?? {\n value: \"\",\n obj: { t: \"\", p: \"\" },\n };\n\n body.push([\n {\n text: [{ text: addWordBreakOpportunities(label), ...labelInnerStyle }],\n style: \"box__label\",\n noWrap: false,\n },\n cellIsImage(cell)\n ? imgCellConverter(cell, options)\n : txtCellConverter(\n cell,\n valueInnerStyle,\n \"box__value\",\n context.webupManagerData,\n ),\n ]);\n }\n\n return buildCard({\n table: {\n widths: [\"*\", \"*\"],\n body: body,\n },\n layout: \"noBorders\",\n padding: [10, 10, 10, 10],\n } as Content);\n};\n\nconst buildCard = (content: Content): unknown => {\n return {\n table: {\n widths: [\"*\"],\n body: [[content]],\n },\n layout: {\n hLineWidth: function (_i: number, _node: unknown) {\n return 1;\n },\n vLineWidth: function (_i: number, _node: unknown) {\n return 1;\n },\n hLineColor: function (_i: number, _node: unknown) {\n return \"#CCCCCC\";\n },\n vLineColor: function (_i: number, _node: unknown) {\n return \"#CCCCCC\";\n },\n },\n margin: [0, 0, 0, 10],\n unbreakable: true,\n };\n};\n"]}
@@ -44,8 +44,8 @@ const convertStyleAttributes = (styleAttributes) => {
44
44
  const imgCellConverter = (cell, options, rowSpan = 1, alignment = "left") => {
45
45
  const fit = options.ImageFit ? parseInt(options.ImageFit) : 60;
46
46
  const imageProvider = (0, objects_utility_1.objectsIsURL)(cell.obj)
47
- ? { url: cell.obj.k }
48
- : { obj: { ...cell.obj } };
47
+ ? { url: cell.value }
48
+ : { obj: { ...cell.obj }, value: cell.value };
49
49
  return {
50
50
  image: { smeup: imageProvider },
51
51
  fit: [fit, fit],
@@ -1 +1 @@
1
- {"version":3,"file":"cell-converter.js","sourceRoot":"","sources":["../../../../../src/converters/pdf/pdfmake/adapters/cell-converter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Content, Style } from \"pdfmake/interfaces\";\nimport { BoxOptions } from \"../../../../types/component\";\nimport { SmeupDataCell } from \"../../../../types/data-structures/smeupDataTable\";\nimport { objectsIsURL } from \"../../../../utils/objects-utility\";\nimport { SupportedExportFormats, WebupManagerData } from \"../../../../types\";\nimport { calculateCellValue } from \"../../../../utils/commons-utility\";\nimport { addWordBreakOpportunities } from \"../../../../utils/formatter-utility\";\n\n/**\n * Converts RGB format \"R000G000B000\" to hex \"#000000\"\n */\nconst rgbToHex = (rgbString: string): string => {\n const rMatch = rgbString.match(/R(\\d{3})/);\n const gMatch = rgbString.match(/G(\\d{3})/);\n const bMatch = rgbString.match(/B(\\d{3})/);\n\n if (!rMatch || !gMatch || !bMatch) return \"#000000\";\n\n const r = parseInt(rMatch[1]).toString(16).padStart(2, \"0\");\n const g = parseInt(gMatch[1]).toString(16).padStart(2, \"0\");\n const b = parseInt(bMatch[1]).toString(16).padStart(2, \"0\");\n\n return `#${r}${g}${b}`;\n};\n\n/**\n * Converts style attributes to PDFMake Style object\n */\nconst convertStyleAttributes = (\n styleAttributes: Record<string, string>,\n): Style => {\n const style: Style = {};\n\n if (styleAttributes.FontColor) {\n style.color = rgbToHex(styleAttributes.FontColor);\n }\n\n if (styleAttributes.BackColor) {\n style.fillColor = rgbToHex(styleAttributes.BackColor);\n }\n\n if (styleAttributes.FontBold === \"Yes\") {\n style.bold = true;\n }\n\n if (styleAttributes.FontItalic === \"Yes\") {\n style.italics = true;\n }\n\n if (styleAttributes.FontULine === \"Yes\") {\n style.decoration = \"underline\";\n }\n\n return style;\n};\n\nexport const imgCellConverter = (\n cell: SmeupDataCell,\n options: BoxOptions,\n rowSpan: number = 1,\n alignment: \"center\" | \"left\" | \"right\" = \"left\",\n): unknown => {\n const fit = options.ImageFit ? parseInt(options.ImageFit) : 60;\n const imageProvider = objectsIsURL(cell.obj)\n ? { url: cell.obj!.k }\n : { obj: { ...cell.obj } };\n return {\n image: { smeup: imageProvider },\n fit: [fit, fit],\n alignment: alignment,\n rowSpan: rowSpan,\n };\n};\n\nexport const txtCellConverter = (\n cell: SmeupDataCell,\n defaultStyle: Style,\n styleName: string,\n webupManagerData: WebupManagerData,\n): Content => {\n const style = convertStyleAttributes(cell.styleAttributes ?? {});\n\n const value = calculateCellValue(\n cell,\n SupportedExportFormats.PDF,\n webupManagerData,\n ) as string;\n\n return {\n ...defaultStyle,\n ...style,\n text: addWordBreakOpportunities(value),\n ...(styleName ? { style: styleName } : {}),\n };\n};\n"]}
1
+ {"version":3,"file":"cell-converter.js","sourceRoot":"","sources":["../../../../../src/converters/pdf/pdfmake/adapters/cell-converter.ts"],"names":[],"mappings":";;;AAGA,uEAAiE;AACjE,6CAA6E;AAC7E,uEAAuE;AACvE,2EAAgF;AAEhF;;GAEG;AACH,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAU,EAAE;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAEpD,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE5D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAC7B,eAAuC,EAChC,EAAE;IACT,MAAM,KAAK,GAAU,EAAE,CAAC;IAExB,IAAI,eAAe,CAAC,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,eAAe,CAAC,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,eAAe,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACzC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,eAAe,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QACxC,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEK,MAAM,gBAAgB,GAAG,CAC9B,IAAmB,EACnB,OAAmB,EACnB,UAAkB,CAAC,EACnB,YAAyC,MAAM,EACtC,EAAE;IACX,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,GAAG,CAAC;QAC1C,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE;QACrB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAChD,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;QAC/B,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;QACf,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,gBAAgB,oBAgB3B;AAEK,MAAM,gBAAgB,GAAG,CAC9B,IAAmB,EACnB,YAAmB,EACnB,SAAiB,EACjB,gBAAkC,EACzB,EAAE;IACX,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IAEjE,MAAM,KAAK,GAAG,IAAA,oCAAkB,EAC9B,IAAI,EACJ,8BAAsB,CAAC,GAAG,EAC1B,gBAAgB,CACP,CAAC;IAEZ,OAAO;QACL,GAAG,YAAY;QACf,GAAG,KAAK;QACR,IAAI,EAAE,IAAA,6CAAyB,EAAC,KAAK,CAAC;QACtC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,gBAAgB,oBAoB3B","sourcesContent":["import { Content, Style } from \"pdfmake/interfaces\";\nimport { BoxOptions } from \"../../../../types/component\";\nimport { SmeupDataCell } from \"../../../../types/data-structures/smeupDataTable\";\nimport { objectsIsURL } from \"../../../../utils/objects-utility\";\nimport { SupportedExportFormats, WebupManagerData } from \"../../../../types\";\nimport { calculateCellValue } from \"../../../../utils/commons-utility\";\nimport { addWordBreakOpportunities } from \"../../../../utils/formatter-utility\";\n\n/**\n * Converts RGB format \"R000G000B000\" to hex \"#000000\"\n */\nconst rgbToHex = (rgbString: string): string => {\n const rMatch = rgbString.match(/R(\\d{3})/);\n const gMatch = rgbString.match(/G(\\d{3})/);\n const bMatch = rgbString.match(/B(\\d{3})/);\n\n if (!rMatch || !gMatch || !bMatch) return \"#000000\";\n\n const r = parseInt(rMatch[1]).toString(16).padStart(2, \"0\");\n const g = parseInt(gMatch[1]).toString(16).padStart(2, \"0\");\n const b = parseInt(bMatch[1]).toString(16).padStart(2, \"0\");\n\n return `#${r}${g}${b}`;\n};\n\n/**\n * Converts style attributes to PDFMake Style object\n */\nconst convertStyleAttributes = (\n styleAttributes: Record<string, string>,\n): Style => {\n const style: Style = {};\n\n if (styleAttributes.FontColor) {\n style.color = rgbToHex(styleAttributes.FontColor);\n }\n\n if (styleAttributes.BackColor) {\n style.fillColor = rgbToHex(styleAttributes.BackColor);\n }\n\n if (styleAttributes.FontBold === \"Yes\") {\n style.bold = true;\n }\n\n if (styleAttributes.FontItalic === \"Yes\") {\n style.italics = true;\n }\n\n if (styleAttributes.FontULine === \"Yes\") {\n style.decoration = \"underline\";\n }\n\n return style;\n};\n\nexport const imgCellConverter = (\n cell: SmeupDataCell,\n options: BoxOptions,\n rowSpan: number = 1,\n alignment: \"center\" | \"left\" | \"right\" = \"left\",\n): unknown => {\n const fit = options.ImageFit ? parseInt(options.ImageFit) : 60;\n const imageProvider = objectsIsURL(cell.obj)\n ? { url: cell.value }\n : { obj: { ...cell.obj }, value: cell.value };\n return {\n image: { smeup: imageProvider },\n fit: [fit, fit],\n alignment: alignment,\n rowSpan: rowSpan,\n };\n};\n\nexport const txtCellConverter = (\n cell: SmeupDataCell,\n defaultStyle: Style,\n styleName: string,\n webupManagerData: WebupManagerData,\n): Content => {\n const style = convertStyleAttributes(cell.styleAttributes ?? {});\n\n const value = calculateCellValue(\n cell,\n SupportedExportFormats.PDF,\n webupManagerData,\n ) as string;\n\n return {\n ...defaultStyle,\n ...style,\n text: addWordBreakOpportunities(value),\n ...(styleName ? { style: styleName } : {}),\n };\n};\n"]}
@@ -140,10 +140,11 @@ const objectToUrlAdapter = () => {
140
140
  else {
141
141
  const elementImage = element;
142
142
  const obj = elementImage.image.smeup?.obj;
143
- if (!obj || !obj.t || !obj.p || !obj.k) {
144
- throw new Error("Smeup object must have t, p, and k properties to build GET.PATH function");
143
+ const value = elementImage.image.smeup?.value;
144
+ if (!obj || !obj.t || !obj.p || !value) {
145
+ throw new Error("Smeup image must have obj (t, p) and value properties to build GET.PATH function");
145
146
  }
146
- const funToGetPATH = `F(TRE;JASER_12W;GET.PATH) 1(${obj.t};${obj.p};${obj.k})`;
147
+ const funToGetPATH = `F(TRE;JASER_12W;GET.PATH) 1(${obj.t};${obj.p};${value})`;
147
148
  const dataTree = (await context.getSmeupDataStructure(funToGetPATH));
148
149
  if (dataTree.children?.length === 0) {
149
150
  throw new Error(`No data found for function ${funToGetPATH}`);
@@ -1 +1 @@
1
- {"version":3,"file":"image-adapter.js","sourceRoot":"","sources":["../../../../../../src/converters/pdf/pdfmake/adapters/image/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\";\nimport { brokenImage } from \"../../../../../assets/gfx-data\";\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 * Returns brokenImage if the download fails, content-type is not an image, or a network error occurs\n */\nconst downloadImageAsDataUrl = async (\n url: string,\n fetchData: (url: string) => Promise<Response>,\n): Promise<string> => {\n try {\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 if (contentType.startsWith(\"image/svg\")) {\n throw new Error(\n `SVG images are not supported with pdfmake image element`,\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 } catch (error) {\n console.warn(error);\n return brokenImage;\n }\n};\n\n// Cache for in-flight download promises to prevent duplicate downloads\nconst downloadPromises = new Map<string, Promise<string>>();\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 * Uses a promise cache to prevent duplicate downloads when multiple images with the same\n * URL are processed in parallel.\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 // Check if image is already downloaded and cached\n if (!context.pdfDocument.images[url]) {\n // Check if download is already in progress\n if (!downloadPromises.has(url)) {\n console.log(`Downloading image from URL: ${url}`);\n // Start download and cache the promise\n const downloadPromise = downloadImageAsDataUrl(url, context.fetchData)\n .then(dataUrl => {\n // Store result in images cache (including broken images)\n if (context.pdfDocument?.images) {\n context.pdfDocument.images[url] = dataUrl;\n }\n // Clean up promise cache after completion\n downloadPromises.delete(url);\n return dataUrl;\n })\n .catch(error => {\n // On error, still cache the broken image placeholder\n console.warn(`Failed to download image from ${url}:`, error);\n if (context.pdfDocument?.images) {\n context.pdfDocument.images[url] = brokenImage;\n }\n // Clean up promise cache on error\n downloadPromises.delete(url);\n // Don't throw - return the broken image\n return brokenImage;\n });\n\n downloadPromises.set(url, downloadPromise);\n }\n\n // Wait for the download to complete (either started by this call or a previous one)\n await downloadPromises.get(url);\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.warn(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
+ {"version":3,"file":"image-adapter.js","sourceRoot":"","sources":["../../../../../../src/converters/pdf/pdfmake/adapters/image/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\";\nimport { brokenImage } from \"../../../../../assets/gfx-data\";\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 * Returns brokenImage if the download fails, content-type is not an image, or a network error occurs\n */\nconst downloadImageAsDataUrl = async (\n url: string,\n fetchData: (url: string) => Promise<Response>,\n): Promise<string> => {\n try {\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 if (contentType.startsWith(\"image/svg\")) {\n throw new Error(\n `SVG images are not supported with pdfmake image element`,\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 } catch (error) {\n console.warn(error);\n return brokenImage;\n }\n};\n\n// Cache for in-flight download promises to prevent duplicate downloads\nconst downloadPromises = new Map<string, Promise<string>>();\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 * Uses a promise cache to prevent duplicate downloads when multiple images with the same\n * URL are processed in parallel.\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 // Check if image is already downloaded and cached\n if (!context.pdfDocument.images[url]) {\n // Check if download is already in progress\n if (!downloadPromises.has(url)) {\n console.log(`Downloading image from URL: ${url}`);\n // Start download and cache the promise\n const downloadPromise = downloadImageAsDataUrl(url, context.fetchData)\n .then(dataUrl => {\n // Store result in images cache (including broken images)\n if (context.pdfDocument?.images) {\n context.pdfDocument.images[url] = dataUrl;\n }\n // Clean up promise cache after completion\n downloadPromises.delete(url);\n return dataUrl;\n })\n .catch(error => {\n // On error, still cache the broken image placeholder\n console.warn(`Failed to download image from ${url}:`, error);\n if (context.pdfDocument?.images) {\n context.pdfDocument.images[url] = brokenImage;\n }\n // Clean up promise cache on error\n downloadPromises.delete(url);\n // Don't throw - return the broken image\n return brokenImage;\n });\n\n downloadPromises.set(url, downloadPromise);\n }\n\n // Wait for the download to complete (either started by this call or a previous one)\n await downloadPromises.get(url);\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 const value = elementImage.image.smeup?.value;\n if (!obj || !obj.t || !obj.p || !value) {\n throw new Error(\n \"Smeup image must have obj (t, p) and value properties to build GET.PATH function\",\n );\n }\n const funToGetPATH = `F(TRE;JASER_12W;GET.PATH) 1(${obj.t};${obj.p};${value})`;\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.warn(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"]}
@@ -43,6 +43,7 @@ export declare class AdapterError extends Error {
43
43
  export interface SmeupExtensionImageMetadata {
44
44
  url?: string;
45
45
  obj?: SmeupDataObj;
46
+ value?: string;
46
47
  }
47
48
  export interface SmeupExtensionTableMetadata<T = ComponentOptions> {
48
49
  fun?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pdfmake.types.js","sourceRoot":"","sources":["../../../../src/converters/pdf/pdfmake/pdfmake.types.ts"],"names":[],"mappings":";;;AAuDA,MAAa,YAAa,SAAQ,KAAK;IACrC,OAAO,CAAU;IACjB,YAAY,OAAe,EAAE,OAAgB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACF;AAPD,oCAOC","sourcesContent":["import {\n ContentImage,\n Table,\n TDocumentDefinitions,\n ContentSvg,\n} from \"pdfmake/interfaces\";\nimport { SmeupDataObj, WebupManagerData } from \"../../../types\";\nimport { SmeupDataStructure } from \"../../../types/data-structures/smeupDataStructure\";\nimport { SmeupDataTable } from \"../../../types/data-structures/smeupDataTable\";\nimport { BoxOptions, ComponentOptions } from \"../../../types/component\";\n\n/**\n * Context passed to adapter functions during document processing.\n */\nexport interface PdfMakeConverterContext<\n T extends SmeupDataStructure = SmeupDataStructure,\n> {\n webupManagerData: WebupManagerData;\n pdfDocument?: TDocumentDefinitions;\n damSvcEndpoint?: string;\n getSmeupDataStructure?: (fun: string) => Promise<T>;\n fetchData?: (url: string) => Promise<Response>;\n /**\n * Internal property used by adapters that need to recursively process content.\n * This is populated by the adapter processor and should not be set by external code.\n * @internal\n */\n _adapters?: Map<string, PdfmakeAdapter>;\n}\n\n/**\n * Function that transforms an element from custom format to pdfmake standard format.\n * Adapters are pure functions that receive an element and context, and return the transformed element.\n * Can be synchronous or asynchronous.\n */\nexport type PdfmakeAdapter = (\n element: unknown,\n context: PdfMakeConverterContext,\n) => unknown | Promise<unknown>;\n\n/**\n * Registry interface for managing pdfmake adapters at runtime.\n */\nexport interface AdapterRegistry {\n /** Register an adapter for a specific element type */\n register: (elementType: string, adapter: PdfmakeAdapter) => void;\n /** Unregister an adapter for a specific element type */\n unregister: (elementType: string) => void;\n /** Process a document by applying registered adapters */\n process: (\n document: unknown,\n context: Partial<PdfMakeConverterContext>,\n ) => Promise<unknown>;\n}\n\nexport class AdapterError extends Error {\n element: unknown;\n constructor(message: string, element: unknown) {\n super(message);\n this.element = element;\n Object.setPrototypeOf(this, AdapterError.prototype);\n }\n}\n\nexport interface SmeupExtensionImageMetadata {\n url?: string;\n obj?: SmeupDataObj;\n}\n\nexport interface SmeupExtensionTableMetadata<T = ComponentOptions> {\n fun?: string;\n data?: SmeupDataTable;\n options?: T;\n}\n\nexport interface ContentImageExtension extends ContentImage {\n smeup?: SmeupExtensionImageMetadata;\n}\n\nexport interface TableExtension extends Table {\n smeup?: SmeupExtensionTableMetadata;\n}\n\nexport interface ElementWithImageExtension {\n image: ContentImage & { smeup?: SmeupExtensionImageMetadata };\n}\n\nexport interface ElementWithTableExtension {\n table: Table & { smeup?: SmeupExtensionTableMetadata };\n}\n\nexport type LayoutLineFunction = (i: number, node?: unknown) => number;\nexport type LayoutColorFunction = (i: number, node?: unknown) => string;\n\nexport interface Layout {\n hLineWidth?: number | LayoutLineFunction;\n vLineWidth?: number | LayoutLineFunction;\n hLineColor?: string | LayoutColorFunction;\n vLineColor?: string | LayoutColorFunction;\n}\n\nexport interface ElementWithLayout {\n layout?: Layout;\n [key: string]: unknown;\n}\n\nexport interface ContentChartExtension extends ContentSvg {\n smeup?: SmeupExtensionTableMetadata;\n}\n\nexport interface ElementWithChartExtension {\n chart: ContentChartExtension;\n}\n\nexport interface ContentBoxExtension {\n box: {\n smeup?: {\n data?: SmeupDataTable;\n fun?: string;\n options?: BoxOptions;\n };\n };\n}\n\nexport interface ElementWithBoxExtension {\n box: ContentBoxExtension[\"box\"];\n [key: string]: unknown;\n}\n"]}
1
+ {"version":3,"file":"pdfmake.types.js","sourceRoot":"","sources":["../../../../src/converters/pdf/pdfmake/pdfmake.types.ts"],"names":[],"mappings":";;;AAuDA,MAAa,YAAa,SAAQ,KAAK;IACrC,OAAO,CAAU;IACjB,YAAY,OAAe,EAAE,OAAgB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACF;AAPD,oCAOC","sourcesContent":["import {\n ContentImage,\n Table,\n TDocumentDefinitions,\n ContentSvg,\n} from \"pdfmake/interfaces\";\nimport { SmeupDataObj, WebupManagerData } from \"../../../types\";\nimport { SmeupDataStructure } from \"../../../types/data-structures/smeupDataStructure\";\nimport { SmeupDataTable } from \"../../../types/data-structures/smeupDataTable\";\nimport { BoxOptions, ComponentOptions } from \"../../../types/component\";\n\n/**\n * Context passed to adapter functions during document processing.\n */\nexport interface PdfMakeConverterContext<\n T extends SmeupDataStructure = SmeupDataStructure,\n> {\n webupManagerData: WebupManagerData;\n pdfDocument?: TDocumentDefinitions;\n damSvcEndpoint?: string;\n getSmeupDataStructure?: (fun: string) => Promise<T>;\n fetchData?: (url: string) => Promise<Response>;\n /**\n * Internal property used by adapters that need to recursively process content.\n * This is populated by the adapter processor and should not be set by external code.\n * @internal\n */\n _adapters?: Map<string, PdfmakeAdapter>;\n}\n\n/**\n * Function that transforms an element from custom format to pdfmake standard format.\n * Adapters are pure functions that receive an element and context, and return the transformed element.\n * Can be synchronous or asynchronous.\n */\nexport type PdfmakeAdapter = (\n element: unknown,\n context: PdfMakeConverterContext,\n) => unknown | Promise<unknown>;\n\n/**\n * Registry interface for managing pdfmake adapters at runtime.\n */\nexport interface AdapterRegistry {\n /** Register an adapter for a specific element type */\n register: (elementType: string, adapter: PdfmakeAdapter) => void;\n /** Unregister an adapter for a specific element type */\n unregister: (elementType: string) => void;\n /** Process a document by applying registered adapters */\n process: (\n document: unknown,\n context: Partial<PdfMakeConverterContext>,\n ) => Promise<unknown>;\n}\n\nexport class AdapterError extends Error {\n element: unknown;\n constructor(message: string, element: unknown) {\n super(message);\n this.element = element;\n Object.setPrototypeOf(this, AdapterError.prototype);\n }\n}\n\nexport interface SmeupExtensionImageMetadata {\n url?: string;\n obj?: SmeupDataObj;\n value?: string;\n}\n\nexport interface SmeupExtensionTableMetadata<T = ComponentOptions> {\n fun?: string;\n data?: SmeupDataTable;\n options?: T;\n}\n\nexport interface ContentImageExtension extends ContentImage {\n smeup?: SmeupExtensionImageMetadata;\n}\n\nexport interface TableExtension extends Table {\n smeup?: SmeupExtensionTableMetadata;\n}\n\nexport interface ElementWithImageExtension {\n image: ContentImage & { smeup?: SmeupExtensionImageMetadata };\n}\n\nexport interface ElementWithTableExtension {\n table: Table & { smeup?: SmeupExtensionTableMetadata };\n}\n\nexport type LayoutLineFunction = (i: number, node?: unknown) => number;\nexport type LayoutColorFunction = (i: number, node?: unknown) => string;\n\nexport interface Layout {\n hLineWidth?: number | LayoutLineFunction;\n vLineWidth?: number | LayoutLineFunction;\n hLineColor?: string | LayoutColorFunction;\n vLineColor?: string | LayoutColorFunction;\n}\n\nexport interface ElementWithLayout {\n layout?: Layout;\n [key: string]: unknown;\n}\n\nexport interface ContentChartExtension extends ContentSvg {\n smeup?: SmeupExtensionTableMetadata;\n}\n\nexport interface ElementWithChartExtension {\n chart: ContentChartExtension;\n}\n\nexport interface ContentBoxExtension {\n box: {\n smeup?: {\n data?: SmeupDataTable;\n fun?: string;\n options?: BoxOptions;\n };\n };\n}\n\nexport interface ElementWithBoxExtension {\n box: ContentBoxExtension[\"box\"];\n [key: string]: unknown;\n}\n"]}
@@ -40,7 +40,6 @@ export interface SmeupDataCell {
40
40
  obj?: {
41
41
  t: string;
42
42
  p: string;
43
- k: string;
44
43
  };
45
44
  options?: SmeupDataCell[];
46
45
  icon?: string;
@@ -61,6 +60,7 @@ export interface SmeupDataCell {
61
60
  inputSettings?: {
62
61
  [key: string]: Object;
63
62
  };
63
+ decode?: string;
64
64
  }
65
65
  /**
66
66
  * Represents the single option of the cell
@@ -1 +1 @@
1
- {"version":3,"file":"smeupDataTable.js","sourceRoot":"","sources":["../../../src/types/data-structures/smeupDataTable.ts"],"names":[],"mappings":";;;AAmFA;;GAEG;AACU,QAAA,mBAAmB,GAAG;IACjC,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,KAAK;IACnB,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,cAAc,EAAE,KAAK;IACrB,WAAW,EAAE,KAAK;IAClB,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,KAAK;IACX,kBAAkB,EAAE,KAAK;IACzB,cAAc,EAAE,KAAK;IACrB,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,KAAK;IACrB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;CACL,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-wrapper-object-types */\nimport {\n SmeupDataStructure,\n SmeupDataStructureType,\n SmeupLayout,\n} from \"./smeupDataStructure\";\n\nexport interface SmeupDataTable extends SmeupDataStructure {\n type: SmeupDataStructureType.SmeupDataTable;\n columns: SmeupDataColumn[];\n rows: SmeupDataRow[];\n layout?: SmeupLayout;\n cover?: SmeupCover;\n}\n\nexport interface SmeupDataColumn {\n name: string;\n title?: string;\n visible?: boolean;\n isEditable?: boolean;\n isKey?: boolean;\n fill?: string;\n obj?: {\n t: string;\n p: string;\n };\n maxLength?: number;\n length?: number;\n integers?: number;\n decimals?: number;\n tooltip?: boolean;\n formula?: string;\n shape?: SmeupDataCellShapes;\n useAs?: string;\n hideValuesRepetitions?: boolean;\n}\n\nexport interface SmeupDataRow {\n cells?: {\n [columnName: string]: SmeupDataCell;\n };\n layout?: SmeupLayout;\n rowId?: string;\n error?: boolean;\n}\n\nexport interface SmeupDataCell {\n value: string;\n obj?: {\n t: string;\n p: string;\n k: string;\n };\n // multiple options (i.e. radio, checkbox, select, etc.)\n options?: SmeupDataCell[];\n icon?: string;\n isEditable?: boolean;\n hasMCell?: boolean;\n mandatory?: boolean;\n shape?: SmeupDataCellShapes;\n fun?: string;\n tooltip?: boolean;\n data?: {\n [key: string]: Object;\n };\n disabled?: boolean;\n styleName?: string;\n styleAttributes?: {\n [attributeKey: string]: string;\n };\n inputSettings?: {\n [key: string]: Object;\n };\n}\n\n/**\n * Represents the single option of the cell\n */\nexport interface SmeupDataCellOption {\n id: string;\n label: string;\n}\n\n/**\n * Represent the possible shapes of a field\n */\nexport const SmeupDataCellShapes = {\n AUTOCOMPLETE: \"ACP\",\n BUTTON_LIST: \"BTN\",\n CHART: \"GRA\",\n CHECKBOX: \"CHK\",\n CHIP: \"CHI\",\n COLOR_PICKER: \"CLP\",\n COMBOBOX: \"CMB\",\n DATE: \"CAL\",\n EDITOR: \"EDT\",\n GAUGE: \"GAU\",\n ICON: \"ICO\",\n IMAGE: \"IMG\",\n INPUT_CHECKBOX: \"INC\",\n INPUT_FIELD: \"INF\",\n KNOB: \"KNB\",\n LABEL: \"LBL\",\n MEMO: \"MEM\",\n MULTI_AUTOCOMPLETE: \"AML\",\n MULTI_COMBOBOX: \"CML\",\n OBJECT: \"OBJ\",\n PROGRESS_BAR: \"PGB\",\n RADIO: \"RAD\",\n RATING: \"RTG\",\n SWITCH: \"SWT\",\n TABLE: \"TBL\",\n TEXT_FIELD: \"ITX\",\n TIME: \"TIM\",\n INPUT_NUMBER: \"INR\",\n BOOLEAN_BUTTON: \"BNB\",\n RANGE: \"RNG\",\n FILE_UPLOAD: \"FUP\",\n FILE_READER: \"FRE\",\n COMMAND_EXECUTE: \"RUN\",\n ONE_BUTTON: \"BTO\",\n PASSWORD: \"PWD\",\n SPINNER: \"SPN\",\n DECODE: \"DEC\",\n} as const;\n\n/**\n * Represent the type of the shape (like enum)\n */\nexport type SmeupDataCellShapes =\n | (typeof SmeupDataCellShapes)[keyof typeof SmeupDataCellShapes]\n | string;\n\nexport interface SmeupCover {\n image?: string;\n logo?: string;\n titles?: {\n [t: string]: string;\n };\n data?: SmeupDataTable[];\n}\n"]}
1
+ {"version":3,"file":"smeupDataTable.js","sourceRoot":"","sources":["../../../src/types/data-structures/smeupDataTable.ts"],"names":[],"mappings":";;;AAmFA;;GAEG;AACU,QAAA,mBAAmB,GAAG;IACjC,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,KAAK;IACnB,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,cAAc,EAAE,KAAK;IACrB,WAAW,EAAE,KAAK;IAClB,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,KAAK;IACX,kBAAkB,EAAE,KAAK;IACzB,cAAc,EAAE,KAAK;IACrB,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,KAAK;IACrB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;CACL,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-wrapper-object-types */\nimport {\n SmeupDataStructure,\n SmeupDataStructureType,\n SmeupLayout,\n} from \"./smeupDataStructure\";\n\nexport interface SmeupDataTable extends SmeupDataStructure {\n type: SmeupDataStructureType.SmeupDataTable;\n columns: SmeupDataColumn[];\n rows: SmeupDataRow[];\n layout?: SmeupLayout;\n cover?: SmeupCover;\n}\n\nexport interface SmeupDataColumn {\n name: string;\n title?: string;\n visible?: boolean;\n isEditable?: boolean;\n isKey?: boolean;\n fill?: string;\n obj?: {\n t: string;\n p: string;\n };\n maxLength?: number;\n length?: number;\n integers?: number;\n decimals?: number;\n tooltip?: boolean;\n formula?: string;\n shape?: SmeupDataCellShapes;\n useAs?: string;\n hideValuesRepetitions?: boolean;\n}\n\nexport interface SmeupDataRow {\n cells?: {\n [columnName: string]: SmeupDataCell;\n };\n layout?: SmeupLayout;\n rowId?: string;\n error?: boolean;\n}\n\nexport interface SmeupDataCell {\n value: string;\n obj?: {\n t: string;\n p: string;\n };\n // multiple options (i.e. radio, checkbox, select, etc.)\n options?: SmeupDataCell[];\n icon?: string;\n isEditable?: boolean;\n hasMCell?: boolean;\n mandatory?: boolean;\n shape?: SmeupDataCellShapes;\n fun?: string;\n tooltip?: boolean;\n data?: {\n [key: string]: Object;\n };\n disabled?: boolean;\n styleName?: string;\n styleAttributes?: {\n [attributeKey: string]: string;\n };\n inputSettings?: {\n [key: string]: Object;\n };\n decode?: string;\n}\n\n/**\n * Represents the single option of the cell\n */\nexport interface SmeupDataCellOption {\n id: string;\n label: string;\n}\n\n/**\n * Represent the possible shapes of a field\n */\nexport const SmeupDataCellShapes = {\n AUTOCOMPLETE: \"ACP\",\n BUTTON_LIST: \"BTN\",\n CHART: \"GRA\",\n CHECKBOX: \"CHK\",\n CHIP: \"CHI\",\n COLOR_PICKER: \"CLP\",\n COMBOBOX: \"CMB\",\n DATE: \"CAL\",\n EDITOR: \"EDT\",\n GAUGE: \"GAU\",\n ICON: \"ICO\",\n IMAGE: \"IMG\",\n INPUT_CHECKBOX: \"INC\",\n INPUT_FIELD: \"INF\",\n KNOB: \"KNB\",\n LABEL: \"LBL\",\n MEMO: \"MEM\",\n MULTI_AUTOCOMPLETE: \"AML\",\n MULTI_COMBOBOX: \"CML\",\n OBJECT: \"OBJ\",\n PROGRESS_BAR: \"PGB\",\n RADIO: \"RAD\",\n RATING: \"RTG\",\n SWITCH: \"SWT\",\n TABLE: \"TBL\",\n TEXT_FIELD: \"ITX\",\n TIME: \"TIM\",\n INPUT_NUMBER: \"INR\",\n BOOLEAN_BUTTON: \"BNB\",\n RANGE: \"RNG\",\n FILE_UPLOAD: \"FUP\",\n FILE_READER: \"FRE\",\n COMMAND_EXECUTE: \"RUN\",\n ONE_BUTTON: \"BTO\",\n PASSWORD: \"PWD\",\n SPINNER: \"SPN\",\n DECODE: \"DEC\",\n} as const;\n\n/**\n * Represent the type of the shape (like enum)\n */\nexport type SmeupDataCellShapes =\n | (typeof SmeupDataCellShapes)[keyof typeof SmeupDataCellShapes]\n | string;\n\nexport interface SmeupCover {\n image?: string;\n logo?: string;\n titles?: {\n [t: string]: string;\n };\n data?: SmeupDataTable[];\n}\n"]}
@@ -3,7 +3,6 @@ import { SmeupDataCell } from "./data-structures/smeupDataTable";
3
3
  export interface SmeupDataObj {
4
4
  t: string;
5
5
  p: string;
6
- k: string;
7
6
  }
8
7
  export declare enum DatesFormats {
9
8
  ISO_DATE = "YYYY-MM-DD",
@@ -1 +1 @@
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
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AAQA,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}\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,2 +1,8 @@
1
1
  import { SmeupDataCell } from "../types/data-structures/smeupDataTable";
2
2
  export declare const cellIsImage: (cell: SmeupDataCell) => boolean;
3
+ /**
4
+ * Returns the display value for a cell.
5
+ * For technical types (NR, NP, D8) returns the raw value (it will be formatted
6
+ * downstream by calculateValue). For all other types returns decode ?? value.
7
+ */
8
+ export declare const getCellDisplayValue: (cell: SmeupDataCell) => string;
@@ -1,10 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cellIsImage = void 0;
3
+ exports.getCellDisplayValue = exports.cellIsImage = void 0;
4
4
  const cellIsImage = (cell) => {
5
5
  if (!cell)
6
6
  return false;
7
7
  return cell.shape === "IMG";
8
8
  };
9
9
  exports.cellIsImage = cellIsImage;
10
+ /**
11
+ * Returns the display value for a cell.
12
+ * For technical types (NR, NP, D8) returns the raw value (it will be formatted
13
+ * downstream by calculateValue). For all other types returns decode ?? value.
14
+ */
15
+ const getCellDisplayValue = (cell) => {
16
+ const t = cell.obj?.t;
17
+ if (t === "NR" || t === "NP" || t === "D8") {
18
+ return cell.value;
19
+ }
20
+ return cell.decode ?? cell.value;
21
+ };
22
+ exports.getCellDisplayValue = getCellDisplayValue;
10
23
  //# sourceMappingURL=cells-utility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cells-utility.js","sourceRoot":"","sources":["../../src/utils/cells-utility.ts"],"names":[],"mappings":";;;AAEO,MAAM,WAAW,GAAG,CAAC,IAAmB,EAAW,EAAE;IAC1D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;AAC9B,CAAC,CAAC;AAHW,QAAA,WAAW,eAGtB","sourcesContent":["import { SmeupDataCell } from \"../types/data-structures/smeupDataTable\";\n\nexport const cellIsImage = (cell: SmeupDataCell): boolean => {\n if (!cell) return false;\n return cell.shape === \"IMG\";\n};\n"]}
1
+ {"version":3,"file":"cells-utility.js","sourceRoot":"","sources":["../../src/utils/cells-utility.ts"],"names":[],"mappings":";;;AAEO,MAAM,WAAW,GAAG,CAAC,IAAmB,EAAW,EAAE;IAC1D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;AAC9B,CAAC,CAAC;AAHW,QAAA,WAAW,eAGtB;AAEF;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,CAAC,IAAmB,EAAU,EAAE;IACjE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC;AACnC,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B","sourcesContent":["import { SmeupDataCell } from \"../types/data-structures/smeupDataTable\";\n\nexport const cellIsImage = (cell: SmeupDataCell): boolean => {\n if (!cell) return false;\n return cell.shape === \"IMG\";\n};\n\n/**\n * Returns the display value for a cell.\n * For technical types (NR, NP, D8) returns the raw value (it will be formatted\n * downstream by calculateValue). For all other types returns decode ?? value.\n */\nexport const getCellDisplayValue = (cell: SmeupDataCell): string => {\n const t = cell.obj?.t;\n if (t === \"NR\" || t === \"NP\" || t === \"D8\") {\n return cell.value;\n }\n return cell.decode ?? cell.value;\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { SortObject } from "../types/component-props";
2
2
  import { SmeupDataColumn, SmeupDataTable, SmeupDataCell, SmeupDataRow } from "../types/data-structures/smeupDataTable";
3
- import { ColumnFilter, WebupManagerData, SupportedExportFormats, GenericObject } from "../types/index";
3
+ import { SmeupDataObj, ColumnFilter, WebupManagerData, SupportedExportFormats, GenericObject } from "../types/index";
4
4
  import { Worksheet } from "exceljs";
5
5
  export declare const getFilteredColumns: (columns: SmeupDataColumn[], props: GenericObject, groupsArray?: {
6
6
  column: string;
@@ -43,11 +43,7 @@ export declare const calculateCellValue: (cell: SmeupDataCell, bookType: Support
43
43
  * @param obj - Optional object describing the type of the value.
44
44
  * @returns The formatted value, a Date object, a number, or the original value as a string.
45
45
  */
46
- export declare const calculateValue: (value: string, obj: {
47
- t: string;
48
- p: string;
49
- k: string;
50
- }, bookType: SupportedExportFormats, webupManagerData: WebupManagerData) => string | number | Date;
46
+ export declare const calculateValue: (value: string, obj: SmeupDataObj, bookType: SupportedExportFormats, webupManagerData: WebupManagerData) => string | number | Date;
51
47
  /**
52
48
  * Conversion from Hexadecimal color to an AlphaRGB
53
49
  * @param hex string - Hexadecimal value, it can bot have and don't have the # prefix
@@ -6,6 +6,7 @@ const excel_converter_types_1 = require("../converters/excel/excel-converter.typ
6
6
  const component_props_1 = require("../types/component-props");
7
7
  const dates_utility_1 = require("./dates-utility");
8
8
  const filters_utility_1 = require("./filters-utility");
9
+ const cells_utility_1 = require("./cells-utility");
9
10
  const formatter_utility_1 = require("./formatter-utility");
10
11
  const math_utility_1 = require("./math-utility");
11
12
  const objects_utility_1 = require("./objects-utility");
@@ -37,7 +38,6 @@ const getFilteredColumns = (columns, props, groupsArray = []) => {
37
38
  return filteredColumns.filter(column => {
38
39
  const dataObject = {
39
40
  ...column.obj,
40
- k: "",
41
41
  };
42
42
  return column.obj?.t !== "J4" && !(0, objects_utility_1.objectsIsVoCodVer)(dataObject);
43
43
  });
@@ -69,7 +69,7 @@ const filterRows = (smeupDataTable, filteredColumns, filters, webupManagerData)
69
69
  return smeupDataTable.rows.filter(row => {
70
70
  return smeupDataTable.columns.every(col => {
71
71
  const cell = row.cells?.[col.name];
72
- const cellValue = cell?.value;
72
+ const cellValue = cell ? (0, cells_utility_1.getCellDisplayValue)(cell) : undefined;
73
73
  const columnFilter = filters[col.name];
74
74
  if (columnFilter?.checkBoxes?.length) {
75
75
  const allowedValues = columnFilter.checkBoxes.map(item => item.value);
@@ -96,8 +96,10 @@ const sortRows = (rows, sortObject, activeGroups) => {
96
96
  if (!sort && activeGroups) {
97
97
  rows.sort((a, b) => {
98
98
  for (const group of activeGroups) {
99
- const valA = a.cells?.[group]?.value ?? "";
100
- const valB = b.cells?.[group]?.value ?? "";
99
+ const cellA = a.cells?.[group];
100
+ const cellB = b.cells?.[group];
101
+ const valA = cellA ? (0, cells_utility_1.getCellDisplayValue)(cellA) : "";
102
+ const valB = cellB ? (0, cells_utility_1.getCellDisplayValue)(cellB) : "";
101
103
  if (valA !== valB) {
102
104
  return valA.localeCompare(valB);
103
105
  }
@@ -108,8 +110,10 @@ const sortRows = (rows, sortObject, activeGroups) => {
108
110
  }
109
111
  sortObject?.forEach(sort => {
110
112
  rows.sort((a, b) => {
111
- const valA = a.cells?.[sort.column]?.value ?? "";
112
- const valB = b.cells?.[sort.column]?.value ?? "";
113
+ const cellA = a.cells?.[sort.column];
114
+ const cellB = b.cells?.[sort.column];
115
+ const valA = cellA ? (0, cells_utility_1.getCellDisplayValue)(cellA) : "";
116
+ const valB = cellB ? (0, cells_utility_1.getCellDisplayValue)(cellB) : "";
113
117
  switch (sort.sortMode) {
114
118
  case component_props_1.SortMode.A:
115
119
  if (valA !== valB) {
@@ -134,7 +138,7 @@ exports.sortRows = sortRows;
134
138
  * @returns
135
139
  */
136
140
  const calculateCellValue = (cell, bookType, webupManagerData) => {
137
- return (0, exports.calculateValue)(cell.value, cell.obj ?? { t: "", p: "", k: "" }, bookType, webupManagerData);
141
+ return (0, exports.calculateValue)((0, cells_utility_1.getCellDisplayValue)(cell), cell.obj ?? { t: "", p: "" }, bookType, webupManagerData);
138
142
  };
139
143
  exports.calculateCellValue = calculateCellValue;
140
144
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"commons-utility.js","sourceRoot":"","sources":["../../src/utils/commons-utility.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRealColumnsCount } from \"../converters/excel/commons\";\nimport { exportTypeSupportsFormatting } from \"../converters/excel/excel-converter.types\";\nimport { SortMode, SortObject } from \"../types/component-props\";\nimport {\n SmeupDataColumn,\n SmeupDataTable,\n SmeupDataCell,\n SmeupDataRow,\n} from \"../types/data-structures/smeupDataTable\";\nimport {\n SmeupDataObj,\n ColumnFilter,\n WebupManagerData,\n SupportedExportFormats,\n GenericObject,\n} from \"../types/index\";\nimport { datesIsIsoDate, datesToDate, datesFormat } from \"./dates-utility\";\nimport { isFilterMatchValue } from \"./filters-utility\";\nimport { sanitizeString } from \"./formatter-utility\";\nimport {\n mathNumberStringToFormattedString,\n mathCountDecimals,\n} from \"./math-utility\";\nimport {\n objectsIsVoCodVer,\n objectsIsDate,\n objectsIsNumber,\n} from \"./objects-utility\";\nimport { Worksheet } from \"exceljs\";\n\nexport const getFilteredColumns = (\n columns: SmeupDataColumn[],\n props: GenericObject,\n groupsArray: { column: string; visible: boolean }[] = [],\n) => {\n if (!columns) return [];\n\n const mutableColumns = JSON.parse(\n JSON.stringify(columns),\n ) as SmeupDataColumn[];\n\n const filteredColumns: SmeupDataColumn[] = [];\n\n if (props.visibleColumns && (props.visibleColumns as string[]).length > 0) {\n (props.visibleColumns as string[]).forEach((col: string) => {\n const foundColumn = mutableColumns.find(c => c.name === col);\n if (foundColumn) {\n filteredColumns.push({ ...foundColumn });\n }\n });\n } else {\n filteredColumns.push(...mutableColumns);\n }\n\n // Set the visibility of columns based on groups and props\n filteredColumns.forEach((col: SmeupDataColumn) => {\n const isGroupedColumn = groupsArray.filter(g => g.column === col.name);\n col.visible =\n isGroupedColumn.length > 0 ? isGroupedColumn[0].visible : col.visible;\n col.visible = props.visibleColumns\n ? (props.visibleColumns as string[]).includes(col.name)\n : col.visible;\n });\n\n return filteredColumns.filter(column => {\n const dataObject = {\n ...column.obj,\n k: \"\",\n } as SmeupDataObj;\n return column.obj?.t !== \"J4\" && !objectsIsVoCodVer(dataObject);\n });\n};\n\n/**\n * By passing the map, length value and column name\n * creates or updates a map record with\n * @param map Contains columnNames and their longest cell's length\n * @param text The text to use in length calculation\n * @param colName The column to check\n */\nexport const updateMaxValueLength = (\n map: { [key: string]: number },\n text: string | undefined | null,\n colName: string,\n) => {\n if (!map || !text || !colName) return;\n\n const value = Math.max(...text.split(\"\\n\").map(line => line.length));\n if (map[colName]) {\n if (map[colName] < value) {\n map[colName] = value;\n }\n } else {\n map[colName] = value;\n }\n};\n\nexport const filterRows = (\n smeupDataTable: SmeupDataTable,\n filteredColumns: SmeupDataColumn[],\n filters: { [key: string]: ColumnFilter },\n webupManagerData: WebupManagerData,\n) => {\n if (filters) {\n return smeupDataTable.rows.filter(row => {\n return smeupDataTable.columns.every(col => {\n const cell = row.cells?.[col.name];\n const cellValue = cell?.value;\n const columnFilter = filters[col.name];\n if (columnFilter?.checkBoxes?.length) {\n const allowedValues = columnFilter.checkBoxes.map(item => item.value);\n return (\n typeof cellValue === \"string\" && allowedValues.includes(cellValue)\n );\n }\n if (columnFilter?.textField) {\n return (\n typeof cellValue === \"string\" &&\n isFilterMatchValue(\n cellValue,\n columnFilter.textField,\n cell?.obj,\n webupManagerData,\n )\n );\n }\n return true;\n });\n });\n } else {\n return smeupDataTable.rows;\n }\n};\n\nexport const sortRows = (\n rows: SmeupDataRow[],\n sortObject: SortObject[],\n activeGroups?: string[],\n) => {\n const sort = sortObject?.[0];\n\n if (!sort && !activeGroups) {\n return;\n }\n\n if (!sort && activeGroups) {\n rows.sort((a, b) => {\n for (const group of activeGroups) {\n const valA = a.cells?.[group]?.value ?? \"\";\n const valB = b.cells?.[group]?.value ?? \"\";\n\n if (valA !== valB) {\n return valA.localeCompare(valB);\n }\n }\n return 0;\n });\n return;\n }\n\n sortObject?.forEach(sort => {\n rows.sort((a, b) => {\n const valA = a.cells?.[sort.column]?.value ?? \"\";\n const valB = b.cells?.[sort.column]?.value ?? \"\";\n\n switch (sort.sortMode) {\n case SortMode.A:\n if (valA !== valB) {\n return valA.localeCompare(valB);\n }\n return 0;\n case SortMode.D:\n if (valA !== valB) {\n return valB.localeCompare(valA);\n }\n return 0;\n }\n });\n });\n};\n\n/**\n * Returns a converted and formatted cell value (string, date, number)\n * @param cell - SmeupDataCell\n * @param bookType - SupportedExportFormats\n * @param webupManagerData - WebupManagerData\n * @returns\n */\nexport const calculateCellValue = (\n cell: SmeupDataCell,\n bookType: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n) => {\n return calculateValue(\n cell.value,\n cell.obj ?? ({ t: \"\", p: \"\", k: \"\" } as SmeupDataObj),\n bookType,\n webupManagerData,\n );\n};\n\n/**\n * Calculates and formats a value based on its type and export format.\n *\n * - If the value is a date and the object indicates a date type, it returns a formatted date string or a Date object,\n * depending on the export format.\n * - If the value is a number and the object indicates a number type, it returns a formatted number string or a numeric value,\n * depending on the export format.\n * - Otherwise, it returns the original value or an empty string if the value is null or undefined.\n *\n * @param bookType - The export format type.\n * @param webupManagerData - Data containing locale and formatting information.\n * @param value - The value to be calculated and formatted.\n * @param obj - Optional object describing the type of the value.\n * @returns The formatted value, a Date object, a number, or the original value as a string.\n */\nexport const calculateValue = (\n value: string,\n obj: {\n t: string;\n p: string;\n k: string;\n },\n bookType: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n) => {\n if (obj && objectsIsDate(obj) && datesIsIsoDate(value)) {\n return exportTypeSupportsFormatting[bookType]\n ? new Date(datesToDate(value, webupManagerData.datesLocale))\n : datesFormat(value, webupManagerData.datesLocale);\n }\n\n if (obj && objectsIsNumber(obj)) {\n if (!exportTypeSupportsFormatting[bookType]) {\n return (\n mathNumberStringToFormattedString(\n value,\n mathCountDecimals(Number(value) || 0),\n \"\",\n webupManagerData.mathLocale,\n ) || \"\"\n );\n }\n\n const numValue = Number(value);\n return !isNaN(numValue) && !(Math.abs(numValue) === Infinity)\n ? numValue\n : \"\";\n }\n\n return sanitizeString(value ?? \"\");\n};\n\n/**\n * Conversion from Hexadecimal color to an AlphaRGB\n * @param hex string - Hexadecimal value, it can bot have and don't have the # prefix\n * @returns ARGB string code\n */\nexport const hexToArgb = (hex: string): string => {\n // Hex validation\n if (hex.startsWith(\"#\")) hex = hex.slice(1);\n if (hex.length !== 6) return \"\";\n\n // Value Parse and return\n const red = parseInt(hex.slice(0, 2), 16);\n const green = parseInt(hex.slice(2, 4), 16);\n const blue = parseInt(hex.slice(4, 6), 16);\n return `FF${red.toString(16).padStart(2, \"0\")}${green\n .toString(16)\n .padStart(2, \"0\")}${blue.toString(16).padStart(2, \"0\")}`;\n};\n\n// Utility function to detect if Buffer is available\nconst isBufferAvailable = (): boolean => {\n try {\n return typeof Buffer !== \"undefined\" && typeof Buffer.from === \"function\";\n } catch {\n return false;\n }\n};\n\n// Utility function to convert ArrayBuffer to Buffer or Uint8Array\nexport const convertToBuffer = (\n arrayBuffer: ArrayBuffer | Uint8Array,\n): Buffer | Uint8Array => {\n if (arrayBuffer instanceof Uint8Array) {\n return arrayBuffer;\n }\n if (isBufferAvailable()) {\n return Buffer.from(arrayBuffer);\n } else {\n return new Uint8Array(arrayBuffer);\n }\n};\n\n// Function to load an image as base64 (browser version, async)\nexport const loadImageAsBase64 = async (\n imageUrl: string,\n): Promise<string | null> => {\n try {\n const response = await fetch(imageUrl);\n if (!response.ok) return null;\n const blob = await response.blob();\n return await new Promise<string | null>((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result as string);\n };\n reader.onerror = () => reject(null);\n reader.readAsDataURL(blob);\n });\n } catch (error) {\n console.warn(\"Unable to load asset image:\", error);\n return null;\n }\n};\n\n/**\n * Converts a hexadecimal color string (e.g., \"#RRGGBB\" or \"0xRRGGBB\") to an RGB tuple.\n */\nexport const convertColorToRgb = (color: string): [number, number, number] => {\n const r = parseInt(color.substring(2, 4), 16);\n const g = parseInt(color.substring(4, 6), 16);\n const b = parseInt(color.substring(6, 8), 16);\n return [r, g, b];\n};\n\nexport const applyBordersToWorksheet = (worksheet: Worksheet) => {\n // Apply full borders to the whole used table area\n const lastRow = worksheet.rowCount;\n const lastCol = getRealColumnsCount(worksheet);\n\n for (let r = 1; r <= lastRow; r++) {\n for (let c = 1; c <= lastCol; c++) {\n worksheet.getRow(r).getCell(c).border = {\n top: { style: \"thin\", color: { argb: \"FFD0D0D0\" } },\n left: { style: \"thin\", color: { argb: \"FFD0D0D0\" } },\n bottom: { style: \"thin\", color: { argb: \"FFD0D0D0\" } },\n right: { style: \"thin\", color: { argb: \"FFD0D0D0\" } },\n };\n }\n }\n};\n"]}
1
+ {"version":3,"file":"commons-utility.js","sourceRoot":"","sources":["../../src/utils/commons-utility.ts"],"names":[],"mappings":";;;AAAA,yDAAkE;AAClE,qFAAyF;AACzF,8DAAgE;AAchE,mDAA2E;AAC3E,uDAAuD;AACvD,mDAAsD;AACtD,2DAAqD;AACrD,iDAGwB;AACxB,uDAI2B;AAGpB,MAAM,kBAAkB,GAAG,CAChC,OAA0B,EAC1B,KAAoB,EACpB,cAAsD,EAAE,EACxD,EAAE;IACF,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACH,CAAC;IAEvB,MAAM,eAAe,GAAsB,EAAE,CAAC;IAE9C,IAAI,KAAK,CAAC,cAAc,IAAK,KAAK,CAAC,cAA2B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,KAAK,CAAC,cAA2B,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE;YACzD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;YAC7D,IAAI,WAAW,EAAE,CAAC;gBAChB,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,0DAA0D;IAC1D,eAAe,CAAC,OAAO,CAAC,CAAC,GAAoB,EAAE,EAAE;QAC/C,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACvE,GAAG,CAAC,OAAO;YACT,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;QACxE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc;YAChC,CAAC,CAAE,KAAK,CAAC,cAA2B,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACvD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACrC,MAAM,UAAU,GAAG;YACjB,GAAG,MAAM,CAAC,GAAG;SACE,CAAC;QAClB,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,IAAA,mCAAiB,EAAC,UAAU,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAxCW,QAAA,kBAAkB,sBAwC7B;AAEF;;;;;;GAMG;AACI,MAAM,oBAAoB,GAAG,CAClC,GAA8B,EAC9B,IAA+B,EAC/B,OAAe,EACf,EAAE;IACF,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO;IAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACjB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,CAAC;YACzB,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAfW,QAAA,oBAAoB,wBAe/B;AAEK,MAAM,UAAU,GAAG,CACxB,cAA8B,EAC9B,eAAkC,EAClC,OAAwC,EACxC,gBAAkC,EAClC,EAAE;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACtC,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACxC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAA,mCAAmB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;oBACrC,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtE,OAAO,CACL,OAAO,SAAS,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CACnE,CAAC;gBACJ,CAAC;gBACD,IAAI,YAAY,EAAE,SAAS,EAAE,CAAC;oBAC5B,OAAO,CACL,OAAO,SAAS,KAAK,QAAQ;wBAC7B,IAAA,oCAAkB,EAChB,SAAS,EACT,YAAY,CAAC,SAAS,EACtB,IAAI,EAAE,GAAG,EACT,gBAAgB,CACjB,CACF,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC;AAnCW,QAAA,UAAU,cAmCrB;AAEK,MAAM,QAAQ,GAAG,CACtB,IAAoB,EACpB,UAAwB,EACxB,YAAuB,EACvB,EAAE;IACF,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,mCAAmB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,mCAAmB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAErD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;QACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,mCAAmB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,mCAAmB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAErD,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtB,KAAK,0BAAQ,CAAC,CAAC;oBACb,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAClB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAClC,CAAC;oBACD,OAAO,CAAC,CAAC;gBACX,KAAK,0BAAQ,CAAC,CAAC;oBACb,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAClB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAClC,CAAC;oBACD,OAAO,CAAC,CAAC;YACb,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAjDW,QAAA,QAAQ,YAiDnB;AAEF;;;;;;GAMG;AACI,MAAM,kBAAkB,GAAG,CAChC,IAAmB,EACnB,QAAgC,EAChC,gBAAkC,EAClC,EAAE;IACF,OAAO,IAAA,sBAAc,EACnB,IAAA,mCAAmB,EAAC,IAAI,CAAC,EACzB,IAAI,CAAC,GAAG,IAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAmB,EAC9C,QAAQ,EACR,gBAAgB,CACjB,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,kBAAkB,sBAW7B;AAEF;;;;;;;;;;;;;;GAcG;AACI,MAAM,cAAc,GAAG,CAC5B,KAAa,EACb,GAAiB,EACjB,QAAgC,EAChC,gBAAkC,EAClC,EAAE;IACF,IAAI,GAAG,IAAI,IAAA,+BAAa,EAAC,GAAG,CAAC,IAAI,IAAA,8BAAc,EAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,oDAA4B,CAAC,QAAQ,CAAC;YAC3C,CAAC,CAAC,IAAI,IAAI,CAAC,IAAA,2BAAW,EAAC,KAAK,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAA,2BAAW,EAAC,KAAK,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,GAAG,IAAI,IAAA,iCAAe,EAAC,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,oDAA4B,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO,CACL,IAAA,gDAAiC,EAC/B,KAAK,EACL,IAAA,gCAAiB,EAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EACrC,EAAE,EACF,gBAAgB,CAAC,UAAU,CAC5B,IAAI,EAAE,CACR,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC;YAC3D,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,OAAO,IAAA,kCAAc,EAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AA/BW,QAAA,cAAc,kBA+BzB;AAEF;;;;GAIG;AACI,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE;IAC/C,iBAAiB;IACjB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhC,yBAAyB;IACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,KAAK,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;SAClD,QAAQ,CAAC,EAAE,CAAC;SACZ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC7D,CAAC,CAAC;AAZW,QAAA,SAAS,aAYpB;AAEF,oDAAoD;AACpD,MAAM,iBAAiB,GAAG,GAAY,EAAE;IACtC,IAAI,CAAC;QACH,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,kEAAkE;AAC3D,MAAM,eAAe,GAAG,CAC7B,WAAqC,EAChB,EAAE;IACvB,IAAI,WAAW,YAAY,UAAU,EAAE,CAAC;QACtC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;AACH,CAAC,CAAC;AAXW,QAAA,eAAe,mBAW1B;AAEF,+DAA+D;AACxD,MAAM,iBAAiB,GAAG,KAAK,EACpC,QAAgB,EACQ,EAAE;IAC1B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1D,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE;gBACtB,OAAO,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACnC,CAAC,CAAC;YACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,iBAAiB,qBAmB5B;AAEF;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAA4B,EAAE;IAC3E,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC;AALW,QAAA,iBAAiB,qBAK5B;AAEK,MAAM,uBAAuB,GAAG,CAAC,SAAoB,EAAE,EAAE;IAC9D,kDAAkD;IAClD,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC;IACnC,MAAM,OAAO,GAAG,IAAA,6BAAmB,EAAC,SAAS,CAAC,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG;gBACtC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;gBACnD,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;gBACpD,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;gBACtD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAfW,QAAA,uBAAuB,2BAelC","sourcesContent":["import { getRealColumnsCount } from \"../converters/excel/commons\";\nimport { exportTypeSupportsFormatting } from \"../converters/excel/excel-converter.types\";\nimport { SortMode, SortObject } from \"../types/component-props\";\nimport {\n SmeupDataColumn,\n SmeupDataTable,\n SmeupDataCell,\n SmeupDataRow,\n} from \"../types/data-structures/smeupDataTable\";\nimport {\n SmeupDataObj,\n ColumnFilter,\n WebupManagerData,\n SupportedExportFormats,\n GenericObject,\n} from \"../types/index\";\nimport { datesIsIsoDate, datesToDate, datesFormat } from \"./dates-utility\";\nimport { isFilterMatchValue } from \"./filters-utility\";\nimport { getCellDisplayValue } from \"./cells-utility\";\nimport { sanitizeString } from \"./formatter-utility\";\nimport {\n mathNumberStringToFormattedString,\n mathCountDecimals,\n} from \"./math-utility\";\nimport {\n objectsIsVoCodVer,\n objectsIsDate,\n objectsIsNumber,\n} from \"./objects-utility\";\nimport { Worksheet } from \"exceljs\";\n\nexport const getFilteredColumns = (\n columns: SmeupDataColumn[],\n props: GenericObject,\n groupsArray: { column: string; visible: boolean }[] = [],\n) => {\n if (!columns) return [];\n\n const mutableColumns = JSON.parse(\n JSON.stringify(columns),\n ) as SmeupDataColumn[];\n\n const filteredColumns: SmeupDataColumn[] = [];\n\n if (props.visibleColumns && (props.visibleColumns as string[]).length > 0) {\n (props.visibleColumns as string[]).forEach((col: string) => {\n const foundColumn = mutableColumns.find(c => c.name === col);\n if (foundColumn) {\n filteredColumns.push({ ...foundColumn });\n }\n });\n } else {\n filteredColumns.push(...mutableColumns);\n }\n\n // Set the visibility of columns based on groups and props\n filteredColumns.forEach((col: SmeupDataColumn) => {\n const isGroupedColumn = groupsArray.filter(g => g.column === col.name);\n col.visible =\n isGroupedColumn.length > 0 ? isGroupedColumn[0].visible : col.visible;\n col.visible = props.visibleColumns\n ? (props.visibleColumns as string[]).includes(col.name)\n : col.visible;\n });\n\n return filteredColumns.filter(column => {\n const dataObject = {\n ...column.obj,\n } as SmeupDataObj;\n return column.obj?.t !== \"J4\" && !objectsIsVoCodVer(dataObject);\n });\n};\n\n/**\n * By passing the map, length value and column name\n * creates or updates a map record with\n * @param map Contains columnNames and their longest cell's length\n * @param text The text to use in length calculation\n * @param colName The column to check\n */\nexport const updateMaxValueLength = (\n map: { [key: string]: number },\n text: string | undefined | null,\n colName: string,\n) => {\n if (!map || !text || !colName) return;\n\n const value = Math.max(...text.split(\"\\n\").map(line => line.length));\n if (map[colName]) {\n if (map[colName] < value) {\n map[colName] = value;\n }\n } else {\n map[colName] = value;\n }\n};\n\nexport const filterRows = (\n smeupDataTable: SmeupDataTable,\n filteredColumns: SmeupDataColumn[],\n filters: { [key: string]: ColumnFilter },\n webupManagerData: WebupManagerData,\n) => {\n if (filters) {\n return smeupDataTable.rows.filter(row => {\n return smeupDataTable.columns.every(col => {\n const cell = row.cells?.[col.name];\n const cellValue = cell ? getCellDisplayValue(cell) : undefined;\n const columnFilter = filters[col.name];\n if (columnFilter?.checkBoxes?.length) {\n const allowedValues = columnFilter.checkBoxes.map(item => item.value);\n return (\n typeof cellValue === \"string\" && allowedValues.includes(cellValue)\n );\n }\n if (columnFilter?.textField) {\n return (\n typeof cellValue === \"string\" &&\n isFilterMatchValue(\n cellValue,\n columnFilter.textField,\n cell?.obj,\n webupManagerData,\n )\n );\n }\n return true;\n });\n });\n } else {\n return smeupDataTable.rows;\n }\n};\n\nexport const sortRows = (\n rows: SmeupDataRow[],\n sortObject: SortObject[],\n activeGroups?: string[],\n) => {\n const sort = sortObject?.[0];\n\n if (!sort && !activeGroups) {\n return;\n }\n\n if (!sort && activeGroups) {\n rows.sort((a, b) => {\n for (const group of activeGroups) {\n const cellA = a.cells?.[group];\n const cellB = b.cells?.[group];\n const valA = cellA ? getCellDisplayValue(cellA) : \"\";\n const valB = cellB ? getCellDisplayValue(cellB) : \"\";\n\n if (valA !== valB) {\n return valA.localeCompare(valB);\n }\n }\n return 0;\n });\n return;\n }\n\n sortObject?.forEach(sort => {\n rows.sort((a, b) => {\n const cellA = a.cells?.[sort.column];\n const cellB = b.cells?.[sort.column];\n const valA = cellA ? getCellDisplayValue(cellA) : \"\";\n const valB = cellB ? getCellDisplayValue(cellB) : \"\";\n\n switch (sort.sortMode) {\n case SortMode.A:\n if (valA !== valB) {\n return valA.localeCompare(valB);\n }\n return 0;\n case SortMode.D:\n if (valA !== valB) {\n return valB.localeCompare(valA);\n }\n return 0;\n }\n });\n });\n};\n\n/**\n * Returns a converted and formatted cell value (string, date, number)\n * @param cell - SmeupDataCell\n * @param bookType - SupportedExportFormats\n * @param webupManagerData - WebupManagerData\n * @returns\n */\nexport const calculateCellValue = (\n cell: SmeupDataCell,\n bookType: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n) => {\n return calculateValue(\n getCellDisplayValue(cell),\n cell.obj ?? ({ t: \"\", p: \"\" } as SmeupDataObj),\n bookType,\n webupManagerData,\n );\n};\n\n/**\n * Calculates and formats a value based on its type and export format.\n *\n * - If the value is a date and the object indicates a date type, it returns a formatted date string or a Date object,\n * depending on the export format.\n * - If the value is a number and the object indicates a number type, it returns a formatted number string or a numeric value,\n * depending on the export format.\n * - Otherwise, it returns the original value or an empty string if the value is null or undefined.\n *\n * @param bookType - The export format type.\n * @param webupManagerData - Data containing locale and formatting information.\n * @param value - The value to be calculated and formatted.\n * @param obj - Optional object describing the type of the value.\n * @returns The formatted value, a Date object, a number, or the original value as a string.\n */\nexport const calculateValue = (\n value: string,\n obj: SmeupDataObj,\n bookType: SupportedExportFormats,\n webupManagerData: WebupManagerData,\n) => {\n if (obj && objectsIsDate(obj) && datesIsIsoDate(value)) {\n return exportTypeSupportsFormatting[bookType]\n ? new Date(datesToDate(value, webupManagerData.datesLocale))\n : datesFormat(value, webupManagerData.datesLocale);\n }\n\n if (obj && objectsIsNumber(obj)) {\n if (!exportTypeSupportsFormatting[bookType]) {\n return (\n mathNumberStringToFormattedString(\n value,\n mathCountDecimals(Number(value) || 0),\n \"\",\n webupManagerData.mathLocale,\n ) || \"\"\n );\n }\n\n const numValue = Number(value);\n return !isNaN(numValue) && !(Math.abs(numValue) === Infinity)\n ? numValue\n : \"\";\n }\n\n return sanitizeString(value ?? \"\");\n};\n\n/**\n * Conversion from Hexadecimal color to an AlphaRGB\n * @param hex string - Hexadecimal value, it can bot have and don't have the # prefix\n * @returns ARGB string code\n */\nexport const hexToArgb = (hex: string): string => {\n // Hex validation\n if (hex.startsWith(\"#\")) hex = hex.slice(1);\n if (hex.length !== 6) return \"\";\n\n // Value Parse and return\n const red = parseInt(hex.slice(0, 2), 16);\n const green = parseInt(hex.slice(2, 4), 16);\n const blue = parseInt(hex.slice(4, 6), 16);\n return `FF${red.toString(16).padStart(2, \"0\")}${green\n .toString(16)\n .padStart(2, \"0\")}${blue.toString(16).padStart(2, \"0\")}`;\n};\n\n// Utility function to detect if Buffer is available\nconst isBufferAvailable = (): boolean => {\n try {\n return typeof Buffer !== \"undefined\" && typeof Buffer.from === \"function\";\n } catch {\n return false;\n }\n};\n\n// Utility function to convert ArrayBuffer to Buffer or Uint8Array\nexport const convertToBuffer = (\n arrayBuffer: ArrayBuffer | Uint8Array,\n): Buffer | Uint8Array => {\n if (arrayBuffer instanceof Uint8Array) {\n return arrayBuffer;\n }\n if (isBufferAvailable()) {\n return Buffer.from(arrayBuffer);\n } else {\n return new Uint8Array(arrayBuffer);\n }\n};\n\n// Function to load an image as base64 (browser version, async)\nexport const loadImageAsBase64 = async (\n imageUrl: string,\n): Promise<string | null> => {\n try {\n const response = await fetch(imageUrl);\n if (!response.ok) return null;\n const blob = await response.blob();\n return await new Promise<string | null>((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result as string);\n };\n reader.onerror = () => reject(null);\n reader.readAsDataURL(blob);\n });\n } catch (error) {\n console.warn(\"Unable to load asset image:\", error);\n return null;\n }\n};\n\n/**\n * Converts a hexadecimal color string (e.g., \"#RRGGBB\" or \"0xRRGGBB\") to an RGB tuple.\n */\nexport const convertColorToRgb = (color: string): [number, number, number] => {\n const r = parseInt(color.substring(2, 4), 16);\n const g = parseInt(color.substring(4, 6), 16);\n const b = parseInt(color.substring(6, 8), 16);\n return [r, g, b];\n};\n\nexport const applyBordersToWorksheet = (worksheet: Worksheet) => {\n // Apply full borders to the whole used table area\n const lastRow = worksheet.rowCount;\n const lastCol = getRealColumnsCount(worksheet);\n\n for (let r = 1; r <= lastRow; r++) {\n for (let c = 1; c <= lastCol; c++) {\n worksheet.getRow(r).getCell(c).border = {\n top: { style: \"thin\", color: { argb: \"FFD0D0D0\" } },\n left: { style: \"thin\", color: { argb: \"FFD0D0D0\" } },\n bottom: { style: \"thin\", color: { argb: \"FFD0D0D0\" } },\n right: { style: \"thin\", color: { argb: \"FFD0D0D0\" } },\n };\n }\n }\n};\n"]}
@@ -1,6 +1,2 @@
1
- import { WebupManagerData } from "../types";
2
- export declare const isFilterMatchValue: (value: string, filter: string, obj?: {
3
- t: string;
4
- p: string;
5
- k: string;
6
- }, webupManagerData?: WebupManagerData) => boolean;
1
+ import { SmeupDataObj, WebupManagerData } from "../types";
2
+ export declare const isFilterMatchValue: (value: string, filter: string, obj?: SmeupDataObj, webupManagerData?: WebupManagerData) => boolean;
@@ -135,7 +135,7 @@ const handleDefaultMatch = (value, filter, filterText, typedValue, typedFilter,
135
135
  return typedValue.valueOf() === typedFilter.valueOf();
136
136
  }
137
137
  };
138
- const isSingleFilterMatchValue = (value, filter, obj = { t: "", p: "", k: "" }, webupManagerData) => {
138
+ const isSingleFilterMatchValue = (value, filter, obj = { t: "", p: "" }, webupManagerData) => {
139
139
  if (value == null)
140
140
  value = "";
141
141
  if (filter == null)
@@ -173,7 +173,7 @@ const isSingleFilterMatchValue = (value, filter, obj = { t: "", p: "", k: "" },
173
173
  // Default match (exact or inclusion)
174
174
  return handleDefaultMatch(value, filter, filterText, typedValue, typedFilter, isTypedComparison);
175
175
  };
176
- const isFilterMatchValue = (value, filter, obj = { t: "", p: "", k: "" }, webupManagerData = {
176
+ const isFilterMatchValue = (value, filter, obj = { t: "", p: "" }, webupManagerData = {
177
177
  mathLocale: "it",
178
178
  datesLocale: "it",
179
179
  themeBackground: "",
@@ -1 +1 @@
1
- {"version":3,"file":"filters-utility.js","sourceRoot":"","sources":["../../src/utils/filters-utility.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebupManagerData } from \"../types\";\nimport {\n datesIsIsoDate,\n parseDateByLocale,\n datesFormat,\n} from \"./dates-utility\";\nimport { mathFormat, mathNumberify } from \"./math-utility\";\nimport { objectsIsDate, objectsIsNumber } from \"./objects-utility\";\n\ninterface FilterParts {\n operator: string | undefined;\n startWildcard: boolean;\n filterText: string;\n endWildcard: boolean;\n}\n\ninterface TypedValues {\n typedValue: string | Date | number;\n typedFilter: string | Date | number;\n isTypedComparison: boolean;\n}\n\nconst parseFilterExpression = (filter: string): FilterParts | null => {\n const regex = /^\\s*(<=|>=|!|>|<)?\\s*'?(%)?(.*?)(%)?'?\\s*$/;\n const match = filter.match(regex);\n\n if (!match) {\n return null;\n }\n\n return {\n operator: match[1],\n startWildcard: match[2] === \"%\",\n filterText: match[3] ?? \"\",\n endWildcard: match[4] === \"%\",\n };\n};\n\nconst handleVoidFilter = (\n filterText: string,\n filterExpression: string,\n operator: string | undefined,\n value: string,\n): boolean | null => {\n if (filterText === \"\" && filterExpression.includes(\"''\")) {\n if (operator === \"!\") {\n return value !== \"\";\n }\n return value === \"\";\n }\n return null;\n};\n\nconst convertToTypedValues = (\n value: string,\n filterText: string,\n obj: { t: string; p: string; k: string },\n webupManagerData: WebupManagerData,\n): TypedValues => {\n let typedValue: string | Date | number = value;\n let typedFilter: string | Date | number = filterText;\n let isTypedComparison = false;\n\n if (\n obj &&\n objectsIsNumber(obj) &&\n !Number.isNaN(mathNumberify(filterText, webupManagerData.mathLocale))\n ) {\n // Convert to numbers for numeric comparison\n typedValue = parseFloat(value);\n typedFilter = mathNumberify(filterText, webupManagerData.mathLocale, true);\n\n // If parsing fails, treat as 0 for comparison\n if (isNaN(typedValue)) typedValue = 0;\n if (isNaN(typedFilter)) typedFilter = 0;\n isTypedComparison = true;\n } else if (\n obj &&\n objectsIsDate(obj) &&\n datesIsIsoDate(value) &&\n parseDateByLocale(filterText, webupManagerData.datesLocale)\n ) {\n // Convert to Date objects for date comparison\n typedValue = new Date(value);\n typedValue.setHours(0, 0, 0, 0);\n typedFilter =\n parseDateByLocale(filterText, webupManagerData.datesLocale) ?? filterText;\n isTypedComparison = true;\n }\n\n // If conversion to typed comparison failed, fallback to string comparison\n if (!isTypedComparison) {\n typedFilter = filterText;\n switch (true) {\n case objectsIsDate(obj):\n typedValue = datesFormat(value, webupManagerData.datesLocale);\n break;\n case objectsIsNumber(obj):\n typedValue = mathFormat(\n parseFloat(value),\n null as unknown as string,\n webupManagerData.mathLocale,\n );\n break;\n default:\n typedValue = value;\n }\n }\n\n return { typedValue, typedFilter, isTypedComparison };\n};\n\nconst handleComparisonOperator = (\n operator: string | undefined,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n): boolean | null => {\n if (!operator || ![\">\", \">=\", \"<\", \"<=\"].includes(operator)) {\n return null;\n }\n\n switch (operator) {\n case \">\":\n return typedValue > typedFilter;\n case \">=\":\n return typedValue >= typedFilter;\n case \"<\":\n return typedValue < typedFilter;\n case \"<=\":\n return typedValue <= typedFilter;\n default:\n return null;\n }\n};\n\nconst handleNegationOperator = (\n value: string,\n filterText: string,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n isTypedComparison: boolean,\n startWildcard: boolean,\n endWildcard: boolean,\n): boolean => {\n // For numeric or date types, use typed comparison\n if (isTypedComparison) {\n const returnValue = typedValue.valueOf() !== typedFilter.valueOf();\n return returnValue;\n }\n\n // Match negation for strings\n if (startWildcard && endWildcard) {\n return !value.includes(filterText);\n }\n if (startWildcard) {\n return !value.endsWith(filterText);\n }\n if (endWildcard) {\n return !value.startsWith(filterText);\n }\n\n // Exact match negation\n return value !== filterText;\n};\n\nconst handleWildcardMatch = (\n value: string,\n filterText: string,\n startWildcard: boolean,\n endWildcard: boolean,\n): boolean | null => {\n if (!startWildcard && !endWildcard) {\n return null;\n }\n\n if (startWildcard && endWildcard) {\n return value.includes(filterText);\n }\n if (startWildcard) {\n return value.endsWith(filterText);\n }\n if (endWildcard) {\n return value.startsWith(filterText);\n }\n\n return null;\n};\n\nconst handleDefaultMatch = (\n value: string,\n filter: string,\n filterText: string,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n isTypedComparison: boolean,\n): boolean => {\n if (!isTypedComparison) {\n // Non-typed exact match\n if (filter.startsWith(\"'\") && filter.endsWith(\"'\")) {\n return value === filterText;\n } else {\n return value.toLowerCase().includes(filterText.toLowerCase());\n }\n } else {\n return typedValue.valueOf() === typedFilter.valueOf();\n }\n};\n\nconst isSingleFilterMatchValue = (\n value: string,\n filter: string,\n obj: { t: string; p: string; k: string } = { t: \"\", p: \"\", k: \"\" },\n webupManagerData: WebupManagerData,\n): boolean => {\n if (value == null) value = \"\";\n if (filter == null) filter = \"\";\n\n value = value.trim();\n filter = filter.trim();\n\n // Parse filter expression\n const filterParts = parseFilterExpression(filter);\n if (!filterParts) {\n // fallback: inclusion - Non case sensitive\n return value.toLowerCase().includes(filter.toLowerCase());\n }\n\n const { operator, startWildcard, filterText, endWildcard } = filterParts;\n\n // Handle void filter (empty string with quotes)\n const voidResult = handleVoidFilter(filterText, filter, operator, value);\n if (voidResult !== null) {\n return voidResult;\n }\n\n // Convert to appropriate type based on obj.t\n const { typedValue, typedFilter, isTypedComparison } = convertToTypedValues(\n value,\n filterText,\n obj,\n webupManagerData,\n );\n\n // Handle comparison operators (>, >=, <, <=)\n const comparisonResult = handleComparisonOperator(\n operator,\n typedValue,\n typedFilter,\n );\n if (comparisonResult !== null) {\n return comparisonResult;\n }\n\n // Handle negation operator (!)\n if (operator === \"!\") {\n return handleNegationOperator(\n value,\n filterText,\n typedValue,\n typedFilter,\n isTypedComparison,\n startWildcard,\n endWildcard,\n );\n }\n\n // Handle wildcard matching\n const wildcardResult = handleWildcardMatch(\n value,\n filterText,\n startWildcard,\n endWildcard,\n );\n if (wildcardResult !== null) {\n return wildcardResult;\n }\n\n // Default match (exact or inclusion)\n return handleDefaultMatch(\n value,\n filter,\n filterText,\n typedValue,\n typedFilter,\n isTypedComparison,\n );\n};\n\nexport const isFilterMatchValue = (\n value: string,\n filter: string,\n obj: { t: string; p: string; k: string } = { t: \"\", p: \"\", k: \"\" },\n webupManagerData: WebupManagerData = {\n mathLocale: \"it\",\n datesLocale: \"it\",\n themeBackground: \"\",\n },\n): boolean => {\n const filters = filter\n .split(\";\")\n .map(f => f.trim())\n .filter(f => f.length > 0);\n return filters.every(f =>\n isSingleFilterMatchValue(value, f, obj, webupManagerData),\n );\n};\n"]}
1
+ {"version":3,"file":"filters-utility.js","sourceRoot":"","sources":["../../src/utils/filters-utility.ts"],"names":[],"mappings":"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","sourcesContent":["import { SmeupDataObj, WebupManagerData } from \"../types\";\nimport {\n datesIsIsoDate,\n parseDateByLocale,\n datesFormat,\n} from \"./dates-utility\";\nimport { mathFormat, mathNumberify } from \"./math-utility\";\nimport { objectsIsDate, objectsIsNumber } from \"./objects-utility\";\n\ninterface FilterParts {\n operator: string | undefined;\n startWildcard: boolean;\n filterText: string;\n endWildcard: boolean;\n}\n\ninterface TypedValues {\n typedValue: string | Date | number;\n typedFilter: string | Date | number;\n isTypedComparison: boolean;\n}\n\nconst parseFilterExpression = (filter: string): FilterParts | null => {\n const regex = /^\\s*(<=|>=|!|>|<)?\\s*'?(%)?(.*?)(%)?'?\\s*$/;\n const match = filter.match(regex);\n\n if (!match) {\n return null;\n }\n\n return {\n operator: match[1],\n startWildcard: match[2] === \"%\",\n filterText: match[3] ?? \"\",\n endWildcard: match[4] === \"%\",\n };\n};\n\nconst handleVoidFilter = (\n filterText: string,\n filterExpression: string,\n operator: string | undefined,\n value: string,\n): boolean | null => {\n if (filterText === \"\" && filterExpression.includes(\"''\")) {\n if (operator === \"!\") {\n return value !== \"\";\n }\n return value === \"\";\n }\n return null;\n};\n\nconst convertToTypedValues = (\n value: string,\n filterText: string,\n obj: SmeupDataObj,\n webupManagerData: WebupManagerData,\n): TypedValues => {\n let typedValue: string | Date | number = value;\n let typedFilter: string | Date | number = filterText;\n let isTypedComparison = false;\n\n if (\n obj &&\n objectsIsNumber(obj) &&\n !Number.isNaN(mathNumberify(filterText, webupManagerData.mathLocale))\n ) {\n // Convert to numbers for numeric comparison\n typedValue = parseFloat(value);\n typedFilter = mathNumberify(filterText, webupManagerData.mathLocale, true);\n\n // If parsing fails, treat as 0 for comparison\n if (isNaN(typedValue)) typedValue = 0;\n if (isNaN(typedFilter)) typedFilter = 0;\n isTypedComparison = true;\n } else if (\n obj &&\n objectsIsDate(obj) &&\n datesIsIsoDate(value) &&\n parseDateByLocale(filterText, webupManagerData.datesLocale)\n ) {\n // Convert to Date objects for date comparison\n typedValue = new Date(value);\n typedValue.setHours(0, 0, 0, 0);\n typedFilter =\n parseDateByLocale(filterText, webupManagerData.datesLocale) ?? filterText;\n isTypedComparison = true;\n }\n\n // If conversion to typed comparison failed, fallback to string comparison\n if (!isTypedComparison) {\n typedFilter = filterText;\n switch (true) {\n case objectsIsDate(obj):\n typedValue = datesFormat(value, webupManagerData.datesLocale);\n break;\n case objectsIsNumber(obj):\n typedValue = mathFormat(\n parseFloat(value),\n null as unknown as string,\n webupManagerData.mathLocale,\n );\n break;\n default:\n typedValue = value;\n }\n }\n\n return { typedValue, typedFilter, isTypedComparison };\n};\n\nconst handleComparisonOperator = (\n operator: string | undefined,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n): boolean | null => {\n if (!operator || ![\">\", \">=\", \"<\", \"<=\"].includes(operator)) {\n return null;\n }\n\n switch (operator) {\n case \">\":\n return typedValue > typedFilter;\n case \">=\":\n return typedValue >= typedFilter;\n case \"<\":\n return typedValue < typedFilter;\n case \"<=\":\n return typedValue <= typedFilter;\n default:\n return null;\n }\n};\n\nconst handleNegationOperator = (\n value: string,\n filterText: string,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n isTypedComparison: boolean,\n startWildcard: boolean,\n endWildcard: boolean,\n): boolean => {\n // For numeric or date types, use typed comparison\n if (isTypedComparison) {\n const returnValue = typedValue.valueOf() !== typedFilter.valueOf();\n return returnValue;\n }\n\n // Match negation for strings\n if (startWildcard && endWildcard) {\n return !value.includes(filterText);\n }\n if (startWildcard) {\n return !value.endsWith(filterText);\n }\n if (endWildcard) {\n return !value.startsWith(filterText);\n }\n\n // Exact match negation\n return value !== filterText;\n};\n\nconst handleWildcardMatch = (\n value: string,\n filterText: string,\n startWildcard: boolean,\n endWildcard: boolean,\n): boolean | null => {\n if (!startWildcard && !endWildcard) {\n return null;\n }\n\n if (startWildcard && endWildcard) {\n return value.includes(filterText);\n }\n if (startWildcard) {\n return value.endsWith(filterText);\n }\n if (endWildcard) {\n return value.startsWith(filterText);\n }\n\n return null;\n};\n\nconst handleDefaultMatch = (\n value: string,\n filter: string,\n filterText: string,\n typedValue: string | Date | number,\n typedFilter: string | Date | number,\n isTypedComparison: boolean,\n): boolean => {\n if (!isTypedComparison) {\n // Non-typed exact match\n if (filter.startsWith(\"'\") && filter.endsWith(\"'\")) {\n return value === filterText;\n } else {\n return value.toLowerCase().includes(filterText.toLowerCase());\n }\n } else {\n return typedValue.valueOf() === typedFilter.valueOf();\n }\n};\n\nconst isSingleFilterMatchValue = (\n value: string,\n filter: string,\n obj: SmeupDataObj = { t: \"\", p: \"\" },\n webupManagerData: WebupManagerData,\n): boolean => {\n if (value == null) value = \"\";\n if (filter == null) filter = \"\";\n\n value = value.trim();\n filter = filter.trim();\n\n // Parse filter expression\n const filterParts = parseFilterExpression(filter);\n if (!filterParts) {\n // fallback: inclusion - Non case sensitive\n return value.toLowerCase().includes(filter.toLowerCase());\n }\n\n const { operator, startWildcard, filterText, endWildcard } = filterParts;\n\n // Handle void filter (empty string with quotes)\n const voidResult = handleVoidFilter(filterText, filter, operator, value);\n if (voidResult !== null) {\n return voidResult;\n }\n\n // Convert to appropriate type based on obj.t\n const { typedValue, typedFilter, isTypedComparison } = convertToTypedValues(\n value,\n filterText,\n obj,\n webupManagerData,\n );\n\n // Handle comparison operators (>, >=, <, <=)\n const comparisonResult = handleComparisonOperator(\n operator,\n typedValue,\n typedFilter,\n );\n if (comparisonResult !== null) {\n return comparisonResult;\n }\n\n // Handle negation operator (!)\n if (operator === \"!\") {\n return handleNegationOperator(\n value,\n filterText,\n typedValue,\n typedFilter,\n isTypedComparison,\n startWildcard,\n endWildcard,\n );\n }\n\n // Handle wildcard matching\n const wildcardResult = handleWildcardMatch(\n value,\n filterText,\n startWildcard,\n endWildcard,\n );\n if (wildcardResult !== null) {\n return wildcardResult;\n }\n\n // Default match (exact or inclusion)\n return handleDefaultMatch(\n value,\n filter,\n filterText,\n typedValue,\n typedFilter,\n isTypedComparison,\n );\n};\n\nexport const isFilterMatchValue = (\n value: string,\n filter: string,\n obj: SmeupDataObj = { t: \"\", p: \"\" },\n webupManagerData: WebupManagerData = {\n mathLocale: \"it\",\n datesLocale: \"it\",\n themeBackground: \"\",\n },\n): boolean => {\n const filters = filter\n .split(\";\")\n .map(f => f.trim())\n .filter(f => f.length > 0);\n return filters.every(f =>\n isSingleFilterMatchValue(value, f, obj, webupManagerData),\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { SmeupDataObj } from "../types/index";
2
- export declare const objectsIsDate: (obj: Omit<SmeupDataObj, "k">) => boolean;
3
- export declare const objectsIsNumber: (obj: Omit<SmeupDataObj, "k">) => boolean;
4
- export declare const objectsIsVoCodVer: (obj: Omit<SmeupDataObj, "k">) => boolean;
5
- export declare const objectsIsURL: (obj?: Omit<SmeupDataObj, "k">) => boolean;
2
+ export declare const objectsIsDate: (obj: SmeupDataObj) => boolean;
3
+ export declare const objectsIsNumber: (obj: SmeupDataObj) => boolean;
4
+ export declare const objectsIsVoCodVer: (obj: SmeupDataObj) => boolean;
5
+ export declare const objectsIsURL: (obj?: SmeupDataObj) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"objects-utility.js","sourceRoot":"","sources":["../../src/utils/objects-utility.ts"],"names":[],"mappings":";;;AAEO,MAAM,aAAa,GAAG,CAAC,GAA4B,EAAW,EAAE;IACrE,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACxB,CAAC,CAAC;AAHW,QAAA,aAAa,iBAGxB;AAEK,MAAM,eAAe,GAAG,CAAC,GAA4B,EAAW,EAAE;IACvE,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAHW,QAAA,eAAe,mBAG1B;AAEK,MAAM,iBAAiB,GAAG,CAAC,GAA4B,EAAW,EAAE;IACzE,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC;AAHW,QAAA,iBAAiB,qBAG5B;AAEK,MAAM,YAAY,GAAG,CAAC,GAA6B,EAAW,EAAE;IACrE,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AAHW,QAAA,YAAY,gBAGvB","sourcesContent":["import { SmeupDataObj } from \"../types/index\";\n\nexport const objectsIsDate = (obj: Omit<SmeupDataObj, \"k\">): boolean => {\n if (!obj) return false;\n return \"D8\" === obj.t;\n};\n\nexport const objectsIsNumber = (obj: Omit<SmeupDataObj, \"k\">): boolean => {\n if (!obj) return false;\n return \"NR\" === obj.t || \"NP\" === obj.t;\n};\n\nexport const objectsIsVoCodVer = (obj: Omit<SmeupDataObj, \"k\">): boolean => {\n if (!obj) return false;\n return \"VO\" == obj.t && \"COD_VER\" === obj.p;\n};\n\nexport const objectsIsURL = (obj?: Omit<SmeupDataObj, \"k\">): boolean => {\n if (!obj) return false;\n return \"J1\" === obj.t || \"URL\" === obj.t;\n};\n"]}
1
+ {"version":3,"file":"objects-utility.js","sourceRoot":"","sources":["../../src/utils/objects-utility.ts"],"names":[],"mappings":";;;AAEO,MAAM,aAAa,GAAG,CAAC,GAAiB,EAAW,EAAE;IAC1D,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACxB,CAAC,CAAC;AAHW,QAAA,aAAa,iBAGxB;AAEK,MAAM,eAAe,GAAG,CAAC,GAAiB,EAAW,EAAE;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAHW,QAAA,eAAe,mBAG1B;AAEK,MAAM,iBAAiB,GAAG,CAAC,GAAiB,EAAW,EAAE;IAC9D,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC;AAHW,QAAA,iBAAiB,qBAG5B;AAEK,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAW,EAAE;IAC1D,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AAHW,QAAA,YAAY,gBAGvB","sourcesContent":["import { SmeupDataObj } from \"../types/index\";\n\nexport const objectsIsDate = (obj: SmeupDataObj): boolean => {\n if (!obj) return false;\n return \"D8\" === obj.t;\n};\n\nexport const objectsIsNumber = (obj: SmeupDataObj): boolean => {\n if (!obj) return false;\n return \"NR\" === obj.t || \"NP\" === obj.t;\n};\n\nexport const objectsIsVoCodVer = (obj: SmeupDataObj): boolean => {\n if (!obj) return false;\n return \"VO\" == obj.t && \"COD_VER\" === obj.p;\n};\n\nexport const objectsIsURL = (obj?: SmeupDataObj): boolean => {\n if (!obj) return false;\n return \"J1\" === obj.t || \"URL\" === obj.t;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sme.up/doc-alchemist",
3
- "version": "1.9.0-SNAPSHOT-20260330134530",
3
+ "version": "2.0.0-alpha.2",
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/)",