react-markdown-table-ts 0.5.7 → 0.5.8

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.esm.js CHANGED
@@ -4077,7 +4077,7 @@ var MarkdownTableError = /** @class */ (function (_super) {
4077
4077
  function getAdjustedAlignments(columnAlignments, columnCount) {
4078
4078
  var defaultAlignment = 'left';
4079
4079
  return columnAlignments.length < columnCount
4080
- ? __spreadArray(__spreadArray([], Array.from(columnAlignments), true), Array(columnCount - columnAlignments.length).fill(defaultAlignment), true) : Array.from(columnAlignments);
4080
+ ? __spreadArray(__spreadArray([], columnAlignments, true), Array(columnCount - columnAlignments.length).fill(defaultAlignment), true) : columnAlignments.slice(0, columnCount);
4081
4081
  }
4082
4082
  /**
4083
4083
  * Calculates the maximum width for each column based on the content.
@@ -4098,28 +4098,20 @@ function calculateColumnWidths(tableRows, maxColumnCount) {
4098
4098
  }
4099
4099
  /**
4100
4100
  * Formats a single row into a Markdown-formatted string.
4101
- * @param columnCount - The number of columns in the table.
4102
- * @param currentRow - The data of the current row.
4103
- * @param columnAlignments - Alignment settings for each column.
4104
- * @param columnWidths - Widths of each column.
4105
- * @param useTabs - Flag to use tabs between columns.
4106
- * @param canReplaceNewlines - Flag to replace newlines with <br> tags.
4107
- * @param hasPadding - Flag to add padding spaces around cell content.
4101
+ * @param params - Object containing formatting options and row data.
4108
4102
  * @returns The Markdown string for the row.
4109
4103
  */
4110
- function formatMarkdownRow(columnCount, currentRow, columnAlignments, columnWidths, useTabs, canReplaceNewlines, hasPadding) {
4111
- var _a, _b;
4112
- if (useTabs === void 0) { useTabs = false; }
4113
- if (canReplaceNewlines === void 0) { canReplaceNewlines = false; }
4114
- if (hasPadding === void 0) { hasPadding = true; }
4104
+ function formatMarkdownRow(_a) {
4105
+ var _b, _c;
4106
+ var columnCount = _a.columnCount, currentRow = _a.currentRow, columnAlignments = _a.columnAlignments, columnWidths = _a.columnWidths, _d = _a.useTabs, useTabs = _d === void 0 ? false : _d, _e = _a.replaceNewlines, replaceNewlines = _e === void 0 ? false : _e, _f = _a.hasPadding, hasPadding = _f === void 0 ? true : _f;
4115
4107
  var adjustedAlignments = getAdjustedAlignments(columnAlignments, columnCount);
4116
4108
  var markdownRow = '|';
4117
4109
  for (var i = 0; i < columnCount; i++) {
4118
- var cell = (_a = currentRow[i]) !== null && _a !== void 0 ? _a : '';
4119
- if (canReplaceNewlines) {
4110
+ var cell = (_b = currentRow[i]) !== null && _b !== void 0 ? _b : '';
4111
+ if (replaceNewlines) {
4120
4112
  cell = replaceNewlinesInCell(cell);
4121
4113
  }
4122
- var alignment = (_b = adjustedAlignments[i]) !== null && _b !== void 0 ? _b : 'left';
4114
+ var alignment = (_c = adjustedAlignments[i]) !== null && _c !== void 0 ? _c : 'left';
4123
4115
  var targetWidth = columnWidths ? columnWidths[i] : cell.length;
4124
4116
  var padding = hasPadding ? ' ' : '';
4125
4117
  if (alignment === 'right') {
@@ -4138,70 +4130,70 @@ function formatMarkdownRow(columnCount, currentRow, columnAlignments, columnWidt
4138
4130
  }
4139
4131
  return markdownRow;
4140
4132
  }
4141
- /**
4142
- * Generates the alignment row for the Markdown table syntax.
4143
- * @param columnCount - The number of columns in the table.
4144
- * @param columnAlignments - Alignment settings for each column.
4145
- * @param columnWidths - Widths of each column.
4146
- * @param useTabs - Flag to use tabs between columns.
4147
- * @param hasPadding - Flag to add padding spaces around cell content.
4148
- * @returns The Markdown string for the alignment row.
4149
- */
4150
- function formatAlignmentRow(columnCount, columnAlignments, columnWidths, useTabs, hasPadding) {
4151
- var _a;
4152
- if (useTabs === void 0) { useTabs = false; }
4153
- if (hasPadding === void 0) { hasPadding = true; }
4133
+ function getAlignmentIndicator(_a) {
4134
+ var _b;
4135
+ var alignment = _a.alignment, targetWidth = _a.targetWidth;
4136
+ var indicators = {
4137
+ left: ":".concat('-'.repeat(targetWidth - 1)),
4138
+ center: ":".concat('-'.repeat(targetWidth - 2), ":"),
4139
+ right: "".concat('-'.repeat(targetWidth - 1), ":"),
4140
+ none: "".concat('-'.repeat(targetWidth)),
4141
+ };
4142
+ return (_b = indicators[alignment]) !== null && _b !== void 0 ? _b : indicators.none;
4143
+ }
4144
+ function formatAlignmentRow(_a) {
4145
+ var columnCount = _a.columnCount, columnAlignments = _a.columnAlignments, columnWidths = _a.columnWidths, _b = _a.useTabs, useTabs = _b === void 0 ? false : _b, _c = _a.hasPadding, hasPadding = _c === void 0 ? true : _c;
4154
4146
  var adjustedAlignments = getAdjustedAlignments(columnAlignments, columnCount);
4155
- var alignmentRow = '|';
4156
- for (var i = 0; i < columnCount; i++) {
4147
+ var padding = hasPadding ? ' ' : '';
4148
+ var alignmentCells = Array.from({ length: columnCount }, function (_, i) {
4149
+ var _a, _b;
4157
4150
  var alignment = (_a = adjustedAlignments[i]) !== null && _a !== void 0 ? _a : 'left';
4158
- var targetWidth = columnWidths ? columnWidths[i] : 3;
4159
- var alignIndicator = '';
4160
- var padding = hasPadding ? ' ' : '';
4161
- switch (alignment) {
4162
- case 'left':
4163
- alignIndicator = ":".concat('-'.repeat(targetWidth - 1));
4164
- break;
4165
- case 'center':
4166
- alignIndicator = ":".concat('-'.repeat(targetWidth - 2), ":");
4167
- break;
4168
- case 'right':
4169
- alignIndicator = "".concat('-'.repeat(targetWidth - 1), ":");
4170
- break;
4171
- default:
4172
- alignIndicator = "".concat('-'.repeat(targetWidth));
4173
- break;
4174
- }
4175
- alignmentRow += "".concat(useTabs ? '\t' : padding).concat(alignIndicator).concat(useTabs ? '\t' : padding, "|");
4176
- }
4177
- return alignmentRow;
4151
+ var targetWidth = (_b = columnWidths === null || columnWidths === void 0 ? void 0 : columnWidths[i]) !== null && _b !== void 0 ? _b : 3;
4152
+ var alignIndicator = getAlignmentIndicator({ alignment: alignment, targetWidth: targetWidth });
4153
+ return "".concat(useTabs ? '\t' : padding).concat(alignIndicator).concat(useTabs ? '\t' : padding);
4154
+ });
4155
+ return "|".concat(alignmentCells.join('|'), "|");
4178
4156
  }
4179
4157
  /**
4180
4158
  * Generates a complete Markdown table string from the provided data.
4181
- * @param inputData - The table data including headers and rows.
4182
- * @param columnAlignments - Alignment settings for each column.
4183
- * @param canAdjustColumnWidths - Flag to adjust column widths based on content.
4184
- * @param useTabs - Flag to use tabs between columns.
4185
- * @param replaceNewlines - Flag to replace newlines with <br> tags.
4186
- * @param hasPadding - Flag to add padding spaces around cell content.
4159
+ * @param params - Object containing table data and formatting options.
4187
4160
  * @returns The complete Markdown table string.
4188
4161
  */
4189
- function generateMarkdownTableString(inputData, columnAlignments, canAdjustColumnWidths, useTabs, replaceNewlines, hasPadding) {
4190
- if (canAdjustColumnWidths === void 0) { canAdjustColumnWidths = true; }
4191
- if (useTabs === void 0) { useTabs = false; }
4192
- if (replaceNewlines === void 0) { replaceNewlines = false; }
4193
- if (hasPadding === void 0) { hasPadding = true; }
4162
+ function generateMarkdownTableString(_a) {
4163
+ var inputData = _a.inputData, columnAlignments = _a.columnAlignments, _b = _a.canAdjustColumnWidths, canAdjustColumnWidths = _b === void 0 ? true : _b, _c = _a.useTabs, useTabs = _c === void 0 ? false : _c, _d = _a.replaceNewlines, replaceNewlines = _d === void 0 ? false : _d, _e = _a.hasPadding, hasPadding = _e === void 0 ? true : _e;
4194
4164
  var headerColumnCount = inputData.inputDataHeader.length;
4195
4165
  var bodyColumnCounts = inputData.inputDataBody.map(function (currentRow) { return currentRow.length; });
4196
4166
  var maxColumnCount = Math.max.apply(Math, __spreadArray([headerColumnCount], bodyColumnCounts, false));
4197
4167
  var columnWidths = canAdjustColumnWidths
4198
4168
  ? calculateColumnWidths(__spreadArray([inputData.inputDataHeader], inputData.inputDataBody, true), maxColumnCount)
4199
4169
  : undefined;
4200
- var markdownHeaderRow = formatMarkdownRow(maxColumnCount, inputData.inputDataHeader, columnAlignments, columnWidths, useTabs, replaceNewlines, hasPadding);
4201
- var markdownAlignmentRow = formatAlignmentRow(maxColumnCount, columnAlignments, columnWidths, useTabs, hasPadding);
4170
+ var markdownHeaderRow = formatMarkdownRow({
4171
+ columnCount: maxColumnCount,
4172
+ currentRow: inputData.inputDataHeader,
4173
+ columnAlignments: columnAlignments,
4174
+ columnWidths: columnWidths,
4175
+ useTabs: useTabs,
4176
+ replaceNewlines: replaceNewlines,
4177
+ hasPadding: hasPadding,
4178
+ });
4179
+ var markdownAlignmentRow = formatAlignmentRow({
4180
+ columnCount: maxColumnCount,
4181
+ columnAlignments: columnAlignments,
4182
+ columnWidths: columnWidths,
4183
+ useTabs: useTabs,
4184
+ hasPadding: hasPadding,
4185
+ });
4202
4186
  var markdownBodyRows = inputData.inputDataBody
4203
4187
  .map(function (currentRow) {
4204
- return formatMarkdownRow(maxColumnCount, currentRow, columnAlignments, columnWidths, useTabs, replaceNewlines, hasPadding);
4188
+ return formatMarkdownRow({
4189
+ columnCount: maxColumnCount,
4190
+ currentRow: currentRow,
4191
+ columnAlignments: columnAlignments,
4192
+ columnWidths: columnWidths,
4193
+ useTabs: useTabs,
4194
+ replaceNewlines: replaceNewlines,
4195
+ hasPadding: hasPadding,
4196
+ });
4205
4197
  })
4206
4198
  .join('\n');
4207
4199
  return "".concat(markdownHeaderRow, "\n").concat(markdownAlignmentRow, "\n").concat(markdownBodyRows).trimEnd();
@@ -18547,48 +18539,40 @@ var LIGHT_THEME_CSS = "\ncode[class*=language-],pre[class*=language-]{color:#000
18547
18539
  var DARK_THEME_CSS = "\ncode[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);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}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}pre[class*=language-].line-numbers{position:relative;padding-left:2.4em;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:.5em;text-align:right}\n";
18548
18540
  var MarkdownTable = function (_a) {
18549
18541
  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.hasPadding, hasPadding = _g === void 0 ? true : _g, _h = _a.canReplaceNewlines, canReplaceNewlines = _h === void 0 ? false : _h, className = _a.className, onTableCreate = _a.onTableCreate, _j = _a.theme, theme = _j === void 0 ? 'light' : _j, preStyle = _a.preStyle, _k = _a.showCopyButton, showCopyButton = _k === void 0 ? false : _k;
18550
- var adjustColumnWidths = !isCompact;
18551
18542
  var preElementRef = useRef(null);
18552
18543
  var _l = useState(false), isCopied = _l[0], setIsCopied = _l[1];
18544
+ var adjustColumnWidths = !isCompact;
18545
+ var convertedInputData = useMemo(function () {
18546
+ if (!inputData)
18547
+ return null;
18548
+ var header = inputData[0], body = inputData.slice(1);
18549
+ return { inputDataHeader: header, inputDataBody: body };
18550
+ }, [inputData]);
18553
18551
  var markdownTableSyntax = useMemo(function () {
18554
- if (inputData === null) {
18555
- return 'Error: No data provided for the table.';
18556
- }
18557
- try {
18558
- if (!Array.isArray(inputData) || inputData.length === 0) {
18559
- throw new MarkdownTableError("The 'data' prop must be a non-empty two-dimensional array.");
18560
- }
18561
- var _a = hasHeader
18562
- ? { inputDataHeader: inputData[0], inputDataBody: inputData.slice(1) }
18563
- : { inputDataHeader: generateAlphabetHeaders(inputData[0].length), inputDataBody: inputData }, inputDataHeader = _a.inputDataHeader, inputDataBody = _a.inputDataBody;
18564
- return generateMarkdownTableString({ inputDataHeader: inputDataHeader, inputDataBody: inputDataBody }, columnAlignments, adjustColumnWidths, hasTabs, canReplaceNewlines, hasPadding);
18565
- }
18566
- catch (error) {
18567
- return error instanceof MarkdownTableError ? "Error: ".concat(error.message) : (function () { throw error; })();
18568
- }
18552
+ return generateMarkdownTableSyntax({
18553
+ inputData: convertedInputData,
18554
+ hasHeader: hasHeader,
18555
+ columnAlignments: columnAlignments,
18556
+ adjustColumnWidths: adjustColumnWidths,
18557
+ hasTabs: hasTabs,
18558
+ hasPadding: hasPadding,
18559
+ canReplaceNewlines: canReplaceNewlines,
18560
+ });
18569
18561
  }, [
18570
- inputData,
18562
+ convertedInputData,
18571
18563
  hasHeader,
18572
18564
  columnAlignments,
18573
- isCompact,
18565
+ adjustColumnWidths,
18574
18566
  hasTabs,
18575
- canReplaceNewlines,
18576
18567
  hasPadding,
18568
+ canReplaceNewlines,
18577
18569
  ]);
18578
18570
  useEffect(function () {
18579
18571
  if (onTableCreate) {
18580
18572
  onTableCreate(markdownTableSyntax);
18581
18573
  }
18582
18574
  }, [markdownTableSyntax, onTableCreate]);
18583
- useEffect(function () {
18584
- var _a;
18585
- var codeElement = (_a = preElementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('code');
18586
- if (codeElement && markdownTableSyntax) {
18587
- requestAnimationFrame(function () {
18588
- Prism$1.highlightElement(codeElement);
18589
- });
18590
- }
18591
- }, [markdownTableSyntax]);
18575
+ usePrismHighlight(markdownTableSyntax, preElementRef);
18592
18576
  var handleCopy = function () {
18593
18577
  navigator.clipboard.writeText(markdownTableSyntax);
18594
18578
  setIsCopied(true);
@@ -18596,14 +18580,51 @@ var MarkdownTable = function (_a) {
18596
18580
  };
18597
18581
  return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { children: theme === 'light' ? LIGHT_THEME_CSS : DARK_THEME_CSS }), jsxRuntimeExports.jsxs("div", { style: {
18598
18582
  position: 'relative',
18599
- isolation: 'isolate'
18583
+ isolation: 'isolate',
18600
18584
  }, children: [showCopyButton && (jsxRuntimeExports.jsx(Tooltip$1, { title: isCopied ? 'Copied!' : 'Copy markdown table syntax', placement: "left-end", arrow: true, children: jsxRuntimeExports.jsx(IconButton$1, { onClick: handleCopy, sx: {
18601
18585
  position: 'absolute',
18602
18586
  top: '12px',
18603
18587
  right: '8px',
18604
- zIndex: 1
18588
+ zIndex: 1,
18605
18589
  }, "aria-label": "Copy to clipboard", size: "small", children: jsxRuntimeExports.jsx(ContentCopyIcon, { fontSize: "small" }) }) })), jsxRuntimeExports.jsx("pre", { ref: preElementRef, className: "".concat(className, " language-markdown line-numbers ").concat(theme === 'dark' ? 'dark-theme' : ''), style: preStyle, children: jsxRuntimeExports.jsx("code", { className: "language-markdown", role: "code", children: markdownTableSyntax }) })] })] }));
18606
18590
  };
18591
+ var generateMarkdownTableSyntax = function (_a) {
18592
+ var inputData = _a.inputData, hasHeader = _a.hasHeader, columnAlignments = _a.columnAlignments, adjustColumnWidths = _a.adjustColumnWidths, hasTabs = _a.hasTabs, hasPadding = _a.hasPadding, canReplaceNewlines = _a.canReplaceNewlines;
18593
+ if (inputData === null) {
18594
+ return 'Error: No data provided for the table.';
18595
+ }
18596
+ if (!Array.isArray(inputData) || inputData.length === 0) {
18597
+ throw new MarkdownTableError("The 'inputData' prop must be a non-empty two-dimensional array.");
18598
+ }
18599
+ var _b = hasHeader
18600
+ ? {
18601
+ inputDataHeader: inputData[0],
18602
+ inputDataBody: inputData.slice(1),
18603
+ }
18604
+ : {
18605
+ inputDataHeader: generateAlphabetHeaders(inputData[0].length),
18606
+ inputDataBody: inputData,
18607
+ }, inputDataHeader = _b.inputDataHeader, inputDataBody = _b.inputDataBody;
18608
+ return generateMarkdownTableString({
18609
+ inputData: { inputDataHeader: inputDataHeader, inputDataBody: inputDataBody },
18610
+ columnAlignments: columnAlignments,
18611
+ canAdjustColumnWidths: adjustColumnWidths,
18612
+ useTabs: hasTabs,
18613
+ replaceNewlines: canReplaceNewlines,
18614
+ hasPadding: hasPadding,
18615
+ });
18616
+ };
18617
+ var usePrismHighlight = function (markdownTableSyntax, preElementRef) {
18618
+ useEffect(function () {
18619
+ var _a;
18620
+ var codeElement = (_a = preElementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('code');
18621
+ if (codeElement) {
18622
+ requestAnimationFrame(function () {
18623
+ Prism$1.highlightElement(codeElement);
18624
+ });
18625
+ }
18626
+ }, [markdownTableSyntax]);
18627
+ };
18607
18628
 
18608
18629
  export { MarkdownTable };
18609
18630
  //# sourceMappingURL=index.esm.js.map