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 +50 -63
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +50 -63
- package/dist/index.esm.js.map +1 -1
- package/dist/types.d.ts +6 -6
- package/dist/utils.d.ts +14 -10
- package/package.json +75 -75
- package/dist/jest.setup.d.ts +0 -2
- package/dist/jest.setup.js +0 -3
- package/dist/jest.setup.js.map +0 -1
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.js +0 -62
- package/dist/src/index.js.map +0 -1
- package/dist/src/types.d.ts +0 -56
- package/dist/src/types.js +0 -3
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.d.ts +0 -58
- package/dist/src/utils.js +0 -179
- package/dist/src/utils.js.map +0 -1
- package/dist/src/validation.d.ts +0 -13
- package/dist/src/validation.js +0 -93
- package/dist/src/validation.js.map +0 -1
- package/dist/test/MarkdownTable.test.d.ts +0 -1
- package/dist/test/MarkdownTable.test.js +0 -91
- package/dist/test/MarkdownTable.test.js.map +0 -1
- package/dist/test/utils.test.d.ts +0 -1
- package/dist/test/utils.test.js +0 -238
- package/dist/test/utils.test.js.map +0 -1
- package/dist/test/validation.test.d.ts +0 -1
- package/dist/test/validation.test.js +0 -86
- package/dist/test/validation.test.js.map +0 -1
package/dist/index.d.ts
CHANGED
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
|
4070
|
-
* @param
|
4071
|
-
* @param maxColumnCount - The maximum number of columns in the
|
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(
|
4077
|
-
|
4078
|
-
|
4079
|
-
|
4080
|
-
|
4081
|
-
|
4082
|
-
|
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
|
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
|
4120
|
-
var _a, _b
|
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
|
-
|
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
|
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.
|
4200
|
-
var bodyColumnCounts = inputData.
|
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.
|
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 =
|
4208
|
-
var markdownAlignmentRow =
|
4209
|
-
var markdownBodyRows = inputData.
|
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
|
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
|
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 '
|
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
|
-
|
4261
|
-
|
4243
|
+
inputDataHeader: inputData[0],
|
4244
|
+
inputDataBody: inputData.slice(1),
|
4262
4245
|
}
|
4263
4246
|
: {
|
4264
|
-
|
4265
|
-
|
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
|
-
|
4292
|
-
|
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 }) })] }));
|