@flamingo-stack/openframe-frontend-core 0.0.491 → 0.0.492-1506.3956.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 (280) 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-6XNWT2KC.js → chunk-34TDA22K.js} +2 -2
  22. package/dist/{chunk-T4BUS6JV.js → chunk-3LKB722U.js} +2 -2
  23. package/dist/{chunk-2RTNC3KP.cjs → chunk-7N7YZCHR.cjs} +6958 -4785
  24. package/dist/chunk-7N7YZCHR.cjs.map +1 -0
  25. package/dist/{chunk-ITV6LSG7.cjs → chunk-A6FPYAUD.cjs} +15 -15
  26. package/dist/{chunk-ITV6LSG7.cjs.map → chunk-A6FPYAUD.cjs.map} +1 -1
  27. package/dist/{chunk-35CTCUJ7.js → chunk-BEEPU44B.js} +10 -10
  28. package/dist/chunk-BEEPU44B.js.map +1 -0
  29. package/dist/{chunk-HRMOCJKU.cjs → chunk-C65NCIMV.cjs} +9 -9
  30. package/dist/{chunk-HRMOCJKU.cjs.map → chunk-C65NCIMV.cjs.map} +1 -1
  31. package/dist/{chunk-QF54RPHZ.js → chunk-J3VBVR4W.js} +4 -4
  32. package/dist/{chunk-GTMW4KY7.js → chunk-JHEIOXXZ.js} +6 -5
  33. package/dist/chunk-JHEIOXXZ.js.map +1 -0
  34. package/dist/{chunk-QNFAZIFC.cjs → chunk-JSEJ5MH5.cjs} +5 -5
  35. package/dist/{chunk-QNFAZIFC.cjs.map → chunk-JSEJ5MH5.cjs.map} +1 -1
  36. package/dist/{chunk-J2V4B6FF.cjs → chunk-KX3K2EH4.cjs} +11 -11
  37. package/dist/{chunk-J2V4B6FF.cjs.map → chunk-KX3K2EH4.cjs.map} +1 -1
  38. package/dist/{chunk-EHHX22JL.cjs → chunk-M6FEGPQJ.cjs} +62 -62
  39. package/dist/{chunk-EHHX22JL.cjs.map → chunk-M6FEGPQJ.cjs.map} +1 -1
  40. package/dist/{chunk-GL33BHGZ.cjs → chunk-MEIGDK7M.cjs} +60 -60
  41. package/dist/chunk-MEIGDK7M.cjs.map +1 -0
  42. package/dist/{chunk-CYIUPI7J.js → chunk-MEMRQTOI.js} +12010 -9837
  43. package/dist/chunk-MEMRQTOI.js.map +1 -0
  44. package/dist/{chunk-6O3YTVLG.cjs → chunk-MPUQFRJG.cjs} +7 -7
  45. package/dist/{chunk-6O3YTVLG.cjs.map → chunk-MPUQFRJG.cjs.map} +1 -1
  46. package/dist/{chunk-PVSXTCJY.cjs → chunk-MSL5NE3N.cjs} +37 -37
  47. package/dist/{chunk-PVSXTCJY.cjs.map → chunk-MSL5NE3N.cjs.map} +1 -1
  48. package/dist/{chunk-CZTKQVIQ.js → chunk-MZRIRQYV.js} +2 -2
  49. package/dist/{chunk-ZDUJ6BDI.js → chunk-NCAN6VUF.js} +2 -2
  50. package/dist/{chunk-ZEC5U5T7.js → chunk-OL3MJKUI.js} +2 -2
  51. package/dist/{chunk-U2JIGUXF.js → chunk-PLB6CQSO.js} +2 -2
  52. package/dist/{chunk-IUGJAILN.js → chunk-PTXZB2KW.js} +2 -2
  53. package/dist/{chunk-YKE2KZ2Y.cjs → chunk-QDGB2DKY.cjs} +26 -26
  54. package/dist/{chunk-YKE2KZ2Y.cjs.map → chunk-QDGB2DKY.cjs.map} +1 -1
  55. package/dist/{chunk-VD4QDSP7.cjs → chunk-QG2EBIH5.cjs} +31 -31
  56. package/dist/{chunk-VD4QDSP7.cjs.map → chunk-QG2EBIH5.cjs.map} +1 -1
  57. package/dist/{chunk-7NRRONK5.cjs → chunk-W56JYDSC.cjs} +28 -27
  58. package/dist/chunk-W56JYDSC.cjs.map +1 -0
  59. package/dist/{chunk-2YQK6LHR.js → chunk-XOFE2RT4.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-nats-chat-adapter.d.ts +15 -48
  68. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  69. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +10 -57
  70. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  71. package/dist/components/chat/index.cjs +10 -2
  72. package/dist/components/chat/index.cjs.map +1 -1
  73. package/dist/components/chat/index.d.ts +1 -0
  74. package/dist/components/chat/index.d.ts.map +1 -1
  75. package/dist/components/chat/index.js +21 -13
  76. package/dist/components/chat/stream/chat-dialog-store.d.ts +184 -0
  77. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +1 -0
  78. package/dist/components/chat/stream/chat-stream-reducer.d.ts +367 -0
  79. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -0
  80. package/dist/components/chat/stream/delta-batcher.d.ts +51 -0
  81. package/dist/components/chat/stream/delta-batcher.d.ts.map +1 -0
  82. package/dist/components/chat/stream/index.d.ts +17 -0
  83. package/dist/components/chat/stream/index.d.ts.map +1 -0
  84. package/dist/components/chat/stream/message-mutations.d.ts +77 -0
  85. package/dist/components/chat/stream/message-mutations.d.ts.map +1 -0
  86. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +22 -0
  87. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +1 -0
  88. package/dist/components/chat/types/api.types.d.ts +1 -81
  89. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  90. package/dist/components/chat/types/processing.types.d.ts +2 -93
  91. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  92. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +34 -6
  93. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  94. package/dist/components/chat/utils/index.d.ts +2 -3
  95. package/dist/components/chat/utils/index.d.ts.map +1 -1
  96. package/dist/components/chat/utils/process-historical-messages.d.ts +59 -11
  97. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  98. package/dist/components/contact/index.cjs +3 -3
  99. package/dist/components/contact/index.js +2 -2
  100. package/dist/components/docs/index.cjs +5 -5
  101. package/dist/components/docs/index.js +4 -4
  102. package/dist/components/embeds/index.cjs +3 -3
  103. package/dist/components/embeds/index.js +2 -2
  104. package/dist/components/faq/index.cjs +3 -3
  105. package/dist/components/faq/index.js +2 -2
  106. package/dist/components/features/index.cjs +2 -2
  107. package/dist/components/features/index.js +1 -1
  108. package/dist/components/help-center-pages/index.cjs +20 -20
  109. package/dist/components/help-center-pages/index.js +11 -11
  110. package/dist/components/index.cjs +172 -130
  111. package/dist/components/index.cjs.map +1 -1
  112. package/dist/components/index.js +63 -21
  113. package/dist/components/index.js.map +1 -1
  114. package/dist/components/navigation/index.cjs +2 -2
  115. package/dist/components/navigation/index.js +1 -1
  116. package/dist/components/onboarding-guides/index.cjs +5 -5
  117. package/dist/components/onboarding-guides/index.js +4 -4
  118. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  119. package/dist/components/related-content/index.cjs +3 -3
  120. package/dist/components/related-content/index.js +2 -2
  121. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  122. package/dist/components/tickets/index.cjs +5 -5
  123. package/dist/components/tickets/index.js +4 -4
  124. package/dist/components/ui/index.cjs +44 -2
  125. package/dist/components/ui/index.cjs.map +1 -1
  126. package/dist/components/ui/index.d.ts +1 -2
  127. package/dist/components/ui/index.d.ts.map +1 -1
  128. package/dist/components/ui/index.js +55 -13
  129. package/dist/components/ui/markdown/base-components.d.ts +51 -0
  130. package/dist/components/ui/markdown/base-components.d.ts.map +1 -0
  131. package/dist/components/ui/markdown/engine.d.ts +99 -0
  132. package/dist/components/ui/markdown/engine.d.ts.map +1 -0
  133. package/dist/components/ui/markdown/heading-ids.d.ts +65 -0
  134. package/dist/components/ui/markdown/heading-ids.d.ts.map +1 -0
  135. package/dist/components/ui/markdown/index.d.ts +18 -0
  136. package/dist/components/ui/markdown/index.d.ts.map +1 -0
  137. package/dist/components/ui/markdown/mermaid-diagram.d.ts +79 -0
  138. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +1 -0
  139. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +14 -0
  140. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +1 -0
  141. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +40 -0
  142. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +1 -0
  143. package/dist/components/ui/markdown/rich/shortcodes.d.ts +8 -0
  144. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +1 -0
  145. package/dist/components/ui/markdown/sanitize.d.ts +153 -0
  146. package/dist/components/ui/markdown/sanitize.d.ts.map +1 -0
  147. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +23 -0
  148. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +1 -0
  149. package/dist/components/ui/markdown/streaming.d.ts +78 -0
  150. package/dist/components/ui/markdown/streaming.d.ts.map +1 -0
  151. package/dist/components/ui/markdown/text-size.d.ts +34 -0
  152. package/dist/components/ui/markdown/text-size.d.ts.map +1 -0
  153. package/dist/index.cjs +60 -2
  154. package/dist/index.cjs.map +1 -1
  155. package/dist/index.js +71 -13
  156. package/dist/utils/index.cjs +169 -40
  157. package/dist/utils/index.cjs.map +1 -1
  158. package/dist/utils/index.d.ts +1 -0
  159. package/dist/utils/index.d.ts.map +1 -1
  160. package/dist/utils/index.js +162 -41
  161. package/dist/utils/index.js.map +1 -1
  162. package/dist/utils/markdown-fences.d.ts +42 -0
  163. package/dist/utils/markdown-fences.d.ts.map +1 -0
  164. package/dist/utils/markdown-heading-id.d.ts +85 -0
  165. package/dist/utils/markdown-heading-id.d.ts.map +1 -0
  166. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  167. package/package.json +7 -1
  168. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +317 -0
  169. package/src/chat-protocol/__tests__/chat-protocol.test.ts +516 -0
  170. package/src/chat-protocol/__tests__/env-flag.test.ts +52 -0
  171. package/src/chat-protocol/__tests__/ip-normalize.test.ts +136 -0
  172. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +232 -0
  173. package/src/chat-protocol/decode.ts +278 -0
  174. package/src/chat-protocol/encode.ts +71 -0
  175. package/src/chat-protocol/env-flag.ts +39 -0
  176. package/src/chat-protocol/events.ts +245 -0
  177. package/src/chat-protocol/frames.ts +245 -0
  178. package/src/chat-protocol/index.ts +21 -0
  179. package/src/chat-protocol/ip-normalize.ts +146 -0
  180. package/src/chat-protocol/nats-decoder.ts +258 -0
  181. package/src/components/chat/__tests__/chat-message-list.test.tsx +293 -5
  182. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +207 -0
  183. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +230 -0
  184. package/src/components/chat/chat-message-enhanced.tsx +122 -20
  185. package/src/components/chat/chat-message-list.tsx +358 -109
  186. package/src/components/chat/embeddable-chat.tsx +6 -0
  187. package/src/components/chat/hooks/.index.md +30 -33
  188. package/src/components/chat/hooks/.use-nats-chat-adapter.md +36 -55
  189. package/src/components/chat/hooks/__tests__/__snapshots__/conversation-id-persistence-golden.test.ts.snap +37 -0
  190. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  191. package/src/components/chat/hooks/__tests__/conversation-id-persistence-golden.test.ts +438 -0
  192. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +318 -0
  193. package/src/components/chat/hooks/index.ts +0 -1
  194. package/src/components/chat/hooks/use-chat.ts +8 -0
  195. package/src/components/chat/hooks/use-nats-chat-adapter.ts +243 -825
  196. package/src/components/chat/hooks/use-sse-chat-adapter.ts +380 -684
  197. package/src/components/chat/index.ts +5 -0
  198. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +940 -0
  199. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +756 -0
  200. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +460 -0
  201. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +973 -0
  202. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +255 -0
  203. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +98 -0
  204. package/src/components/chat/stream/chat-dialog-store.ts +536 -0
  205. package/src/components/chat/stream/chat-stream-reducer.ts +1808 -0
  206. package/src/components/chat/stream/delta-batcher.ts +168 -0
  207. package/src/components/chat/stream/index.ts +55 -0
  208. package/src/components/chat/stream/message-mutations.ts +340 -0
  209. package/src/components/chat/stream/use-chat-stream-reducer.ts +126 -0
  210. package/src/components/chat/thinking-display.tsx +1 -1
  211. package/src/components/chat/types/.api.types.md +39 -49
  212. package/src/components/chat/types/.processing.types.md +29 -58
  213. package/src/components/chat/types/api.types.ts +6 -73
  214. package/src/components/chat/types/processing.types.ts +11 -53
  215. package/src/components/chat/utils/.index.md +31 -40
  216. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +420 -0
  217. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +605 -0
  218. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +394 -0
  219. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +270 -0
  220. package/src/components/chat/utils/extract-incomplete-message-state.ts +63 -5
  221. package/src/components/chat/utils/index.ts +5 -8
  222. package/src/components/chat/utils/process-historical-messages.ts +358 -386
  223. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +22 -4
  224. package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
  225. package/src/components/shared/product-release/release-detail-page.tsx +19 -4
  226. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +2420 -0
  227. package/src/components/ui/__tests__/markdown-parity.test.tsx +2528 -0
  228. package/src/components/ui/index.ts +1 -2
  229. package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +115 -0
  230. package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +95 -0
  231. package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +309 -0
  232. package/src/components/ui/markdown/__tests__/streaming.test.tsx +388 -0
  233. package/src/components/ui/markdown/base-components.tsx +360 -0
  234. package/src/components/ui/markdown/engine.tsx +315 -0
  235. package/src/components/ui/markdown/heading-ids.ts +239 -0
  236. package/src/components/ui/markdown/index.ts +49 -0
  237. package/src/components/ui/markdown/mermaid-diagram.tsx +291 -0
  238. package/src/components/ui/markdown/rich/embed-overrides.tsx +199 -0
  239. package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +184 -0
  240. package/src/components/ui/markdown/rich/shortcodes.ts +170 -0
  241. package/src/components/ui/markdown/sanitize.ts +3499 -0
  242. package/src/components/ui/markdown/simple-markdown-renderer.tsx +28 -0
  243. package/src/components/ui/markdown/streaming.ts +362 -0
  244. package/src/components/ui/markdown/text-size.ts +106 -0
  245. package/src/components/ui/release-changelog-section.tsx +1 -1
  246. package/src/components/ui/ticket-info-section.tsx +1 -1
  247. package/src/utils/index.ts +1 -0
  248. package/src/utils/markdown-fences.ts +127 -0
  249. package/src/utils/markdown-heading-id.ts +348 -0
  250. package/src/utils/markdown-section-extractor.ts +41 -56
  251. package/dist/chunk-2RTNC3KP.cjs.map +0 -1
  252. package/dist/chunk-35CTCUJ7.js.map +0 -1
  253. package/dist/chunk-7NRRONK5.cjs.map +0 -1
  254. package/dist/chunk-CYIUPI7J.js.map +0 -1
  255. package/dist/chunk-GL33BHGZ.cjs.map +0 -1
  256. package/dist/chunk-GTMW4KY7.js.map +0 -1
  257. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +0 -6
  258. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +0 -1
  259. package/dist/components/chat/utils/chunk-parser.d.ts +0 -25
  260. package/dist/components/chat/utils/chunk-parser.d.ts.map +0 -1
  261. package/dist/components/ui/rich-markdown-renderer.d.ts +0 -34
  262. package/dist/components/ui/rich-markdown-renderer.d.ts.map +0 -1
  263. package/dist/components/ui/simple-markdown-renderer.d.ts +0 -73
  264. package/dist/components/ui/simple-markdown-renderer.d.ts.map +0 -1
  265. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +0 -77
  266. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +0 -489
  267. package/src/components/chat/utils/.chunk-parser.md +0 -62
  268. package/src/components/chat/utils/chunk-parser.ts +0 -262
  269. package/src/components/ui/.simple-markdown-renderer.md +0 -52
  270. package/src/components/ui/rich-markdown-renderer.tsx +0 -1223
  271. package/src/components/ui/simple-markdown-renderer.tsx +0 -964
  272. /package/dist/{chunk-6XNWT2KC.js.map → chunk-34TDA22K.js.map} +0 -0
  273. /package/dist/{chunk-T4BUS6JV.js.map → chunk-3LKB722U.js.map} +0 -0
  274. /package/dist/{chunk-QF54RPHZ.js.map → chunk-J3VBVR4W.js.map} +0 -0
  275. /package/dist/{chunk-CZTKQVIQ.js.map → chunk-MZRIRQYV.js.map} +0 -0
  276. /package/dist/{chunk-ZDUJ6BDI.js.map → chunk-NCAN6VUF.js.map} +0 -0
  277. /package/dist/{chunk-ZEC5U5T7.js.map → chunk-OL3MJKUI.js.map} +0 -0
  278. /package/dist/{chunk-U2JIGUXF.js.map → chunk-PLB6CQSO.js.map} +0 -0
  279. /package/dist/{chunk-IUGJAILN.js.map → chunk-PTXZB2KW.js.map} +0 -0
  280. /package/dist/{chunk-2YQK6LHR.js.map → chunk-XOFE2RT4.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,
@@ -661,13 +670,17 @@ import {
661
670
  buildDefaultHref,
662
671
  buildDiscussAddendum,
663
672
  buildDocumentTree,
673
+ buildEffectiveTagSet,
674
+ buildHeadingIdMap,
664
675
  buildListUrl,
665
676
  buildNatsWsUrl,
666
677
  buildProductReleaseCardProps,
678
+ buildSanitizeSchema,
667
679
  buildStreamFrames,
668
680
  buildSuggestionUrl,
669
681
  canonicalContentRefType,
670
682
  captureFirstTouchAttribution,
683
+ cardAwareUrlTransform,
671
684
  changelogLabels,
672
685
  chatChipClass,
673
686
  cleanEmailDomain,
@@ -678,12 +691,20 @@ import {
678
691
  clearWalkthroughDismissal,
679
692
  clickupTaskUrl,
680
693
  columnFromTicketStatus,
694
+ completeStreamingTail,
681
695
  computeHistoryPrepend,
682
696
  computeIsNewTab,
697
+ createChatDialogStore,
698
+ createChatStreamReducer,
683
699
  createColumnHelper,
700
+ createDeltaBatcher,
701
+ createEmptyTurnMeta,
702
+ createFenceTracker,
703
+ createHeadingIdDeduper,
684
704
  createMessageSegmentAccumulator,
685
705
  createUTCTimestamp,
686
706
  decideNewTab,
707
+ decodeHistoricalMessageData,
687
708
  deepClone,
688
709
  defaultBuildProductReleaseCardProps,
689
710
  defaultTableIdForDocumentType,
@@ -697,6 +718,7 @@ import {
697
718
  dismissWalkthrough,
698
719
  ensureBiteIds,
699
720
  escapeMarkdownInline,
721
+ escapeUnknownHtmlTags,
700
722
  executeNavigation,
701
723
  executeNavigationImperative,
702
724
  exportToCSV,
@@ -706,10 +728,11 @@ import {
706
728
  extractErrorMessages,
707
729
  extractImageEdgeColorAsync,
708
730
  extractIncompleteMessageState,
731
+ extractIncompleteTailState,
709
732
  extractItemId,
710
733
  extractItems,
711
734
  extractSections,
712
- extractTextFromChunk,
735
+ extractText,
713
736
  extractYouTubeId,
714
737
  faqItemAnchor,
715
738
  faqSectionSlug,
@@ -836,15 +859,13 @@ import {
836
859
  interleave,
837
860
  isAnnouncementDismissed,
838
861
  isApprovalNotification,
839
- isControlChunk,
862
+ isBlankLine,
840
863
  isCrossOriginUrl,
841
864
  isDismissedCookieValue,
842
- isErrorChunk,
843
865
  isFigmaSlidesUrl,
844
866
  isGenericDomain,
845
867
  isGenericWebsiteDomain,
846
868
  isHistoricalUserTurn,
847
- isMetadataChunk,
848
869
  isModifierClick,
849
870
  isOSPlatform,
850
871
  isQuickActionIconSpec,
@@ -878,7 +899,6 @@ import {
878
899
  orderContentRefTypes,
879
900
  osLabels,
880
901
  parseAttributionFromUrl,
881
- parseChunkToAction,
882
902
  parseFaqHash,
883
903
  parseScrollAnchor,
884
904
  parseWireCommandOverride,
@@ -886,10 +906,12 @@ import {
886
906
  pickReadableTextColor,
887
907
  processHistoricalMessages,
888
908
  processHistoricalMessagesWithErrors,
909
+ processShortcodes,
889
910
  programItemToStripProfile,
890
911
  ratioToCategory,
891
912
  readDismissCookie,
892
913
  readLeadingDecisionFrame,
914
+ rehypeStripUnsafe,
893
915
  releaseStatusOptions,
894
916
  releaseTypeOptions,
895
917
  releaseTypeToBadgeColor,
@@ -905,20 +927,26 @@ import {
905
927
  resolveSourceIcon,
906
928
  resolveSourceRowCTA,
907
929
  resolveStatusTagProps,
930
+ resolveTextSizeConfig,
908
931
  resolveTicketStatus,
909
932
  rgbToHex,
910
933
  safeHref,
911
934
  sanitizeLandingUrl,
912
935
  sanitizeTitleForChat,
913
936
  saveDataEnabled,
937
+ scanHeadings,
914
938
  serializeJsonLd,
915
939
  shellLabels,
916
940
  shouldProxyImage,
941
+ slugifyHeadingBase,
942
+ slugifyHeadingText,
917
943
  sortBitesByCreatedAtDesc,
918
944
  sortTreeChildren,
945
+ splitStreamingBlocks,
919
946
  statusBadgeVariants,
920
947
  stripChatAttachmentMarkdown,
921
948
  stripFolderIndexFromPath,
949
+ stripHeadingEmojis,
922
950
  stripHtml,
923
951
  stripInlineMarkdown,
924
952
  stripSameOriginToPath,
@@ -945,6 +973,7 @@ import {
945
973
  useChatAttachments,
946
974
  useChatCardItem,
947
975
  useChatIdentity,
976
+ useChatStreamReducer,
948
977
  useChunkCatchup,
949
978
  useCloseOnNavigation,
950
979
  useCollapsible,
@@ -954,6 +983,7 @@ import {
954
983
  useDynamicTheme,
955
984
  useEmptyStateConfig,
956
985
  useFiltersDropdown,
986
+ useHeadingIdMap,
957
987
  useJetStreamDialogSubscription,
958
988
  useLoading,
959
989
  useMarqueeSync,
@@ -964,7 +994,6 @@ import {
964
994
  useOptionalTimeTracker,
965
995
  usePageActionsBottomPadding,
966
996
  useProxiedImageUrl,
967
- useRealtimeChunkProcessor,
968
997
  useSSE,
969
998
  useScriptedStream,
970
999
  useScrollFade,
@@ -988,7 +1017,7 @@ import {
988
1017
  walkthroughDismissCookieName,
989
1018
  withFirstTouchAttribution,
990
1019
  writeDismissCookie
991
- } from "./chunk-CYIUPI7J.js";
1020
+ } from "./chunk-MEMRQTOI.js";
992
1021
  import {
993
1022
  CommandApprovalToast,
994
1023
  DEFAULT_MIN_FILL_MS,
@@ -1542,8 +1571,10 @@ export {
1542
1571
  CveLink,
1543
1572
  DEFAULT_CONTENT_SUFFIXES,
1544
1573
  DEFAULT_CUSTOM_STATUS_COLOR,
1574
+ DEFAULT_DIALOG_SIDE,
1545
1575
  DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID,
1546
1576
  DEFAULT_FOLDER_INDEX_FILE,
1577
+ DEFAULT_MAX_REDUCERS,
1547
1578
  DEFAULT_MIN_FILL_MS,
1548
1579
  DEFAULT_OS_PLATFORM,
1549
1580
  DEFAULT_THEME,
@@ -1685,6 +1716,7 @@ export {
1685
1716
  GuideDisplay,
1686
1717
  GuideModeBanner,
1687
1718
  GuideWelcome,
1719
+ HEADING_EMOJI_RE,
1688
1720
  HEX_PATTERN,
1689
1721
  HONEYPOT_FIELD,
1690
1722
  HUB_HEADER_OFFSET_PX,
@@ -1754,6 +1786,7 @@ export {
1754
1786
  CheckCircleIcon2 as LucideCheckCircleIcon,
1755
1787
  XIcon2 as LucideXIcon,
1756
1788
  LumaIcon,
1789
+ MAX_PENDING_RETAIN_KEYS,
1757
1790
  MESSAGE_ROLE,
1758
1791
  MESSAGE_TYPE,
1759
1792
  MOBILE_NAV_PANEL_ID,
@@ -1762,6 +1795,7 @@ export {
1762
1795
  MacOSIcon,
1763
1796
  MarginCrisisIcon,
1764
1797
  MarkdownEditor,
1798
+ MarkdownEngine,
1765
1799
  MarqueeWall,
1766
1800
  MarqueeWallFades,
1767
1801
  MediaGalleryManager,
@@ -1783,6 +1817,7 @@ export {
1783
1817
  MenubarSubContent,
1784
1818
  MenubarSubTrigger,
1785
1819
  MenubarTrigger,
1820
+ MermaidDiagram,
1786
1821
  MessageCircleIcon,
1787
1822
  MessageSegmentAccumulator,
1788
1823
  MiamiCyberGangLogo,
@@ -1942,6 +1977,7 @@ export {
1942
1977
  RoadmapCard,
1943
1978
  RoadmapCardSkeleton,
1944
1979
  RoadmapVoteButton,
1980
+ SAFE_HTML_TAGS,
1945
1981
  SCROLL_ANCHOR,
1946
1982
  SCROLL_ANCHOR_WIRE_KEY,
1947
1983
  SECTION_HEADING_CLASS,
@@ -1957,6 +1993,7 @@ export {
1957
1993
  SSOConfigurationIcon,
1958
1994
  STICKY_HEADER_OFFSET_PX,
1959
1995
  STRIP_CELL_MAX_WIDTH,
1996
+ SVG_TAGS,
1960
1997
  SYNTHETIC_REALTIME_ID_PREFIXES,
1961
1998
  ScriptArguments,
1962
1999
  ScriptGenerationIcon,
@@ -2041,6 +2078,7 @@ export {
2041
2078
  TAG_BADGE_CLASS,
2042
2079
  TASK_TYPE_LABELS,
2043
2080
  TASK_TYPE_TEXT_COLORS,
2081
+ TEXT_SIZE_PRESETS,
2044
2082
  THEME_ATTRIBUTE,
2045
2083
  THEME_STORAGE_KEY,
2046
2084
  TICKET_STATUS_COLOR_PRESETS,
@@ -2169,15 +2207,19 @@ export {
2169
2207
  buildDefaultHref,
2170
2208
  buildDiscussAddendum,
2171
2209
  buildDocumentTree,
2210
+ buildEffectiveTagSet,
2211
+ buildHeadingIdMap,
2172
2212
  buildListUrl,
2173
2213
  buildNatsWsUrl,
2174
2214
  buildOgPlaceholderUrl,
2175
2215
  buildProductReleaseCardProps,
2216
+ buildSanitizeSchema,
2176
2217
  buildStreamFrames,
2177
2218
  buildSuggestionUrl,
2178
2219
  buttonVariants,
2179
2220
  canonicalContentRefType,
2180
2221
  captureFirstTouchAttribution,
2222
+ cardAwareUrlTransform,
2181
2223
  changelogLabels,
2182
2224
  embedAuthedFetch as chatAuthedFetch,
2183
2225
  chatChipClass,
@@ -2195,16 +2237,24 @@ export {
2195
2237
  cn,
2196
2238
  coerceValue,
2197
2239
  columnFromTicketStatus,
2240
+ completeStreamingTail,
2198
2241
  computeHistoryPrepend,
2199
2242
  computeIsNewTab,
2200
2243
  configureAuthenticatedImage,
2201
2244
  configureBatchImageFetch,
2202
2245
  consumeAccessCode,
2246
+ createChatDialogStore,
2247
+ createChatStreamReducer,
2203
2248
  createColumnHelper,
2249
+ createDeltaBatcher,
2250
+ createEmptyTurnMeta,
2251
+ createFenceTracker,
2252
+ createHeadingIdDeduper,
2204
2253
  createMessageSegmentAccumulator,
2205
2254
  createSearchParams,
2206
2255
  createUTCTimestamp,
2207
2256
  decideNewTab,
2257
+ decodeHistoricalMessageData,
2208
2258
  deepClone,
2209
2259
  defaultBuildProductReleaseCardProps,
2210
2260
  defaultTableIdForDocumentType,
@@ -2220,6 +2270,7 @@ export {
2220
2270
  embedAuthedFetch,
2221
2271
  ensureBiteIds,
2222
2272
  escapeMarkdownInline,
2273
+ escapeUnknownHtmlTags,
2223
2274
  evaluateHumanitySignals,
2224
2275
  executeNavigation,
2225
2276
  executeNavigationImperative,
@@ -2231,10 +2282,11 @@ export {
2231
2282
  extractHumanitySignals,
2232
2283
  extractImageEdgeColorAsync,
2233
2284
  extractIncompleteMessageState,
2285
+ extractIncompleteTailState,
2234
2286
  extractItemId,
2235
2287
  extractItems,
2236
2288
  extractSections,
2237
- extractTextFromChunk,
2289
+ extractText,
2238
2290
  extractVariablesFromQuery,
2239
2291
  extractYouTubeId,
2240
2292
  faqItemAnchor,
@@ -2384,16 +2436,14 @@ export {
2384
2436
  introspector,
2385
2437
  isAnnouncementDismissed,
2386
2438
  isApprovalNotification,
2387
- isControlChunk,
2439
+ isBlankLine,
2388
2440
  isCrossOriginUrl,
2389
2441
  isDismissedCookieValue,
2390
- isErrorChunk,
2391
2442
  isFigmaSlidesUrl,
2392
2443
  isGenericDomain,
2393
2444
  isGenericWebsiteDomain,
2394
2445
  isHistoricalUserTurn,
2395
2446
  isInputObjectType,
2396
- isMetadataChunk,
2397
2447
  isModifierClick,
2398
2448
  isOSPlatform,
2399
2449
  isQuickActionIconSpec,
@@ -2432,7 +2482,6 @@ export {
2432
2482
  orderContentRefTypes,
2433
2483
  osLabels,
2434
2484
  parseAttributionFromUrl,
2435
- parseChunkToAction,
2436
2485
  parseFaqHash,
2437
2486
  parseScrollAnchor,
2438
2487
  parseWireCommandOverride,
@@ -2447,11 +2496,13 @@ export {
2447
2496
  platformSlogans,
2448
2497
  processHistoricalMessages,
2449
2498
  processHistoricalMessagesWithErrors,
2499
+ processShortcodes,
2450
2500
  programItemToStripProfile,
2451
2501
  progressColorByVariant,
2452
2502
  ratioToCategory,
2453
2503
  readDismissCookie,
2454
2504
  readLeadingDecisionFrame,
2505
+ rehypeStripUnsafe,
2455
2506
  releaseStatusOptions,
2456
2507
  releaseTypeOptions,
2457
2508
  releaseTypeToBadgeColor,
@@ -2468,12 +2519,14 @@ export {
2468
2519
  resolveSourceIcon,
2469
2520
  resolveSourceRowCTA,
2470
2521
  resolveStatusTagProps,
2522
+ resolveTextSizeConfig,
2471
2523
  resolveTicketStatus,
2472
2524
  rgbToHex,
2473
2525
  safeHref,
2474
2526
  sanitizeLandingUrl,
2475
2527
  sanitizeTitleForChat,
2476
2528
  saveDataEnabled,
2529
+ scanHeadings,
2477
2530
  scrollElementIntoView,
2478
2531
  serializeJsonLd,
2479
2532
  setEmbedProxyAuth as setChatProxyAuth,
@@ -2485,12 +2538,16 @@ export {
2485
2538
  shouldProxyImage,
2486
2539
  showCommandApprovalToast,
2487
2540
  showToast,
2541
+ slugifyHeadingBase,
2542
+ slugifyHeadingText,
2488
2543
  sortBitesByCreatedAtDesc,
2489
2544
  sortTreeChildren,
2490
2545
  splitCsvEnv,
2546
+ splitStreamingBlocks,
2491
2547
  statusBadgeVariants,
2492
2548
  stripChatAttachmentMarkdown,
2493
2549
  stripFolderIndexFromPath,
2550
+ stripHeadingEmojis,
2494
2551
  stripHtml,
2495
2552
  stripInlineMarkdown,
2496
2553
  stripSameOriginToPath,
@@ -2527,6 +2584,7 @@ export {
2527
2584
  useChatAttachments,
2528
2585
  useChatCardItem,
2529
2586
  useChatIdentity,
2587
+ useChatStreamReducer,
2530
2588
  useChunkCatchup,
2531
2589
  useCloseOnNavigation,
2532
2590
  useCollapsible,
@@ -2544,6 +2602,7 @@ export {
2544
2602
  useFiltersDropdown,
2545
2603
  useFocusTrap,
2546
2604
  useHeaderHeight,
2605
+ useHeadingIdMap,
2547
2606
  useHorizontalScrollbar,
2548
2607
  useHumanitySignals,
2549
2608
  useImageEdgeColor,
@@ -2573,7 +2632,6 @@ export {
2573
2632
  usePreventScroll,
2574
2633
  useProxiedImageUrl,
2575
2634
  useQueryParams,
2576
- useRealtimeChunkProcessor,
2577
2635
  useResetOnPageHidden,
2578
2636
  useSSE,
2579
2637
  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;