react-markdown-table-ts 0.3.14 → 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,45 +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
- return columnWidths;
4090
+ });
4091
+ return widths;
4116
4092
  }
4117
4093
  /**
4118
4094
  * Formats a single row into a Markdown-formatted string.
@@ -4124,8 +4100,8 @@ function calculateColumnWidths(inputDataRows, maxColumnCount, minWidth, canRepla
4124
4100
  * @param canReplaceNewlines - Flag to replace newlines with <br> tags.
4125
4101
  * @returns The Markdown string for the row.
4126
4102
  */
4127
- function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines) {
4128
- var _a, _b, _c;
4103
+ function formatMarkdownRow(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines) {
4104
+ var _a, _b;
4129
4105
  if (useTabs === void 0) { useTabs = false; }
4130
4106
  if (canReplaceNewlines === void 0) { canReplaceNewlines = false; }
4131
4107
  var defaultAlignment = 'left';
@@ -4134,22 +4110,23 @@ function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, colu
4134
4110
  var markdownRow = '|';
4135
4111
  for (var i = 0; i < columnCount; i++) {
4136
4112
  var cell = (_a = currentRow[i]) !== null && _a !== void 0 ? _a : '';
4113
+ if (canReplaceNewlines) {
4114
+ cell = replaceNewlinesInCell(cell);
4115
+ }
4137
4116
  var alignment = (_b = adjustedAlignments[i]) !== null && _b !== void 0 ? _b : defaultAlignment;
4138
- cell = "".concat(canReplaceNewlines ? cell.replace(/\n/g, '<br>') : cell.replace(/\n/g, ' '));
4139
- // Safe access to columnWidths with fallback
4140
- 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;
4141
4118
  if (alignment === 'right') {
4142
- markdownRow += "".concat(cell.padStart(targetWidth)).concat(useTabs ? '\t' : '', "|");
4119
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(cell.padStart(targetWidth)).concat(useTabs ? '\t' : ' ', "|");
4143
4120
  }
4144
4121
  else if (alignment === 'center') {
4145
4122
  var totalPadding = targetWidth - cell.length;
4146
4123
  var paddingLeft = Math.floor(totalPadding / 2);
4147
4124
  var paddingRight = totalPadding - paddingLeft;
4148
- 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' : ' ', "|");
4149
4126
  }
4150
4127
  else {
4151
4128
  // Left alignment or default
4152
- markdownRow += "".concat(cell.padEnd(targetWidth)).concat(useTabs ? '\t' : '', "|");
4129
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(cell.padEnd(targetWidth)).concat(useTabs ? '\t' : ' ', "|");
4153
4130
  }
4154
4131
  }
4155
4132
  return markdownRow;
@@ -4162,7 +4139,7 @@ function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, colu
4162
4139
  * @param useTabs - Flag to use tabs between columns.
4163
4140
  * @returns The Markdown string for the alignment row.
4164
4141
  */
4165
- function formatMarkdownTableAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs) {
4142
+ function formatAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs) {
4166
4143
  var _a;
4167
4144
  if (useTabs === void 0) { useTabs = false; }
4168
4145
  var defaultAlignment = 'left';
@@ -4187,7 +4164,7 @@ function formatMarkdownTableAlignmentRow(columnCount, columnAlignments, columnWi
4187
4164
  alignIndicator = "".concat('-'.repeat(targetWidth));
4188
4165
  break;
4189
4166
  }
4190
- alignmentRow += "".concat(alignIndicator).concat(useTabs ? '\t' : '', "|");
4167
+ alignmentRow += "".concat(useTabs ? '\t' : ' ').concat(alignIndicator).concat(useTabs ? '\t' : ' ', "|");
4191
4168
  }
4192
4169
  return alignmentRow;
4193
4170
  }
@@ -4204,23 +4181,29 @@ function generateMarkdownTableString(inputData, columnAlignments, canAdjustColum
4204
4181
  if (canAdjustColumnWidths === void 0) { canAdjustColumnWidths = true; }
4205
4182
  if (useTabs === void 0) { useTabs = false; }
4206
4183
  if (replaceNewlines === void 0) { replaceNewlines = false; }
4207
- var headerColumnCount = inputData.inputTableHeader.length;
4208
- 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; });
4209
4186
  var maxColumnCount = Math.max.apply(Math, __spreadArray([headerColumnCount], bodyColumnCounts, false));
4210
4187
  var columnWidths = canAdjustColumnWidths
4211
- ? calculateColumnWidths(__spreadArray([inputData.inputTableHeader], inputData.inputTableBody, true), maxColumnCount, 3, // minWidth (you can change this value as needed)
4212
- true // canReplaceNewlines (set this to true or false based on your logic)
4213
- )
4188
+ ? calculateColumnWidths(__spreadArray([inputData.inputDataHeader], inputData.inputDataBody, true), maxColumnCount)
4214
4189
  : undefined;
4215
- var markdownHeaderRow = formatMarkdownTableBody(maxColumnCount, inputData.inputTableHeader, columnAlignments, columnWidths, useTabs, replaceNewlines);
4216
- var markdownAlignmentRow = formatMarkdownTableAlignmentRow(maxColumnCount, columnAlignments, columnWidths, useTabs);
4217
- 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
4218
4193
  .map(function (currentRow) {
4219
- return formatMarkdownTableBody(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines);
4194
+ return formatMarkdownRow(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines);
4220
4195
  })
4221
4196
  .join('\n');
4222
4197
  return "".concat(markdownHeaderRow, "\n").concat(markdownAlignmentRow, "\n").concat(markdownBodyRows).trimEnd();
4223
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
+ }
4224
4207
  /**
4225
4208
  * Converts a zero-based column index to its corresponding Excel-style column name.
4226
4209
  * For example, 0 -> 'A', 1 -> 'B', ..., 25 -> 'Z', 26 -> 'AA', etc.
@@ -4250,14 +4233,14 @@ function generateAlphabetHeaders(columnCount) {
4250
4233
  }
4251
4234
 
4252
4235
  // CSS styles
4253
- 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";
4254
4237
  var MarkdownTable = function (_a) {
4255
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;
4256
4239
  var adjustColumnWidths = !isCompact;
4257
4240
  var preElementRef = require$$0.useRef(null);
4258
4241
  var markdownTableSyntax = require$$0.useMemo(function () {
4259
4242
  if (inputData === null) {
4260
- return '| | | | | |\n|---|---|---|---|---|\n| | | | | |\n| | | | | |\n| | | | | |';
4243
+ return 'Error: No data provided for the table.';
4261
4244
  }
4262
4245
  try {
4263
4246
  if (!Array.isArray(inputData) || inputData.length === 0) {
@@ -4265,12 +4248,12 @@ var MarkdownTable = function (_a) {
4265
4248
  }
4266
4249
  var tableData = hasHeader
4267
4250
  ? {
4268
- inputTableHeader: inputData[0],
4269
- inputTableBody: inputData.slice(1),
4251
+ inputDataHeader: inputData[0],
4252
+ inputDataBody: inputData.slice(1),
4270
4253
  }
4271
4254
  : {
4272
- inputTableHeader: generateAlphabetHeaders(inputData[0].length),
4273
- inputTableBody: inputData,
4255
+ inputDataHeader: generateAlphabetHeaders(inputData[0].length),
4256
+ inputDataBody: inputData,
4274
4257
  };
4275
4258
  return generateMarkdownTableString(tableData, columnAlignments, adjustColumnWidths, hasTabs, canReplaceNewlines);
4276
4259
  }
@@ -4296,8 +4279,12 @@ var MarkdownTable = function (_a) {
4296
4279
  }
4297
4280
  }, [markdownTableSyntax, onTableCreate]);
4298
4281
  require$$0.useEffect(function () {
4299
- if (preElementRef.current) {
4300
- 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
+ });
4301
4288
  }
4302
4289
  }, [markdownTableSyntax]);
4303
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 }) })] }));