@flamingo-stack/openframe-frontend-core 0.0.507 → 0.0.508-snapshot.20260802192916

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 (310) hide show
  1. package/dist/chat-protocol/decode.d.ts +58 -0
  2. package/dist/chat-protocol/decode.d.ts.map +1 -0
  3. package/dist/chat-protocol/encode.d.ts +44 -0
  4. package/dist/chat-protocol/encode.d.ts.map +1 -0
  5. package/dist/chat-protocol/env-flag.d.ts +35 -0
  6. package/dist/chat-protocol/env-flag.d.ts.map +1 -0
  7. package/dist/chat-protocol/events.d.ts +216 -0
  8. package/dist/chat-protocol/events.d.ts.map +1 -0
  9. package/dist/chat-protocol/frames.d.ts +213 -0
  10. package/dist/chat-protocol/frames.d.ts.map +1 -0
  11. package/dist/chat-protocol/index.cjs +506 -0
  12. package/dist/chat-protocol/index.cjs.map +1 -0
  13. package/dist/chat-protocol/index.d.ts +18 -0
  14. package/dist/chat-protocol/index.d.ts.map +1 -0
  15. package/dist/chat-protocol/index.js +490 -0
  16. package/dist/chat-protocol/index.js.map +1 -0
  17. package/dist/chat-protocol/ip-normalize.d.ts +44 -0
  18. package/dist/chat-protocol/ip-normalize.d.ts.map +1 -0
  19. package/dist/chat-protocol/nats-decoder.d.ts +26 -0
  20. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -0
  21. package/dist/{chunk-3SQ5KXHQ.cjs → chunk-2T4GTV25.cjs} +9 -9
  22. package/dist/{chunk-3SQ5KXHQ.cjs.map → chunk-2T4GTV25.cjs.map} +1 -1
  23. package/dist/{chunk-CWAOV2FK.cjs → chunk-3CGZPAGR.cjs} +3 -3
  24. package/dist/{chunk-CWAOV2FK.cjs.map → chunk-3CGZPAGR.cjs.map} +1 -1
  25. package/dist/{chunk-TLMJHMXJ.js → chunk-3QSR22IC.js} +12 -12
  26. package/dist/chunk-3QSR22IC.js.map +1 -0
  27. package/dist/{chunk-TWYNR4TZ.cjs → chunk-4G5TLHJD.cjs} +7141 -4799
  28. package/dist/chunk-4G5TLHJD.cjs.map +1 -0
  29. package/dist/{chunk-ADPMHWOE.js → chunk-72XAID7Y.js} +4 -4
  30. package/dist/{chunk-PAGKRNWK.js → chunk-7WZHBQ4J.js} +2 -2
  31. package/dist/{chunk-OCEKO5CW.js → chunk-AEELJC4N.js} +12106 -9764
  32. package/dist/chunk-AEELJC4N.js.map +1 -0
  33. package/dist/{chunk-Z42BGM6Q.cjs → chunk-BT2WWDFP.cjs} +5 -5
  34. package/dist/{chunk-Z42BGM6Q.cjs.map → chunk-BT2WWDFP.cjs.map} +1 -1
  35. package/dist/{chunk-7LEL3RIX.cjs → chunk-C7OY3PQP.cjs} +11 -11
  36. package/dist/{chunk-7LEL3RIX.cjs.map → chunk-C7OY3PQP.cjs.map} +1 -1
  37. package/dist/{chunk-RHGGEKPQ.cjs → chunk-CIOLOQKQ.cjs} +4 -4
  38. package/dist/{chunk-RHGGEKPQ.cjs.map → chunk-CIOLOQKQ.cjs.map} +1 -1
  39. package/dist/{chunk-TSZHM74B.js → chunk-DC2TKS7C.js} +2 -2
  40. package/dist/{chunk-M2GOR3XQ.cjs → chunk-DYPYR7FR.cjs} +87 -87
  41. package/dist/{chunk-M2GOR3XQ.cjs.map → chunk-DYPYR7FR.cjs.map} +1 -1
  42. package/dist/{chunk-I64ABCDX.js → chunk-I2B6X77L.js} +2 -2
  43. package/dist/{chunk-NIZDKTGL.cjs → chunk-K5MSCMDK.cjs} +37 -37
  44. package/dist/{chunk-NIZDKTGL.cjs.map → chunk-K5MSCMDK.cjs.map} +1 -1
  45. package/dist/{chunk-DTYRYB2N.js → chunk-K6QTZ7CZ.js} +2 -2
  46. package/dist/{chunk-4LTMXDUS.js → chunk-KBN7PMFT.js} +2 -2
  47. package/dist/{chunk-TBMV7I5N.js → chunk-KXZO2WZX.js} +2 -2
  48. package/dist/{chunk-QTYZMP6D.cjs → chunk-LBAKLT6T.cjs} +62 -62
  49. package/dist/chunk-LBAKLT6T.cjs.map +1 -0
  50. package/dist/{chunk-KEBYLU3U.js → chunk-LFUPI7VX.js} +2 -2
  51. package/dist/{chunk-LDTR4IVZ.cjs → chunk-M37PBG4N.cjs} +31 -31
  52. package/dist/{chunk-LDTR4IVZ.cjs.map → chunk-M37PBG4N.cjs.map} +1 -1
  53. package/dist/{chunk-WA7RR64F.js → chunk-PO5O654H.js} +6 -5
  54. package/dist/chunk-PO5O654H.js.map +1 -0
  55. package/dist/{chunk-WK4N5VBX.cjs → chunk-QJJISLPA.cjs} +28 -27
  56. package/dist/chunk-QJJISLPA.cjs.map +1 -0
  57. package/dist/{chunk-2F44PLTV.cjs → chunk-T7MCSA55.cjs} +26 -26
  58. package/dist/{chunk-2F44PLTV.cjs.map → chunk-T7MCSA55.cjs.map} +1 -1
  59. package/dist/{chunk-WJQHJD7J.js → chunk-TWSKTJHW.js} +2 -2
  60. package/dist/{chunk-ZSQHZYCO.cjs → chunk-UQDMJ6DH.cjs} +13 -13
  61. package/dist/{chunk-ZSQHZYCO.cjs.map → chunk-UQDMJ6DH.cjs.map} +1 -1
  62. package/dist/{chunk-TZRUCD56.js → chunk-V3ZAAFE3.js} +5 -5
  63. package/dist/{chunk-LRGHJPET.js → chunk-XGIFOHKE.js} +2 -2
  64. package/dist/{chunk-POOMO3PA.cjs → chunk-YQEPRYT5.cjs} +7 -7
  65. package/dist/{chunk-POOMO3PA.cjs.map → chunk-YQEPRYT5.cjs.map} +1 -1
  66. package/dist/components/case-studies/index.cjs +8 -8
  67. package/dist/components/case-studies/index.js +2 -2
  68. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  69. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  70. package/dist/components/chat/hooks/index.d.ts +0 -1
  71. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  72. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
  73. package/dist/components/chat/hooks/use-chunk-catchup.d.ts.map +1 -1
  74. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +15 -48
  75. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  76. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +10 -57
  77. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  78. package/dist/components/chat/index.cjs +10 -2
  79. package/dist/components/chat/index.cjs.map +1 -1
  80. package/dist/components/chat/index.d.ts +1 -0
  81. package/dist/components/chat/index.d.ts.map +1 -1
  82. package/dist/components/chat/index.js +21 -13
  83. package/dist/components/chat/stream/chat-dialog-store.d.ts +184 -0
  84. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +1 -0
  85. package/dist/components/chat/stream/chat-stream-reducer.d.ts +380 -0
  86. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -0
  87. package/dist/components/chat/stream/delta-batcher.d.ts +51 -0
  88. package/dist/components/chat/stream/delta-batcher.d.ts.map +1 -0
  89. package/dist/components/chat/stream/index.d.ts +17 -0
  90. package/dist/components/chat/stream/index.d.ts.map +1 -0
  91. package/dist/components/chat/stream/message-mutations.d.ts +77 -0
  92. package/dist/components/chat/stream/message-mutations.d.ts.map +1 -0
  93. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +22 -0
  94. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +1 -0
  95. package/dist/components/chat/types/api.types.d.ts +1 -81
  96. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  97. package/dist/components/chat/types/processing.types.d.ts +2 -93
  98. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  99. package/dist/components/chat/types/unified-chat-state.types.d.ts +15 -0
  100. package/dist/components/chat/types/unified-chat-state.types.d.ts.map +1 -1
  101. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +34 -6
  102. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  103. package/dist/components/chat/utils/history-merge.d.ts.map +1 -1
  104. package/dist/components/chat/utils/index.d.ts +2 -3
  105. package/dist/components/chat/utils/index.d.ts.map +1 -1
  106. package/dist/components/chat/utils/process-historical-messages.d.ts +59 -11
  107. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  108. package/dist/components/contact/index.cjs +3 -3
  109. package/dist/components/contact/index.js +2 -2
  110. package/dist/components/docs/index.cjs +5 -5
  111. package/dist/components/docs/index.js +4 -4
  112. package/dist/components/embeds/index.cjs +3 -3
  113. package/dist/components/embeds/index.js +2 -2
  114. package/dist/components/faq/index.cjs +3 -3
  115. package/dist/components/faq/index.js +2 -2
  116. package/dist/components/features/index.cjs +2 -2
  117. package/dist/components/features/index.js +1 -1
  118. package/dist/components/help-center-pages/index.cjs +22 -22
  119. package/dist/components/help-center-pages/index.js +13 -13
  120. package/dist/components/index.cjs +174 -132
  121. package/dist/components/index.cjs.map +1 -1
  122. package/dist/components/index.js +65 -23
  123. package/dist/components/index.js.map +1 -1
  124. package/dist/components/meeting-scheduler/directory.d.ts.map +1 -1
  125. package/dist/components/meeting-scheduler/index.cjs +35 -35
  126. package/dist/components/meeting-scheduler/index.cjs.map +1 -1
  127. package/dist/components/meeting-scheduler/index.js +5 -5
  128. package/dist/components/meeting-scheduler/index.js.map +1 -1
  129. package/dist/components/navigation/index.cjs +2 -2
  130. package/dist/components/navigation/index.js +1 -1
  131. package/dist/components/onboarding-guides/index.cjs +5 -5
  132. package/dist/components/onboarding-guides/index.js +4 -4
  133. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  134. package/dist/components/related-content/index.cjs +3 -3
  135. package/dist/components/related-content/index.js +2 -2
  136. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  137. package/dist/components/tickets/index.cjs +6 -6
  138. package/dist/components/tickets/index.js +5 -5
  139. package/dist/components/ui/index.cjs +44 -2
  140. package/dist/components/ui/index.cjs.map +1 -1
  141. package/dist/components/ui/index.d.ts +1 -2
  142. package/dist/components/ui/index.d.ts.map +1 -1
  143. package/dist/components/ui/index.js +55 -13
  144. package/dist/components/ui/markdown/base-components.d.ts +51 -0
  145. package/dist/components/ui/markdown/base-components.d.ts.map +1 -0
  146. package/dist/components/ui/markdown/engine.d.ts +99 -0
  147. package/dist/components/ui/markdown/engine.d.ts.map +1 -0
  148. package/dist/components/ui/markdown/heading-ids.d.ts +65 -0
  149. package/dist/components/ui/markdown/heading-ids.d.ts.map +1 -0
  150. package/dist/components/ui/markdown/index.d.ts +18 -0
  151. package/dist/components/ui/markdown/index.d.ts.map +1 -0
  152. package/dist/components/ui/markdown/mermaid-diagram.d.ts +79 -0
  153. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +1 -0
  154. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +14 -0
  155. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +1 -0
  156. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +40 -0
  157. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +1 -0
  158. package/dist/components/ui/markdown/rich/shortcodes.d.ts +8 -0
  159. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +1 -0
  160. package/dist/components/ui/markdown/sanitize.d.ts +153 -0
  161. package/dist/components/ui/markdown/sanitize.d.ts.map +1 -0
  162. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +23 -0
  163. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +1 -0
  164. package/dist/components/ui/markdown/streaming.d.ts +78 -0
  165. package/dist/components/ui/markdown/streaming.d.ts.map +1 -0
  166. package/dist/components/ui/markdown/text-size.d.ts +34 -0
  167. package/dist/components/ui/markdown/text-size.d.ts.map +1 -0
  168. package/dist/index.cjs +60 -2
  169. package/dist/index.cjs.map +1 -1
  170. package/dist/index.js +71 -13
  171. package/dist/utils/index.cjs +169 -40
  172. package/dist/utils/index.cjs.map +1 -1
  173. package/dist/utils/index.d.ts +1 -0
  174. package/dist/utils/index.d.ts.map +1 -1
  175. package/dist/utils/index.js +162 -41
  176. package/dist/utils/index.js.map +1 -1
  177. package/dist/utils/markdown-fences.d.ts +42 -0
  178. package/dist/utils/markdown-fences.d.ts.map +1 -0
  179. package/dist/utils/markdown-heading-id.d.ts +85 -0
  180. package/dist/utils/markdown-heading-id.d.ts.map +1 -0
  181. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  182. package/package.json +7 -1
  183. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +319 -0
  184. package/src/chat-protocol/__tests__/chat-protocol.test.ts +516 -0
  185. package/src/chat-protocol/__tests__/env-flag.test.ts +52 -0
  186. package/src/chat-protocol/__tests__/ip-normalize.test.ts +136 -0
  187. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +237 -0
  188. package/src/chat-protocol/decode.ts +278 -0
  189. package/src/chat-protocol/encode.ts +71 -0
  190. package/src/chat-protocol/env-flag.ts +39 -0
  191. package/src/chat-protocol/events.ts +254 -0
  192. package/src/chat-protocol/frames.ts +245 -0
  193. package/src/chat-protocol/index.ts +21 -0
  194. package/src/chat-protocol/ip-normalize.ts +146 -0
  195. package/src/chat-protocol/nats-decoder.ts +264 -0
  196. package/src/components/chat/.chat-message-list.md +10 -6
  197. package/src/components/chat/__tests__/chat-message-list.test.tsx +450 -9
  198. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +207 -0
  199. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +250 -0
  200. package/src/components/chat/chat-message-enhanced.tsx +122 -20
  201. package/src/components/chat/chat-message-list.tsx +515 -133
  202. package/src/components/chat/embeddable-chat.tsx +6 -0
  203. package/src/components/chat/hooks/.index.md +30 -33
  204. package/src/components/chat/hooks/.use-nats-chat-adapter.md +36 -55
  205. package/src/components/chat/hooks/__tests__/__snapshots__/conversation-id-persistence-golden.test.ts.snap +37 -0
  206. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  207. package/src/components/chat/hooks/__tests__/chunk-catchup-dialog-staleness.test.ts +92 -0
  208. package/src/components/chat/hooks/__tests__/conversation-id-persistence-golden.test.ts +438 -0
  209. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +318 -0
  210. package/src/components/chat/hooks/index.ts +0 -1
  211. package/src/components/chat/hooks/use-chat.ts +8 -0
  212. package/src/components/chat/hooks/use-chunk-catchup.ts +26 -1
  213. package/src/components/chat/hooks/use-nats-chat-adapter.ts +254 -825
  214. package/src/components/chat/hooks/use-sse-chat-adapter.ts +380 -684
  215. package/src/components/chat/index.ts +5 -0
  216. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +944 -0
  217. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +806 -0
  218. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +467 -0
  219. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +1330 -0
  220. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +255 -0
  221. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +105 -0
  222. package/src/components/chat/stream/chat-dialog-store.ts +536 -0
  223. package/src/components/chat/stream/chat-stream-reducer.ts +1928 -0
  224. package/src/components/chat/stream/delta-batcher.ts +168 -0
  225. package/src/components/chat/stream/index.ts +55 -0
  226. package/src/components/chat/stream/message-mutations.ts +340 -0
  227. package/src/components/chat/stream/use-chat-stream-reducer.ts +126 -0
  228. package/src/components/chat/thinking-display.tsx +1 -1
  229. package/src/components/chat/types/.api.types.md +39 -49
  230. package/src/components/chat/types/.processing.types.md +29 -58
  231. package/src/components/chat/types/.unified-chat-state.types.md +2 -2
  232. package/src/components/chat/types/api.types.ts +6 -73
  233. package/src/components/chat/types/processing.types.ts +11 -53
  234. package/src/components/chat/types/unified-chat-state.types.ts +16 -0
  235. package/src/components/chat/utils/.extract-incomplete-message-state.md +21 -3
  236. package/src/components/chat/utils/.history-merge.md +44 -3
  237. package/src/components/chat/utils/.index.md +31 -40
  238. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +420 -0
  239. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +605 -0
  240. package/src/components/chat/utils/__tests__/extract-incomplete-message-state.test.ts +106 -0
  241. package/src/components/chat/utils/__tests__/history-merge.test.ts +160 -0
  242. package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +61 -0
  243. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +394 -0
  244. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +270 -0
  245. package/src/components/chat/utils/extract-incomplete-message-state.ts +93 -6
  246. package/src/components/chat/utils/history-merge.ts +85 -5
  247. package/src/components/chat/utils/index.ts +5 -8
  248. package/src/components/chat/utils/process-historical-messages.ts +361 -385
  249. package/src/components/meeting-scheduler/directory.tsx +5 -2
  250. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +22 -4
  251. package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
  252. package/src/components/shared/product-release/release-detail-page.tsx +19 -4
  253. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +2420 -0
  254. package/src/components/ui/__tests__/markdown-parity.test.tsx +2540 -0
  255. package/src/components/ui/index.ts +1 -2
  256. package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +176 -0
  257. package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +151 -0
  258. package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +354 -0
  259. package/src/components/ui/markdown/__tests__/sanitize-render.test.tsx +118 -0
  260. package/src/components/ui/markdown/__tests__/streaming.test.tsx +436 -0
  261. package/src/components/ui/markdown/base-components.tsx +360 -0
  262. package/src/components/ui/markdown/engine.tsx +315 -0
  263. package/src/components/ui/markdown/heading-ids.ts +239 -0
  264. package/src/components/ui/markdown/index.ts +49 -0
  265. package/src/components/ui/markdown/mermaid-diagram.tsx +323 -0
  266. package/src/components/ui/markdown/rich/embed-overrides.tsx +199 -0
  267. package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +184 -0
  268. package/src/components/ui/markdown/rich/shortcodes.ts +170 -0
  269. package/src/components/ui/markdown/sanitize.ts +3584 -0
  270. package/src/components/ui/markdown/simple-markdown-renderer.tsx +28 -0
  271. package/src/components/ui/markdown/streaming.ts +390 -0
  272. package/src/components/ui/markdown/text-size.ts +106 -0
  273. package/src/components/ui/release-changelog-section.tsx +1 -1
  274. package/src/components/ui/ticket-info-section.tsx +1 -1
  275. package/src/utils/index.ts +1 -0
  276. package/src/utils/markdown-fences.ts +127 -0
  277. package/src/utils/markdown-heading-id.ts +348 -0
  278. package/src/utils/markdown-section-extractor.ts +41 -56
  279. package/dist/chunk-OCEKO5CW.js.map +0 -1
  280. package/dist/chunk-QTYZMP6D.cjs.map +0 -1
  281. package/dist/chunk-TLMJHMXJ.js.map +0 -1
  282. package/dist/chunk-TWYNR4TZ.cjs.map +0 -1
  283. package/dist/chunk-WA7RR64F.js.map +0 -1
  284. package/dist/chunk-WK4N5VBX.cjs.map +0 -1
  285. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +0 -6
  286. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +0 -1
  287. package/dist/components/chat/utils/chunk-parser.d.ts +0 -25
  288. package/dist/components/chat/utils/chunk-parser.d.ts.map +0 -1
  289. package/dist/components/ui/rich-markdown-renderer.d.ts +0 -34
  290. package/dist/components/ui/rich-markdown-renderer.d.ts.map +0 -1
  291. package/dist/components/ui/simple-markdown-renderer.d.ts +0 -73
  292. package/dist/components/ui/simple-markdown-renderer.d.ts.map +0 -1
  293. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +0 -77
  294. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +0 -489
  295. package/src/components/chat/utils/.chunk-parser.md +0 -62
  296. package/src/components/chat/utils/chunk-parser.ts +0 -262
  297. package/src/components/ui/.simple-markdown-renderer.md +0 -52
  298. package/src/components/ui/rich-markdown-renderer.tsx +0 -1223
  299. package/src/components/ui/simple-markdown-renderer.tsx +0 -964
  300. /package/dist/{chunk-ADPMHWOE.js.map → chunk-72XAID7Y.js.map} +0 -0
  301. /package/dist/{chunk-PAGKRNWK.js.map → chunk-7WZHBQ4J.js.map} +0 -0
  302. /package/dist/{chunk-TSZHM74B.js.map → chunk-DC2TKS7C.js.map} +0 -0
  303. /package/dist/{chunk-I64ABCDX.js.map → chunk-I2B6X77L.js.map} +0 -0
  304. /package/dist/{chunk-DTYRYB2N.js.map → chunk-K6QTZ7CZ.js.map} +0 -0
  305. /package/dist/{chunk-4LTMXDUS.js.map → chunk-KBN7PMFT.js.map} +0 -0
  306. /package/dist/{chunk-TBMV7I5N.js.map → chunk-KXZO2WZX.js.map} +0 -0
  307. /package/dist/{chunk-KEBYLU3U.js.map → chunk-LFUPI7VX.js.map} +0 -0
  308. /package/dist/{chunk-WJQHJD7J.js.map → chunk-TWSKTJHW.js.map} +0 -0
  309. /package/dist/{chunk-TZRUCD56.js.map → chunk-V3ZAAFE3.js.map} +0 -0
  310. /package/dist/{chunk-LRGHJPET.js.map → chunk-XGIFOHKE.js.map} +0 -0
@@ -155,7 +155,9 @@ import {
155
155
  CustomerInterviewCard,
156
156
  CustomerInterviewCardSkeleton,
157
157
  DEFAULT_CUSTOM_STATUS_COLOR,
158
+ DEFAULT_DIALOG_SIDE,
158
159
  DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID,
160
+ DEFAULT_MAX_REDUCERS,
159
161
  DashboardInfoCard,
160
162
  DataRoomDocCard,
161
163
  DataRoomDocCardSkeleton,
@@ -257,9 +259,11 @@ import {
257
259
  ListPageContainer,
258
260
  ListPageLayout,
259
261
  LoadError,
262
+ MAX_PENDING_RETAIN_KEYS,
260
263
  MESSAGE_ROLE,
261
264
  MESSAGE_TYPE,
262
265
  MarkdownEditor,
266
+ MarkdownEngine,
263
267
  MarqueeWall,
264
268
  MarqueeWallFades,
265
269
  MediaTypeSelector,
@@ -280,6 +284,7 @@ import {
280
284
  MenubarSubContent,
281
285
  MenubarSubTrigger,
282
286
  MenubarTrigger,
287
+ MermaidDiagram,
283
288
  MessageSegmentAccumulator,
284
289
  MingoChatHistory,
285
290
  MingoChatHistorySkeleton,
@@ -363,11 +368,13 @@ import {
363
368
  RoadmapCard,
364
369
  RoadmapCardSkeleton,
365
370
  RoadmapVoteButton,
371
+ SAFE_HTML_TAGS,
366
372
  SCROLL_ANCHOR,
367
373
  SCROLL_ANCHOR_WIRE_KEY,
368
374
  SECTION_HEADING_CLASS,
369
375
  SOURCE_ICON_NAMES,
370
376
  SOURCE_LABELS_BY_TABLE,
377
+ SVG_TAGS,
371
378
  SYNTHETIC_REALTIME_ID_PREFIXES,
372
379
  ScrollFadeOverlay,
373
380
  ScrollShadow,
@@ -407,6 +414,7 @@ import {
407
414
  StatusBadge,
408
415
  StatusIndicator,
409
416
  Switch,
417
+ TEXT_SIZE_PRESETS,
410
418
  TICKET_STATUS_COLOR_PRESETS,
411
419
  TITLE_BLOCK_MIN_HEIGHT,
412
420
  TabContent,
@@ -471,27 +479,39 @@ import {
471
479
  buildChatAttachmentViewUrl,
472
480
  buildChatRefKey,
473
481
  buildDiscussAddendum,
482
+ buildEffectiveTagSet,
483
+ buildHeadingIdMap,
474
484
  buildNatsWsUrl,
475
485
  buildProductReleaseCardProps,
486
+ buildSanitizeSchema,
476
487
  buildStreamFrames,
488
+ cardAwareUrlTransform,
477
489
  chatChipClass,
478
490
  clickupTaskUrl,
491
+ completeStreamingTail,
479
492
  computeHistoryPrepend,
480
493
  computeIsNewTab,
494
+ createChatDialogStore,
495
+ createChatStreamReducer,
481
496
  createColumnHelper,
497
+ createDeltaBatcher,
498
+ createEmptyTurnMeta,
482
499
  createMessageSegmentAccumulator,
483
500
  decideNewTab,
501
+ decodeHistoricalMessageData,
484
502
  defaultBuildProductReleaseCardProps,
485
503
  defaultTableIdForDocumentType,
486
504
  deriveColumns,
487
505
  escapeMarkdownInline,
506
+ escapeUnknownHtmlTags,
488
507
  executeNavigation,
489
508
  executeNavigationImperative,
490
509
  exportToCSV,
491
510
  extractEntityIdFilter,
492
511
  extractErrorMessages,
493
512
  extractIncompleteMessageState,
494
- extractTextFromChunk,
513
+ extractIncompleteTailState,
514
+ extractText,
495
515
  fetchEmptyStateConfig,
496
516
  fetchSlashCommands,
497
517
  flattenAssistantContent,
@@ -531,11 +551,8 @@ import {
531
551
  hideOnError,
532
552
  historicalToUnified,
533
553
  interleave,
534
- isControlChunk,
535
554
  isCrossOriginUrl,
536
- isErrorChunk,
537
555
  isHistoricalUserTurn,
538
- isMetadataChunk,
539
556
  isModifierClick,
540
557
  isQuickActionIconSpec,
541
558
  isStructuredContent,
@@ -551,12 +568,13 @@ import {
551
568
  normalizeContent,
552
569
  normalizeHistoricalMessageData,
553
570
  normalizeIconKey,
554
- parseChunkToAction,
555
571
  parseScrollAnchor,
556
572
  parseWireCommandOverride,
557
573
  processHistoricalMessages,
558
574
  processHistoricalMessagesWithErrors,
575
+ processShortcodes,
559
576
  programItemToStripProfile,
577
+ rehypeStripUnsafe,
560
578
  remarkCardLinks,
561
579
  remarkMentionChips,
562
580
  renderChatInlineEntityCard,
@@ -566,9 +584,11 @@ import {
566
584
  resolveSourceIcon,
567
585
  resolveSourceRowCTA,
568
586
  resolveStatusTagProps,
587
+ resolveTextSizeConfig,
569
588
  resolveTicketStatus,
570
589
  safeHref,
571
590
  sanitizeTitleForChat,
591
+ splitStreamingBlocks,
572
592
  statusBadgeVariants,
573
593
  stripChatAttachmentMarkdown,
574
594
  stripSameOriginToPath,
@@ -583,6 +603,7 @@ import {
583
603
  useChatAttachments,
584
604
  useChatCardItem,
585
605
  useChatIdentity,
606
+ useChatStreamReducer,
586
607
  useChunkCatchup,
587
608
  useCloseOnNavigation,
588
609
  useCollapsible,
@@ -590,13 +611,13 @@ import {
590
611
  useDataTable,
591
612
  useDataTableContext,
592
613
  useEmptyStateConfig,
614
+ useHeadingIdMap,
593
615
  useJetStreamDialogSubscription,
594
616
  useMarqueeSync,
595
617
  useNatsChatAdapter,
596
618
  useNatsDialogSubscription,
597
619
  usePageActionsBottomPadding,
598
620
  useProxiedImageUrl,
599
- useRealtimeChunkProcessor,
600
621
  useSSE,
601
622
  useScriptedStream,
602
623
  useScrollFade,
@@ -606,7 +627,7 @@ import {
606
627
  useTestRunState,
607
628
  useUnifiedChat,
608
629
  usesCanonicalStatusStyle
609
- } from "../../chunk-OCEKO5CW.js";
630
+ } from "../../chunk-AEELJC4N.js";
610
631
  import "../../chunk-7EUIW46X.js";
611
632
  import "../../chunk-LXC6P2EO.js";
612
633
  import "../../chunk-EL5YVPD5.js";
@@ -826,7 +847,9 @@ export {
826
847
  CustomerInterviewCard,
827
848
  CustomerInterviewCardSkeleton,
828
849
  DEFAULT_CUSTOM_STATUS_COLOR,
850
+ DEFAULT_DIALOG_SIDE,
829
851
  DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID,
852
+ DEFAULT_MAX_REDUCERS,
830
853
  DashboardInfoCard,
831
854
  DataRoomDocCard,
832
855
  DataRoomDocCardSkeleton,
@@ -947,9 +970,11 @@ export {
947
970
  LoadError,
948
971
  CheckCircleIcon as LucideCheckCircleIcon,
949
972
  XIcon as LucideXIcon,
973
+ MAX_PENDING_RETAIN_KEYS,
950
974
  MESSAGE_ROLE,
951
975
  MESSAGE_TYPE,
952
976
  MarkdownEditor,
977
+ MarkdownEngine,
953
978
  MarqueeWall,
954
979
  MarqueeWallFades,
955
980
  MediaTypeSelector,
@@ -969,6 +994,7 @@ export {
969
994
  MenubarSubContent,
970
995
  MenubarSubTrigger,
971
996
  MenubarTrigger,
997
+ MermaidDiagram,
972
998
  MessageSegmentAccumulator,
973
999
  MingoChatHistory,
974
1000
  MingoChatHistorySkeleton,
@@ -1052,11 +1078,13 @@ export {
1052
1078
  RoadmapCard,
1053
1079
  RoadmapCardSkeleton,
1054
1080
  RoadmapVoteButton,
1081
+ SAFE_HTML_TAGS,
1055
1082
  SCROLL_ANCHOR,
1056
1083
  SCROLL_ANCHOR_WIRE_KEY,
1057
1084
  SECTION_HEADING_CLASS,
1058
1085
  SOURCE_ICON_NAMES,
1059
1086
  SOURCE_LABELS_BY_TABLE,
1087
+ SVG_TAGS,
1060
1088
  SYNTHETIC_REALTIME_ID_PREFIXES,
1061
1089
  ScrollFadeOverlay,
1062
1090
  ScrollShadow,
@@ -1105,6 +1133,7 @@ export {
1105
1133
  StatusBadge,
1106
1134
  StatusIndicator,
1107
1135
  Switch,
1136
+ TEXT_SIZE_PRESETS,
1108
1137
  TICKET_STATUS_COLOR_PRESETS,
1109
1138
  TITLE_BLOCK_MIN_HEIGHT,
1110
1139
  TabContent,
@@ -1171,31 +1200,43 @@ export {
1171
1200
  buildChatAttachmentViewUrl,
1172
1201
  buildChatRefKey,
1173
1202
  buildDiscussAddendum,
1203
+ buildEffectiveTagSet,
1204
+ buildHeadingIdMap,
1174
1205
  buildNatsWsUrl,
1175
1206
  buildProductReleaseCardProps,
1207
+ buildSanitizeSchema,
1176
1208
  buildStreamFrames,
1177
1209
  buttonVariants,
1210
+ cardAwareUrlTransform,
1178
1211
  embedAuthedFetch as chatAuthedFetch,
1179
1212
  chatChipClass,
1180
1213
  clearEmbedProxyAuth as clearChatProxyAuth,
1181
1214
  clickupTaskUrl,
1215
+ completeStreamingTail,
1182
1216
  computeHistoryPrepend,
1183
1217
  computeIsNewTab,
1218
+ createChatDialogStore,
1219
+ createChatStreamReducer,
1184
1220
  createColumnHelper,
1221
+ createDeltaBatcher,
1222
+ createEmptyTurnMeta,
1185
1223
  createMessageSegmentAccumulator,
1186
1224
  decideNewTab,
1225
+ decodeHistoricalMessageData,
1187
1226
  defaultBuildProductReleaseCardProps,
1188
1227
  defaultTableIdForDocumentType,
1189
1228
  deriveColumns,
1190
1229
  dotColorByVariant,
1191
1230
  escapeMarkdownInline,
1231
+ escapeUnknownHtmlTags,
1192
1232
  executeNavigation,
1193
1233
  executeNavigationImperative,
1194
1234
  exportToCSV,
1195
1235
  extractEntityIdFilter,
1196
1236
  extractErrorMessages,
1197
1237
  extractIncompleteMessageState,
1198
- extractTextFromChunk,
1238
+ extractIncompleteTailState,
1239
+ extractText,
1199
1240
  fetchEmptyStateConfig,
1200
1241
  fetchSlashCommands,
1201
1242
  flattenAssistantContent,
@@ -1237,11 +1278,8 @@ export {
1237
1278
  hideOnError,
1238
1279
  historicalToUnified,
1239
1280
  interleave,
1240
- isControlChunk,
1241
1281
  isCrossOriginUrl,
1242
- isErrorChunk,
1243
1282
  isHistoricalUserTurn,
1244
- isMetadataChunk,
1245
1283
  isModifierClick,
1246
1284
  isQuickActionIconSpec,
1247
1285
  isStructuredContent,
@@ -1257,13 +1295,14 @@ export {
1257
1295
  normalizeContent,
1258
1296
  normalizeHistoricalMessageData,
1259
1297
  normalizeIconKey,
1260
- parseChunkToAction,
1261
1298
  parseScrollAnchor,
1262
1299
  parseWireCommandOverride,
1263
1300
  processHistoricalMessages,
1264
1301
  processHistoricalMessagesWithErrors,
1302
+ processShortcodes,
1265
1303
  programItemToStripProfile,
1266
1304
  progressColorByVariant,
1305
+ rehypeStripUnsafe,
1267
1306
  remarkCardLinks,
1268
1307
  remarkMentionChips,
1269
1308
  renderChatInlineEntityCard,
@@ -1273,12 +1312,14 @@ export {
1273
1312
  resolveSourceIcon,
1274
1313
  resolveSourceRowCTA,
1275
1314
  resolveStatusTagProps,
1315
+ resolveTextSizeConfig,
1276
1316
  resolveTicketStatus,
1277
1317
  safeHref,
1278
1318
  sanitizeTitleForChat,
1279
1319
  setEmbedProxyAuth as setChatProxyAuth,
1280
1320
  showCommandApprovalToast,
1281
1321
  showToast,
1322
+ splitStreamingBlocks,
1282
1323
  statusBadgeVariants,
1283
1324
  stripChatAttachmentMarkdown,
1284
1325
  stripSameOriginToPath,
@@ -1293,6 +1334,7 @@ export {
1293
1334
  useChatAttachments,
1294
1335
  useChatCardItem,
1295
1336
  useChatIdentity,
1337
+ useChatStreamReducer,
1296
1338
  useChunkCatchup,
1297
1339
  useCloseOnNavigation,
1298
1340
  useCollapsible,
@@ -1301,13 +1343,13 @@ export {
1301
1343
  useDataTableContext,
1302
1344
  useSseChatAdapter as useEmbeddedChat,
1303
1345
  useEmptyStateConfig,
1346
+ useHeadingIdMap,
1304
1347
  useJetStreamDialogSubscription,
1305
1348
  useMarqueeSync,
1306
1349
  useNatsChatAdapter,
1307
1350
  useNatsDialogSubscription,
1308
1351
  usePageActionsBottomPadding,
1309
1352
  useProxiedImageUrl,
1310
- useRealtimeChunkProcessor,
1311
1353
  useSSE,
1312
1354
  useScriptedStream,
1313
1355
  useScrollFade,
@@ -0,0 +1,51 @@
1
+ import type { Components } from 'react-markdown';
2
+ import type { ResolveLinkResult } from '../../../types/doc-source';
3
+ import type { TextSizeElement } from './text-size';
4
+ export declare function hasRenderableSrc(src: unknown): src is string;
5
+ export interface BuildBaseComponentsOptions {
6
+ textSizes: Record<TextSizeElement, string>;
7
+ demoteMarkdownH1ToH2: boolean;
8
+ brokenLinks: readonly string[];
9
+ currentPath?: string;
10
+ onInternalLinkClick?: (path: string, options?: {
11
+ expandFolder?: boolean;
12
+ fromInternalLink?: boolean;
13
+ }) => void;
14
+ onResolveLink?: (href: string, currentPath: string) => Promise<ResolveLinkResult>;
15
+ }
16
+ /**
17
+ * The standard leaf renderers (`code` block + inline, `blockquote`, `div`
18
+ * pass-through) as standalone functions.
19
+ *
20
+ * SSOT for compositions that must OVERRIDE these renderers for a narrow
21
+ * special case and then fall through: the rich composition intercepts embed
22
+ * fence languages, shortcode-expanded `div`s and Reddit's `reddit-embed-bq`
23
+ * blockquote, and delegates everything else here. Previously it reproduced
24
+ * these renderers byte-for-byte, so any class change here silently drifted
25
+ * on content surfaces.
26
+ *
27
+ * THESE MUST STAY HOOK-FREE: the rich composition calls them as plain
28
+ * functions from inside its own renderers (`standard.code(props)`), which is
29
+ * not a React render of a component and would break the rules of hooks.
30
+ * Hook-using renderers (the headings, which read the heading-line offset
31
+ * from context) live in `buildBaseComponents` below and are never delegated
32
+ * to this way.
33
+ *
34
+ * ODS-TOKENS FLAG (ODS_TOKEN_RULES §Typography / §General): inline code keeps
35
+ * an inline `text-[0.9em]`, carried over verbatim from the pre-unification
36
+ * renderers — ODS has no relative-to-parent code size, so mapping it onto an
37
+ * existing token would visibly change every inline code span. Same shape as
38
+ * the flag in ./text-size.ts — flagged for addition to ODS, not copied
39
+ * anywhere else.
40
+ *
41
+ * The code BLOCK's font is NOT flagged: the raw "JetBrains Mono", "SF Mono",
42
+ * Consolas stack the old renderer inlined is gone, replaced by Tailwind's
43
+ * `font-mono` (→ `var(--font-family-heading)`, the Azeret Mono ODS stack) —
44
+ * the same class the inline-code branch below already used, so the two code
45
+ * surfaces no longer disagree about their family.
46
+ */
47
+ export declare function buildStandardLeafRenderers({ textSizes, }: {
48
+ textSizes: Record<TextSizeElement, string>;
49
+ }): Pick<Components, 'code' | 'blockquote' | 'div'>;
50
+ export declare function buildBaseComponents({ textSizes, demoteMarkdownH1ToH2, brokenLinks, currentPath: propCurrentPath, onInternalLinkClick, onResolveLink, }: BuildBaseComponentsOptions): Components;
51
+ //# sourceMappingURL=base-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-components.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/base-components.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4CnD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAE5D;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC3C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CAC5C,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC,CA4DlD;AAED,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,WAAW,EAAE,eAAe,EAC5B,mBAAmB,EACnB,aAAa,GACd,EAAE,0BAA0B,GAAG,UAAU,CAwLzC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * MarkdownEngine — THE one react-markdown pipeline for every surface
3
+ * (chat messages, blog, docs, KB articles, legal, releases, admin previews).
4
+ *
5
+ * `SimpleMarkdownRenderer` and `RichMarkdownRenderer` are thin compositions
6
+ * over this engine (see ./simple-markdown-renderer.tsx and ./rich/) — there
7
+ * is exactly ONE parse path, ONE sanitizer stack, ONE mermaid, ONE
8
+ * heading-id algorithm, ONE link-click model. Do not fork this pipeline;
9
+ * extend via `componentOverrides` / `additionalRemarkPlugins` /
10
+ * `preprocessContent` / `extraAllowedHtmlTags`.
11
+ *
12
+ * Pipeline order (each stage documented in ./sanitize.ts):
13
+ * preprocessContent (composition hook, e.g. shortcodes)
14
+ * → completeStreamingTail (streaming only — MUST precede the escape pass)
15
+ * → escapeUnknownHtmlTags (text pre-pass, React 19 crash guard)
16
+ * → remark: remarkGfm, remarkBreaks, ...additionalRemarkPlugins
17
+ * → rehype: rehypeRaw → rehypeSanitize(schema) → rehypeStripUnsafe
18
+ * → rehypeHighlight
19
+ * → urlTransform: cardAwareUrlTransform
20
+ * → components: buildBaseComponents(...) spread-last componentOverrides
21
+ */
22
+ import React from 'react';
23
+ import { type Components } from 'react-markdown';
24
+ import type { PluggableList } from 'unified';
25
+ import type { ResolveLinkResult } from '../../../types/doc-source';
26
+ import { type TextSizeConfig } from './text-size';
27
+ import { type HeadingSection } from './heading-ids';
28
+ export type { ResolveLinkResult };
29
+ /**
30
+ * Module-scope empty default for `brokenLinks`.
31
+ *
32
+ * A `brokenLinks = []` DEFAULT PARAMETER allocates a fresh array on every
33
+ * render, so the `components` useMemo (which lists it as a dep) recomputed
34
+ * every render, which changed `StreamingBlockRenderer`'s `components` prop
35
+ * identity, which made its `memo` bail EVERY time — every completed block
36
+ * re-parsed on every streamed token, defeating the entire atomic-block
37
+ * optimization. Any new default that is an object/array/function MUST be
38
+ * hoisted here for the same reason.
39
+ *
40
+ * Exported so the compositions that apply the SAME default before handing
41
+ * props down (rich) share this ONE identity instead of declaring a second
42
+ * module-scope empty array with a copy of this rationale. Deliberately NOT
43
+ * re-exported from ./index — it is an internal identity contract between the
44
+ * engine and its compositions, not public API.
45
+ */
46
+ export declare const NO_BROKEN_LINKS: readonly string[];
47
+ export interface MarkdownEngineProps {
48
+ content: string;
49
+ className?: string;
50
+ /** Backend-provided heading IDs for deep-link anchors */
51
+ sectionIds?: HeadingSection[];
52
+ /** When the page already has an H1, render markdown `#` as `<h2>` */
53
+ demoteMarkdownH1ToH2?: boolean;
54
+ /** List of broken link hrefs detected server-side (shown with [BROKEN] badge) */
55
+ brokenLinks?: readonly string[];
56
+ /** Callback for internal (non-http, non-anchor) link clicks */
57
+ onInternalLinkClick?: (path: string, options?: {
58
+ expandFolder?: boolean;
59
+ fromInternalLink?: boolean;
60
+ }) => void;
61
+ /** Current documentation path — enables internal-link mode when set */
62
+ currentPath?: string;
63
+ /** Resolve an internal link href to a navigation path. */
64
+ onResolveLink?: (href: string, currentPath: string) => Promise<ResolveLinkResult>;
65
+ /** Pre-process the raw markdown string before rendering (e.g. shortcode expansion) */
66
+ preprocessContent?: (content: string) => string;
67
+ /** Merge additional or override react-markdown component renderers (spread LAST — caller wins) */
68
+ componentOverrides?: Partial<Components>;
69
+ /** Extra remark plugins appended after the built-in remarkGfm + remarkBreaks */
70
+ additionalRemarkPlugins?: PluggableList;
71
+ /** Text sizing preset / per-element overrides */
72
+ textSize?: TextSizeConfig;
73
+ /**
74
+ * Extra raw-HTML tags this composition admits. Unioned into BOTH the
75
+ * text pre-pass allowlist AND the sanitize schema together (the
76
+ * coupled-allowlist invariant — see ./sanitize.ts).
77
+ */
78
+ extraAllowedHtmlTags?: string[];
79
+ /**
80
+ * Set true for the actively streaming message ONLY. Enables atomic-block
81
+ * memoization + fence tail-completion + an aria-live wrapper. The caller
82
+ * MUST flip back to false on completion — that final render is one
83
+ * authoritative whole-document parse (block cache discarded), so
84
+ * streaming can never permanently diverge from the settled output.
85
+ */
86
+ streaming?: boolean;
87
+ }
88
+ /**
89
+ * Memoized so a parent re-render with UNCHANGED props (same `content`
90
+ * string, same memoized `componentOverrides`/plugins) does NOT re-parse the
91
+ * markdown. Re-parsing rebuilds the entire react-markdown subtree, which
92
+ * RE-MOUNTS any embedded inline entity cards — closing their open menus and
93
+ * re-triggering their fetch on every chat re-render (streaming chunk AND
94
+ * scroll). With stable props the renderer bails, so completed messages'
95
+ * cards stay mounted. The streaming path additionally memoizes completed
96
+ * atomic blocks so the in-flight message re-parses only its live tail.
97
+ */
98
+ export declare const MarkdownEngine: React.NamedExoticComponent<MarkdownEngineProps>;
99
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/engine.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAM7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQnE,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAO,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClF,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,kGAAkG;IAClG,kBAAkB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,aAAa,CAAC;IACxC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAqMD;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,iDAA2B,CAAC"}
@@ -0,0 +1,65 @@
1
+ export interface HeadingSection {
2
+ id: string;
3
+ title: string;
4
+ level: number;
5
+ }
6
+ /** `line (1-based, document-wide) → heading id`. */
7
+ export type HeadingIdMap = ReadonlyMap<number, string>;
8
+ /**
9
+ * Line offset added to unit-relative hast positions. Non-zero only on the
10
+ * streaming path, where each atomic unit is parsed by its own
11
+ * `ReactMarkdown` (see `StreamingBlock.startLine`).
12
+ */
13
+ export declare const HeadingLineOffsetContext: import("react").Context<number>;
14
+ /**
15
+ * The document's heading-id map, delivered by CONTEXT rather than baked into
16
+ * the react-markdown `components` map on purpose: the map is rebuilt on every
17
+ * streamed token (its input is the growing `processedContent`), so listing it
18
+ * as a `components` memo dep would change that map's identity each token and
19
+ * make every completed streaming block's `memo` bail — the exact regression
20
+ * `NO_BROKEN_LINKS` was introduced to fix. Through context only the heading
21
+ * renderers re-render.
22
+ */
23
+ export declare const HeadingIdMapContext: import("react").Context<HeadingIdMap>;
24
+ /** Look up the pre-computed id for a heading hast node. Pure. */
25
+ export declare function useHeadingId(node: any): string | undefined;
26
+ /**
27
+ * Build the document's `line → id` map. Pure: same content + same
28
+ * `sectionIds` always yields the same map.
29
+ */
30
+ export declare function buildHeadingIdMap(content: string, sectionIds?: HeadingSection[]): HeadingIdMap;
31
+ /**
32
+ * Memoized `buildHeadingIdMap` for the engine, with the map's IDENTITY held
33
+ * stable across content changes that don't touch any heading.
34
+ *
35
+ * `content` changes on every streamed token, so the `useMemo` alone rebuilt
36
+ * a fresh `Map` per token; that map is the context value, so EVERY heading
37
+ * consumer in every already-completed block re-rendered on every token —
38
+ * the same identity-churn class `NO_BROKEN_LINKS` exists to prevent, just
39
+ * one layer down. Rebuilding is cheap; re-rendering the consumers is not, so
40
+ * the newly built map is compared to the previous one and the previous
41
+ * object is returned when the entries match.
42
+ */
43
+ export declare function useHeadingIdMap(content: string, sectionIds?: HeadingSection[]): HeadingIdMap;
44
+ /**
45
+ * Fallback id for a heading the source scan could NOT see — in practice only
46
+ * a heading synthesized by a caller remark/rehype plugin, which carries no
47
+ * source position. (Setext, blockquote/list-nested ATX and multiple raw
48
+ * `<hN>`s on one line are all scanned now, so they no longer land here.)
49
+ *
50
+ * Routed through the SAME dedupe shape as the map so a fallback id can never
51
+ * collide with an assigned one. It stays PURE — `taken` is derived from the
52
+ * map, not from render order — which is why two position-less headings with
53
+ * IDENTICAL text still collide with each other: disambiguating those would
54
+ * require the shared mutable counter this module deleted.
55
+ */
56
+ export declare function resolveFallbackHeadingId(base: string, taken: ReadonlySet<string>): string;
57
+ /**
58
+ * The ids already assigned by the document's heading-id map. Cached per map
59
+ * IDENTITY, which `useHeadingIdMap` now keeps stable across heading-free
60
+ * token growth — so this is O(headings) once, not per heading per token.
61
+ */
62
+ export declare function useAssignedHeadingIds(): ReadonlySet<string>;
63
+ /** Extract plain text from React children (headings receive mixed nodes). */
64
+ export declare function extractText(node: any): string;
65
+ //# sourceMappingURL=heading-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading-ids.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/heading-ids.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,oDAAoD;AACpD,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAUtD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,iCAAmB,CAAA;AAIxD;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,uCAAiD,CAAA;AAEjF,iEAAiE;AAEjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAK1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,YAAY,CAoEd;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,YAAY,CAQd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAMzF;AAKD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAAC,MAAM,CAAC,CAO3D;AAED,6EAA6E;AAE7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAK7C"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Unified markdown module — public surface.
3
+ *
4
+ * ONE engine (`MarkdownEngine`), two named compositions:
5
+ * - `SimpleMarkdownRenderer` — chat/doc surfaces (embed-free bundle)
6
+ * - `RichMarkdownRenderer` — authored-content surfaces (shortcodes,
7
+ * social embeds, Video SSOT, OG previews)
8
+ */
9
+ export { MarkdownEngine, type MarkdownEngineProps } from './engine';
10
+ export { SimpleMarkdownRenderer, type SimpleMarkdownRendererProps, type ResolveLinkResult, } from './simple-markdown-renderer';
11
+ export { RichMarkdownRenderer, type RichMarkdownRendererProps, } from './rich/rich-markdown-renderer';
12
+ export { processShortcodes } from './rich/shortcodes';
13
+ export { SAFE_HTML_TAGS, SVG_TAGS, buildEffectiveTagSet, buildSanitizeSchema, cardAwareUrlTransform, escapeUnknownHtmlTags, rehypeStripUnsafe, } from './sanitize';
14
+ export { TEXT_SIZE_PRESETS, resolveTextSizeConfig, type TextSizeConfig, type TextSizeClassMap, type TextSizeElement, type TextSizePreset, } from './text-size';
15
+ export { MermaidDiagram } from './mermaid-diagram';
16
+ export { buildHeadingIdMap, useHeadingIdMap, extractText, type HeadingSection, type HeadingIdMap, } from './heading-ids';
17
+ export { splitStreamingBlocks, completeStreamingTail, type StreamingBlock } from './streaming';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Single MermaidDiagram for the unified markdown engine (dark theme only —
3
+ * the old RichMarkdownRenderer's light-theme branch was dead code behind a
4
+ * hardcoded `isDarkMode = true` and is deleted, not carried over).
5
+ *
6
+ * `mermaid` stays a dynamic import so neither chat nor content bundles pay
7
+ * for it unless a diagram is actually rendered.
8
+ */
9
+ import React from 'react';
10
+ /**
11
+ * SECURITY SSOT for the mermaid renderer — the ONLY place these knobs are
12
+ * written. `./__tests__/mermaid-security.test.ts` imports THIS constant and
13
+ * spreads it into its own `mermaid.initialize`, so the fixture and the
14
+ * component can no longer drift: flipping `securityLevel` to `'loose'` here
15
+ * fails the suite (verified by doing exactly that).
16
+ *
17
+ * This renderer sits on the CHAT path, so the diagram source is MODEL output
18
+ * — untrusted by construction — and the rendered SVG goes through
19
+ * `dangerouslySetInnerHTML`. The pre-unification renderer used `'loose'`,
20
+ * which permits raw HTML inside labels and enables mermaid's `click`
21
+ * interaction directive: a node label like `A["<img src=x onerror=...>"]`
22
+ * would have produced LIVE HTML.
23
+ *
24
+ * - `securityLevel: 'strict'` encodes HTML tags in text and disables click
25
+ * handlers.
26
+ * - `htmlLabels: false` renders labels as SVG `<text>` instead of a
27
+ * foreignObject HTML subtree, so there is no HTML surface at all. Verified:
28
+ * no authored diagram in this repo or in the consuming hub's markdown uses
29
+ * HTML labels (not even `<br/>`), so 'antiscript' (which still allows tags)
30
+ * is not needed. (`htmlLabels` is set at the ROOT — `flowchart.htmlLabels`
31
+ * is deprecated in mermaid 11 and the root value takes precedence.)
32
+ * - `secure` is the allowlist of config keys a `%%{init}%%` directive in the
33
+ * diagram SOURCE may NOT override. mermaid's default list covers
34
+ * `securityLevel` but NOT `htmlLabels`, so model-authored source could
35
+ * otherwise re-enable HTML labels while `securityLevel` stayed locked.
36
+ * Adding `htmlLabels` (plus `secure` itself and the resource limits) closes
37
+ * that hole.
38
+ *
39
+ * jsdom NOTE: with `htmlLabels` unlocked, a `%%{init: {"htmlLabels": true}}%%`
40
+ * directive was observed to make `mermaid.render` never settle under jsdom
41
+ * (>60s, against a passing two-render control). This was NOT reproduced in a
42
+ * real browser and may well be an artifact of jsdom having no layout — do not
43
+ * read it as a confirmed browser DoS. Either way the render below is wrapped
44
+ * in a timeout so a non-settling render surfaces the error state instead of
45
+ * sitting on "Rendering diagram…" forever.
46
+ */
47
+ export declare const MERMAID_SECURITY_OPTIONS: {
48
+ htmlLabels: false;
49
+ securityLevel: "strict";
50
+ secure: string[];
51
+ };
52
+ /** Upper bound on a single `mermaid.render`. Generous enough that no honest
53
+ * diagram hits it; short enough that a wedged render becomes a visible error
54
+ * instead of a permanent skeleton. */
55
+ export declare const MERMAID_RENDER_TIMEOUT_MS = 15000;
56
+ /**
57
+ * ODS-TOKENS FLAG (ODS_TOKEN_RULES §Colors / §Typography / §General):
58
+ * `mermaidStyles` below and the `themeVariables` / `fontFamily` / `fontSize`
59
+ * block in `MermaidDiagram` carry RAW hex colors, a literal font-family and
60
+ * literal px font sizes.
61
+ *
62
+ * Reason: mermaid's configuration is not CSS — `themeVariables` is a
63
+ * JavaScript API whose values are baked into the generated SVG as literal
64
+ * attribute strings, so a `var(--color-…)` reference resolves to nothing
65
+ * there. On top of that, ODS has NO 10-step categorical color ramp, and
66
+ * mermaid's `cScale0…cScale9` requires exactly one. The palette is carried
67
+ * over VERBATIM from the pre-unification RichMarkdownRenderer, so this is
68
+ * parity, not new divergence; the missing categorical-ramp tokens are
69
+ * flagged here for addition to ODS.
70
+ *
71
+ * Scope: this exemption covers THIS file only, and only the mermaid config
72
+ * surface. Do NOT copy this pattern — every other style in the markdown
73
+ * module uses ODS semantic classes.
74
+ */
75
+ export declare const mermaidStyles = "\n .mermaid-svg-container svg {\n max-width: 100% !important;\n height: auto !important;\n min-height: 200px;\n font-family: 'DM Sans', sans-serif !important;\n font-size: 14px !important;\n }\n @media (min-width: 1520px) {\n .mermaid-svg-container svg {\n max-width: 900px !important;\n max-height: 700px !important;\n min-height: 300px;\n font-size: 16px !important;\n }\n }\n @media (min-width: 768px) and (max-width: 1519px) {\n .mermaid-svg-container svg {\n max-width: 700px !important;\n max-height: 600px !important;\n min-height: 250px;\n font-size: 15px !important;\n }\n }\n @media (max-width: 767px) {\n .mermaid-svg-container svg {\n max-width: 90vw !important;\n max-height: 400px !important;\n min-height: 200px;\n font-size: 13px !important;\n }\n }\n .mermaid-svg-container svg[width] { width: 100% !important; }\n .mermaid-svg-container .node rect,\n .mermaid-svg-container .node circle,\n .mermaid-svg-container .node ellipse,\n .mermaid-svg-container .node polygon { stroke-width: 2px !important; }\n .mermaid-svg-container .edgePath path { stroke-width: 2px !important; }\n @media (min-width: 768px) {\n .mermaid-svg-container .node text,\n .mermaid-svg-container .edgeLabel text { font-size: 14px !important; }\n }\n @media (min-width: 1520px) {\n .mermaid-svg-container .node text,\n .mermaid-svg-container .edgeLabel text { font-size: 16px !important; }\n }\n";
76
+ export declare const MermaidDiagram: React.FC<{
77
+ chart: string;
78
+ }>;
79
+ //# sourceMappingURL=mermaid-diagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid-diagram.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/mermaid-diagram.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,wBAAwB;;;;CA6BqC,CAAC;AAE3E;;uCAEuC;AACvC,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAkBhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,u+CA8CzB,CAAC;AAQF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAkJtD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Components } from 'react-markdown';
2
+ import type { TextSizeElement } from '../text-size';
3
+ export interface BuildRichEmbedOverridesOptions {
4
+ ogApiBaseUrl: string;
5
+ ogEndpointPath: string;
6
+ textSizes: Record<TextSizeElement, string>;
7
+ }
8
+ /**
9
+ * Overrides spread LAST onto the engine's base map: `code` (fence-language
10
+ * embeds), `div` (shortcode-expanded embeds), `img` (MarkdownImage with
11
+ * runtime transformImageSrc), `video` (raw tags → Video SSOT).
12
+ */
13
+ export declare function buildRichEmbedOverrides({ ogApiBaseUrl, ogEndpointPath, textSizes, }: BuildRichEmbedOverridesOptions): Partial<Components>;
14
+ //# sourceMappingURL=embed-overrides.d.ts.map