react-markdown-table-ts 0.5.6 → 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/README.md +65 -63
- package/dist/index.cjs.js +129 -112
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +129 -112
- package/dist/index.esm.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/utils.d.ts +28 -25
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
@@ -4068,6 +4068,17 @@ var MarkdownTableError = /** @class */ (function (_super) {
|
|
4068
4068
|
}(Error));
|
4069
4069
|
|
4070
4070
|
// src/utils.ts
|
4071
|
+
/**
|
4072
|
+
* Adjusts column alignments array to match the required column count
|
4073
|
+
* @param columnAlignments - Original alignment settings
|
4074
|
+
* @param columnCount - Required number of columns
|
4075
|
+
* @returns Adjusted array of column alignments
|
4076
|
+
*/
|
4077
|
+
function getAdjustedAlignments(columnAlignments, columnCount) {
|
4078
|
+
var defaultAlignment = 'left';
|
4079
|
+
return columnAlignments.length < columnCount
|
4080
|
+
? __spreadArray(__spreadArray([], columnAlignments, true), Array(columnCount - columnAlignments.length).fill(defaultAlignment), true) : columnAlignments.slice(0, columnCount);
|
4081
|
+
}
|
4071
4082
|
/**
|
4072
4083
|
* Calculates the maximum width for each column based on the content.
|
4073
4084
|
* @param tableRows - All rows (header and body) of the table.
|
@@ -4087,30 +4098,20 @@ function calculateColumnWidths(tableRows, maxColumnCount) {
|
|
4087
4098
|
}
|
4088
4099
|
/**
|
4089
4100
|
* Formats a single row into a Markdown-formatted string.
|
4090
|
-
* @param
|
4091
|
-
* @param currentRow - The data of the current row.
|
4092
|
-
* @param columnAlignments - Alignment settings for each column.
|
4093
|
-
* @param columnWidths - Widths of each column.
|
4094
|
-
* @param useTabs - Flag to use tabs between columns.
|
4095
|
-
* @param canReplaceNewlines - Flag to replace newlines with <br> tags.
|
4096
|
-
* @param hasPadding - Flag to add padding spaces around cell content.
|
4101
|
+
* @param params - Object containing formatting options and row data.
|
4097
4102
|
* @returns The Markdown string for the row.
|
4098
4103
|
*/
|
4099
|
-
function formatMarkdownRow(
|
4100
|
-
var
|
4101
|
-
|
4102
|
-
|
4103
|
-
if (hasPadding === void 0) { hasPadding = true; }
|
4104
|
-
var defaultAlignment = 'left';
|
4105
|
-
var adjustedAlignments = columnAlignments.length < columnCount
|
4106
|
-
? __spreadArray(__spreadArray([], columnAlignments, true), Array(columnCount - columnAlignments.length).fill(defaultAlignment), true) : columnAlignments;
|
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;
|
4107
|
+
var adjustedAlignments = getAdjustedAlignments(columnAlignments, columnCount);
|
4107
4108
|
var markdownRow = '|';
|
4108
4109
|
for (var i = 0; i < columnCount; i++) {
|
4109
|
-
var cell = (
|
4110
|
-
if (
|
4110
|
+
var cell = (_b = currentRow[i]) !== null && _b !== void 0 ? _b : '';
|
4111
|
+
if (replaceNewlines) {
|
4111
4112
|
cell = replaceNewlinesInCell(cell);
|
4112
4113
|
}
|
4113
|
-
var alignment = (
|
4114
|
+
var alignment = (_c = adjustedAlignments[i]) !== null && _c !== void 0 ? _c : 'left';
|
4114
4115
|
var targetWidth = columnWidths ? columnWidths[i] : cell.length;
|
4115
4116
|
var padding = hasPadding ? ' ' : '';
|
4116
4117
|
if (alignment === 'right') {
|
@@ -4129,72 +4130,70 @@ function formatMarkdownRow(columnCount, currentRow, columnAlignments, columnWidt
|
|
4129
4130
|
}
|
4130
4131
|
return markdownRow;
|
4131
4132
|
}
|
4132
|
-
|
4133
|
-
|
4134
|
-
|
4135
|
-
|
4136
|
-
|
4137
|
-
|
4138
|
-
|
4139
|
-
|
4140
|
-
|
4141
|
-
|
4142
|
-
|
4143
|
-
|
4144
|
-
|
4145
|
-
var
|
4146
|
-
var
|
4147
|
-
|
4148
|
-
|
4149
|
-
|
4150
|
-
var
|
4151
|
-
var
|
4152
|
-
|
4153
|
-
|
4154
|
-
|
4155
|
-
case 'left':
|
4156
|
-
alignIndicator = ":".concat('-'.repeat(targetWidth - 1));
|
4157
|
-
break;
|
4158
|
-
case 'center':
|
4159
|
-
alignIndicator = ":".concat('-'.repeat(targetWidth - 2), ":");
|
4160
|
-
break;
|
4161
|
-
case 'right':
|
4162
|
-
alignIndicator = "".concat('-'.repeat(targetWidth - 1), ":");
|
4163
|
-
break;
|
4164
|
-
default:
|
4165
|
-
alignIndicator = "".concat('-'.repeat(targetWidth));
|
4166
|
-
break;
|
4167
|
-
}
|
4168
|
-
alignmentRow += "".concat(useTabs ? '\t' : padding).concat(alignIndicator).concat(useTabs ? '\t' : padding, "|");
|
4169
|
-
}
|
4170
|
-
return alignmentRow;
|
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;
|
4146
|
+
var adjustedAlignments = getAdjustedAlignments(columnAlignments, columnCount);
|
4147
|
+
var padding = hasPadding ? ' ' : '';
|
4148
|
+
var alignmentCells = Array.from({ length: columnCount }, function (_, i) {
|
4149
|
+
var _a, _b;
|
4150
|
+
var alignment = (_a = adjustedAlignments[i]) !== null && _a !== void 0 ? _a : 'left';
|
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('|'), "|");
|
4171
4156
|
}
|
4172
4157
|
/**
|
4173
4158
|
* Generates a complete Markdown table string from the provided data.
|
4174
|
-
* @param
|
4175
|
-
* @param columnAlignments - Alignment settings for each column.
|
4176
|
-
* @param canAdjustColumnWidths - Flag to adjust column widths based on content.
|
4177
|
-
* @param useTabs - Flag to use tabs between columns.
|
4178
|
-
* @param replaceNewlines - Flag to replace newlines with <br> tags.
|
4179
|
-
* @param hasPadding - Flag to add padding spaces around cell content.
|
4159
|
+
* @param params - Object containing table data and formatting options.
|
4180
4160
|
* @returns The complete Markdown table string.
|
4181
4161
|
*/
|
4182
|
-
function generateMarkdownTableString(
|
4183
|
-
|
4184
|
-
if (useTabs === void 0) { useTabs = false; }
|
4185
|
-
if (replaceNewlines === void 0) { replaceNewlines = false; }
|
4186
|
-
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;
|
4187
4164
|
var headerColumnCount = inputData.inputDataHeader.length;
|
4188
4165
|
var bodyColumnCounts = inputData.inputDataBody.map(function (currentRow) { return currentRow.length; });
|
4189
4166
|
var maxColumnCount = Math.max.apply(Math, __spreadArray([headerColumnCount], bodyColumnCounts, false));
|
4190
4167
|
var columnWidths = canAdjustColumnWidths
|
4191
4168
|
? calculateColumnWidths(__spreadArray([inputData.inputDataHeader], inputData.inputDataBody, true), maxColumnCount)
|
4192
4169
|
: undefined;
|
4193
|
-
var markdownHeaderRow = formatMarkdownRow(
|
4194
|
-
|
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
|
+
});
|
4195
4186
|
var markdownBodyRows = inputData.inputDataBody
|
4196
4187
|
.map(function (currentRow) {
|
4197
|
-
return formatMarkdownRow(
|
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
|
+
});
|
4198
4197
|
})
|
4199
4198
|
.join('\n');
|
4200
4199
|
return "".concat(markdownHeaderRow, "\n").concat(markdownAlignmentRow, "\n").concat(markdownBodyRows).trimEnd();
|
@@ -18540,59 +18539,40 @@ var LIGHT_THEME_CSS = "\ncode[class*=language-],pre[class*=language-]{color:#000
|
|
18540
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";
|
18541
18540
|
var MarkdownTable = function (_a) {
|
18542
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;
|
18543
|
-
var adjustColumnWidths = !isCompact;
|
18544
18542
|
var preElementRef = useRef(null);
|
18545
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]);
|
18546
18551
|
var markdownTableSyntax = useMemo(function () {
|
18547
|
-
|
18548
|
-
|
18549
|
-
|
18550
|
-
|
18551
|
-
|
18552
|
-
|
18553
|
-
|
18554
|
-
|
18555
|
-
|
18556
|
-
inputDataHeader: inputData[0],
|
18557
|
-
inputDataBody: inputData.slice(1),
|
18558
|
-
}
|
18559
|
-
: {
|
18560
|
-
inputDataHeader: generateAlphabetHeaders(inputData[0].length),
|
18561
|
-
inputDataBody: inputData,
|
18562
|
-
};
|
18563
|
-
return generateMarkdownTableString(tableData, columnAlignments, adjustColumnWidths, hasTabs, canReplaceNewlines, hasPadding);
|
18564
|
-
}
|
18565
|
-
catch (error) {
|
18566
|
-
if (error instanceof MarkdownTableError) {
|
18567
|
-
return "Error: ".concat(error.message);
|
18568
|
-
}
|
18569
|
-
else {
|
18570
|
-
throw error;
|
18571
|
-
}
|
18572
|
-
}
|
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
|
+
});
|
18573
18561
|
}, [
|
18574
|
-
|
18562
|
+
convertedInputData,
|
18575
18563
|
hasHeader,
|
18576
18564
|
columnAlignments,
|
18577
|
-
|
18565
|
+
adjustColumnWidths,
|
18578
18566
|
hasTabs,
|
18579
|
-
canReplaceNewlines,
|
18580
18567
|
hasPadding,
|
18568
|
+
canReplaceNewlines,
|
18581
18569
|
]);
|
18582
18570
|
useEffect(function () {
|
18583
18571
|
if (onTableCreate) {
|
18584
18572
|
onTableCreate(markdownTableSyntax);
|
18585
18573
|
}
|
18586
18574
|
}, [markdownTableSyntax, onTableCreate]);
|
18587
|
-
|
18588
|
-
var _a;
|
18589
|
-
var codeElement = (_a = preElementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('code');
|
18590
|
-
if (codeElement && markdownTableSyntax) {
|
18591
|
-
requestAnimationFrame(function () {
|
18592
|
-
Prism$1.highlightElement(codeElement);
|
18593
|
-
});
|
18594
|
-
}
|
18595
|
-
}, [markdownTableSyntax]);
|
18575
|
+
usePrismHighlight(markdownTableSyntax, preElementRef);
|
18596
18576
|
var handleCopy = function () {
|
18597
18577
|
navigator.clipboard.writeText(markdownTableSyntax);
|
18598
18578
|
setIsCopied(true);
|
@@ -18600,14 +18580,51 @@ var MarkdownTable = function (_a) {
|
|
18600
18580
|
};
|
18601
18581
|
return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { children: theme === 'light' ? LIGHT_THEME_CSS : DARK_THEME_CSS }), jsxRuntimeExports.jsxs("div", { style: {
|
18602
18582
|
position: 'relative',
|
18603
|
-
isolation: 'isolate'
|
18583
|
+
isolation: 'isolate',
|
18604
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: {
|
18605
18585
|
position: 'absolute',
|
18606
18586
|
top: '12px',
|
18607
18587
|
right: '8px',
|
18608
|
-
zIndex: 1
|
18588
|
+
zIndex: 1,
|
18609
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 }) })] })] }));
|
18610
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
|
+
};
|
18611
18628
|
|
18612
18629
|
export { MarkdownTable };
|
18613
18630
|
//# sourceMappingURL=index.esm.js.map
|