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.
Files changed (44) hide show
  1. package/dist/cellFormatter.d.ts +9 -0
  2. package/dist/index.cjs.js +100 -65
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.d.ts +3 -3
  5. package/dist/index.esm.js +100 -65
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/types.d.ts +18 -7
  8. package/dist/utils.d.ts +7 -5
  9. package/dist/validation.d.ts +1 -1
  10. package/package.json +1 -1
  11. package/dist/MarkdownTable.stories.d.ts +0 -156
  12. package/dist/jest.setup.d.ts +0 -2
  13. package/dist/jest.setup.js +0 -3
  14. package/dist/jest.setup.js.map +0 -1
  15. package/dist/src/MarkdownTable.stories.d.ts +0 -156
  16. package/dist/src/MarkdownTable.stories.js +0 -172
  17. package/dist/src/MarkdownTable.stories.js.map +0 -1
  18. package/dist/src/index.d.ts +0 -5
  19. package/dist/src/index.js +0 -78
  20. package/dist/src/index.js.map +0 -1
  21. package/dist/src/types.d.ts +0 -123
  22. package/dist/src/types.js +0 -3
  23. package/dist/src/types.js.map +0 -1
  24. package/dist/src/utils.d.ts +0 -8
  25. package/dist/src/utils.js +0 -176
  26. package/dist/src/utils.js.map +0 -1
  27. package/dist/src/validation.d.ts +0 -19
  28. package/dist/src/validation.js +0 -106
  29. package/dist/src/validation.js.map +0 -1
  30. package/dist/stories/Button.d.ts +0 -15
  31. package/dist/stories/Button.stories.d.ts +0 -23
  32. package/dist/stories/Header.d.ts +0 -12
  33. package/dist/stories/Header.stories.d.ts +0 -18
  34. package/dist/stories/Page.d.ts +0 -3
  35. package/dist/stories/Page.stories.d.ts +0 -13
  36. package/dist/test/MarkdownTable.test.d.ts +0 -1
  37. package/dist/test/MarkdownTable.test.js +0 -91
  38. package/dist/test/MarkdownTable.test.js.map +0 -1
  39. package/dist/test/utils.test.d.ts +0 -1
  40. package/dist/test/utils.test.js +0 -234
  41. package/dist/test/utils.test.js.map +0 -1
  42. package/dist/test/validation.test.d.ts +0 -1
  43. package/dist/test/validation.test.js +0 -86
  44. 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 'prismjs/components/prism-markdown';
3
- import 'prismjs/plugins/line-numbers/prism-line-numbers';
4
- import { MarkdownTableProps } from './types';
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 ? '\t' : (this.config.hasPadding ? ' ' : '');
4070
+ this.padding = this.config.useTabs
4071
+ ? "\t"
4072
+ : this.config.hasPadding
4073
+ ? " "
4074
+ : "";
4067
4075
  }
4068
- CellFormatter.prototype.formatCell = function (content, alignment, width) {
4069
- var totalWidth = width;
4070
- switch (alignment) {
4071
- case 'right':
4072
- return "".concat(this.padding).concat(content.padStart(totalWidth)).concat(this.padding);
4073
- case 'center': {
4074
- var totalPadding = totalWidth - content.length;
4075
- var paddingLeft = Math.floor(totalPadding / 2);
4076
- var paddingRight = totalPadding - paddingLeft;
4077
- return "".concat(this.padding).concat(' '.repeat(paddingLeft)).concat(content).concat(' '.repeat(paddingRight)).concat(this.padding);
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
- default: // left or none
4080
- return "".concat(this.padding).concat(content.padEnd(totalWidth)).concat(this.padding);
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('-'.repeat(width - 1)); },
4093
- right: function (width) { return "".concat('-'.repeat(width - 1), ":"); },
4094
- center: function (width) { return ":".concat('-'.repeat(width - 2), ":"); },
4095
- none: function (width) { return '-'.repeat(width); },
4096
- justify: function (width) { return '-'.repeat(width); }
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 = 'none';
4139
+ var defaultAlignment = "none";
4108
4140
  var sanitizeAlignment = function (alignment) {
4109
- return alignment === 'justify' ? 'none' : 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
- if (_this.config.replaceNewlines) {
4120
- cell = replaceNewlinesInCell(cell);
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 ? '\t' : (this.config.hasPadding ? ' ' : '');
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 ? _this.config.columnWidths[i] : 3;
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 = (_a = row[i]) !== null && _a !== void 0 ? _a : '';
4147
- widths[i] = Math.max(widths[i], cell.length);
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 = calculateMaxColumnCount(inputData);
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: 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('\n');
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 = 'MarkdownTableError';
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
- : { inputDataHeader: generateAlphabetHeaders(inputData[0].length), inputDataBody: inputData };
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('code');
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 ? 'light' : _j, preStyle = _a.preStyle, _k = _a.topPadding, topPadding = _k === void 0 ? 16 : _k, minWidth = _a.minWidth;
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 () { return generateTableSyntax(inputData, hasHeader, columnAlignments, adjustColumnWidths, hasTabs, convertLineBreaks, hasPadding); }, [
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 === '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: {
4281
- position: 'relative',
4282
- isolation: 'isolate',
4283
- display: 'inline-block'
4284
- }, 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 }) }) })] }));
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 };