@changerawr/markdown 1.1.6 → 1.1.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.
@@ -1062,7 +1062,7 @@ var ChangerawrMarkdown = (() => {
1062
1062
  });
1063
1063
 
1064
1064
  // src/parser.ts
1065
- var MarkdownParser = class {
1065
+ var MarkdownParser = class _MarkdownParser {
1066
1066
  // Cache compiled regexes
1067
1067
  constructor(config) {
1068
1068
  this.rules = [];
@@ -1274,7 +1274,18 @@ var ChangerawrMarkdown = (() => {
1274
1274
  recursivelyParseBlockContent(token) {
1275
1275
  const blockTypes = ["alert", "blockquote", "list-item", "task-item"];
1276
1276
  if (blockTypes.includes(token.type) && token.content && token.content.trim()) {
1277
- const children = this.parse(token.content);
1277
+ let children;
1278
+ if ((token.type === "list-item" || token.type === "task-item") && this.rules.some((r) => r.name === "list-item")) {
1279
+ const parserWithoutListRule = new _MarkdownParser(this.config);
1280
+ this.rules.forEach((rule) => {
1281
+ if (rule.name !== "list-item" && rule.name !== "task-item") {
1282
+ parserWithoutListRule.addRule(rule);
1283
+ }
1284
+ });
1285
+ children = parserWithoutListRule.parse(token.content);
1286
+ } else {
1287
+ children = this.parse(token.content);
1288
+ }
1278
1289
  return __spreadProps(__spreadValues({}, token), {
1279
1290
  children
1280
1291
  });
@@ -2054,7 +2065,8 @@ var ChangerawrMarkdown = (() => {
2054
2065
  attributes: {
2055
2066
  alt: match[1] || "",
2056
2067
  src: match[2] || "",
2057
- title: match[3] || ""
2068
+ caption: match[3] || ""
2069
+ // Renamed from 'title' to 'caption' for clarity
2058
2070
  }
2059
2071
  })
2060
2072
  }
@@ -2066,13 +2078,24 @@ var ChangerawrMarkdown = (() => {
2066
2078
  var _a, _b, _c, _d;
2067
2079
  const src = ((_a = token.attributes) == null ? void 0 : _a.src) || "";
2068
2080
  const alt = ((_b = token.attributes) == null ? void 0 : _b.alt) || "";
2069
- const title = ((_c = token.attributes) == null ? void 0 : _c.title) || "";
2070
- const titleAttr = title ? ` title="${escapeHtml(title)}"` : "";
2081
+ const caption = ((_c = token.attributes) == null ? void 0 : _c.caption) || "";
2071
2082
  const format = ((_d = token.attributes) == null ? void 0 : _d.format) || "html";
2083
+ if (caption) {
2084
+ if (format === "html") {
2085
+ return `<figure style="margin: 16px 0; text-align: center;">
2086
+ <img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" style="max-width: 100%; height: auto; border-radius: 8px;" loading="lazy" />
2087
+ <figcaption style="margin-top: 8px; font-size: 14px; color: #6b7280; font-style: italic;">${escapeHtml(caption)}</figcaption>
2088
+ </figure>`;
2089
+ }
2090
+ return `<figure class="my-4 text-center">
2091
+ <img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" class="max-w-full h-auto rounded-lg" loading="lazy" />
2092
+ <figcaption class="mt-2 text-sm text-gray-500 italic">${escapeHtml(caption)}</figcaption>
2093
+ </figure>`;
2094
+ }
2072
2095
  if (format === "html") {
2073
- return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}"${titleAttr} style="max-width: 100%; height: auto; border-radius: 8px; margin: 16px 0;" loading="lazy" />`;
2096
+ return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" style="max-width: 100%; height: auto; border-radius: 8px; margin: 16px 0;" loading="lazy" />`;
2074
2097
  }
2075
- return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}"${titleAttr} class="max-w-full h-auto rounded-lg my-4" loading="lazy" />`;
2098
+ return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" class="max-w-full h-auto rounded-lg my-4" loading="lazy" />`;
2076
2099
  }
2077
2100
  }
2078
2101
  ]
@@ -2125,13 +2148,38 @@ var ChangerawrMarkdown = (() => {
2125
2148
  name: "list",
2126
2149
  parseRules: [
2127
2150
  {
2128
- name: "list-item",
2151
+ name: "unordered-list-item",
2129
2152
  pattern: /^(\s*)[-*+]\s+(.+)$/m,
2130
- render: (match) => ({
2131
- type: "list-item",
2132
- content: match[2] || "",
2133
- raw: match[0] || ""
2134
- })
2153
+ render: (match) => {
2154
+ var _a, _b;
2155
+ return {
2156
+ type: "list-item",
2157
+ content: match[2] || "",
2158
+ raw: match[0] || "",
2159
+ attributes: {
2160
+ indent: ((_a = match[1]) == null ? void 0 : _a.length) || 0,
2161
+ ordered: false,
2162
+ marker: match[1] ? (_b = match[0].match(/[-*+]/)) == null ? void 0 : _b[0] : "-"
2163
+ }
2164
+ };
2165
+ }
2166
+ },
2167
+ {
2168
+ name: "ordered-list-item",
2169
+ pattern: /^(\s*)(\d+)\.\s+(.+)$/m,
2170
+ render: (match) => {
2171
+ var _a;
2172
+ return {
2173
+ type: "ordered-list-item",
2174
+ content: match[3] || "",
2175
+ raw: match[0] || "",
2176
+ attributes: {
2177
+ indent: ((_a = match[1]) == null ? void 0 : _a.length) || 0,
2178
+ ordered: true,
2179
+ number: parseInt(match[2] || "1")
2180
+ }
2181
+ };
2182
+ }
2135
2183
  }
2136
2184
  ],
2137
2185
  renderRules: [
@@ -2146,6 +2194,18 @@ var ChangerawrMarkdown = (() => {
2146
2194
  }
2147
2195
  return `<li>${content}</li>`;
2148
2196
  }
2197
+ },
2198
+ {
2199
+ type: "ordered-list-item",
2200
+ render: (token) => {
2201
+ var _a, _b;
2202
+ const format = ((_a = token.attributes) == null ? void 0 : _a.format) || "tailwind";
2203
+ const content = ((_b = token.attributes) == null ? void 0 : _b.renderedChildren) || escapeHtml(token.content);
2204
+ if (format === "html") {
2205
+ return `<li>${content}</li>`;
2206
+ }
2207
+ return `<li>${content}</li>`;
2208
+ }
2149
2209
  }
2150
2210
  ]
2151
2211
  };
@@ -2155,14 +2215,18 @@ var ChangerawrMarkdown = (() => {
2155
2215
  {
2156
2216
  name: "task-item",
2157
2217
  pattern: /^(\s*)-\s*\[([ xX])\]\s*(.+)$/m,
2158
- render: (match) => ({
2159
- type: "task-item",
2160
- content: match[3] || "",
2161
- raw: match[0] || "",
2162
- attributes: {
2163
- checked: String((match[2] || "").toLowerCase() === "x")
2164
- }
2165
- })
2218
+ render: (match) => {
2219
+ var _a;
2220
+ return {
2221
+ type: "task-item",
2222
+ content: match[3] || "",
2223
+ raw: match[0] || "",
2224
+ attributes: {
2225
+ indent: ((_a = match[1]) == null ? void 0 : _a.length) || 0,
2226
+ checked: String((match[2] || "").toLowerCase() === "x")
2227
+ }
2228
+ };
2229
+ }
2166
2230
  }
2167
2231
  ],
2168
2232
  renderRules: [
@@ -2227,6 +2291,36 @@ var ChangerawrMarkdown = (() => {
2227
2291
  ]
2228
2292
  };
2229
2293
 
2294
+ // src/extensions/core/strikethrough.ts
2295
+ var StrikethroughExtension = {
2296
+ name: "strikethrough",
2297
+ parseRules: [
2298
+ {
2299
+ name: "strikethrough",
2300
+ pattern: /~~((?:(?!~~).)+)~~/,
2301
+ render: (match) => ({
2302
+ type: "strikethrough",
2303
+ content: match[1] || "",
2304
+ raw: match[0] || ""
2305
+ })
2306
+ }
2307
+ ],
2308
+ renderRules: [
2309
+ {
2310
+ type: "strikethrough",
2311
+ render: (token) => {
2312
+ var _a;
2313
+ const content = escapeHtml(token.content);
2314
+ const format = (_a = token.attributes) == null ? void 0 : _a.format;
2315
+ if (format === "html") {
2316
+ return `<del style="text-decoration: line-through; color: #6b7280;">${content}</del>`;
2317
+ }
2318
+ return `<del class="line-through text-gray-500">${content}</del>`;
2319
+ }
2320
+ }
2321
+ ]
2322
+ };
2323
+
2230
2324
  // src/extensions/core/index.ts
2231
2325
  var CoreExtensions = [
2232
2326
  TextExtension,
@@ -2241,6 +2335,7 @@ var ChangerawrMarkdown = (() => {
2241
2335
  TaskListExtension,
2242
2336
  BlockquoteExtension,
2243
2337
  HorizontalRuleExtension,
2338
+ StrikethroughExtension,
2244
2339
  ParagraphExtension,
2245
2340
  LineBreakExtension
2246
2341
  ];
@@ -42,7 +42,7 @@ __export(standalone_exports, {
42
42
  module.exports = __toCommonJS(standalone_exports);
43
43
 
44
44
  // src/parser.ts
45
- var MarkdownParser = class {
45
+ var MarkdownParser = class _MarkdownParser {
46
46
  // Cache compiled regexes
47
47
  constructor(config) {
48
48
  this.rules = [];
@@ -255,7 +255,18 @@ var MarkdownParser = class {
255
255
  recursivelyParseBlockContent(token) {
256
256
  const blockTypes = ["alert", "blockquote", "list-item", "task-item"];
257
257
  if (blockTypes.includes(token.type) && token.content && token.content.trim()) {
258
- const children = this.parse(token.content);
258
+ let children;
259
+ if ((token.type === "list-item" || token.type === "task-item") && this.rules.some((r) => r.name === "list-item")) {
260
+ const parserWithoutListRule = new _MarkdownParser(this.config);
261
+ this.rules.forEach((rule) => {
262
+ if (rule.name !== "list-item" && rule.name !== "task-item") {
263
+ parserWithoutListRule.addRule(rule);
264
+ }
265
+ });
266
+ children = parserWithoutListRule.parse(token.content);
267
+ } else {
268
+ children = this.parse(token.content);
269
+ }
259
270
  return {
260
271
  ...token,
261
272
  children
@@ -1031,7 +1042,8 @@ var ImageExtension = {
1031
1042
  attributes: {
1032
1043
  alt: match[1] || "",
1033
1044
  src: match[2] || "",
1034
- title: match[3] || ""
1045
+ caption: match[3] || ""
1046
+ // Renamed from 'title' to 'caption' for clarity
1035
1047
  }
1036
1048
  })
1037
1049
  }
@@ -1042,13 +1054,24 @@ var ImageExtension = {
1042
1054
  render: (token) => {
1043
1055
  const src = token.attributes?.src || "";
1044
1056
  const alt = token.attributes?.alt || "";
1045
- const title = token.attributes?.title || "";
1046
- const titleAttr = title ? ` title="${escapeHtml(title)}"` : "";
1057
+ const caption = token.attributes?.caption || "";
1047
1058
  const format = token.attributes?.format || "html";
1059
+ if (caption) {
1060
+ if (format === "html") {
1061
+ return `<figure style="margin: 16px 0; text-align: center;">
1062
+ <img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" style="max-width: 100%; height: auto; border-radius: 8px;" loading="lazy" />
1063
+ <figcaption style="margin-top: 8px; font-size: 14px; color: #6b7280; font-style: italic;">${escapeHtml(caption)}</figcaption>
1064
+ </figure>`;
1065
+ }
1066
+ return `<figure class="my-4 text-center">
1067
+ <img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" class="max-w-full h-auto rounded-lg" loading="lazy" />
1068
+ <figcaption class="mt-2 text-sm text-gray-500 italic">${escapeHtml(caption)}</figcaption>
1069
+ </figure>`;
1070
+ }
1048
1071
  if (format === "html") {
1049
- return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}"${titleAttr} style="max-width: 100%; height: auto; border-radius: 8px; margin: 16px 0;" loading="lazy" />`;
1072
+ return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" style="max-width: 100%; height: auto; border-radius: 8px; margin: 16px 0;" loading="lazy" />`;
1050
1073
  }
1051
- return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}"${titleAttr} class="max-w-full h-auto rounded-lg my-4" loading="lazy" />`;
1074
+ return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" class="max-w-full h-auto rounded-lg my-4" loading="lazy" />`;
1052
1075
  }
1053
1076
  }
1054
1077
  ]
@@ -1100,12 +1123,31 @@ var ListExtension = {
1100
1123
  name: "list",
1101
1124
  parseRules: [
1102
1125
  {
1103
- name: "list-item",
1126
+ name: "unordered-list-item",
1104
1127
  pattern: /^(\s*)[-*+]\s+(.+)$/m,
1105
1128
  render: (match) => ({
1106
1129
  type: "list-item",
1107
1130
  content: match[2] || "",
1108
- raw: match[0] || ""
1131
+ raw: match[0] || "",
1132
+ attributes: {
1133
+ indent: match[1]?.length || 0,
1134
+ ordered: false,
1135
+ marker: match[1] ? match[0].match(/[-*+]/)?.[0] : "-"
1136
+ }
1137
+ })
1138
+ },
1139
+ {
1140
+ name: "ordered-list-item",
1141
+ pattern: /^(\s*)(\d+)\.\s+(.+)$/m,
1142
+ render: (match) => ({
1143
+ type: "ordered-list-item",
1144
+ content: match[3] || "",
1145
+ raw: match[0] || "",
1146
+ attributes: {
1147
+ indent: match[1]?.length || 0,
1148
+ ordered: true,
1149
+ number: parseInt(match[2] || "1")
1150
+ }
1109
1151
  })
1110
1152
  }
1111
1153
  ],
@@ -1120,6 +1162,17 @@ var ListExtension = {
1120
1162
  }
1121
1163
  return `<li>${content}</li>`;
1122
1164
  }
1165
+ },
1166
+ {
1167
+ type: "ordered-list-item",
1168
+ render: (token) => {
1169
+ const format = token.attributes?.format || "tailwind";
1170
+ const content = token.attributes?.renderedChildren || escapeHtml(token.content);
1171
+ if (format === "html") {
1172
+ return `<li>${content}</li>`;
1173
+ }
1174
+ return `<li>${content}</li>`;
1175
+ }
1123
1176
  }
1124
1177
  ]
1125
1178
  };
@@ -1134,6 +1187,7 @@ var TaskListExtension = {
1134
1187
  content: match[3] || "",
1135
1188
  raw: match[0] || "",
1136
1189
  attributes: {
1190
+ indent: match[1]?.length || 0,
1137
1191
  checked: String((match[2] || "").toLowerCase() === "x")
1138
1192
  }
1139
1193
  })
@@ -1199,6 +1253,35 @@ var TextExtension = {
1199
1253
  ]
1200
1254
  };
1201
1255
 
1256
+ // src/extensions/core/strikethrough.ts
1257
+ var StrikethroughExtension = {
1258
+ name: "strikethrough",
1259
+ parseRules: [
1260
+ {
1261
+ name: "strikethrough",
1262
+ pattern: /~~((?:(?!~~).)+)~~/,
1263
+ render: (match) => ({
1264
+ type: "strikethrough",
1265
+ content: match[1] || "",
1266
+ raw: match[0] || ""
1267
+ })
1268
+ }
1269
+ ],
1270
+ renderRules: [
1271
+ {
1272
+ type: "strikethrough",
1273
+ render: (token) => {
1274
+ const content = escapeHtml(token.content);
1275
+ const format = token.attributes?.format;
1276
+ if (format === "html") {
1277
+ return `<del style="text-decoration: line-through; color: #6b7280;">${content}</del>`;
1278
+ }
1279
+ return `<del class="line-through text-gray-500">${content}</del>`;
1280
+ }
1281
+ }
1282
+ ]
1283
+ };
1284
+
1202
1285
  // src/extensions/core/index.ts
1203
1286
  var CoreExtensions = [
1204
1287
  TextExtension,
@@ -1213,6 +1296,7 @@ var CoreExtensions = [
1213
1296
  TaskListExtension,
1214
1297
  BlockquoteExtension,
1215
1298
  HorizontalRuleExtension,
1299
+ StrikethroughExtension,
1216
1300
  ParagraphExtension,
1217
1301
  LineBreakExtension
1218
1302
  ];