@flamingo-stack/openframe-frontend-core 0.0.457 → 0.0.458-snapshot.20260720215024
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.
- package/dist/chat-protocol/decode.d.ts +58 -0
- package/dist/chat-protocol/decode.d.ts.map +1 -0
- package/dist/chat-protocol/encode.d.ts +44 -0
- package/dist/chat-protocol/encode.d.ts.map +1 -0
- package/dist/chat-protocol/env-flag.d.ts +35 -0
- package/dist/chat-protocol/env-flag.d.ts.map +1 -0
- package/dist/chat-protocol/events.d.ts +192 -0
- package/dist/chat-protocol/events.d.ts.map +1 -0
- package/dist/chat-protocol/frames.d.ts +206 -0
- package/dist/chat-protocol/frames.d.ts.map +1 -0
- package/dist/chat-protocol/index.cjs +493 -0
- package/dist/chat-protocol/index.cjs.map +1 -0
- package/dist/chat-protocol/index.d.ts +18 -0
- package/dist/chat-protocol/index.d.ts.map +1 -0
- package/dist/chat-protocol/index.js +477 -0
- package/dist/chat-protocol/index.js.map +1 -0
- package/dist/chat-protocol/ip-normalize.d.ts +44 -0
- package/dist/chat-protocol/ip-normalize.d.ts.map +1 -0
- package/dist/chat-protocol/nats-decoder.d.ts +26 -0
- package/dist/chat-protocol/nats-decoder.d.ts.map +1 -0
- package/dist/{chunk-SQ3CP2IV.cjs → chunk-3N3TMZ62.cjs} +7 -7
- package/dist/{chunk-SQ3CP2IV.cjs.map → chunk-3N3TMZ62.cjs.map} +1 -1
- package/dist/{chunk-I7M6KCCS.js → chunk-4R6H2U77.js} +4 -4
- package/dist/{chunk-CCT5VCRP.cjs → chunk-4XDWNAZW.cjs} +9 -9
- package/dist/{chunk-CCT5VCRP.cjs.map → chunk-4XDWNAZW.cjs.map} +1 -1
- package/dist/{chunk-KQ36EHE4.cjs → chunk-7KSEINAE.cjs} +15 -15
- package/dist/{chunk-KQ36EHE4.cjs.map → chunk-7KSEINAE.cjs.map} +1 -1
- package/dist/{chunk-FM5DTJPA.cjs → chunk-ADD3FPDG.cjs} +6851 -4713
- package/dist/chunk-ADD3FPDG.cjs.map +1 -0
- package/dist/{chunk-RSW42GTZ.js → chunk-APF5QBAU.js} +2 -2
- package/dist/{chunk-YCIVMKRS.cjs → chunk-BLZZXZNM.cjs} +26 -26
- package/dist/{chunk-YCIVMKRS.cjs.map → chunk-BLZZXZNM.cjs.map} +1 -1
- package/dist/{chunk-YHB4MNUX.cjs → chunk-BQ7PMWLM.cjs} +28 -27
- package/dist/chunk-BQ7PMWLM.cjs.map +1 -0
- package/dist/{chunk-GJ7BN4MI.js → chunk-CGNDAJ7V.js} +4 -4
- package/dist/{chunk-R5IQJXA3.js → chunk-F2NMWV44.js} +2 -2
- package/dist/{chunk-EOVQVVDJ.cjs → chunk-F7F43U7Q.cjs} +11 -11
- package/dist/{chunk-EOVQVVDJ.cjs.map → chunk-F7F43U7Q.cjs.map} +1 -1
- package/dist/{chunk-2ZW2ZPDW.js → chunk-LAOO7XHO.js} +2 -2
- package/dist/{chunk-O7F7RZFN.js → chunk-LJKZIIK4.js} +6 -5
- package/dist/chunk-LJKZIIK4.js.map +1 -0
- package/dist/{chunk-AJGZ3YSR.js → chunk-OR5AMXYN.js} +2 -2
- package/dist/{chunk-5XFJG3TC.cjs → chunk-P5JQDFRM.cjs} +60 -60
- package/dist/chunk-P5JQDFRM.cjs.map +1 -0
- package/dist/{chunk-U4APSAAR.cjs → chunk-PXZ7YQ5V.cjs} +5 -5
- package/dist/{chunk-U4APSAAR.cjs.map → chunk-PXZ7YQ5V.cjs.map} +1 -1
- package/dist/{chunk-WXDEMTLD.js → chunk-QO2XD3FR.js} +2 -2
- package/dist/{chunk-C2TDHJBO.cjs → chunk-QSGZE6AZ.cjs} +37 -37
- package/dist/{chunk-C2TDHJBO.cjs.map → chunk-QSGZE6AZ.cjs.map} +1 -1
- package/dist/{chunk-NSL5MNS4.js → chunk-REWRUV3K.js} +11644 -9506
- package/dist/chunk-REWRUV3K.js.map +1 -0
- package/dist/{chunk-BDTQIIJR.cjs → chunk-TA7MFVUS.cjs} +31 -31
- package/dist/{chunk-BDTQIIJR.cjs.map → chunk-TA7MFVUS.cjs.map} +1 -1
- package/dist/{chunk-4423DHRX.js → chunk-UI7CIUAR.js} +2 -2
- package/dist/{chunk-5BKBG653.js → chunk-VXJH5TDN.js} +10 -10
- package/dist/chunk-VXJH5TDN.js.map +1 -0
- package/dist/{chunk-AB65PWU2.cjs → chunk-WCE66C2Z.cjs} +62 -62
- package/dist/{chunk-AB65PWU2.cjs.map → chunk-WCE66C2Z.cjs.map} +1 -1
- package/dist/{chunk-KXIIUE75.js → chunk-XF5ROTMQ.js} +2 -2
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chart.d.ts +1 -1
- package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
- package/dist/components/chat/chat-message-list.d.ts.map +1 -1
- package/dist/components/chat/hooks/index.d.ts +0 -1
- package/dist/components/chat/hooks/index.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +15 -48
- package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +3 -47
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +10 -2
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.d.ts +1 -0
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +21 -13
- package/dist/components/chat/stream/chat-dialog-store.d.ts +184 -0
- package/dist/components/chat/stream/chat-dialog-store.d.ts.map +1 -0
- package/dist/components/chat/stream/chat-stream-reducer.d.ts +367 -0
- package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -0
- package/dist/components/chat/stream/delta-batcher.d.ts +51 -0
- package/dist/components/chat/stream/delta-batcher.d.ts.map +1 -0
- package/dist/components/chat/stream/index.d.ts +17 -0
- package/dist/components/chat/stream/index.d.ts.map +1 -0
- package/dist/components/chat/stream/message-mutations.d.ts +77 -0
- package/dist/components/chat/stream/message-mutations.d.ts.map +1 -0
- package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +22 -0
- package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +1 -0
- package/dist/components/chat/types/api.types.d.ts +1 -81
- package/dist/components/chat/types/api.types.d.ts.map +1 -1
- package/dist/components/chat/types/processing.types.d.ts +2 -90
- package/dist/components/chat/types/processing.types.d.ts.map +1 -1
- package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +34 -6
- package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
- package/dist/components/chat/utils/index.d.ts +2 -3
- package/dist/components/chat/utils/index.d.ts.map +1 -1
- package/dist/components/chat/utils/process-historical-messages.d.ts +59 -11
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/features/time-tracker/time-tracker-panel.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +20 -20
- package/dist/components/help-center-pages/index.js +11 -11
- package/dist/components/index.cjs +171 -129
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +63 -21
- package/dist/components/index.js.map +1 -1
- package/dist/components/layout/page-container.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/index.cjs +44 -2
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.d.ts +1 -2
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +55 -13
- package/dist/components/ui/markdown/base-components.d.ts +56 -0
- package/dist/components/ui/markdown/base-components.d.ts.map +1 -0
- package/dist/components/ui/markdown/engine.d.ts +99 -0
- package/dist/components/ui/markdown/engine.d.ts.map +1 -0
- package/dist/components/ui/markdown/heading-ids.d.ts +65 -0
- package/dist/components/ui/markdown/heading-ids.d.ts.map +1 -0
- package/dist/components/ui/markdown/index.d.ts +18 -0
- package/dist/components/ui/markdown/index.d.ts.map +1 -0
- package/dist/components/ui/markdown/mermaid-diagram.d.ts +79 -0
- package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +1 -0
- package/dist/components/ui/markdown/rich/embed-overrides.d.ts +14 -0
- package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +1 -0
- package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +40 -0
- package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +1 -0
- package/dist/components/ui/markdown/rich/shortcodes.d.ts +8 -0
- package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +1 -0
- package/dist/components/ui/markdown/sanitize.d.ts +153 -0
- package/dist/components/ui/markdown/sanitize.d.ts.map +1 -0
- package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +23 -0
- package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +1 -0
- package/dist/components/ui/markdown/streaming.d.ts +78 -0
- package/dist/components/ui/markdown/streaming.d.ts.map +1 -0
- package/dist/components/ui/markdown/text-size.d.ts +34 -0
- package/dist/components/ui/markdown/text-size.d.ts.map +1 -0
- package/dist/components/ui/modal-v2.d.ts.map +1 -1
- package/dist/components/ui/modal.d.ts.map +1 -1
- package/dist/index.cjs +60 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +71 -13
- package/dist/utils/index.cjs +169 -40
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +162 -41
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/markdown-fences.d.ts +42 -0
- package/dist/utils/markdown-fences.d.ts.map +1 -0
- package/dist/utils/markdown-heading-id.d.ts +85 -0
- package/dist/utils/markdown-heading-id.d.ts.map +1 -0
- package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
- package/package.json +7 -1
- package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +307 -0
- package/src/chat-protocol/__tests__/chat-protocol.test.ts +515 -0
- package/src/chat-protocol/__tests__/env-flag.test.ts +52 -0
- package/src/chat-protocol/__tests__/ip-normalize.test.ts +136 -0
- package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +228 -0
- package/src/chat-protocol/decode.ts +277 -0
- package/src/chat-protocol/encode.ts +71 -0
- package/src/chat-protocol/env-flag.ts +39 -0
- package/src/chat-protocol/events.ts +228 -0
- package/src/chat-protocol/frames.ts +238 -0
- package/src/chat-protocol/index.ts +21 -0
- package/src/chat-protocol/ip-normalize.ts +146 -0
- package/src/chat-protocol/nats-decoder.ts +252 -0
- package/src/components/chat/__tests__/chat-message-list.test.tsx +293 -5
- package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +207 -0
- package/src/components/chat/__tests__/chat-pending-turn.test.tsx +209 -0
- package/src/components/chat/chat-message-enhanced.tsx +111 -17
- package/src/components/chat/chat-message-list.tsx +367 -113
- package/src/components/chat/embeddable-chat.tsx +6 -0
- package/src/components/chat/hooks/.index.md +1 -1
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +1 -1
- package/src/components/chat/hooks/__tests__/__snapshots__/persisted-state-v1-golden.test.ts.snap +297 -0
- package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
- package/src/components/chat/hooks/__tests__/persisted-state-v1-golden.test.ts +272 -0
- package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +318 -0
- package/src/components/chat/hooks/index.ts +0 -1
- package/src/components/chat/hooks/use-chat.ts +8 -0
- package/src/components/chat/hooks/use-nats-chat-adapter.ts +243 -822
- package/src/components/chat/hooks/use-sse-chat-adapter.ts +318 -666
- package/src/components/chat/index.ts +5 -0
- package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +937 -0
- package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +756 -0
- package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +460 -0
- package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +894 -0
- package/src/components/chat/stream/__tests__/delta-batcher.test.ts +255 -0
- package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +98 -0
- package/src/components/chat/stream/chat-dialog-store.ts +536 -0
- package/src/components/chat/stream/chat-stream-reducer.ts +1796 -0
- package/src/components/chat/stream/delta-batcher.ts +159 -0
- package/src/components/chat/stream/index.ts +55 -0
- package/src/components/chat/stream/message-mutations.ts +338 -0
- package/src/components/chat/stream/use-chat-stream-reducer.ts +126 -0
- package/src/components/chat/thinking-display.tsx +1 -1
- package/src/components/chat/types/.api.types.md +1 -3
- package/src/components/chat/types/.processing.types.md +6 -23
- package/src/components/chat/types/api.types.ts +6 -73
- package/src/components/chat/types/processing.types.ts +11 -52
- package/src/components/chat/utils/.index.md +0 -5
- package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +418 -0
- package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +599 -0
- package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +317 -0
- package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +270 -0
- package/src/components/chat/utils/extract-incomplete-message-state.ts +63 -5
- package/src/components/chat/utils/index.ts +5 -8
- package/src/components/chat/utils/process-historical-messages.ts +352 -383
- package/src/components/features/notifications/notification-drawer.tsx +4 -2
- package/src/components/features/time-tracker/time-tracker-panel.tsx +8 -2
- package/src/components/layout/page-container.tsx +5 -1
- package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +22 -4
- package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
- package/src/components/shared/product-release/release-detail-page.tsx +19 -4
- package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +2420 -0
- package/src/components/ui/__tests__/markdown-parity.test.tsx +2528 -0
- package/src/components/ui/index.ts +1 -2
- package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +115 -0
- package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +95 -0
- package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +309 -0
- package/src/components/ui/markdown/__tests__/streaming.test.tsx +388 -0
- package/src/components/ui/markdown/base-components.tsx +341 -0
- package/src/components/ui/markdown/engine.tsx +315 -0
- package/src/components/ui/markdown/heading-ids.ts +239 -0
- package/src/components/ui/markdown/index.ts +49 -0
- package/src/components/ui/markdown/mermaid-diagram.tsx +291 -0
- package/src/components/ui/markdown/rich/embed-overrides.tsx +199 -0
- package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +184 -0
- package/src/components/ui/markdown/rich/shortcodes.ts +170 -0
- package/src/components/ui/markdown/sanitize.ts +3499 -0
- package/src/components/ui/markdown/simple-markdown-renderer.tsx +28 -0
- package/src/components/ui/markdown/streaming.ts +362 -0
- package/src/components/ui/markdown/text-size.ts +106 -0
- package/src/components/ui/modal-v2.tsx +6 -0
- package/src/components/ui/modal.tsx +3 -0
- package/src/components/ui/release-changelog-section.tsx +1 -1
- package/src/components/ui/ticket-info-section.tsx +1 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/markdown-fences.ts +127 -0
- package/src/utils/markdown-heading-id.ts +348 -0
- package/src/utils/markdown-section-extractor.ts +41 -56
- package/dist/chunk-5BKBG653.js.map +0 -1
- package/dist/chunk-5XFJG3TC.cjs.map +0 -1
- package/dist/chunk-FM5DTJPA.cjs.map +0 -1
- package/dist/chunk-NSL5MNS4.js.map +0 -1
- package/dist/chunk-O7F7RZFN.js.map +0 -1
- package/dist/chunk-YHB4MNUX.cjs.map +0 -1
- package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +0 -6
- package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +0 -1
- package/dist/components/chat/utils/chunk-parser.d.ts +0 -25
- package/dist/components/chat/utils/chunk-parser.d.ts.map +0 -1
- package/dist/components/ui/rich-markdown-renderer.d.ts +0 -34
- package/dist/components/ui/rich-markdown-renderer.d.ts.map +0 -1
- package/dist/components/ui/simple-markdown-renderer.d.ts +0 -73
- package/dist/components/ui/simple-markdown-renderer.d.ts.map +0 -1
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +0 -50
- package/src/components/chat/hooks/use-realtime-chunk-processor.ts +0 -479
- package/src/components/chat/utils/.chunk-parser.md +0 -51
- package/src/components/chat/utils/chunk-parser.ts +0 -255
- package/src/components/ui/.simple-markdown-renderer.md +0 -40
- package/src/components/ui/rich-markdown-renderer.tsx +0 -1223
- package/src/components/ui/simple-markdown-renderer.tsx +0 -965
- /package/dist/{chunk-I7M6KCCS.js.map → chunk-4R6H2U77.js.map} +0 -0
- /package/dist/{chunk-RSW42GTZ.js.map → chunk-APF5QBAU.js.map} +0 -0
- /package/dist/{chunk-GJ7BN4MI.js.map → chunk-CGNDAJ7V.js.map} +0 -0
- /package/dist/{chunk-R5IQJXA3.js.map → chunk-F2NMWV44.js.map} +0 -0
- /package/dist/{chunk-2ZW2ZPDW.js.map → chunk-LAOO7XHO.js.map} +0 -0
- /package/dist/{chunk-AJGZ3YSR.js.map → chunk-OR5AMXYN.js.map} +0 -0
- /package/dist/{chunk-WXDEMTLD.js.map → chunk-QO2XD3FR.js.map} +0 -0
- /package/dist/{chunk-4423DHRX.js.map → chunk-UI7CIUAR.js.map} +0 -0
- /package/dist/{chunk-KXIIUE75.js.map → chunk-XF5ROTMQ.js.map} +0 -0
|
@@ -192,8 +192,10 @@ function DrawerScrollList({
|
|
|
192
192
|
return (
|
|
193
193
|
<OverlayScrollArea
|
|
194
194
|
viewportRef={scrollRef}
|
|
195
|
-
|
|
196
|
-
contentClassName
|
|
195
|
+
// Horizontal padding lives on the host: OverlayScrollbars zeroes viewport
|
|
196
|
+
// padding, so `px-*` on `contentClassName` would be silently dropped.
|
|
197
|
+
className="flex-1 min-h-0 px-[var(--spacing-system-m)]"
|
|
198
|
+
contentClassName="flex flex-col gap-[var(--spacing-system-xs)]"
|
|
197
199
|
>
|
|
198
200
|
{isEmpty && !isLoadingMore ? (
|
|
199
201
|
<EmptyState />
|
|
@@ -152,10 +152,16 @@ export function TimeTrackerPanel({
|
|
|
152
152
|
return (
|
|
153
153
|
<OverlayScrollArea
|
|
154
154
|
className={cn(
|
|
155
|
-
|
|
155
|
+
// Padding lives on the host, NOT `contentClassName`: OverlayScrollbars
|
|
156
|
+
// forces `padding: 0` on the viewport, so padding on the scroller is
|
|
157
|
+
// silently dropped (see OverlayScrollArea docs).
|
|
158
|
+
'max-h-[calc(100vh-6rem)] w-full rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-m)]',
|
|
156
159
|
className,
|
|
157
160
|
)}
|
|
158
|
-
|
|
161
|
+
// No `relative` here so the absolute close button anchors to the padded
|
|
162
|
+
// host (OverlayScrollArea's host is always relative) and keeps its inset
|
|
163
|
+
// from the card edge instead of from the padding box.
|
|
164
|
+
contentClassName="flex flex-col gap-[var(--spacing-system-l)]"
|
|
159
165
|
>
|
|
160
166
|
<Button
|
|
161
167
|
variant="transparent"
|
|
@@ -411,7 +411,11 @@ function renderAdvancedPageContainer({
|
|
|
411
411
|
|
|
412
412
|
{variant === 'detail' ? (
|
|
413
413
|
// The only scrolling variant — standardized overlay scrollbar.
|
|
414
|
-
|
|
414
|
+
// `contentClassName` is forwarded to BOTH layers: padding stays effective
|
|
415
|
+
// on the host, while layout (`flex flex-col gap-*`) reaches the scroller,
|
|
416
|
+
// the direct parent of the children (OverlayScrollbars zeroes viewport
|
|
417
|
+
// padding, so padding on the scroller alone would be dropped).
|
|
418
|
+
<OverlayScrollArea className={getContentClasses()} contentClassName={contentClassName}>
|
|
415
419
|
{children}
|
|
416
420
|
</OverlayScrollArea>
|
|
417
421
|
) : (
|
|
@@ -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/
|
|
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
|
-
{/*
|
|
248
|
-
|
|
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/
|
|
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/
|
|
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
|
-
{/*
|
|
586
|
-
|
|
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
|
}
|