@mieweb/ui 0.6.1-dev.133 → 0.6.1-dev.134
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/CsvBlock-7K6XVRYO.cjs +15 -0
- package/dist/CsvBlock-7K6XVRYO.cjs.map +1 -0
- package/dist/CsvBlock-AAV4QMSF.js +6 -0
- package/dist/CsvBlock-AAV4QMSF.js.map +1 -0
- package/dist/HtmlPreviewBlock-74XQF3KT.cjs +15 -0
- package/dist/HtmlPreviewBlock-74XQF3KT.cjs.map +1 -0
- package/dist/HtmlPreviewBlock-DNINC7RW.js +6 -0
- package/dist/HtmlPreviewBlock-DNINC7RW.js.map +1 -0
- package/dist/MermaidBlock-PKXGFGU6.js +6 -0
- package/dist/MermaidBlock-PKXGFGU6.js.map +1 -0
- package/dist/MermaidBlock-R4U7IHSZ.cjs +15 -0
- package/dist/MermaidBlock-R4U7IHSZ.cjs.map +1 -0
- package/dist/SurveyBlock-E52I4PW3.cjs +15 -0
- package/dist/SurveyBlock-E52I4PW3.cjs.map +1 -0
- package/dist/SurveyBlock-IULSBG22.js +6 -0
- package/dist/SurveyBlock-IULSBG22.js.map +1 -0
- package/dist/brands/index.cjs +12 -12
- package/dist/brands/index.js +3 -3
- package/dist/{chunk-Q577IUE5.js → chunk-33PO3J4O.js} +4 -2
- package/dist/chunk-33PO3J4O.js.map +1 -0
- package/dist/chunk-6RV7HQ4U.cjs +198 -0
- package/dist/chunk-6RV7HQ4U.cjs.map +1 -0
- package/dist/chunk-74NOFB34.cjs +137 -0
- package/dist/chunk-74NOFB34.cjs.map +1 -0
- package/dist/chunk-CPJIOOBM.js +196 -0
- package/dist/chunk-CPJIOOBM.js.map +1 -0
- package/dist/{chunk-R6PBBPU3.js → chunk-CYMZ2QS5.js} +2 -2
- package/dist/{chunk-R6PBBPU3.js.map → chunk-CYMZ2QS5.js.map} +1 -1
- package/dist/chunk-FGIIXD37.js +182 -0
- package/dist/chunk-FGIIXD37.js.map +1 -0
- package/dist/chunk-FZQAF3WA.cjs +154 -0
- package/dist/chunk-FZQAF3WA.cjs.map +1 -0
- package/dist/chunk-MHJMUKLA.js +89 -0
- package/dist/chunk-MHJMUKLA.js.map +1 -0
- package/dist/chunk-NCRYCG5G.js +135 -0
- package/dist/chunk-NCRYCG5G.js.map +1 -0
- package/dist/chunk-NSLR3B7K.js +318 -0
- package/dist/chunk-NSLR3B7K.js.map +1 -0
- package/dist/{chunk-Z6NRP4Z5.cjs → chunk-SNEQXSC5.cjs} +2 -2
- package/dist/{chunk-Z6NRP4Z5.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
- package/dist/chunk-UL3PQ7HL.cjs +91 -0
- package/dist/chunk-UL3PQ7HL.cjs.map +1 -0
- package/dist/chunk-VO3NWSCQ.cjs +184 -0
- package/dist/chunk-VO3NWSCQ.cjs.map +1 -0
- package/dist/chunk-WGC3KOP7.js +148 -0
- package/dist/chunk-WGC3KOP7.js.map +1 -0
- package/dist/{chunk-3CFB4TVQ.cjs → chunk-WHUD3XHR.cjs} +4 -2
- package/dist/chunk-WHUD3XHR.cjs.map +1 -0
- package/dist/chunk-Y65SK5Y2.cjs +338 -0
- package/dist/chunk-Y65SK5Y2.cjs.map +1 -0
- package/dist/components/Markdown/index.cjs +51 -0
- package/dist/components/Markdown/index.cjs.map +1 -0
- package/dist/components/Markdown/index.css +331 -0
- package/dist/components/Markdown/index.css.map +1 -0
- package/dist/components/Markdown/index.d.cts +82 -0
- package/dist/components/Markdown/index.d.ts +82 -0
- package/dist/components/Markdown/index.js +10 -0
- package/dist/components/Markdown/index.js.map +1 -0
- package/dist/components/Markdown/styles.css +351 -0
- package/dist/index.cjs +86 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +331 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +14 -8
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/package.json +23 -2
- package/dist/chunk-3CFB4TVQ.cjs.map +0 -1
- package/dist/chunk-Q577IUE5.js.map +0 -1
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkUL3PQ7HL_cjs = require('./chunk-UL3PQ7HL.cjs');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var DOMPurify = require('dompurify');
|
|
6
|
+
var hljs = require('highlight.js/lib/core');
|
|
7
|
+
var bash = require('highlight.js/lib/languages/bash');
|
|
8
|
+
var css = require('highlight.js/lib/languages/css');
|
|
9
|
+
var javascript = require('highlight.js/lib/languages/javascript');
|
|
10
|
+
var json = require('highlight.js/lib/languages/json');
|
|
11
|
+
var markdown = require('highlight.js/lib/languages/markdown');
|
|
12
|
+
var python = require('highlight.js/lib/languages/python');
|
|
13
|
+
var sql = require('highlight.js/lib/languages/sql');
|
|
14
|
+
var typescript = require('highlight.js/lib/languages/typescript');
|
|
15
|
+
var xml = require('highlight.js/lib/languages/xml');
|
|
16
|
+
var yaml = require('highlight.js/lib/languages/yaml');
|
|
17
|
+
var marked = require('marked');
|
|
18
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
19
|
+
|
|
20
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
|
+
|
|
22
|
+
var DOMPurify__default = /*#__PURE__*/_interopDefault(DOMPurify);
|
|
23
|
+
var hljs__default = /*#__PURE__*/_interopDefault(hljs);
|
|
24
|
+
var bash__default = /*#__PURE__*/_interopDefault(bash);
|
|
25
|
+
var css__default = /*#__PURE__*/_interopDefault(css);
|
|
26
|
+
var javascript__default = /*#__PURE__*/_interopDefault(javascript);
|
|
27
|
+
var json__default = /*#__PURE__*/_interopDefault(json);
|
|
28
|
+
var markdown__default = /*#__PURE__*/_interopDefault(markdown);
|
|
29
|
+
var python__default = /*#__PURE__*/_interopDefault(python);
|
|
30
|
+
var sql__default = /*#__PURE__*/_interopDefault(sql);
|
|
31
|
+
var typescript__default = /*#__PURE__*/_interopDefault(typescript);
|
|
32
|
+
var xml__default = /*#__PURE__*/_interopDefault(xml);
|
|
33
|
+
var yaml__default = /*#__PURE__*/_interopDefault(yaml);
|
|
34
|
+
|
|
35
|
+
function escapeHtml(str) {
|
|
36
|
+
return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
37
|
+
}
|
|
38
|
+
hljs__default.default.registerLanguage("javascript", javascript__default.default);
|
|
39
|
+
hljs__default.default.registerLanguage("typescript", typescript__default.default);
|
|
40
|
+
hljs__default.default.registerLanguage("python", python__default.default);
|
|
41
|
+
hljs__default.default.registerLanguage("json", json__default.default);
|
|
42
|
+
hljs__default.default.registerLanguage("xml", xml__default.default);
|
|
43
|
+
hljs__default.default.registerLanguage("html", xml__default.default);
|
|
44
|
+
hljs__default.default.registerLanguage("css", css__default.default);
|
|
45
|
+
hljs__default.default.registerLanguage("bash", bash__default.default);
|
|
46
|
+
hljs__default.default.registerLanguage("shell", bash__default.default);
|
|
47
|
+
hljs__default.default.registerLanguage("sql", sql__default.default);
|
|
48
|
+
hljs__default.default.registerLanguage("yaml", yaml__default.default);
|
|
49
|
+
hljs__default.default.registerLanguage("yml", yaml__default.default);
|
|
50
|
+
hljs__default.default.registerLanguage("markdown", markdown__default.default);
|
|
51
|
+
hljs__default.default.registerLanguage("md", markdown__default.default);
|
|
52
|
+
var lazyLanguages = {
|
|
53
|
+
java: () => import('highlight.js/lib/languages/java'),
|
|
54
|
+
cpp: () => import('highlight.js/lib/languages/cpp'),
|
|
55
|
+
"c++": () => import('highlight.js/lib/languages/cpp'),
|
|
56
|
+
c: () => import('highlight.js/lib/languages/c'),
|
|
57
|
+
csharp: () => import('highlight.js/lib/languages/csharp'),
|
|
58
|
+
php: () => import('highlight.js/lib/languages/php'),
|
|
59
|
+
ruby: () => import('highlight.js/lib/languages/ruby'),
|
|
60
|
+
go: () => import('highlight.js/lib/languages/go'),
|
|
61
|
+
rust: () => import('highlight.js/lib/languages/rust'),
|
|
62
|
+
perl: () => import('highlight.js/lib/languages/perl'),
|
|
63
|
+
r: () => import('highlight.js/lib/languages/r'),
|
|
64
|
+
makefile: () => import('highlight.js/lib/languages/makefile'),
|
|
65
|
+
dockerfile: () => import('highlight.js/lib/languages/dockerfile')
|
|
66
|
+
};
|
|
67
|
+
var loadedLanguages = /* @__PURE__ */ new Set([
|
|
68
|
+
"javascript",
|
|
69
|
+
"typescript",
|
|
70
|
+
"python",
|
|
71
|
+
"json",
|
|
72
|
+
"xml",
|
|
73
|
+
"html",
|
|
74
|
+
"css",
|
|
75
|
+
"bash",
|
|
76
|
+
"shell",
|
|
77
|
+
"sql",
|
|
78
|
+
"yaml",
|
|
79
|
+
"yml",
|
|
80
|
+
"markdown",
|
|
81
|
+
"md"
|
|
82
|
+
]);
|
|
83
|
+
async function ensureLanguage(lang) {
|
|
84
|
+
const key = lang.toLowerCase();
|
|
85
|
+
if (loadedLanguages.has(key)) return true;
|
|
86
|
+
const loader = lazyLanguages[key];
|
|
87
|
+
if (!loader) return false;
|
|
88
|
+
try {
|
|
89
|
+
const mod = await loader();
|
|
90
|
+
hljs__default.default.registerLanguage(
|
|
91
|
+
key,
|
|
92
|
+
mod.default
|
|
93
|
+
);
|
|
94
|
+
loadedLanguages.add(key);
|
|
95
|
+
return true;
|
|
96
|
+
} catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function highlightCode(code, lang) {
|
|
101
|
+
if (lang && loadedLanguages.has(lang.toLowerCase())) {
|
|
102
|
+
try {
|
|
103
|
+
return hljs__default.default.highlight(code, { language: lang.toLowerCase() }).value;
|
|
104
|
+
} catch {
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
const result = hljs__default.default.highlightAuto(code);
|
|
109
|
+
if (result.relevance > 5) return result.value;
|
|
110
|
+
} catch {
|
|
111
|
+
}
|
|
112
|
+
return escapeHtml(code);
|
|
113
|
+
}
|
|
114
|
+
function sanitise(html) {
|
|
115
|
+
return DOMPurify__default.default.sanitize(html, {
|
|
116
|
+
ADD_ATTR: [
|
|
117
|
+
"target",
|
|
118
|
+
"rel",
|
|
119
|
+
"data-block-type",
|
|
120
|
+
"data-block-id",
|
|
121
|
+
"data-code",
|
|
122
|
+
"data-lang",
|
|
123
|
+
"data-md-fence"
|
|
124
|
+
]
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
var _g = globalThis;
|
|
128
|
+
if (typeof document !== "undefined" && !_g.__markdownAnchorHookInstalled) {
|
|
129
|
+
_g.__markdownAnchorHookInstalled = true;
|
|
130
|
+
DOMPurify__default.default.addHook("afterSanitizeAttributes", (node) => {
|
|
131
|
+
const isAnchor = typeof HTMLAnchorElement !== "undefined" && node instanceof HTMLAnchorElement || node.nodeName === "A";
|
|
132
|
+
if (isAnchor) {
|
|
133
|
+
node.setAttribute("target", "_blank");
|
|
134
|
+
node.setAttribute("rel", "noopener noreferrer");
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
var blockCounter = 0;
|
|
139
|
+
function createRenderer() {
|
|
140
|
+
const renderer = new marked.marked.Renderer();
|
|
141
|
+
renderer.code = function(token) {
|
|
142
|
+
const { text: code, lang = "" } = token;
|
|
143
|
+
const normalised = lang.toLowerCase().trim();
|
|
144
|
+
const blockId = `block-${++blockCounter}`;
|
|
145
|
+
const encodedCode = encodeURIComponent(code);
|
|
146
|
+
const sentinel = 'data-md-fence="1"';
|
|
147
|
+
switch (normalised) {
|
|
148
|
+
case "mermaid":
|
|
149
|
+
return `<div data-block-type="mermaid" data-block-id="${blockId}" data-code="${encodedCode}" ${sentinel}></div>`;
|
|
150
|
+
case "csv":
|
|
151
|
+
return `<div data-block-type="csv" data-block-id="${blockId}" data-code="${encodedCode}" ${sentinel}></div>`;
|
|
152
|
+
case "survey":
|
|
153
|
+
return `<div data-block-type="survey" data-block-id="${blockId}" data-code="${encodedCode}" ${sentinel}></div>`;
|
|
154
|
+
case "html":
|
|
155
|
+
return `<div data-block-type="html-preview" data-block-id="${blockId}" data-code="${encodedCode}" ${sentinel}></div>`;
|
|
156
|
+
default:
|
|
157
|
+
return `<div data-block-type="code" data-block-id="${blockId}" data-code="${encodedCode}" data-lang="${escapeHtml(normalised)}" ${sentinel}></div>`;
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
renderer.link = function(token) {
|
|
161
|
+
const { href, title, tokens } = token;
|
|
162
|
+
const text = this && typeof this.parser === "object" ? this.parser.parseInline(tokens) : token.text;
|
|
163
|
+
const titleAttr = title ? ` title="${escapeHtml(title)}"` : "";
|
|
164
|
+
return `<a href="${escapeHtml(href)}" target="_blank" rel="noopener noreferrer"${titleAttr}>${text}</a>`;
|
|
165
|
+
};
|
|
166
|
+
renderer.table = function(token) {
|
|
167
|
+
const headerCells = token.header.map((cell) => {
|
|
168
|
+
const content = this && typeof this.parser === "object" ? this.parser.parseInline(cell.tokens) : cell.text;
|
|
169
|
+
return `<th>${content}</th>`;
|
|
170
|
+
}).join("");
|
|
171
|
+
const bodyRows = token.rows.map((row) => {
|
|
172
|
+
const cells = row.map((cell) => {
|
|
173
|
+
const content = this && typeof this.parser === "object" ? this.parser.parseInline(cell.tokens) : cell.text;
|
|
174
|
+
return `<td>${content}</td>`;
|
|
175
|
+
}).join("");
|
|
176
|
+
return `<tr>${cells}</tr>`;
|
|
177
|
+
}).join("");
|
|
178
|
+
return `<div class="overflow-x-auto"><table class="min-w-full divide-y divide-neutral-200 dark:divide-neutral-700"><thead><tr>${headerCells}</tr></thead><tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">${bodyRows}</tbody></table></div>`;
|
|
179
|
+
};
|
|
180
|
+
return renderer;
|
|
181
|
+
}
|
|
182
|
+
function makeMarkedOptions() {
|
|
183
|
+
return { gfm: true, breaks: true, renderer: createRenderer() };
|
|
184
|
+
}
|
|
185
|
+
var CACHE_MAX = 100;
|
|
186
|
+
var renderCache = /* @__PURE__ */ new Map();
|
|
187
|
+
function cacheSet(key, value) {
|
|
188
|
+
if (renderCache.size >= CACHE_MAX) {
|
|
189
|
+
renderCache.delete(renderCache.keys().next().value);
|
|
190
|
+
}
|
|
191
|
+
renderCache.set(key, value);
|
|
192
|
+
}
|
|
193
|
+
function useMarkdown() {
|
|
194
|
+
const cacheRef = react.useRef(renderCache);
|
|
195
|
+
const render = react.useCallback((text, cacheKey) => {
|
|
196
|
+
if (!text) return "";
|
|
197
|
+
const key = cacheKey ?? text;
|
|
198
|
+
const cached = cacheRef.current.get(key);
|
|
199
|
+
if (cached) return cached;
|
|
200
|
+
const raw = marked.marked.parse(text, {
|
|
201
|
+
...makeMarkedOptions(),
|
|
202
|
+
async: false
|
|
203
|
+
});
|
|
204
|
+
const clean = sanitise(raw);
|
|
205
|
+
cacheSet(key, clean);
|
|
206
|
+
return clean;
|
|
207
|
+
}, []);
|
|
208
|
+
const renderAsync = react.useCallback(
|
|
209
|
+
async (text, cacheKey) => {
|
|
210
|
+
if (!text) return "";
|
|
211
|
+
const key = cacheKey ?? text;
|
|
212
|
+
const cached = cacheRef.current.get(key);
|
|
213
|
+
if (cached) return cached;
|
|
214
|
+
const fenceRegex = /^```([\w+\-.]+)\s*$/gm;
|
|
215
|
+
let match;
|
|
216
|
+
const langs = [];
|
|
217
|
+
while ((match = fenceRegex.exec(text)) !== null) {
|
|
218
|
+
langs.push(match[1]);
|
|
219
|
+
}
|
|
220
|
+
await Promise.all(langs.map((l) => ensureLanguage(l)));
|
|
221
|
+
const raw = await marked.marked.parse(text, makeMarkedOptions());
|
|
222
|
+
const clean = sanitise(raw);
|
|
223
|
+
cacheSet(key, clean);
|
|
224
|
+
return clean;
|
|
225
|
+
},
|
|
226
|
+
[]
|
|
227
|
+
);
|
|
228
|
+
const clearCache = react.useCallback(() => {
|
|
229
|
+
cacheRef.current.clear();
|
|
230
|
+
}, []);
|
|
231
|
+
return react.useMemo(
|
|
232
|
+
() => ({ render, renderAsync, clearCache }),
|
|
233
|
+
[render, renderAsync, clearCache]
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
var CodeBlock = ({ code, language }) => {
|
|
237
|
+
const html = react.useMemo(() => highlightCode(code, language), [code, language]);
|
|
238
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkUL3PQ7HL_cjs.FenceBlock, { code, language, children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "m-0 overflow-x-auto !bg-transparent p-3 text-sm", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
239
|
+
"code",
|
|
240
|
+
{
|
|
241
|
+
className: "hljs bg-transparent p-0",
|
|
242
|
+
dangerouslySetInnerHTML: { __html: html }
|
|
243
|
+
}
|
|
244
|
+
) }) });
|
|
245
|
+
};
|
|
246
|
+
var CsvBlock = react.lazy(
|
|
247
|
+
() => import('./CsvBlock-7K6XVRYO.cjs').then((m) => ({ default: m.CsvBlock }))
|
|
248
|
+
);
|
|
249
|
+
var HtmlPreviewBlock = react.lazy(
|
|
250
|
+
() => import('./HtmlPreviewBlock-74XQF3KT.cjs').then((m) => ({ default: m.HtmlPreviewBlock }))
|
|
251
|
+
);
|
|
252
|
+
var MermaidBlock = react.lazy(
|
|
253
|
+
() => import('./MermaidBlock-R4U7IHSZ.cjs').then((m) => ({ default: m.MermaidBlock }))
|
|
254
|
+
);
|
|
255
|
+
var SurveyBlock = react.lazy(
|
|
256
|
+
() => import('./SurveyBlock-E52I4PW3.cjs').then((m) => ({ default: m.SurveyBlock }))
|
|
257
|
+
);
|
|
258
|
+
var BlockFallback = () => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-4 text-sm text-neutral-500", children: "Loading\u2026" });
|
|
259
|
+
var BLOCK_RE = /<div data-block-type="([^"]+)" data-block-id="([^"]+)" data-code="([^"]*)"([^>]*\bdata-md-fence="1"[^>]*)><\/div>/g;
|
|
260
|
+
function splitHtml(html) {
|
|
261
|
+
const segments = [];
|
|
262
|
+
let last = 0;
|
|
263
|
+
for (const m of html.matchAll(BLOCK_RE)) {
|
|
264
|
+
if (m.index > last) segments.push({ html: html.slice(last, m.index) });
|
|
265
|
+
const langMatch = m[4]?.match(/data-lang="([^"]*)"/)?.[1];
|
|
266
|
+
segments.push({
|
|
267
|
+
type: m[1],
|
|
268
|
+
id: m[2],
|
|
269
|
+
code: (() => {
|
|
270
|
+
try {
|
|
271
|
+
return decodeURIComponent(m[3]);
|
|
272
|
+
} catch {
|
|
273
|
+
return m[3];
|
|
274
|
+
}
|
|
275
|
+
})(),
|
|
276
|
+
lang: langMatch ?? void 0
|
|
277
|
+
});
|
|
278
|
+
last = m.index + m[0].length;
|
|
279
|
+
}
|
|
280
|
+
if (last < html.length) segments.push({ html: html.slice(last) });
|
|
281
|
+
return segments;
|
|
282
|
+
}
|
|
283
|
+
function renderBlock(seg) {
|
|
284
|
+
const wrap = (node) => /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(BlockFallback, {}), children: node }, seg.id);
|
|
285
|
+
switch (seg.type) {
|
|
286
|
+
case "mermaid":
|
|
287
|
+
return wrap(/* @__PURE__ */ jsxRuntime.jsx(MermaidBlock, { code: seg.code, id: seg.id }));
|
|
288
|
+
case "csv":
|
|
289
|
+
return wrap(/* @__PURE__ */ jsxRuntime.jsx(CsvBlock, { code: seg.code, id: seg.id }));
|
|
290
|
+
case "survey":
|
|
291
|
+
return wrap(/* @__PURE__ */ jsxRuntime.jsx(SurveyBlock, { code: seg.code, id: seg.id }));
|
|
292
|
+
case "html-preview":
|
|
293
|
+
return wrap(/* @__PURE__ */ jsxRuntime.jsx(HtmlPreviewBlock, { code: seg.code, id: seg.id }));
|
|
294
|
+
case "code":
|
|
295
|
+
return wrap(
|
|
296
|
+
/* @__PURE__ */ jsxRuntime.jsx(CodeBlock, { code: seg.code, language: seg.lang || void 0 })
|
|
297
|
+
);
|
|
298
|
+
default:
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
var MarkdownRenderer = ({
|
|
303
|
+
text,
|
|
304
|
+
cacheKey,
|
|
305
|
+
className = "",
|
|
306
|
+
streaming = false
|
|
307
|
+
}) => {
|
|
308
|
+
const { render, renderAsync } = useMarkdown();
|
|
309
|
+
const [html, setHtml] = react.useState("");
|
|
310
|
+
react.useEffect(() => {
|
|
311
|
+
let cancelled = false;
|
|
312
|
+
const effectiveKey = streaming ? cacheKey ? `${cacheKey}::${text.length}` : void 0 : cacheKey;
|
|
313
|
+
async function doRender() {
|
|
314
|
+
const rendered = await renderAsync(text, effectiveKey);
|
|
315
|
+
if (!cancelled) setHtml(rendered);
|
|
316
|
+
}
|
|
317
|
+
if (streaming) {
|
|
318
|
+
setHtml(render(text, effectiveKey));
|
|
319
|
+
} else {
|
|
320
|
+
void doRender();
|
|
321
|
+
}
|
|
322
|
+
return () => {
|
|
323
|
+
cancelled = true;
|
|
324
|
+
};
|
|
325
|
+
}, [text, cacheKey, streaming, render, renderAsync]);
|
|
326
|
+
const segments = splitHtml(html);
|
|
327
|
+
const proseClass = `md-prose ${className}`.trim();
|
|
328
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: proseClass, children: segments.map(
|
|
329
|
+
(seg, i) => "html" in seg ? /* @__PURE__ */ jsxRuntime.jsx("div", { dangerouslySetInnerHTML: { __html: seg.html } }, i) : renderBlock(seg)
|
|
330
|
+
) });
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
exports.CodeBlock = CodeBlock;
|
|
334
|
+
exports.MarkdownRenderer = MarkdownRenderer;
|
|
335
|
+
exports.highlightCode = highlightCode;
|
|
336
|
+
exports.useMarkdown = useMarkdown;
|
|
337
|
+
//# sourceMappingURL=chunk-Y65SK5Y2.cjs.map
|
|
338
|
+
//# sourceMappingURL=chunk-Y65SK5Y2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Markdown/useMarkdown.ts","../src/components/Markdown/CodeBlock.tsx","../src/components/Markdown/MarkdownRenderer.tsx"],"names":["hljs","javascript","typescript","python","json","xml","css","bash","sql","yaml","markdown","DOMPurify","marked","useRef","useCallback","useMemo","FenceBlock","jsx","lazy","Suspense","useState","useEffect"],"mappings":"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","file":"chunk-Y65SK5Y2.cjs","sourcesContent":["/** useMarkdown — converts markdown to sanitised HTML with hljs highlighting and special fence blocks. */\nimport DOMPurify from 'dompurify';\nimport hljs from 'highlight.js/lib/core';\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\nimport bash from 'highlight.js/lib/languages/bash';\nimport css from 'highlight.js/lib/languages/css';\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport json from 'highlight.js/lib/languages/json';\nimport markdown from 'highlight.js/lib/languages/markdown';\nimport python from 'highlight.js/lib/languages/python';\nimport sql from 'highlight.js/lib/languages/sql';\nimport typescript from 'highlight.js/lib/languages/typescript';\nimport xml from 'highlight.js/lib/languages/xml';\nimport yaml from 'highlight.js/lib/languages/yaml';\nimport { marked, type MarkedOptions, type Tokens } from 'marked';\nimport { useCallback, useMemo, useRef } from 'react';\n\nhljs.registerLanguage('javascript', javascript);\nhljs.registerLanguage('typescript', typescript);\nhljs.registerLanguage('python', python);\nhljs.registerLanguage('json', json);\nhljs.registerLanguage('xml', xml);\nhljs.registerLanguage('html', xml);\nhljs.registerLanguage('css', css);\nhljs.registerLanguage('bash', bash);\nhljs.registerLanguage('shell', bash);\nhljs.registerLanguage('sql', sql);\nhljs.registerLanguage('yaml', yaml);\nhljs.registerLanguage('yml', yaml);\nhljs.registerLanguage('markdown', markdown);\nhljs.registerLanguage('md', markdown);\n\nconst lazyLanguages: Record<string, () => Promise<unknown>> = {\n java: () => import('highlight.js/lib/languages/java'),\n cpp: () => import('highlight.js/lib/languages/cpp'),\n 'c++': () => import('highlight.js/lib/languages/cpp'),\n c: () => import('highlight.js/lib/languages/c'),\n csharp: () => import('highlight.js/lib/languages/csharp'),\n php: () => import('highlight.js/lib/languages/php'),\n ruby: () => import('highlight.js/lib/languages/ruby'),\n go: () => import('highlight.js/lib/languages/go'),\n rust: () => import('highlight.js/lib/languages/rust'),\n perl: () => import('highlight.js/lib/languages/perl'),\n r: () => import('highlight.js/lib/languages/r'),\n makefile: () => import('highlight.js/lib/languages/makefile'),\n dockerfile: () => import('highlight.js/lib/languages/dockerfile'),\n};\n\nconst loadedLanguages = new Set<string>([\n 'javascript',\n 'typescript',\n 'python',\n 'json',\n 'xml',\n 'html',\n 'css',\n 'bash',\n 'shell',\n 'sql',\n 'yaml',\n 'yml',\n 'markdown',\n 'md',\n]);\n\nasync function ensureLanguage(lang: string): Promise<boolean> {\n const key = lang.toLowerCase();\n if (loadedLanguages.has(key)) return true;\n const loader = lazyLanguages[key];\n if (!loader) return false;\n try {\n const mod = (await loader()) as { default: unknown };\n hljs.registerLanguage(\n key,\n mod.default as Parameters<typeof hljs.registerLanguage>[1]\n );\n loadedLanguages.add(key);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function highlightCode(code: string, lang?: string): string {\n if (lang && loadedLanguages.has(lang.toLowerCase())) {\n try {\n return hljs.highlight(code, { language: lang.toLowerCase() }).value;\n } catch {\n /* fall through */\n }\n }\n try {\n const result = hljs.highlightAuto(code);\n if (result.relevance > 5) return result.value;\n } catch {\n /* fall through */\n }\n return escapeHtml(code);\n}\n\nfunction sanitise(html: string): string {\n return DOMPurify.sanitize(html, {\n ADD_ATTR: [\n 'target',\n 'rel',\n 'data-block-type',\n 'data-block-id',\n 'data-code',\n 'data-lang',\n 'data-md-fence',\n ],\n }) as string;\n}\n\n// Use globalThis to prevent duplicate DOMPurify hook registration across HMR reloads.\nconst _g = globalThis as unknown as Record<string, boolean>;\n// Guard against SSR: DOMPurify hooks operate on the DOM, so only register in the browser.\nif (typeof document !== 'undefined' && !_g.__markdownAnchorHookInstalled) {\n _g.__markdownAnchorHookInstalled = true;\n DOMPurify.addHook('afterSanitizeAttributes', (node: Element) => {\n const isAnchor =\n (typeof HTMLAnchorElement !== 'undefined' &&\n node instanceof HTMLAnchorElement) ||\n node.nodeName === 'A';\n if (isAnchor) {\n node.setAttribute('target', '_blank');\n node.setAttribute('rel', 'noopener noreferrer');\n }\n });\n}\n\nlet blockCounter = 0;\n\nfunction createRenderer() {\n const renderer = new marked.Renderer();\n\n renderer.code = function (this: unknown, token: Tokens.Code) {\n const { text: code, lang = '' } = token;\n const normalised = lang.toLowerCase().trim();\n const blockId = `block-${++blockCounter}`;\n const encodedCode = encodeURIComponent(code);\n const sentinel = 'data-md-fence=\"1\"';\n\n switch (normalised) {\n case 'mermaid':\n return `<div data-block-type=\"mermaid\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'csv':\n return `<div data-block-type=\"csv\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'survey':\n return `<div data-block-type=\"survey\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'html':\n return `<div data-block-type=\"html-preview\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n default:\n return `<div data-block-type=\"code\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" data-lang=\"${escapeHtml(normalised)}\" ${sentinel}></div>`;\n }\n };\n\n renderer.link = function (this: unknown, token: Tokens.Link) {\n const { href, title, tokens } = token;\n const text =\n this && typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: { parseInline: (t: Tokens.Link['tokens']) => string };\n }\n ).parser.parseInline(tokens)\n : token.text;\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\n return `<a href=\"${escapeHtml(href)}\" target=\"_blank\" rel=\"noopener noreferrer\"${titleAttr}>${text}</a>`;\n };\n\n renderer.table = function (this: unknown, token: Tokens.Table) {\n const headerCells = token.header\n .map((cell) => {\n const content =\n this && typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: {\n parseInline: (t: Tokens.TableCell['tokens']) => string;\n };\n }\n ).parser.parseInline(cell.tokens)\n : cell.text;\n return `<th>${content}</th>`;\n })\n .join('');\n\n const bodyRows = token.rows\n .map((row) => {\n const cells = row\n .map((cell) => {\n const content =\n this &&\n typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: {\n parseInline: (t: Tokens.TableCell['tokens']) => string;\n };\n }\n ).parser.parseInline(cell.tokens)\n : cell.text;\n return `<td>${content}</td>`;\n })\n .join('');\n return `<tr>${cells}</tr>`;\n })\n .join('');\n\n return `<div class=\"overflow-x-auto\"><table class=\"min-w-full divide-y divide-neutral-200 dark:divide-neutral-700\"><thead><tr>${headerCells}</tr></thead><tbody class=\"divide-y divide-neutral-200 dark:divide-neutral-700\">${bodyRows}</tbody></table></div>`;\n };\n\n return renderer;\n}\n\nfunction makeMarkedOptions(): MarkedOptions {\n return { gfm: true, breaks: true, renderer: createRenderer() };\n}\n\nconst CACHE_MAX = 100;\nconst renderCache = new Map<string, string>();\nfunction cacheSet(key: string, value: string) {\n if (renderCache.size >= CACHE_MAX) {\n renderCache.delete(renderCache.keys().next().value as string);\n }\n renderCache.set(key, value);\n}\n\nexport interface UseMarkdownResult {\n /** Render markdown text to sanitised HTML string */\n render: (text: string, cacheKey?: string) => string;\n /** Async-render that lazy-loads needed languages first */\n renderAsync: (text: string, cacheKey?: string) => Promise<string>;\n /** Clear the render cache */\n clearCache: () => void;\n}\n\nexport function useMarkdown(): UseMarkdownResult {\n const cacheRef = useRef(renderCache);\n\n const render = useCallback((text: string, cacheKey?: string): string => {\n if (!text) return '';\n const key = cacheKey ?? text;\n const cached = cacheRef.current.get(key);\n if (cached) return cached;\n\n const raw = marked.parse(text, {\n ...makeMarkedOptions(),\n async: false,\n }) as string;\n const clean = sanitise(raw);\n cacheSet(key, clean);\n return clean;\n }, []);\n\n const renderAsync = useCallback(\n async (text: string, cacheKey?: string): Promise<string> => {\n if (!text) return '';\n const key = cacheKey ?? text;\n const cached = cacheRef.current.get(key);\n if (cached) return cached;\n\n // Allow `+`, `-`, `.` in language identifiers (c++, objective-c, bash-session, etc.)\n const fenceRegex = /^```([\\w+\\-.]+)\\s*$/gm;\n let match: RegExpExecArray | null;\n const langs: string[] = [];\n while ((match = fenceRegex.exec(text)) !== null) {\n langs.push(match[1]);\n }\n await Promise.all(langs.map((l) => ensureLanguage(l)));\n\n const raw = await marked.parse(text, makeMarkedOptions());\n const clean = sanitise(raw);\n cacheSet(key, clean);\n return clean;\n },\n []\n );\n\n const clearCache = useCallback(() => {\n cacheRef.current.clear();\n }, []);\n\n return useMemo(\n () => ({ render, renderAsync, clearCache }),\n [render, renderAsync, clearCache]\n );\n}\n","/**\n * CodeBlock — Renders a syntax-highlighted code fence using FenceBlock.\n *\n * Used by `MarkdownRenderer` for plain (non-special) fenced code blocks.\n * Highlighting is performed synchronously via the `highlightCode` helper from\n * `useMarkdown`; if the language was not pre-registered with highlight.js the\n * helper falls back to escaped raw text.\n */\nimport React, { useMemo } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\nimport { highlightCode } from './useMarkdown';\n\ninterface CodeBlockProps {\n code: string;\n language?: string;\n}\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({ code, language }) => {\n const html = useMemo(() => highlightCode(code, language), [code, language]);\n\n return (\n <FenceBlock code={code} language={language}>\n <pre className=\"m-0 overflow-x-auto !bg-transparent p-3 text-sm\">\n <code\n className=\"hljs bg-transparent p-0\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </pre>\n </FenceBlock>\n );\n};\n","/**\n * MarkdownRenderer — renders markdown with React components for special fence blocks.\n */\nimport React, { Suspense, lazy, useEffect, useState } from 'react';\n\nimport './styles.css';\nimport { CodeBlock } from './CodeBlock';\nimport { useMarkdown } from './useMarkdown';\n\n// Block components are lazy-loaded so optional peer deps (papaparse, js-yaml, mermaid)\n// aren't bundled unless actually rendered.\nconst CsvBlock = lazy(() =>\n import('./CsvBlock').then((m) => ({ default: m.CsvBlock }))\n);\nconst HtmlPreviewBlock = lazy(() =>\n import('./HtmlPreviewBlock').then((m) => ({ default: m.HtmlPreviewBlock }))\n);\nconst MermaidBlock = lazy(() =>\n import('./MermaidBlock').then((m) => ({ default: m.MermaidBlock }))\n);\nconst SurveyBlock = lazy(() =>\n import('./SurveyBlock').then((m) => ({ default: m.SurveyBlock }))\n);\n\nconst BlockFallback: React.FC = () => (\n <div className=\"flex items-center justify-center p-4 text-sm text-neutral-500\">\n Loading…\n </div>\n);\n\nexport interface MarkdownRendererProps {\n /** Raw markdown text */\n text: string;\n /** Cache key (e.g., message._id + revisionNumber) */\n cacheKey?: string;\n /** Additional CSS classes */\n className?: string;\n /** Whether the message is still streaming (may have incomplete blocks) */\n streaming?: boolean;\n}\n\n// Matches fence block markers emitted by useMarkdown (sentinel data-md-fence prevents raw-HTML injection)\nconst BLOCK_RE =\n /<div data-block-type=\"([^\"]+)\" data-block-id=\"([^\"]+)\" data-code=\"([^\"]*)\"([^>]*\\bdata-md-fence=\"1\"[^>]*)><\\/div>/g;\n\ninterface HtmlSegment {\n html: string;\n}\ninterface BlockSegment {\n type: string;\n id: string;\n code: string;\n lang?: string;\n}\ntype Segment = HtmlSegment | BlockSegment;\n\nfunction splitHtml(html: string): Segment[] {\n const segments: Segment[] = [];\n let last = 0;\n for (const m of html.matchAll(BLOCK_RE)) {\n if (m.index > last) segments.push({ html: html.slice(last, m.index) });\n const langMatch = m[4]?.match(/data-lang=\"([^\"]*)\"/)?.[1];\n segments.push({\n type: m[1],\n id: m[2],\n code: (() => {\n try {\n return decodeURIComponent(m[3]);\n } catch {\n return m[3];\n }\n })(),\n lang: langMatch ?? undefined,\n });\n last = m.index + m[0].length;\n }\n if (last < html.length) segments.push({ html: html.slice(last) });\n return segments;\n}\n\nfunction renderBlock(seg: BlockSegment): React.ReactNode {\n const wrap = (node: React.ReactNode) => (\n <Suspense key={seg.id} fallback={<BlockFallback />}>\n {node}\n </Suspense>\n );\n switch (seg.type) {\n case 'mermaid':\n return wrap(<MermaidBlock code={seg.code} id={seg.id} />);\n case 'csv':\n return wrap(<CsvBlock code={seg.code} id={seg.id} />);\n case 'survey':\n return wrap(<SurveyBlock code={seg.code} id={seg.id} />);\n case 'html-preview':\n return wrap(<HtmlPreviewBlock code={seg.code} id={seg.id} />);\n case 'code':\n return wrap(\n <CodeBlock code={seg.code} language={seg.lang || undefined} />\n );\n default:\n return null;\n }\n}\n\nexport const MarkdownRenderer: React.FC<MarkdownRendererProps> = ({\n text,\n cacheKey,\n className = '',\n streaming = false,\n}) => {\n const { render, renderAsync } = useMarkdown();\n const [html, setHtml] = useState('');\n\n useEffect(() => {\n let cancelled = false;\n\n // While streaming, append text length to the cache key so each delta\n // produces a fresh render rather than a stale hit on the messageId.\n const effectiveKey = streaming\n ? cacheKey\n ? `${cacheKey}::${text.length}`\n : undefined\n : cacheKey;\n\n async function doRender() {\n const rendered = await renderAsync(text, effectiveKey);\n if (!cancelled) setHtml(rendered);\n }\n\n if (streaming) {\n setHtml(render(text, effectiveKey));\n } else {\n void doRender();\n }\n\n return () => {\n cancelled = true;\n };\n }, [text, cacheKey, streaming, render, renderAsync]);\n\n const segments = splitHtml(html);\n const proseClass = `md-prose ${className}`.trim();\n\n return (\n <div className={proseClass}>\n {segments.map((seg, i) =>\n 'html' in seg ? (\n <div key={i} dangerouslySetInnerHTML={{ __html: seg.html }} />\n ) : (\n renderBlock(seg)\n )\n )}\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkY65SK5Y2_cjs = require('../../chunk-Y65SK5Y2.cjs');
|
|
4
|
+
var chunkVO3NWSCQ_cjs = require('../../chunk-VO3NWSCQ.cjs');
|
|
5
|
+
var chunk74NOFB34_cjs = require('../../chunk-74NOFB34.cjs');
|
|
6
|
+
var chunkFZQAF3WA_cjs = require('../../chunk-FZQAF3WA.cjs');
|
|
7
|
+
var chunk6RV7HQ4U_cjs = require('../../chunk-6RV7HQ4U.cjs');
|
|
8
|
+
var chunkUL3PQ7HL_cjs = require('../../chunk-UL3PQ7HL.cjs');
|
|
9
|
+
require('../../chunk-A2QVQF54.cjs');
|
|
10
|
+
require('../../chunk-OR5DRJCW.cjs');
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
Object.defineProperty(exports, "CodeBlock", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return chunkY65SK5Y2_cjs.CodeBlock; }
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "MarkdownRenderer", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return chunkY65SK5Y2_cjs.MarkdownRenderer; }
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(exports, "highlightCode", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () { return chunkY65SK5Y2_cjs.highlightCode; }
|
|
25
|
+
});
|
|
26
|
+
Object.defineProperty(exports, "useMarkdown", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
get: function () { return chunkY65SK5Y2_cjs.useMarkdown; }
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "CsvBlock", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () { return chunkVO3NWSCQ_cjs.CsvBlock; }
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(exports, "HtmlPreviewBlock", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
get: function () { return chunk74NOFB34_cjs.HtmlPreviewBlock; }
|
|
37
|
+
});
|
|
38
|
+
Object.defineProperty(exports, "MermaidBlock", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
get: function () { return chunkFZQAF3WA_cjs.MermaidBlock; }
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "SurveyBlock", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () { return chunk6RV7HQ4U_cjs.SurveyBlock; }
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(exports, "FenceBlock", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
get: function () { return chunkUL3PQ7HL_cjs.FenceBlock; }
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=index.cjs.map
|
|
51
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|