@omnitron-dev/prism 0.3.0 → 0.3.1

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 (214) hide show
  1. package/README.md +148 -0
  2. package/dist/blocks/index.js +3 -1
  3. package/dist/blocks/index.js.map +1 -1
  4. package/dist/{chunk-S6SEGBX6.js → chunk-472SOF76.js} +4 -4
  5. package/dist/{chunk-S6SEGBX6.js.map → chunk-472SOF76.js.map} +1 -1
  6. package/dist/{chunk-Z5OSPAOC.js → chunk-4Z5DE5GK.js} +78 -75
  7. package/dist/chunk-4Z5DE5GK.js.map +1 -0
  8. package/dist/chunk-52PQL67Q.js +559 -0
  9. package/dist/chunk-52PQL67Q.js.map +1 -0
  10. package/dist/chunk-75FQ5IW3.js +590 -0
  11. package/dist/chunk-75FQ5IW3.js.map +1 -0
  12. package/dist/{chunk-6AHI4GSV.js → chunk-7G5D5PTC.js} +4 -3
  13. package/dist/chunk-7G5D5PTC.js.map +1 -0
  14. package/dist/chunk-BJE2AKD4.js +105 -0
  15. package/dist/chunk-BJE2AKD4.js.map +1 -0
  16. package/dist/chunk-FF5RF32O.js +248 -0
  17. package/dist/chunk-FF5RF32O.js.map +1 -0
  18. package/dist/{chunk-OBJ244BO.js → chunk-GMIE6III.js} +9 -42
  19. package/dist/chunk-GMIE6III.js.map +1 -0
  20. package/dist/chunk-GUGTDURV.js +826 -0
  21. package/dist/chunk-GUGTDURV.js.map +1 -0
  22. package/dist/chunk-HOXFSQUV.js +573 -0
  23. package/dist/chunk-HOXFSQUV.js.map +1 -0
  24. package/dist/chunk-JSQTYDPG.js +3 -0
  25. package/dist/chunk-JSQTYDPG.js.map +1 -0
  26. package/dist/{chunk-ZTATTUH7.js → chunk-KQ67XB6T.js} +213 -651
  27. package/dist/chunk-KQ67XB6T.js.map +1 -0
  28. package/dist/{chunk-WFD54GQQ.js → chunk-LOY2NPCO.js} +14 -573
  29. package/dist/chunk-LOY2NPCO.js.map +1 -0
  30. package/dist/{chunk-YQW43BDH.js → chunk-LSPFFEJT.js} +240 -1824
  31. package/dist/chunk-LSPFFEJT.js.map +1 -0
  32. package/dist/{chunk-BZOL7GMU.js → chunk-OKTLA23Q.js} +4 -4
  33. package/dist/chunk-OKTLA23Q.js.map +1 -0
  34. package/dist/chunk-PFT2BNYO.js +191 -0
  35. package/dist/chunk-PFT2BNYO.js.map +1 -0
  36. package/dist/chunk-PGHEP4JD.js +106 -0
  37. package/dist/chunk-PGHEP4JD.js.map +1 -0
  38. package/dist/chunk-PXXPLHIY.js +74 -0
  39. package/dist/chunk-PXXPLHIY.js.map +1 -0
  40. package/dist/chunk-SU3LVQ7N.js +518 -0
  41. package/dist/chunk-SU3LVQ7N.js.map +1 -0
  42. package/dist/chunk-YHE7HXSG.js +206 -0
  43. package/dist/chunk-YHE7HXSG.js.map +1 -0
  44. package/dist/cli/index.js +7 -2
  45. package/dist/cli/index.js.map +1 -1
  46. package/dist/components/accordion/accordion.d.ts.map +1 -1
  47. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
  48. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
  49. package/dist/components/date-input/date-input.d.ts +27 -0
  50. package/dist/components/date-input/date-input.d.ts.map +1 -0
  51. package/dist/components/date-input/index.d.ts +4 -0
  52. package/dist/components/date-input/index.d.ts.map +1 -0
  53. package/dist/components/date-input/value.d.ts +9 -0
  54. package/dist/components/date-input/value.d.ts.map +1 -0
  55. package/dist/components/doc-layout/doc-sidebar.d.ts +4 -1
  56. package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -1
  57. package/dist/components/doc-layout/index.js +6 -0
  58. package/dist/components/doc-layout/index.js.map +1 -0
  59. package/dist/components/editor/editor.d.ts.map +1 -1
  60. package/dist/components/editor/icons/index.d.ts +32 -40
  61. package/dist/components/editor/icons/index.d.ts.map +1 -1
  62. package/dist/components/editor/index.js +3 -1
  63. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -1
  64. package/dist/components/index.css +4 -0
  65. package/dist/components/index.css.map +1 -1
  66. package/dist/components/index.d.ts +4 -4
  67. package/dist/components/index.d.ts.map +1 -1
  68. package/dist/components/index.js +18 -8
  69. package/dist/components/knowledge-graph/edge-labels.d.ts +14 -0
  70. package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -0
  71. package/dist/components/knowledge-graph/graph.d.ts +56 -0
  72. package/dist/components/knowledge-graph/graph.d.ts.map +1 -0
  73. package/dist/components/knowledge-graph/index.css +176 -0
  74. package/dist/components/knowledge-graph/index.css.map +1 -0
  75. package/dist/components/knowledge-graph/index.d.ts +3 -0
  76. package/dist/components/knowledge-graph/index.d.ts.map +1 -0
  77. package/dist/components/knowledge-graph/index.js +795 -0
  78. package/dist/components/knowledge-graph/index.js.map +1 -0
  79. package/dist/components/knowledge-graph/label-layout.d.ts +28 -0
  80. package/dist/components/knowledge-graph/label-layout.d.ts.map +1 -0
  81. package/dist/components/knowledge-graph/label-store.d.ts +15 -0
  82. package/dist/components/knowledge-graph/label-store.d.ts.map +1 -0
  83. package/dist/components/knowledge-graph/model.d.ts +92 -0
  84. package/dist/components/knowledge-graph/model.d.ts.map +1 -0
  85. package/dist/components/lightbox/lightbox.d.ts.map +1 -1
  86. package/dist/components/map/Map.d.ts +19 -43
  87. package/dist/components/map/Map.d.ts.map +1 -1
  88. package/dist/components/map/MapCoverageLayer.d.ts +1 -1
  89. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -1
  90. package/dist/components/map/MapMarker.d.ts +1 -1
  91. package/dist/components/map/MapMarker.d.ts.map +1 -1
  92. package/dist/components/map/MapPlaceSearch.d.ts +33 -0
  93. package/dist/components/map/MapPlaceSearch.d.ts.map +1 -0
  94. package/dist/components/map/MapPointPicker.d.ts +21 -12
  95. package/dist/components/map/MapPointPicker.d.ts.map +1 -1
  96. package/dist/components/map/coordinates.d.ts +10 -0
  97. package/dist/components/map/coordinates.d.ts.map +1 -0
  98. package/dist/components/map/index.css +4 -0
  99. package/dist/components/map/index.css.map +1 -0
  100. package/dist/components/map/index.d.ts +7 -2
  101. package/dist/components/map/index.d.ts.map +1 -1
  102. package/dist/components/map/index.js +3 -0
  103. package/dist/components/map/index.js.map +1 -0
  104. package/dist/components/nav-card/nav-card.d.ts.map +1 -1
  105. package/dist/components/rail/rail.d.ts.map +1 -1
  106. package/dist/components/research/diagram-image.d.ts +11 -0
  107. package/dist/components/research/diagram-image.d.ts.map +1 -0
  108. package/dist/components/research/diagram.d.ts +8 -0
  109. package/dist/components/research/diagram.d.ts.map +1 -0
  110. package/dist/components/research/document.d.ts +33 -0
  111. package/dist/components/research/document.d.ts.map +1 -0
  112. package/dist/components/research/frontmatter.d.ts +15 -0
  113. package/dist/components/research/frontmatter.d.ts.map +1 -0
  114. package/dist/components/research/index.css +51 -0
  115. package/dist/components/research/index.css.map +1 -0
  116. package/dist/components/research/index.d.ts +3 -0
  117. package/dist/components/research/index.d.ts.map +1 -0
  118. package/dist/components/research/index.js +6 -0
  119. package/dist/components/research/index.js.map +1 -0
  120. package/dist/components/research/parse.d.ts +29 -0
  121. package/dist/components/research/parse.d.ts.map +1 -0
  122. package/dist/components/research-editor/block-commands.d.ts +20 -0
  123. package/dist/components/research-editor/block-commands.d.ts.map +1 -0
  124. package/dist/components/research-editor/block-controls.d.ts +13 -0
  125. package/dist/components/research-editor/block-controls.d.ts.map +1 -0
  126. package/dist/components/research-editor/editor.d.ts +75 -0
  127. package/dist/components/research-editor/editor.d.ts.map +1 -0
  128. package/dist/components/research-editor/extensions.d.ts +14 -0
  129. package/dist/components/research-editor/extensions.d.ts.map +1 -0
  130. package/dist/components/research-editor/index.css +332 -0
  131. package/dist/components/research-editor/index.css.map +1 -0
  132. package/dist/components/research-editor/index.d.ts +5 -0
  133. package/dist/components/research-editor/index.d.ts.map +1 -0
  134. package/dist/components/research-editor/index.js +1592 -0
  135. package/dist/components/research-editor/index.js.map +1 -0
  136. package/dist/components/research-editor/math-input.d.ts +32 -0
  137. package/dist/components/research-editor/math-input.d.ts.map +1 -0
  138. package/dist/components/research-editor/math-markup.d.ts +4 -0
  139. package/dist/components/research-editor/math-markup.d.ts.map +1 -0
  140. package/dist/components/research-editor/math-navigation.d.ts +6 -0
  141. package/dist/components/research-editor/math-navigation.d.ts.map +1 -0
  142. package/dist/components/research-editor/math-node.d.ts +11 -0
  143. package/dist/components/research-editor/math-node.d.ts.map +1 -0
  144. package/dist/components/research-editor/source.d.ts +19 -0
  145. package/dist/components/research-editor/source.d.ts.map +1 -0
  146. package/dist/components/scrollbar/scrollbar.d.ts +4 -2
  147. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
  148. package/dist/components/search-input/search-input.d.ts +0 -10
  149. package/dist/components/search-input/search-input.d.ts.map +1 -1
  150. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +4 -3
  151. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -1
  152. package/dist/core/index.d.ts +1 -1
  153. package/dist/core/index.d.ts.map +1 -1
  154. package/dist/core/index.js +8 -4
  155. package/dist/core/provider.d.ts +7 -2
  156. package/dist/core/provider.d.ts.map +1 -1
  157. package/dist/forms/schema-provider.d.ts +3 -3
  158. package/dist/forms/schema-utils.d.ts +3 -3
  159. package/dist/hooks/index.js +9 -5
  160. package/dist/icons/context.d.ts +17 -0
  161. package/dist/icons/context.d.ts.map +1 -0
  162. package/dist/icons/controls.d.ts +51 -0
  163. package/dist/icons/controls.d.ts.map +1 -0
  164. package/dist/icons/index.d.ts +3 -0
  165. package/dist/icons/index.d.ts.map +1 -0
  166. package/dist/icons/index.js +4 -0
  167. package/dist/icons/index.js.map +1 -0
  168. package/dist/icons/theme.d.ts +4 -0
  169. package/dist/icons/theme.d.ts.map +1 -0
  170. package/dist/index.css +4 -0
  171. package/dist/index.css.map +1 -1
  172. package/dist/index.js +24 -13
  173. package/dist/index.js.map +1 -1
  174. package/dist/layouts/core/header-section.d.ts.map +1 -1
  175. package/dist/layouts/dashboard/labels.d.ts +12 -0
  176. package/dist/layouts/dashboard/labels.d.ts.map +1 -0
  177. package/dist/layouts/dashboard/layout.d.ts +7 -1
  178. package/dist/layouts/dashboard/layout.d.ts.map +1 -1
  179. package/dist/layouts/dashboard/sidenav.d.ts +7 -3
  180. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
  181. package/dist/layouts/index.d.ts +5 -0
  182. package/dist/layouts/index.d.ts.map +1 -1
  183. package/dist/layouts/index.js +6 -1
  184. package/dist/layouts/panel-layout.d.ts +35 -0
  185. package/dist/layouts/panel-layout.d.ts.map +1 -0
  186. package/dist/layouts/sidebar-toggle.d.ts +11 -0
  187. package/dist/layouts/sidebar-toggle.d.ts.map +1 -0
  188. package/dist/state/stores/auth.d.ts +4 -16
  189. package/dist/state/stores/auth.d.ts.map +1 -1
  190. package/dist/state/stores/ui.d.ts +7 -105
  191. package/dist/state/stores/ui.d.ts.map +1 -1
  192. package/dist/theme/components/Button.d.ts.map +1 -1
  193. package/dist/theme/components/FormControls.d.ts +3 -12
  194. package/dist/theme/components/FormControls.d.ts.map +1 -1
  195. package/dist/theme/components/index.d.ts.map +1 -1
  196. package/dist/theme/create-theme.d.ts +5 -17
  197. package/dist/theme/create-theme.d.ts.map +1 -1
  198. package/dist/theme/index.js +6 -2
  199. package/dist/theme/mixins.d.ts +3 -1
  200. package/dist/theme/mixins.d.ts.map +1 -1
  201. package/dist/theme/palette/overrides.d.ts +23 -0
  202. package/dist/theme/palette/overrides.d.ts.map +1 -0
  203. package/dist/ui/index.d.ts +18 -0
  204. package/dist/ui/index.d.ts.map +1 -0
  205. package/dist/ui/index.js +148 -0
  206. package/dist/ui/index.js.map +1 -0
  207. package/package.json +92 -45
  208. package/dist/chunk-6AHI4GSV.js.map +0 -1
  209. package/dist/chunk-BZOL7GMU.js.map +0 -1
  210. package/dist/chunk-OBJ244BO.js.map +0 -1
  211. package/dist/chunk-WFD54GQQ.js.map +0 -1
  212. package/dist/chunk-YQW43BDH.js.map +0 -1
  213. package/dist/chunk-Z5OSPAOC.js.map +0 -1
  214. package/dist/chunk-ZTATTUH7.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/content-renderer/classes.ts","../src/components/content-renderer/styles.ts","../src/components/tiptap-renderer/tiptap-renderer.tsx"],"names":[],"mappings":"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","file":"chunk-GUGTDURV.js","sourcesContent":["// ---------------------------------------------------------------------------\n// CSS class names for content renderer components\n// ---------------------------------------------------------------------------\n\nconst PREFIX = 'prism-content';\n\nexport const contentClasses = {\n root: `${PREFIX}__root`,\n compact: `${PREFIX}__compact`,\n tiptap: `${PREFIX}__tiptap`,\n markdown: `${PREFIX}__markdown`,\n image: `${PREFIX}__image`,\n link: `${PREFIX}__link`,\n checkbox: `${PREFIX}__checkbox`,\n codeBlock: `${PREFIX}__code-block`,\n codeBlockTitle: `${PREFIX}__code-block-title`,\n codeBlockCopy: `${PREFIX}__code-block-copy`,\n codeBlockHighlight: `${PREFIX}__code-block-highlight`,\n codeInline: `${PREFIX}__code-inline`,\n spoiler: `${PREFIX}__spoiler`,\n admonition: `${PREFIX}__admonition`,\n admonitionNote: `${PREFIX}__admonition-note`,\n admonitionTip: `${PREFIX}__admonition-tip`,\n admonitionWarning: `${PREFIX}__admonition-warning`,\n admonitionDanger: `${PREFIX}__admonition-danger`,\n admonitionInfo: `${PREFIX}__admonition-info`,\n admonitionCaution: `${PREFIX}__admonition-caution`,\n admonitionTitle: `${PREFIX}__admonition-title`,\n admonitionContent: `${PREFIX}__admonition-content`,\n tabs: `${PREFIX}__tabs`,\n tabsHeader: `${PREFIX}__tabs-header`,\n tabsTab: `${PREFIX}__tabs-tab`,\n tabsTabActive: `${PREFIX}__tabs-tab-active`,\n tabsPanel: `${PREFIX}__tabs-panel`,\n figure: `${PREFIX}__figure`,\n figcaption: `${PREFIX}__figcaption`,\n kbd: `${PREFIX}__kbd`,\n};\n","'use client';\n\nimport { styled, alpha } from '@mui/material/styles';\nimport { contentClasses } from './classes.js';\n\n// ---------------------------------------------------------------------------\n// Shared content root — applies rich typography and element styling.\n// Used by both TipTapRenderer (for TipTap JSON) and Markdown (for MD strings).\n// ---------------------------------------------------------------------------\n\nconst MARGIN = '0.75em';\nconst CODE_FONT = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', Menlo, Monaco, 'Courier New', monospace\";\n\nexport const ContentRoot = styled('div')(({ theme }) => ({\n // General spacing between adjacent elements\n '> * + *': {\n marginTop: 0,\n marginBottom: MARGIN,\n },\n\n // ─── Headings ───────────────────────────────────────────────\n '& h1, & h2, & h3, & h4, & h5, & h6': {\n scrollMarginTop: 100, // Account for sticky header on anchor jump\n },\n // Heading margins. Top margins are applied via the adjacent-sibling\n // combinator (`* + hN`) rather than a `:first-child` reset: a heading\n // takes its top margin ONLY when it follows another element, so a\n // heading at the very top of its container carries none. This is\n // SSR-safe (avoids Emotion's `:first-child` warning) and yields the\n // same result the previous `& > :first-child:is(h1,h2,h3)` reset did.\n h1: { ...theme.typography.h1, marginTop: 0, marginBottom: 12 },\n h2: { ...theme.typography.h2, marginTop: 0, marginBottom: 12 },\n h3: { ...theme.typography.h3, marginTop: 0, marginBottom: 8 },\n h4: { ...theme.typography.h4, marginTop: 0, marginBottom: 8 },\n h5: { ...theme.typography.h5, marginTop: 0, marginBottom: 8 },\n h6: { ...theme.typography.h6, marginTop: 0, marginBottom: 8 },\n '& * + h1, & * + h2': { marginTop: 40 },\n '& * + h3': { marginTop: 32 },\n '& * + h4, & * + h5, & * + h6': { marginTop: 24 },\n\n // ─── Paragraph ──────────────────────────────────────────────\n p: {\n ...theme.typography.body1,\n marginBottom: '1.25rem',\n lineHeight: 1.8,\n },\n\n // ─── Horizontal rule ───────────────────────────────────────\n hr: {\n flexShrink: 0,\n borderWidth: 0,\n margin: '2em 0',\n borderStyle: 'solid',\n borderBottomWidth: 'thin',\n borderColor: theme.palette.divider,\n },\n\n // ─── Images ─────────────────────────────────────────────────\n [`& .${contentClasses.image}`]: {\n width: '100%',\n height: 'auto',\n maxWidth: '100%',\n margin: 'auto auto 1.25em',\n borderRadius: Number(theme.shape.borderRadius) * 2,\n },\n // Plain img fallback\n '& img:not([class])': {\n maxWidth: '100%',\n height: 'auto',\n borderRadius: Number(theme.shape.borderRadius) * 2,\n marginBottom: '1.25em',\n },\n\n // ─── Links ──────────────────────────────────────────────────\n '& a': {\n color: theme.palette.primary.main,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n\n // ─── Lists ──────────────────────────────────────────────────\n '& ul': {\n listStyleType: 'disc',\n },\n '& ul, & ol': {\n paddingLeft: 24,\n marginBottom: '1.25rem',\n '& > li': {\n lineHeight: 2,\n // Markdown wraps every list-item body in a `<p>`. With\n // `display: inline-block` (the previous setting), Chromium\n // refuses to render the `<li>`'s ::marker at all — the\n // disc/decimal vanishes and the list looks like a series of\n // bullet-less paragraphs. `display: inline` collapses the\n // `<p>` into inline flow so the marker positions normally;\n // `margin: 0` keeps the LI height tight against the marker\n // baseline. Multi-paragraph list items (rare here, but\n // possible) still render — subsequent `<p>` siblings get a\n // line break by the inline-flow rules.\n '& > p': {\n margin: 0,\n display: 'inline',\n },\n },\n },\n // Nested lists\n '& ul ul, & ol ol, & ul ol, & ol ul': {\n marginBottom: 0,\n },\n\n // ─── Task list (TipTap taskList / GFM checkboxes) ──────────\n '& ul[data-type=\"taskList\"]': {\n listStyle: 'none',\n paddingLeft: 4,\n '& li': {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n '& > label': {\n marginTop: 4,\n },\n },\n },\n\n // ─── Blockquote ─────────────────────────────────────────────\n '& blockquote': {\n lineHeight: 1.6,\n fontSize: '1em',\n margin: '24px 0',\n position: 'relative',\n padding: theme.spacing(2.5, 3, 2.5, 7),\n color: theme.palette.text.secondary,\n borderLeft: `4px solid ${theme.palette.primary.main}`,\n borderRadius: Number(theme.shape.borderRadius) * 2,\n backgroundColor: alpha(theme.palette.primary.main, 0.04),\n '& p': {\n margin: 0,\n fontSize: 'inherit',\n },\n '& p + p': {\n marginTop: 8,\n },\n '&::before': {\n left: 16,\n top: 8,\n display: 'block',\n fontSize: '2.5em',\n content: '\"\\\\201C\"',\n position: 'absolute',\n color: alpha(theme.palette.primary.main, 0.3),\n lineHeight: 1,\n },\n },\n\n // ─── Inline code ────────────────────────────────────────────\n [`& .${contentClasses.codeInline}`]: {\n padding: theme.spacing(0.25, 0.75),\n color: theme.palette.text.secondary,\n fontSize: theme.typography.body2.fontSize,\n borderRadius: Number(theme.shape.borderRadius) / 2,\n backgroundColor: alpha(theme.palette.grey[500], 0.2),\n fontFamily: CODE_FONT,\n },\n // Fallback for code not inside pre\n '& :not(pre) > code:not([class])': {\n padding: theme.spacing(0.25, 0.75),\n color: theme.palette.text.secondary,\n fontSize: theme.typography.body2.fontSize,\n borderRadius: Number(theme.shape.borderRadius) / 2,\n backgroundColor: alpha(theme.palette.grey[500], 0.2),\n fontFamily: CODE_FONT,\n },\n\n // ─── Code block ─────────────────────────────────────────────\n [`& .${contentClasses.codeBlock}`]: {\n position: 'relative',\n marginBottom: '1.25rem',\n '& pre': {\n overflowX: 'auto',\n padding: theme.spacing(3),\n color: theme.palette.common.white,\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n fontFamily: CODE_FONT,\n fontSize: theme.typography.body2.fontSize,\n lineHeight: 1.7,\n backgroundColor: theme.palette.grey[900],\n ...(theme.palette.mode === 'dark' && {\n backgroundColor: alpha(theme.palette.grey[800], 0.9),\n }),\n '& code': {\n fontSize: 'inherit',\n fontFamily: 'inherit',\n backgroundColor: 'transparent',\n padding: 0,\n borderRadius: 0,\n color: 'inherit',\n },\n },\n },\n // Fallback for bare pre blocks\n '& pre:not([class])': {\n overflowX: 'auto',\n padding: theme.spacing(3),\n color: theme.palette.common.white,\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n fontFamily: CODE_FONT,\n fontSize: theme.typography.body2.fontSize,\n lineHeight: 1.7,\n backgroundColor: theme.palette.grey[900],\n marginBottom: '1.25rem',\n ...(theme.palette.mode === 'dark' && {\n backgroundColor: alpha(theme.palette.grey[800], 0.9),\n }),\n '& code': {\n fontSize: 'inherit',\n fontFamily: 'inherit',\n backgroundColor: 'transparent',\n padding: 0,\n color: 'inherit',\n },\n },\n\n // ─── Table ──────────────────────────────────────────────────\n '& table': {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: theme.typography.body2.fontSize,\n border: `1px solid ${theme.palette.divider}`,\n marginBottom: '1.25rem',\n '& th, & td': {\n padding: theme.spacing(1, 1.5),\n border: `1px solid ${theme.palette.divider}`,\n verticalAlign: 'top',\n },\n '& th': {\n fontWeight: 700,\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n },\n // Zebra rows. `:nth-of-type` (not `:nth-child`) is SSR-safe and\n // exactly equivalent here — a `<tbody>` contains only `<tr>`\n // children, so type-position and child-position coincide.\n '& tbody tr:nth-of-type(odd)': {\n backgroundColor: alpha(theme.palette.grey[500], 0.04),\n },\n },\n\n // ─── Checkbox (GFM task lists) ──────────────────────────────\n [`& .${contentClasses.checkbox}`]: {\n cursor: 'pointer',\n position: 'relative',\n '&:before': {\n content: '\"\"',\n top: -2,\n left: -2,\n width: 17,\n height: 17,\n borderRadius: 3,\n position: 'absolute',\n backgroundColor: theme.palette.grey[300],\n ...(theme.palette.mode === 'dark' && {\n backgroundColor: theme.palette.grey[700],\n }),\n },\n '&:checked': {\n '&:before': {\n backgroundColor: theme.palette.primary.main,\n },\n '&:after': {\n top: 1,\n left: 5,\n width: 4,\n height: 9,\n content: '\"\"',\n position: 'absolute',\n borderStyle: 'solid',\n transform: 'rotate(45deg)',\n borderWidth: '0 2px 2px 0',\n borderColor: theme.palette.common.white,\n },\n },\n },\n\n // ─── Details / Summary ──────────────────────────────────────\n '& details': {\n marginBottom: '1rem',\n '& summary': {\n cursor: 'pointer',\n fontWeight: 600,\n marginBottom: 8,\n },\n },\n\n // ─── Definition list ────────────────────────────────────────\n '& dl': {\n marginBottom: '1.25rem',\n '& dt': {\n fontWeight: 700,\n marginTop: 12,\n },\n '& dd': {\n marginLeft: 24,\n marginBottom: 4,\n },\n },\n\n // ─── Kbd (keyboard shortcut) ────────────────────────────────\n '& kbd': {\n display: 'inline-block',\n padding: theme.spacing(0.25, 0.5),\n fontSize: '0.8em',\n fontFamily: CODE_FONT,\n borderRadius: 4,\n border: `1px solid ${theme.palette.divider}`,\n boxShadow: `0 1px 0 ${alpha(theme.palette.grey[500], 0.1)}`,\n backgroundColor: alpha(theme.palette.grey[500], 0.06),\n },\n\n // ─── Mark (highlight) ──────────────────────────────────────\n '& mark': {\n padding: theme.spacing(0, 0.5),\n borderRadius: 2,\n backgroundColor: alpha(theme.palette.warning.main, 0.3),\n },\n\n // ─── Sup / Sub ──────────────────────────────────────────────\n '& sup, & sub': {\n fontSize: '0.75em',\n },\n\n // ─── Spoiler (||hidden text||) ────────────────────────────\n [`& .${contentClasses.spoiler}`]: {\n backgroundColor: theme.palette.text.primary,\n color: theme.palette.text.primary,\n borderRadius: 4,\n padding: theme.spacing(0, 0.5),\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n userSelect: 'none',\n '&:hover, &[data-revealed=\"true\"]': {\n backgroundColor: 'transparent',\n color: 'inherit',\n userSelect: 'auto',\n },\n },\n\n // ─── Admonition (callout) ─────────────────────────────────\n [`& .${contentClasses.admonition}`]: {\n margin: theme.spacing(2, 0),\n padding: theme.spacing(1.5, 2),\n borderRadius: theme.shape.borderRadius,\n borderLeft: `4px solid ${theme.palette.divider}`,\n backgroundColor: alpha(theme.palette.text.primary, 0.04),\n '& > :last-child': { marginBottom: 0 },\n },\n [`& .${contentClasses.admonitionTitle}`]: {\n fontWeight: 600,\n textTransform: 'uppercase',\n fontSize: '0.75rem',\n letterSpacing: '0.05em',\n marginBottom: theme.spacing(0.75),\n opacity: 0.85,\n },\n [`& .${contentClasses.admonitionContent}`]: {\n '& p:last-child': { marginBottom: 0 },\n },\n [`& .${contentClasses.admonitionNote}`]: {\n borderLeftColor: theme.palette.text.secondary,\n backgroundColor: alpha(theme.palette.text.primary, 0.04),\n },\n [`& .${contentClasses.admonitionTip}`]: {\n borderLeftColor: theme.palette.success.main,\n backgroundColor: alpha(theme.palette.success.main, 0.08),\n },\n [`& .${contentClasses.admonitionWarning}`]: {\n borderLeftColor: theme.palette.warning.main,\n backgroundColor: alpha(theme.palette.warning.main, 0.08),\n },\n [`& .${contentClasses.admonitionDanger}`]: {\n borderLeftColor: theme.palette.error.main,\n backgroundColor: alpha(theme.palette.error.main, 0.08),\n },\n [`& .${contentClasses.admonitionInfo}`]: {\n borderLeftColor: theme.palette.info.main,\n backgroundColor: alpha(theme.palette.info.main, 0.08),\n },\n [`& .${contentClasses.admonitionCaution}`]: {\n borderLeftColor: theme.palette.warning.dark,\n backgroundColor: alpha(theme.palette.warning.dark, 0.08),\n },\n\n // ─── Tabs ───────────────────────────────────────────────────\n [`& .${contentClasses.tabs}`]: {\n margin: theme.spacing(2, 0),\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n overflow: 'hidden',\n },\n [`& .${contentClasses.tabsHeader}`]: {\n display: 'flex',\n gap: 0,\n borderBottom: `1px solid ${theme.palette.divider}`,\n backgroundColor: alpha(theme.palette.text.primary, 0.03),\n },\n [`& .${contentClasses.tabsTab}`]: {\n appearance: 'none',\n background: 'transparent',\n border: 'none',\n padding: theme.spacing(1, 2),\n fontFamily: 'inherit',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: theme.palette.text.secondary,\n cursor: 'pointer',\n borderBottom: '2px solid transparent',\n transition: 'all 0.15s ease',\n '&:hover': { color: theme.palette.text.primary },\n },\n [`& .${contentClasses.tabsTabActive}`]: {\n color: theme.palette.text.primary,\n borderBottomColor: theme.palette.primary.main,\n },\n [`& .${contentClasses.tabsPanel}`]: {\n padding: theme.spacing(2),\n // No `:first-child` reset needed: headings only take a top margin\n // when preceded by a sibling (see heading rules above) and\n // paragraphs carry only a bottom margin, so the panel's first\n // child never has an excess top margin. (SSR-safe.)\n '& > :last-child': { marginBottom: 0 },\n },\n\n // ─── Code block — title + copy button ───────────────────────\n [`& .${contentClasses.codeBlockTitle}`]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.spacing(1),\n padding: theme.spacing(0.75, 1.5),\n fontSize: '0.75rem',\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n color: theme.palette.text.secondary,\n backgroundColor: alpha(theme.palette.text.primary, 0.06),\n borderTopLeftRadius: theme.shape.borderRadius,\n borderTopRightRadius: theme.shape.borderRadius,\n },\n [`& .${contentClasses.codeBlockCopy}`]: {\n appearance: 'none',\n background: 'transparent',\n border: 'none',\n color: 'inherit',\n cursor: 'pointer',\n padding: theme.spacing(0.25, 0.75),\n fontSize: '0.875rem',\n borderRadius: theme.shape.borderRadius,\n '&:hover': { backgroundColor: alpha(theme.palette.text.primary, 0.08) },\n },\n\n // ─── Figure ─────────────────────────────────────────────────\n [`& .${contentClasses.figure}`]: {\n margin: theme.spacing(2, 0),\n textAlign: 'center',\n },\n [`& .${contentClasses.figcaption}`]: {\n fontSize: '0.8125rem',\n color: theme.palette.text.secondary,\n marginTop: theme.spacing(0.75),\n },\n\n // ─── kbd ────────────────────────────────────────────────────\n [`& .${contentClasses.kbd}`]: {\n display: 'inline-block',\n padding: theme.spacing(0, 0.5),\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n fontSize: '0.8em',\n color: theme.palette.text.primary,\n border: `1px solid ${theme.palette.divider}`,\n borderBottomWidth: 2,\n borderRadius: 4,\n backgroundColor: alpha(theme.palette.text.primary, 0.04),\n boxShadow: `0 1px 0 ${alpha(theme.palette.text.primary, 0.15)}`,\n minWidth: '1.5em',\n textAlign: 'center',\n },\n\n // ─── Compact mode (chat messages, comments, etc.) ─────────\n [`&.${contentClasses.compact}`]: {\n '> * + *': { marginTop: 0, marginBottom: 2 },\n // (Dropped an SSR-unsafe `& > :first-child:not(p)` 4px top-margin\n // tweak — cosmetically negligible in compact mode, and `:first-child`\n // triggered Emotion's SSR warning.)\n '& h1, & h2, & h3, & h4, & h5, & h6': { marginTop: 0, marginBottom: 2 },\n h1: { fontSize: '1.25rem', fontWeight: 600, marginTop: 0, marginBottom: 2 },\n h2: { fontSize: '1.125rem', fontWeight: 600, marginTop: 0, marginBottom: 2 },\n h3: { fontSize: '1rem', fontWeight: 600, marginTop: 0, marginBottom: 2 },\n 'h4, h5, h6': { fontSize: '0.875rem', fontWeight: 600, marginTop: 0, marginBottom: 2 },\n p: {\n fontSize: '0.8125rem',\n lineHeight: 1.5,\n marginBottom: 2,\n '&:last-child': { marginBottom: 0 },\n },\n hr: { margin: '4px 0' },\n '& blockquote': {\n margin: '4px 0',\n padding: theme.spacing(0.5, 0, 0.5, 1.5),\n borderRadius: 0,\n backgroundColor: 'transparent',\n '&::before': { display: 'none' },\n },\n '& ul, & ol': {\n paddingLeft: 20,\n marginBottom: 2,\n '& > li': { lineHeight: 1.5, fontSize: '0.8125rem' },\n },\n '& img:not([class])': { marginBottom: 4 },\n [`& .${contentClasses.codeBlock}`]: { marginBottom: 4 },\n [`& .${contentClasses.codeBlock} pre, & pre:not([class])`]: {\n padding: theme.spacing(1.5),\n fontSize: '0.75rem',\n lineHeight: 1.5,\n marginBottom: 4,\n },\n [`& .${contentClasses.codeInline}, & :not(pre) > code:not([class])`]: {\n fontSize: '0.75rem',\n },\n '& table': {\n fontSize: '0.75rem',\n marginBottom: 4,\n },\n },\n}));\n","'use client';\n\nimport {\n type ReactNode,\n type ComponentType,\n type ElementType,\n Fragment,\n useState,\n useCallback,\n createContext,\n useContext,\n} from 'react';\nimport { ContentRoot } from '../content-renderer/styles.js';\nimport { contentClasses } from '../content-renderer/classes.js';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// ---------------------------------------------------------------------------\n// URL safety (XSS hardening, T#347)\n// ---------------------------------------------------------------------------\n//\n// Every URL that lands in an `href`, `src`, or other navigable attribute\n// MUST be schema-validated. Cookie-mode auth makes any rendered\n// javascript:/data:/vbscript:/blob: URI catastrophic — an attacker who\n// crafts a TipTap document with a `link` mark or `image` node carrying\n// a `javascript:alert(...)` href gets full session control on click.\n// These guards are intentionally conservative: anything that isn't\n// unambiguously a same-origin path or an http(s) URL collapses to a\n// safe sentinel (`#` for links, undefined for image src so the <img>\n// renders nothing rather than load a hostile resource).\n\nfunction isSafeHref(url: unknown): url is string {\n if (typeof url !== 'string' || url.length === 0) return false;\n // Written as escapes, not as the literal bytes: the source used to hold\n // real control characters, so this read as `/[ -]/` — \"a space or a\n // dash\" — in every editor and diff. What it actually rejects is the\n // C0 range plus DEL, which is what makes `java\\tscript:` and friends\n // parse as `javascript:` in some URL parsers.\n // eslint-disable-next-line no-control-regex -- rejecting control characters is the point\n if (/[\\x00-\\x1f\\x7f]/.test(url)) return false;\n if (url !== url.trim() || url.includes('\\\\') || url.startsWith('//')) return false;\n if (url.startsWith('#')) return true;\n if (url.startsWith('/') && !url.startsWith('//') && !url.startsWith('/\\\\')) return true;\n const lower = url.toLowerCase().trimStart();\n if (lower.startsWith('http://') || lower.startsWith('https://')) return true;\n // A path relative to the source document is useful for corpus navigation.\n // A scheme (including unknown schemes) or network-path authority is not a relative path.\n return !/^[a-z][a-z0-9+.-]*:/i.test(url);\n}\n\n/** Return the URL if safe to interpolate into href/src; otherwise undefined. */\nexport function sanitizeHref(url: unknown): string | undefined {\n return isSafeHref(url) ? (url as string) : undefined;\n}\n\n/**\n * Restrictive iframe-src validator for embed nodes (youtube et al.).\n * Accepts only https://www.youtube.com / https://www.youtube-nocookie.com.\n * Anything else collapses to undefined so the iframe doesn't render.\n */\nfunction sanitizeEmbedSrc(url: unknown): string | undefined {\n if (typeof url !== 'string') return undefined;\n if (!isSafeHref(url)) return undefined;\n const lower = url.toLowerCase();\n if (lower.startsWith('https://www.youtube.com/') || lower.startsWith('https://www.youtube-nocookie.com/')) {\n return url;\n }\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface TipTapMark {\n type: string;\n attrs?: Record<string, any>;\n}\n\nexport interface TipTapNode {\n type: string;\n content?: TipTapNode[];\n text?: string;\n marks?: TipTapMark[];\n attrs?: Record<string, any>;\n}\n\nexport interface TipTapDoc {\n type: 'doc';\n content: TipTapNode[];\n}\n\n// ---------------------------------------------------------------------------\n// Custom node registry\n// ---------------------------------------------------------------------------\n\nexport type CustomNodeRenderer = ComponentType<{ node: TipTapNode }>;\nconst customNodeRegistry = new Map<string, CustomNodeRenderer>();\n\nexport function registerTipTapNode(type: string, component: CustomNodeRenderer) {\n customNodeRegistry.set(type, component);\n}\n\n// ---------------------------------------------------------------------------\n// Render context\n//\n// Lets the host app inject:\n// - `linkComponent`: a router-aware Link (e.g. react-router-dom's Link)\n// used by the `internalLink` mark to avoid full-page reloads.\n// ---------------------------------------------------------------------------\n\ninterface TipTapRenderContext {\n nodeRenderers?: Readonly<Record<string, CustomNodeRenderer>>;\n inheritRegisteredNodes?: boolean;\n linkComponent?: ElementType<{ to: string; children?: ReactNode; className?: string }>;\n}\n\nconst TipTapContext = createContext<TipTapRenderContext>({});\n\n// ---------------------------------------------------------------------------\n// Mark rendering\n// ---------------------------------------------------------------------------\n\nfunction renderMarks(text: string, marks: TipTapMark[] = [], ctx?: TipTapRenderContext): ReactNode {\n return marks.reduce<ReactNode>((acc, mark) => {\n switch (mark.type) {\n case 'bold':\n return <strong>{acc}</strong>;\n case 'italic':\n return <em>{acc}</em>;\n case 'code':\n return <code className={contentClasses.codeInline}>{acc}</code>;\n case 'underline':\n return <u>{acc}</u>;\n case 'strike':\n return <s>{acc}</s>;\n case 'link': {\n // T#347 — href is attacker-controlled (post author chose it).\n // sanitizeHref rejects javascript:/data:/vbscript:/etc. — falls\n // back to `#` so the link is inert rather than dangerous.\n const safeHref = sanitizeHref(mark.attrs?.href) ?? '#';\n // Same-origin paths route through the host app's Link (router-\n // aware) so cross-doc navigation doesn't full-reload. External\n // http(s) URLs keep <a target=\"_blank\"> behaviour.\n const Link = ctx?.linkComponent;\n if (Link && safeHref.startsWith('/') && !safeHref.startsWith('//')) {\n return (\n <Link to={safeHref} className={contentClasses.link}>\n {acc}\n </Link>\n );\n }\n return (\n <a href={safeHref} target={mark.attrs?.target ?? '_blank'} rel=\"noopener noreferrer\">\n {acc}\n </a>\n );\n }\n case 'internalLink': {\n const to = sanitizeHref(mark.attrs?.to ?? mark.attrs?.href) ?? '#';\n const Link = ctx?.linkComponent;\n return Link ? (\n <Link to={to} className={contentClasses.link}>\n {acc}\n </Link>\n ) : (\n <a href={to}>{acc}</a>\n );\n }\n case 'highlight':\n return <mark style={mark.attrs?.color ? { backgroundColor: mark.attrs.color } : undefined}>{acc}</mark>;\n case 'subscript':\n return <sub>{acc}</sub>;\n case 'superscript':\n return <sup>{acc}</sup>;\n case 'textStyle':\n return <span style={{ color: mark.attrs?.color }}>{acc}</span>;\n case 'kbd':\n return <kbd className={contentClasses.kbd}>{acc}</kbd>;\n default:\n return acc;\n }\n }, text);\n}\n\n// ---------------------------------------------------------------------------\n// Slug generation for heading anchors\n// ---------------------------------------------------------------------------\n\nfunction slugify(nodes?: TipTapNode[]): string | undefined {\n if (!nodes) return undefined;\n const text = nodes.map((n) => n.text ?? '').join('');\n if (!text) return undefined;\n return text\n .toLowerCase()\n .replace(/[^a-z0-9а-яё]+/gi, '-')\n .replace(/^-|-$/g, '');\n}\n\n// ---------------------------------------------------------------------------\n// Code block — pre-rendered HTML support + copy button\n// ---------------------------------------------------------------------------\n\nfunction CodeBlock({ node }: { node: TipTapNode }) {\n const language = node.attrs?.language as string | null | undefined;\n const title = node.attrs?.title as string | undefined;\n // T#347 — XSS hardening: the prior implementation read `node.attrs.html`\n // and injected it via dangerouslySetInnerHTML on the premise that it was\n // \"Shiki-rendered HTML pre-sanitised at build time\". That premise is\n // false in the portal context: `node.attrs` come from a TipTap document\n // authored at runtime by an arbitrary user. An attacker who can post a\n // codeBlock could set `attrs.html` to a script-carrying payload and\n // achieve stored XSS. We drop the html-attr path entirely; if syntax\n // highlighting is needed, the consumer can pass a custom CodeBlock via\n // the customNodeRegistry that highlights from the trusted text content.\n const code = node.content?.map((n) => n.text ?? '').join('\\n') ?? '';\n const [copied, setCopied] = useState(false);\n\n const onCopy = useCallback(() => {\n navigator.clipboard?.writeText(code).then(\n () => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n },\n () => {\n // Clipboard API unavailable (insecure context). Silently no-op.\n }\n );\n }, [code]);\n\n return (\n <div className={contentClasses.codeBlock} data-language={language ?? undefined}>\n {(title || language) && (\n <div className={contentClasses.codeBlockTitle}>\n <span>{title ?? language}</span>\n <button type=\"button\" onClick={onCopy} className={contentClasses.codeBlockCopy} aria-label=\"Copy code\">\n {copied ? '✓' : '⧉'}\n </button>\n </div>\n )}\n <pre>\n <code className={language ? `language-${language}` : undefined}>{code}</code>\n </pre>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Admonition (callout)\n// ---------------------------------------------------------------------------\n\nconst ADMONITION_LABEL: Record<string, string> = {\n note: 'Note',\n tip: 'Tip',\n warning: 'Warning',\n danger: 'Danger',\n info: 'Info',\n caution: 'Caution',\n};\n\nconst ADMONITION_CLASS: Record<string, string> = {\n note: contentClasses.admonitionNote,\n tip: contentClasses.admonitionTip,\n warning: contentClasses.admonitionWarning,\n danger: contentClasses.admonitionDanger,\n info: contentClasses.admonitionInfo,\n caution: contentClasses.admonitionCaution,\n};\n\nfunction Admonition({ node }: { node: TipTapNode }) {\n const kind = String(node.attrs?.kind ?? 'note');\n const title = (node.attrs?.title as string | undefined) ?? ADMONITION_LABEL[kind] ?? kind;\n const variantClass = ADMONITION_CLASS[kind] ?? contentClasses.admonitionNote;\n return (\n <aside className={`${contentClasses.admonition} ${variantClass}`} data-kind={kind}>\n <div className={contentClasses.admonitionTitle}>{title}</div>\n <div className={contentClasses.admonitionContent}>{node.content?.map(renderNode)}</div>\n </aside>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tabs\n// ---------------------------------------------------------------------------\n\nfunction Tabs({ node }: { node: TipTapNode }) {\n const items = (node.content ?? []).filter((c) => c.type === 'tabItem');\n const [active, setActive] = useState(0);\n if (items.length === 0) return null;\n\n const safeActive = Math.min(active, items.length - 1);\n\n return (\n <div className={contentClasses.tabs}>\n <div className={contentClasses.tabsHeader} role=\"tablist\">\n {items.map((item, i) => {\n const label = item.attrs?.label ?? item.attrs?.value ?? `Tab ${i + 1}`;\n const isActive = i === safeActive;\n return (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={`${contentClasses.tabsTab} ${isActive ? contentClasses.tabsTabActive : ''}`}\n onClick={() => setActive(i)}\n >\n {label}\n </button>\n );\n })}\n </div>\n <div className={contentClasses.tabsPanel} role=\"tabpanel\">\n {items[safeActive]?.content?.map(renderNode)}\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Node rendering\n// ---------------------------------------------------------------------------\n\nfunction renderNode(node: TipTapNode, index: number): ReactNode {\n return <ScopedNode key={index} node={node} index={index} />;\n}\nfunction ScopedNode({ node, index }: { node: TipTapNode; index: number }): ReactNode {\n const context = useContext(TipTapContext);\n const CustomRenderer =\n context.nodeRenderers?.[node.type] ??\n (context.inheritRegisteredNodes !== false ? customNodeRegistry.get(node.type) : undefined);\n if (CustomRenderer) return <CustomRenderer key={index} node={node} />;\n\n switch (node.type) {\n case 'text':\n return <TextNode key={index} node={node} />;\n\n case 'paragraph':\n return <p key={index}>{node.content?.map(renderNode)}</p>;\n\n case 'heading': {\n const level = Math.min(Math.max(node.attrs?.level ?? 2, 1), 6);\n const Tag = `h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n // Prefer the build-time-supplied id (kept consistent with the engine's\n // slugifyHeading); fall back to runtime slugification for legacy content.\n const id = node.attrs?.id ?? slugify(node.content);\n return (\n <Tag key={index} id={id}>\n {node.content?.map(renderNode)}\n </Tag>\n );\n }\n\n case 'bulletList':\n return <ul key={index}>{node.content?.map(renderNode)}</ul>;\n\n case 'orderedList':\n return (\n <ol key={index} start={node.attrs?.start ?? 1}>\n {node.content?.map(renderNode)}\n </ol>\n );\n\n case 'listItem':\n return <li key={index}>{node.content?.map(renderNode)}</li>;\n\n case 'taskList':\n return (\n <ul key={index} data-type=\"taskList\">\n {node.content?.map(renderNode)}\n </ul>\n );\n\n case 'taskItem': {\n const checked = node.attrs?.checked ?? false;\n return (\n <li key={index} data-type=\"taskItem\" data-checked={checked}>\n <label>\n <input type=\"checkbox\" checked={checked} readOnly className={contentClasses.checkbox} />\n </label>\n <div>{node.content?.map(renderNode)}</div>\n </li>\n );\n }\n\n case 'blockquote':\n return <blockquote key={index}>{node.content?.map(renderNode)}</blockquote>;\n\n case 'codeBlock':\n return <CodeBlock key={index} node={node} />;\n\n case 'horizontalRule':\n return <hr key={index} />;\n\n case 'image': {\n // T#347 — XSS hardening: image src in a TipTap doc is post-author\n // controlled. A `data:text/html` URL would let the browser load\n // a script-bearing document under the portal's origin. Reject\n // anything that isn't a same-origin path or http(s) URL — the\n // image silently doesn't render if the src is unsafe.\n const safeSrc = sanitizeHref(node.attrs?.src);\n if (!safeSrc) return null;\n return (\n <img\n key={index}\n src={safeSrc}\n alt={node.attrs?.alt ?? ''}\n title={node.attrs?.title}\n className={contentClasses.image}\n loading=\"lazy\"\n />\n );\n }\n\n case 'figure':\n return (\n <figure key={index} className={contentClasses.figure}>\n {node.content?.map(renderNode)}\n </figure>\n );\n\n case 'figcaption':\n return (\n <figcaption key={index} className={contentClasses.figcaption}>\n {node.content?.map(renderNode)}\n </figcaption>\n );\n\n case 'hardBreak':\n return <br key={index} />;\n\n // ─── Admonition / Tabs ──────────────────────────────────\n case 'admonition':\n return <Admonition key={index} node={node} />;\n\n case 'tabs':\n return <Tabs key={index} node={node} />;\n\n case 'tabItem':\n // tabItem is rendered by Tabs; if it appears outside, fall back to a\n // plain section so the content isn't lost.\n return (\n <section key={index} data-type=\"tabItem\">\n {node.content?.map(renderNode)}\n </section>\n );\n\n // ─── Table ──────────────────────────────────────────────\n case 'table':\n return (\n <div key={index} style={{ overflowX: 'auto' }}>\n <table>\n <tbody>{node.content?.map(renderNode)}</tbody>\n </table>\n </div>\n );\n\n case 'tableRow':\n return <tr key={index}>{node.content?.map(renderNode)}</tr>;\n\n case 'tableCell':\n return (\n <td key={index} colSpan={node.attrs?.colspan ?? 1} rowSpan={node.attrs?.rowspan ?? 1}>\n {node.content?.map(renderNode)}\n </td>\n );\n\n case 'tableHeader':\n return (\n <th key={index} colSpan={node.attrs?.colspan ?? 1} rowSpan={node.attrs?.rowspan ?? 1}>\n {node.content?.map(renderNode)}\n </th>\n );\n\n // ─── Details / Summary (collapsible) ────────────────────\n case 'details':\n return (\n <details key={index} open={node.attrs?.open}>\n {node.content?.map(renderNode)}\n </details>\n );\n\n case 'detailsSummary':\n return <summary key={index}>{node.content?.map(renderNode)}</summary>;\n\n case 'detailsContent':\n return <div key={index}>{node.content?.map(renderNode)}</div>;\n\n // ─── YouTube embed ──────────────────────────────────────\n case 'youtube': {\n // T#347 — XSS hardening: iframes are powerful (can frame any URL\n // the host allows X-Frame'ing). Restrict src to the YouTube\n // origins we actually want — anything else collapses to null\n // and the iframe doesn't render. Without this, a post author\n // could embed an arbitrary attacker-controlled page in an\n // iframe with autoplay + fullscreen permissions.\n const safeSrc = sanitizeEmbedSrc(node.attrs?.src);\n if (!safeSrc) return null;\n return (\n <div key={index} style={{ position: 'relative', paddingBottom: '56.25%', height: 0, marginBottom: '1.25rem' }}>\n <iframe\n src={safeSrc}\n title=\"YouTube video\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n border: 'none',\n borderRadius: 8,\n }}\n />\n </div>\n );\n }\n\n default:\n // Fallback: render children if present\n if (node.content) {\n return <Fragment key={index}>{node.content.map(renderNode)}</Fragment>;\n }\n return null;\n }\n}\n\nfunction TextNode({ node }: { node: TipTapNode }) {\n const ctx = useContext(TipTapContext);\n return <Fragment>{renderMarks(node.text ?? '', node.marks, ctx)}</Fragment>;\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport interface TipTapRendererProps {\n nodeRenderers?: Readonly<Record<string, CustomNodeRenderer>>;\n inheritRegisteredNodes?: boolean;\n /** TipTap JSON document */\n content: TipTapDoc | Record<string, unknown> | null;\n /** Additional CSS class */\n className?: string;\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n /** Compact mode for chat messages, comments, etc. */\n compact?: boolean;\n /**\n * Component used to render `internalLink` marks. Pass a router-aware\n * component (e.g. `Link` from react-router-dom) to avoid full reloads.\n */\n linkComponent?: ElementType<{ to: string; children?: ReactNode; className?: string }>;\n}\n\nexport function TipTapRenderer({\n content,\n className,\n sx,\n compact,\n linkComponent,\n nodeRenderers,\n inheritRegisteredNodes,\n}: TipTapRendererProps) {\n if (!content || !('content' in content) || !Array.isArray(content.content)) {\n return null;\n }\n\n const ctxValue: TipTapRenderContext = { linkComponent, nodeRenderers, inheritRegisteredNodes };\n\n return (\n <TipTapContext.Provider value={ctxValue}>\n <ContentRoot\n className={[contentClasses.root, contentClasses.tiptap, compact && contentClasses.compact, className]\n .filter(Boolean)\n .join(' ')}\n sx={sx}\n >\n {(content as TipTapDoc).content.map(renderNode)}\n </ContentRoot>\n </TipTapContext.Provider>\n );\n}\n"]}