@flamingo-stack/openframe-frontend-core 0.0.481 → 0.0.482
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/{chunk-H6DFCF44.cjs → chunk-22AED5IC.cjs} +82 -82
- package/dist/{chunk-H6DFCF44.cjs.map → chunk-22AED5IC.cjs.map} +1 -1
- package/dist/{chunk-MGKCS6KS.js → chunk-3WCARCI4.js} +2 -2
- package/dist/{chunk-LNKWY74S.cjs → chunk-4HL6UENH.cjs} +5 -5
- package/dist/{chunk-LNKWY74S.cjs.map → chunk-4HL6UENH.cjs.map} +1 -1
- package/dist/{chunk-Y3Y2DLNO.js → chunk-6UGYBCEN.js} +3 -3
- package/dist/{chunk-BBUEY73L.js → chunk-7I5B5PQ4.js} +6269 -5339
- package/dist/chunk-7I5B5PQ4.js.map +1 -0
- package/dist/{chunk-PSPWT2Q5.js → chunk-7LWXWXEY.js} +4 -4
- package/dist/{chunk-M7O74OWG.cjs → chunk-ACOU5YJI.cjs} +31 -31
- package/dist/{chunk-M7O74OWG.cjs.map → chunk-ACOU5YJI.cjs.map} +1 -1
- package/dist/{chunk-INDFIVDV.cjs → chunk-AHGSN4AT.cjs} +12 -12
- package/dist/{chunk-INDFIVDV.cjs.map → chunk-AHGSN4AT.cjs.map} +1 -1
- package/dist/{chunk-VTSRDC4W.js → chunk-CKC3EAYT.js} +2 -2
- package/dist/{chunk-SASR7SK5.js → chunk-GZK7FWJJ.js} +20 -4
- package/dist/chunk-GZK7FWJJ.js.map +1 -0
- package/dist/{chunk-ZRANZNEA.js → chunk-JJE5TUZK.js} +2 -2
- package/dist/{chunk-66BNAFO6.js → chunk-JQIUBFHL.js} +4 -4
- package/dist/{chunk-MMCBQJKE.cjs → chunk-KUBJHB6I.cjs} +11 -11
- package/dist/{chunk-MMCBQJKE.cjs.map → chunk-KUBJHB6I.cjs.map} +1 -1
- package/dist/{chunk-ZV6E3U3C.cjs → chunk-MRGTMMJ3.cjs} +30 -30
- package/dist/{chunk-ZV6E3U3C.cjs.map → chunk-MRGTMMJ3.cjs.map} +1 -1
- package/dist/{chunk-OZJN54R5.cjs → chunk-NWVKG7QC.cjs} +37 -37
- package/dist/{chunk-OZJN54R5.cjs.map → chunk-NWVKG7QC.cjs.map} +1 -1
- package/dist/{chunk-AN47EIIJ.cjs → chunk-PHTSSHIQ.cjs} +59 -59
- package/dist/{chunk-AN47EIIJ.cjs.map → chunk-PHTSSHIQ.cjs.map} +1 -1
- package/dist/{chunk-N2JZ33V7.cjs → chunk-RUA3OXSJ.cjs} +26 -26
- package/dist/{chunk-N2JZ33V7.cjs.map → chunk-RUA3OXSJ.cjs.map} +1 -1
- package/dist/{chunk-LK623WCC.cjs → chunk-RZPF7MJ2.cjs} +9 -9
- package/dist/{chunk-LK623WCC.cjs.map → chunk-RZPF7MJ2.cjs.map} +1 -1
- package/dist/{chunk-G3UN2DXU.cjs → chunk-STYA77PH.cjs} +20 -4
- package/dist/chunk-STYA77PH.cjs.map +1 -0
- package/dist/{chunk-JUJY3HQS.cjs → chunk-U37UTLP7.cjs} +19 -19
- package/dist/{chunk-JUJY3HQS.cjs.map → chunk-U37UTLP7.cjs.map} +1 -1
- package/dist/{chunk-2DIOV7BR.js → chunk-UPN6EFOM.js} +4 -4
- package/dist/{chunk-OWMLWJQY.cjs → chunk-VPVOJD5X.cjs} +2432 -1502
- package/dist/chunk-VPVOJD5X.cjs.map +1 -0
- package/dist/{chunk-4SMRQ4SN.js → chunk-WBL5Y4PS.js} +3 -3
- package/dist/{chunk-FP4H6Y5O.js → chunk-WPYPSIY2.js} +3 -3
- package/dist/{chunk-R5WJJL4V.js → chunk-X5X43HFV.js} +5 -5
- package/dist/{chunk-DEHZ5CTC.js → chunk-XTWKDMCG.js} +2 -2
- package/dist/components/case-studies/index.cjs +9 -9
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/chat/index.js +2 -2
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +6 -6
- package/dist/components/docs/index.js +5 -5
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/faq/index.js +3 -3
- package/dist/components/features/captions-url.cjs +12 -0
- package/dist/components/features/captions-url.cjs.map +1 -0
- package/dist/components/features/captions-url.js +10 -0
- package/dist/components/features/captions-url.js.map +1 -0
- package/dist/components/features/card-hit-layer.d.ts +40 -0
- package/dist/components/features/card-hit-layer.d.ts.map +1 -0
- package/dist/components/features/floating-walkthrough-video.d.ts +71 -0
- package/dist/components/features/floating-walkthrough-video.d.ts.map +1 -0
- package/dist/components/features/index.cjs +11 -3
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.d.ts +4 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +12 -4
- package/dist/components/features/use-walkthrough-video.d.ts +16 -0
- package/dist/components/features/use-walkthrough-video.d.ts.map +1 -0
- package/dist/components/features/video-bites-strip.d.ts.map +1 -1
- package/dist/components/features/video-center-badge.d.ts.map +1 -1
- package/dist/components/features/video-hover-preview.d.ts +68 -0
- package/dist/components/features/video-hover-preview.d.ts.map +1 -0
- package/dist/components/features/video.d.ts +78 -40
- package/dist/components/features/video.d.ts.map +1 -1
- package/dist/components/form.d.ts +0 -1
- package/dist/components/form.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +21 -21
- package/dist/components/help-center-pages/index.js +12 -12
- package/dist/components/index.cjs +163 -155
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +18 -10
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +3 -3
- package/dist/components/navigation/index.js +2 -2
- package/dist/components/onboarding-guides/index.cjs +6 -6
- package/dist/components/onboarding-guides/index.js +5 -5
- package/dist/components/related-content/index.cjs +4 -4
- package/dist/components/related-content/index.js +3 -3
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/tickets/index.js +5 -5
- package/dist/components/ui/button/button-styles.d.ts +2 -0
- package/dist/components/ui/button/button-styles.d.ts.map +1 -1
- package/dist/components/ui/button/button.d.ts +2 -2
- package/dist/components/ui/button/button.d.ts.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +50 -50
- package/dist/components/ui/file-manager/index.js +1 -1
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/index.js +2 -2
- package/dist/components/ui/page-actions.d.ts +2 -1
- package/dist/components/ui/page-actions.d.ts.map +1 -1
- package/dist/index.cjs +27 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +28 -4
- package/dist/types/supabase.d.ts +80 -0
- package/dist/types/supabase.d.ts.map +1 -1
- package/dist/types/video-processing.d.ts +1 -1
- package/dist/types/video-processing.d.ts.map +1 -1
- package/dist/utils/announcement-storage.d.ts +1 -1
- package/dist/utils/announcement-storage.d.ts.map +1 -1
- package/dist/utils/dismiss-cookie.d.ts +27 -0
- package/dist/utils/dismiss-cookie.d.ts.map +1 -0
- package/dist/utils/dismissal-storage.d.ts +19 -0
- package/dist/utils/dismissal-storage.d.ts.map +1 -0
- package/dist/utils/index.cjs +48 -10
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -11
- package/dist/utils/index.js.map +1 -1
- package/package.json +8 -2
- package/src/.index.md +39 -32
- package/src/.platform-domains.md +65 -0
- package/src/assets/.fae-avatar.md +33 -0
- package/src/assets/.index.md +15 -9
- package/src/components/.agent-mark.md +31 -0
- package/src/components/.announcement-bar.md +47 -35
- package/src/components/.calendar.md +19 -15
- package/src/components/.categories-cart.md +34 -30
- package/src/components/.category-card.md +33 -33
- package/src/components/.chart.md +38 -40
- package/src/components/.command.md +47 -23
- package/src/components/.comment-card.md +31 -26
- package/src/components/.content-loading-container.md +45 -20
- package/src/components/.context-menu.md +45 -31
- package/src/components/.date-time-picker.md +36 -30
- package/src/components/.empty-state.md +31 -31
- package/src/components/.faq-accordion.md +20 -30
- package/src/components/.filter-chip.md +36 -33
- package/src/components/.footer-waitlist-button.md +27 -21
- package/src/components/.footer.md +39 -24
- package/src/components/.form.md +32 -20
- package/src/components/.hero-image-uploader.md +35 -31
- package/src/components/.icon-display.md +53 -0
- package/src/components/.image-cropper.md +34 -33
- package/src/components/.index.md +25 -29
- package/src/components/.logs-list.md +27 -23
- package/src/components/.media-carousel.md +47 -26
- package/src/components/.metric-value.md +27 -24
- package/src/components/.msp-display.md +29 -23
- package/src/components/.open-source-features.md +23 -26
- package/src/components/.pagination.md +44 -39
- package/src/components/.persistent-filter-controls.md +61 -28
- package/src/components/.pricing-display.md +34 -33
- package/src/components/.results-count.md +33 -20
- package/src/components/.smooth-accordion.md +24 -20
- package/src/components/.social-icon-row.md +33 -21
- package/src/components/.sonner.md +40 -25
- package/src/components/.steps.md +39 -25
- package/src/components/.tool-icon.md +34 -21
- package/src/components/.unified-filter-logic.md +32 -36
- package/src/components/.user-display.md +33 -28
- package/src/components/.user-summary-stub.md +40 -33
- package/src/components/.vendor-display-button.md +17 -15
- package/src/components/.vendor-icon.md +17 -25
- package/src/components/.vendor-tag.md +39 -34
- package/src/components/.why-it-matters.md +15 -11
- package/src/components/.yes-no-display.md +36 -31
- package/src/components/authors/.author-detail-view.md +50 -0
- package/src/components/case-studies/.index.md +26 -0
- package/src/components/case-studies/.share-experience-section.md +45 -0
- package/src/components/chat/.approval-batch-message.md +48 -33
- package/src/components/chat/.approval-request-message.md +37 -26
- package/src/components/chat/.chat-archive-page.md +56 -0
- package/src/components/chat/.chat-attachment-bar.md +32 -40
- package/src/components/chat/.chat-composer.md +43 -0
- package/src/components/chat/.chat-container.md +41 -25
- package/src/components/chat/.chat-context-memory-bar.md +53 -0
- package/src/components/chat/.chat-context-picker.md +89 -0
- package/src/components/chat/.chat-header-icon-button.md +43 -0
- package/src/components/chat/.chat-header-search-field.md +51 -0
- package/src/components/chat/.chat-input.md +63 -30
- package/src/components/chat/.chat-list-empty-state.md +44 -0
- package/src/components/chat/.chat-message-enhanced.md +29 -31
- package/src/components/chat/.chat-message-list.md +34 -44
- package/src/components/chat/.chat-message-row.md +56 -0
- package/src/components/chat/.chat-message-skeleton.md +32 -26
- package/src/components/chat/.chat-panel-header-mobile.md +46 -0
- package/src/components/chat/.chat-panel-header.md +80 -0
- package/src/components/chat/.chat-sidebar-skeleton.md +31 -30
- package/src/components/chat/.chat-sidebar.md +36 -29
- package/src/components/chat/.chat-ticket-list.md +38 -23
- package/src/components/chat/.chat-typing-indicator.md +37 -19
- package/src/components/chat/.context-compaction-display.md +19 -15
- package/src/components/chat/.context-items-list.md +57 -0
- package/src/components/chat/.embeddable-chat.md +57 -66
- package/src/components/chat/.error-message-display.md +40 -22
- package/src/components/chat/.guide-mode-banner.md +41 -0
- package/src/components/chat/.guide-welcome.md +43 -0
- package/src/components/chat/.index.md +26 -21
- package/src/components/chat/.mingo-chat-history.md +63 -0
- package/src/components/chat/.mingo-chat-modals.md +44 -0
- package/src/components/chat/.mingo-history-rail.md +63 -0
- package/src/components/chat/.mingo-info-card.md +59 -0
- package/src/components/chat/.mingo-onboarding-card.md +21 -27
- package/src/components/chat/.mingo-welcome.md +60 -0
- package/src/components/chat/.model-display.md +33 -25
- package/src/components/chat/.msp-organization-card-skeleton.md +44 -0
- package/src/components/chat/.msp-organization-card.md +51 -0
- package/src/components/chat/.nav-link-anchor-via-runtime.md +36 -25
- package/src/components/chat/.quick-action-chip.md +60 -0
- package/src/components/chat/.quick-action-marquee.md +53 -0
- package/src/components/chat/.quick-action-wall.md +68 -0
- package/src/components/chat/.remark-mention-chips.md +41 -0
- package/src/components/chat/.slash-command-suggestions.md +30 -36
- package/src/components/chat/.source-action-button.md +28 -25
- package/src/components/chat/.tool-call-blocks.md +18 -30
- package/src/components/chat/.tool-execution-display.md +29 -34
- package/src/components/chat/entity-cards/.admin-content-card.md +29 -22
- package/src/components/chat/entity-cards/.blog-card.md +44 -33
- package/src/components/chat/entity-cards/.blog-image-placeholder.md +20 -18
- package/src/components/chat/entity-cards/.case-study-card.md +24 -33
- package/src/components/chat/entity-cards/.chat-ticket-item.md +39 -22
- package/src/components/chat/entity-cards/.customer-interview-card.md +29 -32
- package/src/components/chat/entity-cards/.data-room-doc-card.md +21 -22
- package/src/components/chat/entity-cards/.dispatch.md +41 -24
- package/src/components/chat/entity-cards/.entity-author-card.md +36 -33
- package/src/components/chat/entity-cards/.entity-portrait-card.md +47 -0
- package/src/components/chat/entity-cards/.generic-entity-card.md +26 -25
- package/src/components/chat/entity-cards/.github-activity-card.md +35 -41
- package/src/components/chat/entity-cards/.hubspot-ticket-card.md +22 -28
- package/src/components/chat/entity-cards/.index.md +33 -44
- package/src/components/chat/entity-cards/.investor-update-card.md +36 -25
- package/src/components/chat/entity-cards/.onboarding-guide-card.md +20 -29
- package/src/components/chat/entity-cards/.product-release-card-defaults.md +26 -19
- package/src/components/chat/entity-cards/.program-card.md +30 -33
- package/src/components/chat/entity-cards/.roadmap-card.md +40 -31
- package/src/components/chat/entity-cards/.roadmap-vote-button.md +33 -36
- package/src/components/chat/entity-cards/.slack-message-card.md +31 -32
- package/src/components/chat/entity-cards/.use-cover-image-fallback.md +47 -0
- package/src/components/chat/entity-cards/.use-entity-card-link.md +51 -0
- package/src/components/chat/entity-cards/.use-entity-card-placeholder.md +47 -0
- package/src/components/chat/entity-cards/.what-i-shipped-card.md +43 -0
- package/src/components/chat/hooks/.index.md +33 -30
- package/src/components/chat/hooks/.use-chat-card-item.md +30 -17
- package/src/components/chat/hooks/.use-chat-dialog-manager.md +59 -0
- package/src/components/chat/hooks/.use-chat-identity.md +37 -25
- package/src/components/chat/hooks/.use-chunk-catchup.md +53 -36
- package/src/components/chat/hooks/.use-empty-state-config.md +39 -0
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +65 -30
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
- package/src/components/chat/hooks/.use-nats-dialog-subscription.md +66 -50
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +58 -31
- package/src/components/chat/hooks/.use-scripted-stream.md +46 -0
- package/src/components/chat/hooks/.use-slash-commands.md +32 -25
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +32 -21
- package/src/components/chat/hooks/.use-unified-chat.md +45 -35
- package/src/components/chat/types/.api.types.md +49 -41
- package/src/components/chat/types/.chat.types.md +56 -34
- package/src/components/chat/types/.component.types.md +36 -36
- package/src/components/chat/types/.context-item.types.md +61 -0
- package/src/components/chat/types/.index.md +32 -17
- package/src/components/chat/types/.message.types.md +44 -45
- package/src/components/chat/types/.network.types.md +46 -46
- package/src/components/chat/types/.processing.types.md +49 -37
- package/src/components/chat/types/.unified-chat-state.types.md +41 -26
- package/src/components/chat/types/entities/.content-ref.md +20 -31
- package/src/components/chat/types/entities/.investor-update.md +14 -16
- package/src/components/chat/types/entities/.onboarding-guide.md +35 -34
- package/src/components/chat/types/entities/.program-types.md +55 -43
- package/src/components/chat/utils/.chip-action-class.md +17 -19
- package/src/components/chat/utils/.chip-styles.md +18 -18
- package/src/components/chat/utils/.chunk-parser.md +48 -37
- package/src/components/chat/utils/.compact-card-classes.md +33 -35
- package/src/components/chat/utils/.execute-navigation.md +49 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +9 -12
- package/src/components/chat/utils/.history-merge.md +65 -0
- package/src/components/chat/utils/.icon-library.md +33 -31
- package/src/components/chat/utils/.icon-registry.md +44 -0
- package/src/components/chat/utils/.index.md +37 -33
- package/src/components/chat/utils/.is-cross-origin-url.md +26 -22
- package/src/components/chat/utils/.message-segment-accumulator.md +46 -25
- package/src/components/chat/utils/.nav-anchor-props.md +29 -34
- package/src/components/chat/utils/.nav-click-handler.md +29 -33
- package/src/components/chat/utils/.process-historical-messages.md +29 -33
- package/src/components/chat/utils/.scripted-stream.md +52 -0
- package/src/components/chat/utils/.source-row-cta.md +32 -31
- package/src/components/chat/utils/.tool-call-helpers.md +25 -17
- package/src/components/contact/.contact-form.md +24 -19
- package/src/components/docs/.doc-navigation-context.md +49 -0
- package/src/components/docs/.doc-viewer.md +64 -0
- package/src/components/docs/.docs-hub-page.md +49 -0
- package/src/components/docs/.index.md +51 -0
- package/src/components/docs/.skeletons.md +47 -0
- package/src/components/docs/.use-docs-resolve-link.md +61 -0
- package/src/components/docs/.use-document-tree.md +83 -0
- package/src/components/docs/.use-scroll-spy.md +58 -0
- package/src/components/embeds/.embed-container.md +45 -0
- package/src/components/embeds/.embed-iframe.md +51 -0
- package/src/components/embeds/.figma-embed.md +43 -0
- package/src/components/embeds/.file-download-card.md +47 -0
- package/src/components/embeds/.google-sheets-viewer.md +40 -0
- package/src/components/embeds/.index.md +58 -0
- package/src/components/embeds/.linkedin-embed-client.md +50 -0
- package/src/components/embeds/.markdown-image.md +40 -0
- package/src/components/embeds/.og-link-preview.md +54 -0
- package/src/components/embeds/.pdf-viewer.md +43 -0
- package/src/components/embeds/.reddit-embed-client.md +40 -0
- package/src/components/embeds/.rich-markdown-runtime.md +53 -0
- package/src/components/embeds/.twitter-embed-client.md +44 -0
- package/src/components/faq/.faq-document-page.md +68 -0
- package/src/components/faq/.faq-section.md +55 -0
- package/src/components/faq/.index.md +29 -0
- package/src/components/faq/.json-ld.md +48 -0
- package/src/components/features/.array-entry-manager.md +32 -24
- package/src/components/features/.auth-providers-list.md +33 -32
- package/src/components/features/.captions-url.md +43 -0
- package/src/components/features/.cards-strip.md +48 -0
- package/src/components/features/.changelog-manager.md +17 -20
- package/src/components/features/.command-box.md +11 -16
- package/src/components/features/.entity-summary-editor.md +20 -15
- package/src/components/features/.entity-tag-badges.md +43 -0
- package/src/components/features/.entity-video-section.md +31 -41
- package/src/components/features/.figma-prototype-viewer.md +55 -37
- package/src/components/features/.filters-dropdown.md +14 -13
- package/src/components/features/.highlight-config-section.md +19 -16
- package/src/components/features/.highlight-video-combined-section.md +28 -19
- package/src/components/features/.highlight-video-preview.md +13 -11
- package/src/components/features/.highlight-video-section.md +26 -22
- package/src/components/features/.index.md +40 -36
- package/src/components/features/.media-gallery-manager.md +37 -35
- package/src/components/features/.mux-origins.md +46 -0
- package/src/components/features/.og-editor-preview.md +29 -24
- package/src/components/features/.os-type-badge-group.md +26 -18
- package/src/components/features/.os-type-badge.md +41 -24
- package/src/components/features/.paths-display.md +42 -25
- package/src/components/features/.platform-badge.md +26 -17
- package/src/components/features/.policy-configuration-panel.md +33 -31
- package/src/components/features/.provider-button.md +29 -20
- package/src/components/features/.push-button-selector.md +39 -41
- package/src/components/features/.release-media-manager.md +41 -34
- package/src/components/features/.section-selector.md +27 -16
- package/src/components/features/.select-button.md +21 -32
- package/src/components/features/.seo-editor-preview.md +49 -36
- package/src/components/features/.social-links-manager.md +40 -18
- package/src/components/features/.start-with-openframe-button.md +30 -32
- package/src/components/features/.status-filter-component.md +29 -38
- package/src/components/features/.tags-selector.md +25 -29
- package/src/components/features/.transcript-summary-editor.md +24 -18
- package/src/components/features/.use-video-warmup.md +47 -0
- package/src/components/features/.video-bites-display.md +36 -37
- package/src/components/features/.video-bites-shared.md +44 -0
- package/src/components/features/.video-bites-strip.md +63 -0
- package/src/components/features/.video-center-badge.md +38 -0
- package/src/components/features/.video-ratio-tabs.md +38 -31
- package/src/components/features/.video-source-selector.md +24 -27
- package/src/components/features/.video.md +35 -27
- package/src/components/features/.waitlist-form.md +39 -33
- package/src/components/features/.warning-block.md +53 -0
- package/src/components/features/ai-enrich/.AIEnrichSection.md +24 -25
- package/src/components/features/ai-enrich/.AIRequiredBadge.md +22 -21
- package/src/components/features/ai-enrich/.AIStatusIndicator.md +42 -35
- package/src/components/features/ai-enrich/.AIWarningsSection.md +23 -20
- package/src/components/features/ai-enrich/.ConfidenceBadge.md +35 -20
- package/src/components/features/auth/.auth-benefits-panel.md +48 -0
- package/src/components/features/auth/.auth-branding.md +51 -0
- package/src/components/features/auth/.auth-shell.md +51 -0
- package/src/components/features/auth/.back-to-login-link.md +48 -0
- package/src/components/features/auth/.complete-account-form.md +45 -0
- package/src/components/features/auth/.create-organization-form.md +53 -0
- package/src/components/features/auth/.index.md +48 -0
- package/src/components/features/auth/.invite-link-invalid-modal.md +42 -0
- package/src/components/features/auth/.login-form.md +42 -0
- package/src/components/features/auth/.openframe-sso-login-form.md +46 -0
- package/src/components/features/auth/.openframe-sso-signup-form.md +51 -0
- package/src/components/features/auth/.password-reset-form.md +57 -0
- package/src/components/features/auth/.sso-auth-shell.md +35 -0
- package/src/components/features/auth/.sso-providers.md +42 -0
- package/src/components/features/auth/.terms-agreement-label.md +28 -0
- package/src/components/features/board/.board-column-header.md +24 -18
- package/src/components/features/board/.board-column.md +32 -32
- package/src/components/features/board/.board-ticket-approval.md +42 -0
- package/src/components/features/board/.board.md +38 -38
- package/src/components/features/board/.index.md +35 -38
- package/src/components/features/board/.ticket-card.md +33 -36
- package/src/components/features/board/.types.md +38 -31
- package/src/components/features/card-hit-layer.tsx +84 -0
- package/src/components/features/floating-walkthrough-video.tsx +891 -0
- package/src/components/features/index.ts +4 -0
- package/src/components/features/notifications/.approval-request-notification-tile.md +45 -0
- package/src/components/features/notifications/.index.md +35 -31
- package/src/components/features/notifications/.notification-drawer.md +32 -19
- package/src/components/features/notifications/.notification-popups.md +51 -0
- package/src/components/features/notifications/.notification-tile.md +43 -27
- package/src/components/features/notifications/.notifications-context.md +42 -45
- package/src/components/features/notifications/.types.md +51 -31
- package/src/components/features/ticket-status-config-list/.ticket-status-config-list.md +51 -0
- package/src/components/features/time-tracker/.index.md +48 -0
- package/src/components/features/time-tracker/.time-tracker-context.md +55 -0
- package/src/components/features/time-tracker/.time-tracker-header-button.md +51 -0
- package/src/components/features/time-tracker/.time-tracker-panel.md +58 -0
- package/src/components/features/time-tracker/.types.md +51 -0
- package/src/components/features/time-tracker/.use-tracker-clock.md +32 -0
- package/src/components/features/use-walkthrough-video.ts +70 -0
- package/src/components/features/video-bites-strip.tsx +46 -146
- package/src/components/features/video-center-badge.tsx +11 -2
- package/src/components/features/video-hover-preview.tsx +201 -0
- package/src/components/features/video.tsx +368 -73
- package/src/components/help-center-pages/.delivery-page.md +51 -0
- package/src/components/help-center-pages/.index.md +51 -0
- package/src/components/help-center-pages/.onboarding-guides-catalog-page.md +53 -0
- package/src/components/help-center-pages/.product-releases-list-page.md +51 -0
- package/src/components/help-center-pages/.roadmap-page.md +46 -0
- package/src/components/icons/.figma-icon.md +13 -7
- package/src/components/icons/.index.md +26 -22
- package/src/components/icons/.vendor-directory-icon.md +30 -18
- package/src/components/icons/.x-logo.md +26 -10
- package/src/components/icons-v2-generated/.index.md +30 -41
- package/src/components/icons-v2-generated/brand-logos/.index.md +25 -19
- package/src/components/icons-v2-generated/communication/.index.md +26 -30
- package/src/components/icons-v2-generated/logos/.flamingo-logo-icon.md +41 -0
- package/src/components/layout/.article-detail-layout.md +32 -21
- package/src/components/layout/.page-container.md +25 -23
- package/src/components/layout/.page-heading.md +48 -0
- package/src/components/layout/.page-layout.md +30 -25
- package/src/components/layout/.title-block.md +43 -24
- package/src/components/loading/.card-skeleton.md +28 -35
- package/src/components/loading/.category-card-skeleton.md +25 -23
- package/src/components/loading/.device-card-skeleton.md +22 -15
- package/src/components/loading/.margin-report-skeleton.md +30 -35
- package/src/components/loading/.openmsp-heartbeat.md +30 -32
- package/src/components/loading/.organization-card-skeleton.md +22 -25
- package/src/components/loading/.organization-icon-skeleton.md +39 -27
- package/src/components/loading/.page-layout-skeleton.md +50 -28
- package/src/components/loading/.unified-skeleton.md +37 -40
- package/src/components/loading/.users-grid-skeleton.md +19 -38
- package/src/components/navigation/.app-header.md +35 -28
- package/src/components/navigation/.app-layout-context.md +48 -0
- package/src/components/navigation/.app-layout-drawer.md +56 -0
- package/src/components/navigation/.app-layout.md +24 -23
- package/src/components/navigation/.header-mingo-button.md +46 -0
- package/src/components/navigation/.header-organization-filter.md +32 -18
- package/src/components/navigation/.header.md +24 -31
- package/src/components/navigation/.index.md +36 -50
- package/src/components/navigation/.mingo-ai-button.md +41 -0
- package/src/components/navigation/.mobile-burger-menu.md +29 -29
- package/src/components/navigation/.mobile-nav-panel.md +41 -49
- package/src/components/navigation/.multi-level-navigation.md +76 -0
- package/src/components/navigation/.navigation-sidebar-item.md +14 -14
- package/src/components/navigation/.navigation-sidebar.md +30 -23
- package/src/components/navigation/.sliding-sidebar.md +30 -25
- package/src/components/navigation/.sticky-section-nav.md +23 -21
- package/src/components/onboarding-guides/.index.md +40 -0
- package/src/components/onboarding-guides/.onboarding-guide-detail-view.md +55 -0
- package/src/components/onboarding-guides/.onboarding-guides-catalog-skeleton.md +33 -0
- package/src/components/onboarding-guides/.onboarding-guides-catalog-view.md +50 -0
- package/src/components/onboarding-guides/hooks/.use-onboarding-guides.md +54 -0
- package/src/components/platform/.CveLink.md +28 -17
- package/src/components/platform/.ScriptArguments.md +18 -23
- package/src/components/platform/.ScriptInfoSection.md +27 -21
- package/src/components/platform/.ShellTypeBadge.md +34 -18
- package/src/components/platform/.SoftwareInfo.md +23 -21
- package/src/components/platform/.ToolBadge.md +18 -16
- package/src/components/profile/.ProfileLoadingSkeleton.md +24 -23
- package/src/components/related-content/.index.md +41 -0
- package/src/components/related-content/.related-content-section.md +62 -0
- package/src/components/shared/.article-author-byline.md +56 -0
- package/src/components/shared/.detail-page-skeleton.md +32 -43
- package/src/components/shared/.media-gallery-strip.md +43 -0
- package/src/components/shared/delivery/.delivery-lists.md +20 -19
- package/src/components/shared/delivery/.delivery-row.md +24 -20
- package/src/components/shared/delivery/.delivery-table.md +20 -22
- package/src/components/shared/dev-section/.dev-card-row.md +28 -36
- package/src/components/shared/dev-section/.dev-section-page.md +36 -25
- package/src/components/shared/dev-section/.dev-section-view.md +32 -22
- package/src/components/shared/doc-search/.doc-search-bar.md +58 -0
- package/src/components/shared/doc-search/.doc-search-result-row.md +50 -0
- package/src/components/shared/doc-search/.format-relative-path.md +30 -0
- package/src/components/shared/doc-search/.index.md +46 -0
- package/src/components/shared/doc-search/.map-doc-search-results.md +44 -0
- package/src/components/shared/doc-search/.resolve-search-result-action.md +52 -0
- package/src/components/shared/doc-search/.types.md +49 -0
- package/src/components/shared/doc-search/.use-doc-search.md +66 -0
- package/src/components/shared/legal-document/.legal-document-page.md +26 -20
- package/src/components/shared/legal-document/.use-legal-docs.md +36 -30
- package/src/components/shared/onboarding/.onboarding-step-card.md +24 -16
- package/src/components/shared/onboarding/.onboarding-walkthrough.md +42 -28
- package/src/components/shared/product-release/.index.md +33 -24
- package/src/components/shared/product-release/.product-release-card-skeleton.md +22 -28
- package/src/components/shared/product-release/.product-release-card.md +28 -29
- package/src/components/shared/product-release/.product-releases-view.md +49 -0
- package/src/components/shared/product-release/.release-detail-page.md +30 -15
- package/src/components/shared/roadmap/.index.md +29 -24
- package/src/components/shared/roadmap/.roadmap-grid.md +43 -54
- package/src/components/shared/roadmap/.roadmap-view.md +41 -0
- package/src/components/shared/roadmap/.use-roadmap-voting.md +27 -17
- package/src/components/switch.tsx +1 -1
- package/src/components/tickets/.help-center-card.md +32 -28
- package/src/components/tickets/.help-center-create-form.md +34 -22
- package/src/components/tickets/.help-center-list.md +36 -25
- package/src/components/tickets/.index.md +30 -45
- package/src/components/tickets/.ticket-center.md +31 -38
- package/src/components/tickets/.ticket-detail-drawer.md +20 -30
- package/src/components/tickets/.ticket-open-form.md +24 -26
- package/src/components/tickets/.ticket-reply-composer.md +51 -0
- package/src/components/tickets/.ticket-row.md +26 -11
- package/src/components/tickets/.types.md +56 -38
- package/src/components/tickets/hooks/.use-ticket-actions.md +60 -47
- package/src/components/tickets/hooks/.use-ticket-engagements.md +27 -27
- package/src/components/tickets/hooks/.use-tickets-list.md +24 -30
- package/src/components/ui/.accordion.md +28 -21
- package/src/components/ui/.actions-menu.md +36 -54
- package/src/components/ui/.ai-generated-badge.md +25 -0
- package/src/components/ui/.alert-dialog.md +21 -16
- package/src/components/ui/.alert.md +30 -25
- package/src/components/ui/.allowed-domains-input.md +26 -15
- package/src/components/ui/.announcement-bar-view.md +46 -0
- package/src/components/ui/.autocomplete.md +40 -27
- package/src/components/ui/.badge.md +34 -31
- package/src/components/ui/.brand-association-card.md +22 -18
- package/src/components/ui/.breadcrumb.md +18 -14
- package/src/components/ui/.bullet-list.md +35 -23
- package/src/components/ui/.card.md +47 -30
- package/src/components/ui/.checkbox-block.md +34 -22
- package/src/components/ui/.checkbox-with-description.md +18 -20
- package/src/components/ui/.chevron-button.md +29 -29
- package/src/components/ui/.circular-progress.md +30 -41
- package/src/components/ui/.color-preset-select.md +54 -0
- package/src/components/ui/.color-swatch.md +37 -0
- package/src/components/ui/.content-loader.md +34 -27
- package/src/components/ui/.crossfade-panels.md +50 -0
- package/src/components/ui/.cursor-pagination.md +38 -26
- package/src/components/ui/.dashboard-info-card.md +46 -27
- package/src/components/ui/.date-picker.md +52 -36
- package/src/components/ui/.device-card-compact.md +23 -20
- package/src/components/ui/.device-card.md +39 -30
- package/src/components/ui/.dialog.md +14 -14
- package/src/components/ui/.drawer.md +45 -39
- package/src/components/ui/.dropdown-button.md +41 -33
- package/src/components/ui/.dropdown-menu.md +40 -23
- package/src/components/ui/.duration-input.md +41 -0
- package/src/components/ui/.entity-image.md +32 -28
- package/src/components/ui/.error-state.md +30 -26
- package/src/components/ui/.fade-preview.md +44 -0
- package/src/components/ui/.field-wrapper.md +34 -23
- package/src/components/ui/.file-upload.md +30 -18
- package/src/components/ui/.filter-modal.md +30 -32
- package/src/components/ui/.filter-pill-row.md +58 -0
- package/src/components/ui/.floating-tooltip.md +27 -32
- package/src/components/ui/.hidden-tags-popup.md +18 -20
- package/src/components/ui/.highlight-card.md +36 -23
- package/src/components/ui/.honeypot-field.md +41 -0
- package/src/components/ui/.hover-dropdown.md +44 -31
- package/src/components/ui/.image-gallery-modal.md +28 -30
- package/src/components/ui/.image-uploader.md +39 -22
- package/src/components/ui/.index.md +33 -31
- package/src/components/ui/.info-card-row.md +50 -0
- package/src/components/ui/.info-card.md +27 -20
- package/src/components/ui/.info-row.md +30 -24
- package/src/components/ui/.info-section.md +63 -0
- package/src/components/ui/.input.md +29 -28
- package/src/components/ui/.label.md +34 -26
- package/src/components/ui/.markdown-editor.md +26 -25
- package/src/components/ui/.marquee-wall.md +64 -0
- package/src/components/ui/.menubar.md +50 -16
- package/src/components/ui/.modal-v2.md +41 -27
- package/src/components/ui/.modal.md +22 -19
- package/src/components/ui/.more-actions-menu.md +30 -24
- package/src/components/ui/.navigation-menu.md +40 -25
- package/src/components/ui/.organization-card.md +46 -27
- package/src/components/ui/.page-actions.md +55 -41
- package/src/components/ui/.page-loader.md +40 -23
- package/src/components/ui/.password-input.md +30 -0
- package/src/components/ui/.phone-input.md +20 -22
- package/src/components/ui/.portal-container.md +43 -0
- package/src/components/ui/.progress-bar.md +40 -27
- package/src/components/ui/.release-changelog-section.md +32 -26
- package/src/components/ui/.rich-markdown-renderer.md +45 -0
- package/src/components/ui/.scroll-fade.md +56 -0
- package/src/components/ui/.search-input.md +55 -37
- package/src/components/ui/.select.md +25 -26
- package/src/components/ui/.service-card.md +25 -19
- package/src/components/ui/.sheet.md +21 -21
- package/src/components/ui/.simple-markdown-renderer.md +36 -24
- package/src/components/ui/.slack-channel-chip.md +49 -0
- package/src/components/ui/.square-avatar.md +29 -26
- package/src/components/ui/.stacked-rows-panel.md +61 -0
- package/src/components/ui/.status-badge.md +30 -24
- package/src/components/ui/.status-indicator.md +35 -21
- package/src/components/ui/.tab-content.md +34 -22
- package/src/components/ui/.tab-navigation.md +40 -50
- package/src/components/ui/.tab-selector.md +48 -31
- package/src/components/ui/.tabs.md +34 -21
- package/src/components/ui/.tag-search-input.md +20 -20
- package/src/components/ui/.tag-select-dropdown.md +59 -0
- package/src/components/ui/.tag.md +25 -43
- package/src/components/ui/.tags-input.md +31 -31
- package/src/components/ui/.textarea.md +32 -30
- package/src/components/ui/.ticket-attachments-list.md +36 -29
- package/src/components/ui/.ticket-info-section.md +37 -42
- package/src/components/ui/.ticket-status-config-row.md +66 -0
- package/src/components/ui/.ticket-status-tag.md +39 -35
- package/src/components/ui/.toaster.md +21 -15
- package/src/components/ui/.toggle.md +38 -37
- package/src/components/ui/.tooltip.md +16 -13
- package/src/components/ui/button/.button-styles.md +17 -18
- package/src/components/ui/button/.button.md +30 -37
- package/src/components/ui/button/.split-button.md +46 -23
- package/src/components/ui/button/button-styles.ts +13 -0
- package/src/components/ui/button/button.tsx +5 -0
- package/src/components/ui/data-table/.data-table-body.md +50 -35
- package/src/components/ui/data-table/.data-table-empty.md +17 -33
- package/src/components/ui/data-table/.data-table-header.md +43 -40
- package/src/components/ui/data-table/.data-table-row.md +31 -31
- package/src/components/ui/data-table/.types.md +23 -28
- package/src/components/ui/file-manager/.file-manager-breadcrumb.md +16 -24
- package/src/components/ui/file-manager/.file-manager-empty.md +23 -15
- package/src/components/ui/file-manager/.file-manager-skeleton.md +34 -36
- package/src/components/ui/file-manager/.file-manager-table-row.md +29 -29
- package/src/components/ui/file-manager/.file-manager-table.md +39 -24
- package/src/components/ui/no-data/.index.md +22 -0
- package/src/components/ui/no-data/.no-data-actions.md +29 -0
- package/src/components/ui/no-data/.no-data-message.md +37 -0
- package/src/components/ui/no-data/.no-data-styles.md +39 -0
- package/src/components/ui/no-data/.no-data.md +59 -0
- package/src/components/ui/page-actions.tsx +2 -1
- package/src/components/ui/query-report-table/.query-report-table-header.md +15 -15
- package/src/components/ui/query-report-table/.query-report-table-row.md +16 -16
- package/src/components/ui/query-report-table/.query-report-table.md +39 -24
- package/src/components/ui/table/.table-column-filter-dropdown.md +15 -9
- package/src/components/ui/table/.table-description-cell.md +13 -12
- package/src/components/ui/table/.table-empty-state.md +19 -20
- package/src/components/ui/table/.table-row.md +30 -20
- package/src/components/ui/table/.table-skeleton.md +32 -27
- package/src/components/ui/table/.table-timestamp-cell.md +24 -23
- package/src/components/ui/table/.table.md +43 -30
- package/src/components/ui/table/.types.md +49 -45
- package/src/components/ui/table/.use-table-motion.md +45 -0
- package/src/contexts/.chat-runtime-context.md +55 -26
- package/src/contexts/.endpoints-runtime-context.md +40 -44
- package/src/embed-shims/.next-navigation.md +38 -31
- package/src/hooks/.api-hooks.md +28 -21
- package/src/hooks/.index.md +30 -25
- package/src/hooks/.use-authed-image-src.md +38 -0
- package/src/hooks/.use-contact-submission.md +35 -36
- package/src/hooks/.use-humanity-signals.md +47 -0
- package/src/hooks/.use-near-viewport.md +30 -30
- package/src/hooks/.use-og-placeholder-url.md +57 -0
- package/src/hooks/.use-scroll-to-hash.md +46 -0
- package/src/hooks/.use-self-fetch.md +52 -0
- package/src/hooks/state/.flatten-schema.md +37 -29
- package/src/hooks/ui/.index.md +37 -25
- package/src/hooks/ui/.use-auto-limit-tags.md +55 -38
- package/src/hooks/ui/.use-deferred-error.md +44 -0
- package/src/hooks/ui/.use-focus-trap.md +59 -0
- package/src/hooks/ui/.use-header-height.md +37 -0
- package/src/hooks/ui/.use-horizontal-scrollbar.md +25 -34
- package/src/hooks/ui/.use-marquee-engine.md +73 -0
- package/src/hooks/ui/.use-notification-permission.md +49 -0
- package/src/hooks/ui/.use-reset-on-page-hidden.md +40 -0
- package/src/hooks/ui/.use-suppress-clone-focus.md +41 -0
- package/src/nats/.index.md +39 -0
- package/src/nats/.nats-provider.md +46 -0
- package/src/nats/.nats.md +38 -28
- package/src/nats/.shared-connection.md +56 -0
- package/src/nats/.use-nats-subscription.md +57 -0
- package/src/stories/.ActionsMenu.stories.md +57 -0
- package/src/stories/.Alert.stories.md +46 -0
- package/src/stories/.AnnouncementBar.stories.md +59 -32
- package/src/stories/.AppLayoutDrawer.stories.md +60 -0
- package/src/stories/.AppLayoutSidebar.stories.md +45 -0
- package/src/stories/.ApprovalBatchMessage.stories.md +46 -0
- package/src/stories/.ApprovalBatchMessageClient.stories.md +55 -0
- package/src/stories/.ApprovalRequestMessage.stories.md +50 -0
- package/src/stories/.ApprovalRequestMessageClient.stories.md +41 -0
- package/src/stories/.BlogCard.stories.md +52 -0
- package/src/stories/.Board.stories.md +25 -20
- package/src/stories/.Button.stories.md +35 -40
- package/src/stories/.CampaignCardAdmin.stories.md +38 -0
- package/src/stories/.CardsStrip.stories.md +39 -0
- package/src/stories/.CaseStudyCard.stories.md +41 -0
- package/src/stories/.ChatContainer.stories.md +41 -0
- package/src/stories/.ChatInlineVideoPill.stories.md +36 -0
- package/src/stories/.ChatMessageEnhanced.stories.md +51 -0
- package/src/stories/.ChatMingoInfoCards.stories.md +30 -0
- package/src/stories/.ChatTicketList.stories.md +38 -22
- package/src/stories/.ChatTypingIndicator.stories.md +47 -0
- package/src/stories/.CheckboxBlock.stories.md +34 -35
- package/src/stories/.ContextCompactionDisplay.stories.md +28 -0
- package/src/stories/.CustomerInterviewCard.stories.md +36 -0
- package/src/stories/.DashboardInfoCard.stories.md +40 -33
- package/src/stories/.DataRoomDocCard.stories.md +42 -0
- package/src/stories/.DataTable.stories.md +37 -32
- package/src/stories/.DatePicker.stories.md +34 -30
- package/src/stories/.EmbeddableChat.stories.md +45 -28
- package/src/stories/.EmptyState.stories.md +55 -0
- package/src/stories/.ErrorMessageDisplay.stories.md +45 -0
- package/src/stories/.FilterModal.stories.md +28 -22
- package/src/stories/.GenericEntityCard.stories.md +50 -0
- package/src/stories/.GitHubActivityCard.stories.md +41 -0
- package/src/stories/.GuideWelcome.stories.md +38 -0
- package/src/stories/.Header.stories.md +32 -22
- package/src/stories/.HubspotTicketCard.stories.md +41 -0
- package/src/stories/.InfoCard.stories.md +37 -26
- package/src/stories/.InfoCardRow.stories.md +48 -0
- package/src/stories/.InfoSection.stories.md +55 -0
- package/src/stories/.Input.stories.md +45 -35
- package/src/stories/.InvestorUpdateCard.stories.md +41 -0
- package/src/stories/.MarqueeWall.stories.md +53 -0
- package/src/stories/.MingoAiButton.stories.md +31 -0
- package/src/stories/.MingoChatModals.stories.md +47 -0
- package/src/stories/.MingoInfoCard.stories.md +50 -0
- package/src/stories/.MingoOnboardingCard.stories.md +19 -19
- package/src/stories/.MingoWelcome.stories.md +41 -0
- package/src/stories/.MobileNavPanel.stories.md +52 -0
- package/src/stories/.Modal.stories.md +19 -16
- package/src/stories/.MspOrganizationCard.stories.md +45 -0
- package/src/stories/.NotificationDrawer.stories.md +39 -28
- package/src/stories/.OSTypeBadge.stories.md +34 -25
- package/src/stories/.OnboardingGuideCard.stories.md +41 -0
- package/src/stories/.PageActions.stories.md +21 -21
- package/src/stories/.PageContainer.stories.md +29 -24
- package/src/stories/.PageLayout.stories.md +18 -35
- package/src/stories/.PolicyConfigurationPanel.stories.md +58 -0
- package/src/stories/.ProductReleaseCard.stories.md +39 -0
- package/src/stories/.ProgramCard.stories.md +51 -0
- package/src/stories/.QuickActionChip.stories.md +59 -0
- package/src/stories/.QuickActionMarquee.stories.md +51 -0
- package/src/stories/.QuickActionWall.stories.md +58 -0
- package/src/stories/.RoadmapCard.stories.md +41 -0
- package/src/stories/.ShellTypeBadge.stories.md +42 -22
- package/src/stories/.SlackMessageCard.stories.md +42 -0
- package/src/stories/.SlashCommandSuggestions.stories.md +21 -31
- package/src/stories/.SplitButton.stories.md +23 -25
- package/src/stories/.StackedRowsPanel.stories.md +65 -0
- package/src/stories/.TabSelector.stories.md +26 -38
- package/src/stories/.Tag.stories.md +32 -27
- package/src/stories/.ThinkingDisplay.stories.md +43 -0
- package/src/stories/.TicketCard.stories.md +60 -0
- package/src/stories/.TicketInfoSection.stories.md +28 -20
- package/src/stories/.TimeTracker.stories.md +35 -0
- package/src/stories/.Toaster.stories.md +26 -20
- package/src/stories/.ToolBadge.stories.md +34 -24
- package/src/stories/.ToolExecutionDisplay.stories.md +22 -20
- package/src/stories/.ToolExecutionDisplayClient.stories.md +33 -0
- package/src/stories/.VideoBitesStrip.stories.md +37 -0
- package/src/stories/.WarningBlock.stories.md +51 -0
- package/src/stories/__fixtures__/.chat-card-decorator.md +39 -0
- package/src/stories/__fixtures__/.chat-cards.md +57 -0
- package/src/stories/auth/.CompleteAccount.stories.md +36 -0
- package/src/stories/auth/.CreateOrganization.stories.md +52 -0
- package/src/stories/auth/.InviteLinkInvalid.stories.md +21 -0
- package/src/stories/auth/.Login.stories.md +32 -0
- package/src/stories/auth/.OpenFrameSso.stories.md +58 -0
- package/src/stories/auth/.PasswordReset.stories.md +49 -0
- package/src/styles/ods-interaction-states.css +32 -0
- package/src/types/.announcement.md +67 -35
- package/src/types/.blog.md +44 -41
- package/src/types/.case-study.md +31 -17
- package/src/types/.content-ref.md +37 -0
- package/src/types/.customer-interview.md +38 -38
- package/src/types/.doc-source.md +87 -0
- package/src/types/.entity-author.md +53 -0
- package/src/types/.entity-platform.md +40 -0
- package/src/types/.index.md +23 -17
- package/src/types/.marketing.md +32 -35
- package/src/types/.navigation.md +31 -19
- package/src/types/.os.types.md +30 -31
- package/src/types/.permissions.md +49 -35
- package/src/types/.platform.md +44 -28
- package/src/types/.product-release.md +59 -42
- package/src/types/.shell.types.md +46 -30
- package/src/types/.supabase.md +43 -29
- package/src/types/.tool.types.md +43 -23
- package/src/types/.video-processing.md +40 -31
- package/src/types/supabase.ts +80 -0
- package/src/types/video-processing.ts +1 -0
- package/src/utils/.announcement-storage.md +49 -17
- package/src/utils/.app-config.md +22 -18
- package/src/utils/.brand-marks.md +46 -0
- package/src/utils/.cn.md +40 -29
- package/src/utils/.color-analysis.md +34 -25
- package/src/utils/.common.md +43 -23
- package/src/utils/.content-href.md +64 -0
- package/src/utils/.content-ref-groups.md +51 -0
- package/src/utils/.date-utils.md +46 -35
- package/src/utils/.doc-path-utils.md +38 -0
- package/src/utils/.doc-tree-nav.md +51 -0
- package/src/utils/.embed-authed-fetch.md +48 -32
- package/src/utils/.embed-content-fetch.md +36 -0
- package/src/utils/.embed-url-converters.md +52 -0
- package/src/utils/.extract-items.md +49 -0
- package/src/utils/.faq-anchor.md +48 -0
- package/src/utils/.format.md +73 -55
- package/src/utils/.humanity-signals.md +59 -0
- package/src/utils/.index.md +73 -31
- package/src/utils/.list-url.md +43 -0
- package/src/utils/.markdown-section-extractor.md +57 -0
- package/src/utils/.markdown-to-plain.md +51 -0
- package/src/utils/.media-carousel-utils-stub.md +42 -31
- package/src/utils/.ods-color-utils.md +84 -43
- package/src/utils/.og-placeholder.md +45 -0
- package/src/utils/.page-header-constants.md +26 -0
- package/src/utils/.platform-config.md +34 -34
- package/src/utils/.release-badge.md +47 -0
- package/src/utils/.release-cover.md +45 -0
- package/src/utils/.same-page-hash-nav.md +45 -0
- package/src/utils/.scroll-into-view.md +32 -25
- package/src/utils/.seo-description.md +37 -0
- package/src/utils/.seo-title.md +25 -0
- package/src/utils/.social-embed-cache.md +37 -0
- package/src/utils/.source-icons.md +30 -34
- package/src/utils/.suggestion-url.md +46 -0
- package/src/utils/.tool-utils.md +39 -24
- package/src/utils/.tree-builder.md +64 -0
- package/src/utils/.video-bite-id.md +42 -0
- package/src/utils/announcement-storage.ts +9 -18
- package/src/utils/dev-sections/.dev-section-param-keys.md +51 -0
- package/src/utils/dev-sections/.openframe-dev-sections.md +40 -28
- package/src/utils/dismiss-cookie.ts +55 -0
- package/src/utils/dismissal-storage.ts +38 -0
- package/src/utils/index.ts +3 -0
- package/dist/chunk-BBUEY73L.js.map +0 -1
- package/dist/chunk-G3UN2DXU.cjs.map +0 -1
- package/dist/chunk-OWMLWJQY.cjs.map +0 -1
- package/dist/chunk-SASR7SK5.js.map +0 -1
- package/src/components/chat/utils/.onboarding-icons.md +0 -28
- package/src/hooks/.use-og-placeholder.md +0 -51
- /package/dist/{chunk-MGKCS6KS.js.map → chunk-3WCARCI4.js.map} +0 -0
- /package/dist/{chunk-Y3Y2DLNO.js.map → chunk-6UGYBCEN.js.map} +0 -0
- /package/dist/{chunk-PSPWT2Q5.js.map → chunk-7LWXWXEY.js.map} +0 -0
- /package/dist/{chunk-VTSRDC4W.js.map → chunk-CKC3EAYT.js.map} +0 -0
- /package/dist/{chunk-ZRANZNEA.js.map → chunk-JJE5TUZK.js.map} +0 -0
- /package/dist/{chunk-66BNAFO6.js.map → chunk-JQIUBFHL.js.map} +0 -0
- /package/dist/{chunk-2DIOV7BR.js.map → chunk-UPN6EFOM.js.map} +0 -0
- /package/dist/{chunk-4SMRQ4SN.js.map → chunk-WBL5Y4PS.js.map} +0 -0
- /package/dist/{chunk-FP4H6Y5O.js.map → chunk-WPYPSIY2.js.map} +0 -0
- /package/dist/{chunk-R5WJJL4V.js.map → chunk-X5X43HFV.js.map} +0 -0
- /package/dist/{chunk-DEHZ5CTC.js.map → chunk-XTWKDMCG.js.map} +0 -0
|
@@ -1,40 +1,75 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 82efaf1b62d0b5740b96c9d4e6160b6a -->
|
|
2
|
+
React hook that manages a JetStream ephemeral OrderedConsumer subscription for a chat dialog stream, handling connection lifecycle, reconnection with sequence resumption, and NATS client sharing.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
### `useJetStreamDialogSubscription`
|
|
7
|
+
|
|
8
|
+
The single exported hook. Accepts `UseJetStreamDialogSubscriptionOptions` and returns `UseJetStreamDialogSubscriptionReturn`.
|
|
9
|
+
|
|
10
|
+
**State tracked:**
|
|
11
|
+
|
|
12
|
+
| State | Description |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `isConnected` | Whether the NATS WebSocket connection is live |
|
|
15
|
+
| `isSubscribed` | Whether the JetStream consumer is active |
|
|
16
|
+
| `reconnectionCount` | Increments on each successful reconnect |
|
|
17
|
+
| `currentStreamSeq` | Highest stream sequence number observed |
|
|
18
|
+
|
|
19
|
+
**Internal refs (stable across renders):**
|
|
20
|
+
|
|
21
|
+
- `clientRef` — shared `NatsClient` instance
|
|
22
|
+
- `subscriptionRef` — active `JetStreamSubscriptionHandle`
|
|
23
|
+
- `highestStreamSeqRef` — tracks max stream sequence for gap-free resume
|
|
24
|
+
|
|
25
|
+
**Effect order (declaration order matters):**
|
|
26
|
+
|
|
27
|
+
1. **Connection effect** — acquires/releases the shared NATS client when `enabled` or `wsUrl` changes; drives the `startConnectionLifecycle` which emits status events.
|
|
28
|
+
2. **Dialog reset effect** — resets `highestStreamSeqRef` when `dialogId` changes so a new dialog never inherits a stale start sequence.
|
|
29
|
+
3. **Subscription effect** — creates or recreates the ephemeral consumer when `isConnected`, `dialogId`, `topic`, `streamName`, or `reconnectionCount` change.
|
|
30
|
+
|
|
31
|
+
**Deliver policy logic:**
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
highestStreamSeqRef set → DeliverPolicy.ByStartSequence @ (highestSeq + 1)
|
|
35
|
+
optStartSeq provided → DeliverPolicy.ByStartSequence @ (optStartSeq + 1)
|
|
36
|
+
neither → DeliverPolicy.New (live tail only)
|
|
37
|
+
```
|
|
12
38
|
|
|
13
39
|
## Usage Example
|
|
14
40
|
|
|
15
41
|
```typescript
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
42
|
+
import { useJetStreamDialogSubscription } from './use-jetstream-dialog-subscription'
|
|
43
|
+
|
|
44
|
+
function ChatPane({ dialogId }: { dialogId: string }) {
|
|
45
|
+
const { isConnected, isSubscribed, currentStreamSeq } =
|
|
46
|
+
useJetStreamDialogSubscription({
|
|
47
|
+
enabled: true,
|
|
48
|
+
dialogId,
|
|
49
|
+
topic: 'chunks',
|
|
50
|
+
optStartSeq: 42, // resume after sequence 42
|
|
51
|
+
getNatsWsUrl: () => 'wss://nats.example.com',
|
|
52
|
+
onEvent: (payload, topic) => {
|
|
53
|
+
console.log(`[${topic}] seq=${payload.streamSeq}`, payload)
|
|
54
|
+
},
|
|
55
|
+
onConnect: () => console.log('NATS connected'),
|
|
56
|
+
onDisconnect: () => console.log('NATS disconnected'),
|
|
57
|
+
inactiveThresholdMs: 3 * 60_000, // 3-minute consumer TTL
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<p>
|
|
62
|
+
{isConnected ? '🟢' : '🔴'} connected |{' '}
|
|
63
|
+
{isSubscribed ? 'subscribed' : 'pending'} | seq {currentStreamSeq ?? '–'}
|
|
64
|
+
</p>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
35
67
|
```
|
|
36
68
|
|
|
37
|
-
##
|
|
69
|
+
## Reconnection Behavior
|
|
70
|
+
|
|
71
|
+
On reconnect the consumer is **not** recreated from `optStartSeq`; instead it resumes from `highestStreamSeqRef.current + 1`, guaranteeing no chunk is replayed or skipped. Only a `dialogId` change resets that pointer back to `optStartSeq` (or live-tail).
|
|
72
|
+
|
|
73
|
+
The hook retries only on `closed` / `disconnected` NATS status events. Protocol-level `-ERR` events (e.g. permission violations on `CONSUMER.CREATE`) are logged as warnings without triggering the reconnection loop.
|
|
38
74
|
|
|
39
|
-
|
|
40
|
-
- The shared connection singleton is module-scoped, so multiple hook instances sharing the same WebSocket URL reuse one NATS client.
|
|
75
|
+
> **Source:** [`use-jetstream-dialog-subscription.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-jetstream-dialog-subscription.ts)
|
|
@@ -1,52 +1,71 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 3fbde71f6e5fc7f9b4576423ebdb08e2 -->
|
|
2
|
+
Thin wrapper that wires together NATS subscriptions, real-time chunk processing, and dialog management into a single `UnifiedChatState` object for the Mingo/NATS transport mode of the unified chat surface.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `UseNatsChatAdapterConfig`
|
|
7
|
-
|
|
8
|
-
- `dialogId`
|
|
9
|
-
- `
|
|
10
|
-
- `publishUserMessage` — consumer-owned send callback (HTTP POST or NATS publish)
|
|
11
|
-
- `fetchChunks` — optional historical chunk fetcher for catchup
|
|
12
|
-
- `clientConfig` — optional NATS auth credentials
|
|
13
|
-
- `enableThinking` / `batchApprovalsEnabled` — processor feature flags
|
|
7
|
+
Primary configuration interface with two operational modes:
|
|
8
|
+
- **Bare-transport mode** — caller supplies `dialogId` explicitly and owns dialog lifecycle (original v0 API, used by Tauri Fae Chat)
|
|
9
|
+
- **Managed-dialog mode** — caller supplies `fetchDialogs` and related callbacks; the adapter owns dialog state, pagination, and history
|
|
14
10
|
|
|
15
|
-
###
|
|
16
|
-
- `active` — gates the live subscription; keeps message state alive while the mode is hidden
|
|
11
|
+
### Core Config Fields
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
| Field | Required | Description |
|
|
14
|
+
|-------|----------|-------------|
|
|
15
|
+
| `getNatsWsUrl` | ✅ | Returns the NATS WebSocket URL or `null` to suspend |
|
|
16
|
+
| `publishUserMessage` | ✅ | Consumer-owned send callback (HTTP POST or NATS publish) |
|
|
17
|
+
| `dialogId` | ❌ | Explicit dialog ID (bare-transport mode) |
|
|
18
|
+
| `fetchDialogs` | ❌ | Enables managed-dialog mode with sidebar support |
|
|
19
|
+
| `fetchDialogMessages` | ❌ | Populates history on dialog switch |
|
|
20
|
+
| `topics` | ❌ | NATS subject suffixes to tail (default: `['message']`) |
|
|
21
|
+
|
|
22
|
+
### Supporting Interfaces
|
|
23
|
+
|
|
24
|
+
- **`FetchDialogsParams`** / **`FetchDialogsResult`** — paginated dialog list with cursor-based pagination
|
|
25
|
+
- **`FetchDialogMessagesParams`** / **`FetchDialogMessagesResult`** — paginated message history with optional `tokenUsage`
|
|
26
|
+
|
|
27
|
+
### Composition Stack
|
|
20
28
|
|
|
21
29
|
```text
|
|
22
|
-
useNatsDialogSubscription →
|
|
23
|
-
|
|
24
|
-
useRealtimeChunkProcessor →
|
|
25
|
-
|
|
26
|
-
useChunkCatchup →
|
|
30
|
+
useNatsDialogSubscription → live NATS event tail
|
|
31
|
+
↓
|
|
32
|
+
useRealtimeChunkProcessor → chunk → MessageSegment[]
|
|
33
|
+
↓
|
|
34
|
+
useChunkCatchup → back-fills missed chunks on reconnect
|
|
35
|
+
↓
|
|
36
|
+
config.publishUserMessage → consumer-owned send (HTTP/NATS)
|
|
27
37
|
```
|
|
28
38
|
|
|
29
|
-
Returns a full `UnifiedChatState` object including `messages`, `isLoading`, `streamingPhase`, `sendMessage`, `stopMessage`, and `clearMessages`.
|
|
30
|
-
|
|
31
39
|
## Usage Example
|
|
32
40
|
|
|
33
41
|
```typescript
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
},
|
|
44
|
-
fetchChunks: ({ dialogId, after }) =>
|
|
45
|
-
fetch(`/api/chunks?dialogId=${dialogId}&after=${after}`).then(r => r.json()),
|
|
46
|
-
batchApprovalsEnabled: true,
|
|
42
|
+
// Bare-transport mode (v0 — Tauri Fae Chat)
|
|
43
|
+
const chatState = useNatsChatAdapter({
|
|
44
|
+
dialogId: activeDialogId,
|
|
45
|
+
getNatsWsUrl: () => `wss://nats.example.com`,
|
|
46
|
+
publishUserMessage: async (text, { dialogId }) => {
|
|
47
|
+
await fetch(`/api/chat/${dialogId}/message`, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
body: JSON.stringify({ text }),
|
|
50
|
+
})
|
|
47
51
|
},
|
|
48
|
-
|
|
49
|
-
)
|
|
52
|
+
topics: ['admin-message'],
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
// Managed-dialog mode (openframe-frontend / EmbeddableChat)
|
|
56
|
+
const chatState = useNatsChatAdapter({
|
|
57
|
+
getNatsWsUrl: () => natsUrl,
|
|
58
|
+
publishUserMessage: sendMessage,
|
|
59
|
+
fetchDialogs: async ({ cursor, limit }) => api.listDialogs({ cursor, limit }),
|
|
60
|
+
fetchDialogMessages: async ({ dialogId, cursor }) =>
|
|
61
|
+
api.getMessages(dialogId, { cursor }),
|
|
62
|
+
createDialog: () => api.createDialog(),
|
|
63
|
+
deleteDialog: (id) => api.deleteDialog(id),
|
|
64
|
+
approveRequest: (requestId) => api.approve(requestId),
|
|
65
|
+
rejectRequest: (requestId, reason) => api.reject(requestId, reason),
|
|
66
|
+
})
|
|
50
67
|
```
|
|
51
68
|
|
|
52
|
-
> **Note:** `
|
|
69
|
+
> **Note:** Set `topics: ['admin-message']` for Mingo/admin deployments. The default `'message'` topic is for Fae client-chat. Mismatched topics cause the assistant to hang in the `thinking` phase indefinitely.
|
|
70
|
+
|
|
71
|
+
**Source:** [`use-nats-chat-adapter.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-nats-chat-adapter.ts)
|
|
@@ -1,65 +1,81 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 33e3e72c7a8bed6ac4ea84dd9600a0c6 -->
|
|
2
|
+
React hook that manages a NATS WebSocket subscription for a specific dialog, handling connection lifecycle, automatic reconnection, and multi-topic message subscriptions.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `useNatsDialogSubscription(options)`
|
|
7
|
-
The primary exported hook that manages the full lifecycle of a NATS dialog subscription.
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
Primary hook that establishes and maintains a shared NATS client connection and subscribes to one or more topics scoped to a `dialogId`.
|
|
9
|
+
|
|
10
|
+
**Options (`UseNatsDialogSubscriptionOptions`):**
|
|
10
11
|
|
|
11
12
|
| Option | Description |
|
|
12
|
-
|
|
13
|
-
| `enabled` |
|
|
14
|
-
| `dialogId` |
|
|
15
|
-
| `topics` | Array of `NatsMessageType` values
|
|
16
|
-
| `onEvent` | Callback fired
|
|
17
|
-
| `onConnect` / `onDisconnect` |
|
|
18
|
-
| `onSubscribed` | Fired
|
|
19
|
-
| `onBeforeReconnect` |
|
|
20
|
-
| `getNatsWsUrl` |
|
|
21
|
-
| `clientConfig` |
|
|
22
|
-
| `reconnectionBackoff` |
|
|
23
|
-
|
|
24
|
-
**Returns (`UseNatsDialogSubscriptionReturn`):**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
13
|
+
|---|---|
|
|
14
|
+
| `enabled` | Enables/disables the connection |
|
|
15
|
+
| `dialogId` | Target dialog ID; topics are subscribed as `chat.<dialogId>.<topic>` |
|
|
16
|
+
| `topics` | Array of `NatsMessageType` values (defaults to `['message']`) |
|
|
17
|
+
| `onEvent` | Callback fired with each decoded JSON message and its topic type |
|
|
18
|
+
| `onConnect` / `onDisconnect` | Connection lifecycle callbacks |
|
|
19
|
+
| `onSubscribed` | Fired once all topic subscriptions are active |
|
|
20
|
+
| `onBeforeReconnect` | Called before each reconnection attempt |
|
|
21
|
+
| `getNatsWsUrl` | Function returning the current WebSocket URL |
|
|
22
|
+
| `clientConfig` | NATS client credentials (`name`, `user`, `pass`) |
|
|
23
|
+
| `reconnectionBackoff` | Backoff strategy for reconnection attempts |
|
|
24
|
+
|
|
25
|
+
**Returns (`UseNatsDialogSubscriptionReturn`):**
|
|
26
|
+
|
|
27
|
+
| Field | Type | Description |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `isConnected` | `boolean` | Whether the NATS client is currently connected |
|
|
30
|
+
| `isSubscribed` | `boolean` | Whether topic subscriptions are active |
|
|
31
|
+
| `reconnectionCount` | `number` | Number of reconnections since mount |
|
|
32
|
+
|
|
33
|
+
**Key implementation details:**
|
|
34
|
+
- Resolves the WebSocket URL synchronously each render to avoid re-running effects on callback identity changes (e.g. silent token rotations)
|
|
35
|
+
- Stabilizes all callbacks via `useRef` to prevent unnecessary subscription teardowns
|
|
36
|
+
- Joins `topics` to a string key (`topicsKey`) so the subscription effect only re-runs when topic content changes, not on inline array re-allocations
|
|
37
|
+
- Uses a shared NATS client pool (`acquireClient` / `releaseClient`) — multiple hook instances sharing the same URL reuse the same connection
|
|
38
|
+
|
|
39
|
+
### `buildNatsWsUrl(apiBaseUrl, options?)`
|
|
40
|
+
|
|
41
|
+
Utility that constructs a NATS WebSocket URL from an HTTP/HTTPS base URL.
|
|
28
42
|
|
|
29
43
|
## Usage Example
|
|
30
44
|
|
|
31
45
|
```typescript
|
|
32
|
-
import {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
import {
|
|
47
|
+
useNatsDialogSubscription,
|
|
48
|
+
buildNatsWsUrl,
|
|
49
|
+
} from './use-nats-dialog-subscription'
|
|
50
|
+
|
|
51
|
+
function DialogListener({ dialogId, token }: { dialogId: string; token: string }) {
|
|
52
|
+
const { isConnected, isSubscribed, reconnectionCount } =
|
|
53
|
+
useNatsDialogSubscription({
|
|
54
|
+
enabled: true,
|
|
55
|
+
dialogId,
|
|
56
|
+
topics: ['message', 'typing'],
|
|
57
|
+
getNatsWsUrl: () =>
|
|
58
|
+
buildNatsWsUrl('https://api.example.com', {
|
|
59
|
+
token,
|
|
60
|
+
includeAuthParam: true,
|
|
61
|
+
source: 'dashboard',
|
|
62
|
+
}),
|
|
63
|
+
onEvent: (payload, topic) => {
|
|
64
|
+
console.log(`[${topic}]`, payload)
|
|
65
|
+
},
|
|
66
|
+
onConnect: () => console.log('NATS connected'),
|
|
67
|
+
onDisconnect: () => console.log('NATS disconnected'),
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<div>
|
|
72
|
+
Connected: {String(isConnected)} | Subscribed: {String(isSubscribed)} |
|
|
73
|
+
Reconnections: {reconnectionCount}
|
|
74
|
+
</div>
|
|
75
|
+
)
|
|
58
76
|
}
|
|
59
77
|
```
|
|
60
78
|
|
|
61
|
-
##
|
|
79
|
+
## Source
|
|
62
80
|
|
|
63
|
-
-
|
|
64
|
-
- Callbacks (`onEvent`, `onConnect`, etc.) are stored in stable refs, so they never trigger reconnection when their identity changes.
|
|
65
|
-
- The shared connection is scoped per WebSocket URL — switching URLs tears down the old connection before establishing a new one.
|
|
81
|
+
[`use-nats-dialog-subscription.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-nats-dialog-subscription.ts)
|
|
@@ -1,50 +1,77 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 681c783784fdc89f0c86eb3e539c482b -->
|
|
2
|
+
Processes real-time NATS streaming chunks into structured message segments, managing streaming state, approval flows, direct-mode barriers, and tool execution events for AI assistant chat interfaces.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|--------|------|-------------|
|
|
8
|
-
| `useRealtimeChunkProcessor` | Hook | Primary hook for processing NATS stream chunks into UI-ready message segments |
|
|
9
|
-
| `accumulatorRef` | Internal Ref | Holds a `MessageSegmentAccumulator` instance that tracks and builds segments across chunk events |
|
|
10
|
-
| `isInStreamRef` | Internal Ref | Tracks whether a `MESSAGE_START`/`MESSAGE_END` boundary is active |
|
|
11
|
-
| `hasEverStreamedRef` | Internal Ref | Distinguishes cold-start vs. resumed-dialog continuation mode |
|
|
12
|
-
| `pendingEscalatedRef` | Internal Ref | Tracks escalated (non-display) approval requests awaiting results |
|
|
6
|
+
### `useRealtimeChunkProcessor(options)`
|
|
13
7
|
|
|
14
|
-
|
|
8
|
+
Main hook export. Accepts `UseRealtimeChunkProcessorOptions` and returns `UseRealtimeChunkProcessorReturn`.
|
|
9
|
+
|
|
10
|
+
**Options:**
|
|
11
|
+
|
|
12
|
+
| Option | Type | Default | Description |
|
|
13
|
+
|---|---|---|---|
|
|
14
|
+
| `callbacks` | `object` | required | Event handlers (`onSegmentsUpdate`, `onStreamStart`, `onStreamEnd`, `onApprove`, `onReject`, etc.) |
|
|
15
|
+
| `displayApprovalTypes` | `string[]` | `['CLIENT']` | Approval types rendered inline; others are escalated |
|
|
16
|
+
| `approvalStatuses` | `object` | `{}` | Current status map keyed by `requestId` |
|
|
17
|
+
| `initialState` | `object` | — | Hydrates accumulator for resumed dialogs |
|
|
18
|
+
| `batchApprovalsEnabled` | `boolean` | `true` | Renders batch approvals as a single card; `false` unfolds into individual cards |
|
|
19
|
+
| `isDirectMode` | `boolean` | `false` | Activates the direct-mode barrier, dropping AI assistant chunks |
|
|
20
|
+
|
|
21
|
+
### Internal Refs
|
|
22
|
+
|
|
23
|
+
| Ref | Purpose |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `accumulatorRef` | `MessageSegmentAccumulator` instance managing segment state |
|
|
26
|
+
| `isInStreamRef` | Tracks open/closed stream window (`MESSAGE_START` → `MESSAGE_END`) |
|
|
27
|
+
| `hasEverStreamedRef` | Distinguishes cold-start vs. post-stream continuation for append mode |
|
|
28
|
+
| `directModeFlagRef` / `sawDirectMessageRef` | Direct-mode barrier gate |
|
|
29
|
+
| `directTeardownFiredRef` | One-shot guard: ensures teardown fires exactly once on barrier entry |
|
|
30
|
+
| `pendingEscalatedRef` | Map of escalated approval requests not shown inline |
|
|
31
|
+
|
|
32
|
+
### Supported Chunk Actions
|
|
15
33
|
|
|
16
34
|
| Action | Behavior |
|
|
17
|
-
|
|
18
|
-
| `message_start` / `message_end` | Opens/closes stream
|
|
19
|
-
| `text` / `thinking` | Appends to accumulator; uses append
|
|
20
|
-
| `tool_execution` | Routes to accumulator
|
|
21
|
-
| `approval_request` |
|
|
22
|
-
| `approval_batch` |
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
35
|
+
|---|---|
|
|
36
|
+
| `message_start` / `message_end` | Opens/closes stream, resets accumulator |
|
|
37
|
+
| `text` / `thinking` | Appends to accumulator; uses append-mode after `MESSAGE_END` |
|
|
38
|
+
| `tool_execution` | Routes in-stream to accumulator; post-stream to `onToolExecuted` callback |
|
|
39
|
+
| `approval_request` | Inline or escalated based on `displayApprovalTypes` |
|
|
40
|
+
| `approval_batch` | Single batch card, legacy card fan-out, or escalated |
|
|
41
|
+
| `metadata` | Forwarded directly to `onMetadata` |
|
|
42
|
+
| `direct_message` | Activates direct-mode barrier |
|
|
25
43
|
|
|
26
44
|
## Usage Example
|
|
27
45
|
|
|
28
46
|
```typescript
|
|
29
47
|
const { processChunk } = useRealtimeChunkProcessor({
|
|
30
48
|
callbacks: {
|
|
31
|
-
onSegmentsUpdate: (segments,
|
|
32
|
-
onStreamStart: () =>
|
|
33
|
-
onStreamEnd: () =>
|
|
34
|
-
onApprove: (requestId) =>
|
|
35
|
-
onReject: (requestId) =>
|
|
36
|
-
onEscalatedApproval: (requestId, data) =>
|
|
37
|
-
|
|
38
|
-
|
|
49
|
+
onSegmentsUpdate: (segments, meta) => setSegments(segments),
|
|
50
|
+
onStreamStart: () => setIsStreaming(true),
|
|
51
|
+
onStreamEnd: () => setIsStreaming(false),
|
|
52
|
+
onApprove: (requestId) => approveAction(requestId),
|
|
53
|
+
onReject: (requestId) => rejectAction(requestId),
|
|
54
|
+
onEscalatedApproval: (requestId, data) => notifyAdmin(requestId, data),
|
|
55
|
+
onToolExecuted: (segment) => updateToolCard(segment),
|
|
56
|
+
onAgentBusy: () => showTypingIndicator(),
|
|
57
|
+
onMetadata: (meta) => handleMetadata(meta),
|
|
39
58
|
},
|
|
40
59
|
displayApprovalTypes: ['CLIENT'],
|
|
41
|
-
approvalStatuses: { 'req-123': 'pending' },
|
|
42
|
-
enableThinking: false,
|
|
43
60
|
batchApprovalsEnabled: true,
|
|
61
|
+
isDirectMode: false,
|
|
62
|
+
approvalStatuses: { 'req-123': 'approved' },
|
|
44
63
|
})
|
|
45
64
|
|
|
46
|
-
//
|
|
47
|
-
natsSubscription.
|
|
65
|
+
// Wire to your NATS subscription
|
|
66
|
+
natsSubscription.onMessage((rawChunk) => {
|
|
67
|
+
processChunk(rawChunk)
|
|
68
|
+
})
|
|
48
69
|
```
|
|
49
70
|
|
|
50
|
-
|
|
71
|
+
## Direct-Mode Barrier
|
|
72
|
+
|
|
73
|
+
When `isDirectMode` is `true` or a `direct_message` chunk arrives, the hook drops all subsequent AI-assistant chunks (everything not in `DIRECT_MODE_ALLOWED`). Teardown fires exactly once — clearing the typing indicator, composer lock, and in-progress bubble — even if no stream is currently open (e.g., during post-approval tool execution).
|
|
74
|
+
|
|
75
|
+
## Source
|
|
76
|
+
|
|
77
|
+
[`use-realtime-chunk-processor.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-realtime-chunk-processor.ts)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- source-hash: 98664d575bf2457a305eb811747ed93c -->
|
|
2
|
+
Playback clock hook that advances through pre-built `StreamFrame` arrays like a live stream, holding each frame for its configured delay before revealing the next, then parking on the final frame.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`useScriptedStream(frames, resetKey, enabled)`** — Core hook. Returns the currently active `StreamFrame` based on elapsed playback.
|
|
7
|
+
- `frames` — Ordered array of `StreamFrame` objects (built externally via `buildStreamFrames`).
|
|
8
|
+
- `resetKey` — Restarts playback from frame 0 on identity change (new conversation). Preserves index when the same conversation grows (e.g. an appended continuation resumes seamlessly).
|
|
9
|
+
- `enabled` — When `false`, skips to the final frame immediately.
|
|
10
|
+
- **`EMPTY_FRAME`** — Sentinel idle frame returned when no frames are available.
|
|
11
|
+
- **`prefersReducedMotion()`** — Detects `prefers-reduced-motion: reduce` media query; bypasses animation and jumps straight to the last frame.
|
|
12
|
+
|
|
13
|
+
## Behavior Details
|
|
14
|
+
|
|
15
|
+
| Condition | Result |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `enabled === false` or reduced motion | Jumps to last frame immediately |
|
|
18
|
+
| `frames` grows mid-playback | Effect re-runs, resumes from current index into new frames |
|
|
19
|
+
| `frames` shrinks before reset lands | Index is clamped to prevent out-of-bounds access |
|
|
20
|
+
| `frames.length === 0` | Returns `EMPTY_FRAME` |
|
|
21
|
+
|
|
22
|
+
## Usage Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { useScriptedStream } from './use-scripted-stream'
|
|
26
|
+
import { buildStreamFrames } from '../utils/scripted-stream'
|
|
27
|
+
|
|
28
|
+
function ChatPreview({ conversation }: { conversation: Conversation }) {
|
|
29
|
+
const frames = buildStreamFrames(conversation.messages)
|
|
30
|
+
|
|
31
|
+
// resetKey changes when a new conversation is selected
|
|
32
|
+
const frame = useScriptedStream(frames, conversation.id)
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<ChatWindow
|
|
36
|
+
messages={frame.messages}
|
|
37
|
+
isTyping={frame.typing}
|
|
38
|
+
phase={frame.phase}
|
|
39
|
+
/>
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Source
|
|
45
|
+
|
|
46
|
+
[`use-scripted-stream.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-scripted-stream.ts)
|
|
@@ -1,46 +1,53 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: aa7b6d85f5c19e25d82b750caeada18b -->
|
|
2
|
+
Provides slash-command autocomplete capabilities via a stateless fetch helper, a debounced React hook, and a cached registry hook for deduped session-scoped command lookups.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
| Export |
|
|
7
|
-
|
|
8
|
-
| `fetchSlashCommands` | `async function` | Stateless fetch wrapper
|
|
9
|
-
| `useSlashCommands` | React hook | Debounced (
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
6
|
+
| Export | Kind | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `fetchSlashCommands` | `async function` | Stateless fetch wrapper. Resolves `commandsUrl` against `window.location.origin`, appends `?q=prefix`, uses `embedAuthedFetch` for bearer/cookie auth. Returns `SlashCommandSummary[]` or `[]` on non-2xx; re-throws `AbortError` so react-query treats cancellation correctly. |
|
|
9
|
+
| `useSlashCommands` | React hook | Debounced (150 ms), cancellable hook. Returns `{ commands, loading }`. Clears state when `prefix` is `null`; aborts in-flight requests on dependency change or unmount. |
|
|
10
|
+
| `useSlashCommandRegistry` | React hook | Full registry fetch (empty prefix) backed by react-query with `staleTime`/`gcTime: Infinity`. All consumers in one chat surface share a single cache entry. Accepts `{ enabled }` to gate the fetch (e.g. skip in Mingo mode). Returns `{ commands, loading, loaded }`. |
|
|
11
|
+
| `SlashCommandSummary` | Re-exported type | Canonical type from `component.types`; re-exported so callers avoid reaching into the internal types path. |
|
|
12
|
+
| `SlashCommandSummaryAction` | Re-exported type | Action shape within a `SlashCommandSummary`. |
|
|
13
|
+
| `SlashCommandActionId` | Re-exported type | Discriminated identifier for a command action. |
|
|
13
14
|
|
|
14
15
|
## Usage Example
|
|
15
16
|
|
|
16
17
|
```typescript
|
|
17
18
|
import {
|
|
18
19
|
useSlashCommands,
|
|
20
|
+
useSlashCommandRegistry,
|
|
19
21
|
fetchSlashCommands,
|
|
20
22
|
} from "@flamingo-stack/openframe-frontend-core/components/chat/hooks";
|
|
21
|
-
import { useChatRuntime } from "./chat-runtime";
|
|
22
23
|
|
|
23
|
-
//
|
|
24
|
-
function
|
|
25
|
-
const {
|
|
26
|
-
const { commands, loading } = useSlashCommands(prefix,
|
|
24
|
+
// 1. Debounced autocomplete — renders as the user types "/…"
|
|
25
|
+
function SlashAutocomplete({ prefix }: { prefix: string | null }) {
|
|
26
|
+
const { commandsUrl } = useChatRuntime().endpoints;
|
|
27
|
+
const { commands, loading } = useSlashCommands(prefix, commandsUrl);
|
|
27
28
|
|
|
28
29
|
if (loading) return <Spinner />;
|
|
29
30
|
return <CommandList items={commands} />;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
// 2. Session-scoped registry — deduped across all consumers
|
|
34
|
+
function WelcomePanel() {
|
|
35
|
+
const { commandsUrl } = useChatRuntime().endpoints;
|
|
36
|
+
const { commands, loaded } = useSlashCommandRegistry(commandsUrl, {
|
|
37
|
+
enabled: activeMode === "guide",
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
if (!loaded) return <Skeleton />;
|
|
41
|
+
return <OnboardingCards commands={commands} />;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 3. One-shot fetch (e.g. SSE adapter, outside React)
|
|
45
|
+
const ac = new AbortController();
|
|
46
|
+
const cmds = await fetchSlashCommands("dep", ac.signal, commandsUrl);
|
|
39
47
|
```
|
|
40
48
|
|
|
41
49
|
## Notes
|
|
42
50
|
|
|
43
|
-
- `commandsUrl`
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
- `AbortError` on unmount/dependency change is swallowed; other errors emit a `console.warn`
|
|
51
|
+
- `commandsUrl` is **always required** — sourced from `useChatRuntime().endpoints.commandsUrl`. No default exists.
|
|
52
|
+
- Auth is handled transparently by [`embedAuthedFetch`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/utils/embed-authed-fetch.ts); no host-side `fetch` patching needed.
|
|
53
|
+
- Any non-abort failure degrades silently to an empty list — a flaky commands endpoint never breaks chat or blocks the welcome UI in a loading state.
|