react-markdown-table-ts 0.3.15 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -4074,46 +4074,21 @@ var MarkdownTableError = /** @class */ (function (_super) {
4074
4074
 
4075
4075
  // src/utils.ts
4076
4076
  /**
4077
- * Calculates the maximum width for each column based on the content and newline replacement rules.
4078
- * @param inputDataRows - All rows (header and body) of the input table.
4079
- * @param maxColumnCount - The maximum number of columns in the input table.
4080
- * @param minWidth - The minimum width for each column. Defaults to 3.
4081
- * @param canReplaceNewlines - Whether to replace newlines with '<br>' (affects width) or a space.
4077
+ * Calculates the maximum width for each column based on the content.
4078
+ * @param tableRows - All rows (header and body) of the table.
4079
+ * @param maxColumnCount - The maximum number of columns in the table.
4082
4080
  * @returns An array of maximum widths for each column.
4083
4081
  */
4084
- function calculateColumnWidths(inputDataRows, maxColumnCount, minWidth, canReplaceNewlines) {
4085
- if (minWidth === void 0) { minWidth = 3; }
4086
- // Initialize column widths with the minimum width.
4087
- var columnWidths = Array.from({ length: maxColumnCount }, function () { return minWidth; });
4088
- // Iterate over each row in the input data.
4089
- for (var _i = 0, inputDataRows_1 = inputDataRows; _i < inputDataRows_1.length; _i++) {
4090
- var currentRow = inputDataRows_1[_i];
4091
- // Iterate over each column index up to maxColumnCount.
4092
- for (var columnIndex = 0; columnIndex < maxColumnCount; columnIndex++) {
4093
- // Retrieve the cell value; default to an empty string if undefined or null.
4094
- var cellValue = currentRow[columnIndex];
4095
- var cellString = cellValue !== null && cellValue !== undefined ? String(cellValue) : '';
4096
- if (canReplaceNewlines) {
4097
- // Replace newlines with <br>, which increases the length by 3 per newline.
4098
- var replacedString = cellString.replace(/\n/g, '<br>');
4099
- var adjustedLength = replacedString.length;
4100
- // Update the column width if the adjusted length is greater.
4101
- if (adjustedLength > columnWidths[columnIndex]) {
4102
- columnWidths[columnIndex] = adjustedLength;
4103
- }
4104
- }
4105
- else {
4106
- // Replace newlines with a space and calculate the length.
4107
- cellString = cellString.replace(/\n/g, ' ');
4108
- // Update the column width if the current cell's length is greater.
4109
- if (cellString.length > columnWidths[columnIndex]) {
4110
- columnWidths[columnIndex] = cellString.length;
4111
- }
4112
- }
4082
+ function calculateColumnWidths(tableRows, maxColumnCount) {
4083
+ var widths = new Array(maxColumnCount).fill(3); // Minimum width of 3 for each column.
4084
+ tableRows.forEach(function (currentRow) {
4085
+ var _a;
4086
+ for (var i = 0; i < maxColumnCount; i++) {
4087
+ var cell = (_a = currentRow[i]) !== null && _a !== void 0 ? _a : '';
4088
+ widths[i] = Math.max(widths[i], cell.length);
4113
4089
  }
4114
- }
4115
- console.log('Calculated Column Widths:', columnWidths); // Debug log
4116
- return columnWidths;
4090
+ });
4091
+ return widths;
4117
4092
  }
4118
4093
  /**
4119
4094
  * Formats a single row into a Markdown-formatted string.
@@ -4125,8 +4100,8 @@ function calculateColumnWidths(inputDataRows, maxColumnCount, minWidth, canRepla
4125
4100
  * @param canReplaceNewlines - Flag to replace newlines with <br> tags.
4126
4101
  * @returns The Markdown string for the row.
4127
4102
  */
4128
- function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines) {
4129
- var _a, _b, _c;
4103
+ function formatMarkdownRow(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines) {
4104
+ var _a, _b;
4130
4105
  if (useTabs === void 0) { useTabs = false; }
4131
4106
  if (canReplaceNewlines === void 0) { canReplaceNewlines = false; }
4132
4107
  var defaultAlignment = 'left';
@@ -4135,22 +4110,23 @@ function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, colu
4135
4110
  var markdownRow = '|';
4136
4111
  for (var i = 0; i < columnCount; i++) {
4137
4112
  var cell = (_a = currentRow[i]) !== null && _a !== void 0 ? _a : '';
4113
+ if (canReplaceNewlines) {
4114
+ cell = replaceNewlinesInCell(cell);
4115
+ }
4138
4116
  var alignment = (_b = adjustedAlignments[i]) !== null && _b !== void 0 ? _b : defaultAlignment;
4139
- cell = "".concat(canReplaceNewlines ? cell.replace(/\n/g, '<br>') : cell.replace(/\n/g, ' '));
4140
- // Safe access to columnWidths with fallback
4141
- var targetWidth = (_c = columnWidths === null || columnWidths === void 0 ? void 0 : columnWidths[i]) !== null && _c !== void 0 ? _c : cell.length;
4117
+ var targetWidth = columnWidths ? columnWidths[i] : cell.length;
4142
4118
  if (alignment === 'right') {
4143
- markdownRow += "".concat(cell.padStart(targetWidth)).concat(useTabs ? '\t' : '', "|");
4119
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(cell.padStart(targetWidth)).concat(useTabs ? '\t' : ' ', "|");
4144
4120
  }
4145
4121
  else if (alignment === 'center') {
4146
4122
  var totalPadding = targetWidth - cell.length;
4147
4123
  var paddingLeft = Math.floor(totalPadding / 2);
4148
4124
  var paddingRight = totalPadding - paddingLeft;
4149
- markdownRow += "".concat(' '.repeat(paddingLeft)).concat(cell).concat(' '.repeat(paddingRight)).concat(useTabs ? '\t' : '', "|");
4125
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(' '.repeat(paddingLeft)).concat(cell).concat(' '.repeat(paddingRight)).concat(useTabs ? '\t' : ' ', "|");
4150
4126
  }
4151
4127
  else {
4152
4128
  // Left alignment or default
4153
- markdownRow += "".concat(cell.padEnd(targetWidth)).concat(useTabs ? '\t' : '', "|");
4129
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(cell.padEnd(targetWidth)).concat(useTabs ? '\t' : ' ', "|");
4154
4130
  }
4155
4131
  }
4156
4132
  return markdownRow;
@@ -4163,7 +4139,7 @@ function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, colu
4163
4139
  * @param useTabs - Flag to use tabs between columns.
4164
4140
  * @returns The Markdown string for the alignment row.
4165
4141
  */
4166
- function formatMarkdownTableAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs) {
4142
+ function formatAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs) {
4167
4143
  var _a;
4168
4144
  if (useTabs === void 0) { useTabs = false; }
4169
4145
  var defaultAlignment = 'left';
@@ -4188,7 +4164,7 @@ function formatMarkdownTableAlignmentRow(columnCount, columnAlignments, columnWi
4188
4164
  alignIndicator = "".concat('-'.repeat(targetWidth));
4189
4165
  break;
4190
4166
  }
4191
- alignmentRow += "".concat(alignIndicator).concat(useTabs ? '\t' : '', "|");
4167
+ alignmentRow += "".concat(useTabs ? '\t' : ' ').concat(alignIndicator).concat(useTabs ? '\t' : ' ', "|");
4192
4168
  }
4193
4169
  return alignmentRow;
4194
4170
  }
@@ -4205,23 +4181,29 @@ function generateMarkdownTableString(inputData, columnAlignments, canAdjustColum
4205
4181
  if (canAdjustColumnWidths === void 0) { canAdjustColumnWidths = true; }
4206
4182
  if (useTabs === void 0) { useTabs = false; }
4207
4183
  if (replaceNewlines === void 0) { replaceNewlines = false; }
4208
- var headerColumnCount = inputData.inputTableHeader.length;
4209
- var bodyColumnCounts = inputData.inputTableBody.map(function (currentRow) { return currentRow.length; });
4184
+ var headerColumnCount = inputData.inputDataHeader.length;
4185
+ var bodyColumnCounts = inputData.inputDataBody.map(function (currentRow) { return currentRow.length; });
4210
4186
  var maxColumnCount = Math.max.apply(Math, __spreadArray([headerColumnCount], bodyColumnCounts, false));
4211
4187
  var columnWidths = canAdjustColumnWidths
4212
- ? calculateColumnWidths(__spreadArray([inputData.inputTableHeader], inputData.inputTableBody, true), maxColumnCount, 3, // minWidth (you can change this value as needed)
4213
- replaceNewlines // Pass replaceNewlines here
4214
- )
4188
+ ? calculateColumnWidths(__spreadArray([inputData.inputDataHeader], inputData.inputDataBody, true), maxColumnCount)
4215
4189
  : undefined;
4216
- var markdownHeaderRow = formatMarkdownTableBody(maxColumnCount, inputData.inputTableHeader, columnAlignments, columnWidths, useTabs, replaceNewlines);
4217
- var markdownAlignmentRow = formatMarkdownTableAlignmentRow(maxColumnCount, columnAlignments, columnWidths, useTabs);
4218
- var markdownBodyRows = inputData.inputTableBody
4190
+ var markdownHeaderRow = formatMarkdownRow(maxColumnCount, inputData.inputDataHeader, columnAlignments, columnWidths, useTabs, replaceNewlines);
4191
+ var markdownAlignmentRow = formatAlignmentRow(maxColumnCount, columnAlignments, columnWidths, useTabs);
4192
+ var markdownBodyRows = inputData.inputDataBody
4219
4193
  .map(function (currentRow) {
4220
- return formatMarkdownTableBody(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines);
4194
+ return formatMarkdownRow(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines);
4221
4195
  })
4222
4196
  .join('\n');
4223
4197
  return "".concat(markdownHeaderRow, "\n").concat(markdownAlignmentRow, "\n").concat(markdownBodyRows).trimEnd();
4224
4198
  }
4199
+ /**
4200
+ * Replaces newline characters in a string with <br> tags.
4201
+ * @param cell - The cell content to process.
4202
+ * @returns The processed cell content with newlines replaced.
4203
+ */
4204
+ function replaceNewlinesInCell(cell) {
4205
+ return cell.replace(/\n/g, '<br>');
4206
+ }
4225
4207
  /**
4226
4208
  * Converts a zero-based column index to its corresponding Excel-style column name.
4227
4209
  * For example, 0 -> 'A', 1 -> 'B', ..., 25 -> 'Z', 26 -> 'AA', etc.
@@ -4251,14 +4233,14 @@ function generateAlphabetHeaders(columnCount) {
4251
4233
  }
4252
4234
 
4253
4235
  // CSS styles
4254
- var PRISM_CSS = "\ncode[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,\"Andale Mono\",\"Ubuntu Mono\",monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}\n";
4236
+ var PRISM_CSS = "\ncode[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}\n";
4255
4237
  var MarkdownTable = function (_a) {
4256
4238
  var _b = _a.inputData, inputData = _b === void 0 ? null : _b, _c = _a.hasHeader, hasHeader = _c === void 0 ? true : _c, _d = _a.columnAlignments, columnAlignments = _d === void 0 ? [] : _d, _e = _a.isCompact, isCompact = _e === void 0 ? false : _e, _f = _a.hasTabs, hasTabs = _f === void 0 ? false : _f, _g = _a.canReplaceNewlines, canReplaceNewlines = _g === void 0 ? false : _g, className = _a.className, onTableCreate = _a.onTableCreate;
4257
4239
  var adjustColumnWidths = !isCompact;
4258
4240
  var preElementRef = require$$0.useRef(null);
4259
4241
  var markdownTableSyntax = require$$0.useMemo(function () {
4260
4242
  if (inputData === null) {
4261
- return '| | | | | |\n|---|---|---|---|---|\n| | | | | |\n| | | | | |\n| | | | | |';
4243
+ return 'Error: No data provided for the table.';
4262
4244
  }
4263
4245
  try {
4264
4246
  if (!Array.isArray(inputData) || inputData.length === 0) {
@@ -4266,12 +4248,12 @@ var MarkdownTable = function (_a) {
4266
4248
  }
4267
4249
  var tableData = hasHeader
4268
4250
  ? {
4269
- inputTableHeader: inputData[0],
4270
- inputTableBody: inputData.slice(1),
4251
+ inputDataHeader: inputData[0],
4252
+ inputDataBody: inputData.slice(1),
4271
4253
  }
4272
4254
  : {
4273
- inputTableHeader: generateAlphabetHeaders(inputData[0].length),
4274
- inputTableBody: inputData,
4255
+ inputDataHeader: generateAlphabetHeaders(inputData[0].length),
4256
+ inputDataBody: inputData,
4275
4257
  };
4276
4258
  return generateMarkdownTableString(tableData, columnAlignments, adjustColumnWidths, hasTabs, canReplaceNewlines);
4277
4259
  }
@@ -4297,8 +4279,12 @@ var MarkdownTable = function (_a) {
4297
4279
  }
4298
4280
  }, [markdownTableSyntax, onTableCreate]);
4299
4281
  require$$0.useEffect(function () {
4300
- if (preElementRef.current) {
4301
- Prism$1.highlightElement(preElementRef.current.querySelector('code'));
4282
+ var _a;
4283
+ var codeElement = (_a = preElementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('code');
4284
+ if (codeElement && markdownTableSyntax) {
4285
+ requestAnimationFrame(function () {
4286
+ Prism$1.highlightElement(codeElement);
4287
+ });
4302
4288
  }
4303
4289
  }, [markdownTableSyntax]);
4304
4290
  return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { children: PRISM_CSS }), jsxRuntimeExports.jsx("pre", { ref: preElementRef, className: "".concat(className, " language-markdown line-numbers"), children: jsxRuntimeExports.jsx("code", { className: "language-markdown", role: "code", children: markdownTableSyntax }) })] }));