@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,26 +1,17 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 9b87d21631234ee48c0578e5959504ff -->
|
|
2
|
+
Renders the two primary UI primitives for chat file attachments: a horizontal chip strip displayed above the textarea and a borderless `+` button rendered inline in the bottom-controls row.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
|
9
|
-
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
13
|
-
| `CHAT_ATTACHMENT_MIME_TYPES` |
|
|
14
|
-
| `CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER` |
|
|
15
|
-
|
|
16
|
-
### Internal Helpers
|
|
17
|
-
|
|
18
|
-
| Name | Purpose |
|
|
19
|
-
|------|---------|
|
|
20
|
-
| `AttachmentChip` | Single chip: inline blob thumbnail (images), progress bar overlay, filename, status text, × remove button |
|
|
21
|
-
| `useObjectUrl` | Hook managing `URL.createObjectURL` lifecycle — revokes on unmount and file change |
|
|
22
|
-
| `formatFileSize` | Human-readable byte formatter (B / KB / MB / GB) |
|
|
23
|
-
| `extLabel` | Extracts up to 3-char file extension for non-image chip placeholders |
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `ChatAttachmentAddButton` | Icon-only `+` button for triggering file selection; reserves layout space when disabled to prevent CLS |
|
|
9
|
+
| `ChatAttachmentChipStrip` | Horizontal strip of staged-file chips rendered above the input; returns `null` when empty |
|
|
10
|
+
| `AttachmentChip` | Internal chip component showing thumbnail/initials, upload progress, file name, size, and a remove button |
|
|
11
|
+
| `StagedAttachment` | Interface describing a staged file (id, file, status, progress, storagePath, viewToken, errorMessage) |
|
|
12
|
+
| `ChatAttachmentSize` | `'default' \| 'compact'` density union for narrow surfaces like the ticket-drawer composer |
|
|
13
|
+
| `CHAT_ATTACHMENT_MIME_TYPES` | Allow-listed MIME types (images + video); excludes `image/svg+xml` for XSS safety |
|
|
14
|
+
| `CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER` | Client-side cap of 5 concurrent uploads |
|
|
24
15
|
|
|
25
16
|
## Usage Example
|
|
26
17
|
|
|
@@ -28,37 +19,38 @@ Provides two composable React primitives for the chat compose-box attachment UX:
|
|
|
28
19
|
import {
|
|
29
20
|
ChatAttachmentAddButton,
|
|
30
21
|
ChatAttachmentChipStrip,
|
|
31
|
-
StagedAttachment,
|
|
22
|
+
type StagedAttachment,
|
|
32
23
|
} from './chat-attachment-bar'
|
|
33
24
|
|
|
34
|
-
function
|
|
35
|
-
const { attachments, addFiles, removeFile } = useChatAttachments()
|
|
36
|
-
const { attachmentsEnabled } = useChatIdentity()
|
|
37
|
-
|
|
25
|
+
function ComposerToolbar({ attachments, onAdd, onRemove, isStreaming }) {
|
|
38
26
|
return (
|
|
39
27
|
<div className="flex flex-col">
|
|
40
|
-
{/* Chip strip floats above textarea — hidden when empty */}
|
|
28
|
+
{/* Chip strip floats above the textarea — hidden when empty */}
|
|
41
29
|
<ChatAttachmentChipStrip
|
|
42
30
|
attachments={attachments}
|
|
43
|
-
onRemove={
|
|
31
|
+
onRemove={onRemove}
|
|
44
32
|
disabled={isStreaming}
|
|
33
|
+
size="compact" // narrow drawer surface
|
|
45
34
|
/>
|
|
46
35
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
disabled={isStreaming}
|
|
56
|
-
/>
|
|
57
|
-
<ModelDisplay />
|
|
58
|
-
</div>
|
|
36
|
+
{/* + button lives in the bottom-controls row */}
|
|
37
|
+
<ChatAttachmentAddButton
|
|
38
|
+
attachmentsEnabled={true} // from useChatIdentity().attachmentsEnabled
|
|
39
|
+
attachmentsCount={attachments.length}
|
|
40
|
+
onAddFiles={onAdd}
|
|
41
|
+
disabled={isStreaming}
|
|
42
|
+
size="compact"
|
|
43
|
+
/>
|
|
59
44
|
</div>
|
|
60
45
|
)
|
|
61
46
|
}
|
|
62
47
|
```
|
|
63
48
|
|
|
64
|
-
|
|
49
|
+
## Notes
|
|
50
|
+
|
|
51
|
+
- **No `capture="environment"`** on the hidden file input — prevents iOS Safari from forcing camera-only mode.
|
|
52
|
+
- **Layout stability**: when `attachmentsEnabled` is `false` (async load or anon user), an invisible `<span>` with the same `h-7 w-7` footprint replaces the button, eliminating row-width jumps on identity resolution.
|
|
53
|
+
- Image chips render a local `createObjectURL` blob preview immediately, independent of upload progress.
|
|
54
|
+
- All colors use ODS design tokens; no hex values are used directly.
|
|
55
|
+
|
|
56
|
+
**Source:** [`chat-attachment-bar.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-attachment-bar.tsx)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- source-hash: f8f1c7865379c443151b15db768be877 -->
|
|
2
|
+
Presentational footer composer for the OpenFrame chat panel, rendering either a live `ChatInput` or a read-only archived placeholder above the model/usage row, with optional entity-context picker integration.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ChatComposer` | Component | Main composer component combining input, context strips, and model row |
|
|
9
|
+
| `ChatComposerProps` | Interface | Full prop contract for the composer |
|
|
10
|
+
|
|
11
|
+
## Key Behaviors
|
|
12
|
+
|
|
13
|
+
- **Archived mode** — replaces the input with an unarchive prompt banner (`BoxArchiveIcon` + message)
|
|
14
|
+
- **Context mode** — activated when `contextPicker` is set; wraps input in a unified card with a focus-ring border, renders `ChatContextMemoryBar` (ambient navigation history), `ChatContextChipStrip` (explicitly assigned items), and a `+` plus-menu anchored inside the input's start adornment
|
|
15
|
+
- **Legacy mode** — plain `ChatInput` with an optional standalone `ChatAttachmentAddButton` to the left of the model row
|
|
16
|
+
- **Icon resolution** — memoizes a `type → icon` map from `contextPicker.entityTypes` to avoid rebuilding on every render
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
<ChatComposer
|
|
22
|
+
inputRef={inputRef}
|
|
23
|
+
onSend={handleSend}
|
|
24
|
+
onStop={handleStop}
|
|
25
|
+
sending={isSending}
|
|
26
|
+
placeholder="Message Mingo..."
|
|
27
|
+
model={{ name: 'gpt-4o', tokensUsed: 1200, tokenLimit: 8000 }}
|
|
28
|
+
contextPicker={pickerConfig}
|
|
29
|
+
selectedContextItems={selectedItems}
|
|
30
|
+
onToggleContextItem={handleToggle}
|
|
31
|
+
onRemoveContextItem={handleRemove}
|
|
32
|
+
contextMemoryItems={memoryItems}
|
|
33
|
+
contextPickerOpen={pickerOpen}
|
|
34
|
+
onOpenContextPicker={() => setPickerOpen(true)}
|
|
35
|
+
onCloseContextPicker={() => setPickerOpen(false)}
|
|
36
|
+
mentionQuery={mentionQuery}
|
|
37
|
+
onMentionQueryChange={setMentionQuery}
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Source
|
|
42
|
+
|
|
43
|
+
[`chat-composer.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-composer.tsx)
|
|
@@ -1,15 +1,33 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 837e81768e91b5500387c07ee348adb7 -->
|
|
2
|
+
Compound component set providing the structural layout for an AI chat interface, including header (with avatar, connection status, ticket info, and MSP branding), scrollable content area, and footer regions.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
|
7
|
-
|
|
8
|
-
| `ChatContainer` | Root full-screen wrapper with ODS background and
|
|
9
|
-
| `ChatHeader` |
|
|
10
|
-
| `ChatContent` | Flex-
|
|
11
|
-
| `ChatFooter` |
|
|
12
|
-
| `ConnectionIndicator` | Internal dot
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `ChatContainer` | `forwardRef<HTMLDivElement>` | Root full-screen flex wrapper with ODS background and padding |
|
|
9
|
+
| `ChatHeader` | `forwardRef<HTMLDivElement>` | Header with avatar, connection indicator, ticket status, MSP org card, and action buttons |
|
|
10
|
+
| `ChatContent` | `forwardRef<HTMLDivElement>` | Flex-growing scrollable content region between header and footer |
|
|
11
|
+
| `ChatFooter` | `forwardRef<HTMLDivElement>` | Sticky bottom area housing the input composer |
|
|
12
|
+
| `ConnectionIndicator` | `FC` | Internal pulsing dot reflecting `connected` / `connecting` / `disconnected` states |
|
|
13
|
+
|
|
14
|
+
### `ChatHeader` Notable Props
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Default | Description |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| `connectionStatus` | `'connected' \| 'connecting' \| 'disconnected'` | `'disconnected'` | Drives `ConnectionIndicator` color |
|
|
19
|
+
| `ticketInfo` | `object` | — | Renders a ticket title, meta, and `TicketStatusTag` in the sub-row |
|
|
20
|
+
| `mspOrganization` | `object` | — | Shows `MspOrganizationCard` when no `ticketInfo` is present |
|
|
21
|
+
| `fullWidth` | `boolean` | `false` | Drops the `max-w-ods-content-narrow` column constraint for side-panel use |
|
|
22
|
+
| `bare` | `boolean` | `false` | Removes card chrome (border, background, rounding) |
|
|
23
|
+
| `isLoading` | `boolean` | `false` | Renders skeleton placeholders in place of avatar and name |
|
|
24
|
+
|
|
25
|
+
### `ChatFooterProps`
|
|
26
|
+
|
|
27
|
+
| Prop | Type | Description |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `fullWidth` | `boolean` | Drops inner `max-w-ods-content-narrow` wrapper |
|
|
30
|
+
| `contentClassName` | `string` *(deprecated)* | Legacy escape hatch for custom width/padding overrides |
|
|
13
31
|
|
|
14
32
|
## Usage Example
|
|
15
33
|
|
|
@@ -19,40 +37,38 @@ import {
|
|
|
19
37
|
ChatHeader,
|
|
20
38
|
ChatContent,
|
|
21
39
|
ChatFooter,
|
|
22
|
-
} from "
|
|
40
|
+
} from "@openframe/ui/chat"
|
|
23
41
|
|
|
24
|
-
export function
|
|
42
|
+
export function MyChatPanel() {
|
|
25
43
|
return (
|
|
26
44
|
<ChatContainer>
|
|
27
45
|
<ChatHeader
|
|
28
|
-
userName=
|
|
46
|
+
userName="Fae"
|
|
29
47
|
userTitle="Your Personal Assistant"
|
|
30
48
|
connectionStatus="connected"
|
|
31
|
-
serverUrl="
|
|
49
|
+
serverUrl="acme.flamingo.run"
|
|
32
50
|
showNewChat
|
|
33
|
-
onNewChat={() =>
|
|
34
|
-
onClose={() =>
|
|
51
|
+
onNewChat={() => startNewSession()}
|
|
52
|
+
onClose={() => closePanel()}
|
|
35
53
|
ticketInfo={{
|
|
36
|
-
title: "Printer
|
|
37
|
-
meta: "
|
|
38
|
-
status: "
|
|
54
|
+
title: "Printer not responding",
|
|
55
|
+
meta: "#4821 · Open",
|
|
56
|
+
status: "open",
|
|
57
|
+
statusName: "Open",
|
|
39
58
|
}}
|
|
40
59
|
fullWidth
|
|
41
60
|
/>
|
|
42
61
|
<ChatContent>
|
|
43
|
-
{/* message
|
|
62
|
+
{/* message bubbles */}
|
|
44
63
|
</ChatContent>
|
|
45
64
|
<ChatFooter fullWidth>
|
|
46
|
-
{/* input
|
|
65
|
+
{/* composer input */}
|
|
47
66
|
</ChatFooter>
|
|
48
67
|
</ChatContainer>
|
|
49
68
|
)
|
|
50
69
|
}
|
|
51
70
|
```
|
|
52
71
|
|
|
53
|
-
##
|
|
72
|
+
## Source
|
|
54
73
|
|
|
55
|
-
-
|
|
56
|
-
- `ChatFooter.contentClassName` is a legacy escape hatch for custom `max-w` overrides; prefer `fullWidth` for standard full-panel layouts.
|
|
57
|
-
- `ChatHeader` accepts a `bare` prop to remove card chrome (shadow, border, background) for flush-mounted contexts.
|
|
58
|
-
- All components are `forwardRef`-compatible and spread unknown props to their root `<div>`.
|
|
74
|
+
[`chat-container.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-container.tsx)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- source-hash: 841aa743a8a7671177fef949f75252e1 -->
|
|
2
|
+
A passive "context memory" strip rendered above the chat composer, showing a count of ambient remembered entities ("5 recently viewed items in context") with an ellipsis trigger that opens a scrollable dropdown listing each item with an optional remove button.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `ChatContextMemoryBar` (exported component)
|
|
7
|
+
|
|
8
|
+
The sole export. Renders `null` when `items` is empty, so it has zero DOM footprint when unused.
|
|
9
|
+
|
|
10
|
+
**Props (`ChatContextMemoryBarProps`):**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Description |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `items` | `ChatContextItem[]` | Remembered entities, most-recent-first |
|
|
15
|
+
| `onRemove` | `(item: ChatContextItem) => void` | Optional removal handler; omit for read-only |
|
|
16
|
+
| `resolveIcon` | `(item: ChatContextItem) => React.ReactNode` | Entity-type icon resolver matching the picker/chip icon map |
|
|
17
|
+
| `disabled` | `boolean` | Disables remove buttons (e.g. during streaming) |
|
|
18
|
+
| `className` | `string` | Additional classes for the root strip |
|
|
19
|
+
|
|
20
|
+
### Internal behaviors
|
|
21
|
+
|
|
22
|
+
- **Outside-click dismiss** — uses capture-phase `mousedown`/`touchstart` listeners on `document` to reliably close the dropdown even inside resizable drawers or `contentEditable` ancestors that may call `stopPropagation`.
|
|
23
|
+
- **Auto-close on empty** — a `useEffect` watching `items.length` closes the dropdown before the bar unmounts, preventing a stale popover outliving its trigger.
|
|
24
|
+
- **Escape key** — closes the dropdown via `onKeyDown` on the root element.
|
|
25
|
+
|
|
26
|
+
## Usage Example
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { ChatContextMemoryBar } from './chat-context-memory-bar'
|
|
30
|
+
import type { ChatContextItem } from './types/context-item.types'
|
|
31
|
+
|
|
32
|
+
const memoryItems: ChatContextItem[] = [
|
|
33
|
+
{ type: 'ticket', id: '42', label: 'Printer offline – HQ' },
|
|
34
|
+
{ type: 'device', id: '7', label: 'DESKTOP-ABC123' },
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
function Composer() {
|
|
38
|
+
const handleRemove = (item: ChatContextItem) => {
|
|
39
|
+
console.log('Remove from memory:', item.id)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<ChatContextMemoryBar
|
|
44
|
+
items={memoryItems}
|
|
45
|
+
onRemove={handleRemove}
|
|
46
|
+
resolveIcon={(item) => <EntityIcon type={item.type} />}
|
|
47
|
+
disabled={isStreaming}
|
|
48
|
+
/>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
> **Placement note:** This "ambient" bar sits above `<ChatContextChipStrip>` (user-assigned items). Both live above the textarea — memory on top (passive), chips below (active per-message selection).
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<!-- source-hash: 561900464791edb34123d4b8cbc3991e -->
|
|
2
|
+
Renders a three-part entity-context picker UI for the chat composer: a `+` trigger button, a two-level popover for browsing and searching entity types/items, and a chip strip for displaying selected items.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `ChatComposerPlusMenu`
|
|
7
|
+
The `+` button rendered inside the composer input. Toggles the context picker open/closed, with visual states (grey → white → accent-yellow) reflecting hover, press, and open states.
|
|
8
|
+
|
|
9
|
+
**Props:**
|
|
10
|
+
| Prop | Type | Description |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| `onToggle` | `() => void` | Opens/closes the picker |
|
|
13
|
+
| `open` | `boolean` | Drives the accent-yellow active state |
|
|
14
|
+
| `disabled` | `boolean` | Disables the trigger during streaming |
|
|
15
|
+
| `dropdown` | `React.ReactNode` | The `<ChatContextPicker>` anchored to this button |
|
|
16
|
+
|
|
17
|
+
### `ChatContextPicker`
|
|
18
|
+
A two-level popover (`bottom-full` positioned above the input). Level 1 lists entity types; Level 2 shows a debounced-search, multi-select list of items with checkmarks. Supports `@`-mention query seeding.
|
|
19
|
+
|
|
20
|
+
**Props:**
|
|
21
|
+
| Prop | Type | Description |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| `open` | `boolean` | Controls render |
|
|
24
|
+
| `config` | `ChatContextPickerConfig` | Host-provided entity types and `search()` resolver |
|
|
25
|
+
| `selectedItems` | `ChatContextItem[]` | Drives ✓ state |
|
|
26
|
+
| `onToggleItem` | `(item) => void` | Add/remove selection |
|
|
27
|
+
| `onClose` | `() => void` | Escape, outside-click, or X |
|
|
28
|
+
| `mentionQuery` | `string \| null` | Pre-filters type list from `@` trigger |
|
|
29
|
+
|
|
30
|
+
### Constants
|
|
31
|
+
|
|
32
|
+
| Constant | Value | Purpose |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `CHAT_CONTEXT_ITEMS_DEFAULT_MAX` | `10` | Max selectable items |
|
|
35
|
+
| `SEARCH_DEBOUNCE_MS` | `300` | Keystroke debounce before calling `config.search()` |
|
|
36
|
+
| `ITEMS_SKELETON_ROWS` | `10` | Suspense fallback row count |
|
|
37
|
+
|
|
38
|
+
## Usage Example
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import {
|
|
42
|
+
ChatComposerPlusMenu,
|
|
43
|
+
ChatContextPicker,
|
|
44
|
+
} from './chat-context-picker'
|
|
45
|
+
|
|
46
|
+
function ComposerToolbar() {
|
|
47
|
+
const [open, setOpen] = useState(false)
|
|
48
|
+
const [selected, setSelected] = useState<ChatContextItem[]>([])
|
|
49
|
+
|
|
50
|
+
const config: ChatContextPickerConfig = {
|
|
51
|
+
entityTypes: [
|
|
52
|
+
{ id: 'device', label: 'Device' },
|
|
53
|
+
{ id: 'script', label: 'Script' },
|
|
54
|
+
],
|
|
55
|
+
search: async (type, query, signal) => fetchItems(type, query, signal),
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const toggleItem = (item: ChatContextItem) =>
|
|
59
|
+
setSelected((prev) =>
|
|
60
|
+
prev.some((i) => i.id === item.id)
|
|
61
|
+
? prev.filter((i) => i.id !== item.id)
|
|
62
|
+
: [...prev, item],
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<ChatComposerPlusMenu
|
|
67
|
+
open={open}
|
|
68
|
+
onToggle={() => setOpen((v) => !v)}
|
|
69
|
+
dropdown={
|
|
70
|
+
<ChatContextPicker
|
|
71
|
+
open={open}
|
|
72
|
+
config={config}
|
|
73
|
+
selectedItems={selected}
|
|
74
|
+
onToggleItem={toggleItem}
|
|
75
|
+
onClose={() => setOpen(false)}
|
|
76
|
+
/>
|
|
77
|
+
}
|
|
78
|
+
/>
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Behavioral Notes
|
|
84
|
+
|
|
85
|
+
- **Height measurement** (`useLayoutEffect`): caps the popover to the real visible space above the button by walking up to the nearest `overflow` clip ancestor — handles drawer/panel layouts without hard-coded pixel values.
|
|
86
|
+
- **Outside-click handling**: ignores clicks on `[data-context-trigger]` so the `+` button can toggle cleanly without immediately re-closing.
|
|
87
|
+
- **Library boundary**: the component owns only UI and selection state. All data fetching is delegated to `config.search()` — the library has no knowledge of specific entity types.
|
|
88
|
+
|
|
89
|
+
**Source:** [`chat-context-picker.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-context-picker.tsx)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- source-hash: 3f73058e6afda4a07e57e42605ab516d -->
|
|
2
|
+
A 56×56 square icon button component for the chat panel's top-navigation bar, supporting configurable 1px cell dividers and accessible focus styling.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`ChatHeaderIconButton`** — A `forwardRef` button component rendering a fixed-size (`size-14`) icon cell with optional left/right/none border dividers, hover background transitions, and focus-visible ring support.
|
|
7
|
+
- **`ChatHeaderIconButtonProps`** — Extends `React.ButtonHTMLAttributes<HTMLButtonElement>` with a `divider` prop (`'left' | 'right' | 'none'`, default `'left'`).
|
|
8
|
+
|
|
9
|
+
## Usage Example
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import { ChatHeaderIconButton } from './chat-header-icon-button'
|
|
13
|
+
import { X, ChevronLeft, ArchiveIcon } from 'lucide-react'
|
|
14
|
+
|
|
15
|
+
// Trailing cell (default left divider)
|
|
16
|
+
<ChatHeaderIconButton onClick={onClose} aria-label="Close chat">
|
|
17
|
+
<X className="size-5" />
|
|
18
|
+
</ChatHeaderIconButton>
|
|
19
|
+
|
|
20
|
+
// Leading back chevron (right divider)
|
|
21
|
+
<ChatHeaderIconButton divider="right" onClick={onBack} aria-label="Go back">
|
|
22
|
+
<ChevronLeft className="size-5" />
|
|
23
|
+
</ChatHeaderIconButton>
|
|
24
|
+
|
|
25
|
+
// No divider
|
|
26
|
+
<ChatHeaderIconButton divider="none" onClick={onArchive} aria-label="Archive">
|
|
27
|
+
<ArchiveIcon className="size-5" />
|
|
28
|
+
</ChatHeaderIconButton>
|
|
29
|
+
|
|
30
|
+
// As a Radix asChild trigger
|
|
31
|
+
<DropdownMenu.Trigger asChild>
|
|
32
|
+
<ChatHeaderIconButton aria-label="More options">
|
|
33
|
+
<MoreHorizontal className="size-5" />
|
|
34
|
+
</ChatHeaderIconButton>
|
|
35
|
+
</DropdownMenu.Trigger>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Notes
|
|
39
|
+
|
|
40
|
+
- Icon color stays `ods-text-secondary` on hover — only the background transitions to `ods-bg-hover`.
|
|
41
|
+
- `forwardRef` + full prop spread make it composable as a Radix `asChild` trigger.
|
|
42
|
+
- `type="button"` is set by default to prevent accidental form submission.
|
|
43
|
+
- Source: [`chat-header-icon-button.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-header-icon-button.tsx)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- source-hash: a50c170e985f2e097a37aa07979fae4b -->
|
|
2
|
+
Controlled inline search field that replaces the chat panel header's title area when search is active, debouncing typed input before emitting it to the host for server-side refetching.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `ChatHeaderSearchField`
|
|
7
|
+
|
|
8
|
+
The primary export. Renders a leading `SearchIcon` alongside a borderless, full-height `<input>` that takes over the header title slot. Manages its own text state locally for snappy typing, then propagates the debounced query (300 ms) via `onSearchChange`.
|
|
9
|
+
|
|
10
|
+
**Collapse lifecycle** — exit animations are coordinated manually:
|
|
11
|
+
|
|
12
|
+
1. `beginCollapse()` sets `exiting = true`, disabling the input and triggering CSS leave animations.
|
|
13
|
+
2. `finishCollapse()` is called on `animationend` of the root element (bubbled child events are ignored).
|
|
14
|
+
3. A 240 ms `setTimeout` fallback fires `finishCollapse` when `animationend` never fires (reduced-motion or stripped utilities).
|
|
15
|
+
|
|
16
|
+
**Stale-debounce guard** — when Escape is pressed or the field blurs empty, the cleared term is emitted synchronously and recorded in `lastEmitted`, preventing the still-pending 300 ms debounce from triggering a redundant server round-trip after unmount begins.
|
|
17
|
+
|
|
18
|
+
### `ChatHeaderSearchFieldProps`
|
|
19
|
+
|
|
20
|
+
| Prop | Type | Default | Description |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| `initialValue` | `string` | `''` | Seeds the input on mount |
|
|
23
|
+
| `onSearchChange` | `(query: string) => void` | — | Receives the debounced search term |
|
|
24
|
+
| `onCollapse` | `() => void` | — | Called after the leave animation completes |
|
|
25
|
+
| `autoFocus` | `boolean` | `true` | Focuses the input on mount |
|
|
26
|
+
| `className` | `string` | — | Appended to the root element |
|
|
27
|
+
|
|
28
|
+
## Usage Example
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { ChatHeaderSearchField } from './chat-header-search-field'
|
|
32
|
+
|
|
33
|
+
function ChatPanelHeader() {
|
|
34
|
+
const [searchOpen, setSearchOpen] = React.useState(false)
|
|
35
|
+
const [query, setQuery] = React.useState('')
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<header>
|
|
39
|
+
{searchOpen ? (
|
|
40
|
+
<ChatHeaderSearchField
|
|
41
|
+
initialValue={query}
|
|
42
|
+
onSearchChange={(term) => setQuery(term)}
|
|
43
|
+
onCollapse={() => setSearchOpen(false)}
|
|
44
|
+
/>
|
|
45
|
+
) : (
|
|
46
|
+
<h1>Chats</h1>
|
|
47
|
+
)}
|
|
48
|
+
</header>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
```
|
|
@@ -1,29 +1,35 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 5ef079ca48dfe4a6d1f2fa08a9c755fe -->
|
|
2
|
+
Rich contenteditable chat input component with support for `@`-mention chips, slash-command suggestions, send/stop controls, and a ghost preview overlay.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
###
|
|
7
|
-
A `forwardRef` component that renders a textarea-based chat input with:
|
|
8
|
-
- **Slash command autocomplete** — triggers on `/` prefix, debounced 150ms, keyboard-navigable dropdown
|
|
9
|
-
- **Send/Stop modes** — toggles between send and stop-stream actions based on `sending`/`onStop` props
|
|
10
|
-
- **Awaiting response indicator** — replaces input with `ChatTypingIndicator` while waiting for a reply
|
|
11
|
-
- **Auto-refocus** — restores focus after send completes or streaming stops
|
|
6
|
+
### Exported
|
|
12
7
|
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
- **`ChatInput`** (`forwardRef<ChatInputRef, ChatInputProps>`) — Primary component. Renders a `contenteditable` div editor rather than a `<textarea>`, enabling inline mention chips as atomic DOM nodes.
|
|
9
|
+
|
|
10
|
+
### Internal Helpers
|
|
11
|
+
|
|
12
|
+
| Function | Purpose |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `parseSegments` | Splits a draft string into `text` and `mention` segments using `MENTION_GLOBAL` regex |
|
|
15
|
+
| `serialize` | Walks the editor's `childNodes` to reconstruct the draft string from text nodes and chip elements |
|
|
16
|
+
| `buildChipEl` | Creates a non-React DOM node for a committed `@`-mention using `renderToStaticMarkup` on the `Tag` component |
|
|
17
|
+
| `rebuildDom` | Replaces editor content wholesale from a value string + metadata map |
|
|
18
|
+
| `placeCaretAtEnd` / `placeCaretAtOffset` | Caret placement utilities using the Selection API |
|
|
19
|
+
| `insertTextAtCaret` | Inserts plain text at caret without injecting `<br>` or `<div>` elements |
|
|
20
|
+
|
|
21
|
+
### `ChatInputRef` (Imperative Handle)
|
|
15
22
|
|
|
16
23
|
| Method | Description |
|
|
17
24
|
|---|---|
|
|
18
25
|
| `focus()` / `blur()` | Programmatic focus control |
|
|
19
|
-
| `clear()` | Resets
|
|
20
|
-
| `setValue(next)` |
|
|
21
|
-
| `setValueAndCursor(next, offset)` |
|
|
22
|
-
| `submit(next)` | Fires
|
|
23
|
-
| `getValue()` |
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
Regex `/^\/([a-z][a-z0-9-]*)?$/` — kept in sync with server-side slash command registration to prevent suggesting commands the API would reject.
|
|
26
|
+
| `clear()` | Resets draft and metadata |
|
|
27
|
+
| `setValue(next)` | Replaces editor content |
|
|
28
|
+
| `setValueAndCursor(next, offset)` | Replaces content and positions caret |
|
|
29
|
+
| `submit(next)` | Fires the send handler directly |
|
|
30
|
+
| `getValue()` | Synchronous draft read |
|
|
31
|
+
| `removeMentionTrigger()` | Strips trailing `@query` from draft |
|
|
32
|
+
| `commitMention(token, meta?)` | Replaces in-progress `@query` with a chip token |
|
|
27
33
|
|
|
28
34
|
## Usage Example
|
|
29
35
|
|
|
@@ -32,25 +38,52 @@ import { useRef } from "react"
|
|
|
32
38
|
import { ChatInput } from "./chat-input"
|
|
33
39
|
import type { ChatInputRef } from "./types"
|
|
34
40
|
|
|
35
|
-
function
|
|
41
|
+
function MyComposer() {
|
|
36
42
|
const inputRef = useRef<ChatInputRef>(null)
|
|
37
43
|
|
|
38
|
-
const prefillSlashCommand = () => {
|
|
39
|
-
inputRef.current?.setValue("/reboot ")
|
|
40
|
-
}
|
|
41
|
-
|
|
42
44
|
return (
|
|
43
45
|
<ChatInput
|
|
44
46
|
ref={inputRef}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
fetchCommands: async (prefix, signal) => fetchSlashCommands(prefix, signal),
|
|
47
|
+
placeholder="Type a message..."
|
|
48
|
+
onSend={(message) => {
|
|
49
|
+
console.log("Sending:", message)
|
|
50
|
+
return fetch("/api/chat", { method: "POST", body: message })
|
|
51
|
+
.then(() => true)
|
|
51
52
|
}}
|
|
53
|
+
onMentionQueryChange={(query) => {
|
|
54
|
+
// fetch mention suggestions for `query`
|
|
55
|
+
}}
|
|
56
|
+
slashCommands={[
|
|
57
|
+
{ name: "summarize", description: "Summarize the conversation" },
|
|
58
|
+
]}
|
|
52
59
|
autoFocus
|
|
53
60
|
/>
|
|
54
61
|
)
|
|
55
62
|
}
|
|
56
|
-
|
|
63
|
+
|
|
64
|
+
// Imperative control
|
|
65
|
+
inputRef.current?.setValue("/summarize ")
|
|
66
|
+
inputRef.current?.commitMention("ticket:abc123", {
|
|
67
|
+
label: "Ticket #123",
|
|
68
|
+
icon: <TicketIcon />,
|
|
69
|
+
})
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Key Regex Constants
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// Committed mention token in draft string
|
|
76
|
+
const MENTION_GLOBAL = /@[A-Za-z0-9_.+/=-]+:[A-Za-z0-9_.+/=-]+/g
|
|
77
|
+
|
|
78
|
+
// In-progress @query at end of draft (excludes email addresses)
|
|
79
|
+
const MENTION_TRIGGER_AT_END = /(^|\s)@([\w.-]*)$/
|
|
80
|
+
|
|
81
|
+
// Slash command activation trigger
|
|
82
|
+
const SLASH_INPUT_TRIGGER = /^\/([a-z][a-z0-9-]*)?$/
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
> **Note:** `SLASH_INPUT_TRIGGER` is shared with `lib/config/slash-commands-config.ts` and the chat-route slash dispatch parser — keep all three in sync.
|
|
86
|
+
|
|
87
|
+
## Source
|
|
88
|
+
|
|
89
|
+
[`chat-input.tsx` on GitHub](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-input.tsx)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- source-hash: 5fc10ddb4837c0d5506138aed4e8345a -->
|
|
2
|
+
Reusable empty-state component for chat-list surfaces, rendering a muted icon above a title and optional description in a vertically centred layout.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `ChatListEmptyState`
|
|
7
|
+
A client component that renders a centred empty state with three elements:
|
|
8
|
+
- **Icon** — a 24px muted glyph (`ods-text-secondary`) wrapped in a fixed `size-6` container
|
|
9
|
+
- **Title** — displayed as an `h4` paragraph
|
|
10
|
+
- **Description** — optional `h6` caption rendered below the title
|
|
11
|
+
|
|
12
|
+
### `ChatListEmptyStateProps`
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Required | Description |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `icon` | `React.ReactNode` | ✅ | Pre-sized 24px icon glyph |
|
|
17
|
+
| `title` | `React.ReactNode` | ✅ | Title line rendered as `h4` |
|
|
18
|
+
| `description` | `React.ReactNode` | ❌ | Optional caption rendered as `h6` |
|
|
19
|
+
| `className` | `string` | ❌ | Appended to root element |
|
|
20
|
+
|
|
21
|
+
## Usage Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { ChatListEmptyState } from './chat-list-empty-state'
|
|
25
|
+
import { ChatsIcon } from '../icons'
|
|
26
|
+
|
|
27
|
+
// With title only
|
|
28
|
+
<ChatListEmptyState
|
|
29
|
+
icon={<ChatsIcon size={24} />}
|
|
30
|
+
title="No active chats"
|
|
31
|
+
/>
|
|
32
|
+
|
|
33
|
+
// With description
|
|
34
|
+
<ChatListEmptyState
|
|
35
|
+
icon={<ChatsIcon size={24} />}
|
|
36
|
+
title="No archived chats"
|
|
37
|
+
description="Completed conversations will appear here."
|
|
38
|
+
className="my-custom-class"
|
|
39
|
+
/>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> **Design note:** This component is shared between the "Current Chats" rail and the Chat Archive page (Figma node `113:60939`) to keep both surfaces visually consistent.
|
|
43
|
+
|
|
44
|
+
**Source:** [`flamingo-stack/openframe-oss-lib`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-list-empty-state.tsx)
|