@flamingo-stack/openframe-frontend-core 0.0.508 → 0.0.509-snapshot.20260803110336

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 (309) 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-TBMV7I5N.js → chunk-2AASLY6D.js} +2 -2
  22. package/dist/{chunk-ZSQHZYCO.cjs → chunk-2RLI5XVI.cjs} +13 -13
  23. package/dist/{chunk-ZSQHZYCO.cjs.map → chunk-2RLI5XVI.cjs.map} +1 -1
  24. package/dist/{chunk-POOMO3PA.cjs → chunk-53JKCFFE.cjs} +7 -7
  25. package/dist/{chunk-POOMO3PA.cjs.map → chunk-53JKCFFE.cjs.map} +1 -1
  26. package/dist/{chunk-NIZDKTGL.cjs → chunk-5AZZQQYS.cjs} +37 -37
  27. package/dist/{chunk-NIZDKTGL.cjs.map → chunk-5AZZQQYS.cjs.map} +1 -1
  28. package/dist/{chunk-7LEL3RIX.cjs → chunk-5CDPRCPS.cjs} +11 -11
  29. package/dist/{chunk-7LEL3RIX.cjs.map → chunk-5CDPRCPS.cjs.map} +1 -1
  30. package/dist/{chunk-M2GOR3XQ.cjs → chunk-6TL5XIAW.cjs} +87 -87
  31. package/dist/{chunk-M2GOR3XQ.cjs.map → chunk-6TL5XIAW.cjs.map} +1 -1
  32. package/dist/{chunk-PAGKRNWK.js → chunk-CTMLY2GN.js} +2 -2
  33. package/dist/{chunk-LRGHJPET.js → chunk-DBR5JLX3.js} +2 -2
  34. package/dist/{chunk-WK4N5VBX.cjs → chunk-EJ3EBYNV.cjs} +28 -27
  35. package/dist/chunk-EJ3EBYNV.cjs.map +1 -0
  36. package/dist/{chunk-OCEKO5CW.js → chunk-FEGEC6FY.js} +12069 -9720
  37. package/dist/chunk-FEGEC6FY.js.map +1 -0
  38. package/dist/{chunk-I64ABCDX.js → chunk-HCZJZMU7.js} +2 -2
  39. package/dist/{chunk-TLMJHMXJ.js → chunk-HX4CJYXL.js} +12 -12
  40. package/dist/chunk-HX4CJYXL.js.map +1 -0
  41. package/dist/{chunk-Z42BGM6Q.cjs → chunk-J2JUAS4C.cjs} +5 -5
  42. package/dist/{chunk-Z42BGM6Q.cjs.map → chunk-J2JUAS4C.cjs.map} +1 -1
  43. package/dist/{chunk-QTYZMP6D.cjs → chunk-JMBIGH4H.cjs} +62 -62
  44. package/dist/chunk-JMBIGH4H.cjs.map +1 -0
  45. package/dist/{chunk-WA7RR64F.js → chunk-JOCFPAS6.js} +6 -5
  46. package/dist/chunk-JOCFPAS6.js.map +1 -0
  47. package/dist/{chunk-TSZHM74B.js → chunk-LBOWSKGM.js} +2 -2
  48. package/dist/{chunk-TZRUCD56.js → chunk-MLGGF24T.js} +5 -5
  49. package/dist/{chunk-TWYNR4TZ.cjs → chunk-RB2EW6IZ.cjs} +7290 -4941
  50. package/dist/chunk-RB2EW6IZ.cjs.map +1 -0
  51. package/dist/{chunk-LDTR4IVZ.cjs → chunk-RHQ7BJKK.cjs} +31 -31
  52. package/dist/{chunk-LDTR4IVZ.cjs.map → chunk-RHQ7BJKK.cjs.map} +1 -1
  53. package/dist/{chunk-RHGGEKPQ.cjs → chunk-RJ3D3PE2.cjs} +4 -4
  54. package/dist/{chunk-RHGGEKPQ.cjs.map → chunk-RJ3D3PE2.cjs.map} +1 -1
  55. package/dist/{chunk-DTYRYB2N.js → chunk-SRYV4H3M.js} +2 -2
  56. package/dist/{chunk-ADPMHWOE.js → chunk-TBGSQTJK.js} +4 -4
  57. package/dist/{chunk-KEBYLU3U.js → chunk-UWPT23SA.js} +2 -2
  58. package/dist/{chunk-4LTMXDUS.js → chunk-VDJF4ZAU.js} +2 -2
  59. package/dist/{chunk-WJQHJD7J.js → chunk-WNOGR5AA.js} +2 -2
  60. package/dist/{chunk-CWAOV2FK.cjs → chunk-WSAPKKDU.cjs} +3 -3
  61. package/dist/{chunk-CWAOV2FK.cjs.map → chunk-WSAPKKDU.cjs.map} +1 -1
  62. package/dist/{chunk-3SQ5KXHQ.cjs → chunk-XJVRAKEX.cjs} +9 -9
  63. package/dist/{chunk-3SQ5KXHQ.cjs.map → chunk-XJVRAKEX.cjs.map} +1 -1
  64. package/dist/{chunk-2F44PLTV.cjs → chunk-Z35QWWJH.cjs} +26 -26
  65. package/dist/{chunk-2F44PLTV.cjs.map → chunk-Z35QWWJH.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/index.cjs +34 -34
  125. package/dist/components/meeting-scheduler/index.js +3 -3
  126. package/dist/components/navigation/header.d.ts.map +1 -1
  127. package/dist/components/navigation/index.cjs +2 -2
  128. package/dist/components/navigation/index.js +1 -1
  129. package/dist/components/onboarding-guides/index.cjs +5 -5
  130. package/dist/components/onboarding-guides/index.js +4 -4
  131. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  132. package/dist/components/related-content/index.cjs +3 -3
  133. package/dist/components/related-content/index.js +2 -2
  134. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  135. package/dist/components/tickets/index.cjs +6 -6
  136. package/dist/components/tickets/index.js +5 -5
  137. package/dist/components/ui/index.cjs +44 -2
  138. package/dist/components/ui/index.cjs.map +1 -1
  139. package/dist/components/ui/index.d.ts +1 -2
  140. package/dist/components/ui/index.d.ts.map +1 -1
  141. package/dist/components/ui/index.js +55 -13
  142. package/dist/components/ui/markdown/base-components.d.ts +51 -0
  143. package/dist/components/ui/markdown/base-components.d.ts.map +1 -0
  144. package/dist/components/ui/markdown/engine.d.ts +99 -0
  145. package/dist/components/ui/markdown/engine.d.ts.map +1 -0
  146. package/dist/components/ui/markdown/heading-ids.d.ts +65 -0
  147. package/dist/components/ui/markdown/heading-ids.d.ts.map +1 -0
  148. package/dist/components/ui/markdown/index.d.ts +18 -0
  149. package/dist/components/ui/markdown/index.d.ts.map +1 -0
  150. package/dist/components/ui/markdown/mermaid-diagram.d.ts +79 -0
  151. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +1 -0
  152. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +14 -0
  153. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +1 -0
  154. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +40 -0
  155. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +1 -0
  156. package/dist/components/ui/markdown/rich/shortcodes.d.ts +8 -0
  157. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +1 -0
  158. package/dist/components/ui/markdown/sanitize.d.ts +153 -0
  159. package/dist/components/ui/markdown/sanitize.d.ts.map +1 -0
  160. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +23 -0
  161. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +1 -0
  162. package/dist/components/ui/markdown/streaming.d.ts +78 -0
  163. package/dist/components/ui/markdown/streaming.d.ts.map +1 -0
  164. package/dist/components/ui/markdown/text-size.d.ts +34 -0
  165. package/dist/components/ui/markdown/text-size.d.ts.map +1 -0
  166. package/dist/index.cjs +60 -2
  167. package/dist/index.cjs.map +1 -1
  168. package/dist/index.js +71 -13
  169. package/dist/utils/index.cjs +169 -40
  170. package/dist/utils/index.cjs.map +1 -1
  171. package/dist/utils/index.d.ts +1 -0
  172. package/dist/utils/index.d.ts.map +1 -1
  173. package/dist/utils/index.js +162 -41
  174. package/dist/utils/index.js.map +1 -1
  175. package/dist/utils/markdown-fences.d.ts +42 -0
  176. package/dist/utils/markdown-fences.d.ts.map +1 -0
  177. package/dist/utils/markdown-heading-id.d.ts +85 -0
  178. package/dist/utils/markdown-heading-id.d.ts.map +1 -0
  179. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  180. package/package.json +7 -1
  181. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +319 -0
  182. package/src/chat-protocol/__tests__/chat-protocol.test.ts +516 -0
  183. package/src/chat-protocol/__tests__/env-flag.test.ts +52 -0
  184. package/src/chat-protocol/__tests__/ip-normalize.test.ts +136 -0
  185. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +237 -0
  186. package/src/chat-protocol/decode.ts +278 -0
  187. package/src/chat-protocol/encode.ts +71 -0
  188. package/src/chat-protocol/env-flag.ts +39 -0
  189. package/src/chat-protocol/events.ts +254 -0
  190. package/src/chat-protocol/frames.ts +245 -0
  191. package/src/chat-protocol/index.ts +21 -0
  192. package/src/chat-protocol/ip-normalize.ts +146 -0
  193. package/src/chat-protocol/nats-decoder.ts +264 -0
  194. package/src/components/chat/.chat-message-list.md +10 -6
  195. package/src/components/chat/__tests__/chat-message-list.test.tsx +450 -9
  196. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +207 -0
  197. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +250 -0
  198. package/src/components/chat/chat-message-enhanced.tsx +122 -20
  199. package/src/components/chat/chat-message-list.tsx +515 -133
  200. package/src/components/chat/embeddable-chat.tsx +6 -0
  201. package/src/components/chat/hooks/.index.md +30 -33
  202. package/src/components/chat/hooks/.use-nats-chat-adapter.md +36 -55
  203. package/src/components/chat/hooks/__tests__/__snapshots__/conversation-id-persistence-golden.test.ts.snap +37 -0
  204. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  205. package/src/components/chat/hooks/__tests__/chunk-catchup-dialog-staleness.test.ts +92 -0
  206. package/src/components/chat/hooks/__tests__/conversation-id-persistence-golden.test.ts +438 -0
  207. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +318 -0
  208. package/src/components/chat/hooks/index.ts +0 -1
  209. package/src/components/chat/hooks/use-chat.ts +8 -0
  210. package/src/components/chat/hooks/use-chunk-catchup.ts +26 -1
  211. package/src/components/chat/hooks/use-nats-chat-adapter.ts +254 -825
  212. package/src/components/chat/hooks/use-sse-chat-adapter.ts +380 -684
  213. package/src/components/chat/index.ts +5 -0
  214. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +944 -0
  215. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +806 -0
  216. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +467 -0
  217. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +1330 -0
  218. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +255 -0
  219. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +105 -0
  220. package/src/components/chat/stream/chat-dialog-store.ts +536 -0
  221. package/src/components/chat/stream/chat-stream-reducer.ts +1928 -0
  222. package/src/components/chat/stream/delta-batcher.ts +168 -0
  223. package/src/components/chat/stream/index.ts +55 -0
  224. package/src/components/chat/stream/message-mutations.ts +340 -0
  225. package/src/components/chat/stream/use-chat-stream-reducer.ts +126 -0
  226. package/src/components/chat/thinking-display.tsx +1 -1
  227. package/src/components/chat/types/.api.types.md +39 -49
  228. package/src/components/chat/types/.processing.types.md +29 -58
  229. package/src/components/chat/types/.unified-chat-state.types.md +2 -2
  230. package/src/components/chat/types/api.types.ts +6 -73
  231. package/src/components/chat/types/processing.types.ts +11 -53
  232. package/src/components/chat/types/unified-chat-state.types.ts +16 -0
  233. package/src/components/chat/utils/.extract-incomplete-message-state.md +21 -3
  234. package/src/components/chat/utils/.history-merge.md +44 -3
  235. package/src/components/chat/utils/.index.md +31 -40
  236. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +420 -0
  237. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +605 -0
  238. package/src/components/chat/utils/__tests__/extract-incomplete-message-state.test.ts +106 -0
  239. package/src/components/chat/utils/__tests__/history-merge.test.ts +160 -0
  240. package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +61 -0
  241. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +394 -0
  242. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +270 -0
  243. package/src/components/chat/utils/extract-incomplete-message-state.ts +93 -6
  244. package/src/components/chat/utils/history-merge.ts +85 -5
  245. package/src/components/chat/utils/index.ts +5 -8
  246. package/src/components/chat/utils/process-historical-messages.ts +361 -385
  247. package/src/components/navigation/header.tsx +21 -16
  248. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +22 -4
  249. package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
  250. package/src/components/shared/product-release/release-detail-page.tsx +19 -4
  251. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +2420 -0
  252. package/src/components/ui/__tests__/markdown-parity.test.tsx +2540 -0
  253. package/src/components/ui/index.ts +1 -2
  254. package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +176 -0
  255. package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +151 -0
  256. package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +354 -0
  257. package/src/components/ui/markdown/__tests__/sanitize-render.test.tsx +118 -0
  258. package/src/components/ui/markdown/__tests__/streaming.test.tsx +436 -0
  259. package/src/components/ui/markdown/base-components.tsx +360 -0
  260. package/src/components/ui/markdown/engine.tsx +315 -0
  261. package/src/components/ui/markdown/heading-ids.ts +239 -0
  262. package/src/components/ui/markdown/index.ts +49 -0
  263. package/src/components/ui/markdown/mermaid-diagram.tsx +323 -0
  264. package/src/components/ui/markdown/rich/embed-overrides.tsx +199 -0
  265. package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +184 -0
  266. package/src/components/ui/markdown/rich/shortcodes.ts +170 -0
  267. package/src/components/ui/markdown/sanitize.ts +3584 -0
  268. package/src/components/ui/markdown/simple-markdown-renderer.tsx +28 -0
  269. package/src/components/ui/markdown/streaming.ts +390 -0
  270. package/src/components/ui/markdown/text-size.ts +106 -0
  271. package/src/components/ui/release-changelog-section.tsx +1 -1
  272. package/src/components/ui/ticket-info-section.tsx +1 -1
  273. package/src/stories/TopNavigation.stories.tsx +1 -1
  274. package/src/utils/index.ts +1 -0
  275. package/src/utils/markdown-fences.ts +127 -0
  276. package/src/utils/markdown-heading-id.ts +348 -0
  277. package/src/utils/markdown-section-extractor.ts +41 -56
  278. package/dist/chunk-OCEKO5CW.js.map +0 -1
  279. package/dist/chunk-QTYZMP6D.cjs.map +0 -1
  280. package/dist/chunk-TLMJHMXJ.js.map +0 -1
  281. package/dist/chunk-TWYNR4TZ.cjs.map +0 -1
  282. package/dist/chunk-WA7RR64F.js.map +0 -1
  283. package/dist/chunk-WK4N5VBX.cjs.map +0 -1
  284. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +0 -6
  285. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +0 -1
  286. package/dist/components/chat/utils/chunk-parser.d.ts +0 -25
  287. package/dist/components/chat/utils/chunk-parser.d.ts.map +0 -1
  288. package/dist/components/ui/rich-markdown-renderer.d.ts +0 -34
  289. package/dist/components/ui/rich-markdown-renderer.d.ts.map +0 -1
  290. package/dist/components/ui/simple-markdown-renderer.d.ts +0 -73
  291. package/dist/components/ui/simple-markdown-renderer.d.ts.map +0 -1
  292. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +0 -77
  293. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +0 -489
  294. package/src/components/chat/utils/.chunk-parser.md +0 -62
  295. package/src/components/chat/utils/chunk-parser.ts +0 -262
  296. package/src/components/ui/.simple-markdown-renderer.md +0 -52
  297. package/src/components/ui/rich-markdown-renderer.tsx +0 -1223
  298. package/src/components/ui/simple-markdown-renderer.tsx +0 -964
  299. /package/dist/{chunk-TBMV7I5N.js.map → chunk-2AASLY6D.js.map} +0 -0
  300. /package/dist/{chunk-PAGKRNWK.js.map → chunk-CTMLY2GN.js.map} +0 -0
  301. /package/dist/{chunk-LRGHJPET.js.map → chunk-DBR5JLX3.js.map} +0 -0
  302. /package/dist/{chunk-I64ABCDX.js.map → chunk-HCZJZMU7.js.map} +0 -0
  303. /package/dist/{chunk-TSZHM74B.js.map → chunk-LBOWSKGM.js.map} +0 -0
  304. /package/dist/{chunk-TZRUCD56.js.map → chunk-MLGGF24T.js.map} +0 -0
  305. /package/dist/{chunk-DTYRYB2N.js.map → chunk-SRYV4H3M.js.map} +0 -0
  306. /package/dist/{chunk-ADPMHWOE.js.map → chunk-TBGSQTJK.js.map} +0 -0
  307. /package/dist/{chunk-KEBYLU3U.js.map → chunk-UWPT23SA.js.map} +0 -0
  308. /package/dist/{chunk-4LTMXDUS.js.map → chunk-VDJF4ZAU.js.map} +0 -0
  309. /package/dist/{chunk-WJQHJD7J.js.map → chunk-WNOGR5AA.js.map} +0 -0
@@ -8,8 +8,8 @@ import { Menu01Icon, XmarkIcon } from '../icons-v2-generated';
8
8
  import { Button } from '../ui/button';
9
9
  import { HeaderButton } from './header-button';
10
10
  import { MingoAiButton } from './mingo-ai-button';
11
- import { TicketAlertsButton } from './ticket-alerts-button';
12
11
  import { MOBILE_NAV_PANEL_ID } from './mobile-nav-panel';
12
+ import { TicketAlertsButton } from './ticket-alerts-button';
13
13
  import { TopNavigation } from './top-navigation';
14
14
 
15
15
  export interface HeaderProps {
@@ -20,6 +20,11 @@ export interface HeaderProps {
20
20
  // Re-export from types for convenience
21
21
  export type { HeaderConfig } from '../../types/navigation';
22
22
 
23
+ // Top-level nav-link typography (Figma 2936-6815): the compact h6 step
24
+ // (DM Sans 500, 14/20) with 24px icons. Overrides the `font="regular"` h4
25
+ // label and the Button base's 20px svg cap via cn()'s tailwind-merge.
26
+ const NAV_ITEM_CLASSES = 'text-h6 [&_svg]:h-6 [&_svg]:w-6';
27
+
23
28
  export function Header({ config, platform }: HeaderProps) {
24
29
  const [show, setShow] = useState(true);
25
30
  const [lastScrollY, setLastScrollY] = useState(0);
@@ -139,9 +144,10 @@ export function Header({ config, platform }: HeaderProps) {
139
144
  size="default"
140
145
  font="regular"
141
146
  className={cn(
142
- // Top-level nav links: the default-size button with the h4
143
- // (DM Sans 500) `font="regular"` label — Figma 133-740, added
144
- // for navigation; dropdown children stay on the h6 step.
147
+ // Top-level nav links (Figma 2936-6815): compact h6 label
148
+ // (DM Sans 500, 14/20) with 24px icons — overrides the
149
+ // font="regular" h4 step and the button's 20px svg cap.
150
+ NAV_ITEM_CLASSES,
145
151
  item.isActive && 'bg-ods-bg-hover', // Active items get subtle gray background
146
152
  isOpen && 'bg-ods-bg-hover', // Open dropdowns get gray background
147
153
  item.className,
@@ -197,7 +203,11 @@ export function Header({ config, platform }: HeaderProps) {
197
203
  }}
198
204
  className={cn(
199
205
  'flex justify-start w-full',
200
- 'text-h6 font-bold',
206
+ // Same caption step as the top-level nav links (designer:
207
+ // dropdowns follow the h6 caption size/weight too). The
208
+ // explicit font-medium beats small-legacy's font-bold via
209
+ // tailwind-merge instead of stylesheet order.
210
+ 'text-h6 font-medium',
201
211
  index < (item.children?.length ?? 0) - 1 && 'mb-1',
202
212
  'text-ods-text-primary', // All dropdown items use primary text color
203
213
  child.isActive && 'bg-ods-bg-hover', // Active dropdown items get gray background
@@ -232,6 +242,7 @@ export function Header({ config, platform }: HeaderProps) {
232
242
  size="default"
233
243
  font="regular"
234
244
  className={cn(
245
+ NAV_ITEM_CLASSES,
235
246
  'hover:bg-ods-bg-hover focus:bg-ods-bg-hover',
236
247
  'whitespace-nowrap',
237
248
  'text-ods-text-primary', // All items use primary text color
@@ -256,6 +267,7 @@ export function Header({ config, platform }: HeaderProps) {
256
267
  size="default"
257
268
  font="regular"
258
269
  className={cn(
270
+ NAV_ITEM_CLASSES,
259
271
  'hover:bg-ods-bg-hover focus:bg-ods-bg-hover',
260
272
  'whitespace-nowrap',
261
273
  'text-ods-text-primary', // All items use primary text color
@@ -269,12 +281,6 @@ export function Header({ config, platform }: HeaderProps) {
269
281
  };
270
282
 
271
283
  const hasNav = !!config.navigation && config.navigation.items.length > 0;
272
- // Always-visible leading cells (admin-sidebar toggle). The logo zone's
273
- // desktop `pl-xxl` (80px) exists to compensate for the ABSENCE of a leading
274
- // cell — with one present it reads as a stray gap, so collapse it to the
275
- // regular `pl-l` inset. (The marketing burger doesn't count: it is
276
- // CSS-hidden on lg, exactly where the 80px inset applies.)
277
- const hasLeftCells = !!config.actions?.left?.length;
278
284
  const hasCta =
279
285
  !!config.actions?.right?.length || !!(config.actions?.persistent && config.actions.persistent.length > 0);
280
286
 
@@ -343,11 +349,10 @@ export function Header({ config, platform }: HeaderProps) {
343
349
  {config.logo.element}
344
350
  </Link>
345
351
  }
346
- // Logo inset for the hub sites: 12px on mobile (the shell's base p-m),
347
- // 16px on tablet (mf token; the shell default is pl-l = 24px there),
348
- // desktop unchanged — pl-xxl, collapsed to pl-l when an always-visible
349
- // leading cell sits before the logo.
350
- logoClassName={cn('md:pl-[var(--spacing-system-mf)]', hasLeftCells && 'lg:pl-[var(--spacing-system-l)]')}
352
+ // Big-bar rule (Figma 2936-6812): 24px fixed left inset on the logo
353
+ // zone at every breakpoint — the same 24px also reads as the gap
354
+ // between a leading cell (burger / admin toggle) and the logo.
355
+ logoClassName="pl-[var(--spacing-system-lf)] md:pl-[var(--spacing-system-lf)] lg:pl-[var(--spacing-system-lf)]"
351
356
  center={
352
357
  hasNav ? (
353
358
  <nav
@@ -15,7 +15,7 @@
15
15
  * renderer with extra plugins.
16
16
  */
17
17
 
18
- import { type ComponentType, type ReactNode } from 'react'
18
+ import { Fragment, type ComponentType, type ReactNode } from 'react'
19
19
  import { PageLayout } from '../layout/page-layout'
20
20
 
21
21
  import { useRouter } from '../../embed-shims'
@@ -30,7 +30,7 @@ import { VideoBitesStrip } from '../features/video-bites-strip'
30
30
  import { toStripProfile } from '../features/video-bites-shared'
31
31
  import { useVideoWarmup } from '../features/use-video-warmup'
32
32
  import { getCaptionsUrl } from '../features/captions-url'
33
- import { RichMarkdownRenderer } from '../ui/rich-markdown-renderer'
33
+ import { RichMarkdownRenderer } from '../ui/markdown'
34
34
  import { EntityTagBadges } from '../features/entity-tag-badges'
35
35
  import { LoadError } from '../ui/error-state'
36
36
  import { ArticleAuthorByline } from '../shared/article-author-byline'
@@ -244,8 +244,26 @@ export function OnboardingGuideDetailView({
244
244
  </div>
245
245
  )}
246
246
 
247
- {/* Host slot — cross-type related-content / FAQ rail. */}
248
- {relatedContent}
247
+ {/*
248
+ * Host slot — cross-type related-content / FAQ rail.
249
+ *
250
+ * KEYED DELIBERATELY. This is one member of PageLayout's static children
251
+ * array, and the only member whose element may be created in a SERVER
252
+ * component and crossed over the RSC boundary. Static JSX children are
253
+ * normally exempt from the key warning because `jsxs` runs
254
+ * `validateChildKeys` and stamps `_store.validated = 1` on each element —
255
+ * but a slot arriving over the wire is referenced as a lazy chunk wrapper,
256
+ * so validation marks the WRAPPER and the fulfilled path never copies the
257
+ * flag onto the revived element. It reaches the reconciler with
258
+ * `validated: 0, key: null` and warns, blaming PageLayout (the owner of the
259
+ * enclosing element) rather than anything actually at fault.
260
+ *
261
+ * A keyed Fragment emits no DOM, so rendered output is byte-identical.
262
+ * Do NOT "fix" this in PageLayout via `React.Children.toArray` — that would
263
+ * auto-key every consumer's children and change reconciliation identity for
264
+ * all of them, and that file carries an explicit FROZEN contract.
265
+ */}
266
+ <Fragment key="related-content">{relatedContent}</Fragment>
249
267
  </PageLayout>
250
268
  )
251
269
  }
@@ -19,7 +19,7 @@
19
19
 
20
20
  import type { ComponentType } from 'react';
21
21
  import { PageShell, PageLayout } from '../../ui';
22
- import { RichMarkdownRenderer } from '../../ui/rich-markdown-renderer';
22
+ import { RichMarkdownRenderer } from '../../ui/markdown';
23
23
  import { useRouter } from '../../../embed-shims/next-navigation';
24
24
  import { useLegalDocs, type LegalDocument } from './use-legal-docs';
25
25
  import { formatLegalDate } from '../../../utils/format';
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useState, useEffect, ComponentType, type ReactNode } from 'react';
3
+ import { useState, useEffect, Fragment, ComponentType, type ReactNode } from 'react';
4
4
  import Link from '../../../embed-shims/next-link';
5
5
  import { useRouter } from '../../../embed-shims/next-navigation';
6
6
  import { Card, CardContent } from '../../ui/card';
@@ -11,7 +11,7 @@ import { PageShell } from '../../layout/article-detail-layout';
11
11
  import { PageLayout } from '../../layout/page-layout';
12
12
  import { FadePreview } from '../../ui/fade-preview';
13
13
  import { ReleaseChangelogSection } from '../../ui/release-changelog-section';
14
- import { RichMarkdownRenderer } from '../../ui/rich-markdown-renderer';
14
+ import { RichMarkdownRenderer } from '../../ui/markdown';
15
15
  import { EntityTagBadges } from '../../features/entity-tag-badges';
16
16
  import { EntityMetadataAuthorCell } from '../../chat/entity-cards/entity-author-card';
17
17
  import type { EntityAuthor } from '../../../types/entity-author';
@@ -582,8 +582,23 @@ export function ReleaseDetailPage({
582
582
  )}
583
583
  </div>
584
584
 
585
- {/* Host slot — end-of-article byline + related-content / FAQ rail. */}
586
- {relatedContent}
585
+ {/*
586
+ * Host slot — end-of-article byline + related-content / FAQ rail.
587
+ *
588
+ * KEYED for the same reason as `onboarding-guide-detail-view.tsx`: this is a
589
+ * member of PageLayout's static children array, and a slot element built in a
590
+ * SERVER component crosses the RSC boundary as a lazy chunk wrapper, so
591
+ * `validateChildKeys` marks the wrapper and the fulfilled path never copies
592
+ * `_store.validated` onto the revived element — it reaches the reconciler
593
+ * unvalidated and warns.
594
+ *
595
+ * Today the hub's only consumer of this view is a `'use client'` wrapper that
596
+ * builds the slot locally, so no element actually crosses the boundary and
597
+ * this is pre-emptive. It is kept because the trap is invisible from here: a
598
+ * future server-built slot would warn with no clue pointing at this line.
599
+ * A keyed Fragment emits no DOM, so output is byte-identical either way.
600
+ */}
601
+ <Fragment key="related-content">{relatedContent}</Fragment>
587
602
  </PageLayout>
588
603
  );
589
604
  }