@flamingo-stack/openframe-frontend-core 0.0.497 → 0.0.498-1506.4000.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 (285) 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 +207 -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 +500 -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 +484 -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-2DER2JSI.cjs → chunk-242K7LZY.cjs} +11 -11
  22. package/dist/{chunk-2DER2JSI.cjs.map → chunk-242K7LZY.cjs.map} +1 -1
  23. package/dist/{chunk-VBSS4TPV.cjs → chunk-2LYA3RBT.cjs} +37 -37
  24. package/dist/{chunk-VBSS4TPV.cjs.map → chunk-2LYA3RBT.cjs.map} +1 -1
  25. package/dist/{chunk-ZPUCCSYA.js → chunk-34C2JV2C.js} +2 -2
  26. package/dist/{chunk-GWVNRXJU.js → chunk-3VGRZ62V.js} +2 -2
  27. package/dist/{chunk-AAHAVML2.js → chunk-42NYDEHH.js} +2 -2
  28. package/dist/{chunk-ZEHA4IC7.js → chunk-42SMPKGY.js} +2 -2
  29. package/dist/{chunk-RTG5DJWM.cjs → chunk-44C23SSC.cjs} +5 -5
  30. package/dist/{chunk-RTG5DJWM.cjs.map → chunk-44C23SSC.cjs.map} +1 -1
  31. package/dist/{chunk-SL62IZ3I.cjs → chunk-4KKGHPNE.cjs} +9 -9
  32. package/dist/{chunk-SL62IZ3I.cjs.map → chunk-4KKGHPNE.cjs.map} +1 -1
  33. package/dist/{chunk-X2CYUCGL.cjs → chunk-5BQWVNRS.cjs} +62 -62
  34. package/dist/{chunk-X2CYUCGL.cjs.map → chunk-5BQWVNRS.cjs.map} +1 -1
  35. package/dist/{chunk-HRUXC3YN.js → chunk-5QWYIPMH.js} +2 -2
  36. package/dist/{chunk-NT3BKPEC.js → chunk-5ZY5JM4Z.js} +10 -10
  37. package/dist/chunk-5ZY5JM4Z.js.map +1 -0
  38. package/dist/{chunk-4C764VBX.cjs → chunk-62TM2RVZ.cjs} +26 -26
  39. package/dist/{chunk-4C764VBX.cjs.map → chunk-62TM2RVZ.cjs.map} +1 -1
  40. package/dist/{chunk-YBTYHIXA.js → chunk-632XJ2ZT.js} +6 -5
  41. package/dist/chunk-632XJ2ZT.js.map +1 -0
  42. package/dist/{chunk-DGDUOFNY.js → chunk-BUBQEZ5J.js} +2 -2
  43. package/dist/{chunk-ZAAIVSX6.js → chunk-D3LUKR2Y.js} +11964 -9714
  44. package/dist/chunk-D3LUKR2Y.js.map +1 -0
  45. package/dist/{chunk-5KSXMJXF.cjs → chunk-EO35UHFT.cjs} +60 -60
  46. package/dist/chunk-EO35UHFT.cjs.map +1 -0
  47. package/dist/{chunk-5YKUEZIA.cjs → chunk-EORFD5WB.cjs} +15 -15
  48. package/dist/{chunk-5YKUEZIA.cjs.map → chunk-EORFD5WB.cjs.map} +1 -1
  49. package/dist/{chunk-MEIMDHQ2.cjs → chunk-F7XPMG25.cjs} +28 -27
  50. package/dist/chunk-F7XPMG25.cjs.map +1 -0
  51. package/dist/{chunk-I74ADMZS.cjs → chunk-H6GFQ4AO.cjs} +7 -7
  52. package/dist/{chunk-I74ADMZS.cjs.map → chunk-H6GFQ4AO.cjs.map} +1 -1
  53. package/dist/{chunk-EOYFMWDT.cjs → chunk-J3NHQ4JB.cjs} +31 -31
  54. package/dist/{chunk-EOYFMWDT.cjs.map → chunk-J3NHQ4JB.cjs.map} +1 -1
  55. package/dist/{chunk-23QJPSZJ.cjs → chunk-SS3D3DHL.cjs} +7049 -4799
  56. package/dist/chunk-SS3D3DHL.cjs.map +1 -0
  57. package/dist/{chunk-6XQGPFIR.js → chunk-WNXIG6YY.js} +2 -2
  58. package/dist/{chunk-5INZDVGI.js → chunk-WZCQW4MW.js} +4 -4
  59. package/dist/{chunk-B3MRHZNZ.js → chunk-ZHC2BCXK.js} +4 -4
  60. package/dist/components/case-studies/index.cjs +8 -8
  61. package/dist/components/case-studies/index.js +2 -2
  62. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  63. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  64. package/dist/components/chat/hooks/index.d.ts +0 -1
  65. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  66. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
  67. package/dist/components/chat/hooks/use-chunk-catchup.d.ts.map +1 -1
  68. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +15 -48
  69. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  70. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +10 -57
  71. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  72. package/dist/components/chat/index.cjs +10 -2
  73. package/dist/components/chat/index.cjs.map +1 -1
  74. package/dist/components/chat/index.d.ts +1 -0
  75. package/dist/components/chat/index.d.ts.map +1 -1
  76. package/dist/components/chat/index.js +21 -13
  77. package/dist/components/chat/stream/chat-dialog-store.d.ts +184 -0
  78. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +1 -0
  79. package/dist/components/chat/stream/chat-stream-reducer.d.ts +367 -0
  80. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -0
  81. package/dist/components/chat/stream/delta-batcher.d.ts +51 -0
  82. package/dist/components/chat/stream/delta-batcher.d.ts.map +1 -0
  83. package/dist/components/chat/stream/index.d.ts +17 -0
  84. package/dist/components/chat/stream/index.d.ts.map +1 -0
  85. package/dist/components/chat/stream/message-mutations.d.ts +77 -0
  86. package/dist/components/chat/stream/message-mutations.d.ts.map +1 -0
  87. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +22 -0
  88. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +1 -0
  89. package/dist/components/chat/types/api.types.d.ts +1 -81
  90. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  91. package/dist/components/chat/types/processing.types.d.ts +2 -93
  92. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  93. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +34 -6
  94. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  95. package/dist/components/chat/utils/index.d.ts +2 -3
  96. package/dist/components/chat/utils/index.d.ts.map +1 -1
  97. package/dist/components/chat/utils/process-historical-messages.d.ts +59 -11
  98. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  99. package/dist/components/contact/index.cjs +3 -3
  100. package/dist/components/contact/index.js +2 -2
  101. package/dist/components/docs/index.cjs +5 -5
  102. package/dist/components/docs/index.js +4 -4
  103. package/dist/components/embeds/index.cjs +3 -3
  104. package/dist/components/embeds/index.js +2 -2
  105. package/dist/components/faq/index.cjs +3 -3
  106. package/dist/components/faq/index.js +2 -2
  107. package/dist/components/features/index.cjs +2 -2
  108. package/dist/components/features/index.js +1 -1
  109. package/dist/components/help-center-pages/index.cjs +20 -20
  110. package/dist/components/help-center-pages/index.js +11 -11
  111. package/dist/components/index.cjs +172 -130
  112. package/dist/components/index.cjs.map +1 -1
  113. package/dist/components/index.js +63 -21
  114. package/dist/components/index.js.map +1 -1
  115. package/dist/components/navigation/index.cjs +2 -2
  116. package/dist/components/navigation/index.js +1 -1
  117. package/dist/components/onboarding-guides/index.cjs +5 -5
  118. package/dist/components/onboarding-guides/index.js +4 -4
  119. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  120. package/dist/components/related-content/index.cjs +3 -3
  121. package/dist/components/related-content/index.js +2 -2
  122. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  123. package/dist/components/tickets/index.cjs +5 -5
  124. package/dist/components/tickets/index.js +4 -4
  125. package/dist/components/ui/index.cjs +44 -2
  126. package/dist/components/ui/index.cjs.map +1 -1
  127. package/dist/components/ui/index.d.ts +1 -2
  128. package/dist/components/ui/index.d.ts.map +1 -1
  129. package/dist/components/ui/index.js +55 -13
  130. package/dist/components/ui/markdown/base-components.d.ts +51 -0
  131. package/dist/components/ui/markdown/base-components.d.ts.map +1 -0
  132. package/dist/components/ui/markdown/engine.d.ts +99 -0
  133. package/dist/components/ui/markdown/engine.d.ts.map +1 -0
  134. package/dist/components/ui/markdown/heading-ids.d.ts +65 -0
  135. package/dist/components/ui/markdown/heading-ids.d.ts.map +1 -0
  136. package/dist/components/ui/markdown/index.d.ts +18 -0
  137. package/dist/components/ui/markdown/index.d.ts.map +1 -0
  138. package/dist/components/ui/markdown/mermaid-diagram.d.ts +79 -0
  139. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +1 -0
  140. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +14 -0
  141. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +1 -0
  142. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +40 -0
  143. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +1 -0
  144. package/dist/components/ui/markdown/rich/shortcodes.d.ts +8 -0
  145. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +1 -0
  146. package/dist/components/ui/markdown/sanitize.d.ts +153 -0
  147. package/dist/components/ui/markdown/sanitize.d.ts.map +1 -0
  148. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +23 -0
  149. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +1 -0
  150. package/dist/components/ui/markdown/streaming.d.ts +78 -0
  151. package/dist/components/ui/markdown/streaming.d.ts.map +1 -0
  152. package/dist/components/ui/markdown/text-size.d.ts +34 -0
  153. package/dist/components/ui/markdown/text-size.d.ts.map +1 -0
  154. package/dist/index.cjs +60 -2
  155. package/dist/index.cjs.map +1 -1
  156. package/dist/index.js +71 -13
  157. package/dist/utils/index.cjs +169 -40
  158. package/dist/utils/index.cjs.map +1 -1
  159. package/dist/utils/index.d.ts +1 -0
  160. package/dist/utils/index.d.ts.map +1 -1
  161. package/dist/utils/index.js +162 -41
  162. package/dist/utils/index.js.map +1 -1
  163. package/dist/utils/markdown-fences.d.ts +42 -0
  164. package/dist/utils/markdown-fences.d.ts.map +1 -0
  165. package/dist/utils/markdown-heading-id.d.ts +85 -0
  166. package/dist/utils/markdown-heading-id.d.ts.map +1 -0
  167. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  168. package/package.json +7 -1
  169. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +317 -0
  170. package/src/chat-protocol/__tests__/chat-protocol.test.ts +516 -0
  171. package/src/chat-protocol/__tests__/env-flag.test.ts +52 -0
  172. package/src/chat-protocol/__tests__/ip-normalize.test.ts +136 -0
  173. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +232 -0
  174. package/src/chat-protocol/decode.ts +278 -0
  175. package/src/chat-protocol/encode.ts +71 -0
  176. package/src/chat-protocol/env-flag.ts +39 -0
  177. package/src/chat-protocol/events.ts +245 -0
  178. package/src/chat-protocol/frames.ts +245 -0
  179. package/src/chat-protocol/index.ts +21 -0
  180. package/src/chat-protocol/ip-normalize.ts +146 -0
  181. package/src/chat-protocol/nats-decoder.ts +258 -0
  182. package/src/components/chat/__tests__/chat-message-list.test.tsx +381 -6
  183. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +207 -0
  184. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +250 -0
  185. package/src/components/chat/chat-message-enhanced.tsx +122 -20
  186. package/src/components/chat/chat-message-list.tsx +409 -132
  187. package/src/components/chat/embeddable-chat.tsx +6 -0
  188. package/src/components/chat/hooks/.index.md +30 -33
  189. package/src/components/chat/hooks/.use-nats-chat-adapter.md +36 -55
  190. package/src/components/chat/hooks/__tests__/__snapshots__/conversation-id-persistence-golden.test.ts.snap +37 -0
  191. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  192. package/src/components/chat/hooks/__tests__/chunk-catchup-dialog-staleness.test.ts +92 -0
  193. package/src/components/chat/hooks/__tests__/conversation-id-persistence-golden.test.ts +438 -0
  194. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +318 -0
  195. package/src/components/chat/hooks/index.ts +0 -1
  196. package/src/components/chat/hooks/use-chat.ts +8 -0
  197. package/src/components/chat/hooks/use-chunk-catchup.ts +26 -1
  198. package/src/components/chat/hooks/use-nats-chat-adapter.ts +254 -825
  199. package/src/components/chat/hooks/use-sse-chat-adapter.ts +380 -684
  200. package/src/components/chat/index.ts +5 -0
  201. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +940 -0
  202. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +806 -0
  203. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +467 -0
  204. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +1248 -0
  205. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +255 -0
  206. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +105 -0
  207. package/src/components/chat/stream/chat-dialog-store.ts +536 -0
  208. package/src/components/chat/stream/chat-stream-reducer.ts +1876 -0
  209. package/src/components/chat/stream/delta-batcher.ts +168 -0
  210. package/src/components/chat/stream/index.ts +55 -0
  211. package/src/components/chat/stream/message-mutations.ts +340 -0
  212. package/src/components/chat/stream/use-chat-stream-reducer.ts +126 -0
  213. package/src/components/chat/thinking-display.tsx +1 -1
  214. package/src/components/chat/types/.api.types.md +39 -49
  215. package/src/components/chat/types/.processing.types.md +29 -58
  216. package/src/components/chat/types/api.types.ts +6 -73
  217. package/src/components/chat/types/processing.types.ts +11 -53
  218. package/src/components/chat/utils/.index.md +31 -40
  219. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +420 -0
  220. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +605 -0
  221. package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +61 -0
  222. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +394 -0
  223. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +270 -0
  224. package/src/components/chat/utils/extract-incomplete-message-state.ts +63 -5
  225. package/src/components/chat/utils/index.ts +5 -8
  226. package/src/components/chat/utils/process-historical-messages.ts +358 -386
  227. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +22 -4
  228. package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
  229. package/src/components/shared/product-release/release-detail-page.tsx +19 -4
  230. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +2420 -0
  231. package/src/components/ui/__tests__/markdown-parity.test.tsx +2540 -0
  232. package/src/components/ui/index.ts +1 -2
  233. package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +176 -0
  234. package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +151 -0
  235. package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +354 -0
  236. package/src/components/ui/markdown/__tests__/sanitize-render.test.tsx +118 -0
  237. package/src/components/ui/markdown/__tests__/streaming.test.tsx +436 -0
  238. package/src/components/ui/markdown/base-components.tsx +360 -0
  239. package/src/components/ui/markdown/engine.tsx +315 -0
  240. package/src/components/ui/markdown/heading-ids.ts +239 -0
  241. package/src/components/ui/markdown/index.ts +49 -0
  242. package/src/components/ui/markdown/mermaid-diagram.tsx +323 -0
  243. package/src/components/ui/markdown/rich/embed-overrides.tsx +199 -0
  244. package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +184 -0
  245. package/src/components/ui/markdown/rich/shortcodes.ts +170 -0
  246. package/src/components/ui/markdown/sanitize.ts +3584 -0
  247. package/src/components/ui/markdown/simple-markdown-renderer.tsx +28 -0
  248. package/src/components/ui/markdown/streaming.ts +390 -0
  249. package/src/components/ui/markdown/text-size.ts +106 -0
  250. package/src/components/ui/release-changelog-section.tsx +1 -1
  251. package/src/components/ui/ticket-info-section.tsx +1 -1
  252. package/src/utils/index.ts +1 -0
  253. package/src/utils/markdown-fences.ts +127 -0
  254. package/src/utils/markdown-heading-id.ts +348 -0
  255. package/src/utils/markdown-section-extractor.ts +41 -56
  256. package/dist/chunk-23QJPSZJ.cjs.map +0 -1
  257. package/dist/chunk-5KSXMJXF.cjs.map +0 -1
  258. package/dist/chunk-MEIMDHQ2.cjs.map +0 -1
  259. package/dist/chunk-NT3BKPEC.js.map +0 -1
  260. package/dist/chunk-YBTYHIXA.js.map +0 -1
  261. package/dist/chunk-ZAAIVSX6.js.map +0 -1
  262. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +0 -6
  263. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +0 -1
  264. package/dist/components/chat/utils/chunk-parser.d.ts +0 -25
  265. package/dist/components/chat/utils/chunk-parser.d.ts.map +0 -1
  266. package/dist/components/ui/rich-markdown-renderer.d.ts +0 -34
  267. package/dist/components/ui/rich-markdown-renderer.d.ts.map +0 -1
  268. package/dist/components/ui/simple-markdown-renderer.d.ts +0 -73
  269. package/dist/components/ui/simple-markdown-renderer.d.ts.map +0 -1
  270. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +0 -77
  271. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +0 -489
  272. package/src/components/chat/utils/.chunk-parser.md +0 -62
  273. package/src/components/chat/utils/chunk-parser.ts +0 -262
  274. package/src/components/ui/.simple-markdown-renderer.md +0 -52
  275. package/src/components/ui/rich-markdown-renderer.tsx +0 -1223
  276. package/src/components/ui/simple-markdown-renderer.tsx +0 -964
  277. /package/dist/{chunk-ZPUCCSYA.js.map → chunk-34C2JV2C.js.map} +0 -0
  278. /package/dist/{chunk-GWVNRXJU.js.map → chunk-3VGRZ62V.js.map} +0 -0
  279. /package/dist/{chunk-AAHAVML2.js.map → chunk-42NYDEHH.js.map} +0 -0
  280. /package/dist/{chunk-ZEHA4IC7.js.map → chunk-42SMPKGY.js.map} +0 -0
  281. /package/dist/{chunk-HRUXC3YN.js.map → chunk-5QWYIPMH.js.map} +0 -0
  282. /package/dist/{chunk-DGDUOFNY.js.map → chunk-BUBQEZ5J.js.map} +0 -0
  283. /package/dist/{chunk-6XQGPFIR.js.map → chunk-WNXIG6YY.js.map} +0 -0
  284. /package/dist/{chunk-5INZDVGI.js.map → chunk-WZCQW4MW.js.map} +0 -0
  285. /package/dist/{chunk-B3MRHZNZ.js.map → chunk-ZHC2BCXK.js.map} +0 -0
package/dist/index.js CHANGED
@@ -196,8 +196,10 @@ import {
196
196
  CveLink,
197
197
  DEFAULT_CONTENT_SUFFIXES,
198
198
  DEFAULT_CUSTOM_STATUS_COLOR,
199
+ DEFAULT_DIALOG_SIDE,
199
200
  DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID,
200
201
  DEFAULT_FOLDER_INDEX_FILE,
202
+ DEFAULT_MAX_REDUCERS,
201
203
  DEFAULT_OS_PLATFORM,
202
204
  DEFAULT_THEME,
203
205
  DEFAULT_VIDEO_BITES_TITLE,
@@ -291,6 +293,7 @@ import {
291
293
  GuideDisplay,
292
294
  GuideModeBanner,
293
295
  GuideWelcome,
296
+ HEADING_EMOJI_RE,
294
297
  HEX_PATTERN,
295
298
  Header,
296
299
  HeaderButton,
@@ -337,12 +340,14 @@ import {
337
340
  LogSeverityDot,
338
341
  LoginForm,
339
342
  LogsList,
343
+ MAX_PENDING_RETAIN_KEYS,
340
344
  MESSAGE_ROLE,
341
345
  MESSAGE_TYPE,
342
346
  MOBILE_NAV_PANEL_ID,
343
347
  MUX_IMAGE_ORIGIN,
344
348
  MUX_STREAM_ORIGIN,
345
349
  MarkdownEditor,
350
+ MarkdownEngine,
346
351
  MarqueeWall,
347
352
  MarqueeWallFades,
348
353
  MediaGalleryManager,
@@ -364,6 +369,7 @@ import {
364
369
  MenubarSubContent,
365
370
  MenubarSubTrigger,
366
371
  MenubarTrigger,
372
+ MermaidDiagram,
367
373
  MessageSegmentAccumulator,
368
374
  MingoAiButton,
369
375
  MingoChatHistory,
@@ -487,6 +493,7 @@ import {
487
493
  RoadmapCard,
488
494
  RoadmapCardSkeleton,
489
495
  RoadmapVoteButton,
496
+ SAFE_HTML_TAGS,
490
497
  SCROLL_ANCHOR,
491
498
  SCROLL_ANCHOR_WIRE_KEY,
492
499
  SECTION_HEADING_CLASS,
@@ -499,6 +506,7 @@ import {
499
506
  SOURCE_ICON_NAMES,
500
507
  SOURCE_LABELS_BY_TABLE,
501
508
  STRIP_CELL_MAX_WIDTH,
509
+ SVG_TAGS,
502
510
  SYNTHETIC_REALTIME_ID_PREFIXES,
503
511
  ScriptArguments,
504
512
  ScriptInfoSection,
@@ -556,6 +564,7 @@ import {
556
564
  TAG_BADGE_CLASS,
557
565
  TASK_TYPE_LABELS,
558
566
  TASK_TYPE_TEXT_COLORS,
567
+ TEXT_SIZE_PRESETS,
559
568
  THEME_ATTRIBUTE,
560
569
  THEME_STORAGE_KEY,
561
570
  TICKET_STATUS_COLOR_PRESETS,
@@ -662,13 +671,17 @@ import {
662
671
  buildDefaultHref,
663
672
  buildDiscussAddendum,
664
673
  buildDocumentTree,
674
+ buildEffectiveTagSet,
675
+ buildHeadingIdMap,
665
676
  buildListUrl,
666
677
  buildNatsWsUrl,
667
678
  buildProductReleaseCardProps,
679
+ buildSanitizeSchema,
668
680
  buildStreamFrames,
669
681
  buildSuggestionUrl,
670
682
  canonicalContentRefType,
671
683
  captureFirstTouchAttribution,
684
+ cardAwareUrlTransform,
672
685
  changelogLabels,
673
686
  chatChipClass,
674
687
  cleanEmailDomain,
@@ -679,12 +692,20 @@ import {
679
692
  clearWalkthroughDismissal,
680
693
  clickupTaskUrl,
681
694
  columnFromTicketStatus,
695
+ completeStreamingTail,
682
696
  computeHistoryPrepend,
683
697
  computeIsNewTab,
698
+ createChatDialogStore,
699
+ createChatStreamReducer,
684
700
  createColumnHelper,
701
+ createDeltaBatcher,
702
+ createEmptyTurnMeta,
703
+ createFenceTracker,
704
+ createHeadingIdDeduper,
685
705
  createMessageSegmentAccumulator,
686
706
  createUTCTimestamp,
687
707
  decideNewTab,
708
+ decodeHistoricalMessageData,
688
709
  deepClone,
689
710
  defaultBuildProductReleaseCardProps,
690
711
  defaultTableIdForDocumentType,
@@ -698,6 +719,7 @@ import {
698
719
  dismissWalkthrough,
699
720
  ensureBiteIds,
700
721
  escapeMarkdownInline,
722
+ escapeUnknownHtmlTags,
701
723
  executeNavigation,
702
724
  executeNavigationImperative,
703
725
  exportToCSV,
@@ -707,10 +729,11 @@ import {
707
729
  extractErrorMessages,
708
730
  extractImageEdgeColorAsync,
709
731
  extractIncompleteMessageState,
732
+ extractIncompleteTailState,
710
733
  extractItemId,
711
734
  extractItems,
712
735
  extractSections,
713
- extractTextFromChunk,
736
+ extractText,
714
737
  extractYouTubeId,
715
738
  faqItemAnchor,
716
739
  faqSectionSlug,
@@ -837,15 +860,13 @@ import {
837
860
  interleave,
838
861
  isAnnouncementDismissed,
839
862
  isApprovalNotification,
840
- isControlChunk,
863
+ isBlankLine,
841
864
  isCrossOriginUrl,
842
865
  isDismissedCookieValue,
843
- isErrorChunk,
844
866
  isFigmaSlidesUrl,
845
867
  isGenericDomain,
846
868
  isGenericWebsiteDomain,
847
869
  isHistoricalUserTurn,
848
- isMetadataChunk,
849
870
  isModifierClick,
850
871
  isOSPlatform,
851
872
  isQuickActionIconSpec,
@@ -879,7 +900,6 @@ import {
879
900
  orderContentRefTypes,
880
901
  osLabels,
881
902
  parseAttributionFromUrl,
882
- parseChunkToAction,
883
903
  parseFaqHash,
884
904
  parseScrollAnchor,
885
905
  parseWireCommandOverride,
@@ -887,10 +907,12 @@ import {
887
907
  pickReadableTextColor,
888
908
  processHistoricalMessages,
889
909
  processHistoricalMessagesWithErrors,
910
+ processShortcodes,
890
911
  programItemToStripProfile,
891
912
  ratioToCategory,
892
913
  readDismissCookie,
893
914
  readLeadingDecisionFrame,
915
+ rehypeStripUnsafe,
894
916
  releaseStatusOptions,
895
917
  releaseTypeOptions,
896
918
  releaseTypeToBadgeColor,
@@ -906,20 +928,26 @@ import {
906
928
  resolveSourceIcon,
907
929
  resolveSourceRowCTA,
908
930
  resolveStatusTagProps,
931
+ resolveTextSizeConfig,
909
932
  resolveTicketStatus,
910
933
  rgbToHex,
911
934
  safeHref,
912
935
  sanitizeLandingUrl,
913
936
  sanitizeTitleForChat,
914
937
  saveDataEnabled,
938
+ scanHeadings,
915
939
  serializeJsonLd,
916
940
  shellLabels,
917
941
  shouldProxyImage,
942
+ slugifyHeadingBase,
943
+ slugifyHeadingText,
918
944
  sortBitesByCreatedAtDesc,
919
945
  sortTreeChildren,
946
+ splitStreamingBlocks,
920
947
  statusBadgeVariants,
921
948
  stripChatAttachmentMarkdown,
922
949
  stripFolderIndexFromPath,
950
+ stripHeadingEmojis,
923
951
  stripHtml,
924
952
  stripInlineMarkdown,
925
953
  stripSameOriginToPath,
@@ -946,6 +974,7 @@ import {
946
974
  useChatAttachments,
947
975
  useChatCardItem,
948
976
  useChatIdentity,
977
+ useChatStreamReducer,
949
978
  useChunkCatchup,
950
979
  useCloseOnNavigation,
951
980
  useCollapsible,
@@ -955,6 +984,7 @@ import {
955
984
  useDynamicTheme,
956
985
  useEmptyStateConfig,
957
986
  useFiltersDropdown,
987
+ useHeadingIdMap,
958
988
  useJetStreamDialogSubscription,
959
989
  useLoading,
960
990
  useMarqueeSync,
@@ -965,7 +995,6 @@ import {
965
995
  useOptionalTimeTracker,
966
996
  usePageActionsBottomPadding,
967
997
  useProxiedImageUrl,
968
- useRealtimeChunkProcessor,
969
998
  useSSE,
970
999
  useScriptedStream,
971
1000
  useScrollFade,
@@ -989,7 +1018,7 @@ import {
989
1018
  walkthroughDismissCookieName,
990
1019
  withFirstTouchAttribution,
991
1020
  writeDismissCookie
992
- } from "./chunk-ZAAIVSX6.js";
1021
+ } from "./chunk-D3LUKR2Y.js";
993
1022
  import {
994
1023
  CommandApprovalToast,
995
1024
  DEFAULT_MIN_FILL_MS,
@@ -1543,8 +1572,10 @@ export {
1543
1572
  CveLink,
1544
1573
  DEFAULT_CONTENT_SUFFIXES,
1545
1574
  DEFAULT_CUSTOM_STATUS_COLOR,
1575
+ DEFAULT_DIALOG_SIDE,
1546
1576
  DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID,
1547
1577
  DEFAULT_FOLDER_INDEX_FILE,
1578
+ DEFAULT_MAX_REDUCERS,
1548
1579
  DEFAULT_MIN_FILL_MS,
1549
1580
  DEFAULT_OS_PLATFORM,
1550
1581
  DEFAULT_THEME,
@@ -1686,6 +1717,7 @@ export {
1686
1717
  GuideDisplay,
1687
1718
  GuideModeBanner,
1688
1719
  GuideWelcome,
1720
+ HEADING_EMOJI_RE,
1689
1721
  HEX_PATTERN,
1690
1722
  HONEYPOT_FIELD,
1691
1723
  HUB_HEADER_OFFSET_PX,
@@ -1755,6 +1787,7 @@ export {
1755
1787
  CheckCircleIcon2 as LucideCheckCircleIcon,
1756
1788
  XIcon2 as LucideXIcon,
1757
1789
  LumaIcon,
1790
+ MAX_PENDING_RETAIN_KEYS,
1758
1791
  MESSAGE_ROLE,
1759
1792
  MESSAGE_TYPE,
1760
1793
  MOBILE_NAV_PANEL_ID,
@@ -1763,6 +1796,7 @@ export {
1763
1796
  MacOSIcon,
1764
1797
  MarginCrisisIcon,
1765
1798
  MarkdownEditor,
1799
+ MarkdownEngine,
1766
1800
  MarqueeWall,
1767
1801
  MarqueeWallFades,
1768
1802
  MediaGalleryManager,
@@ -1784,6 +1818,7 @@ export {
1784
1818
  MenubarSubContent,
1785
1819
  MenubarSubTrigger,
1786
1820
  MenubarTrigger,
1821
+ MermaidDiagram,
1787
1822
  MessageCircleIcon,
1788
1823
  MessageSegmentAccumulator,
1789
1824
  MiamiCyberGangLogo,
@@ -1943,6 +1978,7 @@ export {
1943
1978
  RoadmapCard,
1944
1979
  RoadmapCardSkeleton,
1945
1980
  RoadmapVoteButton,
1981
+ SAFE_HTML_TAGS,
1946
1982
  SCROLL_ANCHOR,
1947
1983
  SCROLL_ANCHOR_WIRE_KEY,
1948
1984
  SECTION_HEADING_CLASS,
@@ -1958,6 +1994,7 @@ export {
1958
1994
  SSOConfigurationIcon,
1959
1995
  STICKY_HEADER_OFFSET_PX,
1960
1996
  STRIP_CELL_MAX_WIDTH,
1997
+ SVG_TAGS,
1961
1998
  SYNTHETIC_REALTIME_ID_PREFIXES,
1962
1999
  ScriptArguments,
1963
2000
  ScriptGenerationIcon,
@@ -2042,6 +2079,7 @@ export {
2042
2079
  TAG_BADGE_CLASS,
2043
2080
  TASK_TYPE_LABELS,
2044
2081
  TASK_TYPE_TEXT_COLORS,
2082
+ TEXT_SIZE_PRESETS,
2045
2083
  THEME_ATTRIBUTE,
2046
2084
  THEME_STORAGE_KEY,
2047
2085
  TICKET_STATUS_COLOR_PRESETS,
@@ -2171,15 +2209,19 @@ export {
2171
2209
  buildDefaultHref,
2172
2210
  buildDiscussAddendum,
2173
2211
  buildDocumentTree,
2212
+ buildEffectiveTagSet,
2213
+ buildHeadingIdMap,
2174
2214
  buildListUrl,
2175
2215
  buildNatsWsUrl,
2176
2216
  buildOgPlaceholderUrl,
2177
2217
  buildProductReleaseCardProps,
2218
+ buildSanitizeSchema,
2178
2219
  buildStreamFrames,
2179
2220
  buildSuggestionUrl,
2180
2221
  buttonVariants,
2181
2222
  canonicalContentRefType,
2182
2223
  captureFirstTouchAttribution,
2224
+ cardAwareUrlTransform,
2183
2225
  changelogLabels,
2184
2226
  embedAuthedFetch as chatAuthedFetch,
2185
2227
  chatChipClass,
@@ -2197,16 +2239,24 @@ export {
2197
2239
  cn,
2198
2240
  coerceValue,
2199
2241
  columnFromTicketStatus,
2242
+ completeStreamingTail,
2200
2243
  computeHistoryPrepend,
2201
2244
  computeIsNewTab,
2202
2245
  configureAuthenticatedImage,
2203
2246
  configureBatchImageFetch,
2204
2247
  consumeAccessCode,
2248
+ createChatDialogStore,
2249
+ createChatStreamReducer,
2205
2250
  createColumnHelper,
2251
+ createDeltaBatcher,
2252
+ createEmptyTurnMeta,
2253
+ createFenceTracker,
2254
+ createHeadingIdDeduper,
2206
2255
  createMessageSegmentAccumulator,
2207
2256
  createSearchParams,
2208
2257
  createUTCTimestamp,
2209
2258
  decideNewTab,
2259
+ decodeHistoricalMessageData,
2210
2260
  deepClone,
2211
2261
  defaultBuildProductReleaseCardProps,
2212
2262
  defaultTableIdForDocumentType,
@@ -2222,6 +2272,7 @@ export {
2222
2272
  embedAuthedFetch,
2223
2273
  ensureBiteIds,
2224
2274
  escapeMarkdownInline,
2275
+ escapeUnknownHtmlTags,
2225
2276
  evaluateHumanitySignals,
2226
2277
  executeNavigation,
2227
2278
  executeNavigationImperative,
@@ -2233,10 +2284,11 @@ export {
2233
2284
  extractHumanitySignals,
2234
2285
  extractImageEdgeColorAsync,
2235
2286
  extractIncompleteMessageState,
2287
+ extractIncompleteTailState,
2236
2288
  extractItemId,
2237
2289
  extractItems,
2238
2290
  extractSections,
2239
- extractTextFromChunk,
2291
+ extractText,
2240
2292
  extractVariablesFromQuery,
2241
2293
  extractYouTubeId,
2242
2294
  faqItemAnchor,
@@ -2386,16 +2438,14 @@ export {
2386
2438
  introspector,
2387
2439
  isAnnouncementDismissed,
2388
2440
  isApprovalNotification,
2389
- isControlChunk,
2441
+ isBlankLine,
2390
2442
  isCrossOriginUrl,
2391
2443
  isDismissedCookieValue,
2392
- isErrorChunk,
2393
2444
  isFigmaSlidesUrl,
2394
2445
  isGenericDomain,
2395
2446
  isGenericWebsiteDomain,
2396
2447
  isHistoricalUserTurn,
2397
2448
  isInputObjectType,
2398
- isMetadataChunk,
2399
2449
  isModifierClick,
2400
2450
  isOSPlatform,
2401
2451
  isQuickActionIconSpec,
@@ -2434,7 +2484,6 @@ export {
2434
2484
  orderContentRefTypes,
2435
2485
  osLabels,
2436
2486
  parseAttributionFromUrl,
2437
- parseChunkToAction,
2438
2487
  parseFaqHash,
2439
2488
  parseScrollAnchor,
2440
2489
  parseWireCommandOverride,
@@ -2449,11 +2498,13 @@ export {
2449
2498
  platformSlogans,
2450
2499
  processHistoricalMessages,
2451
2500
  processHistoricalMessagesWithErrors,
2501
+ processShortcodes,
2452
2502
  programItemToStripProfile,
2453
2503
  progressColorByVariant,
2454
2504
  ratioToCategory,
2455
2505
  readDismissCookie,
2456
2506
  readLeadingDecisionFrame,
2507
+ rehypeStripUnsafe,
2457
2508
  releaseStatusOptions,
2458
2509
  releaseTypeOptions,
2459
2510
  releaseTypeToBadgeColor,
@@ -2470,12 +2521,14 @@ export {
2470
2521
  resolveSourceIcon,
2471
2522
  resolveSourceRowCTA,
2472
2523
  resolveStatusTagProps,
2524
+ resolveTextSizeConfig,
2473
2525
  resolveTicketStatus,
2474
2526
  rgbToHex,
2475
2527
  safeHref,
2476
2528
  sanitizeLandingUrl,
2477
2529
  sanitizeTitleForChat,
2478
2530
  saveDataEnabled,
2531
+ scanHeadings,
2479
2532
  scrollElementIntoView,
2480
2533
  serializeJsonLd,
2481
2534
  setEmbedProxyAuth as setChatProxyAuth,
@@ -2487,12 +2540,16 @@ export {
2487
2540
  shouldProxyImage,
2488
2541
  showCommandApprovalToast,
2489
2542
  showToast,
2543
+ slugifyHeadingBase,
2544
+ slugifyHeadingText,
2490
2545
  sortBitesByCreatedAtDesc,
2491
2546
  sortTreeChildren,
2492
2547
  splitCsvEnv,
2548
+ splitStreamingBlocks,
2493
2549
  statusBadgeVariants,
2494
2550
  stripChatAttachmentMarkdown,
2495
2551
  stripFolderIndexFromPath,
2552
+ stripHeadingEmojis,
2496
2553
  stripHtml,
2497
2554
  stripInlineMarkdown,
2498
2555
  stripSameOriginToPath,
@@ -2529,6 +2586,7 @@ export {
2529
2586
  useChatAttachments,
2530
2587
  useChatCardItem,
2531
2588
  useChatIdentity,
2589
+ useChatStreamReducer,
2532
2590
  useChunkCatchup,
2533
2591
  useCloseOnNavigation,
2534
2592
  useCollapsible,
@@ -2546,6 +2604,7 @@ export {
2546
2604
  useFiltersDropdown,
2547
2605
  useFocusTrap,
2548
2606
  useHeaderHeight,
2607
+ useHeadingIdMap,
2549
2608
  useHorizontalScrollbar,
2550
2609
  useHumanitySignals,
2551
2610
  useImageEdgeColor,
@@ -2575,7 +2634,6 @@ export {
2575
2634
  usePreventScroll,
2576
2635
  useProxiedImageUrl,
2577
2636
  useQueryParams,
2578
- useRealtimeChunkProcessor,
2579
2637
  useResetOnPageHidden,
2580
2638
  useSSE,
2581
2639
  useScriptedStream,
@@ -3996,6 +3996,151 @@ function buildDocumentTree(docs, mapFn, getParentPath, getPath) {
3996
3996
  return sortTreeChildren(rootNodes);
3997
3997
  }
3998
3998
 
3999
+ // src/utils/markdown-fences.ts
4000
+ var FENCE_RE = /^ {0,3}(`{3,}|~{3,})([^\n]*?)\r?$/;
4001
+ var BLANK_LINE_RE = /^[ \t\r]*$/;
4002
+ function isBlankLine(line) {
4003
+ return BLANK_LINE_RE.test(line);
4004
+ }
4005
+ function createFenceTracker() {
4006
+ let fenceChar = null;
4007
+ let fenceLength = 0;
4008
+ return {
4009
+ push(line) {
4010
+ const fence = FENCE_RE.exec(line);
4011
+ if (fence) {
4012
+ const run = fence[1];
4013
+ if (fenceChar === null) {
4014
+ fenceChar = run[0];
4015
+ fenceLength = run.length;
4016
+ return "open";
4017
+ }
4018
+ if (run[0] === fenceChar && run.length >= fenceLength && isBlankLine(fence[2])) {
4019
+ fenceChar = null;
4020
+ fenceLength = 0;
4021
+ return "close";
4022
+ }
4023
+ return "inside";
4024
+ }
4025
+ return fenceChar === null ? "text" : "inside";
4026
+ },
4027
+ openChar: () => fenceChar,
4028
+ openLength: () => fenceLength
4029
+ };
4030
+ }
4031
+
4032
+ // src/utils/markdown-heading-id.ts
4033
+ var HEADING_EMOJI_RE = /[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/gu;
4034
+ function stripHeadingEmojis(text) {
4035
+ return text.replace(HEADING_EMOJI_RE, "").trim();
4036
+ }
4037
+ function slugifyHeadingBase(text) {
4038
+ return text.trim().toLowerCase().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/^-+|-+$/g, "");
4039
+ }
4040
+ function slugifyHeadingText(text) {
4041
+ return slugifyHeadingBase(stripHeadingEmojis(text));
4042
+ }
4043
+ var ATX_HEADING_RE = /^ {0,3}(#{1,6})[ \t]+(.*?)(?:[ \t]+#+)?[ \t]*\r?$/;
4044
+ var ATX_EMPTY_RE = /^ {0,3}(#{1,6})[ \t]*#*[ \t]*\r?$/;
4045
+ var RAW_HEADING_RE = /<h([1-6])\b[^>]*>([\s\S]*?)(?:<\/h\1>|$)/gi;
4046
+ var CONTAINER_PREFIX_RE = /^ {0,3}(?:(?:>[ \t]?)+|(?:[-+*]|\d{1,9}[.)])[ \t]+)+/;
4047
+ var SETEXT_UNDERLINE_RE = /^ {0,3}(=+|-+)[ \t]*\r?$/;
4048
+ var THEMATIC_BREAK_RE = /^ {0,3}(\*|_){3,}[ \t]*\r?$/;
4049
+ var HTML_BLOCK_TAGS = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
4050
+ var HTML_BLOCK_OPENER_RE = new RegExp(
4051
+ `^ {0,3}(?:<(?:script|pre|style|textarea)(?:[\\s>]|$)|<!--|<\\?|<![a-zA-Z]|<!\\[CDATA\\[|</?(?:${HTML_BLOCK_TAGS})(?:[\\s/>]|$)|<[a-zA-Z][a-zA-Z0-9-]*(?:\\s[^>]*)?/?>[ \\t]*\\r?$|</[a-zA-Z][a-zA-Z0-9-]*[ \\t]*>[ \\t]*\\r?$)`,
4052
+ "i"
4053
+ );
4054
+ function scanHeadings(content, options = {}) {
4055
+ const { skipFrontmatter = true, includeRawHtml = true, skipFences = true } = options;
4056
+ const out = [];
4057
+ const lines = content.split("\n");
4058
+ const fences = skipFences ? createFenceTracker() : null;
4059
+ let start = 0;
4060
+ if (skipFrontmatter && lines[0]?.trim() === "---") {
4061
+ for (let i = 1; i < lines.length; i++) {
4062
+ if (lines[i].trim() === "---" || lines[i].trim() === "...") {
4063
+ start = i + 1;
4064
+ break;
4065
+ }
4066
+ }
4067
+ }
4068
+ let setextRun = null;
4069
+ for (let i = start; i < lines.length; i++) {
4070
+ const line = lines[i];
4071
+ if (fences) {
4072
+ const role = fences.push(line);
4073
+ if (role !== "text") {
4074
+ setextRun = null;
4075
+ continue;
4076
+ }
4077
+ }
4078
+ const prefix = CONTAINER_PREFIX_RE.exec(line)?.[0] ?? "";
4079
+ const body = prefix ? line.slice(prefix.length) : line;
4080
+ const setext = SETEXT_UNDERLINE_RE.exec(body);
4081
+ if (setext) {
4082
+ if (setextRun && !setextRun.disqualified && setextRun.prefix === prefix) {
4083
+ out.push({
4084
+ line: setextRun.line,
4085
+ level: setext[1][0] === "=" ? 1 : 2,
4086
+ text: setextRun.lines.join("\n")
4087
+ });
4088
+ }
4089
+ setextRun = null;
4090
+ continue;
4091
+ }
4092
+ const atx = ATX_HEADING_RE.exec(body) ?? ATX_EMPTY_RE.exec(body);
4093
+ if (atx) {
4094
+ out.push({ line: i + 1, level: atx[1].length, text: (atx[2] ?? "").trim() });
4095
+ setextRun = null;
4096
+ continue;
4097
+ }
4098
+ if (includeRawHtml && line.indexOf("<") !== -1) {
4099
+ RAW_HEADING_RE.lastIndex = 0;
4100
+ let raw;
4101
+ let matched = false;
4102
+ while ((raw = RAW_HEADING_RE.exec(line)) !== null) {
4103
+ matched = true;
4104
+ out.push({
4105
+ line: i + 1,
4106
+ level: Number(raw[1]),
4107
+ text: raw[2].replace(/<[^>]*>/g, "").trim()
4108
+ });
4109
+ }
4110
+ if (matched) {
4111
+ setextRun = null;
4112
+ continue;
4113
+ }
4114
+ }
4115
+ if (isBlankLine(body) || THEMATIC_BREAK_RE.test(body)) {
4116
+ setextRun = null;
4117
+ continue;
4118
+ }
4119
+ if (setextRun && setextRun.prefix === prefix) {
4120
+ setextRun.lines.push(body.trim());
4121
+ } else {
4122
+ setextRun = {
4123
+ line: i + 1,
4124
+ prefix,
4125
+ lines: [body.trim()],
4126
+ disqualified: HTML_BLOCK_OPENER_RE.test(body)
4127
+ };
4128
+ }
4129
+ }
4130
+ return out;
4131
+ }
4132
+ function createHeadingIdDeduper() {
4133
+ const counts = {};
4134
+ return (cleanId) => {
4135
+ if (counts[cleanId]) {
4136
+ counts[cleanId]++;
4137
+ return `${cleanId}-${counts[cleanId]}`;
4138
+ }
4139
+ counts[cleanId] = 1;
4140
+ return cleanId;
4141
+ };
4142
+ }
4143
+
3999
4144
  // src/utils/markdown-to-plain.ts
4000
4145
  function stripInlineMarkdown(s) {
4001
4146
  return s.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*]+)\*/g, "$1").replace(/`([^`]+)`/g, "$1");
@@ -4026,50 +4171,26 @@ var DEFAULT_OPTIONS = {
4026
4171
  function extractSections(markdown, options = {}) {
4027
4172
  const opts = { ...DEFAULT_OPTIONS, ...options };
4028
4173
  const sections = [];
4029
- const lines = markdown.split("\n");
4030
- const idCounts = {};
4031
- let inCodeBlock = false;
4032
- let inYamlBlock = false;
4033
- for (const line of lines) {
4034
- if (opts.skipCodeAndYamlBlocks) {
4035
- if (line.startsWith("```")) {
4036
- inCodeBlock = !inCodeBlock;
4037
- continue;
4038
- }
4039
- if (line === "---") {
4040
- inYamlBlock = !inYamlBlock;
4041
- continue;
4042
- }
4043
- if (inCodeBlock || inYamlBlock) continue;
4044
- }
4045
- const pattern = new RegExp(`^(#{1,${opts.maxLevel}})\\s+(.+)`);
4046
- const match = line.match(pattern);
4047
- if (!match) continue;
4048
- const level = match[1].length;
4049
- if (level > opts.maxLevel) continue;
4050
- let title = match[2].trim();
4174
+ const dedupe = createHeadingIdDeduper();
4175
+ const scanned = scanHeadings(markdown, {
4176
+ skipFrontmatter: opts.skipCodeAndYamlBlocks,
4177
+ skipFences: opts.skipCodeAndYamlBlocks
4178
+ });
4179
+ for (const heading of scanned) {
4180
+ if (heading.level > opts.maxLevel) continue;
4181
+ let title = heading.text;
4051
4182
  if (opts.stripFormattingMarkers) {
4052
4183
  title = stripInlineMarkdown(title).trim();
4053
4184
  }
4054
- let baseId = title;
4055
- if (opts.removeEmojis) {
4056
- baseId = baseId.replace(
4057
- /[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/gu,
4058
- ""
4059
- ).trim();
4060
- }
4061
- baseId = baseId.toLowerCase().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/^-+|-+$/g, "");
4185
+ const baseId = slugifyHeadingBase(
4186
+ opts.removeEmojis ? stripHeadingEmojis(title) : title
4187
+ );
4062
4188
  const cleanId = baseId || `section-${sections.length + 1}`;
4063
- let id = cleanId;
4064
- if (opts.handleDuplicateIds) {
4065
- if (idCounts[cleanId]) {
4066
- idCounts[cleanId]++;
4067
- id = `${cleanId}-${idCounts[cleanId]}`;
4068
- } else {
4069
- idCounts[cleanId] = 1;
4070
- }
4071
- }
4072
- sections.push({ id, title, level });
4189
+ sections.push({
4190
+ id: opts.handleDuplicateIds ? dedupe(cleanId) : cleanId,
4191
+ title,
4192
+ level: heading.level
4193
+ });
4073
4194
  }
4074
4195
  return sections;
4075
4196
  }
@@ -4235,6 +4356,7 @@ exports.DEV_SECTION_PARAM_KEYS = DEV_SECTION_PARAM_KEYS;
4235
4356
  exports.ELAPSED_MS_FIELD = ELAPSED_MS_FIELD;
4236
4357
  exports.FIRST_TOUCH_ATTRIBUTION_KEY = FIRST_TOUCH_ATTRIBUTION_KEY;
4237
4358
  exports.GENERIC_EMAIL_DOMAINS = GENERIC_EMAIL_DOMAINS;
4359
+ exports.HEADING_EMOJI_RE = HEADING_EMOJI_RE;
4238
4360
  exports.HEX_PATTERN = HEX_PATTERN;
4239
4361
  exports.HONEYPOT_FIELD = HONEYPOT_FIELD;
4240
4362
  exports.HUB_HEADER_OFFSET_PX = HUB_HEADER_OFFSET_PX;
@@ -4277,6 +4399,8 @@ exports.clearWalkthroughDismissal = clearWalkthroughDismissal;
4277
4399
  exports.clickupTaskUrl = clickupTaskUrl;
4278
4400
  exports.cn = cn;
4279
4401
  exports.consumeAccessCode = consumeAccessCode;
4402
+ exports.createFenceTracker = createFenceTracker;
4403
+ exports.createHeadingIdDeduper = createHeadingIdDeduper;
4280
4404
  exports.createUTCTimestamp = createUTCTimestamp;
4281
4405
  exports.deepClone = deepClone;
4282
4406
  exports.delay = delay;
@@ -4400,6 +4524,7 @@ exports.getTrendColors = getTrendColors;
4400
4524
  exports.hasGenericEmailDomain = hasGenericEmailDomain;
4401
4525
  exports.hexToRgb = hexToRgb2;
4402
4526
  exports.isAnnouncementDismissed = isAnnouncementDismissed;
4527
+ exports.isBlankLine = isBlankLine;
4403
4528
  exports.isCrossOriginUrl = isCrossOriginUrl;
4404
4529
  exports.isDismissedCookieValue = isDismissedCookieValue;
4405
4530
  exports.isFigmaSlidesUrl = isFigmaSlidesUrl;
@@ -4445,15 +4570,19 @@ exports.resolveReleaseCover = resolveReleaseCover;
4445
4570
  exports.rgbToHex = rgbToHex;
4446
4571
  exports.sanitizeLandingUrl = sanitizeLandingUrl;
4447
4572
  exports.sanitizeTitleForChat = sanitizeTitleForChat;
4573
+ exports.scanHeadings = scanHeadings;
4448
4574
  exports.scrollElementIntoView = scrollElementIntoView;
4449
4575
  exports.serializeJsonLd = serializeJsonLd;
4450
4576
  exports.setEmbedAuthAdapter = setEmbedAuthAdapter;
4451
4577
  exports.setEmbedProxyAuth = setEmbedProxyAuth;
4452
4578
  exports.shouldProxyImage = shouldProxyImage;
4579
+ exports.slugifyHeadingBase = slugifyHeadingBase;
4580
+ exports.slugifyHeadingText = slugifyHeadingText;
4453
4581
  exports.sortTreeChildren = sortTreeChildren;
4454
4582
  exports.splitCsvEnv = splitCsvEnv;
4455
4583
  exports.stripChatAttachmentMarkdown = stripChatAttachmentMarkdown;
4456
4584
  exports.stripFolderIndexFromPath = stripFolderIndexFromPath;
4585
+ exports.stripHeadingEmojis = stripHeadingEmojis;
4457
4586
  exports.stripHtml = stripHtml;
4458
4587
  exports.stripInlineMarkdown = stripInlineMarkdown;
4459
4588
  exports.toDocSlug = toDocSlug;