@flamingo-stack/openframe-frontend-core 0.0.213 → 0.0.214
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-3JWIJJ44.js → chunk-5OWDOFKK.js} +2 -2
- package/dist/{chunk-IK2X5YJU.js → chunk-HWY35EAK.js} +2 -2
- package/dist/{chunk-OTKJASSX.cjs → chunk-IZL2KEH6.cjs} +24 -24
- package/dist/{chunk-OTKJASSX.cjs.map → chunk-IZL2KEH6.cjs.map} +1 -1
- package/dist/{chunk-35XIT2CF.cjs → chunk-KDNGUYZM.cjs} +17 -17
- package/dist/{chunk-35XIT2CF.cjs.map → chunk-KDNGUYZM.cjs.map} +1 -1
- package/dist/{chunk-ZTJVRSN5.js → chunk-UKND27XC.js} +2 -2
- package/dist/chunk-UKND27XC.js.map +1 -0
- package/dist/{chunk-ZDF6F7ED.cjs → chunk-YZUUFTIK.cjs} +2 -2
- package/dist/chunk-YZUUFTIK.cjs.map +1 -0
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/index.cjs +49 -49
- package/dist/components/index.js +2 -2
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/tickets/index.cjs +61 -61
- package/dist/components/tickets/index.js +3 -3
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/.index.md +36 -34
- package/src/components/.alert-dialog.md +27 -23
- package/src/components/.announcement-bar.md +26 -21
- package/src/components/.breadcrumb.md +19 -15
- package/src/components/.calendar.md +24 -19
- package/src/components/.categories-cart.md +29 -24
- package/src/components/.checkbox.md +23 -25
- package/src/components/.chevron-button.md +37 -32
- package/src/components/.comment-card.md +32 -62
- package/src/components/.dialog.md +26 -26
- package/src/components/.dynamic-skeleton.md +54 -57
- package/src/components/.empty-state.md +42 -51
- package/src/components/.faq-accordion.md +27 -21
- package/src/components/.filter-chip.md +41 -24
- package/src/components/.flamingo-logo.md +20 -23
- package/src/components/.footer-waitlist-button.md +29 -22
- package/src/components/.footer.md +32 -32
- package/src/components/.icons-block.md +27 -17
- package/src/components/.image-cropper.md +41 -32
- package/src/components/.index.md +33 -39
- package/src/components/.input.md +31 -35
- package/src/components/.logs-list.md +31 -20
- package/src/components/.media-carousel.md +35 -36
- package/src/components/.open-source-features.md +33 -16
- package/src/components/.pagination.md +52 -51
- package/src/components/.provider-button.md +21 -23
- package/src/components/.select.md +31 -20
- package/src/components/.sidebar.md +34 -24
- package/src/components/.smooth-accordion.md +29 -24
- package/src/components/.social-icon-row.md +36 -32
- package/src/components/.textarea.md +25 -31
- package/src/components/.tool-icon.md +24 -26
- package/src/components/.unified-filter-logic.md +37 -30
- package/src/components/.unified-pagination.md +23 -22
- package/src/components/.user-summary-stub.md +38 -22
- package/src/components/.vendor-display-button.md +25 -25
- package/src/components/.vendor-icon.md +33 -25
- package/src/components/.why-it-matters.md +28 -25
- package/src/components/chat/.approval-batch-message.md +51 -0
- package/src/components/chat/.approval-request-message.md +35 -34
- package/src/components/chat/.chat-attachment-bar.md +64 -0
- package/src/components/chat/.chat-container.md +36 -18
- package/src/components/chat/.chat-input.md +37 -20
- package/src/components/chat/.chat-message-enhanced.md +30 -49
- package/src/components/chat/.chat-message-list.md +45 -32
- package/src/components/chat/.chat-message-skeleton.md +26 -22
- package/src/components/chat/.chat-panel-context.md +52 -0
- package/src/components/chat/.chat-ref.types.md +42 -0
- package/src/components/chat/.chat-sidebar-skeleton.md +34 -25
- package/src/components/chat/.chat-sidebar.md +31 -26
- package/src/components/chat/.chat-ticket-list.md +39 -0
- package/src/components/chat/.context-compaction-display.md +36 -0
- package/src/components/chat/.cycling-phrase.md +52 -0
- package/src/components/chat/.embeddable-chat.md +48 -0
- package/src/components/chat/.expand-chevron.md +24 -0
- package/src/components/chat/.index.md +31 -35
- package/src/components/chat/.mingo-onboarding-card-skeleton.md +44 -0
- package/src/components/chat/.mingo-onboarding-card.md +62 -0
- package/src/components/chat/.model-display.md +32 -30
- package/src/components/chat/.nav-link-anchor-via-runtime.md +40 -0
- package/src/components/chat/.remark-card-links.md +38 -0
- package/src/components/chat/.slash-command-suggestions.md +47 -0
- package/src/components/chat/.source-action-button.md +48 -0
- package/src/components/chat/.thinking-display.md +42 -0
- package/src/components/chat/.tool-call-blocks.md +45 -0
- package/src/components/chat/.tool-execution-display.md +44 -36
- package/src/components/chat/chat-container.tsx +1 -1
- package/src/components/chat/entity-cards/.admin-content-card.md +43 -0
- package/src/components/chat/entity-cards/.block-card.md +47 -0
- package/src/components/chat/entity-cards/.blog-card.md +52 -0
- package/src/components/chat/entity-cards/.blog-image-placeholder.md +39 -0
- package/src/components/chat/entity-cards/.campaign-card-admin.md +47 -0
- package/src/components/chat/entity-cards/.case-study-card.md +58 -0
- package/src/components/chat/entity-cards/.chat-ticket-item.md +40 -0
- package/src/components/chat/entity-cards/.chat-video-entity-card.md +43 -0
- package/src/components/chat/entity-cards/.customer-interview-card.md +53 -0
- package/src/components/chat/entity-cards/.data-room-doc-card.md +47 -0
- package/src/components/chat/entity-cards/.dispatch.md +39 -0
- package/src/components/chat/entity-cards/.entity-author-card.md +51 -0
- package/src/components/chat/entity-cards/.generic-entity-card.md +62 -0
- package/src/components/chat/entity-cards/.github-activity-card.md +61 -0
- package/src/components/chat/entity-cards/.hubspot-ticket-card.md +53 -0
- package/src/components/chat/entity-cards/.index.md +66 -0
- package/src/components/chat/entity-cards/.investor-update-card.md +47 -0
- package/src/components/chat/entity-cards/.onboarding-guide-card.md +58 -0
- package/src/components/chat/entity-cards/.product-release-card-defaults.md +31 -0
- package/src/components/chat/entity-cards/.product-release-card.md +29 -0
- package/src/components/chat/entity-cards/.program-card-defaults.md +41 -0
- package/src/components/chat/entity-cards/.program-card.md +59 -0
- package/src/components/chat/entity-cards/.roadmap-card.md +46 -0
- package/src/components/chat/entity-cards/.roadmap-vote-button.md +52 -0
- package/src/components/chat/entity-cards/.slack-message-card.md +48 -0
- package/src/components/chat/entity-cards/.task-type-icon.md +47 -0
- package/src/components/chat/hooks/.index.md +36 -21
- package/src/components/chat/hooks/.use-chat-attachment-image-gallery.md +51 -0
- package/src/components/chat/hooks/.use-chat-attachments.md +48 -0
- package/src/components/chat/hooks/.use-chat-card-item.md +39 -0
- package/src/components/chat/hooks/.use-chat-identity.md +45 -0
- package/src/components/chat/hooks/.use-chat.md +58 -0
- package/src/components/chat/hooks/.use-chunk-catchup.md +46 -48
- package/src/components/chat/hooks/.use-close-on-navigation.md +44 -0
- package/src/components/chat/hooks/.use-collapsible.md +48 -0
- package/src/components/chat/hooks/.use-embedded-chat.md +32 -0
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +40 -0
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +52 -0
- package/src/components/chat/hooks/.use-nats-dialog-subscription.md +49 -30
- package/src/components/chat/hooks/.use-proxied-image-url.md +40 -0
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +43 -40
- package/src/components/chat/hooks/.use-slash-commands.md +46 -0
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +34 -0
- package/src/components/chat/hooks/.use-sse.md +60 -0
- package/src/components/chat/hooks/.use-unified-chat.md +57 -0
- package/src/components/chat/types/.api.types.md +52 -38
- package/src/components/chat/types/.chat.types.md +43 -34
- package/src/components/chat/types/.component.types.md +47 -48
- package/src/components/chat/types/.index.md +20 -27
- package/src/components/chat/types/.message.types.md +58 -48
- package/src/components/chat/types/.network.types.md +57 -31
- package/src/components/chat/types/.processing.types.md +49 -31
- package/src/components/chat/types/.unified-chat-state.types.md +41 -0
- package/src/components/chat/types/entities/.blog.md +43 -0
- package/src/components/chat/types/entities/.case-study.md +26 -0
- package/src/components/chat/types/entities/.content-ref.md +41 -0
- package/src/components/chat/types/entities/.customer-interview.md +28 -0
- package/src/components/chat/types/entities/.data-room-doc.md +36 -0
- package/src/components/chat/types/entities/.github-activity.md +43 -0
- package/src/components/chat/types/entities/.hubspot-ticket.md +53 -0
- package/src/components/chat/types/entities/.index.md +42 -0
- package/src/components/chat/types/entities/.investor-update.md +45 -0
- package/src/components/chat/types/entities/.onboarding-guide.md +50 -0
- package/src/components/chat/types/entities/.program-types.md +57 -0
- package/src/components/chat/types/entities/.roadmap-item.md +58 -0
- package/src/components/chat/types/entities/.slack-message.md +35 -0
- package/src/components/chat/utils/.agent-status-message.md +45 -0
- package/src/components/chat/utils/.auto-continuation-directive.md +58 -0
- package/src/components/chat/utils/.chat-attachment-markdown.md +54 -0
- package/src/components/chat/utils/.chat-authed-fetch.md +25 -0
- package/src/components/chat/utils/.chat-nav-resolution.md +46 -0
- package/src/components/chat/utils/.chat-proxy-auth-storage.md +38 -0
- package/src/components/chat/utils/.chip-action-class.md +34 -0
- package/src/components/chat/utils/.chip-styles.md +46 -0
- package/src/components/chat/utils/.chunk-parser.md +38 -28
- package/src/components/chat/utils/.clickup-task-type-utils.md +48 -0
- package/src/components/chat/utils/.compact-card-classes.md +62 -0
- package/src/components/chat/utils/.decide-new-tab.md +51 -0
- package/src/components/chat/utils/.external-app-urls.md +29 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +25 -29
- package/src/components/chat/utils/.flatten-assistant-content.md +34 -0
- package/src/components/chat/utils/.icon-registry.md +46 -0
- package/src/components/chat/utils/.index.md +37 -32
- package/src/components/chat/utils/.is-cross-origin-url.md +35 -0
- package/src/components/chat/utils/.message-segment-accumulator.md +25 -34
- package/src/components/chat/utils/.nav-anchor-props.md +44 -0
- package/src/components/chat/utils/.nav-click-handler.md +47 -0
- package/src/components/chat/utils/.onboarding-icons.md +28 -0
- package/src/components/chat/utils/.process-historical-messages.md +46 -35
- package/src/components/chat/utils/.scroll-anchor.md +40 -0
- package/src/components/chat/utils/.slash-dispatch-utils.md +44 -0
- package/src/components/chat/utils/.source-icons.md +35 -0
- package/src/components/chat/utils/.source-row-cta.md +54 -0
- package/src/components/chat/utils/.tool-call-helpers.md +42 -0
- package/src/components/contact/.contact-form.md +43 -0
- package/src/components/contact/.index.md +27 -0
- package/src/components/features/.array-entry-manager.md +36 -45
- package/src/components/features/.changelog-manager.md +47 -21
- package/src/components/features/.changelog-sections-manager.md +21 -26
- package/src/components/features/.command-box.md +31 -28
- package/src/components/features/.entity-summary-editor.md +46 -0
- package/src/components/features/.entity-video-section.md +51 -0
- package/src/components/features/.figma-prototype-viewer.md +48 -29
- package/src/components/features/.filters-dropdown.md +33 -46
- package/src/components/features/.highlight-config-section.md +42 -0
- package/src/components/features/.highlight-generation-section.md +46 -0
- package/src/components/features/.highlight-video-combined-section.md +47 -0
- package/src/components/features/.highlight-video-preview.md +44 -0
- package/src/components/features/.highlight-video-section.md +47 -0
- package/src/components/features/.index.md +40 -66
- package/src/components/features/.media-gallery-manager.md +48 -38
- package/src/components/features/.more-about-button.md +22 -19
- package/src/components/features/.og-editor-preview.md +40 -36
- package/src/components/features/.parallax-image-showcase.md +33 -26
- package/src/components/features/.paths-display.md +42 -43
- package/src/components/features/.platform-badge.md +37 -36
- package/src/components/features/.platform-filter.md +23 -16
- package/src/components/features/.policy-configuration-panel.md +48 -56
- package/src/components/features/.provider-button.md +33 -36
- package/src/components/features/.push-button-selector.md +40 -29
- package/src/components/features/.release-media-manager.md +46 -31
- package/src/components/features/.section-selector.md +26 -31
- package/src/components/features/.select-button.md +35 -25
- package/src/components/features/.seo-editor-preview.md +41 -44
- package/src/components/features/.social-links-manager.md +25 -19
- package/src/components/features/.start-with-openframe-button.md +37 -29
- package/src/components/features/.status-filter-component.md +36 -20
- package/src/components/features/.tags-selector.md +40 -24
- package/src/components/features/.transcribe-and-summarize-combined-section.md +45 -0
- package/src/components/features/.transcribe-summarize-section.md +48 -0
- package/src/components/features/.transcript-summary-editor.md +53 -0
- package/src/components/features/.video-bites-display.md +46 -0
- package/src/components/features/.video-clips-section.md +41 -0
- package/src/components/features/.video-ratio-tabs.md +56 -0
- package/src/components/features/.video-source-selector.md +60 -0
- package/src/components/features/.video.md +44 -0
- package/src/components/features/.waitlist-form.md +60 -0
- package/src/components/features/ai-enrich/.AIEnrichButton.md +30 -27
- package/src/components/features/ai-enrich/.AIEnrichSection.md +46 -42
- package/src/components/features/board/.board-column-header.md +38 -0
- package/src/components/features/board/.board-column.md +43 -0
- package/src/components/features/board/.board.md +51 -0
- package/src/components/features/board/.color-utils.md +26 -0
- package/src/components/features/board/.index.md +56 -0
- package/src/components/features/board/.ticket-card-skeleton.md +38 -0
- package/src/components/features/board/.ticket-card.md +47 -0
- package/src/components/features/board/.types.md +45 -0
- package/src/components/features/board/.use-board-collapse.md +34 -0
- package/src/components/features/notifications/.index.md +57 -0
- package/src/components/features/notifications/.notification-drawer.md +34 -0
- package/src/components/features/notifications/.notification-tile.md +39 -0
- package/src/components/features/notifications/.notifications-context.md +73 -0
- package/src/components/features/notifications/.types.md +45 -0
- package/src/components/icons/.about-icon.md +20 -28
- package/src/components/icons/.ai-robot-icon.md +15 -17
- package/src/components/icons/.bash-icon.md +16 -23
- package/src/components/icons/.buildings-icon.md +10 -24
- package/src/components/icons/.capterra-icon.md +30 -26
- package/src/components/icons/.carta-icon.md +29 -0
- package/src/components/icons/.clickup-icon.md +26 -0
- package/src/components/icons/.cmd-icon.md +15 -22
- package/src/components/icons/.coins-icon.md +17 -25
- package/src/components/icons/.community-hub-icon.md +19 -25
- package/src/components/icons/.community-icon.md +24 -21
- package/src/components/icons/.compare-icon.md +32 -19
- package/src/components/icons/.copy-icon.md +29 -15
- package/src/components/icons/.custom-external-link-icon.md +19 -17
- package/src/components/icons/.custom-fork-icon.md +32 -21
- package/src/components/icons/.custom-license-icon.md +29 -25
- package/src/components/icons/.custom-star-icon.md +20 -28
- package/src/components/icons/.custom-time-icon.md +21 -22
- package/src/components/icons/.cut-vendor-costs-icon.md +6 -19
- package/src/components/icons/.dashboard-icon.md +13 -18
- package/src/components/icons/.deno-icon.md +16 -23
- package/src/components/icons/.donut-icon.md +12 -23
- package/src/components/icons/.double-chevron-icon.md +28 -36
- package/src/components/icons/.elestio-logo.md +13 -23
- package/src/components/icons/.empty-vendor-icon.md +16 -18
- package/src/components/icons/.explore-categories-icon.md +18 -29
- package/src/components/icons/.eye-icon.md +16 -26
- package/src/components/icons/.facebook-icon.md +9 -20
- package/src/components/icons/.figma-icon.md +8 -17
- package/src/components/icons/.filter-icon.md +15 -17
- package/src/components/icons/.flamingo-logo.md +28 -27
- package/src/components/icons/.folder-shield-icon.md +28 -19
- package/src/components/icons/.g2-icon.md +22 -21
- package/src/components/icons/.getapp-icon.md +25 -21
- package/src/components/icons/.github-icon.md +13 -25
- package/src/components/icons/.globe-icon.md +14 -19
- package/src/components/icons/.google-gemini-icon.md +16 -19
- package/src/components/icons/.google-logo.md +15 -21
- package/src/components/icons/.grid-view-icon.md +30 -19
- package/src/components/icons/.hamburger-icon.md +22 -20
- package/src/components/icons/.hand-dollar-icon.md +24 -34
- package/src/components/icons/.hotel-icon.md +27 -21
- package/src/components/icons/.icon-utils.md +28 -29
- package/src/components/icons/.image-icon.md +15 -22
- package/src/components/icons/.index.md +25 -28
- package/src/components/icons/.info-circle-icon.md +29 -30
- package/src/components/icons/.instagram-icon.md +10 -24
- package/src/components/icons/.jump-in-icon.md +18 -18
- package/src/components/icons/.linux-icon.md +18 -18
- package/src/components/icons/.log-out-icon.md +15 -23
- package/src/components/icons/.logs-icon.md +14 -23
- package/src/components/icons/.margin-crisis-icon.md +21 -20
- package/src/components/icons/.menu-icon.md +18 -19
- package/src/components/icons/.miami-cyber-gang-logo-face-only.md +18 -21
- package/src/components/icons/.miami-cyber-gang-logo.md +22 -14
- package/src/components/icons/.mlg-logo.md +18 -16
- package/src/components/icons/.moon-icon.md +32 -22
- package/src/components/icons/.ms-icon.md +30 -19
- package/src/components/icons/.nushell-icon.md +7 -21
- package/src/components/icons/.open-source-icon.md +19 -23
- package/src/components/icons/.openai-icon.md +9 -24
- package/src/components/icons/.openframe-ai-icons.md +25 -26
- package/src/components/icons/.openframe-logo.md +28 -22
- package/src/components/icons/.openframe-text.md +24 -27
- package/src/components/icons/.openmsp-logo.md +26 -23
- package/src/components/icons/.pilot-icon.md +23 -0
- package/src/components/icons/.powershell-icon.md +17 -22
- package/src/components/icons/.python-icon.md +16 -23
- package/src/components/icons/.queries-icon.md +13 -21
- package/src/components/icons/.reddit-icon.md +28 -24
- package/src/components/icons/.remote-control-icon.md +13 -17
- package/src/components/icons/.script-icon.md +27 -19
- package/src/components/icons/.search-icon.md +21 -21
- package/src/components/icons/.send-icon.md +14 -16
- package/src/components/icons/.settings-icon.md +30 -19
- package/src/components/icons/.shape-circle-dash-icon.md +16 -21
- package/src/components/icons/.shell-icon.md +15 -19
- package/src/components/icons/.shield-check-icon.md +18 -31
- package/src/components/icons/.shield-key-icon.md +25 -25
- package/src/components/icons/.shield-lock-icon.md +8 -18
- package/src/components/icons/.slack-icon.md +28 -32
- package/src/components/icons/.sparkles-icon.md +18 -23
- package/src/components/icons/.sso-configuration-icon.md +29 -16
- package/src/components/icons/.sun-icon.md +20 -18
- package/src/components/icons/.table-view-icon.md +17 -19
- package/src/components/icons/.telegram-icon.md +8 -22
- package/src/components/icons/.thumbs-down-icon.md +10 -19
- package/src/components/icons/.thumbs-up-icon.md +8 -17
- package/src/components/icons/.tool-directory-icons.md +24 -28
- package/src/components/icons/.trustpilot-icon.md +25 -22
- package/src/components/icons/.user-icon.md +26 -28
- package/src/components/icons/.users-group-icon.md +28 -24
- package/src/components/icons/.vendor-showcase-icons.md +21 -29
- package/src/components/icons/.vendors-icon.md +18 -22
- package/src/components/icons/.whatsapp-icon.md +30 -14
- package/src/components/icons/.x-icon.md +18 -23
- package/src/components/icons/.x-logo.md +13 -38
- package/src/components/icons/.youtube-icon.md +8 -19
- package/src/components/icons/device-type-icons/.get-device-type-icon.md +26 -34
- package/src/components/icons-v2-generated/.index.md +52 -0
- package/src/components/icons-v2-generated/alphabet/.index.md +33 -0
- package/src/components/icons-v2-generated/arrows/.index.md +39 -0
- package/src/components/icons-v2-generated/audio-and-visual/.index.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.elestio-logo-icon.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.gemini-logo-icon.md +37 -0
- package/src/components/icons-v2-generated/brand-logos/.google-gemini-logo-icon.md +33 -0
- package/src/components/icons-v2-generated/brand-logos/.index.md +38 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-grey-icon.md +35 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-icon.md +36 -0
- package/src/components/icons-v2-generated/buildings/.index.md +48 -0
- package/src/components/icons-v2-generated/charts/.index.md +40 -0
- package/src/components/icons-v2-generated/clothes/.index.md +48 -0
- package/src/components/icons-v2-generated/coding/.index.md +42 -0
- package/src/components/icons-v2-generated/communication/.index.md +39 -0
- package/src/components/icons-v2-generated/date-and-time/.index.md +29 -0
- package/src/components/icons-v2-generated/design/.index.md +39 -0
- package/src/components/icons-v2-generated/devices/.index.md +38 -0
- package/src/components/icons-v2-generated/documents/.index.md +38 -0
- package/src/components/icons-v2-generated/finance/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.leafy-green-icon.md +36 -0
- package/src/components/icons-v2-generated/food-and-drinks/.strawberry-icon.md +39 -0
- package/src/components/icons-v2-generated/health/.index.md +40 -0
- package/src/components/icons-v2-generated/household/.index.md +45 -0
- package/src/components/icons-v2-generated/interface/.index.md +36 -0
- package/src/components/icons-v2-generated/map-and-travel/.index.md +41 -0
- package/src/components/icons-v2-generated/media-playback/.index.md +51 -0
- package/src/components/icons-v2-generated/number/.index.md +41 -0
- package/src/components/icons-v2-generated/school/.index.md +37 -0
- package/src/components/icons-v2-generated/security/.fingerprint-icon.md +38 -0
- package/src/components/icons-v2-generated/security/.index.md +39 -0
- package/src/components/icons-v2-generated/shopping/.index.md +42 -0
- package/src/components/icons-v2-generated/signs-and-symbols/.index.md +32 -0
- package/src/components/icons-v2-generated/sort-and-filter/.index.md +35 -0
- package/src/components/icons-v2-generated/sport/.index.md +41 -0
- package/src/components/icons-v2-generated/text-editor/.index.md +44 -0
- package/src/components/icons-v2-generated/users/.index.md +45 -0
- package/src/components/icons-v2-generated/vehicles-and-delivery/.index.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.flower-sakura-icon.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.index.md +34 -0
- package/src/components/layout/.article-detail-layout.md +43 -0
- package/src/components/layout/.back-button.md +40 -0
- package/src/components/layout/.list-page-layout.md +35 -26
- package/src/components/layout/.page-container.md +27 -38
- package/src/components/layout/.page-layout.md +50 -0
- package/src/components/layout/.title-block.md +42 -0
- package/src/components/loading/.card-skeleton.md +38 -29
- package/src/components/loading/.device-card-skeleton.md +29 -25
- package/src/components/loading/.index.md +39 -46
- package/src/components/loading/.margin-report-skeleton.md +45 -34
- package/src/components/loading/.organization-card-skeleton.md +39 -44
- package/src/components/loading/.page-layout-skeleton.md +34 -45
- package/src/components/loading/.unified-skeleton.md +62 -36
- package/src/components/navigation/.app-header.md +40 -29
- package/src/components/navigation/.app-layout.md +25 -26
- package/src/components/navigation/.header-global-search.md +34 -37
- package/src/components/navigation/.header-organization-filter.md +23 -22
- package/src/components/navigation/.header.md +31 -35
- package/src/components/navigation/.mobile-burger-menu.md +39 -47
- package/src/components/navigation/.mobile-nav-panel.md +51 -32
- package/src/components/navigation/.navigation-sidebar-header.md +36 -0
- package/src/components/navigation/.navigation-sidebar-item.md +45 -0
- package/src/components/navigation/.navigation-sidebar-toggle.md +38 -0
- package/src/components/navigation/.navigation-sidebar.md +33 -34
- package/src/components/navigation/.sliding-sidebar.md +52 -41
- package/src/components/navigation/.sticky-section-nav.md +56 -48
- package/src/components/platform/.ScriptArguments.md +39 -25
- package/src/components/platform/.ScriptInfoSection.md +30 -26
- package/src/components/platform/.ShellTypeBadge.md +18 -13
- package/src/components/platform/.SoftwareInfo.md +23 -27
- package/src/components/platform/.SoftwareSourceBadge.md +28 -19
- package/src/components/platform/.ToolBadge.md +25 -26
- package/src/components/providers/.theme-provider.md +52 -0
- package/src/components/shared/delivery/.delivery-lists.md +39 -0
- package/src/components/shared/delivery/.delivery-row.md +41 -0
- package/src/components/shared/delivery/.delivery-table.md +41 -0
- package/src/components/shared/delivery/.index.md +38 -0
- package/src/components/shared/dev-section/.dev-card-row.md +60 -0
- package/src/components/shared/dev-section/.dev-section-page.md +48 -0
- package/src/components/shared/dev-section/.dev-section-view.md +43 -0
- package/src/components/shared/dev-section/.index.md +38 -0
- package/src/components/shared/legal-document/.index.md +40 -0
- package/src/components/shared/legal-document/.legal-document-page.md +50 -0
- package/src/components/shared/legal-document/.use-legal-docs.md +42 -0
- package/src/components/shared/onboarding/.onboarding-step-card.md +32 -31
- package/src/components/shared/onboarding/.onboarding-walkthrough.md +39 -43
- package/src/components/shared/product-release/.index.md +28 -30
- package/src/components/shared/product-release/.product-release-card-skeleton.md +28 -28
- package/src/components/shared/product-release/.product-release-card.md +45 -27
- package/src/components/shared/product-release/.release-detail-page.md +23 -24
- package/src/components/shared/roadmap/.index.md +37 -0
- package/src/components/shared/roadmap/.roadmap-grid-skeleton.md +39 -0
- package/src/components/shared/roadmap/.roadmap-grid.md +66 -0
- package/src/components/shared/roadmap/.use-roadmap-voting.md +68 -0
- package/src/components/tickets/.help-center-card.md +51 -0
- package/src/components/tickets/.help-center-create-form.md +38 -0
- package/src/components/tickets/.help-center-list.md +40 -0
- package/src/components/tickets/.index.md +65 -0
- package/src/components/tickets/.ticket-center.md +51 -0
- package/src/components/tickets/.ticket-detail-drawer.md +48 -0
- package/src/components/tickets/.ticket-linked-delivery-card.md +36 -0
- package/src/components/tickets/.ticket-open-form.md +50 -0
- package/src/components/tickets/.ticket-row.md +30 -0
- package/src/components/tickets/.types.md +57 -0
- package/src/components/tickets/hooks/.use-ticket-actions.md +77 -0
- package/src/components/tickets/hooks/.use-ticket-engagements.md +42 -0
- package/src/components/tickets/hooks/.use-tickets-list.md +54 -0
- package/src/components/ui/.actions-menu.md +66 -41
- package/src/components/ui/.alert-dialog.md +29 -26
- package/src/components/ui/.allowed-domains-input.md +29 -21
- package/src/components/ui/.assignee-dropdown.md +45 -0
- package/src/components/ui/.autocomplete.md +47 -41
- package/src/components/ui/.benefit-card.md +51 -36
- package/src/components/ui/.brand-association-card.md +30 -27
- package/src/components/ui/.breadcrumb.md +17 -15
- package/src/components/ui/.checkbox-block.md +39 -35
- package/src/components/ui/.checkbox-with-description.md +23 -16
- package/src/components/ui/.checkbox.md +31 -23
- package/src/components/ui/.circular-progress.md +49 -19
- package/src/components/ui/.content-loader.md +32 -20
- package/src/components/ui/.cursor-pagination.md +41 -52
- package/src/components/ui/.dashboard-info-card.md +33 -26
- package/src/components/ui/.date-picker.md +27 -25
- package/src/components/ui/.device-card-compact.md +28 -29
- package/src/components/ui/.device-card.md +27 -27
- package/src/components/ui/.dialog.md +25 -16
- package/src/components/ui/.drawer.md +86 -0
- package/src/components/ui/.dropdown-button.md +45 -0
- package/src/components/ui/.entity-image.md +46 -0
- package/src/components/ui/.error-state.md +41 -28
- package/src/components/ui/.feature-card.md +35 -31
- package/src/components/ui/.feature-list.md +48 -0
- package/src/components/ui/.field-wrapper.md +47 -0
- package/src/components/ui/.file-upload.md +42 -0
- package/src/components/ui/.filter-checkbox-item.md +43 -0
- package/src/components/ui/.filter-list.md +57 -0
- package/src/components/ui/.filter-modal.md +59 -0
- package/src/components/ui/.floating-tooltip.md +43 -26
- package/src/components/ui/.hidden-tags-popup.md +49 -0
- package/src/components/ui/.hover-dropdown.md +54 -0
- package/src/components/ui/.image-gallery-modal.md +41 -34
- package/src/components/ui/.image-uploader.md +53 -0
- package/src/components/ui/.index.md +40 -34
- package/src/components/ui/.info-card.md +31 -31
- package/src/components/ui/.info-row.md +31 -27
- package/src/components/ui/.input-trigger.md +44 -0
- package/src/components/ui/.input.md +37 -31
- package/src/components/ui/.markdown-editor.md +57 -0
- package/src/components/ui/.modal-v2.md +51 -0
- package/src/components/ui/.modal.md +32 -31
- package/src/components/ui/.more-actions-menu.md +45 -38
- package/src/components/ui/.organization-card.md +31 -37
- package/src/components/ui/.page-actions.md +44 -54
- package/src/components/ui/.phone-input.md +54 -0
- package/src/components/ui/.progress-bar.md +35 -27
- package/src/components/ui/.radio-group.md +39 -27
- package/src/components/ui/.release-changelog-section.md +34 -34
- package/src/components/ui/.search-input.md +48 -0
- package/src/components/ui/.select.md +54 -34
- package/src/components/ui/.service-card.md +42 -40
- package/src/components/ui/.sheet.md +27 -18
- package/src/components/ui/.simple-markdown-renderer.md +29 -31
- package/src/components/ui/.sort-column-item.md +42 -0
- package/src/components/ui/.square-avatar.md +34 -24
- package/src/components/ui/.status-badge.md +26 -38
- package/src/components/ui/.switch.md +22 -35
- package/src/components/ui/.tab-navigation.md +56 -53
- package/src/components/ui/.tab-selector.md +40 -0
- package/src/components/ui/.tag-key-value-filter.md +56 -0
- package/src/components/ui/.tag-search-input.md +53 -0
- package/src/components/ui/.tag.md +49 -31
- package/src/components/ui/.tags-manager.md +60 -0
- package/src/components/ui/.textarea.md +44 -34
- package/src/components/ui/.ticket-attachments-list.md +45 -0
- package/src/components/ui/.ticket-detail-section.md +29 -0
- package/src/components/ui/.ticket-info-section.md +56 -0
- package/src/components/ui/.ticket-note-card.md +53 -0
- package/src/components/ui/.ticket-notes-section.md +54 -0
- package/src/components/ui/.ticket-status-tag.md +49 -0
- package/src/components/ui/.title-content-block.md +25 -26
- package/src/components/ui/.toaster.md +40 -28
- package/src/components/ui/.tooltip.md +22 -11
- package/src/components/ui/.truncate-text.md +39 -0
- package/src/components/ui/button/.button-styles.md +35 -0
- package/src/components/ui/button/.button.md +53 -0
- package/src/components/ui/button/.split-button.md +48 -0
- package/src/components/ui/data-table/.data-table-body.md +48 -0
- package/src/components/ui/data-table/.data-table-column-filter.md +45 -0
- package/src/components/ui/data-table/.data-table-cursor-footer.md +45 -0
- package/src/components/ui/data-table/.data-table-empty.md +43 -0
- package/src/components/ui/data-table/.data-table-header.md +55 -0
- package/src/components/ui/data-table/.data-table-infinite-footer.md +44 -0
- package/src/components/ui/data-table/.data-table-row-count.md +43 -0
- package/src/components/ui/data-table/.data-table-row.md +47 -0
- package/src/components/ui/data-table/.data-table-skeleton.md +42 -0
- package/src/components/ui/data-table/.data-table.md +47 -0
- package/src/components/ui/data-table/.index.md +55 -0
- package/src/components/ui/data-table/.types.md +54 -0
- package/src/components/ui/data-table/.use-data-table.md +45 -0
- package/src/components/ui/data-table/.utils.md +38 -0
- package/src/components/ui/file-manager/.file-manager-action-bar.md +39 -30
- package/src/components/ui/file-manager/.file-manager-breadcrumb.md +29 -27
- package/src/components/ui/file-manager/.file-manager-context-menu.md +38 -42
- package/src/components/ui/file-manager/.file-manager-empty.md +26 -39
- package/src/components/ui/file-manager/.file-manager-table-row.md +33 -41
- package/src/components/ui/file-manager/.file-manager.md +35 -31
- package/src/components/ui/query-report-table/.index.md +43 -0
- package/src/components/ui/query-report-table/.query-report-table-header.md +36 -0
- package/src/components/ui/query-report-table/.query-report-table-row.md +40 -0
- package/src/components/ui/query-report-table/.query-report-table-skeleton.md +44 -0
- package/src/components/ui/query-report-table/.query-report-table.md +47 -0
- package/src/components/ui/query-report-table/.types.md +41 -0
- package/src/components/ui/query-report-table/.utils.md +35 -0
- package/src/components/ui/table/.index.md +27 -48
- package/src/components/ui/table/.table-cell.md +18 -27
- package/src/components/ui/table/.table-column-filter-dropdown.md +40 -0
- package/src/components/ui/table/.table-description-cell.md +24 -14
- package/src/components/ui/table/.table-empty-state.md +21 -22
- package/src/components/ui/table/.table-header.md +25 -40
- package/src/components/ui/table/.table-row.md +22 -40
- package/src/components/ui/table/.table-skeleton.md +33 -26
- package/src/components/ui/table/.table-timestamp-cell.md +26 -16
- package/src/components/ui/table/.table.md +39 -59
- package/src/components/ui/table/.types.md +44 -36
- package/src/components/ui/table/.utils.md +18 -20
- package/src/contexts/.chat-runtime-context.md +54 -0
- package/src/contexts/.endpoints-runtime-context.md +58 -0
- package/src/contexts/.index.md +53 -0
- package/src/contexts/.use-outer-or-default.md +36 -0
- package/src/embed-shims/.index.md +45 -0
- package/src/embed-shims/.next-dynamic.md +43 -0
- package/src/embed-shims/.next-image.md +45 -0
- package/src/embed-shims/.next-link.md +59 -0
- package/src/embed-shims/.next-navigation.md +59 -0
- package/src/hooks/.index.md +34 -29
- package/src/hooks/.use-access-code-integration.md +49 -0
- package/src/hooks/.use-contact-submission.md +37 -26
- package/src/hooks/.use-copy-to-clipboard.md +42 -0
- package/src/hooks/.use-near-viewport.md +44 -0
- package/src/hooks/.use-og-placeholder.md +51 -0
- package/src/hooks/.use-toast.md +36 -35
- package/src/hooks/state/.use-api-params.md +29 -46
- package/src/hooks/state/.use-query-params.md +37 -33
- package/src/hooks/ui/.index.md +33 -32
- package/src/hooks/ui/.use-auto-limit-tags.md +54 -0
- package/src/hooks/ui/.use-horizontal-scrollbar.md +74 -0
- package/src/hooks/ui/.use-image-edge-color.md +42 -0
- package/src/hooks/ui/.use-media-query.md +33 -25
- package/src/hooks/ui/.use-search.md +51 -0
- package/src/nats/.nats.md +49 -28
- package/src/schemas/.contact-schema.md +45 -0
- package/src/stories/.AnnouncementBar.stories.md +45 -0
- package/src/stories/.AppLayout.stories.md +20 -21
- package/src/stories/.Autocomplete.stories.md +48 -34
- package/src/stories/.Board.stories.md +35 -0
- package/src/stories/.Button.stories.md +36 -33
- package/src/stories/.ChatTicketList.stories.md +33 -0
- package/src/stories/.CheckboxBlock.stories.md +40 -28
- package/src/stories/.ContentLoader.stories.md +47 -0
- package/src/stories/.DashboardInfoCard.stories.md +57 -0
- package/src/stories/.DataTable.stories.md +41 -0
- package/src/stories/.DatePicker.stories.md +66 -52
- package/src/stories/.DeviceCard.stories.md +41 -40
- package/src/stories/.DeviceCardCompact.stories.md +41 -0
- package/src/stories/.DotsLoaderIcon.stories.md +36 -0
- package/src/stories/.Drawer.stories.md +58 -0
- package/src/stories/.EmbeddableChat.stories.md +41 -0
- package/src/stories/.FileManager.stories.md +41 -0
- package/src/stories/.FileManagerActionBar.stories.md +38 -0
- package/src/stories/.FileUpload.stories.md +53 -0
- package/src/stories/.FilterList.stories.md +54 -0
- package/src/stories/.FilterModal.stories.md +72 -0
- package/src/stories/.FiltersDropdown.stories.md +57 -0
- package/src/stories/.Header.stories.md +48 -0
- package/src/stories/.ImageUploader.stories.md +49 -0
- package/src/stories/.InfoCard.stories.md +54 -0
- package/src/stories/.Input.stories.md +48 -30
- package/src/stories/.ListPageLayout.stories.md +56 -43
- package/src/stories/.MingoOnboardingCard.stories.md +42 -0
- package/src/stories/.MingoOnboardingCardSkeleton.stories.md +35 -0
- package/src/stories/.Modal.stories.md +40 -31
- package/src/stories/.NotificationDrawer.stories.md +55 -0
- package/src/stories/.OnboardingStepCard.stories.md +41 -0
- package/src/stories/.OrganizationCard.stories.md +61 -0
- package/src/stories/.PageActions.stories.md +52 -49
- package/src/stories/.PageContainer.stories.md +41 -35
- package/src/stories/.PageLayout.stories.md +60 -0
- package/src/stories/.ParallaxImageShowcase.stories.md +49 -0
- package/src/stories/.PhoneInput.stories.md +53 -0
- package/src/stories/.QueryReportTable.stories.md +44 -0
- package/src/stories/.RadioGroup.stories.md +46 -0
- package/src/stories/.RadioGroupBlock.stories.md +45 -0
- package/src/stories/.Select.stories.md +29 -15
- package/src/stories/.SlashCommandSuggestions.stories.md +41 -0
- package/src/stories/.SplitButton.stories.md +62 -0
- package/src/stories/.TabNavigation.stories.md +47 -38
- package/src/stories/.TabSelector.stories.md +65 -0
- package/src/stories/.Table.stories.md +38 -46
- package/src/stories/.TableColumnFilterDropdown.stories.md +46 -0
- package/src/stories/.Tag.stories.md +43 -32
- package/src/stories/.TagKeyValueFilter.stories.md +44 -0
- package/src/stories/.TagSearchInput.stories.md +61 -0
- package/src/stories/.Textarea.stories.md +49 -26
- package/src/stories/.Theme.stories.md +41 -0
- package/src/stories/.TicketAttachmentsList.stories.md +39 -0
- package/src/stories/.TicketDescriptionViewer.stories.md +39 -0
- package/src/stories/.TicketInfoSection.stories.md +40 -0
- package/src/stories/.TicketKnowledgeBaseList.stories.md +36 -0
- package/src/stories/.TicketNotesSection.stories.md +50 -0
- package/src/stories/.Toaster.stories.md +40 -0
- package/src/stories/.ToolExecutionDisplay.stories.md +41 -0
- package/src/stories/.Tooltip.stories.md +41 -0
- package/src/stories/.UserSummary.stories.md +41 -0
- package/src/stories/.WaitlistForm.stories.md +42 -0
- package/src/stories/BlogCard.stories.tsx +61 -0
- package/src/stories/CampaignCardAdmin.stories.tsx +52 -0
- package/src/stories/CaseStudyCard.stories.tsx +42 -0
- package/src/stories/ChatContainer.stories.tsx +186 -0
- package/src/stories/ChatInlineVideoPill.stories.tsx +63 -0
- package/src/stories/CustomerInterviewCard.stories.tsx +42 -0
- package/src/stories/DataRoomDocCard.stories.tsx +52 -0
- package/src/stories/GenericEntityCard.stories.tsx +66 -0
- package/src/stories/GitHubActivityCard.stories.tsx +61 -0
- package/src/stories/HubspotTicketCard.stories.tsx +98 -0
- package/src/stories/InvestorUpdateCard.stories.tsx +42 -0
- package/src/stories/OnboardingGuideCard.stories.tsx +52 -0
- package/src/stories/ProductReleaseCard.stories.tsx +61 -0
- package/src/stories/ProgramCard.stories.tsx +79 -0
- package/src/stories/RoadmapCard.stories.tsx +75 -0
- package/src/stories/SlackMessageCard.stories.tsx +41 -0
- package/src/stories/__fixtures__/chat-cards.ts +604 -0
- package/src/types/.blog.md +53 -29
- package/src/types/.case-study.md +44 -27
- package/src/types/.customer-interview.md +66 -44
- package/src/types/.delivery.md +40 -0
- package/src/types/.employee.md +24 -30
- package/src/types/.index.md +33 -47
- package/src/types/.marketing.md +49 -44
- package/src/types/.navigation.md +33 -25
- package/src/types/.os.types.md +32 -27
- package/src/types/.platform.md +31 -28
- package/src/types/.product-release.md +65 -38
- package/src/types/.supabase.md +37 -29
- package/src/types/.team.md +41 -33
- package/src/types/.video-processing.md +54 -0
- package/src/types/.waitlist.md +40 -36
- package/src/utils/.access-code-client.md +37 -36
- package/src/utils/.cn.md +31 -23
- package/src/utils/.color-analysis.md +35 -0
- package/src/utils/.country-phone-utils.md +39 -0
- package/src/utils/.date-formatters.md +19 -18
- package/src/utils/.embed-authed-fetch.md +39 -0
- package/src/utils/.embed-proxy-auth-storage.md +38 -0
- package/src/utils/.fetch-priority.md +41 -0
- package/src/utils/.format.md +74 -25
- package/src/utils/.generic-domain-utils.md +42 -0
- package/src/utils/.image-proxy.md +59 -23
- package/src/utils/.index.md +42 -49
- package/src/utils/.local-storage-adapter.md +50 -0
- package/src/utils/.ods-color-utils.md +55 -38
- package/src/utils/.platform-config.md +45 -25
- package/src/utils/.scroll-into-view.md +40 -0
- package/src/utils/.source-icons.md +53 -0
- package/src/utils/.sse-decision-frame.md +46 -0
- package/src/utils/dev-sections/.index.md +34 -0
- package/src/utils/dev-sections/.openframe-dev-sections.md +49 -0
- package/dist/chunk-ZDF6F7ED.cjs.map +0 -1
- package/dist/chunk-ZTJVRSN5.js.map +0 -1
- package/src/components/.card.md +0 -42
- package/src/components/.contact-button.md +0 -30
- package/src/components/.drawer.md +0 -46
- package/src/components/.fixed-layout-container.md +0 -47
- package/src/components/.footer-waitlist-card.md +0 -29
- package/src/components/.join-waitlist-cta.md +0 -29
- package/src/components/.sheet.md +0 -47
- package/src/components/.sliding-panel.md +0 -48
- package/src/components/.tooltip.md +0 -48
- package/src/components/.use-mobile.md +0 -42
- package/src/components/.vendor-compact-card.md +0 -66
- package/src/components/.x-button.md +0 -42
- package/src/components/features/.github-repo-button.md +0 -40
- package/src/components/features/.organization-icon.md +0 -47
- package/src/components/features/.organization-selector.md +0 -45
- package/src/components/icons/.fleet-icon.md +0 -39
- package/src/components/icons/.meshcentral-icon.md +0 -35
- package/src/components/icons/.refresh-icon.md +0 -34
- package/src/components/icons/.tactical-icon.md +0 -35
- package/src/components/ui/.button.md +0 -69
- package/src/components/ui/.log-table-row.md +0 -47
- package/src/components/ui/.selectable-device-card.md +0 -46
- package/src/hooks/.api-hooks-stub.md +0 -45
- package/src/hooks/api/.use-product-releases.md +0 -53
- package/src/stories/.OrganizationSelector.stories.md +0 -42
- package/src/stories/.SelectableDeviceCard.stories.md +0 -30
- package/src/utils/.lite-youtube-embed-stub.md +0 -37
- package/src/utils/.lite-youtube-embed.md +0 -33
- /package/dist/{chunk-3JWIJJ44.js.map → chunk-5OWDOFKK.js.map} +0 -0
- /package/dist/{chunk-IK2X5YJU.js.map → chunk-HWY35EAK.js.map} +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<!-- source-hash: f3fb53b66abf55ba1b2ac14522e64cbb -->
|
|
2
|
+
Provides two composable React primitives for the chat compose-box attachment UX: a `+` add-button rendered inline in the bottom controls row, and a horizontal chip strip rendered above the textarea showing staged file previews with upload progress.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Exports
|
|
7
|
+
|
|
8
|
+
| Export | Type | Description |
|
|
9
|
+
|--------|------|-------------|
|
|
10
|
+
| `ChatAttachmentAddButton` | Component | Borderless `+` icon button for triggering file picker; renders an invisible 28×28 spacer when `attachmentsEnabled` is false to prevent layout shift |
|
|
11
|
+
| `ChatAttachmentChipStrip` | Component | Horizontal strip of file chips above the textarea; returns `null` when no attachments are staged |
|
|
12
|
+
| `StagedAttachment` | Interface | Shape consumed by the chip strip, mirrors the hub's `useChatAttachments` output |
|
|
13
|
+
| `CHAT_ATTACHMENT_MIME_TYPES` | Constant | Allowed MIME types (JPEG, PNG, WebP, GIF, MP4, WebM, QuickTime) — excludes `image/svg+xml` for XSS safety |
|
|
14
|
+
| `CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER` | Constant | Client-side cap of 5 concurrent staged files |
|
|
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 |
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import {
|
|
29
|
+
ChatAttachmentAddButton,
|
|
30
|
+
ChatAttachmentChipStrip,
|
|
31
|
+
StagedAttachment,
|
|
32
|
+
} from './chat-attachment-bar'
|
|
33
|
+
|
|
34
|
+
function Composebox() {
|
|
35
|
+
const { attachments, addFiles, removeFile } = useChatAttachments()
|
|
36
|
+
const { attachmentsEnabled } = useChatIdentity()
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<div className="flex flex-col">
|
|
40
|
+
{/* Chip strip floats above textarea — hidden when empty */}
|
|
41
|
+
<ChatAttachmentChipStrip
|
|
42
|
+
attachments={attachments}
|
|
43
|
+
onRemove={removeFile}
|
|
44
|
+
disabled={isStreaming}
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
<textarea placeholder="Message…" />
|
|
48
|
+
|
|
49
|
+
{/* Bottom controls row */}
|
|
50
|
+
<div className="flex items-center gap-2">
|
|
51
|
+
<ChatAttachmentAddButton
|
|
52
|
+
attachmentsEnabled={attachmentsEnabled}
|
|
53
|
+
attachmentsCount={attachments.length}
|
|
54
|
+
onAddFiles={addFiles}
|
|
55
|
+
disabled={isStreaming}
|
|
56
|
+
/>
|
|
57
|
+
<ModelDisplay />
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
> **Layout stability note:** `ChatAttachmentAddButton` renders an invisible `<span>` placeholder before `attachmentsEnabled` resolves, preventing the bottom-controls row from shifting when chat identity loads asynchronously (~100–500 ms).
|
|
@@ -1,40 +1,58 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
React
|
|
1
|
+
<!-- source-hash: 748948c6317fda009af640633bb6c0e5 -->
|
|
2
|
+
Composable React components for building a full-screen chat interface shell, including layout, header, content area, and footer sections with ODS design token styling.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
| Component | Description |
|
|
7
|
+
|-----------|-------------|
|
|
8
|
+
| `ChatContainer` | Root full-screen wrapper with ODS background and responsive padding |
|
|
9
|
+
| `ChatHeader` | Rich header with avatar, user info, connection status, ticket context, and action buttons |
|
|
10
|
+
| `ChatContent` | Flex-grow scrollable content region between header and footer |
|
|
11
|
+
| `ChatFooter` | Sticky footer wrapper with optional full-width or narrow-column layout |
|
|
12
|
+
| `ConnectionIndicator` | Internal dot badge showing `connected` / `connecting` / `disconnected` states using ODS attention tokens |
|
|
11
13
|
|
|
12
14
|
## Usage Example
|
|
13
15
|
|
|
14
16
|
```typescript
|
|
15
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
ChatContainer,
|
|
19
|
+
ChatHeader,
|
|
20
|
+
ChatContent,
|
|
21
|
+
ChatFooter,
|
|
22
|
+
} from "./chat-container"
|
|
16
23
|
|
|
17
|
-
function
|
|
24
|
+
export function MyChatShell() {
|
|
18
25
|
return (
|
|
19
26
|
<ChatContainer>
|
|
20
27
|
<ChatHeader
|
|
21
|
-
userName=
|
|
28
|
+
userName='Grace "Fae" Meadows'
|
|
22
29
|
userTitle="Your Personal Assistant"
|
|
23
|
-
userAvatar="/avatar.png"
|
|
24
30
|
connectionStatus="connected"
|
|
25
|
-
serverUrl="
|
|
26
|
-
showNewChat
|
|
27
|
-
onNewChat={() => console.log(
|
|
31
|
+
serverUrl="mcp.flamingo.run"
|
|
32
|
+
showNewChat
|
|
33
|
+
onNewChat={() => console.log("new chat")}
|
|
34
|
+
onClose={() => console.log("close")}
|
|
35
|
+
ticketInfo={{
|
|
36
|
+
title: "Printer offline – Ticket #4821",
|
|
37
|
+
meta: "Assigned to: J. Smith",
|
|
38
|
+
status: "in-progress",
|
|
39
|
+
}}
|
|
40
|
+
fullWidth
|
|
28
41
|
/>
|
|
29
42
|
<ChatContent>
|
|
30
|
-
{/*
|
|
43
|
+
{/* message list */}
|
|
31
44
|
</ChatContent>
|
|
32
|
-
<ChatFooter>
|
|
33
|
-
{/*
|
|
45
|
+
<ChatFooter fullWidth>
|
|
46
|
+
{/* input bar */}
|
|
34
47
|
</ChatFooter>
|
|
35
48
|
</ChatContainer>
|
|
36
49
|
)
|
|
37
50
|
}
|
|
38
51
|
```
|
|
39
52
|
|
|
40
|
-
|
|
53
|
+
## Notes
|
|
54
|
+
|
|
55
|
+
- `fullWidth` on both `ChatHeader` and `ChatFooter` drops the default `max-w-ods-content-narrow` (≈600px) column — use this when embedding the chat in a side panel.
|
|
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>`.
|
|
@@ -1,39 +1,56 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: 6d459e335b05378d1756f274a61128f0 -->
|
|
2
|
+
A controlled chat input component with slash-command autocomplete, send/stop functionality, and an imperative ref API for programmatic control.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- **
|
|
9
|
-
- **
|
|
10
|
-
- **Awaiting
|
|
6
|
+
### `ChatInput` (default export)
|
|
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
|
|
12
|
+
|
|
13
|
+
### `ChatInputRef` (imperative handle)
|
|
14
|
+
Exposed methods for parent components:
|
|
15
|
+
|
|
16
|
+
| Method | Description |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `focus()` / `blur()` | Programmatic focus control |
|
|
19
|
+
| `clear()` | Resets input value |
|
|
20
|
+
| `setValue(next)` | Prefills input, places caret at end |
|
|
21
|
+
| `setValueAndCursor(next, offset)` | Prefills input with clamped caret position |
|
|
22
|
+
| `submit(next)` | Fires `onSend` and clears, bypassing user interaction |
|
|
23
|
+
| `getValue()` | Returns current value via stable ref |
|
|
24
|
+
|
|
25
|
+
### `SLASH_INPUT_TRIGGER`
|
|
26
|
+
Regex `/^\/([a-z][a-z0-9-]*)?$/` — kept in sync with server-side slash command registration to prevent suggesting commands the API would reject.
|
|
11
27
|
|
|
12
28
|
## Usage Example
|
|
13
29
|
|
|
14
30
|
```typescript
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
31
|
+
import { useRef } from "react"
|
|
32
|
+
import { ChatInput } from "./chat-input"
|
|
33
|
+
import type { ChatInputRef } from "./types"
|
|
17
34
|
|
|
18
|
-
function
|
|
19
|
-
const inputRef = useRef<
|
|
35
|
+
function ChatPanel() {
|
|
36
|
+
const inputRef = useRef<ChatInputRef>(null)
|
|
20
37
|
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
// Process message sending logic
|
|
38
|
+
const prefillSlashCommand = () => {
|
|
39
|
+
inputRef.current?.setValue("/reboot ")
|
|
24
40
|
}
|
|
25
41
|
|
|
26
42
|
return (
|
|
27
43
|
<ChatInput
|
|
28
44
|
ref={inputRef}
|
|
29
|
-
onSend={handleSendMessage}
|
|
30
45
|
sending={false}
|
|
31
46
|
awaitingResponse={false}
|
|
32
|
-
|
|
33
|
-
|
|
47
|
+
onSend={(message) => console.log("Sending:", message)}
|
|
48
|
+
onStop={() => abortStream()}
|
|
49
|
+
slashCommands={{
|
|
50
|
+
fetchCommands: async (prefix, signal) => fetchSlashCommands(prefix, signal),
|
|
51
|
+
}}
|
|
52
|
+
autoFocus
|
|
34
53
|
/>
|
|
35
54
|
)
|
|
36
55
|
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
The component automatically handles textarea resizing (20px to 160px max height), disables input during sending states, and provides visual feedback through the typing indicator when awaiting responses. It uses Tailwind CSS with ODS (OpenFrame Design System) tokens for consistent styling.
|
|
56
|
+
```
|
|
@@ -1,63 +1,44 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: d70b1713cdb85568acf904d7a2daa162 -->
|
|
2
|
+
Renders enhanced chat messages with support for multi-segment content, inline/block entity card markers, tool executions, approval flows, and rich markdown — delegating entity resolution and navigation to host-provided callbacks.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
- Approval request messages with actions
|
|
21
|
-
- Error message displays
|
|
22
|
-
- Typing indicators
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ChatMessageEnhanced` | `forwardRef` component | Main message renderer with role-aware layout (`user`, `error`, assistant variants) |
|
|
9
|
+
| `normalizeContent` | Function | Normalizes `MessageContent` (string or `MessageSegment[]`) to a uniform segment array |
|
|
10
|
+
| `CARD_MARKER_REGEX` | Regex | Shared pattern matching `[card://type:id]` markers — kept in lockstep with `remarkCardLinks` |
|
|
11
|
+
| `renderingPlan` | `useMemo` | Per-message plan splitting text segments at block card markers for accurate streaming position |
|
|
12
|
+
| `cardComponentOverrides` | `useMemo` | Overrides `<a>` tags for `card://` URLs, resolving inline/block entity cards via host callbacks |
|
|
13
|
+
|
|
14
|
+
### Supporting Displays (composed internally)
|
|
15
|
+
- `ToolExecutionDisplay` — renders tool call segments
|
|
16
|
+
- `ApprovalRequestMessage` / `ApprovalBatchMessage` — approval flow segments
|
|
17
|
+
- `ErrorMessageDisplay` — error role messages
|
|
18
|
+
- `ContextCompactionDisplay` — context compaction events
|
|
19
|
+
- `ThinkingDisplay` — streaming thinking segments
|
|
23
20
|
|
|
24
21
|
## Usage Example
|
|
25
22
|
|
|
26
23
|
```typescript
|
|
27
|
-
import { ChatMessageEnhanced } from "./chat-message-enhanced"
|
|
28
|
-
|
|
29
|
-
// Basic text message
|
|
30
24
|
<ChatMessageEnhanced
|
|
31
25
|
role="assistant"
|
|
32
26
|
assistantType="mingo"
|
|
33
|
-
content="Hello! How can I help you today?"
|
|
34
|
-
timestamp={new Date()}
|
|
35
|
-
showAvatar={true}
|
|
36
|
-
/>
|
|
37
|
-
|
|
38
|
-
// Multi-segment message with tool execution
|
|
39
|
-
<ChatMessageEnhanced
|
|
40
|
-
role="assistant"
|
|
41
|
-
assistantType="fae"
|
|
42
27
|
content={[
|
|
43
|
-
{ type: 'text', text: '
|
|
44
|
-
{
|
|
45
|
-
type: 'tool_execution',
|
|
46
|
-
data: {
|
|
47
|
-
integratedToolType: 'api',
|
|
48
|
-
toolFunction: 'getData',
|
|
49
|
-
status: 'completed'
|
|
50
|
-
}
|
|
51
|
-
}
|
|
28
|
+
{ type: 'text', text: 'Here is your ticket [card://ticket:123].' },
|
|
29
|
+
{ type: 'tool_execution', toolName: 'search', result: '...' },
|
|
52
30
|
]}
|
|
53
|
-
|
|
31
|
+
chatRefs={{
|
|
32
|
+
'ticket:123': { type: 'ticket', id: '123', title: 'Login bug', url: '/tickets/123' },
|
|
33
|
+
}}
|
|
34
|
+
renderEntityCard={(ref) => <TicketPill ref={ref} />}
|
|
35
|
+
NavLinkAnchor={({ href, children }) => <Link href={href}>{children}</Link>}
|
|
36
|
+
showAvatar
|
|
54
37
|
/>
|
|
38
|
+
```
|
|
55
39
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
avatar="/user-avatar.png"
|
|
62
|
-
/>
|
|
63
|
-
```
|
|
40
|
+
## Notes
|
|
41
|
+
|
|
42
|
+
- **Data-agnostic**: the library never imports entity types or routing — the host provides `renderEntityCard` and `NavLinkAnchor`.
|
|
43
|
+
- Block card markers split their text segment so block payloads render at the marker position during streaming, not appended at the end.
|
|
44
|
+
- Three distinct fallbacks for unresolved `card://` hrefs prevent LLM hallucinations from appearing as real cards.
|
|
@@ -1,54 +1,67 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A scrollable chat
|
|
1
|
+
<!-- source-hash: ddaad2500e41f9ee61eff7435b990d72 -->
|
|
2
|
+
A scrollable chat message list component with stick-to-bottom behavior, prepend anchoring for load-older pagination, and streaming indicators.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ChatMessageList` | `forwardRef` Component | Main scrollable message list with auto-scroll management |
|
|
9
|
+
| `STREAMING_WORDS` | `const` | Flamingo-themed cycling phrases shown during AI streaming |
|
|
10
|
+
| `hasNonEmptyContent` | Helper Function | Checks if a `MessageContent` value carries visible text |
|
|
11
|
+
| `disposeAnchorWatcher` | Helper Function | Idempotent teardown for `AnchorWatcher` instances |
|
|
12
|
+
| `AnchorWatcher` | Interface | Tracks `ResizeObserver` + timeout for top-anchor settle window |
|
|
13
|
+
|
|
14
|
+
## Key Props (`ChatMessageListProps`)
|
|
15
|
+
|
|
16
|
+
| Prop | Description |
|
|
17
|
+
|------|-------------|
|
|
18
|
+
| `messages` | Array of chat messages to render |
|
|
19
|
+
| `dialogId` | Triggers instant scroll-to-bottom on dialog change |
|
|
20
|
+
| `isLoading` / `isTyping` | Controls skeleton and streaming indicator visibility |
|
|
21
|
+
| `autoScroll` | Enables/disables stick-to-bottom behavior |
|
|
22
|
+
| `hasNextPage` / `onLoadMore` | Infinite scroll upward (load-older pagination) |
|
|
23
|
+
| `renderEntityCard` | Custom renderer for entity card messages |
|
|
11
24
|
|
|
12
25
|
## Usage Example
|
|
13
26
|
|
|
14
27
|
```typescript
|
|
15
|
-
import { ChatMessageList } from
|
|
16
|
-
|
|
28
|
+
import { ChatMessageList } from "@/components/chat"
|
|
29
|
+
|
|
30
|
+
const messages = [
|
|
31
|
+
{ id: "1", role: "user", content: "Hello!" },
|
|
32
|
+
{ id: "2", role: "assistant", content: "Hi there!" },
|
|
33
|
+
]
|
|
17
34
|
|
|
18
|
-
function
|
|
35
|
+
export function ChatPanel() {
|
|
19
36
|
const listRef = useRef<HTMLDivElement>(null)
|
|
20
|
-
|
|
21
|
-
const messages = [
|
|
22
|
-
{
|
|
23
|
-
id: '1',
|
|
24
|
-
role: 'user' as const,
|
|
25
|
-
content: 'Hello!',
|
|
26
|
-
timestamp: new Date(),
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
id: '2',
|
|
30
|
-
role: 'assistant' as const,
|
|
31
|
-
content: 'Hi there! How can I help?',
|
|
32
|
-
timestamp: new Date(),
|
|
33
|
-
assistantType: 'mingo' as const
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
37
|
|
|
37
38
|
return (
|
|
38
39
|
<ChatMessageList
|
|
39
40
|
ref={listRef}
|
|
40
41
|
messages={messages}
|
|
41
|
-
dialogId="
|
|
42
|
-
isLoading={false}
|
|
42
|
+
dialogId="conv-abc123"
|
|
43
43
|
isTyping={false}
|
|
44
44
|
autoScroll={true}
|
|
45
45
|
showAvatars={true}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
className="h-96"
|
|
46
|
+
hasNextPage={true}
|
|
47
|
+
onLoadMore={() => fetchOlderMessages()}
|
|
49
48
|
/>
|
|
50
49
|
)
|
|
51
50
|
}
|
|
52
51
|
```
|
|
53
52
|
|
|
54
|
-
|
|
53
|
+
## Scroll Management Strategy
|
|
54
|
+
|
|
55
|
+
The component uses [`use-stick-to-bottom`](https://github.com/stackblitz-labs/use-stick-to-bottom) (same library powering bolt.new) with three additional behaviors layered on top:
|
|
56
|
+
|
|
57
|
+
```mermaid
|
|
58
|
+
graph TD
|
|
59
|
+
A["Message Update"] --> B{"Trigger Type?"}
|
|
60
|
+
B -->|"Dialog changed"| C["scrollToBottom instant"]
|
|
61
|
+
B -->|"First message"| C
|
|
62
|
+
B -->|"New user message"| C
|
|
63
|
+
B -->|"Streaming assistant"| D["Library spring physics"]
|
|
64
|
+
A --> E{"Content prepended?"}
|
|
65
|
+
E -->|"Load-older"| F["Preserve viewport via scrollTop delta"]
|
|
66
|
+
E -->|"No prepend"| G["Update scrollHeight snapshot"]
|
|
67
|
+
```
|
|
@@ -1,36 +1,40 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: dc7cb2f1d39ceeb5b0684dbef38a8d20 -->
|
|
2
|
+
Animated loading skeleton components that simulate the layout of chat messages while content is being fetched, matching the `ChatMessageEnhanced` hanging-avatar layout.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
### `ChatMessageSkeleton`
|
|
7
|
+
Renders a single animated placeholder message with pulsing blocks for the avatar, sender name, timestamp, and multi-line message content.
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Default | Description |
|
|
10
|
+
|------|------|---------|-------------|
|
|
11
|
+
| `className` | `string` | — | Additional CSS classes |
|
|
12
|
+
| `showAvatar` | `boolean` | `true` | Whether to render the avatar skeleton |
|
|
13
|
+
| `isUser` | `boolean` | `false` | Applies user-message styling (no card background, no avatar) |
|
|
14
|
+
| `assistantType` | `'mingo' \| 'fae'` | `'fae'` | Controls avatar gradient — cyan for Mingo, pink for Fae |
|
|
15
|
+
|
|
16
|
+
### `ChatMessageListSkeleton`
|
|
17
|
+
Renders a scrollable list of `ChatMessageSkeleton` items, mimicking a full chat viewport during initial load.
|
|
18
|
+
|
|
19
|
+
| Prop | Type | Default | Description |
|
|
20
|
+
|------|------|---------|-------------|
|
|
21
|
+
| `messageCount` | `number` | `6` | Number of skeleton messages to render |
|
|
22
|
+
| `showAvatars` | `boolean` | `true` | Passed through to each `ChatMessageSkeleton` |
|
|
23
|
+
| `assistantType` | `'mingo' \| 'fae'` | `'fae'` | Applied to all assistant messages |
|
|
24
|
+
| `contentClassName` | `string` | — | Overrides default horizontal padding on the content wrapper |
|
|
9
25
|
|
|
10
26
|
## Usage Example
|
|
11
27
|
|
|
12
28
|
```typescript
|
|
13
|
-
// Single message skeleton
|
|
14
|
-
<ChatMessageSkeleton
|
|
15
|
-
showAvatar={true}
|
|
16
|
-
isUser={false}
|
|
17
|
-
assistantType="mingo"
|
|
18
|
-
className="my-4"
|
|
19
|
-
/>
|
|
29
|
+
// Single message skeleton (e.g. while streaming)
|
|
30
|
+
<ChatMessageSkeleton assistantType="mingo" showAvatar />
|
|
20
31
|
|
|
21
|
-
// Full chat list skeleton
|
|
32
|
+
// Full chat list skeleton on initial page load
|
|
22
33
|
<ChatMessageListSkeleton
|
|
23
34
|
messageCount={8}
|
|
24
|
-
showAvatars={true}
|
|
25
35
|
assistantType="fae"
|
|
26
|
-
|
|
27
|
-
/>
|
|
28
|
-
|
|
29
|
-
// User message skeleton
|
|
30
|
-
<ChatMessageSkeleton
|
|
31
|
-
isUser={true}
|
|
32
|
-
showAvatar={false}
|
|
36
|
+
showAvatars={true}
|
|
33
37
|
/>
|
|
34
38
|
```
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
> Every third message (`index % 3 === 0`) is rendered as a user bubble; the rest render as assistant messages with the appropriate Mingo/Fae avatar gradient.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!-- source-hash: 1d656526a500eeade83769cf600951b1 -->
|
|
2
|
+
React context providing chat panel affordances to deeply nested descendants without prop drilling.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ChatPanelHandle` | Interface | Shape of the context value; exposes `closeChat()` |
|
|
9
|
+
| `ChatPanelContext` | `Context<ChatPanelHandle \| null>` | Raw context object; defaults to `null` when no provider is mounted |
|
|
10
|
+
| `useChatPanel` | Hook | Optional consumer; returns `null` safely outside a provider |
|
|
11
|
+
|
|
12
|
+
## Usage Example
|
|
13
|
+
|
|
14
|
+
**Provider** (in `EmbeddableChat` or equivalent shell):
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { ChatPanelContext } from './chat-panel-context'
|
|
18
|
+
|
|
19
|
+
function EmbeddableChat() {
|
|
20
|
+
const handleClose = () => { /* dismiss panel */ }
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<ChatPanelContext.Provider value={{ closeChat: handleClose }}>
|
|
24
|
+
{/* card dispatcher and all descendants */}
|
|
25
|
+
</ChatPanelContext.Provider>
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Consumer** (e.g. `BlogCard`, `ProgramCard`, any inline card):
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import { useChatPanel } from './chat-panel-context'
|
|
34
|
+
|
|
35
|
+
function BlogCard({ href }: { href: string }) {
|
|
36
|
+
const chatPanel = useChatPanel()
|
|
37
|
+
|
|
38
|
+
const handleClick = (e: React.MouseEvent) => {
|
|
39
|
+
const isSameTab = !e.metaKey && !e.ctrlKey
|
|
40
|
+
if (isSameTab) {
|
|
41
|
+
chatPanel?.closeChat() // null-safe — works outside provider too
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return <a href={href} onClick={handleClick}>Read more</a>
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Notes
|
|
50
|
+
|
|
51
|
+
- Returns `null` when consumed outside a provider (tests, standalone card renders) — always use optional chaining (`chatPanel?.closeChat()`).
|
|
52
|
+
- Intentionally minimal; add new affordances to `ChatPanelHandle` only when multiple card types need the same panel-level behavior.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- source-hash: f33597ddf2bdac88dfe784aaa957aacd -->
|
|
2
|
+
Defines the wire schema for inline entity references emitted by the chat backend and embedded within assistant message bodies.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `ChatRef` Interface
|
|
7
|
+
|
|
8
|
+
The primary export — mirrors `ChatRef` from the multi-platform-hub server. Consumed by `<ChatMessageEnhanced renderEntityCard={...} />` to expand `[card://<type>:<id>]` markers in assistant responses into host-rendered JSX cards.
|
|
9
|
+
|
|
10
|
+
| Field | Type | Description |
|
|
11
|
+
|-------|------|-------------|
|
|
12
|
+
| `type` | `string` | Opaque document type from the host's RAG config (e.g. `'webinar'`, `'customer_interview'`) |
|
|
13
|
+
| `id` | `string` | Primary key — opaque string downstream |
|
|
14
|
+
| `title` | `string` | Display title used for fallback rendering when host renderer returns null |
|
|
15
|
+
| `url` | `string \| null` | Resolved external URL; null when no public link exists |
|
|
16
|
+
| `sourceRepo` | `string?` | `RagTableConfig.id` driving icon/label lookup; optional for backward-compat |
|
|
17
|
+
| `targetPlatform` | `string \| null \| undefined` | Platform owning the `url` destination — enables deterministic same-app vs. cross-app routing |
|
|
18
|
+
| `date` | `string?` | ISO date for the entity's canonical timestamp |
|
|
19
|
+
| `preview` | `string?` | PII-sanitized hover preview text |
|
|
20
|
+
| `metadata` | `Record<string, unknown>?` | Type-specific extras passed opaquely; used by `slack_message` refs to ship resolved `channelName`/`userName` |
|
|
21
|
+
|
|
22
|
+
## Usage Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// Host supplies a renderer; OSS-lib stays agnostic of entity types
|
|
26
|
+
const ref: ChatRef = {
|
|
27
|
+
type: 'slack_message',
|
|
28
|
+
sourceRepo: 'slack-messages',
|
|
29
|
+
id: 'msg_abc123',
|
|
30
|
+
title: 'Deployment discussion',
|
|
31
|
+
url: 'https://myworkspace.slack.com/archives/C01/p123',
|
|
32
|
+
targetPlatform: 'flamingo',
|
|
33
|
+
date: '2024-11-01T14:30:00Z',
|
|
34
|
+
preview: 'Discussed rollback strategy for v2.4...',
|
|
35
|
+
metadata: { channelName: '#deployments', userName: 'alice' },
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Wire payload shape: refs map keyed by "<type>:<id>"
|
|
39
|
+
type RefsMap = Record<`${string}:${string}`, ChatRef>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> The OSS-lib has **no knowledge** of entity types or rendering logic. The host owns both the type vocabulary and the card renderer — `ChatRef` is purely a typed transport contract.
|