@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.
Files changed (82) hide show
  1. package/dist/CsvBlock-7K6XVRYO.cjs +15 -0
  2. package/dist/{CsvBlock-2A5VEDD3.cjs.map → CsvBlock-7K6XVRYO.cjs.map} +1 -1
  3. package/dist/CsvBlock-AAV4QMSF.js +6 -0
  4. package/dist/{CsvBlock-D6PWAJ5X.js.map → CsvBlock-AAV4QMSF.js.map} +1 -1
  5. package/dist/HtmlPreviewBlock-74XQF3KT.cjs +15 -0
  6. package/dist/{HtmlPreviewBlock-SYXCV5RH.cjs.map → HtmlPreviewBlock-74XQF3KT.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-DNINC7RW.js +6 -0
  8. package/dist/{HtmlPreviewBlock-PEHTJ6C3.js.map → HtmlPreviewBlock-DNINC7RW.js.map} +1 -1
  9. package/dist/MermaidBlock-PKXGFGU6.js +6 -0
  10. package/dist/{MermaidBlock-7NK3AVK2.js.map → MermaidBlock-PKXGFGU6.js.map} +1 -1
  11. package/dist/MermaidBlock-R4U7IHSZ.cjs +15 -0
  12. package/dist/{MermaidBlock-AFXNP5NK.cjs.map → MermaidBlock-R4U7IHSZ.cjs.map} +1 -1
  13. package/dist/SurveyBlock-E52I4PW3.cjs +15 -0
  14. package/dist/{SurveyBlock-6KRNKFH5.cjs.map → SurveyBlock-E52I4PW3.cjs.map} +1 -1
  15. package/dist/SurveyBlock-IULSBG22.js +6 -0
  16. package/dist/{SurveyBlock-NNDGXGG4.js.map → SurveyBlock-IULSBG22.js.map} +1 -1
  17. package/dist/{chunk-YVLP3ATI.js → chunk-35VBGVMB.js} +3 -3
  18. package/dist/{chunk-YVLP3ATI.js.map → chunk-35VBGVMB.js.map} +1 -1
  19. package/dist/{chunk-KBEKQMVY.cjs → chunk-6RV7HQ4U.cjs} +5 -5
  20. package/dist/{chunk-KBEKQMVY.cjs.map → chunk-6RV7HQ4U.cjs.map} +1 -1
  21. package/dist/{chunk-BB4WQ4LV.cjs → chunk-74NOFB34.cjs} +4 -4
  22. package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-74NOFB34.cjs.map} +1 -1
  23. package/dist/{chunk-I2W24RHW.js → chunk-CPJIOOBM.js} +3 -3
  24. package/dist/{chunk-I2W24RHW.js.map → chunk-CPJIOOBM.js.map} +1 -1
  25. package/dist/{chunk-7WMSUXOQ.js → chunk-FGIIXD37.js} +3 -3
  26. package/dist/{chunk-7WMSUXOQ.js.map → chunk-FGIIXD37.js.map} +1 -1
  27. package/dist/{chunk-S6Z3KDEM.js → chunk-FGP64Z24.js} +4 -13
  28. package/dist/chunk-FGP64Z24.js.map +1 -0
  29. package/dist/{chunk-CVC4NWFA.cjs → chunk-FZQAF3WA.cjs} +4 -4
  30. package/dist/{chunk-CVC4NWFA.cjs.map → chunk-FZQAF3WA.cjs.map} +1 -1
  31. package/dist/{chunk-RHYIFIT5.js → chunk-MHJMUKLA.js} +3 -12
  32. package/dist/chunk-MHJMUKLA.js.map +1 -0
  33. package/dist/{chunk-63KVQHGQ.cjs → chunk-NAQ3ZALI.cjs} +4 -4
  34. package/dist/{chunk-63KVQHGQ.cjs.map → chunk-NAQ3ZALI.cjs.map} +1 -1
  35. package/dist/{chunk-UFYXU7KV.js → chunk-NCRYCG5G.js} +3 -3
  36. package/dist/{chunk-UFYXU7KV.js.map → chunk-NCRYCG5G.js.map} +1 -1
  37. package/dist/{chunk-XL7TTKHP.js → chunk-NSLR3B7K.js} +12 -21
  38. package/dist/chunk-NSLR3B7K.js.map +1 -0
  39. package/dist/{chunk-CKD554XR.cjs → chunk-UL3PQ7HL.cjs} +3 -12
  40. package/dist/chunk-UL3PQ7HL.cjs.map +1 -0
  41. package/dist/{chunk-V25Z5GR6.cjs → chunk-VO3NWSCQ.cjs} +7 -7
  42. package/dist/{chunk-V25Z5GR6.cjs.map → chunk-VO3NWSCQ.cjs.map} +1 -1
  43. package/dist/{chunk-T3RWXOCM.js → chunk-WGC3KOP7.js} +3 -3
  44. package/dist/{chunk-T3RWXOCM.js.map → chunk-WGC3KOP7.js.map} +1 -1
  45. package/dist/{chunk-JCNPVK74.cjs → chunk-Y65SK5Y2.cjs} +12 -21
  46. package/dist/chunk-Y65SK5Y2.cjs.map +1 -0
  47. package/dist/{chunk-7QXG5BBB.cjs → chunk-YD23ZGRU.cjs} +4 -13
  48. package/dist/chunk-YD23ZGRU.cjs.map +1 -0
  49. package/dist/components/Markdown/index.cjs +15 -15
  50. package/dist/components/Markdown/index.css +1 -1
  51. package/dist/components/Markdown/index.css.map +1 -1
  52. package/dist/components/Markdown/index.js +6 -6
  53. package/dist/components/Markdown/styles.css +1 -4
  54. package/dist/components/MediaEditor/index.cjs +7 -7
  55. package/dist/components/MediaEditor/index.js +2 -2
  56. package/dist/components/MediaPlayer/index.cjs +4 -4
  57. package/dist/components/MediaPlayer/index.js +1 -1
  58. package/dist/components/SuperChat/plugins/index.cjs +0 -3
  59. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  60. package/dist/components/SuperChat/plugins/index.js +0 -3
  61. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  62. package/dist/index.cjs +25 -25
  63. package/dist/index.css +1 -1
  64. package/dist/index.css.map +1 -1
  65. package/dist/index.d.cts +0 -2
  66. package/dist/index.d.ts +0 -2
  67. package/dist/index.js +8 -8
  68. package/package.json +1 -2
  69. package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
  70. package/dist/CsvBlock-D6PWAJ5X.js +0 -6
  71. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
  72. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
  73. package/dist/MermaidBlock-7NK3AVK2.js +0 -6
  74. package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
  75. package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
  76. package/dist/SurveyBlock-NNDGXGG4.js +0 -6
  77. package/dist/chunk-7QXG5BBB.cjs.map +0 -1
  78. package/dist/chunk-CKD554XR.cjs.map +0 -1
  79. package/dist/chunk-JCNPVK74.cjs.map +0 -1
  80. package/dist/chunk-RHYIFIT5.js.map +0 -1
  81. package/dist/chunk-S6Z3KDEM.js.map +0 -1
  82. 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 chunkJCNPVK74_cjs = require('./chunk-JCNPVK74.cjs');
36
- var chunkV25Z5GR6_cjs = require('./chunk-V25Z5GR6.cjs');
37
- var chunkBB4WQ4LV_cjs = require('./chunk-BB4WQ4LV.cjs');
38
- var chunkCVC4NWFA_cjs = require('./chunk-CVC4NWFA.cjs');
39
- var chunkKBEKQMVY_cjs = require('./chunk-KBEKQMVY.cjs');
40
- var chunkCKD554XR_cjs = require('./chunk-CKD554XR.cjs');
41
- var chunk63KVQHGQ_cjs = require('./chunk-63KVQHGQ.cjs');
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 chunk7QXG5BBB_cjs = require('./chunk-7QXG5BBB.cjs');
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 chunkJCNPVK74_cjs.CodeBlock; }
43188
+ get: function () { return chunkY65SK5Y2_cjs.CodeBlock; }
43189
43189
  });
43190
43190
  Object.defineProperty(exports, "MarkdownRenderer", {
43191
43191
  enumerable: true,
43192
- get: function () { return chunkJCNPVK74_cjs.MarkdownRenderer; }
43192
+ get: function () { return chunkY65SK5Y2_cjs.MarkdownRenderer; }
43193
43193
  });
43194
43194
  Object.defineProperty(exports, "highlightCode", {
43195
43195
  enumerable: true,
43196
- get: function () { return chunkJCNPVK74_cjs.highlightCode; }
43196
+ get: function () { return chunkY65SK5Y2_cjs.highlightCode; }
43197
43197
  });
43198
43198
  Object.defineProperty(exports, "useMarkdown", {
43199
43199
  enumerable: true,
43200
- get: function () { return chunkJCNPVK74_cjs.useMarkdown; }
43200
+ get: function () { return chunkY65SK5Y2_cjs.useMarkdown; }
43201
43201
  });
43202
43202
  Object.defineProperty(exports, "CsvBlock", {
43203
43203
  enumerable: true,
43204
- get: function () { return chunkV25Z5GR6_cjs.CsvBlock; }
43204
+ get: function () { return chunkVO3NWSCQ_cjs.CsvBlock; }
43205
43205
  });
43206
43206
  Object.defineProperty(exports, "HtmlPreviewBlock", {
43207
43207
  enumerable: true,
43208
- get: function () { return chunkBB4WQ4LV_cjs.HtmlPreviewBlock; }
43208
+ get: function () { return chunk74NOFB34_cjs.HtmlPreviewBlock; }
43209
43209
  });
43210
43210
  Object.defineProperty(exports, "MermaidBlock", {
43211
43211
  enumerable: true,
43212
- get: function () { return chunkCVC4NWFA_cjs.MermaidBlock; }
43212
+ get: function () { return chunkFZQAF3WA_cjs.MermaidBlock; }
43213
43213
  });
43214
43214
  Object.defineProperty(exports, "SurveyBlock", {
43215
43215
  enumerable: true,
43216
- get: function () { return chunkKBEKQMVY_cjs.SurveyBlock; }
43216
+ get: function () { return chunk6RV7HQ4U_cjs.SurveyBlock; }
43217
43217
  });
43218
43218
  Object.defineProperty(exports, "FenceBlock", {
43219
43219
  enumerable: true,
43220
- get: function () { return chunkCKD554XR_cjs.FenceBlock; }
43220
+ get: function () { return chunkUL3PQ7HL_cjs.FenceBlock; }
43221
43221
  });
43222
43222
  Object.defineProperty(exports, "FillerWordsModal", {
43223
43223
  enumerable: true,
43224
- get: function () { return chunk63KVQHGQ_cjs.FillerWordsModal; }
43224
+ get: function () { return chunkNAQ3ZALI_cjs.FillerWordsModal; }
43225
43225
  });
43226
43226
  Object.defineProperty(exports, "MediaEditor", {
43227
43227
  enumerable: true,
43228
- get: function () { return chunk63KVQHGQ_cjs.MediaEditor; }
43228
+ get: function () { return chunkNAQ3ZALI_cjs.MediaEditor; }
43229
43229
  });
43230
43230
  Object.defineProperty(exports, "SilenceSettingsModal", {
43231
43231
  enumerable: true,
43232
- get: function () { return chunk63KVQHGQ_cjs.SilenceSettingsModal; }
43232
+ get: function () { return chunkNAQ3ZALI_cjs.SilenceSettingsModal; }
43233
43233
  });
43234
43234
  Object.defineProperty(exports, "SpeedMarkerMenu", {
43235
43235
  enumerable: true,
43236
- get: function () { return chunk63KVQHGQ_cjs.SpeedMarkerMenu; }
43236
+ get: function () { return chunkNAQ3ZALI_cjs.SpeedMarkerMenu; }
43237
43237
  });
43238
43238
  Object.defineProperty(exports, "WordEditorModal", {
43239
43239
  enumerable: true,
43240
- get: function () { return chunk63KVQHGQ_cjs.WordEditorModal; }
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 chunk7QXG5BBB_cjs.MediaPlayer; }
43264
+ get: function () { return chunkYD23ZGRU_cjs.MediaPlayer; }
43265
43265
  });
43266
43266
  Object.defineProperty(exports, "inferMediaKind", {
43267
43267
  enumerable: true,
43268
- get: function () { return chunk7QXG5BBB_cjs.inferMediaKind; }
43268
+ get: function () { return chunkYD23ZGRU_cjs.inferMediaKind; }
43269
43269
  });
43270
43270
  Object.defineProperty(exports, "mediaPlayerVariants", {
43271
43271
  enumerable: true,
43272
- get: function () { return chunk7QXG5BBB_cjs.mediaPlayerVariants; }
43272
+ get: function () { return chunkYD23ZGRU_cjs.mediaPlayerVariants; }
43273
43273
  });
43274
43274
  Object.defineProperty(exports, "Pagination", {
43275
43275
  enumerable: true,
package/dist/index.css CHANGED
@@ -1,7 +1,7 @@
1
1
  /* src/components/Markdown/styles.css */
2
2
  pre code.hljs {
3
3
  display: block;
4
- overflow-x: visible;
4
+ overflow-x: auto;
5
5
  padding: 1em;
6
6
  background: transparent;
7
7
  }
@@ -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-XL7TTKHP.js';
45
- export { CsvBlock } from './chunk-7WMSUXOQ.js';
46
- export { HtmlPreviewBlock } from './chunk-UFYXU7KV.js';
47
- export { MermaidBlock } from './chunk-T3RWXOCM.js';
48
- export { SurveyBlock } from './chunk-I2W24RHW.js';
49
- export { FenceBlock } from './chunk-RHYIFIT5.js';
50
- export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-YVLP3ATI.js';
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-S6Z3KDEM.js';
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-dev.180",
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,6 +0,0 @@
1
- export { CsvBlock } from './chunk-7WMSUXOQ.js';
2
- import './chunk-RHYIFIT5.js';
3
- import './chunk-ZVSW2KS6.js';
4
- import './chunk-F3SOEIN2.js';
5
- //# sourceMappingURL=CsvBlock-D6PWAJ5X.js.map
6
- //# sourceMappingURL=CsvBlock-D6PWAJ5X.js.map
@@ -1,6 +0,0 @@
1
- export { HtmlPreviewBlock } from './chunk-UFYXU7KV.js';
2
- import './chunk-RHYIFIT5.js';
3
- import './chunk-ZVSW2KS6.js';
4
- import './chunk-F3SOEIN2.js';
5
- //# sourceMappingURL=HtmlPreviewBlock-PEHTJ6C3.js.map
6
- //# sourceMappingURL=HtmlPreviewBlock-PEHTJ6C3.js.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,6 +0,0 @@
1
- export { MermaidBlock } from './chunk-T3RWXOCM.js';
2
- import './chunk-RHYIFIT5.js';
3
- import './chunk-ZVSW2KS6.js';
4
- import './chunk-F3SOEIN2.js';
5
- //# sourceMappingURL=MermaidBlock-7NK3AVK2.js.map
6
- //# sourceMappingURL=MermaidBlock-7NK3AVK2.js.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,6 +0,0 @@
1
- export { SurveyBlock } from './chunk-I2W24RHW.js';
2
- import './chunk-RHYIFIT5.js';
3
- import './chunk-ZVSW2KS6.js';
4
- import './chunk-F3SOEIN2.js';
5
- //# sourceMappingURL=SurveyBlock-NNDGXGG4.js.map
6
- //# sourceMappingURL=SurveyBlock-NNDGXGG4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/MediaPlayer/MediaPlayer.tsx"],"names":["cva","React","useMediaTransport","jsx","jsxs","Button"],"mappings":"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","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":"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","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, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\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":"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","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"]}