@flamingo-stack/openframe-frontend-core 0.0.508 → 0.0.509
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-3SQ5KXHQ.cjs → chunk-2T4GTV25.cjs} +9 -9
- package/dist/{chunk-3SQ5KXHQ.cjs.map → chunk-2T4GTV25.cjs.map} +1 -1
- package/dist/{chunk-CWAOV2FK.cjs → chunk-3CGZPAGR.cjs} +3 -3
- package/dist/{chunk-CWAOV2FK.cjs.map → chunk-3CGZPAGR.cjs.map} +1 -1
- package/dist/{chunk-TLMJHMXJ.js → chunk-3QSR22IC.js} +12 -12
- package/dist/chunk-3QSR22IC.js.map +1 -0
- package/dist/{chunk-TWYNR4TZ.cjs → chunk-4G5TLHJD.cjs} +7141 -4799
- package/dist/chunk-4G5TLHJD.cjs.map +1 -0
- package/dist/{chunk-ADPMHWOE.js → chunk-72XAID7Y.js} +4 -4
- package/dist/{chunk-PAGKRNWK.js → chunk-7WZHBQ4J.js} +2 -2
- package/dist/{chunk-OCEKO5CW.js → chunk-AEELJC4N.js} +12106 -9764
- package/dist/chunk-AEELJC4N.js.map +1 -0
- package/dist/{chunk-Z42BGM6Q.cjs → chunk-BT2WWDFP.cjs} +5 -5
- package/dist/{chunk-Z42BGM6Q.cjs.map → chunk-BT2WWDFP.cjs.map} +1 -1
- package/dist/{chunk-7LEL3RIX.cjs → chunk-C7OY3PQP.cjs} +11 -11
- package/dist/{chunk-7LEL3RIX.cjs.map → chunk-C7OY3PQP.cjs.map} +1 -1
- package/dist/{chunk-RHGGEKPQ.cjs → chunk-CIOLOQKQ.cjs} +4 -4
- package/dist/{chunk-RHGGEKPQ.cjs.map → chunk-CIOLOQKQ.cjs.map} +1 -1
- package/dist/{chunk-TSZHM74B.js → chunk-DC2TKS7C.js} +2 -2
- package/dist/{chunk-M2GOR3XQ.cjs → chunk-DYPYR7FR.cjs} +87 -87
- package/dist/{chunk-M2GOR3XQ.cjs.map → chunk-DYPYR7FR.cjs.map} +1 -1
- package/dist/{chunk-I64ABCDX.js → chunk-I2B6X77L.js} +2 -2
- package/dist/{chunk-NIZDKTGL.cjs → chunk-K5MSCMDK.cjs} +37 -37
- package/dist/{chunk-NIZDKTGL.cjs.map → chunk-K5MSCMDK.cjs.map} +1 -1
- package/dist/{chunk-DTYRYB2N.js → chunk-K6QTZ7CZ.js} +2 -2
- package/dist/{chunk-4LTMXDUS.js → chunk-KBN7PMFT.js} +2 -2
- package/dist/{chunk-TBMV7I5N.js → chunk-KXZO2WZX.js} +2 -2
- package/dist/{chunk-QTYZMP6D.cjs → chunk-LBAKLT6T.cjs} +62 -62
- package/dist/chunk-LBAKLT6T.cjs.map +1 -0
- package/dist/{chunk-KEBYLU3U.js → chunk-LFUPI7VX.js} +2 -2
- package/dist/{chunk-LDTR4IVZ.cjs → chunk-M37PBG4N.cjs} +31 -31
- package/dist/{chunk-LDTR4IVZ.cjs.map → chunk-M37PBG4N.cjs.map} +1 -1
- package/dist/{chunk-WA7RR64F.js → chunk-PO5O654H.js} +6 -5
- package/dist/chunk-PO5O654H.js.map +1 -0
- package/dist/{chunk-WK4N5VBX.cjs → chunk-QJJISLPA.cjs} +28 -27
- package/dist/chunk-QJJISLPA.cjs.map +1 -0
- package/dist/{chunk-2F44PLTV.cjs → chunk-T7MCSA55.cjs} +26 -26
- package/dist/{chunk-2F44PLTV.cjs.map → chunk-T7MCSA55.cjs.map} +1 -1
- package/dist/{chunk-WJQHJD7J.js → chunk-TWSKTJHW.js} +2 -2
- package/dist/{chunk-ZSQHZYCO.cjs → chunk-UQDMJ6DH.cjs} +13 -13
- package/dist/{chunk-ZSQHZYCO.cjs.map → chunk-UQDMJ6DH.cjs.map} +1 -1
- package/dist/{chunk-TZRUCD56.js → chunk-V3ZAAFE3.js} +5 -5
- package/dist/{chunk-LRGHJPET.js → chunk-XGIFOHKE.js} +2 -2
- package/dist/{chunk-POOMO3PA.cjs → chunk-YQEPRYT5.cjs} +7 -7
- package/dist/{chunk-POOMO3PA.cjs.map → chunk-YQEPRYT5.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/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/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/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-ADPMHWOE.js.map → chunk-72XAID7Y.js.map} +0 -0
- /package/dist/{chunk-PAGKRNWK.js.map → chunk-7WZHBQ4J.js.map} +0 -0
- /package/dist/{chunk-TSZHM74B.js.map → chunk-DC2TKS7C.js.map} +0 -0
- /package/dist/{chunk-I64ABCDX.js.map → chunk-I2B6X77L.js.map} +0 -0
- /package/dist/{chunk-DTYRYB2N.js.map → chunk-K6QTZ7CZ.js.map} +0 -0
- /package/dist/{chunk-4LTMXDUS.js.map → chunk-KBN7PMFT.js.map} +0 -0
- /package/dist/{chunk-TBMV7I5N.js.map → chunk-KXZO2WZX.js.map} +0 -0
- /package/dist/{chunk-KEBYLU3U.js.map → chunk-LFUPI7VX.js.map} +0 -0
- /package/dist/{chunk-WJQHJD7J.js.map → chunk-TWSKTJHW.js.map} +0 -0
- /package/dist/{chunk-TZRUCD56.js.map → chunk-V3ZAAFE3.js.map} +0 -0
- /package/dist/{chunk-LRGHJPET.js.map → chunk-XGIFOHKE.js.map} +0 -0
package/dist/utils/index.cjs
CHANGED
|
@@ -4317,6 +4317,151 @@ function buildDocumentTree(docs, mapFn, getParentPath, getPath) {
|
|
|
4317
4317
|
return sortTreeChildren(rootNodes);
|
|
4318
4318
|
}
|
|
4319
4319
|
|
|
4320
|
+
// src/utils/markdown-fences.ts
|
|
4321
|
+
var FENCE_RE = /^ {0,3}(`{3,}|~{3,})([^\n]*?)\r?$/;
|
|
4322
|
+
var BLANK_LINE_RE = /^[ \t\r]*$/;
|
|
4323
|
+
function isBlankLine(line) {
|
|
4324
|
+
return BLANK_LINE_RE.test(line);
|
|
4325
|
+
}
|
|
4326
|
+
function createFenceTracker() {
|
|
4327
|
+
let fenceChar = null;
|
|
4328
|
+
let fenceLength = 0;
|
|
4329
|
+
return {
|
|
4330
|
+
push(line) {
|
|
4331
|
+
const fence = FENCE_RE.exec(line);
|
|
4332
|
+
if (fence) {
|
|
4333
|
+
const run = fence[1];
|
|
4334
|
+
if (fenceChar === null) {
|
|
4335
|
+
fenceChar = run[0];
|
|
4336
|
+
fenceLength = run.length;
|
|
4337
|
+
return "open";
|
|
4338
|
+
}
|
|
4339
|
+
if (run[0] === fenceChar && run.length >= fenceLength && isBlankLine(fence[2])) {
|
|
4340
|
+
fenceChar = null;
|
|
4341
|
+
fenceLength = 0;
|
|
4342
|
+
return "close";
|
|
4343
|
+
}
|
|
4344
|
+
return "inside";
|
|
4345
|
+
}
|
|
4346
|
+
return fenceChar === null ? "text" : "inside";
|
|
4347
|
+
},
|
|
4348
|
+
openChar: () => fenceChar,
|
|
4349
|
+
openLength: () => fenceLength
|
|
4350
|
+
};
|
|
4351
|
+
}
|
|
4352
|
+
|
|
4353
|
+
// src/utils/markdown-heading-id.ts
|
|
4354
|
+
var HEADING_EMOJI_RE = /[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/gu;
|
|
4355
|
+
function stripHeadingEmojis(text) {
|
|
4356
|
+
return text.replace(HEADING_EMOJI_RE, "").trim();
|
|
4357
|
+
}
|
|
4358
|
+
function slugifyHeadingBase(text) {
|
|
4359
|
+
return text.trim().toLowerCase().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/^-+|-+$/g, "");
|
|
4360
|
+
}
|
|
4361
|
+
function slugifyHeadingText(text) {
|
|
4362
|
+
return slugifyHeadingBase(stripHeadingEmojis(text));
|
|
4363
|
+
}
|
|
4364
|
+
var ATX_HEADING_RE = /^ {0,3}(#{1,6})[ \t]+(.*?)(?:[ \t]+#+)?[ \t]*\r?$/;
|
|
4365
|
+
var ATX_EMPTY_RE = /^ {0,3}(#{1,6})[ \t]*#*[ \t]*\r?$/;
|
|
4366
|
+
var RAW_HEADING_RE = /<h([1-6])\b[^>]*>([\s\S]*?)(?:<\/h\1>|$)/gi;
|
|
4367
|
+
var CONTAINER_PREFIX_RE = /^ {0,3}(?:(?:>[ \t]?)+|(?:[-+*]|\d{1,9}[.)])[ \t]+)+/;
|
|
4368
|
+
var SETEXT_UNDERLINE_RE = /^ {0,3}(=+|-+)[ \t]*\r?$/;
|
|
4369
|
+
var THEMATIC_BREAK_RE = /^ {0,3}(\*|_){3,}[ \t]*\r?$/;
|
|
4370
|
+
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";
|
|
4371
|
+
var HTML_BLOCK_OPENER_RE = new RegExp(
|
|
4372
|
+
`^ {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?$)`,
|
|
4373
|
+
"i"
|
|
4374
|
+
);
|
|
4375
|
+
function scanHeadings(content, options = {}) {
|
|
4376
|
+
const { skipFrontmatter = true, includeRawHtml = true, skipFences = true } = options;
|
|
4377
|
+
const out = [];
|
|
4378
|
+
const lines = content.split("\n");
|
|
4379
|
+
const fences = skipFences ? createFenceTracker() : null;
|
|
4380
|
+
let start = 0;
|
|
4381
|
+
if (skipFrontmatter && lines[0]?.trim() === "---") {
|
|
4382
|
+
for (let i = 1; i < lines.length; i++) {
|
|
4383
|
+
if (lines[i].trim() === "---" || lines[i].trim() === "...") {
|
|
4384
|
+
start = i + 1;
|
|
4385
|
+
break;
|
|
4386
|
+
}
|
|
4387
|
+
}
|
|
4388
|
+
}
|
|
4389
|
+
let setextRun = null;
|
|
4390
|
+
for (let i = start; i < lines.length; i++) {
|
|
4391
|
+
const line = lines[i];
|
|
4392
|
+
if (fences) {
|
|
4393
|
+
const role = fences.push(line);
|
|
4394
|
+
if (role !== "text") {
|
|
4395
|
+
setextRun = null;
|
|
4396
|
+
continue;
|
|
4397
|
+
}
|
|
4398
|
+
}
|
|
4399
|
+
const prefix = CONTAINER_PREFIX_RE.exec(line)?.[0] ?? "";
|
|
4400
|
+
const body = prefix ? line.slice(prefix.length) : line;
|
|
4401
|
+
const setext = SETEXT_UNDERLINE_RE.exec(body);
|
|
4402
|
+
if (setext) {
|
|
4403
|
+
if (setextRun && !setextRun.disqualified && setextRun.prefix === prefix) {
|
|
4404
|
+
out.push({
|
|
4405
|
+
line: setextRun.line,
|
|
4406
|
+
level: setext[1][0] === "=" ? 1 : 2,
|
|
4407
|
+
text: setextRun.lines.join("\n")
|
|
4408
|
+
});
|
|
4409
|
+
}
|
|
4410
|
+
setextRun = null;
|
|
4411
|
+
continue;
|
|
4412
|
+
}
|
|
4413
|
+
const atx = ATX_HEADING_RE.exec(body) ?? ATX_EMPTY_RE.exec(body);
|
|
4414
|
+
if (atx) {
|
|
4415
|
+
out.push({ line: i + 1, level: atx[1].length, text: (atx[2] ?? "").trim() });
|
|
4416
|
+
setextRun = null;
|
|
4417
|
+
continue;
|
|
4418
|
+
}
|
|
4419
|
+
if (includeRawHtml && line.indexOf("<") !== -1) {
|
|
4420
|
+
RAW_HEADING_RE.lastIndex = 0;
|
|
4421
|
+
let raw;
|
|
4422
|
+
let matched = false;
|
|
4423
|
+
while ((raw = RAW_HEADING_RE.exec(line)) !== null) {
|
|
4424
|
+
matched = true;
|
|
4425
|
+
out.push({
|
|
4426
|
+
line: i + 1,
|
|
4427
|
+
level: Number(raw[1]),
|
|
4428
|
+
text: raw[2].replace(/<[^>]*>/g, "").trim()
|
|
4429
|
+
});
|
|
4430
|
+
}
|
|
4431
|
+
if (matched) {
|
|
4432
|
+
setextRun = null;
|
|
4433
|
+
continue;
|
|
4434
|
+
}
|
|
4435
|
+
}
|
|
4436
|
+
if (isBlankLine(body) || THEMATIC_BREAK_RE.test(body)) {
|
|
4437
|
+
setextRun = null;
|
|
4438
|
+
continue;
|
|
4439
|
+
}
|
|
4440
|
+
if (setextRun && setextRun.prefix === prefix) {
|
|
4441
|
+
setextRun.lines.push(body.trim());
|
|
4442
|
+
} else {
|
|
4443
|
+
setextRun = {
|
|
4444
|
+
line: i + 1,
|
|
4445
|
+
prefix,
|
|
4446
|
+
lines: [body.trim()],
|
|
4447
|
+
disqualified: HTML_BLOCK_OPENER_RE.test(body)
|
|
4448
|
+
};
|
|
4449
|
+
}
|
|
4450
|
+
}
|
|
4451
|
+
return out;
|
|
4452
|
+
}
|
|
4453
|
+
function createHeadingIdDeduper() {
|
|
4454
|
+
const counts = {};
|
|
4455
|
+
return (cleanId) => {
|
|
4456
|
+
if (counts[cleanId]) {
|
|
4457
|
+
counts[cleanId]++;
|
|
4458
|
+
return `${cleanId}-${counts[cleanId]}`;
|
|
4459
|
+
}
|
|
4460
|
+
counts[cleanId] = 1;
|
|
4461
|
+
return cleanId;
|
|
4462
|
+
};
|
|
4463
|
+
}
|
|
4464
|
+
|
|
4320
4465
|
// src/utils/markdown-to-plain.ts
|
|
4321
4466
|
function stripInlineMarkdown(s) {
|
|
4322
4467
|
return s.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*]+)\*/g, "$1").replace(/`([^`]+)`/g, "$1");
|
|
@@ -4347,50 +4492,26 @@ var DEFAULT_OPTIONS = {
|
|
|
4347
4492
|
function extractSections(markdown, options = {}) {
|
|
4348
4493
|
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
4349
4494
|
const sections = [];
|
|
4350
|
-
const
|
|
4351
|
-
const
|
|
4352
|
-
|
|
4353
|
-
|
|
4354
|
-
|
|
4355
|
-
|
|
4356
|
-
|
|
4357
|
-
|
|
4358
|
-
continue;
|
|
4359
|
-
}
|
|
4360
|
-
if (line === "---") {
|
|
4361
|
-
inYamlBlock = !inYamlBlock;
|
|
4362
|
-
continue;
|
|
4363
|
-
}
|
|
4364
|
-
if (inCodeBlock || inYamlBlock) continue;
|
|
4365
|
-
}
|
|
4366
|
-
const pattern = new RegExp(`^(#{1,${opts.maxLevel}})\\s+(.+)`);
|
|
4367
|
-
const match = line.match(pattern);
|
|
4368
|
-
if (!match) continue;
|
|
4369
|
-
const level = match[1].length;
|
|
4370
|
-
if (level > opts.maxLevel) continue;
|
|
4371
|
-
let title = match[2].trim();
|
|
4495
|
+
const dedupe = createHeadingIdDeduper();
|
|
4496
|
+
const scanned = scanHeadings(markdown, {
|
|
4497
|
+
skipFrontmatter: opts.skipCodeAndYamlBlocks,
|
|
4498
|
+
skipFences: opts.skipCodeAndYamlBlocks
|
|
4499
|
+
});
|
|
4500
|
+
for (const heading of scanned) {
|
|
4501
|
+
if (heading.level > opts.maxLevel) continue;
|
|
4502
|
+
let title = heading.text;
|
|
4372
4503
|
if (opts.stripFormattingMarkers) {
|
|
4373
4504
|
title = stripInlineMarkdown(title).trim();
|
|
4374
4505
|
}
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
/[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/gu,
|
|
4379
|
-
""
|
|
4380
|
-
).trim();
|
|
4381
|
-
}
|
|
4382
|
-
baseId = baseId.toLowerCase().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/^-+|-+$/g, "");
|
|
4506
|
+
const baseId = slugifyHeadingBase(
|
|
4507
|
+
opts.removeEmojis ? stripHeadingEmojis(title) : title
|
|
4508
|
+
);
|
|
4383
4509
|
const cleanId = baseId || `section-${sections.length + 1}`;
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
} else {
|
|
4390
|
-
idCounts[cleanId] = 1;
|
|
4391
|
-
}
|
|
4392
|
-
}
|
|
4393
|
-
sections.push({ id, title, level });
|
|
4510
|
+
sections.push({
|
|
4511
|
+
id: opts.handleDuplicateIds ? dedupe(cleanId) : cleanId,
|
|
4512
|
+
title,
|
|
4513
|
+
level: heading.level
|
|
4514
|
+
});
|
|
4394
4515
|
}
|
|
4395
4516
|
return sections;
|
|
4396
4517
|
}
|
|
@@ -4582,6 +4703,7 @@ exports.DEV_SECTION_PARAM_KEYS = DEV_SECTION_PARAM_KEYS;
|
|
|
4582
4703
|
exports.ELAPSED_MS_FIELD = ELAPSED_MS_FIELD;
|
|
4583
4704
|
exports.FIRST_TOUCH_ATTRIBUTION_KEY = FIRST_TOUCH_ATTRIBUTION_KEY;
|
|
4584
4705
|
exports.GENERIC_EMAIL_DOMAINS = GENERIC_EMAIL_DOMAINS;
|
|
4706
|
+
exports.HEADING_EMOJI_RE = HEADING_EMOJI_RE;
|
|
4585
4707
|
exports.HEX_PATTERN = HEX_PATTERN;
|
|
4586
4708
|
exports.HONEYPOT_FIELD = HONEYPOT_FIELD;
|
|
4587
4709
|
exports.HUB_HEADER_OFFSET_PX = HUB_HEADER_OFFSET_PX;
|
|
@@ -4630,6 +4752,8 @@ exports.clearWalkthroughDismissal = clearWalkthroughDismissal;
|
|
|
4630
4752
|
exports.clickupTaskUrl = clickupTaskUrl;
|
|
4631
4753
|
exports.cn = cn;
|
|
4632
4754
|
exports.consumeAccessCode = consumeAccessCode;
|
|
4755
|
+
exports.createFenceTracker = createFenceTracker;
|
|
4756
|
+
exports.createHeadingIdDeduper = createHeadingIdDeduper;
|
|
4633
4757
|
exports.createSseSubscription = createSseSubscription;
|
|
4634
4758
|
exports.createUTCTimestamp = createUTCTimestamp;
|
|
4635
4759
|
exports.deepClone = deepClone;
|
|
@@ -4754,6 +4878,7 @@ exports.getTrendColors = getTrendColors;
|
|
|
4754
4878
|
exports.hasGenericEmailDomain = hasGenericEmailDomain;
|
|
4755
4879
|
exports.hexToRgb = hexToRgb2;
|
|
4756
4880
|
exports.isAnnouncementDismissed = isAnnouncementDismissed;
|
|
4881
|
+
exports.isBlankLine = isBlankLine;
|
|
4757
4882
|
exports.isCrossOriginUrl = isCrossOriginUrl;
|
|
4758
4883
|
exports.isDismissedCookieValue = isDismissedCookieValue;
|
|
4759
4884
|
exports.isFigmaSlidesUrl = isFigmaSlidesUrl;
|
|
@@ -4802,16 +4927,20 @@ exports.resolveReleaseCover = resolveReleaseCover;
|
|
|
4802
4927
|
exports.rgbToHex = rgbToHex;
|
|
4803
4928
|
exports.sanitizeLandingUrl = sanitizeLandingUrl;
|
|
4804
4929
|
exports.sanitizeTitleForChat = sanitizeTitleForChat;
|
|
4930
|
+
exports.scanHeadings = scanHeadings;
|
|
4805
4931
|
exports.schedulingAudienceKey = schedulingAudienceKey;
|
|
4806
4932
|
exports.scrollElementIntoView = scrollElementIntoView;
|
|
4807
4933
|
exports.serializeJsonLd = serializeJsonLd;
|
|
4808
4934
|
exports.setEmbedAuthAdapter = setEmbedAuthAdapter;
|
|
4809
4935
|
exports.setEmbedProxyAuth = setEmbedProxyAuth;
|
|
4810
4936
|
exports.shouldProxyImage = shouldProxyImage;
|
|
4937
|
+
exports.slugifyHeadingBase = slugifyHeadingBase;
|
|
4938
|
+
exports.slugifyHeadingText = slugifyHeadingText;
|
|
4811
4939
|
exports.sortTreeChildren = sortTreeChildren;
|
|
4812
4940
|
exports.splitCsvEnv = splitCsvEnv;
|
|
4813
4941
|
exports.stripChatAttachmentMarkdown = stripChatAttachmentMarkdown;
|
|
4814
4942
|
exports.stripFolderIndexFromPath = stripFolderIndexFromPath;
|
|
4943
|
+
exports.stripHeadingEmojis = stripHeadingEmojis;
|
|
4815
4944
|
exports.stripHtml = stripHtml;
|
|
4816
4945
|
exports.stripInlineMarkdown = stripInlineMarkdown;
|
|
4817
4946
|
exports.titleCaseFromSlug = titleCaseFromSlug;
|