@mieweb/ui 0.7.0-dev.180 → 0.7.0
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-2A5VEDD3.cjs.map → CsvBlock-7K6XVRYO.cjs.map} +1 -1
- package/dist/CsvBlock-AAV4QMSF.js +6 -0
- package/dist/{CsvBlock-D6PWAJ5X.js.map → CsvBlock-AAV4QMSF.js.map} +1 -1
- package/dist/HtmlPreviewBlock-74XQF3KT.cjs +15 -0
- package/dist/{HtmlPreviewBlock-SYXCV5RH.cjs.map → HtmlPreviewBlock-74XQF3KT.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-DNINC7RW.js +6 -0
- package/dist/{HtmlPreviewBlock-PEHTJ6C3.js.map → HtmlPreviewBlock-DNINC7RW.js.map} +1 -1
- package/dist/MermaidBlock-PKXGFGU6.js +6 -0
- package/dist/{MermaidBlock-7NK3AVK2.js.map → MermaidBlock-PKXGFGU6.js.map} +1 -1
- package/dist/MermaidBlock-R4U7IHSZ.cjs +15 -0
- package/dist/{MermaidBlock-AFXNP5NK.cjs.map → MermaidBlock-R4U7IHSZ.cjs.map} +1 -1
- package/dist/SurveyBlock-E52I4PW3.cjs +15 -0
- package/dist/{SurveyBlock-6KRNKFH5.cjs.map → SurveyBlock-E52I4PW3.cjs.map} +1 -1
- package/dist/SurveyBlock-IULSBG22.js +6 -0
- package/dist/{SurveyBlock-NNDGXGG4.js.map → SurveyBlock-IULSBG22.js.map} +1 -1
- package/dist/{chunk-YVLP3ATI.js → chunk-35VBGVMB.js} +3 -3
- package/dist/{chunk-YVLP3ATI.js.map → chunk-35VBGVMB.js.map} +1 -1
- package/dist/{chunk-KBEKQMVY.cjs → chunk-6RV7HQ4U.cjs} +5 -5
- package/dist/{chunk-KBEKQMVY.cjs.map → chunk-6RV7HQ4U.cjs.map} +1 -1
- package/dist/{chunk-BB4WQ4LV.cjs → chunk-74NOFB34.cjs} +4 -4
- package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-74NOFB34.cjs.map} +1 -1
- package/dist/{chunk-I2W24RHW.js → chunk-CPJIOOBM.js} +3 -3
- package/dist/{chunk-I2W24RHW.js.map → chunk-CPJIOOBM.js.map} +1 -1
- package/dist/{chunk-7WMSUXOQ.js → chunk-FGIIXD37.js} +3 -3
- package/dist/{chunk-7WMSUXOQ.js.map → chunk-FGIIXD37.js.map} +1 -1
- package/dist/{chunk-S6Z3KDEM.js → chunk-FGP64Z24.js} +4 -13
- package/dist/chunk-FGP64Z24.js.map +1 -0
- package/dist/{chunk-CVC4NWFA.cjs → chunk-FZQAF3WA.cjs} +4 -4
- package/dist/{chunk-CVC4NWFA.cjs.map → chunk-FZQAF3WA.cjs.map} +1 -1
- package/dist/{chunk-RHYIFIT5.js → chunk-MHJMUKLA.js} +3 -12
- package/dist/chunk-MHJMUKLA.js.map +1 -0
- package/dist/{chunk-63KVQHGQ.cjs → chunk-NAQ3ZALI.cjs} +4 -4
- package/dist/{chunk-63KVQHGQ.cjs.map → chunk-NAQ3ZALI.cjs.map} +1 -1
- package/dist/{chunk-UFYXU7KV.js → chunk-NCRYCG5G.js} +3 -3
- package/dist/{chunk-UFYXU7KV.js.map → chunk-NCRYCG5G.js.map} +1 -1
- package/dist/{chunk-XL7TTKHP.js → chunk-NSLR3B7K.js} +12 -21
- package/dist/chunk-NSLR3B7K.js.map +1 -0
- package/dist/{chunk-CKD554XR.cjs → chunk-UL3PQ7HL.cjs} +3 -12
- package/dist/chunk-UL3PQ7HL.cjs.map +1 -0
- package/dist/{chunk-V25Z5GR6.cjs → chunk-VO3NWSCQ.cjs} +7 -7
- package/dist/{chunk-V25Z5GR6.cjs.map → chunk-VO3NWSCQ.cjs.map} +1 -1
- package/dist/{chunk-T3RWXOCM.js → chunk-WGC3KOP7.js} +3 -3
- package/dist/{chunk-T3RWXOCM.js.map → chunk-WGC3KOP7.js.map} +1 -1
- package/dist/{chunk-JCNPVK74.cjs → chunk-Y65SK5Y2.cjs} +12 -21
- package/dist/chunk-Y65SK5Y2.cjs.map +1 -0
- package/dist/{chunk-7QXG5BBB.cjs → chunk-YD23ZGRU.cjs} +4 -13
- package/dist/chunk-YD23ZGRU.cjs.map +1 -0
- package/dist/components/Markdown/index.cjs +15 -15
- package/dist/components/Markdown/index.css +1 -1
- package/dist/components/Markdown/index.css.map +1 -1
- package/dist/components/Markdown/index.js +6 -6
- package/dist/components/Markdown/styles.css +1 -4
- package/dist/components/MediaEditor/index.cjs +7 -7
- package/dist/components/MediaEditor/index.js +2 -2
- package/dist/components/MediaPlayer/index.cjs +4 -4
- package/dist/components/MediaPlayer/index.js +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +0 -3
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
- package/dist/components/SuperChat/plugins/index.js +0 -3
- package/dist/components/SuperChat/plugins/index.js.map +1 -1
- package/dist/index.cjs +25 -25
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +8 -8
- package/package.json +1 -2
- package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
- package/dist/CsvBlock-D6PWAJ5X.js +0 -6
- package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
- package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
- package/dist/MermaidBlock-7NK3AVK2.js +0 -6
- package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
- package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
- package/dist/SurveyBlock-NNDGXGG4.js +0 -6
- package/dist/chunk-7QXG5BBB.cjs.map +0 -1
- package/dist/chunk-CKD554XR.cjs.map +0 -1
- package/dist/chunk-JCNPVK74.cjs.map +0 -1
- package/dist/chunk-RHYIFIT5.js.map +0 -1
- package/dist/chunk-S6Z3KDEM.js.map +0 -1
- package/dist/chunk-XL7TTKHP.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -32,17 +32,17 @@ var chunkBLPCYP4D_cjs = require('./chunk-BLPCYP4D.cjs');
|
|
|
32
32
|
var chunkOXYFTCRW_cjs = require('./chunk-OXYFTCRW.cjs');
|
|
33
33
|
var chunkQ2EWNXIB_cjs = require('./chunk-Q2EWNXIB.cjs');
|
|
34
34
|
var chunkAFKKJEV5_cjs = require('./chunk-AFKKJEV5.cjs');
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
var
|
|
41
|
-
var
|
|
35
|
+
var chunkY65SK5Y2_cjs = require('./chunk-Y65SK5Y2.cjs');
|
|
36
|
+
var chunkVO3NWSCQ_cjs = require('./chunk-VO3NWSCQ.cjs');
|
|
37
|
+
var chunk74NOFB34_cjs = require('./chunk-74NOFB34.cjs');
|
|
38
|
+
var chunkFZQAF3WA_cjs = require('./chunk-FZQAF3WA.cjs');
|
|
39
|
+
var chunk6RV7HQ4U_cjs = require('./chunk-6RV7HQ4U.cjs');
|
|
40
|
+
var chunkUL3PQ7HL_cjs = require('./chunk-UL3PQ7HL.cjs');
|
|
41
|
+
var chunkNAQ3ZALI_cjs = require('./chunk-NAQ3ZALI.cjs');
|
|
42
42
|
var chunkS7JQ3FV5_cjs = require('./chunk-S7JQ3FV5.cjs');
|
|
43
43
|
var chunkGOKC4CCZ_cjs = require('./chunk-GOKC4CCZ.cjs');
|
|
44
44
|
require('./chunk-GLXTVCHN.cjs');
|
|
45
|
-
var
|
|
45
|
+
var chunkYD23ZGRU_cjs = require('./chunk-YD23ZGRU.cjs');
|
|
46
46
|
var chunkNIEIRA5A_cjs = require('./chunk-NIEIRA5A.cjs');
|
|
47
47
|
var chunk5MAGWW5X_cjs = require('./chunk-5MAGWW5X.cjs');
|
|
48
48
|
require('./chunk-RHNPILZQ.cjs');
|
|
@@ -43185,59 +43185,59 @@ Object.defineProperty(exports, "scrollAreaVariants", {
|
|
|
43185
43185
|
});
|
|
43186
43186
|
Object.defineProperty(exports, "CodeBlock", {
|
|
43187
43187
|
enumerable: true,
|
|
43188
|
-
get: function () { return
|
|
43188
|
+
get: function () { return chunkY65SK5Y2_cjs.CodeBlock; }
|
|
43189
43189
|
});
|
|
43190
43190
|
Object.defineProperty(exports, "MarkdownRenderer", {
|
|
43191
43191
|
enumerable: true,
|
|
43192
|
-
get: function () { return
|
|
43192
|
+
get: function () { return chunkY65SK5Y2_cjs.MarkdownRenderer; }
|
|
43193
43193
|
});
|
|
43194
43194
|
Object.defineProperty(exports, "highlightCode", {
|
|
43195
43195
|
enumerable: true,
|
|
43196
|
-
get: function () { return
|
|
43196
|
+
get: function () { return chunkY65SK5Y2_cjs.highlightCode; }
|
|
43197
43197
|
});
|
|
43198
43198
|
Object.defineProperty(exports, "useMarkdown", {
|
|
43199
43199
|
enumerable: true,
|
|
43200
|
-
get: function () { return
|
|
43200
|
+
get: function () { return chunkY65SK5Y2_cjs.useMarkdown; }
|
|
43201
43201
|
});
|
|
43202
43202
|
Object.defineProperty(exports, "CsvBlock", {
|
|
43203
43203
|
enumerable: true,
|
|
43204
|
-
get: function () { return
|
|
43204
|
+
get: function () { return chunkVO3NWSCQ_cjs.CsvBlock; }
|
|
43205
43205
|
});
|
|
43206
43206
|
Object.defineProperty(exports, "HtmlPreviewBlock", {
|
|
43207
43207
|
enumerable: true,
|
|
43208
|
-
get: function () { return
|
|
43208
|
+
get: function () { return chunk74NOFB34_cjs.HtmlPreviewBlock; }
|
|
43209
43209
|
});
|
|
43210
43210
|
Object.defineProperty(exports, "MermaidBlock", {
|
|
43211
43211
|
enumerable: true,
|
|
43212
|
-
get: function () { return
|
|
43212
|
+
get: function () { return chunkFZQAF3WA_cjs.MermaidBlock; }
|
|
43213
43213
|
});
|
|
43214
43214
|
Object.defineProperty(exports, "SurveyBlock", {
|
|
43215
43215
|
enumerable: true,
|
|
43216
|
-
get: function () { return
|
|
43216
|
+
get: function () { return chunk6RV7HQ4U_cjs.SurveyBlock; }
|
|
43217
43217
|
});
|
|
43218
43218
|
Object.defineProperty(exports, "FenceBlock", {
|
|
43219
43219
|
enumerable: true,
|
|
43220
|
-
get: function () { return
|
|
43220
|
+
get: function () { return chunkUL3PQ7HL_cjs.FenceBlock; }
|
|
43221
43221
|
});
|
|
43222
43222
|
Object.defineProperty(exports, "FillerWordsModal", {
|
|
43223
43223
|
enumerable: true,
|
|
43224
|
-
get: function () { return
|
|
43224
|
+
get: function () { return chunkNAQ3ZALI_cjs.FillerWordsModal; }
|
|
43225
43225
|
});
|
|
43226
43226
|
Object.defineProperty(exports, "MediaEditor", {
|
|
43227
43227
|
enumerable: true,
|
|
43228
|
-
get: function () { return
|
|
43228
|
+
get: function () { return chunkNAQ3ZALI_cjs.MediaEditor; }
|
|
43229
43229
|
});
|
|
43230
43230
|
Object.defineProperty(exports, "SilenceSettingsModal", {
|
|
43231
43231
|
enumerable: true,
|
|
43232
|
-
get: function () { return
|
|
43232
|
+
get: function () { return chunkNAQ3ZALI_cjs.SilenceSettingsModal; }
|
|
43233
43233
|
});
|
|
43234
43234
|
Object.defineProperty(exports, "SpeedMarkerMenu", {
|
|
43235
43235
|
enumerable: true,
|
|
43236
|
-
get: function () { return
|
|
43236
|
+
get: function () { return chunkNAQ3ZALI_cjs.SpeedMarkerMenu; }
|
|
43237
43237
|
});
|
|
43238
43238
|
Object.defineProperty(exports, "WordEditorModal", {
|
|
43239
43239
|
enumerable: true,
|
|
43240
|
-
get: function () { return
|
|
43240
|
+
get: function () { return chunkNAQ3ZALI_cjs.WordEditorModal; }
|
|
43241
43241
|
});
|
|
43242
43242
|
Object.defineProperty(exports, "PLAYBACK_SPEEDS", {
|
|
43243
43243
|
enumerable: true,
|
|
@@ -43261,15 +43261,15 @@ Object.defineProperty(exports, "sliderTrackVariants", {
|
|
|
43261
43261
|
});
|
|
43262
43262
|
Object.defineProperty(exports, "MediaPlayer", {
|
|
43263
43263
|
enumerable: true,
|
|
43264
|
-
get: function () { return
|
|
43264
|
+
get: function () { return chunkYD23ZGRU_cjs.MediaPlayer; }
|
|
43265
43265
|
});
|
|
43266
43266
|
Object.defineProperty(exports, "inferMediaKind", {
|
|
43267
43267
|
enumerable: true,
|
|
43268
|
-
get: function () { return
|
|
43268
|
+
get: function () { return chunkYD23ZGRU_cjs.inferMediaKind; }
|
|
43269
43269
|
});
|
|
43270
43270
|
Object.defineProperty(exports, "mediaPlayerVariants", {
|
|
43271
43271
|
enumerable: true,
|
|
43272
|
-
get: function () { return
|
|
43272
|
+
get: function () { return chunkYD23ZGRU_cjs.mediaPlayerVariants; }
|
|
43273
43273
|
});
|
|
43274
43274
|
Object.defineProperty(exports, "Pagination", {
|
|
43275
43275
|
enumerable: true,
|
package/dist/index.css
CHANGED
package/dist/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Markdown/styles.css"],"sourcesContent":["/*\n * highlight.js theme — atom-one-light (default) + atom-one-dark (scoped).\n *\n * Bundled in-tree (rather than via `@import 'highlight.js/styles/...'`) so we\n * can scope the dark variant under `[data-theme=\"dark\"]` and keep theme\n * switching synchronous — no FOUC on streamed code blocks.\n *\n * Source: highlight.js v11 atom-one-light / atom-one-dark themes.\n */\n\n/* Layout (theme-agnostic) */\npre code.hljs {\n display: block;\n /* No own scrollbar — the parent <pre> (focusable, tabIndex=0) is the single\n * scroll container. A scrollable but unfocusable <code> fails axe's\n * scrollable-region-focusable rule. */\n overflow-x: visible;\n padding: 1em;\n /* Transparent so the parent container's background is the single source of truth */\n background: transparent;\n}\ncode.hljs {\n padding: 3px 5px;\n}\n\n/* atom-one-light (default) */\n.hljs {\n color: #383a42;\n background: #fafafa;\n}\n.hljs-comment,\n.hljs-quote {\n color: #707179;\n font-style: italic;\n}\n.hljs-doctag,\n.hljs-formula,\n.hljs-keyword {\n color: #a626a4;\n}\n.hljs-deletion,\n.hljs-name,\n.hljs-section,\n.hljs-selector-tag,\n.hljs-subst {\n color: #d72f20;\n}\n.hljs-literal {\n color: #0179ac;\n}\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta .hljs-string,\n.hljs-regexp,\n.hljs-string {\n color: #3f7f3e;\n}\n.hljs-attr,\n.hljs-number,\n.hljs-selector-attr,\n.hljs-selector-class,\n.hljs-selector-pseudo,\n.hljs-template-variable,\n.hljs-type,\n.hljs-variable {\n color: #986801;\n}\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-symbol,\n.hljs-title {\n color: #2867f0;\n}\n.hljs-built_in,\n.hljs-class .hljs-title,\n.hljs-title.class_ {\n color: #986801;\n}\n.hljs-emphasis {\n font-style: italic;\n}\n.hljs-strong {\n font-weight: 700;\n}\n.hljs-link {\n text-decoration: underline;\n}\n\n/* atom-one-dark (scoped under data-theme=\"dark\") */\n[data-theme='dark'] .hljs,\n.dark .hljs {\n color: #abb2bf;\n background: #1a1d24;\n}\n[data-theme='dark'] .hljs-comment,\n.dark .hljs-comment,\n[data-theme='dark'] .hljs-quote,\n.dark .hljs-quote {\n color: #8e95a2;\n}\n[data-theme='dark'] .hljs-doctag,\n.dark .hljs-doctag,\n[data-theme='dark'] .hljs-formula,\n.dark .hljs-formula,\n[data-theme='dark'] .hljs-keyword,\n.dark .hljs-keyword {\n color: #c678dd;\n}\n[data-theme='dark'] .hljs-deletion,\n.dark .hljs-deletion,\n[data-theme='dark'] .hljs-name,\n.dark .hljs-name,\n[data-theme='dark'] .hljs-section,\n.dark .hljs-section,\n[data-theme='dark'] .hljs-selector-tag,\n.dark .hljs-selector-tag,\n[data-theme='dark'] .hljs-subst,\n.dark .hljs-subst {\n color: #e2747d;\n}\n[data-theme='dark'] .hljs-literal,\n.dark .hljs-literal {\n color: #56b6c2;\n}\n[data-theme='dark'] .hljs-addition,\n.dark .hljs-addition,\n[data-theme='dark'] .hljs-attribute,\n.dark .hljs-attribute,\n[data-theme='dark'] .hljs-meta .hljs-string,\n.dark .hljs-meta .hljs-string,\n[data-theme='dark'] .hljs-regexp,\n.dark .hljs-regexp,\n[data-theme='dark'] .hljs-string,\n.dark .hljs-string {\n color: #98c379;\n}\n[data-theme='dark'] .hljs-attr,\n.dark .hljs-attr,\n[data-theme='dark'] .hljs-number,\n.dark .hljs-number,\n[data-theme='dark'] .hljs-selector-attr,\n.dark .hljs-selector-attr,\n[data-theme='dark'] .hljs-selector-class,\n.dark .hljs-selector-class,\n[data-theme='dark'] .hljs-selector-pseudo,\n.dark .hljs-selector-pseudo,\n[data-theme='dark'] .hljs-template-variable,\n.dark .hljs-template-variable,\n[data-theme='dark'] .hljs-type,\n.dark .hljs-type,\n[data-theme='dark'] .hljs-variable,\n.dark .hljs-variable {\n color: #d19a66;\n}\n[data-theme='dark'] .hljs-bullet,\n.dark .hljs-bullet,\n[data-theme='dark'] .hljs-link,\n.dark .hljs-link,\n[data-theme='dark'] .hljs-meta,\n.dark .hljs-meta,\n[data-theme='dark'] .hljs-selector-id,\n.dark .hljs-selector-id,\n[data-theme='dark'] .hljs-symbol,\n.dark .hljs-symbol,\n[data-theme='dark'] .hljs-title,\n.dark .hljs-title {\n color: #61aeee;\n}\n[data-theme='dark'] .hljs-built_in,\n.dark .hljs-built_in,\n[data-theme='dark'] .hljs-class .hljs-title,\n.dark .hljs-class .hljs-title,\n[data-theme='dark'] .hljs-title.class_,\n.dark .hljs-title.class_ {\n color: #e6c07b;\n}\n\n/* ============================================================\n * Markdown prose typography — scoped to .md-prose.\n * @tailwindcss/typography is not a dependency; these styles\n * replicate the essential subset used by MarkdownRenderer.\n * ============================================================ */\n.md-prose {\n color: #374151;\n line-height: 1.7;\n font-size: 0.9375rem;\n}\n.md-prose h1,\n.md-prose h2,\n.md-prose h3,\n.md-prose h4,\n.md-prose h5,\n.md-prose h6 {\n font-weight: 600;\n line-height: 1.25;\n color: #111827;\n margin-top: 1.5em;\n margin-bottom: 0.5em;\n}\n.md-prose h1 {\n font-size: 1.75rem;\n border-bottom: 1px solid #e5e7eb;\n padding-bottom: 0.25em;\n}\n.md-prose h2 {\n font-size: 1.375rem;\n border-bottom: 1px solid #e5e7eb;\n padding-bottom: 0.2em;\n}\n.md-prose h3 {\n font-size: 1.125rem;\n}\n.md-prose h4 {\n font-size: 1rem;\n}\n.md-prose p {\n margin-top: 0;\n margin-bottom: 0.75em;\n}\n.md-prose a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.md-prose a:hover {\n color: #1d4ed8;\n}\n.md-prose strong {\n font-weight: 600;\n}\n.md-prose em {\n font-style: italic;\n}\n.md-prose del {\n text-decoration: line-through;\n}\n/* Inline code — avoid overriding code inside pre (hljs blocks) */\n.md-prose :not(pre) > code {\n font-size: 0.875em;\n background: #f3f4f6;\n border-radius: 0.25rem;\n padding: 0.125em 0.375em;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: #be185d;\n}\n.md-prose ul,\n.md-prose ol {\n margin-top: 0;\n margin-bottom: 0.75em;\n padding-left: 1.75em;\n}\n.md-prose ul {\n list-style-type: disc;\n}\n.md-prose ol {\n list-style-type: decimal;\n}\n.md-prose li {\n margin-bottom: 0.25em;\n}\n.md-prose hr {\n border: none;\n border-top: 1px solid #e5e7eb;\n margin: 1.5em 0;\n}\n.md-prose blockquote {\n border-left: 3px solid #d1d5db;\n padding-left: 1em;\n margin: 1em 0;\n color: #6b7280;\n font-style: italic;\n}\n/* Tables — full borders with vertical separators */\n.md-prose table {\n border-collapse: collapse;\n width: 100%;\n font-size: 0.875rem;\n margin-bottom: 0.75em;\n}\n.md-prose th,\n.md-prose td {\n border: 1px solid #e5e7eb;\n padding: 0.5em 0.75em;\n text-align: left;\n}\n.md-prose th {\n font-weight: 600;\n background: #f9fafb;\n}\n\n/* Dark overrides */\n[data-theme='dark'] .md-prose,\n.dark .md-prose {\n color: #d1d5db;\n}\n[data-theme='dark'] .md-prose h1,\n.dark .md-prose h1,\n[data-theme='dark'] .md-prose h2,\n.dark .md-prose h2,\n[data-theme='dark'] .md-prose h3,\n.dark .md-prose h3,\n[data-theme='dark'] .md-prose h4,\n.dark .md-prose h4 {\n color: #f9fafb;\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose a,\n.dark .md-prose a {\n color: #60a5fa;\n}\n[data-theme='dark'] .md-prose a:hover,\n.dark .md-prose a:hover {\n color: #93c5fd;\n}\n[data-theme='dark'] .md-prose :not(pre) > code,\n.dark .md-prose :not(pre) > code {\n background: #1f2937;\n color: #f9a8d4;\n}\n[data-theme='dark'] .md-prose hr,\n.dark .md-prose hr {\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose blockquote,\n.dark .md-prose blockquote {\n border-color: #4b5563;\n color: #9ca3af;\n}\n[data-theme='dark'] .md-prose th,\n.dark .md-prose th,\n[data-theme='dark'] .md-prose td,\n.dark .md-prose td {\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose th,\n.dark .md-prose th {\n background: #1f2937;\n}\n\n/* Mermaid — improve edge / arrowhead visibility in dark mode */\n[data-theme='dark'] .mermaid-svg svg .edgePath path,\n.dark .mermaid-svg svg .edgePath path,\n[data-theme='dark'] .mermaid-svg svg .flowchart-link,\n.dark .mermaid-svg svg .flowchart-link {\n stroke: #9ca3af;\n stroke-width: 1.5px;\n}\n[data-theme='dark'] .mermaid-svg svg marker path,\n.dark .mermaid-svg svg marker path {\n fill: #9ca3af;\n stroke: #9ca3af;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Markdown/styles.css"],"sourcesContent":["/*\n * highlight.js theme — atom-one-light (default) + atom-one-dark (scoped).\n *\n * Bundled in-tree (rather than via `@import 'highlight.js/styles/...'`) so we\n * can scope the dark variant under `[data-theme=\"dark\"]` and keep theme\n * switching synchronous — no FOUC on streamed code blocks.\n *\n * Source: highlight.js v11 atom-one-light / atom-one-dark themes.\n */\n\n/* Layout (theme-agnostic) */\npre code.hljs {\n display: block;\n overflow-x: auto;\n padding: 1em;\n /* Transparent so the parent container's background is the single source of truth */\n background: transparent;\n}\ncode.hljs {\n padding: 3px 5px;\n}\n\n/* atom-one-light (default) */\n.hljs {\n color: #383a42;\n background: #fafafa;\n}\n.hljs-comment,\n.hljs-quote {\n color: #707179;\n font-style: italic;\n}\n.hljs-doctag,\n.hljs-formula,\n.hljs-keyword {\n color: #a626a4;\n}\n.hljs-deletion,\n.hljs-name,\n.hljs-section,\n.hljs-selector-tag,\n.hljs-subst {\n color: #d72f20;\n}\n.hljs-literal {\n color: #0179ac;\n}\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta .hljs-string,\n.hljs-regexp,\n.hljs-string {\n color: #3f7f3e;\n}\n.hljs-attr,\n.hljs-number,\n.hljs-selector-attr,\n.hljs-selector-class,\n.hljs-selector-pseudo,\n.hljs-template-variable,\n.hljs-type,\n.hljs-variable {\n color: #986801;\n}\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-symbol,\n.hljs-title {\n color: #2867f0;\n}\n.hljs-built_in,\n.hljs-class .hljs-title,\n.hljs-title.class_ {\n color: #986801;\n}\n.hljs-emphasis {\n font-style: italic;\n}\n.hljs-strong {\n font-weight: 700;\n}\n.hljs-link {\n text-decoration: underline;\n}\n\n/* atom-one-dark (scoped under data-theme=\"dark\") */\n[data-theme='dark'] .hljs,\n.dark .hljs {\n color: #abb2bf;\n background: #1a1d24;\n}\n[data-theme='dark'] .hljs-comment,\n.dark .hljs-comment,\n[data-theme='dark'] .hljs-quote,\n.dark .hljs-quote {\n color: #8e95a2;\n}\n[data-theme='dark'] .hljs-doctag,\n.dark .hljs-doctag,\n[data-theme='dark'] .hljs-formula,\n.dark .hljs-formula,\n[data-theme='dark'] .hljs-keyword,\n.dark .hljs-keyword {\n color: #c678dd;\n}\n[data-theme='dark'] .hljs-deletion,\n.dark .hljs-deletion,\n[data-theme='dark'] .hljs-name,\n.dark .hljs-name,\n[data-theme='dark'] .hljs-section,\n.dark .hljs-section,\n[data-theme='dark'] .hljs-selector-tag,\n.dark .hljs-selector-tag,\n[data-theme='dark'] .hljs-subst,\n.dark .hljs-subst {\n color: #e2747d;\n}\n[data-theme='dark'] .hljs-literal,\n.dark .hljs-literal {\n color: #56b6c2;\n}\n[data-theme='dark'] .hljs-addition,\n.dark .hljs-addition,\n[data-theme='dark'] .hljs-attribute,\n.dark .hljs-attribute,\n[data-theme='dark'] .hljs-meta .hljs-string,\n.dark .hljs-meta .hljs-string,\n[data-theme='dark'] .hljs-regexp,\n.dark .hljs-regexp,\n[data-theme='dark'] .hljs-string,\n.dark .hljs-string {\n color: #98c379;\n}\n[data-theme='dark'] .hljs-attr,\n.dark .hljs-attr,\n[data-theme='dark'] .hljs-number,\n.dark .hljs-number,\n[data-theme='dark'] .hljs-selector-attr,\n.dark .hljs-selector-attr,\n[data-theme='dark'] .hljs-selector-class,\n.dark .hljs-selector-class,\n[data-theme='dark'] .hljs-selector-pseudo,\n.dark .hljs-selector-pseudo,\n[data-theme='dark'] .hljs-template-variable,\n.dark .hljs-template-variable,\n[data-theme='dark'] .hljs-type,\n.dark .hljs-type,\n[data-theme='dark'] .hljs-variable,\n.dark .hljs-variable {\n color: #d19a66;\n}\n[data-theme='dark'] .hljs-bullet,\n.dark .hljs-bullet,\n[data-theme='dark'] .hljs-link,\n.dark .hljs-link,\n[data-theme='dark'] .hljs-meta,\n.dark .hljs-meta,\n[data-theme='dark'] .hljs-selector-id,\n.dark .hljs-selector-id,\n[data-theme='dark'] .hljs-symbol,\n.dark .hljs-symbol,\n[data-theme='dark'] .hljs-title,\n.dark .hljs-title {\n color: #61aeee;\n}\n[data-theme='dark'] .hljs-built_in,\n.dark .hljs-built_in,\n[data-theme='dark'] .hljs-class .hljs-title,\n.dark .hljs-class .hljs-title,\n[data-theme='dark'] .hljs-title.class_,\n.dark .hljs-title.class_ {\n color: #e6c07b;\n}\n\n/* ============================================================\n * Markdown prose typography — scoped to .md-prose.\n * @tailwindcss/typography is not a dependency; these styles\n * replicate the essential subset used by MarkdownRenderer.\n * ============================================================ */\n.md-prose {\n color: #374151;\n line-height: 1.7;\n font-size: 0.9375rem;\n}\n.md-prose h1,\n.md-prose h2,\n.md-prose h3,\n.md-prose h4,\n.md-prose h5,\n.md-prose h6 {\n font-weight: 600;\n line-height: 1.25;\n color: #111827;\n margin-top: 1.5em;\n margin-bottom: 0.5em;\n}\n.md-prose h1 {\n font-size: 1.75rem;\n border-bottom: 1px solid #e5e7eb;\n padding-bottom: 0.25em;\n}\n.md-prose h2 {\n font-size: 1.375rem;\n border-bottom: 1px solid #e5e7eb;\n padding-bottom: 0.2em;\n}\n.md-prose h3 {\n font-size: 1.125rem;\n}\n.md-prose h4 {\n font-size: 1rem;\n}\n.md-prose p {\n margin-top: 0;\n margin-bottom: 0.75em;\n}\n.md-prose a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.md-prose a:hover {\n color: #1d4ed8;\n}\n.md-prose strong {\n font-weight: 600;\n}\n.md-prose em {\n font-style: italic;\n}\n.md-prose del {\n text-decoration: line-through;\n}\n/* Inline code — avoid overriding code inside pre (hljs blocks) */\n.md-prose :not(pre) > code {\n font-size: 0.875em;\n background: #f3f4f6;\n border-radius: 0.25rem;\n padding: 0.125em 0.375em;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: #be185d;\n}\n.md-prose ul,\n.md-prose ol {\n margin-top: 0;\n margin-bottom: 0.75em;\n padding-left: 1.75em;\n}\n.md-prose ul {\n list-style-type: disc;\n}\n.md-prose ol {\n list-style-type: decimal;\n}\n.md-prose li {\n margin-bottom: 0.25em;\n}\n.md-prose hr {\n border: none;\n border-top: 1px solid #e5e7eb;\n margin: 1.5em 0;\n}\n.md-prose blockquote {\n border-left: 3px solid #d1d5db;\n padding-left: 1em;\n margin: 1em 0;\n color: #6b7280;\n font-style: italic;\n}\n/* Tables — full borders with vertical separators */\n.md-prose table {\n border-collapse: collapse;\n width: 100%;\n font-size: 0.875rem;\n margin-bottom: 0.75em;\n}\n.md-prose th,\n.md-prose td {\n border: 1px solid #e5e7eb;\n padding: 0.5em 0.75em;\n text-align: left;\n}\n.md-prose th {\n font-weight: 600;\n background: #f9fafb;\n}\n\n/* Dark overrides */\n[data-theme='dark'] .md-prose,\n.dark .md-prose {\n color: #d1d5db;\n}\n[data-theme='dark'] .md-prose h1,\n.dark .md-prose h1,\n[data-theme='dark'] .md-prose h2,\n.dark .md-prose h2,\n[data-theme='dark'] .md-prose h3,\n.dark .md-prose h3,\n[data-theme='dark'] .md-prose h4,\n.dark .md-prose h4 {\n color: #f9fafb;\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose a,\n.dark .md-prose a {\n color: #60a5fa;\n}\n[data-theme='dark'] .md-prose a:hover,\n.dark .md-prose a:hover {\n color: #93c5fd;\n}\n[data-theme='dark'] .md-prose :not(pre) > code,\n.dark .md-prose :not(pre) > code {\n background: #1f2937;\n color: #f9a8d4;\n}\n[data-theme='dark'] .md-prose hr,\n.dark .md-prose hr {\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose blockquote,\n.dark .md-prose blockquote {\n border-color: #4b5563;\n color: #9ca3af;\n}\n[data-theme='dark'] .md-prose th,\n.dark .md-prose th,\n[data-theme='dark'] .md-prose td,\n.dark .md-prose td {\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose th,\n.dark .md-prose th {\n background: #1f2937;\n}\n\n/* Mermaid — improve edge / arrowhead visibility in dark mode */\n[data-theme='dark'] .mermaid-svg svg .edgePath path,\n.dark .mermaid-svg svg .edgePath path,\n[data-theme='dark'] .mermaid-svg svg .flowchart-link,\n.dark .mermaid-svg svg .flowchart-link {\n stroke: #9ca3af;\n stroke-width: 1.5px;\n}\n[data-theme='dark'] .mermaid-svg svg marker path,\n.dark .mermaid-svg svg marker path {\n fill: #9ca3af;\n stroke: #9ca3af;\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -2853,8 +2853,6 @@ interface CodifyResult {
|
|
|
2853
2853
|
viaAlias: boolean;
|
|
2854
2854
|
/** true when the match came (partly) from the edit-distance typo fallback */
|
|
2855
2855
|
viaFuzzy?: boolean;
|
|
2856
|
-
/** true when the match came from the code itself (query looked like a code) */
|
|
2857
|
-
viaCode?: boolean;
|
|
2858
2856
|
}
|
|
2859
2857
|
|
|
2860
2858
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -2853,8 +2853,6 @@ interface CodifyResult {
|
|
|
2853
2853
|
viaAlias: boolean;
|
|
2854
2854
|
/** true when the match came (partly) from the edit-distance typo fallback */
|
|
2855
2855
|
viaFuzzy?: boolean;
|
|
2856
|
-
/** true when the match came from the code itself (query looked like a code) */
|
|
2857
|
-
viaCode?: boolean;
|
|
2858
2856
|
}
|
|
2859
2857
|
|
|
2860
2858
|
/**
|
package/dist/index.js
CHANGED
|
@@ -41,17 +41,17 @@ export { RichTextEditor, convertAngleBracketsToMustache, processDictation } from
|
|
|
41
41
|
export { Separator, separatorVariants } from './chunk-BX6BTDTR.js';
|
|
42
42
|
export { DateButton, DatePicker, RadioOption, SchedulePicker, TimeButton, TimePicker, dateButtonVariants, radioOptionVariants, timeButtonVariants } from './chunk-4DMZAVB2.js';
|
|
43
43
|
export { ScrollArea, scrollAreaVariants } from './chunk-BIT27PPD.js';
|
|
44
|
-
export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown } from './chunk-
|
|
45
|
-
export { CsvBlock } from './chunk-
|
|
46
|
-
export { HtmlPreviewBlock } from './chunk-
|
|
47
|
-
export { MermaidBlock } from './chunk-
|
|
48
|
-
export { SurveyBlock } from './chunk-
|
|
49
|
-
export { FenceBlock } from './chunk-
|
|
50
|
-
export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-
|
|
44
|
+
export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown } from './chunk-NSLR3B7K.js';
|
|
45
|
+
export { CsvBlock } from './chunk-FGIIXD37.js';
|
|
46
|
+
export { HtmlPreviewBlock } from './chunk-NCRYCG5G.js';
|
|
47
|
+
export { MermaidBlock } from './chunk-WGC3KOP7.js';
|
|
48
|
+
export { SurveyBlock } from './chunk-CPJIOOBM.js';
|
|
49
|
+
export { FenceBlock } from './chunk-MHJMUKLA.js';
|
|
50
|
+
export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-35VBGVMB.js';
|
|
51
51
|
export { PLAYBACK_SPEEDS } from './chunk-J7KWQJOB.js';
|
|
52
52
|
export { Slider, sliderRangeVariants, sliderThumbVariants, sliderTrackVariants } from './chunk-JBB25LFB.js';
|
|
53
53
|
import './chunk-RISZWWEQ.js';
|
|
54
|
-
export { MediaPlayer, inferMediaKind, mediaPlayerVariants } from './chunk-
|
|
54
|
+
export { MediaPlayer, inferMediaKind, mediaPlayerVariants } from './chunk-FGP64Z24.js';
|
|
55
55
|
export { Pagination, SimplePagination, paginationButtonVariants } from './chunk-J3BU3JBX.js';
|
|
56
56
|
export { PhoneInput, PhoneInputGroup } from './chunk-OX2RIVN7.js';
|
|
57
57
|
import './chunk-OF7NTZ2I.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mieweb/ui",
|
|
3
|
-
"version": "0.7.0
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "A themeable, accessible React component library built with Tailwind CSS",
|
|
5
5
|
"author": "Medical Informatics Engineering, Inc.",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -371,7 +371,6 @@
|
|
|
371
371
|
"ag-grid-community": "^35.1.0",
|
|
372
372
|
"ag-grid-react": "^35.1.0",
|
|
373
373
|
"autoprefixer": "^10.4.24",
|
|
374
|
-
"axe-playwright": "^2.2.2",
|
|
375
374
|
"bootstrap": "^5.3.8",
|
|
376
375
|
"codemirror": "^6.0.2",
|
|
377
376
|
"d3": "^7.9.0",
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkV25Z5GR6_cjs = require('./chunk-V25Z5GR6.cjs');
|
|
4
|
-
require('./chunk-CKD554XR.cjs');
|
|
5
|
-
require('./chunk-A2QVQF54.cjs');
|
|
6
|
-
require('./chunk-OR5DRJCW.cjs');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Object.defineProperty(exports, "CsvBlock", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () { return chunkV25Z5GR6_cjs.CsvBlock; }
|
|
13
|
-
});
|
|
14
|
-
//# sourceMappingURL=CsvBlock-2A5VEDD3.cjs.map
|
|
15
|
-
//# sourceMappingURL=CsvBlock-2A5VEDD3.cjs.map
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkBB4WQ4LV_cjs = require('./chunk-BB4WQ4LV.cjs');
|
|
4
|
-
require('./chunk-CKD554XR.cjs');
|
|
5
|
-
require('./chunk-A2QVQF54.cjs');
|
|
6
|
-
require('./chunk-OR5DRJCW.cjs');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Object.defineProperty(exports, "HtmlPreviewBlock", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () { return chunkBB4WQ4LV_cjs.HtmlPreviewBlock; }
|
|
13
|
-
});
|
|
14
|
-
//# sourceMappingURL=HtmlPreviewBlock-SYXCV5RH.cjs.map
|
|
15
|
-
//# sourceMappingURL=HtmlPreviewBlock-SYXCV5RH.cjs.map
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkCVC4NWFA_cjs = require('./chunk-CVC4NWFA.cjs');
|
|
4
|
-
require('./chunk-CKD554XR.cjs');
|
|
5
|
-
require('./chunk-A2QVQF54.cjs');
|
|
6
|
-
require('./chunk-OR5DRJCW.cjs');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Object.defineProperty(exports, "MermaidBlock", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () { return chunkCVC4NWFA_cjs.MermaidBlock; }
|
|
13
|
-
});
|
|
14
|
-
//# sourceMappingURL=MermaidBlock-AFXNP5NK.cjs.map
|
|
15
|
-
//# sourceMappingURL=MermaidBlock-AFXNP5NK.cjs.map
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkKBEKQMVY_cjs = require('./chunk-KBEKQMVY.cjs');
|
|
4
|
-
require('./chunk-CKD554XR.cjs');
|
|
5
|
-
require('./chunk-A2QVQF54.cjs');
|
|
6
|
-
require('./chunk-OR5DRJCW.cjs');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Object.defineProperty(exports, "SurveyBlock", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () { return chunkKBEKQMVY_cjs.SurveyBlock; }
|
|
13
|
-
});
|
|
14
|
-
//# sourceMappingURL=SurveyBlock-6KRNKFH5.cjs.map
|
|
15
|
-
//# sourceMappingURL=SurveyBlock-6KRNKFH5.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/MediaPlayer/MediaPlayer.tsx"],"names":["cva","React","useMediaTransport","jsx","jsxs","Button"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EA,IAAM,mBAAA,GAAsBA,0BAAA;AAAA,EAC1B,gDAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,KAAA,EAAO,EAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAMA,IAAM,gBAAA,GAAmB,gCAAA;AAGlB,SAAS,eAAe,GAAA,EAAwB;AAIrD,EAAA,MAAM,OAAO,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,CAAC,EAAE,CAAC,CAAA;AACnC,EAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,GAAI,OAAA,GAAU,OAAA;AACjD;AAeO,IAAM,WAAA,GAAoBC,gBAAA,CAAA,UAAA;AAAA,EAC/B,CACE;AAAA,IACE,GAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA,GAAW,IAAA;AAAA,IACX,OAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA,EAAc,SAAA;AAAA,IACd;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,0BAAwB,IAAI,CAAA;AAC5D,IAAA,MAAM,YAAA,GAAe,IAAA,IAAQ,cAAA,CAAe,GAAG,CAAA;AAE/C,IAAA,MAAM,YAAYC,mCAAA,CAAkB;AAAA,MAClC,YAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,QAAA,QAAA,CAAS,sDAAsD,CAAA;AAC/D,QAAA,OAAA,GAAU,GAAG,CAAA;AAAA,MACf,CAAA;AAAA,MACA,UAAA,EAAY,QAAA;AAAA,MACZ,UAAA,EAAY,UAAU,GAAG,CAAA;AAAA,KAC1B,CAAA;AAED,IAAA,MAAM,EAAE,eAAA,EAAiB,YAAA,EAAa,GAAI,SAAA;AAE1C,IAAA,MAAM,UAAA,GAAmBD,gBAAA,CAAA,WAAA;AAAA,MACvB,CAAC,EAAA,KAAmD;AAClD,QAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAC,gBAAsD,OAAA,GAAU,EAAA;AAAA,QACnE;AAAA,MACF,CAAA;AAAA,MACA,CAAC,iBAAiB,eAAe;AAAA,KACnC;AAEA,IAAMA,gBAAA,CAAA,mBAAA;AAAA,MACJ,GAAA;AAAA,MACA,OAAuB;AAAA,QACrB,UAAU,SAAA,CAAU,QAAA;AAAA,QACpB,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,OAAO,SAAA,CAAU,KAAA;AAAA,QACjB,kBAAkB,SAAA,CAAU,gBAAA;AAAA,QAC5B,eAAe,SAAA,CAAU,aAAA;AAAA,QACzB,UAAU,SAAA,CAAU,QAAA;AAAA,QACpB,iBAAiB,SAAA,CAAU,eAAA;AAAA,QAC3B,IAAI,YAAA,GAAe;AACjB,UAAA,OAAO,YAAA;AAAA,QACT;AAAA,OACF,CAAA;AAAA,MACA,CAAC,WAAW,YAAY;AAAA,KAC1B;AAEA,IAAA,MAAM,WAAA,GAAoBA,6BAAY,MAAM;AAC1C,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,YAAA,EAAc,IAAA,EAAK;AAAA,IACrB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,IAAA,MAAM,gBAAA,GAAmB;AAAA,MACvB,GAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA,EAAc;AAAA,KAChB;AAEA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,uBACEE,cAAA,CAAC,SAAI,SAAA,EAAW,mBAAA,CAAoB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAA,EACxD,QAAA,kBAAAC,eAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,SAAA,EAAU,oIAAA;AAAA,UAIV,QAAA,EAAA;AAAA,4BAAAD,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4DAAA,EACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,4BAGAA,cAAA;AAAA,cAACE,wBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,SAAA,EAAU,eAAA;AAAA,gBACV,OAAA,EAAS,WAAA;AAAA,gBACV,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,OACF,EACF,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACEF,cAAA,CAAC,SAAI,SAAA,EAAW,mBAAA,CAAoB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAA,EACvD,QAAA,EAAA,YAAA,KAAiB,OAAA;AAAA;AAAA;AAAA;AAAA,sBAIhBA,cAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,UAAA;AAAA,UACL,WAAA,EAAW,IAAA;AAAA,UACX,SAAA,EAAU,oDAAA;AAAA,UACT,GAAG;AAAA;AAAA;AACN;AAAA;AAAA,sBAGAA,cAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,UAAA;AAAA,UACL,SAAA,EAAU,uBAAA;AAAA,UACT,GAAG;AAAA;AAAA;AACN,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-7QXG5BBB.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Button } from '../Button';\nimport { useMediaTransport } from '../../hooks/useMediaTransport';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type MediaPlayerState =\n | 'idle'\n | 'loading'\n | 'playing'\n | 'paused'\n | 'error';\n\nexport type MediaKind = 'video' | 'audio';\n\n/** Ref handle for controlling {@link MediaPlayer} programmatically. */\nexport interface MediaPlayerRef {\n /** Seek to a specific time in milliseconds. */\n seekToMs: (timeMs: number) => void;\n /** Start playback. */\n play: () => void;\n /** Pause playback. */\n pause: () => void;\n /** Get current playback time in milliseconds. */\n getCurrentTimeMs: () => number;\n /** Get total duration in milliseconds. */\n getDurationMs: () => number;\n /** Whether playback is currently paused. */\n isPaused: () => boolean;\n /** Set playback speed multiplier. */\n setPlaybackRate: (rate: number) => void;\n /**\n * The underlying media element.\n * Escape hatch for host integrations (e.g. thumbnail capture); prefer the\n * typed methods above for playback control.\n */\n mediaElement: HTMLVideoElement | HTMLAudioElement | null;\n}\n\nexport interface MediaPlayerProps extends VariantProps<\n typeof mediaPlayerVariants\n> {\n /** Media source URL. */\n src: string;\n /** Force the media kind; when omitted it is inferred from the src extension. */\n kind?: MediaKind;\n /** Whether to show native controls (default `true`). */\n controls?: boolean;\n /** Callback when playback state changes. */\n onStateChange?: (state: MediaPlayerState) => void;\n /** Callback when playback ends. */\n onEnded?: () => void;\n /** Callback when an error occurs. */\n onError?: (error: Error) => void;\n /** Callback on time updates (milliseconds). */\n onTimeUpdate?: (currentTimeMs: number, durationMs: number) => void;\n /** Additional class name. */\n className?: string;\n /** Accessible label for the media element. */\n 'aria-label'?: string;\n /**\n * Transitional: exposes the raw media element to legacy consumers.\n * Prefer {@link MediaPlayerRef} for playback control.\n */\n mediaElementRef?: React.RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst mediaPlayerVariants = cva(\n 'flex h-full w-full items-center justify-center',\n {\n variants: {\n variant: {\n plain: '',\n card: 'rounded-xl border border-border bg-card text-card-foreground p-2',\n },\n },\n defaultVariants: {\n variant: 'plain',\n },\n }\n);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst VIDEO_EXTENSIONS = /\\.(mp4|mov|avi|webm|mkv|m4v)$/i;\n\n/** Infer media kind from a URL's file extension; defaults to audio. */\nexport function inferMediaKind(src: string): MediaKind {\n // Strip any query string / fragment before matching. Testing the extension\n // against the full URL required a trailing `.*`, which backtracks\n // polynomially on crafted inputs (ReDoS); splitting first is linear.\n const path = src.split(/[?#]/, 1)[0];\n return VIDEO_EXTENSIONS.test(path) ? 'video' : 'audio';\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Media playback surface for audio and video with a shared imperative handle.\n *\n * Renders a native `<video>` or `<audio>` element (kind inferred from the src\n * extension unless forced) with themed error/retry handling. Playback state and\n * controls come from the shared {@link useMediaTransport} hook and are exposed\n * through {@link MediaPlayerRef} (all times in milliseconds) — consumers should\n * not reach into the DOM element directly.\n */\nexport const MediaPlayer = React.forwardRef<MediaPlayerRef, MediaPlayerProps>(\n (\n {\n src,\n kind,\n controls = true,\n variant,\n onStateChange,\n onEnded,\n onError,\n onTimeUpdate,\n className,\n 'aria-label': ariaLabel,\n mediaElementRef,\n },\n ref\n ) => {\n const [error, setError] = React.useState<string | null>(null);\n const resolvedKind = kind ?? inferMediaKind(src);\n\n const transport = useMediaTransport({\n onTimeUpdate,\n onStateChange,\n onEnded,\n onError: (err) => {\n setError('Unable to load media. The server may be unavailable.');\n onError?.(err);\n },\n endedState: 'paused',\n errorLabel: `media: ${src}`,\n });\n\n const { setMediaElement, mediaElement } = transport;\n\n const setElement = React.useCallback(\n (el: HTMLVideoElement | HTMLAudioElement | null) => {\n setMediaElement(el);\n if (mediaElementRef) {\n (mediaElementRef as React.MutableRefObject<typeof el>).current = el;\n }\n },\n [setMediaElement, mediaElementRef]\n );\n\n React.useImperativeHandle(\n ref,\n (): MediaPlayerRef => ({\n seekToMs: transport.seekToMs,\n play: transport.play,\n pause: transport.pause,\n getCurrentTimeMs: transport.getCurrentTimeMs,\n getDurationMs: transport.getDurationMs,\n isPaused: transport.isPaused,\n setPlaybackRate: transport.setPlaybackRate,\n get mediaElement() {\n return mediaElement;\n },\n }),\n [transport, mediaElement]\n );\n\n const handleRetry = React.useCallback(() => {\n setError(null);\n mediaElement?.load();\n }, [mediaElement]);\n\n const sharedMediaProps = {\n src,\n controls,\n 'aria-label': ariaLabel,\n };\n\n if (error) {\n return (\n <div className={mediaPlayerVariants({ variant, className })}>\n <div\n role=\"alert\"\n className=\"border-destructive/30 bg-destructive/10 flex min-h-36 flex-col items-center justify-center gap-3 rounded-lg border p-8 text-center\"\n >\n {/* destructive-700/300 instead of the base token: #dc2626 on the\n destructive/10 tint is 4.14:1 — below WCAG AA (axe: color-contrast). */}\n <p className=\"text-destructive-700 dark:text-destructive-300 m-0 text-sm\">\n {error}\n </p>\n {/* bg-background: the outline button is transparent, and its text on\n the destructive/10 tint sits exactly at the 4.5:1 AA boundary. */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"bg-background\"\n onClick={handleRetry}\n >\n Retry\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className={mediaPlayerVariants({ variant, className })}>\n {resolvedKind === 'video' ? (\n // Generic media surface: caption tracks belong to the consumer's media\n // resource and are supplied via children, not this transport component.\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n ref={setElement as React.Ref<HTMLVideoElement>}\n playsInline\n className=\"h-auto max-h-full w-auto max-w-full object-contain\"\n {...sharedMediaProps}\n />\n ) : (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <audio\n ref={setElement as React.Ref<HTMLAudioElement>}\n className=\"my-4 w-[90%] max-w-lg\"\n {...sharedMediaProps}\n />\n )}\n </div>\n );\n }\n);\n\nMediaPlayer.displayName = 'MediaPlayer';\n\nexport { mediaPlayerVariants };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Markdown/FenceBlock.tsx"],"names":["useState","useRef","useEffect","useCallback","jsxs","jsx","Button","Eye","Code","Check","ClipboardCopy"],"mappings":"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","file":"chunk-CKD554XR.cjs","sourcesContent":["/**\n * FenceBlock — Base wrapper for code blocks with copy, raw view toggle, and errors.\n */\nimport { Check, ClipboardCopy, Code, Eye } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\n\nexport interface FenceBlockProps {\n code: string;\n language?: string;\n supportsRawView?: boolean;\n error?: string;\n children: React.ReactNode;\n /** Extra buttons rendered in the header before the copy button */\n headerActions?: React.ReactNode;\n}\n\ntype CopyState = 'idle' | 'copying' | 'success' | 'error';\n\nexport const FenceBlock: React.FC<FenceBlockProps> = ({\n code,\n language,\n supportsRawView = false,\n error,\n children,\n headerActions,\n}) => {\n const [copyState, setCopyState] = useState<CopyState>('idle');\n const [showRaw, setShowRaw] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n []\n );\n\n const scheduleReset = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopyState('idle'), 2000);\n }, []);\n\n const handleCopy = useCallback(async () => {\n if (copyState === 'copying') return;\n setCopyState('copying');\n try {\n await navigator.clipboard.writeText(code);\n setCopyState('success');\n scheduleReset();\n } catch {\n try {\n const textarea = document.createElement('textarea');\n textarea.value = code;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n setCopyState('success');\n } catch {\n setCopyState('error');\n }\n scheduleReset();\n }\n }, [code, copyState, scheduleReset]);\n\n return (\n <div className=\"group relative my-3 overflow-hidden rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-[#1a1d24]\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-white/[0.08]\">\n <span className=\"text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n {language\n ? language.charAt(0).toUpperCase() + language.slice(1)\n : 'Text'}\n </span>\n <div className=\"flex items-center gap-1\">\n {headerActions}\n {supportsRawView && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowRaw((v) => !v)}\n aria-label={showRaw ? 'Show rendered view' : 'Show raw code'}\n className=\"h-7 w-7 p-0\"\n >\n {showRaw ? (\n <Eye className=\"h-3.5 w-3.5\" />\n ) : (\n <Code className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n aria-label=\"Copy code\"\n className=\"h-7 w-7 p-0\"\n >\n {copyState === 'success' ? (\n <Check className=\"h-3.5 w-3.5 text-green-500\" />\n ) : (\n <ClipboardCopy className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </div>\n </div>\n\n {error ? (\n <div className=\"p-3\">\n <div className=\"rounded-md bg-red-50 p-3 text-sm text-red-800 dark:bg-red-900/20 dark:text-red-300\">\n {error}\n </div>\n <pre className=\"mt-2 overflow-x-auto text-xs whitespace-pre-wrap text-neutral-600 dark:text-neutral-400\">\n <code>{code}</code>\n </pre>\n </div>\n ) : showRaw ? (\n <pre\n className=\"overflow-x-auto p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus (axe: scrollable-region-focusable)\n tabIndex={0}\n role=\"region\"\n aria-label=\"Raw code\"\n >\n <code>{code}</code>\n </pre>\n ) : (\n <div className=\"overflow-x-auto\">{children}</div>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
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","jsx","FenceBlock","lazy","Suspense","useState","useEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAAS,WAAW,GAAA,EAAqB;AACvC,EAAA,OAAO,IACJ,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,MAAM,MAAM,CAAA,CACpB,QAAQ,IAAA,EAAM,MAAM,EACpB,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAC3B;AAcAA,qBAAA,CAAK,gBAAA,CAAiB,cAAcC,2BAAU,CAAA;AAC9CD,qBAAA,CAAK,gBAAA,CAAiB,cAAcE,2BAAU,CAAA;AAC9CF,qBAAA,CAAK,gBAAA,CAAiB,UAAUG,uBAAM,CAAA;AACtCH,qBAAA,CAAK,gBAAA,CAAiB,QAAQI,qBAAI,CAAA;AAClCJ,qBAAA,CAAK,gBAAA,CAAiB,OAAOK,oBAAG,CAAA;AAChCL,qBAAA,CAAK,gBAAA,CAAiB,QAAQK,oBAAG,CAAA;AACjCL,qBAAA,CAAK,gBAAA,CAAiB,OAAOM,oBAAG,CAAA;AAChCN,qBAAA,CAAK,gBAAA,CAAiB,QAAQO,qBAAI,CAAA;AAClCP,qBAAA,CAAK,gBAAA,CAAiB,SAASO,qBAAI,CAAA;AACnCP,qBAAA,CAAK,gBAAA,CAAiB,OAAOQ,oBAAG,CAAA;AAChCR,qBAAA,CAAK,gBAAA,CAAiB,QAAQS,qBAAI,CAAA;AAClCT,qBAAA,CAAK,gBAAA,CAAiB,OAAOS,qBAAI,CAAA;AACjCT,qBAAA,CAAK,gBAAA,CAAiB,YAAYU,yBAAQ,CAAA;AAC1CV,qBAAA,CAAK,gBAAA,CAAiB,MAAMU,yBAAQ,CAAA;AAEpC,IAAM,aAAA,GAAwD;AAAA,EAC5D,IAAA,EAAM,MAAM,OAAO,iCAAiC,CAAA;AAAA,EACpD,GAAA,EAAK,MAAM,OAAO,gCAAgC,CAAA;AAAA,EAClD,KAAA,EAAO,MAAM,OAAO,gCAAgC,CAAA;AAAA,EACpD,CAAA,EAAG,MAAM,OAAO,8BAA8B,CAAA;AAAA,EAC9C,MAAA,EAAQ,MAAM,OAAO,mCAAmC,CAAA;AAAA,EACxD,GAAA,EAAK,MAAM,OAAO,gCAAgC,CAAA;AAAA,EAClD,IAAA,EAAM,MAAM,OAAO,iCAAiC,CAAA;AAAA,EACpD,EAAA,EAAI,MAAM,OAAO,+BAA+B,CAAA;AAAA,EAChD,IAAA,EAAM,MAAM,OAAO,iCAAiC,CAAA;AAAA,EACpD,IAAA,EAAM,MAAM,OAAO,iCAAiC,CAAA;AAAA,EACpD,CAAA,EAAG,MAAM,OAAO,8BAA8B,CAAA;AAAA,EAC9C,QAAA,EAAU,MAAM,OAAO,qCAAqC,CAAA;AAAA,EAC5D,UAAA,EAAY,MAAM,OAAO,uCAAuC;AAClE,CAAA;AAEA,IAAM,eAAA,uBAAsB,GAAA,CAAY;AAAA,EACtC,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,eAAe,eAAe,IAAA,EAAgC;AAC5D,EAAA,MAAM,GAAA,GAAM,KAAK,WAAA,EAAY;AAC7B,EAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,IAAA;AACrC,EAAA,MAAM,MAAA,GAAS,cAAc,GAAG,CAAA;AAChC,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAO,MAAM,MAAA,EAAO;AAC1B,IAAAV,qBAAA,CAAK,gBAAA;AAAA,MACH,GAAA;AAAA,MACA,GAAA,CAAI;AAAA,KACN;AACA,IAAA,eAAA,CAAgB,IAAI,GAAG,CAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,aAAA,CAAc,MAAc,IAAA,EAAuB;AACjE,EAAA,IAAI,QAAQ,eAAA,CAAgB,GAAA,CAAI,IAAA,CAAK,WAAA,EAAa,CAAA,EAAG;AACnD,IAAA,IAAI;AACF,MAAA,OAAOA,qBAAA,CAAK,UAAU,IAAA,EAAM,EAAE,UAAU,IAAA,CAAK,WAAA,EAAY,EAAG,CAAA,CAAE,KAAA;AAAA,IAChE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAASA,qBAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AACtC,IAAA,IAAI,MAAA,CAAO,SAAA,GAAY,CAAA,EAAG,OAAO,MAAA,CAAO,KAAA;AAAA,EAC1C,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,WAAW,IAAI,CAAA;AACxB;AAEA,SAAS,SAAS,IAAA,EAAsB;AACtC,EAAA,OAAOW,0BAAA,CAAU,SAAS,IAAA,EAAM;AAAA,IAC9B,QAAA,EAAU;AAAA,MACR,QAAA;AAAA,MACA,KAAA;AAAA,MACA,iBAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACF,GACD,CAAA;AACH;AAGA,IAAM,EAAA,GAAK,UAAA;AAEX,IAAI,OAAO,QAAA,KAAa,WAAA,IAAe,CAAC,GAAG,6BAAA,EAA+B;AACxE,EAAA,EAAA,CAAG,6BAAA,GAAgC,IAAA;AACnC,EAAAA,0BAAA,CAAU,OAAA,CAAQ,yBAAA,EAA2B,CAAC,IAAA,KAAkB;AAC9D,IAAA,MAAM,WACH,OAAO,iBAAA,KAAsB,eAC5B,IAAA,YAAgB,iBAAA,IAClB,KAAK,QAAA,KAAa,GAAA;AACpB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,CAAK,YAAA,CAAa,UAAU,QAAQ,CAAA;AACpC,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,qBAAqB,CAAA;AAAA,IAChD;AAAA,EACF,CAAC,CAAA;AACH;AAEA,IAAI,YAAA,GAAe,CAAA;AAEnB,SAAS,cAAA,GAAiB;AACxB,EAAA,MAAM,QAAA,GAAW,IAAIC,aAAA,CAAO,QAAA,EAAS;AAErC,EAAA,QAAA,CAAS,IAAA,GAAO,SAAyB,KAAA,EAAoB;AAC3D,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,GAAO,IAAG,GAAI,KAAA;AAClC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,EAAY,CAAE,IAAA,EAAK;AAC3C,IAAA,MAAM,OAAA,GAAU,CAAA,MAAA,EAAS,EAAE,YAAY,CAAA,CAAA;AACvC,IAAA,MAAM,WAAA,GAAc,mBAAmB,IAAI,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,mBAAA;AAEjB,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,SAAA;AACH,QAAA,OAAO,CAAA,8CAAA,EAAiD,OAAO,CAAA,aAAA,EAAgB,WAAW,KAAK,QAAQ,CAAA,OAAA,CAAA;AAAA,MACzG,KAAK,KAAA;AACH,QAAA,OAAO,CAAA,0CAAA,EAA6C,OAAO,CAAA,aAAA,EAAgB,WAAW,KAAK,QAAQ,CAAA,OAAA,CAAA;AAAA,MACrG,KAAK,QAAA;AACH,QAAA,OAAO,CAAA,6CAAA,EAAgD,OAAO,CAAA,aAAA,EAAgB,WAAW,KAAK,QAAQ,CAAA,OAAA,CAAA;AAAA,MACxG,KAAK,MAAA;AACH,QAAA,OAAO,CAAA,mDAAA,EAAsD,OAAO,CAAA,aAAA,EAAgB,WAAW,KAAK,QAAQ,CAAA,OAAA,CAAA;AAAA,MAC9G;AACE,QAAA,OAAO,CAAA,2CAAA,EAA8C,OAAO,CAAA,aAAA,EAAgB,WAAW,gBAAgB,UAAA,CAAW,UAAU,CAAC,CAAA,EAAA,EAAK,QAAQ,CAAA,OAAA,CAAA;AAAA;AAC9I,EACF,CAAA;AAEA,EAAA,QAAA,CAAS,IAAA,GAAO,SAAyB,KAAA,EAAoB;AAC3D,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,EAAO,GAAI,KAAA;AAChC,IAAA,MAAM,IAAA,GACJ,IAAA,IAAQ,OAAQ,IAAA,CAAiC,MAAA,KAAW,QAAA,GAEtD,IAAA,CAGA,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA,GAC3B,KAAA,CAAM,IAAA;AACZ,IAAA,MAAM,YAAY,KAAA,GAAQ,CAAA,QAAA,EAAW,UAAA,CAAW,KAAK,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAC5D,IAAA,OAAO,YAAY,UAAA,CAAW,IAAI,CAAC,CAAA,2CAAA,EAA8C,SAAS,IAAI,IAAI,CAAA,IAAA,CAAA;AAAA,EACpG,CAAA;AAEA,EAAA,QAAA,CAAS,KAAA,GAAQ,SAAyB,KAAA,EAAqB;AAC7D,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CACvB,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,MAAM,OAAA,GACJ,IAAA,IAAQ,OAAQ,IAAA,CAAiC,MAAA,KAAW,QAAA,GAEtD,IAAA,CAKA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA,GAChC,IAAA,CAAK,IAAA;AACX,MAAA,OAAO,OAAO,OAAO,CAAA,KAAA,CAAA;AAAA,IACvB,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAEV,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CACpB,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,MAAA,MAAM,KAAA,GAAQ,GAAA,CACX,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,QAAA,MAAM,OAAA,GACJ,IAAA,IACA,OAAQ,IAAA,CAAiC,MAAA,KAAW,QAAA,GAE9C,IAAA,CAKA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA,GAChC,IAAA,CAAK,IAAA;AACX,QAAA,OAAO,OAAO,OAAO,CAAA,KAAA,CAAA;AAAA,MACvB,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,MAAA,OAAO,OAAO,KAAK,CAAA,KAAA,CAAA;AAAA,IACrB,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAEV,IAAA,OAAO,CAAA,sHAAA,EAAyH,WAAW,CAAA,gFAAA,EAAmF,QAAQ,CAAA,sBAAA,CAAA;AAAA,EACxO,CAAA;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,iBAAA,GAAmC;AAC1C,EAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,QAAQ,IAAA,EAAM,QAAA,EAAU,gBAAe,EAAE;AAC/D;AAEA,IAAM,SAAA,GAAY,GAAA;AAClB,IAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,SAAS,QAAA,CAAS,KAAa,KAAA,EAAe;AAC5C,EAAA,IAAI,WAAA,CAAY,QAAQ,SAAA,EAAW;AACjC,IAAA,WAAA,CAAY,OAAO,WAAA,CAAY,IAAA,EAAK,CAAE,IAAA,GAAO,KAAe,CAAA;AAAA,EAC9D;AACA,EAAA,WAAA,CAAY,GAAA,CAAI,KAAK,KAAK,CAAA;AAC5B;AAWO,SAAS,WAAA,GAAiC;AAC/C,EAAA,MAAM,QAAA,GAAWC,aAAO,WAAW,CAAA;AAEnC,EAAA,MAAM,MAAA,GAASC,iBAAA,CAAY,CAAC,IAAA,EAAc,QAAA,KAA8B;AACtE,IAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,IAAA,MAAM,MAAM,QAAA,IAAY,IAAA;AACxB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACvC,IAAA,IAAI,QAAQ,OAAO,MAAA;AAEnB,IAAA,MAAM,GAAA,GAAMF,aAAA,CAAO,KAAA,CAAM,IAAA,EAAM;AAAA,MAC7B,GAAG,iBAAA,EAAkB;AAAA,MACrB,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,SAAS,GAAG,CAAA;AAC1B,IAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAcE,iBAAA;AAAA,IAClB,OAAO,MAAc,QAAA,KAAuC;AAC1D,MAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,MAAA,MAAM,MAAM,QAAA,IAAY,IAAA;AACxB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACvC,MAAA,IAAI,QAAQ,OAAO,MAAA;AAGnB,MAAA,MAAM,UAAA,GAAa,uBAAA;AACnB,MAAA,IAAI,KAAA;AACJ,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,OAAA,CAAQ,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC/C,QAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MACrB;AACA,MAAA,MAAM,OAAA,CAAQ,IAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,cAAA,CAAe,CAAC,CAAC,CAAC,CAAA;AAErD,MAAA,MAAM,MAAM,MAAMF,aAAA,CAAO,KAAA,CAAM,IAAA,EAAM,mBAAmB,CAAA;AACxD,MAAA,MAAM,KAAA,GAAQ,SAAS,GAAG,CAAA;AAC1B,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,UAAA,GAAaE,kBAAY,MAAM;AACnC,IAAA,QAAA,CAAS,QAAQ,KAAA,EAAM;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAOC,aAAA;AAAA,IACL,OAAO,EAAE,MAAA,EAAQ,WAAA,EAAa,UAAA,EAAW,CAAA;AAAA,IACzC,CAAC,MAAA,EAAQ,WAAA,EAAa,UAAU;AAAA,GAClC;AACF;ACtRO,IAAM,SAAA,GAAsC,CAAC,EAAE,IAAA,EAAM,UAAS,KAAM;AACzE,EAAA,MAAM,IAAA,GAAOA,aAAAA,CAAQ,MAAM,aAAA,CAAc,IAAA,EAAM,QAAQ,CAAA,EAAG,CAAC,IAAA,EAAM,QAAQ,CAAC,CAAA;AAE1E,EAAA,uBACEC,cAAA,CAACC,4BAAA,EAAA,EAAW,IAAA,EAAY,QAAA,EAGtB,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iDAAA;AAAA,MAEV,QAAA,EAAU,CAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,QAAA,GAAW,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAA,GAAU,MAAA;AAAA,MAE5C,QAAA,kBAAAA,cAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,yBAAA;AAAA,UACV,uBAAA,EAAyB,EAAE,MAAA,EAAQ,IAAA;AAAK;AAAA;AAC1C;AAAA,GACF,EACF,CAAA;AAEJ;AC5BA,IAAM,QAAA,GAAWE,UAAA;AAAA,EAAK,MACpB,OAAO,yBAAY,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE;AAC5D,CAAA;AACA,IAAM,gBAAA,GAAmBA,UAAA;AAAA,EAAK,MAC5B,OAAO,iCAAoB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,gBAAA,EAAiB,CAAE;AAC5E,CAAA;AACA,IAAM,YAAA,GAAeA,UAAA;AAAA,EAAK,MACxB,OAAO,6BAAgB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,YAAA,EAAa,CAAE;AACpE,CAAA;AACA,IAAM,WAAA,GAAcA,UAAA;AAAA,EAAK,MACvB,OAAO,4BAAe,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,WAAA,EAAY,CAAE;AAClE,CAAA;AAEA,IAAM,gBAA0B,sBAC9BF,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAgE,QAAA,EAAA,eAAA,EAE/E,CAAA;AAeF,IAAM,QAAA,GACJ,oHAAA;AAaF,SAAS,UAAU,IAAA,EAAyB;AAC1C,EAAA,MAAM,WAAsB,EAAC;AAC7B,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AACvC,IAAA,IAAI,CAAA,CAAE,KAAA,GAAQ,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA,CAAE,KAAK,GAAG,CAAA;AACrE,IAAA,MAAM,YAAY,CAAA,CAAE,CAAC,GAAG,KAAA,CAAM,qBAAqB,IAAI,CAAC,CAAA;AACxD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,MACT,EAAA,EAAI,EAAE,CAAC,CAAA;AAAA,MACP,OAAO,MAAM;AACX,QAAA,IAAI;AACF,UAAA,OAAO,kBAAA,CAAmB,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,QAChC,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,EAAE,CAAC,CAAA;AAAA,QACZ;AAAA,MACF,CAAA,GAAG;AAAA,MACH,MAAM,SAAA,IAAa;AAAA,KACpB,CAAA;AACD,IAAA,IAAA,GAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,EACxB;AACA,EAAA,IAAI,IAAA,GAAO,IAAA,CAAK,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG,CAAA;AAChE,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,YAAY,GAAA,EAAoC;AACvD,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,qBACZA,cAAAA,CAACG,cAAA,EAAA,EAAsB,QAAA,kBAAUH,cAAAA,CAAC,aAAA,EAAA,EAAc,CAAA,EAC7C,QAAA,EAAA,IAAA,EAAA,EADY,IAAI,EAEnB,CAAA;AAEF,EAAA,QAAQ,IAAI,IAAA;AAAM,IAChB,KAAK,SAAA;AACH,MAAA,OAAO,IAAA,iBAAKA,cAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,IAAI,IAAA,EAAM,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,CAAE,CAAA;AAAA,IAC1D,KAAK,KAAA;AACH,MAAA,OAAO,IAAA,iBAAKA,cAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,IAAI,IAAA,EAAM,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,CAAE,CAAA;AAAA,IACtD,KAAK,QAAA;AACH,MAAA,OAAO,IAAA,iBAAKA,cAAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,IAAI,IAAA,EAAM,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,CAAE,CAAA;AAAA,IACzD,KAAK,cAAA;AACH,MAAA,OAAO,IAAA,iBAAKA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,IAAA,EAAM,IAAI,IAAA,EAAM,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,CAAE,CAAA;AAAA,IAC9D,KAAK,MAAA;AACH,MAAA,OAAO,IAAA;AAAA,wBACLA,eAAC,SAAA,EAAA,EAAU,IAAA,EAAM,IAAI,IAAA,EAAM,QAAA,EAAU,GAAA,CAAI,IAAA,IAAQ,MAAA,EAAW;AAAA,OAC9D;AAAA,IACF;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEO,IAAM,mBAAoD,CAAC;AAAA,EAChE,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAY,GAAI,WAAA,EAAY;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAII,eAAS,EAAE,CAAA;AAEnC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAIhB,IAAA,MAAM,YAAA,GAAe,YACjB,QAAA,GACE,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,MAAM,CAAA,CAAA,GAC3B,MAAA,GACF,QAAA;AAEJ,IAAA,eAAe,QAAA,GAAW;AACxB,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,IAAA,EAAM,YAAY,CAAA;AACrD,MAAA,IAAI,CAAC,SAAA,EAAW,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAClC;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,YAAY,CAAC,CAAA;AAAA,IACpC,CAAA,MAAO;AACL,MAAA,KAAK,QAAA,EAAS;AAAA,IAChB;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,GAAG,CAAC,IAAA,EAAM,UAAU,SAAA,EAAW,MAAA,EAAQ,WAAW,CAAC,CAAA;AAEnD,EAAA,MAAM,QAAA,GAAW,UAAU,IAAI,CAAA;AAC/B,EAAA,MAAM,UAAA,GAAa,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAEhD,EAAA,uBACEL,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YACb,QAAA,EAAA,QAAA,CAAS,GAAA;AAAA,IAAI,CAAC,GAAA,EAAK,CAAA,KAClB,MAAA,IAAU,GAAA,mBACRA,cAAAA,CAAC,KAAA,EAAA,EAAY,uBAAA,EAAyB,EAAE,QAAQ,GAAA,CAAI,IAAA,MAA1C,CAAkD,CAAA,GAE5D,YAAY,GAAG;AAAA,GAEnB,EACF,CAAA;AAEJ","file":"chunk-JCNPVK74.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 {/* Focusable so keyboard users can horizontally scroll long lines\n (axe: scrollable-region-focusable). */}\n <pre\n className=\"m-0 overflow-x-auto !bg-transparent p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus\n tabIndex={0}\n role=\"region\"\n aria-label={language ? `${language} code` : 'Code'}\n >\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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Markdown/FenceBlock.tsx"],"names":[],"mappings":";;;;;AAoBO,IAAM,aAAwC,CAAC;AAAA,EACpD,IAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAoB,MAAM,CAAA;AAC5D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,OAA6C,IAAI,CAAA;AAElE,EAAA,SAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AAAA,IACrD,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,QAAA,CAAS,UAAU,UAAA,CAAW,MAAM,YAAA,CAAa,MAAM,GAAG,GAAI,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAa,YAAY,YAAY;AACzC,IAAA,IAAI,cAAc,SAAA,EAAW;AAC7B,IAAA,YAAA,CAAa,SAAS,CAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,aAAA,EAAc;AAAA,IAChB,CAAA,CAAA,MAAQ;AACN,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,QAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AACjB,QAAA,QAAA,CAAS,MAAM,QAAA,GAAW,OAAA;AAC1B,QAAA,QAAA,CAAS,MAAM,OAAA,GAAU,GAAA;AACzB,QAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAClC,QAAA,QAAA,CAAS,MAAA,EAAO;AAChB,QAAA,QAAA,CAAS,YAAY,MAAM,CAAA;AAC3B,QAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAClC,QAAA,YAAA,CAAa,SAAS,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AACN,QAAA,YAAA,CAAa,OAAO,CAAA;AAAA,MACtB;AACA,MAAA,aAAA,EAAc;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,SAAA,EAAW,aAAa,CAAC,CAAA;AAEnC,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kIAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oGAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA,QAAA,GACG,SAAS,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,QAAA,CAAS,KAAA,CAAM,CAAC,IACnD,MAAA,EACN,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,aAAA;AAAA,QACA,eAAA,oBACC,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,SAAS,MAAM,UAAA,CAAW,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,YACnC,YAAA,EAAY,UAAU,oBAAA,GAAuB,eAAA;AAAA,YAC7C,SAAA,EAAU,aAAA;AAAA,YAET,QAAA,EAAA,OAAA,uBACE,GAAA,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,mBAE7B,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,SAElC;AAAA,wBAEF,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,UAAA;AAAA,YACT,YAAA,EAAW,WAAA;AAAA,YACX,SAAA,EAAU,aAAA;AAAA,YAET,QAAA,EAAA,SAAA,KAAc,SAAA,mBACb,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,8BAA6B,CAAA,mBAE9C,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA;AAE3C,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,KAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oFAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,0BACC,KAAA,EAAA,EAAI,SAAA,EAAU,2FACb,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,gBAAK,CAAA,EACd;AAAA,KAAA,EACF,IACE,OAAA,mBACF,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,6BAAA;AAAA,QAEV,QAAA,EAAU,CAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,UAAA;AAAA,QAEX,QAAA,kBAAA,GAAA,CAAC,UAAM,QAAA,EAAA,IAAA,EAAK;AAAA;AAAA,KACd,mBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAmB,QAAA,EAAS;AAAA,GAAA,EAE/C,CAAA;AAEJ","file":"chunk-RHYIFIT5.js","sourcesContent":["/**\n * FenceBlock — Base wrapper for code blocks with copy, raw view toggle, and errors.\n */\nimport { Check, ClipboardCopy, Code, Eye } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\n\nexport interface FenceBlockProps {\n code: string;\n language?: string;\n supportsRawView?: boolean;\n error?: string;\n children: React.ReactNode;\n /** Extra buttons rendered in the header before the copy button */\n headerActions?: React.ReactNode;\n}\n\ntype CopyState = 'idle' | 'copying' | 'success' | 'error';\n\nexport const FenceBlock: React.FC<FenceBlockProps> = ({\n code,\n language,\n supportsRawView = false,\n error,\n children,\n headerActions,\n}) => {\n const [copyState, setCopyState] = useState<CopyState>('idle');\n const [showRaw, setShowRaw] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n []\n );\n\n const scheduleReset = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopyState('idle'), 2000);\n }, []);\n\n const handleCopy = useCallback(async () => {\n if (copyState === 'copying') return;\n setCopyState('copying');\n try {\n await navigator.clipboard.writeText(code);\n setCopyState('success');\n scheduleReset();\n } catch {\n try {\n const textarea = document.createElement('textarea');\n textarea.value = code;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n setCopyState('success');\n } catch {\n setCopyState('error');\n }\n scheduleReset();\n }\n }, [code, copyState, scheduleReset]);\n\n return (\n <div className=\"group relative my-3 overflow-hidden rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-[#1a1d24]\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-white/[0.08]\">\n <span className=\"text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n {language\n ? language.charAt(0).toUpperCase() + language.slice(1)\n : 'Text'}\n </span>\n <div className=\"flex items-center gap-1\">\n {headerActions}\n {supportsRawView && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowRaw((v) => !v)}\n aria-label={showRaw ? 'Show rendered view' : 'Show raw code'}\n className=\"h-7 w-7 p-0\"\n >\n {showRaw ? (\n <Eye className=\"h-3.5 w-3.5\" />\n ) : (\n <Code className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n aria-label=\"Copy code\"\n className=\"h-7 w-7 p-0\"\n >\n {copyState === 'success' ? (\n <Check className=\"h-3.5 w-3.5 text-green-500\" />\n ) : (\n <ClipboardCopy className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </div>\n </div>\n\n {error ? (\n <div className=\"p-3\">\n <div className=\"rounded-md bg-red-50 p-3 text-sm text-red-800 dark:bg-red-900/20 dark:text-red-300\">\n {error}\n </div>\n <pre className=\"mt-2 overflow-x-auto text-xs whitespace-pre-wrap text-neutral-600 dark:text-neutral-400\">\n <code>{code}</code>\n </pre>\n </div>\n ) : showRaw ? (\n <pre\n className=\"overflow-x-auto p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus (axe: scrollable-region-focusable)\n tabIndex={0}\n role=\"region\"\n aria-label=\"Raw code\"\n >\n <code>{code}</code>\n </pre>\n ) : (\n <div className=\"overflow-x-auto\">{children}</div>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/MediaPlayer/MediaPlayer.tsx"],"names":[],"mappings":"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","file":"chunk-S6Z3KDEM.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Button } from '../Button';\nimport { useMediaTransport } from '../../hooks/useMediaTransport';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type MediaPlayerState =\n | 'idle'\n | 'loading'\n | 'playing'\n | 'paused'\n | 'error';\n\nexport type MediaKind = 'video' | 'audio';\n\n/** Ref handle for controlling {@link MediaPlayer} programmatically. */\nexport interface MediaPlayerRef {\n /** Seek to a specific time in milliseconds. */\n seekToMs: (timeMs: number) => void;\n /** Start playback. */\n play: () => void;\n /** Pause playback. */\n pause: () => void;\n /** Get current playback time in milliseconds. */\n getCurrentTimeMs: () => number;\n /** Get total duration in milliseconds. */\n getDurationMs: () => number;\n /** Whether playback is currently paused. */\n isPaused: () => boolean;\n /** Set playback speed multiplier. */\n setPlaybackRate: (rate: number) => void;\n /**\n * The underlying media element.\n * Escape hatch for host integrations (e.g. thumbnail capture); prefer the\n * typed methods above for playback control.\n */\n mediaElement: HTMLVideoElement | HTMLAudioElement | null;\n}\n\nexport interface MediaPlayerProps extends VariantProps<\n typeof mediaPlayerVariants\n> {\n /** Media source URL. */\n src: string;\n /** Force the media kind; when omitted it is inferred from the src extension. */\n kind?: MediaKind;\n /** Whether to show native controls (default `true`). */\n controls?: boolean;\n /** Callback when playback state changes. */\n onStateChange?: (state: MediaPlayerState) => void;\n /** Callback when playback ends. */\n onEnded?: () => void;\n /** Callback when an error occurs. */\n onError?: (error: Error) => void;\n /** Callback on time updates (milliseconds). */\n onTimeUpdate?: (currentTimeMs: number, durationMs: number) => void;\n /** Additional class name. */\n className?: string;\n /** Accessible label for the media element. */\n 'aria-label'?: string;\n /**\n * Transitional: exposes the raw media element to legacy consumers.\n * Prefer {@link MediaPlayerRef} for playback control.\n */\n mediaElementRef?: React.RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst mediaPlayerVariants = cva(\n 'flex h-full w-full items-center justify-center',\n {\n variants: {\n variant: {\n plain: '',\n card: 'rounded-xl border border-border bg-card text-card-foreground p-2',\n },\n },\n defaultVariants: {\n variant: 'plain',\n },\n }\n);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst VIDEO_EXTENSIONS = /\\.(mp4|mov|avi|webm|mkv|m4v)$/i;\n\n/** Infer media kind from a URL's file extension; defaults to audio. */\nexport function inferMediaKind(src: string): MediaKind {\n // Strip any query string / fragment before matching. Testing the extension\n // against the full URL required a trailing `.*`, which backtracks\n // polynomially on crafted inputs (ReDoS); splitting first is linear.\n const path = src.split(/[?#]/, 1)[0];\n return VIDEO_EXTENSIONS.test(path) ? 'video' : 'audio';\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Media playback surface for audio and video with a shared imperative handle.\n *\n * Renders a native `<video>` or `<audio>` element (kind inferred from the src\n * extension unless forced) with themed error/retry handling. Playback state and\n * controls come from the shared {@link useMediaTransport} hook and are exposed\n * through {@link MediaPlayerRef} (all times in milliseconds) — consumers should\n * not reach into the DOM element directly.\n */\nexport const MediaPlayer = React.forwardRef<MediaPlayerRef, MediaPlayerProps>(\n (\n {\n src,\n kind,\n controls = true,\n variant,\n onStateChange,\n onEnded,\n onError,\n onTimeUpdate,\n className,\n 'aria-label': ariaLabel,\n mediaElementRef,\n },\n ref\n ) => {\n const [error, setError] = React.useState<string | null>(null);\n const resolvedKind = kind ?? inferMediaKind(src);\n\n const transport = useMediaTransport({\n onTimeUpdate,\n onStateChange,\n onEnded,\n onError: (err) => {\n setError('Unable to load media. The server may be unavailable.');\n onError?.(err);\n },\n endedState: 'paused',\n errorLabel: `media: ${src}`,\n });\n\n const { setMediaElement, mediaElement } = transport;\n\n const setElement = React.useCallback(\n (el: HTMLVideoElement | HTMLAudioElement | null) => {\n setMediaElement(el);\n if (mediaElementRef) {\n (mediaElementRef as React.MutableRefObject<typeof el>).current = el;\n }\n },\n [setMediaElement, mediaElementRef]\n );\n\n React.useImperativeHandle(\n ref,\n (): MediaPlayerRef => ({\n seekToMs: transport.seekToMs,\n play: transport.play,\n pause: transport.pause,\n getCurrentTimeMs: transport.getCurrentTimeMs,\n getDurationMs: transport.getDurationMs,\n isPaused: transport.isPaused,\n setPlaybackRate: transport.setPlaybackRate,\n get mediaElement() {\n return mediaElement;\n },\n }),\n [transport, mediaElement]\n );\n\n const handleRetry = React.useCallback(() => {\n setError(null);\n mediaElement?.load();\n }, [mediaElement]);\n\n const sharedMediaProps = {\n src,\n controls,\n 'aria-label': ariaLabel,\n };\n\n if (error) {\n return (\n <div className={mediaPlayerVariants({ variant, className })}>\n <div\n role=\"alert\"\n className=\"border-destructive/30 bg-destructive/10 flex min-h-36 flex-col items-center justify-center gap-3 rounded-lg border p-8 text-center\"\n >\n {/* destructive-700/300 instead of the base token: #dc2626 on the\n destructive/10 tint is 4.14:1 — below WCAG AA (axe: color-contrast). */}\n <p className=\"text-destructive-700 dark:text-destructive-300 m-0 text-sm\">\n {error}\n </p>\n {/* bg-background: the outline button is transparent, and its text on\n the destructive/10 tint sits exactly at the 4.5:1 AA boundary. */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"bg-background\"\n onClick={handleRetry}\n >\n Retry\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className={mediaPlayerVariants({ variant, className })}>\n {resolvedKind === 'video' ? (\n // Generic media surface: caption tracks belong to the consumer's media\n // resource and are supplied via children, not this transport component.\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n ref={setElement as React.Ref<HTMLVideoElement>}\n playsInline\n className=\"h-auto max-h-full w-auto max-w-full object-contain\"\n {...sharedMediaProps}\n />\n ) : (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <audio\n ref={setElement as React.Ref<HTMLAudioElement>}\n className=\"my-4 w-[90%] max-w-lg\"\n {...sharedMediaProps}\n />\n )}\n </div>\n );\n }\n);\n\nMediaPlayer.displayName = 'MediaPlayer';\n\nexport { mediaPlayerVariants };\n"]}
|