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.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,46 +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
- console.log('Calculated Column Widths:', columnWidths); // Debug log
4108
- return columnWidths;
4082
+ });
4083
+ return widths;
4109
4084
  }
4110
4085
  /**
4111
4086
  * Formats a single row into a Markdown-formatted string.
@@ -4117,8 +4092,8 @@ function calculateColumnWidths(inputDataRows, maxColumnCount, minWidth, canRepla
4117
4092
  * @param canReplaceNewlines - Flag to replace newlines with <br> tags.
4118
4093
  * @returns The Markdown string for the row.
4119
4094
  */
4120
- function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines) {
4121
- var _a, _b, _c;
4095
+ function formatMarkdownRow(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines) {
4096
+ var _a, _b;
4122
4097
  if (useTabs === void 0) { useTabs = false; }
4123
4098
  if (canReplaceNewlines === void 0) { canReplaceNewlines = false; }
4124
4099
  var defaultAlignment = 'left';
@@ -4127,22 +4102,23 @@ function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, colu
4127
4102
  var markdownRow = '|';
4128
4103
  for (var i = 0; i < columnCount; i++) {
4129
4104
  var cell = (_a = currentRow[i]) !== null && _a !== void 0 ? _a : '';
4105
+ if (canReplaceNewlines) {
4106
+ cell = replaceNewlinesInCell(cell);
4107
+ }
4130
4108
  var alignment = (_b = adjustedAlignments[i]) !== null && _b !== void 0 ? _b : defaultAlignment;
4131
- cell = "".concat(canReplaceNewlines ? cell.replace(/\n/g, '<br>') : cell.replace(/\n/g, ' '));
4132
- // Safe access to columnWidths with fallback
4133
- 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;
4134
4110
  if (alignment === 'right') {
4135
- markdownRow += "".concat(cell.padStart(targetWidth)).concat(useTabs ? '\t' : '', "|");
4111
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(cell.padStart(targetWidth)).concat(useTabs ? '\t' : ' ', "|");
4136
4112
  }
4137
4113
  else if (alignment === 'center') {
4138
4114
  var totalPadding = targetWidth - cell.length;
4139
4115
  var paddingLeft = Math.floor(totalPadding / 2);
4140
4116
  var paddingRight = totalPadding - paddingLeft;
4141
- 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' : ' ', "|");
4142
4118
  }
4143
4119
  else {
4144
4120
  // Left alignment or default
4145
- markdownRow += "".concat(cell.padEnd(targetWidth)).concat(useTabs ? '\t' : '', "|");
4121
+ markdownRow += "".concat(useTabs ? '\t' : ' ').concat(cell.padEnd(targetWidth)).concat(useTabs ? '\t' : ' ', "|");
4146
4122
  }
4147
4123
  }
4148
4124
  return markdownRow;
@@ -4155,7 +4131,7 @@ function formatMarkdownTableBody(columnCount, currentRow, columnAlignments, colu
4155
4131
  * @param useTabs - Flag to use tabs between columns.
4156
4132
  * @returns The Markdown string for the alignment row.
4157
4133
  */
4158
- function formatMarkdownTableAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs) {
4134
+ function formatAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs) {
4159
4135
  var _a;
4160
4136
  if (useTabs === void 0) { useTabs = false; }
4161
4137
  var defaultAlignment = 'left';
@@ -4180,7 +4156,7 @@ function formatMarkdownTableAlignmentRow(columnCount, columnAlignments, columnWi
4180
4156
  alignIndicator = "".concat('-'.repeat(targetWidth));
4181
4157
  break;
4182
4158
  }
4183
- alignmentRow += "".concat(alignIndicator).concat(useTabs ? '\t' : '', "|");
4159
+ alignmentRow += "".concat(useTabs ? '\t' : ' ').concat(alignIndicator).concat(useTabs ? '\t' : ' ', "|");
4184
4160
  }
4185
4161
  return alignmentRow;
4186
4162
  }
@@ -4197,23 +4173,29 @@ function generateMarkdownTableString(inputData, columnAlignments, canAdjustColum
4197
4173
  if (canAdjustColumnWidths === void 0) { canAdjustColumnWidths = true; }
4198
4174
  if (useTabs === void 0) { useTabs = false; }
4199
4175
  if (replaceNewlines === void 0) { replaceNewlines = false; }
4200
- var headerColumnCount = inputData.inputTableHeader.length;
4201
- 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; });
4202
4178
  var maxColumnCount = Math.max.apply(Math, __spreadArray([headerColumnCount], bodyColumnCounts, false));
4203
4179
  var columnWidths = canAdjustColumnWidths
4204
- ? calculateColumnWidths(__spreadArray([inputData.inputTableHeader], inputData.inputTableBody, true), maxColumnCount, 3, // minWidth (you can change this value as needed)
4205
- replaceNewlines // Pass replaceNewlines here
4206
- )
4180
+ ? calculateColumnWidths(__spreadArray([inputData.inputDataHeader], inputData.inputDataBody, true), maxColumnCount)
4207
4181
  : undefined;
4208
- var markdownHeaderRow = formatMarkdownTableBody(maxColumnCount, inputData.inputTableHeader, columnAlignments, columnWidths, useTabs, replaceNewlines);
4209
- var markdownAlignmentRow = formatMarkdownTableAlignmentRow(maxColumnCount, columnAlignments, columnWidths, useTabs);
4210
- 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
4211
4185
  .map(function (currentRow) {
4212
- return formatMarkdownTableBody(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines);
4186
+ return formatMarkdownRow(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines);
4213
4187
  })
4214
4188
  .join('\n');
4215
4189
  return "".concat(markdownHeaderRow, "\n").concat(markdownAlignmentRow, "\n").concat(markdownBodyRows).trimEnd();
4216
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
+ }
4217
4199
  /**
4218
4200
  * Converts a zero-based column index to its corresponding Excel-style column name.
4219
4201
  * For example, 0 -> 'A', 1 -> 'B', ..., 25 -> 'Z', 26 -> 'AA', etc.
@@ -4243,14 +4225,14 @@ function generateAlphabetHeaders(columnCount) {
4243
4225
  }
4244
4226
 
4245
4227
  // CSS styles
4246
- 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";
4247
4229
  var MarkdownTable = function (_a) {
4248
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;
4249
4231
  var adjustColumnWidths = !isCompact;
4250
4232
  var preElementRef = useRef(null);
4251
4233
  var markdownTableSyntax = useMemo(function () {
4252
4234
  if (inputData === null) {
4253
- return '| | | | | |\n|---|---|---|---|---|\n| | | | | |\n| | | | | |\n| | | | | |';
4235
+ return 'Error: No data provided for the table.';
4254
4236
  }
4255
4237
  try {
4256
4238
  if (!Array.isArray(inputData) || inputData.length === 0) {
@@ -4258,12 +4240,12 @@ var MarkdownTable = function (_a) {
4258
4240
  }
4259
4241
  var tableData = hasHeader
4260
4242
  ? {
4261
- inputTableHeader: inputData[0],
4262
- inputTableBody: inputData.slice(1),
4243
+ inputDataHeader: inputData[0],
4244
+ inputDataBody: inputData.slice(1),
4263
4245
  }
4264
4246
  : {
4265
- inputTableHeader: generateAlphabetHeaders(inputData[0].length),
4266
- inputTableBody: inputData,
4247
+ inputDataHeader: generateAlphabetHeaders(inputData[0].length),
4248
+ inputDataBody: inputData,
4267
4249
  };
4268
4250
  return generateMarkdownTableString(tableData, columnAlignments, adjustColumnWidths, hasTabs, canReplaceNewlines);
4269
4251
  }
@@ -4289,8 +4271,12 @@ var MarkdownTable = function (_a) {
4289
4271
  }
4290
4272
  }, [markdownTableSyntax, onTableCreate]);
4291
4273
  useEffect(function () {
4292
- if (preElementRef.current) {
4293
- 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
+ });
4294
4280
  }
4295
4281
  }, [markdownTableSyntax]);
4296
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 }) })] }));