react-markdown-table-ts 1.1.9 → 1.2.1
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/cellFormatter.d.ts +9 -0
- package/dist/index.cjs.js +100 -65
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.esm.js +100 -65
- package/dist/index.esm.js.map +1 -1
- package/dist/types.d.ts +18 -7
- package/dist/utils.d.ts +7 -5
- package/dist/validation.d.ts +1 -1
- package/package.json +1 -1
- package/dist/MarkdownTable.stories.d.ts +0 -156
- 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/MarkdownTable.stories.d.ts +0 -156
- package/dist/src/MarkdownTable.stories.js +0 -172
- package/dist/src/MarkdownTable.stories.js.map +0 -1
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.js +0 -78
- package/dist/src/index.js.map +0 -1
- package/dist/src/types.d.ts +0 -123
- package/dist/src/types.js +0 -3
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.d.ts +0 -8
- package/dist/src/utils.js +0 -176
- package/dist/src/utils.js.map +0 -1
- package/dist/src/validation.d.ts +0 -19
- package/dist/src/validation.js +0 -106
- package/dist/src/validation.js.map +0 -1
- package/dist/stories/Button.d.ts +0 -15
- package/dist/stories/Button.stories.d.ts +0 -23
- package/dist/stories/Header.d.ts +0 -12
- package/dist/stories/Header.stories.d.ts +0 -18
- package/dist/stories/Page.d.ts +0 -3
- package/dist/stories/Page.stories.d.ts +0 -13
- 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 -234
- 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
@@ -1,5 +1,5 @@
|
|
1
1
|
/// <reference types="react" />
|
2
|
-
import
|
3
|
-
import
|
4
|
-
import { MarkdownTableProps } from
|
2
|
+
import "prismjs/components/prism-markdown";
|
3
|
+
import "prismjs/plugins/line-numbers/prism-line-numbers";
|
4
|
+
import { MarkdownTableProps } from "./types";
|
5
5
|
export declare const MarkdownTable: React.FC<MarkdownTableProps>;
|
package/dist/index.esm.js
CHANGED
@@ -4060,24 +4060,56 @@ var Prism$1 = /*@__PURE__*/getDefaultExportFromCjs(prismExports);
|
|
4060
4060
|
|
4061
4061
|
}());
|
4062
4062
|
|
4063
|
+
/**
|
4064
|
+
* @fileoverview Utilities for formatting and generating markdown tables with support
|
4065
|
+
* for cell formatting, alignment, and width calculations.
|
4066
|
+
*/
|
4063
4067
|
var CellFormatter = /** @class */ (function () {
|
4064
4068
|
function CellFormatter(config) {
|
4065
4069
|
this.config = config;
|
4066
|
-
this.padding = this.config.useTabs
|
4070
|
+
this.padding = this.config.useTabs
|
4071
|
+
? "\t"
|
4072
|
+
: this.config.hasPadding
|
4073
|
+
? " "
|
4074
|
+
: "";
|
4067
4075
|
}
|
4068
|
-
CellFormatter.prototype.
|
4069
|
-
var
|
4070
|
-
|
4071
|
-
|
4072
|
-
|
4073
|
-
|
4074
|
-
|
4075
|
-
|
4076
|
-
|
4077
|
-
|
4076
|
+
CellFormatter.prototype.formatCellContent = function (cell) {
|
4077
|
+
var content = cell.content;
|
4078
|
+
if (cell.code) {
|
4079
|
+
content = "`".concat(content, "`");
|
4080
|
+
}
|
4081
|
+
if (cell.bold) {
|
4082
|
+
content = "**".concat(content, "**");
|
4083
|
+
}
|
4084
|
+
if (cell.italic) {
|
4085
|
+
content = "*".concat(content, "*");
|
4086
|
+
}
|
4087
|
+
if (cell.link) {
|
4088
|
+
content = "[".concat(content, "](").concat(cell.link, ")");
|
4089
|
+
}
|
4090
|
+
return content;
|
4091
|
+
};
|
4092
|
+
CellFormatter.prototype.formatCell = function (cell, width) {
|
4093
|
+
var content = this.formatCellContent(cell);
|
4094
|
+
var alignment = cell.alignment || "inherit";
|
4095
|
+
var effectiveAlignment = alignment === "inherit" ? "none" : alignment;
|
4096
|
+
var paddedContent = "".concat(this.padding).concat(content).concat(this.padding);
|
4097
|
+
var spacesToAdd = width - content.length;
|
4098
|
+
if (spacesToAdd <= 0)
|
4099
|
+
return paddedContent;
|
4100
|
+
switch (effectiveAlignment) {
|
4101
|
+
case "right":
|
4102
|
+
return " ".repeat(spacesToAdd) + paddedContent;
|
4103
|
+
case "center": {
|
4104
|
+
var leftPad = Math.floor(spacesToAdd / 2);
|
4105
|
+
var rightPad = spacesToAdd - leftPad;
|
4106
|
+
return " ".repeat(leftPad) + paddedContent + " ".repeat(rightPad);
|
4078
4107
|
}
|
4079
|
-
|
4080
|
-
|
4108
|
+
case "justify":
|
4109
|
+
case "left":
|
4110
|
+
case "none":
|
4111
|
+
default:
|
4112
|
+
return paddedContent + " ".repeat(spacesToAdd);
|
4081
4113
|
}
|
4082
4114
|
};
|
4083
4115
|
return CellFormatter;
|
@@ -4089,11 +4121,11 @@ var AlignmentFormatter = /** @class */ (function () {
|
|
4089
4121
|
return this.indicators[alignment](width);
|
4090
4122
|
};
|
4091
4123
|
AlignmentFormatter.indicators = {
|
4092
|
-
left: function (width) { return ":".concat(
|
4093
|
-
right: function (width) { return "".concat(
|
4094
|
-
center: function (width) { return ":".concat(
|
4095
|
-
none: function (width) { return
|
4096
|
-
justify: function (width) { return
|
4124
|
+
left: function (width) { return ":".concat("-".repeat(width - 1)); },
|
4125
|
+
right: function (width) { return "".concat("-".repeat(width - 1), ":"); },
|
4126
|
+
center: function (width) { return ":".concat("-".repeat(width - 2), ":"); },
|
4127
|
+
none: function (width) { return "-".repeat(width); },
|
4128
|
+
justify: function (width) { return "-".repeat(width); },
|
4097
4129
|
};
|
4098
4130
|
return AlignmentFormatter;
|
4099
4131
|
}());
|
@@ -4104,9 +4136,9 @@ var TableFormatter = /** @class */ (function () {
|
|
4104
4136
|
this.adjustedAlignments = this.getAdjustedAlignments();
|
4105
4137
|
}
|
4106
4138
|
TableFormatter.prototype.getAdjustedAlignments = function () {
|
4107
|
-
var defaultAlignment =
|
4139
|
+
var defaultAlignment = "none";
|
4108
4140
|
var sanitizeAlignment = function (alignment) {
|
4109
|
-
return alignment ===
|
4141
|
+
return alignment === "justify" ? "none" : alignment;
|
4110
4142
|
};
|
4111
4143
|
return this.config.columnAlignments.length < this.config.columnCount
|
4112
4144
|
? __spreadArray(__spreadArray([], Array.from(this.config.columnAlignments).map(sanitizeAlignment), true), Array(this.config.columnCount - this.config.columnAlignments.length).fill(defaultAlignment), true) : Array.from(this.config.columnAlignments).map(sanitizeAlignment);
|
@@ -4114,79 +4146,77 @@ var TableFormatter = /** @class */ (function () {
|
|
4114
4146
|
TableFormatter.prototype.formatRow = function (row) {
|
4115
4147
|
var _this = this;
|
4116
4148
|
var formattedCells = Array.from({ length: this.config.columnCount }, function (_, i) {
|
4117
|
-
var _a;
|
4118
|
-
var cell = (_a = row[i]) !== null && _a !== void 0 ? _a :
|
4119
|
-
|
4120
|
-
|
4121
|
-
}
|
4122
|
-
var alignment = _this.adjustedAlignments[i];
|
4123
|
-
var width = _this.config.columnWidths ? _this.config.columnWidths[i] : cell.length;
|
4124
|
-
return _this.cellFormatter.formatCell(cell, alignment, width);
|
4149
|
+
var _a, _b, _c;
|
4150
|
+
var cell = (_a = row[i]) !== null && _a !== void 0 ? _a : { content: "" };
|
4151
|
+
var width = (_c = (_b = _this.config.columnWidths) === null || _b === void 0 ? void 0 : _b[i]) !== null && _c !== void 0 ? _c : cell.content.length;
|
4152
|
+
return _this.cellFormatter.formatCell(cell, width);
|
4125
4153
|
});
|
4126
|
-
return "|".concat(formattedCells.join(
|
4154
|
+
return "|".concat(formattedCells.join("|"), "|");
|
4127
4155
|
};
|
4128
4156
|
TableFormatter.prototype.formatAlignmentRow = function () {
|
4129
4157
|
var _this = this;
|
4130
|
-
var padding = this.config.useTabs
|
4158
|
+
var padding = this.config.useTabs
|
4159
|
+
? "\t"
|
4160
|
+
: this.config.hasPadding
|
4161
|
+
? " "
|
4162
|
+
: "";
|
4131
4163
|
var formattedColumns = Array.from({ length: this.config.columnCount }, function (_, i) {
|
4164
|
+
var _a, _b;
|
4132
4165
|
var alignment = _this.adjustedAlignments[i];
|
4133
|
-
var width = _this.config.columnWidths ?
|
4166
|
+
var width = (_b = (_a = _this.config.columnWidths) === null || _a === void 0 ? void 0 : _a[i]) !== null && _b !== void 0 ? _b : 3;
|
4134
4167
|
var indicator = AlignmentFormatter.formatIndicator(alignment, width);
|
4135
4168
|
return "".concat(padding).concat(indicator).concat(padding);
|
4136
4169
|
});
|
4137
|
-
return "|".concat(formattedColumns.join(
|
4170
|
+
return "|".concat(formattedColumns.join("|"), "|");
|
4138
4171
|
};
|
4139
4172
|
return TableFormatter;
|
4140
4173
|
}());
|
4141
|
-
function calculateColumnWidths(tableRows, maxColumnCount) {
|
4174
|
+
function calculateColumnWidths(tableRows, maxColumnCount, config) {
|
4142
4175
|
var widths = new Array(maxColumnCount).fill(3);
|
4176
|
+
var cellFormatter = new CellFormatter(config);
|
4143
4177
|
tableRows.forEach(function (row) {
|
4144
|
-
var _a;
|
4145
4178
|
for (var i = 0; i < maxColumnCount; i++) {
|
4146
|
-
var cell =
|
4147
|
-
|
4179
|
+
var cell = row[i];
|
4180
|
+
if (cell) {
|
4181
|
+
var formattedContent = cellFormatter["formatCellContent"](cell);
|
4182
|
+
widths[i] = Math.max(widths[i], formattedContent.length);
|
4183
|
+
}
|
4148
4184
|
}
|
4149
4185
|
});
|
4150
4186
|
return widths;
|
4151
4187
|
}
|
4152
|
-
function calculateMaxColumnCount(inputData) {
|
4153
|
-
var headerColumnCount = inputData.inputDataHeader.length;
|
4154
|
-
var bodyColumnCounts = inputData.inputDataBody.map(function (row) { return row.length; });
|
4155
|
-
return Math.max.apply(Math, __spreadArray([headerColumnCount], bodyColumnCounts, false));
|
4156
|
-
}
|
4157
|
-
function getColumnWidths(inputData, maxColumnCount, canAdjustColumnWidths) {
|
4158
|
-
return canAdjustColumnWidths
|
4159
|
-
? calculateColumnWidths(__spreadArray([inputData.inputDataHeader], inputData.inputDataBody, true), maxColumnCount)
|
4160
|
-
: undefined;
|
4161
|
-
}
|
4162
4188
|
function generateMarkdownTableString(inputData, columnAlignments, canAdjustColumnWidths, useTabs, replaceNewlines, hasPadding) {
|
4163
4189
|
if (canAdjustColumnWidths === void 0) { canAdjustColumnWidths = true; }
|
4164
4190
|
if (useTabs === void 0) { useTabs = false; }
|
4165
4191
|
if (replaceNewlines === void 0) { replaceNewlines = false; }
|
4166
4192
|
if (hasPadding === void 0) { hasPadding = true; }
|
4167
|
-
var maxColumnCount =
|
4168
|
-
var columnWidths = getColumnWidths(inputData, maxColumnCount, canAdjustColumnWidths);
|
4193
|
+
var maxColumnCount = Math.max.apply(Math, __spreadArray([inputData.inputDataHeader.length], inputData.inputDataBody.map(function (row) { return row.length; }), false));
|
4169
4194
|
var config = {
|
4170
4195
|
columnCount: maxColumnCount,
|
4171
4196
|
columnAlignments: columnAlignments,
|
4172
|
-
columnWidths:
|
4197
|
+
columnWidths: canAdjustColumnWidths
|
4198
|
+
? calculateColumnWidths(__spreadArray([inputData.inputDataHeader], inputData.inputDataBody, true), maxColumnCount, {
|
4199
|
+
columnCount: maxColumnCount,
|
4200
|
+
columnAlignments: columnAlignments,
|
4201
|
+
useTabs: useTabs,
|
4202
|
+
replaceNewlines: replaceNewlines,
|
4203
|
+
hasPadding: hasPadding,
|
4204
|
+
})
|
4205
|
+
: undefined,
|
4173
4206
|
useTabs: useTabs,
|
4174
4207
|
replaceNewlines: replaceNewlines,
|
4175
|
-
hasPadding: hasPadding
|
4208
|
+
hasPadding: hasPadding,
|
4176
4209
|
};
|
4177
4210
|
var tableFormatter = new TableFormatter(config);
|
4178
4211
|
var headerRow = tableFormatter.formatRow(inputData.inputDataHeader);
|
4179
4212
|
var alignmentRow = tableFormatter.formatAlignmentRow();
|
4180
4213
|
var bodyRows = inputData.inputDataBody
|
4181
4214
|
.map(function (row) { return tableFormatter.formatRow(row); })
|
4182
|
-
.join(
|
4215
|
+
.join("\n");
|
4183
4216
|
return "".concat(headerRow, "\n").concat(alignmentRow, "\n").concat(bodyRows).trimEnd();
|
4184
4217
|
}
|
4185
|
-
function replaceNewlinesInCell(cell) {
|
4186
|
-
return cell.replace(/\n/g, '<br>');
|
4187
|
-
}
|
4188
4218
|
function getColumnName(index) {
|
4189
|
-
var columnName =
|
4219
|
+
var columnName = "";
|
4190
4220
|
var currentIndex = index;
|
4191
4221
|
while (currentIndex >= 0) {
|
4192
4222
|
columnName = String.fromCharCode((currentIndex % 26) + 65) + columnName;
|
@@ -4206,7 +4236,7 @@ var MarkdownTableError = /** @class */ (function (_super) {
|
|
4206
4236
|
__extends(MarkdownTableError, _super);
|
4207
4237
|
function MarkdownTableError(message) {
|
4208
4238
|
var _this = _super.call(this, message) || this;
|
4209
|
-
_this.name =
|
4239
|
+
_this.name = "MarkdownTableError";
|
4210
4240
|
Object.setPrototypeOf(_this, MarkdownTableError.prototype);
|
4211
4241
|
return _this;
|
4212
4242
|
}
|
@@ -4232,7 +4262,10 @@ var DARK_THEME_CSS = "\ncode[class*=language-],pre[class*=language-]{color:#f8f8
|
|
4232
4262
|
var getTableData = function (inputData, hasHeader) {
|
4233
4263
|
return hasHeader
|
4234
4264
|
? { inputDataHeader: inputData[0], inputDataBody: inputData.slice(1) }
|
4235
|
-
: {
|
4265
|
+
: {
|
4266
|
+
inputDataHeader: generateAlphabetHeaders(inputData[0].length).map(function (header) { return ({ content: header }); }),
|
4267
|
+
inputDataBody: inputData,
|
4268
|
+
};
|
4236
4269
|
};
|
4237
4270
|
var generateTableSyntax = function (inputData, hasHeader, columnAlignments, adjustColumnWidths, hasTabs, canReplaceNewlines, hasPadding) {
|
4238
4271
|
try {
|
@@ -4250,7 +4283,7 @@ var generateTableSyntax = function (inputData, hasHeader, columnAlignments, adju
|
|
4250
4283
|
var applySyntaxHighlighting = function (preElementRef, markdownTableSyntax) {
|
4251
4284
|
useEffect(function () {
|
4252
4285
|
var _a;
|
4253
|
-
var codeElement = (_a = preElementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(
|
4286
|
+
var codeElement = (_a = preElementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector("code");
|
4254
4287
|
if (codeElement && markdownTableSyntax) {
|
4255
4288
|
requestAnimationFrame(function () {
|
4256
4289
|
Prism$1.highlightElement(codeElement);
|
@@ -4259,10 +4292,12 @@ var applySyntaxHighlighting = function (preElementRef, markdownTableSyntax) {
|
|
4259
4292
|
}, [markdownTableSyntax]);
|
4260
4293
|
};
|
4261
4294
|
var MarkdownTable = function (_a) {
|
4262
|
-
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.convertLineBreaks, convertLineBreaks = _h === void 0 ? false : _h, className = _a.className, onGenerate = _a.onGenerate, _j = _a.theme, theme = _j === void 0 ?
|
4295
|
+
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.convertLineBreaks, convertLineBreaks = _h === void 0 ? false : _h, className = _a.className, onGenerate = _a.onGenerate, _j = _a.theme, theme = _j === void 0 ? "light" : _j, preStyle = _a.preStyle, _k = _a.topPadding, topPadding = _k === void 0 ? 16 : _k, minWidth = _a.minWidth;
|
4263
4296
|
var adjustColumnWidths = !isCompact;
|
4264
4297
|
var preElementRef = useRef(null);
|
4265
|
-
var markdownTableSyntax = useMemo(function () {
|
4298
|
+
var markdownTableSyntax = useMemo(function () {
|
4299
|
+
return generateTableSyntax(inputData, hasHeader, columnAlignments, adjustColumnWidths, hasTabs, convertLineBreaks, hasPadding);
|
4300
|
+
}, [
|
4266
4301
|
inputData,
|
4267
4302
|
hasHeader,
|
4268
4303
|
columnAlignments,
|
@@ -4277,11 +4312,11 @@ var MarkdownTable = function (_a) {
|
|
4277
4312
|
}
|
4278
4313
|
}, [markdownTableSyntax, onGenerate]);
|
4279
4314
|
applySyntaxHighlighting(preElementRef, markdownTableSyntax);
|
4280
|
-
return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs("style", { children: [theme ===
|
4281
|
-
position:
|
4282
|
-
isolation:
|
4283
|
-
display:
|
4284
|
-
}, children: jsxRuntimeExports.jsx("pre", { ref: preElementRef, className: "".concat(className, " language-markdown line-numbers ").concat(theme ===
|
4315
|
+
return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs("style", { children: [theme === "light" ? LIGHT_THEME_CSS : DARK_THEME_CSS, "\n pre {\n position: relative;\n padding-top: ".concat(topPadding, "px !important;\n }\n pre::before {\n position: absolute;\n top: 8px;\n left: 12px;\n color: ").concat(theme === "light" ? "#666" : "#999", ";\n letter-spacing: 2px;\n font-size: 12px;\n }\n ")] }), jsxRuntimeExports.jsx("div", { id: "MarkdownTable", style: {
|
4316
|
+
position: "relative",
|
4317
|
+
isolation: "isolate",
|
4318
|
+
display: "inline-block",
|
4319
|
+
}, children: jsxRuntimeExports.jsx("pre", { ref: preElementRef, className: "".concat(className, " language-markdown line-numbers ").concat(theme === "dark" ? "dark-theme" : ""), style: __assign({ width: "fit-content", minWidth: minWidth ? "".concat(minWidth, "px") : "min-content", margin: 0 }, preStyle), children: jsxRuntimeExports.jsx("code", { className: "language-markdown", role: "code", children: markdownTableSyntax }) }) })] }));
|
4285
4320
|
};
|
4286
4321
|
|
4287
4322
|
export { MarkdownTable };
|