@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.
- 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 +216 -0
- package/dist/chat-protocol/events.d.ts.map +1 -0
- package/dist/chat-protocol/frames.d.ts +213 -0
- package/dist/chat-protocol/frames.d.ts.map +1 -0
- package/dist/chat-protocol/index.cjs +506 -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 +490 -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-TBMV7I5N.js → chunk-2AASLY6D.js} +2 -2
- package/dist/{chunk-ZSQHZYCO.cjs → chunk-2RLI5XVI.cjs} +13 -13
- package/dist/{chunk-ZSQHZYCO.cjs.map → chunk-2RLI5XVI.cjs.map} +1 -1
- package/dist/{chunk-POOMO3PA.cjs → chunk-53JKCFFE.cjs} +7 -7
- package/dist/{chunk-POOMO3PA.cjs.map → chunk-53JKCFFE.cjs.map} +1 -1
- package/dist/{chunk-NIZDKTGL.cjs → chunk-5AZZQQYS.cjs} +37 -37
- package/dist/{chunk-NIZDKTGL.cjs.map → chunk-5AZZQQYS.cjs.map} +1 -1
- package/dist/{chunk-7LEL3RIX.cjs → chunk-5CDPRCPS.cjs} +11 -11
- package/dist/{chunk-7LEL3RIX.cjs.map → chunk-5CDPRCPS.cjs.map} +1 -1
- package/dist/{chunk-M2GOR3XQ.cjs → chunk-6TL5XIAW.cjs} +87 -87
- package/dist/{chunk-M2GOR3XQ.cjs.map → chunk-6TL5XIAW.cjs.map} +1 -1
- package/dist/{chunk-PAGKRNWK.js → chunk-CTMLY2GN.js} +2 -2
- package/dist/{chunk-LRGHJPET.js → chunk-DBR5JLX3.js} +2 -2
- package/dist/{chunk-WK4N5VBX.cjs → chunk-EJ3EBYNV.cjs} +28 -27
- package/dist/chunk-EJ3EBYNV.cjs.map +1 -0
- package/dist/{chunk-OCEKO5CW.js → chunk-FEGEC6FY.js} +12069 -9720
- package/dist/chunk-FEGEC6FY.js.map +1 -0
- package/dist/{chunk-I64ABCDX.js → chunk-HCZJZMU7.js} +2 -2
- package/dist/{chunk-TLMJHMXJ.js → chunk-HX4CJYXL.js} +12 -12
- package/dist/chunk-HX4CJYXL.js.map +1 -0
- package/dist/{chunk-Z42BGM6Q.cjs → chunk-J2JUAS4C.cjs} +5 -5
- package/dist/{chunk-Z42BGM6Q.cjs.map → chunk-J2JUAS4C.cjs.map} +1 -1
- package/dist/{chunk-QTYZMP6D.cjs → chunk-JMBIGH4H.cjs} +62 -62
- package/dist/chunk-JMBIGH4H.cjs.map +1 -0
- package/dist/{chunk-WA7RR64F.js → chunk-JOCFPAS6.js} +6 -5
- package/dist/chunk-JOCFPAS6.js.map +1 -0
- package/dist/{chunk-TSZHM74B.js → chunk-LBOWSKGM.js} +2 -2
- package/dist/{chunk-TZRUCD56.js → chunk-MLGGF24T.js} +5 -5
- package/dist/{chunk-TWYNR4TZ.cjs → chunk-RB2EW6IZ.cjs} +7290 -4941
- package/dist/chunk-RB2EW6IZ.cjs.map +1 -0
- package/dist/{chunk-LDTR4IVZ.cjs → chunk-RHQ7BJKK.cjs} +31 -31
- package/dist/{chunk-LDTR4IVZ.cjs.map → chunk-RHQ7BJKK.cjs.map} +1 -1
- package/dist/{chunk-RHGGEKPQ.cjs → chunk-RJ3D3PE2.cjs} +4 -4
- package/dist/{chunk-RHGGEKPQ.cjs.map → chunk-RJ3D3PE2.cjs.map} +1 -1
- package/dist/{chunk-DTYRYB2N.js → chunk-SRYV4H3M.js} +2 -2
- package/dist/{chunk-ADPMHWOE.js → chunk-TBGSQTJK.js} +4 -4
- package/dist/{chunk-KEBYLU3U.js → chunk-UWPT23SA.js} +2 -2
- package/dist/{chunk-4LTMXDUS.js → chunk-VDJF4ZAU.js} +2 -2
- package/dist/{chunk-WJQHJD7J.js → chunk-WNOGR5AA.js} +2 -2
- package/dist/{chunk-CWAOV2FK.cjs → chunk-WSAPKKDU.cjs} +3 -3
- package/dist/{chunk-CWAOV2FK.cjs.map → chunk-WSAPKKDU.cjs.map} +1 -1
- package/dist/{chunk-3SQ5KXHQ.cjs → chunk-XJVRAKEX.cjs} +9 -9
- package/dist/{chunk-3SQ5KXHQ.cjs.map → chunk-XJVRAKEX.cjs.map} +1 -1
- package/dist/{chunk-2F44PLTV.cjs → chunk-Z35QWWJH.cjs} +26 -26
- package/dist/{chunk-2F44PLTV.cjs.map → chunk-Z35QWWJH.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- 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-chunk-catchup.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 +10 -57
- 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 +380 -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 -93
- package/dist/components/chat/types/processing.types.d.ts.map +1 -1
- package/dist/components/chat/types/unified-chat-state.types.d.ts +15 -0
- package/dist/components/chat/types/unified-chat-state.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/history-merge.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/help-center-pages/index.cjs +22 -22
- package/dist/components/help-center-pages/index.js +13 -13
- package/dist/components/index.cjs +174 -132
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +65 -23
- package/dist/components/index.js.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +34 -34
- package/dist/components/meeting-scheduler/index.js +3 -3
- package/dist/components/navigation/header.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 +6 -6
- package/dist/components/tickets/index.js +5 -5
- 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 +51 -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/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 +319 -0
- package/src/chat-protocol/__tests__/chat-protocol.test.ts +516 -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 +237 -0
- package/src/chat-protocol/decode.ts +278 -0
- package/src/chat-protocol/encode.ts +71 -0
- package/src/chat-protocol/env-flag.ts +39 -0
- package/src/chat-protocol/events.ts +254 -0
- package/src/chat-protocol/frames.ts +245 -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 +264 -0
- package/src/components/chat/.chat-message-list.md +10 -6
- package/src/components/chat/__tests__/chat-message-list.test.tsx +450 -9
- package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +207 -0
- package/src/components/chat/__tests__/chat-pending-turn.test.tsx +250 -0
- package/src/components/chat/chat-message-enhanced.tsx +122 -20
- package/src/components/chat/chat-message-list.tsx +515 -133
- package/src/components/chat/embeddable-chat.tsx +6 -0
- package/src/components/chat/hooks/.index.md +30 -33
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +36 -55
- package/src/components/chat/hooks/__tests__/__snapshots__/conversation-id-persistence-golden.test.ts.snap +37 -0
- package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
- package/src/components/chat/hooks/__tests__/chunk-catchup-dialog-staleness.test.ts +92 -0
- package/src/components/chat/hooks/__tests__/conversation-id-persistence-golden.test.ts +438 -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-chunk-catchup.ts +26 -1
- package/src/components/chat/hooks/use-nats-chat-adapter.ts +254 -825
- package/src/components/chat/hooks/use-sse-chat-adapter.ts +380 -684
- package/src/components/chat/index.ts +5 -0
- package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +944 -0
- package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +806 -0
- package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +467 -0
- package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +1330 -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 +105 -0
- package/src/components/chat/stream/chat-dialog-store.ts +536 -0
- package/src/components/chat/stream/chat-stream-reducer.ts +1928 -0
- package/src/components/chat/stream/delta-batcher.ts +168 -0
- package/src/components/chat/stream/index.ts +55 -0
- package/src/components/chat/stream/message-mutations.ts +340 -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 +39 -49
- package/src/components/chat/types/.processing.types.md +29 -58
- package/src/components/chat/types/.unified-chat-state.types.md +2 -2
- package/src/components/chat/types/api.types.ts +6 -73
- package/src/components/chat/types/processing.types.ts +11 -53
- package/src/components/chat/types/unified-chat-state.types.ts +16 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +21 -3
- package/src/components/chat/utils/.history-merge.md +44 -3
- package/src/components/chat/utils/.index.md +31 -40
- package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +420 -0
- package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +605 -0
- package/src/components/chat/utils/__tests__/extract-incomplete-message-state.test.ts +106 -0
- package/src/components/chat/utils/__tests__/history-merge.test.ts +160 -0
- package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +61 -0
- package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +394 -0
- package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +270 -0
- package/src/components/chat/utils/extract-incomplete-message-state.ts +93 -6
- package/src/components/chat/utils/history-merge.ts +85 -5
- package/src/components/chat/utils/index.ts +5 -8
- package/src/components/chat/utils/process-historical-messages.ts +361 -385
- package/src/components/navigation/header.tsx +21 -16
- 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 +2540 -0
- package/src/components/ui/index.ts +1 -2
- package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +176 -0
- package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +151 -0
- package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +354 -0
- package/src/components/ui/markdown/__tests__/sanitize-render.test.tsx +118 -0
- package/src/components/ui/markdown/__tests__/streaming.test.tsx +436 -0
- package/src/components/ui/markdown/base-components.tsx +360 -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 +323 -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 +3584 -0
- package/src/components/ui/markdown/simple-markdown-renderer.tsx +28 -0
- package/src/components/ui/markdown/streaming.ts +390 -0
- package/src/components/ui/markdown/text-size.ts +106 -0
- package/src/components/ui/release-changelog-section.tsx +1 -1
- package/src/components/ui/ticket-info-section.tsx +1 -1
- package/src/stories/TopNavigation.stories.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-OCEKO5CW.js.map +0 -1
- package/dist/chunk-QTYZMP6D.cjs.map +0 -1
- package/dist/chunk-TLMJHMXJ.js.map +0 -1
- package/dist/chunk-TWYNR4TZ.cjs.map +0 -1
- package/dist/chunk-WA7RR64F.js.map +0 -1
- package/dist/chunk-WK4N5VBX.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 -77
- package/src/components/chat/hooks/use-realtime-chunk-processor.ts +0 -489
- package/src/components/chat/utils/.chunk-parser.md +0 -62
- package/src/components/chat/utils/chunk-parser.ts +0 -262
- package/src/components/ui/.simple-markdown-renderer.md +0 -52
- package/src/components/ui/rich-markdown-renderer.tsx +0 -1223
- package/src/components/ui/simple-markdown-renderer.tsx +0 -964
- /package/dist/{chunk-TBMV7I5N.js.map → chunk-2AASLY6D.js.map} +0 -0
- /package/dist/{chunk-PAGKRNWK.js.map → chunk-CTMLY2GN.js.map} +0 -0
- /package/dist/{chunk-LRGHJPET.js.map → chunk-DBR5JLX3.js.map} +0 -0
- /package/dist/{chunk-I64ABCDX.js.map → chunk-HCZJZMU7.js.map} +0 -0
- /package/dist/{chunk-TSZHM74B.js.map → chunk-LBOWSKGM.js.map} +0 -0
- /package/dist/{chunk-TZRUCD56.js.map → chunk-MLGGF24T.js.map} +0 -0
- /package/dist/{chunk-DTYRYB2N.js.map → chunk-SRYV4H3M.js.map} +0 -0
- /package/dist/{chunk-ADPMHWOE.js.map → chunk-TBGSQTJK.js.map} +0 -0
- /package/dist/{chunk-KEBYLU3U.js.map → chunk-UWPT23SA.js.map} +0 -0
- /package/dist/{chunk-4LTMXDUS.js.map → chunk-VDJF4ZAU.js.map} +0 -0
- /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
|
|
143
|
-
// (DM Sans 500)
|
|
144
|
-
//
|
|
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
|
-
|
|
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
|
-
//
|
|
347
|
-
//
|
|
348
|
-
//
|
|
349
|
-
|
|
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/
|
|
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
|
}
|