@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.
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +93 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +93 -9
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.js +93 -9
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +93 -9
- package/dist/react/index.mjs.map +1 -1
- package/dist/standalone.browser.js +116 -21
- package/dist/standalone.js +93 -9
- package/dist/standalone.js.map +1 -1
- package/dist/standalone.mjs +93 -9
- package/dist/standalone.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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)}"
|
|
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)}"
|
|
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
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
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
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
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
|
];
|
package/dist/standalone.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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)}"
|
|
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)}"
|
|
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
|
];
|