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.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ /// <reference types="react" />
2
2
  import 'prismjs/components/prism-markdown';
3
3
  import 'prismjs/plugins/line-numbers/prism-line-numbers';
4
4
  import { MarkdownTableProps } from './types';
package/dist/index.esm.js CHANGED
@@ -4066,45 +4066,21 @@ var MarkdownTableError = /** @class */ (function (_super) {
4066
4066
 
4067
4067
  // src/utils.ts
4068
4068
  /**
4069
- * Calculates the maximum width for each column based on the content and newline replacement rules.
4070
- * @param inputDataRows - All rows (header and body) of the input table.
4071
- * @param maxColumnCount - The maximum number of columns in the input table.
4072
- * @param minWidth - The minimum width for each column. Defaults to 3.
4073
- * @param canReplaceNewlines - Whether to replace newlines with '<br>' (affects width) or a space.
4069
+ * Calculates the maximum width for each column based on the content.
4070
+ * @param tableRows - All rows (header and body) of the table.
4071
+ * @param maxColumnCount - The maximum number of columns in the table.
4074
4072
  * @returns An array of maximum widths for each column.
4075
4073
  */
4076
- function calculateColumnWidths(inputDataRows, maxColumnCount, minWidth, canReplaceNewlines) {
4077
- if (minWidth === void 0) { minWidth = 3; }
4078
- // Initialize column widths with the minimum width.
4079
- var columnWidths = Array.from({ length: maxColumnCount }, function () { return minWidth; });
4080
- // Iterate over each row in the input data.
4081
- for (var _i = 0, inputDataRows_1 = inputDataRows; _i < inputDataRows_1.length; _i++) {
4082
- var currentRow = inputDataRows_1[_i];
4083
- // Iterate over each column index up to maxColumnCount.
4084
- for (var columnIndex = 0; columnIndex < maxColumnCount; columnIndex++) {
4085
- // Retrieve the cell value; default to an empty string if undefined or null.
4086
- var cellValue = currentRow[columnIndex];
4087
- var cellString = cellValue !== null && cellValue !== undefined ? String(cellValue) : '';
4088
- if (canReplaceNewlines) {
4089
- // Replace newlines with <br>, which increases the length by 3 per newline.
4090
- var replacedString = cellString.replace(/\n/g, '<br>');
4091
- var adjustedLength = replacedString.length;
4092
- // Update the column width if the adjusted length is greater.
4093
- if (adjustedLength > columnWidths[columnIndex]) {
4094
- columnWidths[columnIndex] = adjustedLength;
4095
- }
4096
- }
4097
- else {
4098
- // Replace newlines with a space and calculate the length.
4099
- cellString = cellString.replace(/\n/g, ' ');
4100
- // Update the column width if the current cell's length is greater.
4101
- if (cellString.length > columnWidths[columnIndex]) {
4102
- columnWidths[columnIndex] = cellString.length;
4103
- }
4104
- }
4074
+ function calculateColumnWidths(tableRows, maxColumnCount) {
4075
+ var widths = new Array(maxColumnCount).fill(3); // Minimum width of 3 for each column.
4076
+ tableRows.forEach(function (currentRow) {
4077
+ var _a;
4078
+ for (var i = 0; i < maxColumnCount; i++) {
4079
+ var cell = (_a = currentRow[i]) !== null && _a !== void 0 ? _a : '';
4080
+ widths[i] = Math.max(widths[i], cell.length);
4105
4081
  }
4106
- }
4107
- return columnWidths;
4082
+ });
4083
+ return widths;
4108
4084
  }
4109
4085
  /**
4110
4086
  * Formats a single row into a Markdown-formatted string.
@@ -4116,8 +4092,8 @@ function calculateColumnWidths(inputDataRows, maxColumnCount, minWidth, canRepla
4116
4092
  * @param canReplaceNewlines - Flag to replace newlines with <br> tags.
4117
4093
  * @returns The Markdown string for the row.
4118
4094
  */
4119
- function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines) {
4120
- var _a, _b, _c;
4095
+ function formatMarkdownRow(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines) {
4096
+ var _a, _b;
4121
4097
  if (useTabs === void 0) { useTabs = false; }
4122
4098
  if (canReplaceNewlines === void 0) { canReplaceNewlines = false; }
4123
4099
  var defaultAlignment = 'left';
@@ -4126,22 +4102,23 @@ function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, colu
4126
4102
  var markdownRow = '|';
4127
4103
  for (var i = 0; i < columnCount; i++) {
4128
4104
  var cell = (_a = currentRow[i]) !== null && _a !== void 0 ? _a : '';
4105
+ if (canReplaceNewlines) {
4106
+ cell = replaceNewlinesInCell(cell);
4107
+ }
4129
4108
  var alignment = (_b = adjustedAlignments[i]) !== null && _b !== void 0 ? _b : defaultAlignment;
4130
- cell = "".concat(canReplaceNewlines ? cell.replace(/\n/g, '<br>') : cell.replace(/\n/g, ' '));
4131
- // Safe access to columnWidths with fallback
4132
- var targetWidth = (_c = columnWidths === null || columnWidths === void 0 ? void 0 : columnWidths[i]) !== null && _c !== void 0 ? _c : cell.length;
4109
+ var targetWidth = columnWidths ? columnWidths[i] : cell.length;
4133
4110
  if (alignment === 'right') {
4134
- markdownRow += "".concat(cell.padStart(targetWidth)).concat(useTabs ? '\t' : '', "|");
4111
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(cell.padStart(targetWidth)).concat(useTabs ? '\t' : ' ', "|");
4135
4112
  }
4136
4113
  else if (alignment === 'center') {
4137
4114
  var totalPadding = targetWidth - cell.length;
4138
4115
  var paddingLeft = Math.floor(totalPadding / 2);
4139
4116
  var paddingRight = totalPadding - paddingLeft;
4140
- markdownRow += "".concat(' '.repeat(paddingLeft)).concat(cell).concat(' '.repeat(paddingRight)).concat(useTabs ? '\t' : '', "|");
4117
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(' '.repeat(paddingLeft)).concat(cell).concat(' '.repeat(paddingRight)).concat(useTabs ? '\t' : ' ', "|");
4141
4118
  }
4142
4119
  else {
4143
4120
  // Left alignment or default
4144
- markdownRow += "".concat(cell.padEnd(targetWidth)).concat(useTabs ? '\t' : '', "|");
4121
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(cell.padEnd(targetWidth)).concat(useTabs ? '\t' : ' ', "|");
4145
4122
  }
4146
4123
  }
4147
4124
  return markdownRow;
@@ -4154,7 +4131,7 @@ function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, colu
4154
4131
  * @param useTabs - Flag to use tabs between columns.
4155
4132
  * @returns The Markdown string for the alignment row.
4156
4133
  */
4157
- function formatMarkdownTableAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs) {
4134
+ function formatAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs) {
4158
4135
  var _a;
4159
4136
  if (useTabs === void 0) { useTabs = false; }
4160
4137
  var defaultAlignment = 'left';
@@ -4179,7 +4156,7 @@ function formatMarkdownTableAlignmentRow(columnCount, columnAlignments, columnWi
4179
4156
  alignIndicator = "".concat('-'.repeat(targetWidth));
4180
4157
  break;
4181
4158
  }
4182
- alignmentRow += "".concat(alignIndicator).concat(useTabs ? '\t' : '', "|");
4159
+ alignmentRow += "".concat(useTabs ? '\t' : ' ').concat(alignIndicator).concat(useTabs ? '\t' : ' ', "|");
4183
4160
  }
4184
4161
  return alignmentRow;
4185
4162
  }
@@ -4196,23 +4173,29 @@ function generateMarkdownTableString(inputData, columnAlignments, canAdjustColum
4196
4173
  if (canAdjustColumnWidths === void 0) { canAdjustColumnWidths = true; }
4197
4174
  if (useTabs === void 0) { useTabs = false; }
4198
4175
  if (replaceNewlines === void 0) { replaceNewlines = false; }
4199
- var headerColumnCount = inputData.inputTableHeader.length;
4200
- var bodyColumnCounts = inputData.inputTableBody.map(function (currentRow) { return currentRow.length; });
4176
+ var headerColumnCount = inputData.inputDataHeader.length;
4177
+ var bodyColumnCounts = inputData.inputDataBody.map(function (currentRow) { return currentRow.length; });
4201
4178
  var maxColumnCount = Math.max.apply(Math, __spreadArray([headerColumnCount], bodyColumnCounts, false));
4202
4179
  var columnWidths = canAdjustColumnWidths
4203
- ? calculateColumnWidths(__spreadArray([inputData.inputTableHeader], inputData.inputTableBody, true), maxColumnCount, 3, // minWidth (you can change this value as needed)
4204
- true // canReplaceNewlines (set this to true or false based on your logic)
4205
- )
4180
+ ? calculateColumnWidths(__spreadArray([inputData.inputDataHeader], inputData.inputDataBody, true), maxColumnCount)
4206
4181
  : undefined;
4207
- var markdownHeaderRow = formatMarkdownTableBody(maxColumnCount, inputData.inputTableHeader, columnAlignments, columnWidths, useTabs, replaceNewlines);
4208
- var markdownAlignmentRow = formatMarkdownTableAlignmentRow(maxColumnCount, columnAlignments, columnWidths, useTabs);
4209
- var markdownBodyRows = inputData.inputTableBody
4182
+ var markdownHeaderRow = formatMarkdownRow(maxColumnCount, inputData.inputDataHeader, columnAlignments, columnWidths, useTabs, replaceNewlines);
4183
+ var markdownAlignmentRow = formatAlignmentRow(maxColumnCount, columnAlignments, columnWidths, useTabs);
4184
+ var markdownBodyRows = inputData.inputDataBody
4210
4185
  .map(function (currentRow) {
4211
- return formatMarkdownTableBody(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines);
4186
+ return formatMarkdownRow(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines);
4212
4187
  })
4213
4188
  .join('\n');
4214
4189
  return "".concat(markdownHeaderRow, "\n").concat(markdownAlignmentRow, "\n").concat(markdownBodyRows).trimEnd();
4215
4190
  }
4191
+ /**
4192
+ * Replaces newline characters in a string with <br> tags.
4193
+ * @param cell - The cell content to process.
4194
+ * @returns The processed cell content with newlines replaced.
4195
+ */
4196
+ function replaceNewlinesInCell(cell) {
4197
+ return cell.replace(/\n/g, '<br>');
4198
+ }
4216
4199
  /**
4217
4200
  * Converts a zero-based column index to its corresponding Excel-style column name.
4218
4201
  * For example, 0 -> 'A', 1 -> 'B', ..., 25 -> 'Z', 26 -> 'AA', etc.
@@ -4242,14 +4225,14 @@ function generateAlphabetHeaders(columnCount) {
4242
4225
  }
4243
4226
 
4244
4227
  // CSS styles
4245
- 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";
4228
+ 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";
4246
4229
  var MarkdownTable = function (_a) {
4247
4230
  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;
4248
4231
  var adjustColumnWidths = !isCompact;
4249
4232
  var preElementRef = useRef(null);
4250
4233
  var markdownTableSyntax = useMemo(function () {
4251
4234
  if (inputData === null) {
4252
- return '| | | | | |\n|---|---|---|---|---|\n| | | | | |\n| | | | | |\n| | | | | |';
4235
+ return 'Error: No data provided for the table.';
4253
4236
  }
4254
4237
  try {
4255
4238
  if (!Array.isArray(inputData) || inputData.length === 0) {
@@ -4257,12 +4240,12 @@ var MarkdownTable = function (_a) {
4257
4240
  }
4258
4241
  var tableData = hasHeader
4259
4242
  ? {
4260
- inputTableHeader: inputData[0],
4261
- inputTableBody: inputData.slice(1),
4243
+ inputDataHeader: inputData[0],
4244
+ inputDataBody: inputData.slice(1),
4262
4245
  }
4263
4246
  : {
4264
- inputTableHeader: generateAlphabetHeaders(inputData[0].length),
4265
- inputTableBody: inputData,
4247
+ inputDataHeader: generateAlphabetHeaders(inputData[0].length),
4248
+ inputDataBody: inputData,
4266
4249
  };
4267
4250
  return generateMarkdownTableString(tableData, columnAlignments, adjustColumnWidths, hasTabs, canReplaceNewlines);
4268
4251
  }
@@ -4288,8 +4271,12 @@ var MarkdownTable = function (_a) {
4288
4271
  }
4289
4272
  }, [markdownTableSyntax, onTableCreate]);
4290
4273
  useEffect(function () {
4291
- if (preElementRef.current) {
4292
- Prism$1.highlightElement(preElementRef.current.querySelector('code'));
4274
+ var _a;
4275
+ var codeElement = (_a = preElementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('code');
4276
+ if (codeElement && markdownTableSyntax) {
4277
+ requestAnimationFrame(function () {
4278
+ Prism$1.highlightElement(codeElement);
4279
+ });
4293
4280
  }
4294
4281
  }, [markdownTableSyntax]);
4295
4282
  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 }) })] }));