@harbortouch/skytab-analytics-report-utils 0.41.2 → 0.41.3

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.
@@ -49,23 +49,21 @@ var sanitizePdfText = (text) => {
49
49
  return "";
50
50
  }
51
51
  const leadingSpaces = /^ */.exec(text)?.[0] ?? "";
52
- return leadingSpaces + text.trimStart().replace(/€/g, "EUR ").replace(
52
+ return leadingSpaces + text.trimStart().replace(
53
53
  /[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{1F600}-\u{1F64F}]|[\u{1F680}-\u{1F6FF}]|[\u{1F900}-\u{1F9FF}]|[\u{1FA00}-\u{1FA6F}]|[\u{1FA70}-\u{1FAFF}]|[\u{FE00}-\u{FE0F}]|[\u{1F004}]|[\u{1F0CF}]|[\u{1F18E}]|[\u{1F191}-\u{1F19A}]|[\u{1F1E6}-\u{1F1FF}]|[\u{1F201}-\u{1F251}]/gu,
54
54
  ""
55
- ).replace(/[\x00-\x1F\x7F-\x9F]/g, " ").replace(/ /g, " ").replace(/[^\x20-\x7E\xA1-\xFF]/g, "").replace(/\s+/g, " ").trim();
55
+ ).replace(/[\x00-\x1F\x7F-\x9F]/g, " ").replace(/ /g, " ").replace(/[^\x20-\x7E\xA1-\xFF€₹₩₪₽]/g, "").replace(/\s+/g, " ").trim();
56
56
  };
57
57
 
58
58
  // src/exporters/pdf/constants.ts
59
- var ZOOM_FACTOR = 1.44;
60
59
  var FONT_REGULAR = "Lato";
61
60
  var FONT_BOLD = "Lato-Bold";
62
61
  var DEFAULT_TEXT_COLOR = "#000000";
63
62
  var HEADER_BACKGROUND_COLOR = "#f9fafb";
64
63
  var ZEBRA_BACKGROUND_COLOR = "#fafbfc";
65
64
  var SEPARATOR_COLOR = "#E4E5E5";
66
- var SECTION_TITLE_FONT_SIZE = 1.17 * 6 * ZOOM_FACTOR;
67
- var DEFAULT_FONT_SIZE = 5 * ZOOM_FACTOR;
68
- var BODY_FONT_SIZE = 6 * ZOOM_FACTOR;
65
+ var SECTION_TITLE_FONT_SIZE = 9;
66
+ var BODY_FONT_SIZE = 9;
69
67
  var TABLE_CELL_PADDING = 4;
70
68
  var DEFAULT_ROW_HEIGHT = 25;
71
69
  var MIN_COLUMN_WIDTH = 35;
@@ -200,8 +198,8 @@ var PdfExporter = class {
200
198
  const columns = table.columns.length > 0 ? table.columns.map((c) => ({ ...c })) : [{ header: "No data", key: "no_data", width: 100 }];
201
199
  const rows = table.rows ?? [];
202
200
  const columnCount = columns.length;
203
- const headerFontSize = columnCount > 13 ? 8 : columnCount > 10 ? 9 : columnCount > 7 ? 10 : 11;
204
- const dataFontSize = columnCount > 13 ? 7 : columnCount > 10 ? 8 : columnCount > 7 ? 9 : 10;
201
+ const headerFontSize = columnCount > 13 ? 6 : columnCount > 10 ? 7 : columnCount > 7 ? 8 : 9;
202
+ const dataFontSize = columnCount > 13 ? 5 : columnCount > 10 ? 6 : columnCount > 7 ? 7 : 8;
205
203
  const headerWidthSlack = 2;
206
204
  const headerMinWidths = /* @__PURE__ */ new Map();
207
205
  columns.forEach((col) => {
@@ -230,6 +228,16 @@ var PdfExporter = class {
230
228
  const headerMin = headerMinWidths.get(c) ?? MIN_COLUMN_WIDTH;
231
229
  c.width = Math.max(Math.floor((c.width ?? MIN_COLUMN_WIDTH) * scale), headerMin, MIN_COLUMN_WIDTH);
232
230
  });
231
+ let excess = columns.reduce((sum, c) => sum + (c.width ?? MIN_COLUMN_WIDTH), 0) - usableWidth;
232
+ for (let i = columns.length - 1; i >= 0 && excess > 0; i--) {
233
+ const col = columns[i];
234
+ const available = (col.width ?? MIN_COLUMN_WIDTH) - MIN_COLUMN_WIDTH;
235
+ const trim = Math.min(excess, available);
236
+ if (trim > 0) {
237
+ col.width = (col.width ?? MIN_COLUMN_WIDTH) - trim;
238
+ excess -= trim;
239
+ }
240
+ }
233
241
  } else if (totalColumnWidth < usableWidth) {
234
242
  const scale = usableWidth / totalColumnWidth;
235
243
  columns.forEach((c) => {
@@ -9,23 +9,21 @@ var sanitizePdfText = (text) => {
9
9
  return "";
10
10
  }
11
11
  const leadingSpaces = /^ */.exec(text)?.[0] ?? "";
12
- return leadingSpaces + text.trimStart().replace(/€/g, "EUR ").replace(
12
+ return leadingSpaces + text.trimStart().replace(
13
13
  /[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{1F600}-\u{1F64F}]|[\u{1F680}-\u{1F6FF}]|[\u{1F900}-\u{1F9FF}]|[\u{1FA00}-\u{1FA6F}]|[\u{1FA70}-\u{1FAFF}]|[\u{FE00}-\u{FE0F}]|[\u{1F004}]|[\u{1F0CF}]|[\u{1F18E}]|[\u{1F191}-\u{1F19A}]|[\u{1F1E6}-\u{1F1FF}]|[\u{1F201}-\u{1F251}]/gu,
14
14
  ""
15
- ).replace(/[\x00-\x1F\x7F-\x9F]/g, " ").replace(/ /g, " ").replace(/[^\x20-\x7E\xA1-\xFF]/g, "").replace(/\s+/g, " ").trim();
15
+ ).replace(/[\x00-\x1F\x7F-\x9F]/g, " ").replace(/ /g, " ").replace(/[^\x20-\x7E\xA1-\xFF€₹₩₪₽]/g, "").replace(/\s+/g, " ").trim();
16
16
  };
17
17
 
18
18
  // src/exporters/pdf/constants.ts
19
- var ZOOM_FACTOR = 1.44;
20
19
  var FONT_REGULAR = "Lato";
21
20
  var FONT_BOLD = "Lato-Bold";
22
21
  var DEFAULT_TEXT_COLOR = "#000000";
23
22
  var HEADER_BACKGROUND_COLOR = "#f9fafb";
24
23
  var ZEBRA_BACKGROUND_COLOR = "#fafbfc";
25
24
  var SEPARATOR_COLOR = "#E4E5E5";
26
- var SECTION_TITLE_FONT_SIZE = 1.17 * 6 * ZOOM_FACTOR;
27
- var DEFAULT_FONT_SIZE = 5 * ZOOM_FACTOR;
28
- var BODY_FONT_SIZE = 6 * ZOOM_FACTOR;
25
+ var SECTION_TITLE_FONT_SIZE = 9;
26
+ var BODY_FONT_SIZE = 9;
29
27
  var TABLE_CELL_PADDING = 4;
30
28
  var DEFAULT_ROW_HEIGHT = 25;
31
29
  var MIN_COLUMN_WIDTH = 35;
@@ -160,8 +158,8 @@ var PdfExporter = class {
160
158
  const columns = table.columns.length > 0 ? table.columns.map((c) => ({ ...c })) : [{ header: "No data", key: "no_data", width: 100 }];
161
159
  const rows = table.rows ?? [];
162
160
  const columnCount = columns.length;
163
- const headerFontSize = columnCount > 13 ? 8 : columnCount > 10 ? 9 : columnCount > 7 ? 10 : 11;
164
- const dataFontSize = columnCount > 13 ? 7 : columnCount > 10 ? 8 : columnCount > 7 ? 9 : 10;
161
+ const headerFontSize = columnCount > 13 ? 6 : columnCount > 10 ? 7 : columnCount > 7 ? 8 : 9;
162
+ const dataFontSize = columnCount > 13 ? 5 : columnCount > 10 ? 6 : columnCount > 7 ? 7 : 8;
165
163
  const headerWidthSlack = 2;
166
164
  const headerMinWidths = /* @__PURE__ */ new Map();
167
165
  columns.forEach((col) => {
@@ -190,6 +188,16 @@ var PdfExporter = class {
190
188
  const headerMin = headerMinWidths.get(c) ?? MIN_COLUMN_WIDTH;
191
189
  c.width = Math.max(Math.floor((c.width ?? MIN_COLUMN_WIDTH) * scale), headerMin, MIN_COLUMN_WIDTH);
192
190
  });
191
+ let excess = columns.reduce((sum, c) => sum + (c.width ?? MIN_COLUMN_WIDTH), 0) - usableWidth;
192
+ for (let i = columns.length - 1; i >= 0 && excess > 0; i--) {
193
+ const col = columns[i];
194
+ const available = (col.width ?? MIN_COLUMN_WIDTH) - MIN_COLUMN_WIDTH;
195
+ const trim = Math.min(excess, available);
196
+ if (trim > 0) {
197
+ col.width = (col.width ?? MIN_COLUMN_WIDTH) - trim;
198
+ excess -= trim;
199
+ }
200
+ }
193
201
  } else if (totalColumnWidth < usableWidth) {
194
202
  const scale = usableWidth / totalColumnWidth;
195
203
  columns.forEach((c) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harbortouch/skytab-analytics-report-utils",
3
- "version": "0.41.2",
3
+ "version": "0.41.3",
4
4
  "description": "Centralized report column presentation configuration for SkyTab Analytics",
5
5
  "engines": {
6
6
  "node": ">=22.6.0",