@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
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!-- source-hash: 5df51000b55f2d031915f5b4412ac8e6 -->
|
|
2
|
+
Reconciles persisted dialog history (processed GraphQL pages) with realtime messages accumulated from streaming chunks, preventing both duplicate and lost turns across MSP chat interfaces (Mingo, tickets, openframe-chat).
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces & Types
|
|
7
|
+
|
|
8
|
+
- **`MergeableChatMessage`** — Minimal structural contract for mergeable messages; hosts pass their own type and get it back. Includes optional `streamSeq` for per-message coverage resolution.
|
|
9
|
+
- **`HistoryMergeInput<M>`** — Input shape for `mergeHistoryWithRealtime`, encapsulating processed history, existing realtime messages, seq signals, and fetch timestamps.
|
|
10
|
+
|
|
11
|
+
### Constants
|
|
12
|
+
|
|
13
|
+
- **`SYNTHETIC_REALTIME_ID_PREFIXES`** — Cross-host contract listing all client-minted ID prefixes (`assistant-`, `user-`, `direct-`, `system-`, `error-`). Centralised here to prevent double-rendering of persisted/synthetic message pairs.
|
|
14
|
+
|
|
15
|
+
### Functions
|
|
16
|
+
|
|
17
|
+
| Function | Description |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `mergeHistoryWithRealtime<M>` | Core merge logic. Applies seq-based coverage, per-role max seq, approval batch reconciliation, and wall-clock fallback to produce a single deduplicated message list. |
|
|
20
|
+
| `flattenMessagePagesChronological<T>` | Flattens DESC-sorted GraphQL pages into a single chronological array. |
|
|
21
|
+
| `maxPersistedStreamSeq` | Computes the highest `lastChunkStreamSeq` across all history pages; used as the `historyMaxStreamSeq` input and JetStream replay offset. |
|
|
22
|
+
| `assistantAnswerText` | Extracts rendered text from an assistant message for content-based deduplication fallback. |
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import {
|
|
28
|
+
mergeHistoryWithRealtime,
|
|
29
|
+
flattenMessagePagesChronological,
|
|
30
|
+
maxPersistedStreamSeq,
|
|
31
|
+
} from '@openframe-oss-lib/history-merge'
|
|
32
|
+
|
|
33
|
+
const processedHistory = flattenMessagePagesChronological(queryData?.pages)
|
|
34
|
+
const historyMaxStreamSeq = maxPersistedStreamSeq(queryData?.pages)
|
|
35
|
+
|
|
36
|
+
const merged = mergeHistoryWithRealtime({
|
|
37
|
+
processedHistory,
|
|
38
|
+
existingMessages: store.messages,
|
|
39
|
+
streamingMessageId: activeStreamId ?? null,
|
|
40
|
+
historyFetchedAt: dataUpdatedAt,
|
|
41
|
+
historyMaxStreamSeq,
|
|
42
|
+
realtimeSeenStreamSeq: store.lastSeenSeq,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
store.setMessages(merged)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Coverage Resolution Priority
|
|
49
|
+
|
|
50
|
+
```mermaid
|
|
51
|
+
graph TD
|
|
52
|
+
A[Synthetic message] --> B{"Per-row streamSeq\navailable?"}
|
|
53
|
+
B -->|Yes| C{"Same-role history\nmax seq >= synthetic seq?"}
|
|
54
|
+
B -->|No| D{"Global seq\ncoverage known?"}
|
|
55
|
+
C -->|Yes| E[Drop synthetic]
|
|
56
|
+
C -->|No| F[Keep synthetic]
|
|
57
|
+
D -->|Yes| G{"historyMaxStreamSeq\n>= realtimeSeenSeq?"}
|
|
58
|
+
D -->|No| H{"Created after\nhistoryFetchedAt?"}
|
|
59
|
+
G -->|Yes| E
|
|
60
|
+
G -->|No| F
|
|
61
|
+
H -->|Yes| F
|
|
62
|
+
H -->|No| E
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
> **Source:** [`history-merge.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/history-merge.ts)
|
|
@@ -1,46 +1,48 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 179ff4aa1bbfe40397134cf9b75647a6 -->
|
|
2
|
+
Resolves backend `SlashCommandSummary.iconName` strings to React icon components for the OpenFrame chat UI, supporting brand logos, semantic aliases, and the full `icons-v2-generated` library with a single unified entry point.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
###
|
|
6
|
+
### `resolveIcon(iconName, opts?)`
|
|
7
|
+
The primary export — maps any backend `iconName` to an `IconComponent`. Supports two variants:
|
|
8
|
+
- `'design'` (default): Checks `ICON_ALIASES` first, then falls back to `resolveFromLibrary`, then `FileIcon`.
|
|
9
|
+
- `'brand'`: Delegates to `getIconComponent` from the icon registry (brand-colored social glyphs).
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
| `ICON_REGISTRY` | `Record<string, IconComponent>` | Kebab-case map of all registered icon names to React components |
|
|
11
|
-
| `normalizeIconKey(key)` | `(string) => string` | Converts PascalCase icon names to canonical kebab-case; passes kebab keys through unchanged |
|
|
12
|
-
| `getIconComponent(iconName)` | `(string\|null\|undefined) => ComponentType` | Resolves any icon name to a component; falls back to `FileText` |
|
|
13
|
-
| `getDynamicIcon(iconName, size, className)` | `(...) => ReactNode` | Renders a sized icon element directly; falls back to `Globe` |
|
|
14
|
-
| `DynamicIconSize` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | Size preset type (12px–48px) |
|
|
11
|
+
### `ICON_ALIASES`
|
|
12
|
+
Static registry mapping backend keys and Figma-canonical aliases to specific components. Covers production `/api/docs/commands` contract keys (`clickup`, `slack`, `hubspot`, `github`, `openframe`), legacy announcement-bar names (`megaphone`, `flamingo`, `bell`), and common generic v2 glyphs.
|
|
15
13
|
|
|
16
|
-
###
|
|
14
|
+
### `resolveFromLibrary(iconName)`
|
|
15
|
+
Generic fallback that resolves any kebab-case name against the full `icons-v2-generated` namespace by convention (`chart-pie` → `ChartPieIcon`). Tries two PascalCase candidates to handle the inconsistent `ai`/`AI` token in generator output.
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
### `ICON_OPTIONS`
|
|
18
|
+
Curated `ReadonlyArray<IconOption>` for the admin slash-command icon picker (`/admin/chat-config`). Each entry has a `key` (kebab-case DB value) and a `label` (human-readable dropdown text).
|
|
19
|
+
|
|
20
|
+
### `sizedLogo(Logo)`
|
|
21
|
+
HOC that wraps brand logos (which lack a `size` prop) to satisfy the `IconComponent` contract by driving dimensions via inline `style`.
|
|
22
|
+
|
|
23
|
+
### `IconComponent` / `IconOption`
|
|
24
|
+
Exported TypeScript types for the shared `{ size, className, color }` icon contract and picker entries.
|
|
22
25
|
|
|
23
26
|
## Usage Example
|
|
24
27
|
|
|
25
28
|
```typescript
|
|
26
|
-
import {
|
|
29
|
+
import { resolveIcon } from './icon-library'
|
|
30
|
+
|
|
31
|
+
// Design variant (default) — resolves to SlackLogoGreyIcon
|
|
32
|
+
const SlackIcon = resolveIcon('slack')
|
|
27
33
|
|
|
28
|
-
//
|
|
29
|
-
const
|
|
30
|
-
const Icon2 = getIconComponent('LinkedInIcon') // → LinkedInIcon (via alias)
|
|
31
|
-
const Icon3 = getIconComponent('unknown-icon') // → FileText (fallback)
|
|
34
|
+
// Alias resolution — resolves to Rocket02Icon
|
|
35
|
+
const RocketIcon = resolveIcon('rocket-02')
|
|
32
36
|
|
|
33
|
-
//
|
|
34
|
-
const
|
|
35
|
-
const node2 = getDynamicIcon('dollar-sign', 'sm', 'text-green-500')
|
|
37
|
+
// Generic library resolution — no alias needed
|
|
38
|
+
const ChartIcon = resolveIcon('chart-pie')
|
|
36
39
|
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
normalizeIconKey('globe') // → 'globe' (pass-through)
|
|
40
|
-
```
|
|
40
|
+
// Null/unknown input — falls back to FileIcon
|
|
41
|
+
const FallbackIcon = resolveIcon(null)
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
// Brand variant — delegates to getIconComponent
|
|
44
|
+
const BrandSlack = resolveIcon('slack', { variant: 'brand' })
|
|
43
45
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
// Render in JSX
|
|
47
|
+
<SlackIcon size={24} className="text-ods-text-secondary" />
|
|
48
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- source-hash: 7ecf3f317fa8164ab2bb260642085dcc -->
|
|
2
|
+
Centralized icon registry mapping string icon names to React components, serving as the single source of truth for icon lookups across the OpenFrame lib and hub.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `ICON_REGISTRY`
|
|
7
|
+
A kebab-case keyed record mapping icon names to `IconComponent` types. Covers Lucide React icons, brand icons (Slack, GitHub, HubSpot, LinkedIn, etc.), and the OpenFrame logo. For social platform icons where both a brand and Lucide variant exist, the kebab key resolves to the brand component while a `-lucide` suffix key accesses the outline variant (e.g., `'github'` → `GitHubIcon`, `'github-lucide'` → `Github`).
|
|
8
|
+
|
|
9
|
+
### `normalizeIconKey(key: string): string`
|
|
10
|
+
Converts PascalCase icon identifiers (from `social_platforms.icon_name` DB column) to their canonical kebab-case registry keys using `PASCAL_TO_KEBAB_ALIASES`. Kebab-case keys pass through unchanged.
|
|
11
|
+
|
|
12
|
+
### `getIconComponent(iconName)`
|
|
13
|
+
Resolves an icon name to its React component. Handles `null`/`undefined` gracefully, falling back to `FileText` so UI chips always render with a glyph.
|
|
14
|
+
|
|
15
|
+
### `getDynamicIcon(iconName, size, className)`
|
|
16
|
+
Renders an icon as a `ReactNode` with a size preset (`xs`/`sm`/`md`/`lg`/`xl`) and optional className. Applies per-icon color overrides (e.g., LinkedIn blue, YouTube red) and falls back to `Globe` for unknown names.
|
|
17
|
+
|
|
18
|
+
### `OpenFrameLogoIcon`
|
|
19
|
+
A local wrapper around `RawOpenFrameLogo` that wires the logo's outer frame color to `currentColor`, making it visible on dark surfaces alongside Lucide icons.
|
|
20
|
+
|
|
21
|
+
## Usage Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { getIconComponent, getDynamicIcon, normalizeIconKey } from './icon-registry'
|
|
25
|
+
|
|
26
|
+
// Resolve a component for custom rendering
|
|
27
|
+
const Icon = getIconComponent('hubspot')
|
|
28
|
+
// <Icon className="w-5 h-5 text-orange-500" />
|
|
29
|
+
|
|
30
|
+
// Handle PascalCase keys from social_platforms.icon_name
|
|
31
|
+
const Icon2 = getIconComponent('LinkedInIcon') // resolves to LinkedInIcon component
|
|
32
|
+
|
|
33
|
+
// Render a sized icon node directly
|
|
34
|
+
const node = getDynamicIcon('rocket', 'lg') // 32px Rocket
|
|
35
|
+
const node2 = getDynamicIcon('youtube', 'sm') // 16px YouTubeIcon, color: #FF0000
|
|
36
|
+
|
|
37
|
+
// Normalize a key manually
|
|
38
|
+
normalizeIconKey('GitHubIcon') // → 'github'
|
|
39
|
+
normalizeIconKey('github') // → 'github' (pass-through)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Adding a new icon:** Import the component, add a `'kebab-key': Component` entry to `ICON_REGISTRY`, and add a `PascalName → 'kebab-key'` row to `PASCAL_TO_KEBAB_ALIASES` if the icon arrives from a PascalCase DB column.
|
|
43
|
+
|
|
44
|
+
**Source:** [`icon-registry.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/icon-registry.ts)
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Barrel export module
|
|
1
|
+
<!-- source-hash: 0435e7889d0ba1d3a5186507e28737c9 -->
|
|
2
|
+
Barrel export module for the message processing utilities library, re-exporting all public APIs from specialized sub-modules covering chat message parsing, navigation, attachments, icons, and more.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
|
7
|
-
|
|
8
|
-
|
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
6
|
+
| Export Group | Source Module | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| Chunk parsing | `chunk-parser` | Parse streaming chunks into actions, detect control/error/metadata chunks |
|
|
9
|
+
| Segment accumulator | `message-segment-accumulator` | Accumulate streaming message segments with callbacks |
|
|
10
|
+
| Historical messages | `process-historical-messages` | Process and reconcile chat history with error extraction |
|
|
11
|
+
| History merge | `history-merge` | Reconcile persisted history with realtime stream data |
|
|
12
|
+
| Navigation | `execute-navigation`, `nav-click-handler`, `decide-new-tab` | Unified navigation primitive for new-tab/same-tab, internal/external, embed/host routing |
|
|
13
|
+
| Chat attachment | `chat-attachment-markdown` | Format and strip attachment markdown, URL/token helpers |
|
|
14
|
+
| Icon registry | `icon-registry`, `icon-library`, `source-icons` | Single source of truth for icon-name → component lookups |
|
|
15
|
+
| Proxy auth | `chat-proxy-auth-storage`, `chat-authed-fetch` | localStorage adapter and authenticated fetch wrapper |
|
|
16
|
+
| Slash commands | `slash-dispatch-utils` | Command parsing, entity filtering, and dispatch utilities |
|
|
17
|
+
| Compact card | `compact-card-classes` | Shared CSS class constants and safe-href guard |
|
|
18
|
+
| Scripted stream | `scripted-stream` | Re-exported wholesale via `export *` |
|
|
18
19
|
|
|
19
20
|
## Usage Example
|
|
20
21
|
|
|
@@ -22,32 +23,35 @@ Barrel export module that consolidates and re-exports all message processing, ch
|
|
|
22
23
|
import {
|
|
23
24
|
parseChunkToAction,
|
|
24
25
|
createMessageSegmentAccumulator,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
getIconComponent,
|
|
28
|
-
formatChatAttachmentMarkdownForBubble,
|
|
29
|
-
decideNewTab,
|
|
26
|
+
executeNavigation,
|
|
27
|
+
resolveIcon,
|
|
30
28
|
getStatusColorScheme,
|
|
31
|
-
|
|
29
|
+
mergeHistoryWithRealtime,
|
|
30
|
+
formatChatAttachmentMarkdownForBubble,
|
|
31
|
+
} from '@openframe/chat-utils'
|
|
32
32
|
|
|
33
|
-
// Parse a streaming chunk
|
|
33
|
+
// Parse a streaming chunk
|
|
34
34
|
const action = parseChunkToAction(rawChunk)
|
|
35
35
|
|
|
36
|
-
// Accumulate
|
|
36
|
+
// Accumulate message segments from a stream
|
|
37
37
|
const accumulator = createMessageSegmentAccumulator({
|
|
38
|
-
onSegmentComplete: (segment) => console.log('Segment:', segment),
|
|
38
|
+
onSegmentComplete: (segment) => console.log('Segment done:', segment),
|
|
39
39
|
})
|
|
40
40
|
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
href: '
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
// Execute navigation respecting new-tab rules
|
|
42
|
+
executeNavigation({
|
|
43
|
+
href: '/tickets/123',
|
|
44
|
+
event: clickEvent,
|
|
45
|
+
surface: 'chat',
|
|
46
46
|
})
|
|
47
47
|
|
|
48
|
-
//
|
|
49
|
-
const Icon =
|
|
48
|
+
// Resolve an icon by name
|
|
49
|
+
const Icon = resolveIcon('clickup')
|
|
50
|
+
|
|
51
|
+
// Get agent status color scheme
|
|
52
|
+
const colors = getStatusColorScheme('online')
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Source
|
|
50
56
|
|
|
51
|
-
|
|
52
|
-
const colors = getStatusColorScheme('running')
|
|
53
|
-
```
|
|
57
|
+
[`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
|
|
@@ -1,35 +1,39 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Determines whether a URL
|
|
1
|
+
<!-- source-hash: 44dae2d6eddc55109e9284520b771589 -->
|
|
2
|
+
Determines whether a URL string refers to a cross-origin resource, using purely static string analysis without any `window` or runtime context. Designed to be SSR-deterministic, avoiding React hydration mismatches caused by server/client value divergence.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- **Returns:** `boolean` — `true` if the URL has an explicit host (absolute or protocol-relative), `false` for relative paths or falsy values
|
|
6
|
+
**`isCrossOriginUrl(url)`**
|
|
7
|
+
Returns `true` if the URL would resolve to a different origin; `false` for relative paths, fragments, query-only strings, and nullish values.
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
/
|
|
15
|
-
|
|
16
|
-
https://
|
|
17
|
-
http://
|
|
18
|
-
```
|
|
9
|
+
| Input pattern | Result | Reason |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `null` / `undefined` / `""` | `false` | No URL |
|
|
12
|
+
| `#anchor`, `?tab=x` | `false` | Same-document reference |
|
|
13
|
+
| `/path/to/page` | `false` | Relative path, same origin |
|
|
14
|
+
| `//cdn.example.com/...` | `true` | Protocol-relative, explicit host |
|
|
15
|
+
| `https://flamingo.run/...` | `true` | Absolute URL, explicit host |
|
|
16
|
+
| `http://external.com/...` | `true` | Absolute URL, explicit host |
|
|
19
17
|
|
|
20
18
|
## Usage Example
|
|
21
19
|
|
|
22
20
|
```typescript
|
|
23
21
|
import { isCrossOriginUrl } from './is-cross-origin-url'
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
isCrossOriginUrl(
|
|
28
|
-
|
|
23
|
+
// Navigation link — open externally if cross-origin
|
|
24
|
+
const href = buildContentURL(item)
|
|
25
|
+
const openInNewTab = isCrossOriginUrl(href)
|
|
26
|
+
|
|
27
|
+
// <a href={href} target={openInNewTab ? '_blank' : undefined} />
|
|
28
|
+
|
|
29
|
+
isCrossOriginUrl('/support') // false — same-origin relative path
|
|
30
|
+
isCrossOriginUrl('https://flamingo.run') // true — external absolute URL
|
|
31
|
+
isCrossOriginUrl('#section') // false — fragment, same page
|
|
32
|
+
isCrossOriginUrl(null) // false — safe nullish handling
|
|
29
33
|
```
|
|
30
34
|
|
|
31
|
-
##
|
|
35
|
+
## Notes
|
|
32
36
|
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
37
|
+
- Intentionally avoids `window.location` comparisons to stay SSR-safe
|
|
38
|
+
- Same-platform absolute URLs (e.g. from `buildContentURL`) are expected to be handled upstream via `targetPlatform` checks before this function is reached
|
|
39
|
+
- Source: [`packages/utils/is-cross-origin-url.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/packages/utils/is-cross-origin-url.ts)
|
|
@@ -1,41 +1,62 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Manages the accumulation and lifecycle of message segments
|
|
1
|
+
<!-- source-hash: dab060497e2fa3825072e74aa1f72abf -->
|
|
2
|
+
Manages the accumulation and lifecycle of streaming message segments in a chat interface, handling text, tool executions, and approval workflows during real-time or historical message processing.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
### `MessageSegmentAccumulator` (class)
|
|
7
|
+
Core class managing segment state across the message lifecycle.
|
|
8
|
+
|
|
9
|
+
| Method | Description |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `appendText(text)` | Appends to the last text segment or creates a new one |
|
|
12
|
+
| `appendThinking(text)` | Same coalescing logic for `thinking`-type segments |
|
|
13
|
+
| `addToolExecution(segment)` | Routes `EXECUTING_TOOL` / `EXECUTED_TOOL` events; patches batch approvals or standalone segments |
|
|
14
|
+
| `addApprovalRequest(...)` | Pushes a single `approval_request` segment with callbacks |
|
|
15
|
+
| `addApprovalBatch(...)` | Upserts an `approval_batch` segment by `approvalRequestId` |
|
|
16
|
+
| `initializeWithState(state)` | Restores segments, pending approvals, and executing tool maps (e.g. after page refresh) |
|
|
17
|
+
| `getState()` | Returns serializable `AccumulatorState` snapshot |
|
|
18
|
+
| `reset()` / `resetSegments()` | Clears all state or only segments |
|
|
19
|
+
|
|
20
|
+
### `AccumulatorCallbacks` (interface)
|
|
21
|
+
Optional `onApprove` / `onReject` async callbacks injected into approval segments.
|
|
22
|
+
|
|
23
|
+
### Private helpers
|
|
24
|
+
- `applyExecutionToBatch` — merges tool execution results into an existing `approval_batch` segment
|
|
25
|
+
- `resolvePendingApprovalForExecution` — implicitly marks the latest pending `approval_request` as approved when a tool execution arrives (handles observer sessions that never receive `APPROVAL_RESULT`)
|
|
14
26
|
|
|
15
27
|
## Usage Example
|
|
16
28
|
|
|
17
29
|
```typescript
|
|
30
|
+
import { MessageSegmentAccumulator } from './message-segment-accumulator'
|
|
31
|
+
|
|
18
32
|
const accumulator = new MessageSegmentAccumulator({
|
|
19
|
-
onApprove: async (requestId) =>
|
|
20
|
-
onReject: async (requestId) =>
|
|
33
|
+
onApprove: async (requestId) => { /* handle approval */ },
|
|
34
|
+
onReject: async (requestId) => { /* handle rejection */ },
|
|
21
35
|
})
|
|
22
36
|
|
|
23
|
-
//
|
|
24
|
-
accumulator.
|
|
25
|
-
|
|
26
|
-
pendingApprovals: savedApprovals,
|
|
27
|
-
})
|
|
37
|
+
// Streaming text chunks
|
|
38
|
+
accumulator.appendText('Hello, ')
|
|
39
|
+
accumulator.appendText('world!')
|
|
28
40
|
|
|
29
|
-
//
|
|
30
|
-
accumulator.
|
|
31
|
-
|
|
41
|
+
// Tool execution lifecycle
|
|
42
|
+
accumulator.addToolExecution({
|
|
43
|
+
type: 'tool_execution',
|
|
44
|
+
data: { type: 'EXECUTING_TOOL', toolFunction: 'runScript', integratedToolType: 'shell', toolExecutionRequestId: 'req-1' }
|
|
45
|
+
})
|
|
32
46
|
|
|
33
|
-
// Handle tool lifecycle
|
|
34
47
|
accumulator.addToolExecution({
|
|
35
48
|
type: 'tool_execution',
|
|
36
|
-
data: { type: '
|
|
49
|
+
data: { type: 'EXECUTED_TOOL', toolFunction: 'runScript', integratedToolType: 'shell', toolExecutionRequestId: 'req-1', result: 'ok', success: true }
|
|
37
50
|
})
|
|
38
51
|
|
|
39
|
-
//
|
|
40
|
-
const
|
|
41
|
-
|
|
52
|
+
// Serialize and restore across reconnects
|
|
53
|
+
const state = accumulator.getState()
|
|
54
|
+
const restored = new MessageSegmentAccumulator()
|
|
55
|
+
restored.initializeWithState(state)
|
|
56
|
+
|
|
57
|
+
console.log(restored.getSegments())
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Source
|
|
61
|
+
|
|
62
|
+
[`message-segment-accumulator.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/message-segment-accumulator.ts)
|
|
@@ -1,44 +1,39 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: bdc2b1fb114772393dd4ed7a7eea4c6f -->
|
|
2
|
+
Pure helpers for computing new-tab navigation decisions and assembling `<a>` element attribute objects for chat-rendered links.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
### `isSameOriginAbsoluteHref(href)` *(internal)*
|
|
7
|
+
Checks whether a given `href` is an absolute `http(s)` URL on the current page's origin. SSR-safe — returns `false` when `window` is undefined.
|
|
8
|
+
|
|
9
|
+
### `computeIsNewTab(runtime, href, targetPlatform)`
|
|
10
|
+
**Single source of truth** for the new-tab decision across inline cards, source chips, and `NavLinkAnchorViaRuntime`. Implements two modes:
|
|
11
|
+
- **`embed` mode** — opens new tab except for same-origin absolute hrefs (e.g. embedder in-app routes under `/help-center`).
|
|
12
|
+
- **`host` mode** — delegates to `runtime.navigation.decideNewTab` or falls back to `libDecideNewTab`.
|
|
13
|
+
|
|
14
|
+
### `newTabAnchorAttrs(isNewTab)`
|
|
15
|
+
Returns `{ target: '_blank', rel: 'noopener noreferrer' }` when `isNewTab` is `true`, or `{}` otherwise. Ensures new-tab links always include `noopener noreferrer` to prevent tab-nabbing.
|
|
16
|
+
|
|
17
|
+
### `buildAnchorProps(href, isNewTab)`
|
|
18
|
+
Combines `href` and new-tab attributes into a single `anchorProps` object. Returns `undefined` (not a falsy object) when `href` is absent, enabling clean conditional rendering between `<a>` and `<span>`.
|
|
11
19
|
|
|
12
20
|
## Usage Example
|
|
13
21
|
|
|
14
22
|
```typescript
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return anchorProps != null
|
|
26
|
-
? <a {...anchorProps}>{children}</a>
|
|
27
|
-
: <span>{children}</span>
|
|
28
|
-
}
|
|
29
|
-
```
|
|
23
|
+
import { computeIsNewTab, buildAnchorProps } from './nav-anchor-props'
|
|
24
|
+
|
|
25
|
+
// Inside a card wrapper component
|
|
26
|
+
const isNewTab = computeIsNewTab(runtime, chatRef.url, targetPlatform)
|
|
27
|
+
const anchorProps = buildAnchorProps(chatRef.url, isNewTab)
|
|
28
|
+
|
|
29
|
+
// In JSX — renders <a> or <span> based on whether a URL exists
|
|
30
|
+
return anchorProps != null
|
|
31
|
+
? <a {...anchorProps}>{children}</a>
|
|
32
|
+
: <span>{children}</span>
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
graph TD
|
|
35
|
-
A["computeIsNewTab called"] --> B{"href present?"}
|
|
36
|
-
B -- No --> C["return false"]
|
|
37
|
-
B -- Yes --> D{"embed mode?"}
|
|
38
|
-
D -- Yes --> E["return true (always new-tab)"]
|
|
39
|
-
D -- No --> F{"runtime.decideNewTab defined?"}
|
|
40
|
-
F -- Yes --> G["call runtime.decideNewTab"]
|
|
41
|
-
F -- No --> H["call libDecideNewTab fallback"]
|
|
34
|
+
// Or spread newTabAnchorAttrs directly when href is already known
|
|
35
|
+
import { newTabAnchorAttrs } from './nav-anchor-props'
|
|
36
|
+
<a href={href} {...newTabAnchorAttrs(isNewTab)} />
|
|
42
37
|
```
|
|
43
38
|
|
|
44
|
-
|
|
39
|
+
**Source:** [`nav-anchor-props.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/nav-anchor-props.ts)
|
|
@@ -1,47 +1,43 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: dd19b1c249728537a01b0a89f3b94541 -->
|
|
2
|
+
Thin compatibility wrapper that forwards chat-rendered navigation link clicks to the unified `executeNavigation` primitive.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `ChatNavClickInput`
|
|
7
|
-
|
|
8
|
-
- `href` — destination URL (required)
|
|
9
|
-
- `path` — optional internal route path
|
|
10
|
-
- `targetPlatform` — optional platform hint for routing decisions
|
|
7
|
+
Interface describing the navigation target passed to the handler:
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
| Field | Type | Description |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `href` | `string` | Destination URL |
|
|
12
|
+
| `path` | `string \| null` | Optional soft-nav path override |
|
|
13
|
+
| `targetPlatform` | `string \| null` | Target rendering platform hint |
|
|
14
14
|
|
|
15
|
-
### `handleChatNavClick
|
|
16
|
-
|
|
17
|
-
- `true` — handler took action and called `preventDefault()`
|
|
18
|
-
- `false` — modifier-click or non-primary button; browser default applies
|
|
15
|
+
### `handleChatNavClick`
|
|
16
|
+
Delegates directly to [`executeNavigation`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/execute-navigation.ts), preserving the call shape expected by existing chat callers (chip blocks, `<ChatCardNavWrap>`, `<NavLinkAnchorViaRuntime>`). Returns a `boolean` indicating whether the click was handled.
|
|
19
17
|
|
|
20
|
-
**
|
|
21
|
-
1. Empty `href` → `preventDefault` + no-op
|
|
22
|
-
2. Non-primary button or any modifier key (`meta`, `ctrl`, `shift`, `alt`) → pass through to browser
|
|
23
|
-
3. New-tab decision via `computeIsNewTab` → `runtime.navigation.openExternal` or `window.open`
|
|
24
|
-
4. Same-tab → `runtime.navigation.navigate?.()` → fallback to `window.location.assign`
|
|
18
|
+
> **Deprecated.** New code should call `executeNavigation` directly. The full decision tree (empty-href no-op, modifier/non-primary passthrough, new-tab, same-tab soft-nav with fallback) lives exclusively in `execute-navigation.ts`.
|
|
25
19
|
|
|
26
20
|
## Usage Example
|
|
27
21
|
|
|
28
22
|
```typescript
|
|
29
23
|
import { handleChatNavClick } from './nav-click-handler'
|
|
30
|
-
import {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
24
|
+
import { useRouter } from 'next/navigation'
|
|
25
|
+
|
|
26
|
+
const router = useRouter()
|
|
27
|
+
|
|
28
|
+
<a
|
|
29
|
+
href={href}
|
|
30
|
+
onClick={(e) =>
|
|
31
|
+
handleChatNavClick(
|
|
32
|
+
e,
|
|
33
|
+
runtime,
|
|
34
|
+
{ href, path: '/dashboard', targetPlatform: 'web' },
|
|
35
|
+
router.push, // fallback for runtimes without navigation.navigate
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
>
|
|
39
|
+
Dashboard
|
|
40
|
+
</a>
|
|
45
41
|
```
|
|
46
42
|
|
|
47
|
-
|
|
43
|
+
The `fallbackNavigate` parameter accepts `useRouter().push` for same-origin soft-navigation when the `ChatRuntime` does not wire a `navigation.navigate` handler.
|