@flamingo-stack/openframe-frontend-core 0.0.213 → 0.0.214-snapshot.20260528192313
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-35XIT2CF.cjs → chunk-2G3NXF6J.cjs} +17 -17
- package/dist/{chunk-35XIT2CF.cjs.map → chunk-2G3NXF6J.cjs.map} +1 -1
- package/dist/{chunk-IK2X5YJU.js → chunk-7PCP7YQR.js} +2 -2
- package/dist/{chunk-ZDF6F7ED.cjs → chunk-D4MNFY67.cjs} +4 -3
- package/dist/chunk-D4MNFY67.cjs.map +1 -0
- package/dist/{chunk-OTKJASSX.cjs → chunk-NGFP4RVL.cjs} +24 -24
- package/dist/{chunk-OTKJASSX.cjs.map → chunk-NGFP4RVL.cjs.map} +1 -1
- package/dist/{chunk-3JWIJJ44.js → chunk-R6MLPU4A.js} +2 -2
- package/dist/{chunk-ZTJVRSN5.js → chunk-WQZP3JIZ.js} +4 -3
- package/dist/chunk-WQZP3JIZ.js.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/platform/ShellTypeBadge.tsx +2 -2
- 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-IK2X5YJU.js.map → chunk-7PCP7YQR.js.map} +0 -0
- /package/dist/{chunk-3JWIJJ44.js.map → chunk-R6MLPU4A.js.map} +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- source-hash: 7bb7ab52d16e8c26a26fa5ab1feba948 -->
|
|
2
|
+
A client-side `<a>` wrapper used within the chat tree to handle link navigation by reading the active `ChatRuntime` and routing clicks through the shared `handleChatNavClick` utility.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `NavLinkAnchorViaRuntimeProps`
|
|
7
|
+
| Prop | Type | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| `href` | `string` | Raw href to resolve |
|
|
10
|
+
| `path` | `string \| null` | Optional internal path hint |
|
|
11
|
+
| `targetPlatform` | `string \| null` | Platform target override |
|
|
12
|
+
| `className` | `string` | Optional CSS class |
|
|
13
|
+
| `children` | `ReactNode` | Optional child content |
|
|
14
|
+
|
|
15
|
+
### `NavLinkAnchorViaRuntime`
|
|
16
|
+
The main exported component. Orchestrates four responsibilities:
|
|
17
|
+
1. **Resolves `href`** via `resolveHrefForRuntime` (runtime-aware URL normalization)
|
|
18
|
+
2. **Decides new-tab vs. same-tab** via `computeIsNewTab` (embed-mode short-circuit → `runtime.navigation.decideNewTab` → lib fallback)
|
|
19
|
+
3. **Sets `target`/`rel`** attributes via `newTabAnchorAttrs`
|
|
20
|
+
4. **Closes the chat panel** on same-tab navigation via `ChatPanelContext.closeChat`
|
|
21
|
+
|
|
22
|
+
> **⚠️ Chat-tree only:** Uses `useRequiredChatRuntime`, which **throws** when mounted outside a `<ChatRuntimeContext.Provider>`. This is intentional — no silent fallback. For surfaces outside the chat tree (header chrome, marketing pages), use the hub's `useNavLink`-based anchor instead.
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
// Used in markdown-rendered chat bodies or source-chip drill-ins
|
|
28
|
+
<NavLinkAnchorViaRuntime
|
|
29
|
+
href="https://example.com/docs/setup"
|
|
30
|
+
path="/docs/setup"
|
|
31
|
+
targetPlatform="web"
|
|
32
|
+
className="chat-link"
|
|
33
|
+
>
|
|
34
|
+
View Setup Guide
|
|
35
|
+
</NavLinkAnchorViaRuntime>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
At runtime:
|
|
39
|
+
- **Same-tab click** → navigates and calls `panel.closeChat()` to dismiss the chat panel
|
|
40
|
+
- **New-tab click** → opens in a new tab, leaving the chat panel open
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!-- source-hash: dab5bf3f8a2e52f871c282c3d6212649 -->
|
|
2
|
+
A remark plugin for the unified/react-markdown pipeline that transforms `[card://<type>:<id>]` markers in markdown text nodes into synthetic `link` mdast nodes with a `card://` URL scheme, enabling downstream component overrides to render entity cards.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`CARD_REGEX`** — Global regex matching `[card://type:id]` patterns, intentionally tolerating both `]` and `)` as closing characters to handle LLM bracket-balancing drift on opaque token IDs (e.g. UUIDs)
|
|
7
|
+
- **`remarkCardLinks`** — Unified `Plugin<[], Root>` factory; visits all `text` leaves in the mdast tree and splits them into interleaved `Text` and `Link` nodes where card markers are found
|
|
8
|
+
- **`card://` URL scheme** — Non-standard scheme placed on the synthetic link's `url` so the `<a>` component override in `chat-message-enhanced.tsx` can detect and delegate rendering to `renderEntityCard`
|
|
9
|
+
|
|
10
|
+
## Usage Example
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import ReactMarkdown from "react-markdown"
|
|
14
|
+
import { remarkCardLinks } from "./remark-card-links"
|
|
15
|
+
|
|
16
|
+
// The plugin is registered in the remark pipeline:
|
|
17
|
+
<ReactMarkdown
|
|
18
|
+
remarkPlugins={[remarkCardLinks]}
|
|
19
|
+
components={{
|
|
20
|
+
a({ href, children }) {
|
|
21
|
+
if (href?.startsWith("card://")) {
|
|
22
|
+
const [, cardType, cardId] = href.split(/[:/]+/)
|
|
23
|
+
return renderEntityCard(cardType, cardId)
|
|
24
|
+
}
|
|
25
|
+
return <a href={href}>{children}</a>
|
|
26
|
+
},
|
|
27
|
+
}}
|
|
28
|
+
>
|
|
29
|
+
{`**The [card://webinar:42] discussed pricing**`}
|
|
30
|
+
</ReactMarkdown>
|
|
31
|
+
// bold wrapper is preserved; only the text leaf is split
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Notes
|
|
35
|
+
|
|
36
|
+
- Operates on text leaves only — bold, italic, list, and code wrappers around markers are preserved untouched
|
|
37
|
+
- Resets `CARD_REGEX.lastIndex` per invocation to avoid stale state from the `g` flag
|
|
38
|
+
- Returns `[SKIP, index + parts.length]` after splicing to prevent the visitor from re-entering the newly inserted nodes
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: b3b4c24e822f3ccb1b39897c02cee900 -->
|
|
2
|
+
Renders an accessible autocomplete dropdown for slash commands, mapping each command to a `MingoOnboardingCard` row with unified icon resolution, keyboard/mouse highlight sync, and optional inline action buttons.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `SlashCommandSuggestions` | `React.FC` | Main dropdown component; returns `null` when `commands` is empty |
|
|
9
|
+
| `SlashCommandSuggestionsProps` | `interface` | Props contract covering command list, highlight state, and action callbacks |
|
|
10
|
+
|
|
11
|
+
**Icon resolution priority (highest → lowest):**
|
|
12
|
+
1. `cmd.iconName` → `resolveOnboardingIcon` (v2 registry)
|
|
13
|
+
2. `cmd.primarySourceId` → consumer `resolveSourceIcon` (legacy fallback)
|
|
14
|
+
3. `FileIcon` (default inside `resolveOnboardingIcon`)
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { SlashCommandSuggestions } from './slash-command-suggestions'
|
|
20
|
+
import type { SlashCommandSummary } from './types'
|
|
21
|
+
|
|
22
|
+
function ChatInput() {
|
|
23
|
+
const [commands, setCommands] = useState<SlashCommandSummary[]>([])
|
|
24
|
+
const [highlightedIdx, setHighlightedIdx] = useState(0)
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<div className="relative">
|
|
28
|
+
<SlashCommandSuggestions
|
|
29
|
+
commands={commands}
|
|
30
|
+
highlightedIdx={highlightedIdx}
|
|
31
|
+
onHover={(idx) => setHighlightedIdx(idx)}
|
|
32
|
+
onSelect={(cmd) => setValue(`/${cmd.id} `)}
|
|
33
|
+
onAction={(cmd, actionId) => dispatch({ cmd, actionId })}
|
|
34
|
+
className="absolute bottom-full"
|
|
35
|
+
/>
|
|
36
|
+
<input ... />
|
|
37
|
+
</div>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Accessibility Notes
|
|
43
|
+
|
|
44
|
+
- Outer container: `role="menu"` with `aria-label`
|
|
45
|
+
- Each row: `role="menuitem"` + `aria-current` on the highlighted item
|
|
46
|
+
- `Enter`/`Space` activate the focused row; arrow-key navigation is delegated to the parent input
|
|
47
|
+
- Action buttons call `stopPropagation` to prevent double-firing the row's `onSelect`
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: 770809a15a2a56eec700f22e576bdc99 -->
|
|
2
|
+
Unified "Ask / Display" action button rendered across source chips, inline cards, and search-result list rows. Replaces three divergent ad-hoc implementations with a single `Button`-backed primitive that keeps DOM shape, accessibility attributes, and hover behavior in one place.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `SourceActionButton`
|
|
7
|
+
The sole export. Returns `null` when either `chatRef` or `onDiscuss` is absent, making the guard declarative at the call site.
|
|
8
|
+
|
|
9
|
+
### `SourceActionDensity`
|
|
10
|
+
Union type `'inline' | 'card' | 'list-row'` that selects the visual variant via the `DENSITY_STYLES` map.
|
|
11
|
+
|
|
12
|
+
### `DENSITY_STYLES`
|
|
13
|
+
Internal record keyed by `SourceActionDensity`. Each entry carries `size`, `showLabel`, `iconSize`, and `className`. Adding a fourth surface requires one new entry here — no changes to the render path.
|
|
14
|
+
|
|
15
|
+
### Icon selection
|
|
16
|
+
Label-driven: `'Display'` renders `FileText` (verbatim-content semantics); any other label renders `MessageSquare` (conversational semantics).
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// Inline chip — icon only, small footprint
|
|
22
|
+
<SourceActionButton
|
|
23
|
+
chatRef={{ id: 'row-42', title: 'Ticket #42' }}
|
|
24
|
+
onDiscuss={(ref) => openChat(ref)}
|
|
25
|
+
density="inline"
|
|
26
|
+
/>
|
|
27
|
+
|
|
28
|
+
// Card — shows "Ask" label beside icon
|
|
29
|
+
<SourceActionButton
|
|
30
|
+
chatRef={row}
|
|
31
|
+
onDiscuss={handleDiscuss}
|
|
32
|
+
density="card"
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
// List row with custom label
|
|
36
|
+
<SourceActionButton
|
|
37
|
+
chatRef={row}
|
|
38
|
+
onDiscuss={handleDiscuss}
|
|
39
|
+
density="list-row"
|
|
40
|
+
label="Display"
|
|
41
|
+
/>
|
|
42
|
+
|
|
43
|
+
// Hidden — chatRef is null, renders nothing
|
|
44
|
+
<SourceActionButton
|
|
45
|
+
chatRef={null}
|
|
46
|
+
onDiscuss={handleDiscuss}
|
|
47
|
+
/>
|
|
48
|
+
```
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- source-hash: 85a298f4c8461aee81841a6a960437a6 -->
|
|
2
|
+
Collapsible UI component that displays AI "thinking" or reasoning text with a muted markdown aesthetic, supporting both streaming and completed states.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`ThinkingDisplay`** — `forwardRef` component rendering AI thought content inside a bordered card with expand/collapse behavior
|
|
7
|
+
- **`thoughtMdClasses`** — Tailwind override class string that tunes `SimpleMarkdownRenderer` output to a quieter secondary-tone aesthetic (muted text, tighter spacing, flat code chips)
|
|
8
|
+
- **`useCollapsible`** — Hook managing overflow detection, container height animation, and collapsed/expanded state
|
|
9
|
+
- **`ExpandChevron`** — Chevron indicator shown only when content overflows or is already expanded
|
|
10
|
+
- **`SimpleMarkdownRenderer`** — Underlying markdown renderer wrapped with thought-specific style overrides
|
|
11
|
+
|
|
12
|
+
## Props (`ThinkingDisplayProps`)
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Default | Description |
|
|
15
|
+
|------|------|---------|-------------|
|
|
16
|
+
| `text` | `string` | — | Markdown content to render |
|
|
17
|
+
| `isStreaming` | `boolean` | `false` | Shows animated dots loader and "Thinking" label when `true` |
|
|
18
|
+
| `className` | `string` | — | Additional classes for the outer card |
|
|
19
|
+
|
|
20
|
+
## Usage Example
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { ThinkingDisplay } from "./thinking-display"
|
|
24
|
+
|
|
25
|
+
// Streaming state (model is still generating)
|
|
26
|
+
<ThinkingDisplay
|
|
27
|
+
text="Analyzing the user's request..."
|
|
28
|
+
isStreaming={true}
|
|
29
|
+
/>
|
|
30
|
+
|
|
31
|
+
// Completed thought (collapsible if content overflows)
|
|
32
|
+
<ThinkingDisplay
|
|
33
|
+
text="## Approach\nI need to check the ticket status first, then query the CMDB for affected assets."
|
|
34
|
+
isStreaming={false}
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Behavior Notes
|
|
39
|
+
|
|
40
|
+
- Label switches between `"Thinking"` (streaming) and `"Thought"` (complete)
|
|
41
|
+
- Collapsed height is `19px` (~one line of `text-sm leading-snug`); transitions are disabled while streaming to avoid layout thrashing
|
|
42
|
+
- Toggle is keyboard-accessible (`Enter`/`Space`) with proper `aria-expanded`; `tabIndex` is `-1` when content fits in one line
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- source-hash: c2806ae4c954c7e6f9d20b3fe6ddb5f6 -->
|
|
2
|
+
Reusable React components for rendering tool call arguments and results in the Flamingo/OpenFrame AI chat interface, handling both inline and block display formats.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `ArgRow`
|
|
7
|
+
Renders a single tool argument as either an inline `key: value` pair (for short values) or a labeled scrollable `<pre>` block (for long JSON, scripts, or multiline content). Shared across `ApprovalBatchMessage` and `ToolExecutionDisplay` for consistent rendering.
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Description |
|
|
10
|
+
|------|------|-------------|
|
|
11
|
+
| `argKey` | `string` | The argument name/key |
|
|
12
|
+
| `value` | `unknown` | The argument value (any type) |
|
|
13
|
+
|
|
14
|
+
### `ResultBlock`
|
|
15
|
+
Renders a tool execution result as either inline text or a scrollable code block, depending on length and content type. Returns `null` when result is empty.
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Description |
|
|
18
|
+
|------|------|-------------|
|
|
19
|
+
| `result` | `string \| undefined \| null` | The tool execution output |
|
|
20
|
+
| `className` | `string?` | Optional additional CSS classes |
|
|
21
|
+
|
|
22
|
+
## Usage Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { ArgRow, ResultBlock } from "./tool-call-blocks"
|
|
26
|
+
|
|
27
|
+
// Rendering tool arguments
|
|
28
|
+
<ArgRow argKey="script" value={`console.log("hello")`} />
|
|
29
|
+
<ArgRow argKey="timeout" value={30} />
|
|
30
|
+
|
|
31
|
+
// Rendering tool result
|
|
32
|
+
<ResultBlock result={toolOutput} className="mt-2" />
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Display Logic
|
|
36
|
+
|
|
37
|
+
Both components delegate format decisions to `formatToolArgValue` and `formatToolResult` helpers, which return a `kind` of `"inline"` or `"block"`:
|
|
38
|
+
|
|
39
|
+
```mermaid
|
|
40
|
+
graph TD
|
|
41
|
+
A["Raw Value/Result"] --> B["Format Helper"]
|
|
42
|
+
B --> C{"kind?"}
|
|
43
|
+
C -->|inline| D["Inline span"]
|
|
44
|
+
C -->|block| E["Scrollable pre/code"]
|
|
45
|
+
```
|
|
@@ -1,45 +1,53 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 51e80592b1ae4e56c89af6c06ba53a04 -->
|
|
2
|
+
Renders a collapsible card UI for displaying AI tool call execution state — including tool arguments, execution status (running/success/failure), and result output.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ToolExecutionDisplay` | `forwardRef<HTMLDivElement>` | Main component displaying tool call lifecycle in a collapsible card |
|
|
9
|
+
|
|
10
|
+
### Internal Helpers
|
|
11
|
+
|
|
12
|
+
- **`renderStatusIcon`** — Returns `DotsLoaderIcon` (executing), `CheckCircleIcon` (success), or `XmarkCircleIcon` (failure) based on message state
|
|
13
|
+
- **`argEntries`** — Filters `message.parameters` to exclude `COMMAND_BODY_KEYS`, nulls, undefined, and empty strings
|
|
14
|
+
- **`previewText`** — Memoized title derived from `getToolCallTitle` using tool args, title, and function name
|
|
15
|
+
- **`useCollapsible`** — Hook providing animated expand/collapse container styles
|
|
16
|
+
- **`hasBody`** — Guards rendering of the collapsible body section
|
|
17
|
+
|
|
18
|
+
### Props (`ToolExecutionDisplayProps`)
|
|
19
|
+
|
|
20
|
+
| Prop | Description |
|
|
21
|
+
|------|-------------|
|
|
22
|
+
| `message` | Tool execution message with `type`, `parameters`, `result`, `success`, `toolTitle`, `toolFunction`, `integratedToolType` |
|
|
23
|
+
| `className` | Optional CSS class override |
|
|
10
24
|
|
|
11
25
|
## Usage Example
|
|
12
26
|
|
|
13
27
|
```typescript
|
|
14
|
-
import { ToolExecutionDisplay } from
|
|
15
|
-
|
|
16
|
-
// Executing
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const executedMessage = {
|
|
26
|
-
type: "EXECUTED_TOOL",
|
|
27
|
-
integratedToolType: "OPENFRAME_API",
|
|
28
|
-
toolFunction: "createUser",
|
|
29
|
-
parameters: { name: "John", email: "john@example.com" },
|
|
30
|
-
result: "User created successfully",
|
|
31
|
-
success: true
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Usage with controlled expansion
|
|
35
|
-
<ToolExecutionDisplay
|
|
36
|
-
message={executingMessage}
|
|
37
|
-
isExpanded={false}
|
|
38
|
-
onToggleExpand={() => setExpanded(!expanded)}
|
|
28
|
+
import { ToolExecutionDisplay } from "./tool-execution-display"
|
|
29
|
+
|
|
30
|
+
// Executing state
|
|
31
|
+
<ToolExecutionDisplay
|
|
32
|
+
message={{
|
|
33
|
+
type: "EXECUTING_TOOL",
|
|
34
|
+
toolTitle: "Query Database",
|
|
35
|
+
toolFunction: "run_query",
|
|
36
|
+
parameters: { query: "SELECT * FROM tickets LIMIT 10" },
|
|
37
|
+
integratedToolType: "OPENFRAME",
|
|
38
|
+
}}
|
|
39
39
|
/>
|
|
40
40
|
|
|
41
|
-
//
|
|
42
|
-
<ToolExecutionDisplay
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
// Completed with result
|
|
42
|
+
<ToolExecutionDisplay
|
|
43
|
+
message={{
|
|
44
|
+
type: "EXECUTED_TOOL",
|
|
45
|
+
toolTitle: "Query Database",
|
|
46
|
+
toolFunction: "run_query",
|
|
47
|
+
parameters: { query: "SELECT * FROM tickets LIMIT 10" },
|
|
48
|
+
result: "Returned 10 rows",
|
|
49
|
+
success: true,
|
|
50
|
+
integratedToolType: "OPENFRAME",
|
|
51
|
+
}}
|
|
52
|
+
/>
|
|
53
|
+
```
|
|
@@ -65,7 +65,7 @@ const ChatHeader = React.forwardRef<HTMLDivElement, ChatHeaderProps>(
|
|
|
65
65
|
({ className, userName = 'Grace "Fae" Meadows', userTitle = "Your Personal Assistant", userAvatar, userIcon, onSettingsClick, onNewChat, onClose, onBack, showNewChat = false, connectionStatus = 'disconnected', serverUrl = null, headerActions, ticketInfo, fullWidth = false, bare = false, ...props }, ref) => {
|
|
66
66
|
const cardClasses = bare
|
|
67
67
|
? ""
|
|
68
|
-
: "rounded-md bg-ods-card
|
|
68
|
+
: "rounded-md bg-ods-card border border-ods-border"
|
|
69
69
|
return (
|
|
70
70
|
<div
|
|
71
71
|
ref={ref}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- source-hash: 5014a5d76cff7f765951023b41048390 -->
|
|
2
|
+
Reusable admin content card component that renders a cover image with edge-color fill, title, subtitle, summary, platform badges, meta info, and action buttons in a consistent card layout.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `AdminContentCard`
|
|
7
|
+
Main exported component. Renders an `<article>` card with a 3:2 aspect-ratio cover image and a flexible content body.
|
|
8
|
+
|
|
9
|
+
### `AdminContentCardProps`
|
|
10
|
+
| Prop | Type | Description |
|
|
11
|
+
|------|------|-------------|
|
|
12
|
+
| `imageUrl` | `string \| null` | Primary cover image URL |
|
|
13
|
+
| `placeholderUrl` | `string \| null` | Fallback image URL when `imageUrl` is missing or errors |
|
|
14
|
+
| `title` | `string` | Required heading and image alt text |
|
|
15
|
+
| `summary` | `string \| null` | Two-line clamped description |
|
|
16
|
+
| `subtitle` | `string \| null` | Secondary line (e.g. customer name) |
|
|
17
|
+
| `platforms` | `PlatformInfo[]` | Renders `<PlatformBadge>` chips |
|
|
18
|
+
| `badges` | `ReactNode` | Additional status badges after platform chips |
|
|
19
|
+
| `meta` | `ReactNode` | Date, views, or other metadata row |
|
|
20
|
+
| `actions` | `ReactNode` | Pinned-to-bottom action buttons |
|
|
21
|
+
| `className` | `string` | Extra Tailwind classes |
|
|
22
|
+
|
|
23
|
+
### Internal Hooks
|
|
24
|
+
- **`useImageEdgeColor`** — samples the edge color of `displayUrl` to use as the image container background, blending the cover image seamlessly.
|
|
25
|
+
- **`useState / useEffect`** — tracks `imageError` and `imageLoaded` states; resets load state on URL change to replay the fade-in.
|
|
26
|
+
|
|
27
|
+
## Usage Example
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { AdminContentCard } from './admin-content-card'
|
|
31
|
+
|
|
32
|
+
<AdminContentCard
|
|
33
|
+
imageUrl="https://cdn.example.com/cover.png"
|
|
34
|
+
placeholderUrl="https://cdn.example.com/og-placeholder.png"
|
|
35
|
+
title="Quarterly Security Report"
|
|
36
|
+
subtitle="Acme Corp"
|
|
37
|
+
summary="Overview of vulnerabilities patched in Q2 2025."
|
|
38
|
+
platforms={[{ id: 'azure', name: 'Azure', display_name: 'Microsoft Azure' }]}
|
|
39
|
+
badges={<span className="badge">Published</span>}
|
|
40
|
+
meta={<span>June 12, 2025 · 142 views</span>}
|
|
41
|
+
actions={<button>Edit</button>}
|
|
42
|
+
/>
|
|
43
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: c4f460ddb603f582424bec5b5d1e9d76 -->
|
|
2
|
+
Sentinel component used by `renderEntityCard` to signal that a card's content is block-level HTML (e.g. `<div>`, `<EntityVideoSection>`) and cannot legally render inside a markdown `<p>` tag.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `BlockCard`
|
|
7
|
+
A no-op sentinel function component — it always returns `null`. Its purpose is **not** to render, but to be detected by type identity during the pre-scan in `chat-message-enhanced.tsx`, which splits its props into two placement zones.
|
|
8
|
+
|
|
9
|
+
### `BlockCardProps`
|
|
10
|
+
| Prop | Type | Description |
|
|
11
|
+
|------|------|-------------|
|
|
12
|
+
| `inline` | `React.ReactNode` (optional) | Compact UI placed **at** the marker position inside the `<p>` (e.g. a 56×56 thumbnail card). Falls back to a plain `<span>` with the ref title if omitted. |
|
|
13
|
+
| `children` | `React.ReactNode` | Block-level content appended as a **sibling below** the paragraph, where it is HTML-valid. |
|
|
14
|
+
|
|
15
|
+
## How the Pre-Scan Works
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
graph TD
|
|
19
|
+
A["chat-message-enhanced.tsx"] --> B["Scan text segment for [card://type:id] markers"]
|
|
20
|
+
B --> C["Call renderEntityCard(ref)"]
|
|
21
|
+
C --> D{"Result is BlockCard?"}
|
|
22
|
+
D -->|Yes| E["Place inline prop AT marker inside paragraph"]
|
|
23
|
+
D -->|Yes| F["Append children as sibling BELOW paragraph"]
|
|
24
|
+
D -->|No| G["Render inline as-is inside paragraph"]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Usage Example
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
// Inside renderEntityCard — return a BlockCard when the card
|
|
31
|
+
// contains block-level elements that can't nest in <p>
|
|
32
|
+
import { BlockCard } from './block-card'
|
|
33
|
+
|
|
34
|
+
function renderEntityCard(ref: EntityRef) {
|
|
35
|
+
if (ref.type === 'video') {
|
|
36
|
+
return (
|
|
37
|
+
<BlockCard
|
|
38
|
+
inline={<CompactVideoThumbnail ref={ref} />} // placed inside <p>
|
|
39
|
+
>
|
|
40
|
+
<EntityVideoSection ref={ref} /> // hoisted below <p>
|
|
41
|
+
</BlockCard>
|
|
42
|
+
)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
> **Note:** `BlockCard` is a protocol tag, not a UI wrapper. Never render it directly outside of the `chat-message-enhanced` pipeline — if one escapes that path, the defensive `return null` prevents a crash.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!-- source-hash: 84fe8c9e8dffcbf0ae0ec8ff163a67e2 -->
|
|
2
|
+
Pure presentation component for rendering blog post cards in two density modes (`default` and `sm`), with no built-in click/navigation logic — callers supply the resolved `href` and wrap with their own anchor strategy.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `BlogCard`
|
|
7
|
+
Main card component supporting two layouts:
|
|
8
|
+
- **`default`**: Full vertical card with cover image, title, summary, author avatar, date, and view count
|
|
9
|
+
- **`sm`**: Compact horizontal card (~80px tall) designed for chat-inline rendering, showing a thumbnail, title, category, and summary
|
|
10
|
+
|
|
11
|
+
### `BlogCardSkeleton`
|
|
12
|
+
Loading placeholder matching both `default` and `sm` density layouts using animated pulse styles.
|
|
13
|
+
|
|
14
|
+
### `BlogCardProps`
|
|
15
|
+
| Prop | Type | Description |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| `post` | `BlogPostSummary` | Post data (title, image, author, etc.) |
|
|
18
|
+
| `href` | `string` | Resolved detail URL from caller |
|
|
19
|
+
| `target` | `'_blank'` | Opens in new tab (set by chat dispatch) |
|
|
20
|
+
| `placeholderUrl` | `string \| null` | Fallback image when `featured_image` is missing |
|
|
21
|
+
| `size` | `'default' \| 'sm'` | Card density mode |
|
|
22
|
+
| `hasEmbeddedVideo` | `boolean` | Surfaces a "Video" badge in compact mode |
|
|
23
|
+
| `priority` | `boolean` | Passes LCP priority hint to the cover image |
|
|
24
|
+
|
|
25
|
+
**Image fallback chain:** `post.featured_image` → `placeholderUrl` → `bg-ods-bg` background slot
|
|
26
|
+
|
|
27
|
+
## Usage Example
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
// Default full card — caller wraps with navigation anchor
|
|
31
|
+
<BlogCard
|
|
32
|
+
post={blogPostSummary}
|
|
33
|
+
href={buildContentURL(post.slug)}
|
|
34
|
+
placeholderUrl={useOgPlaceholder(post)}
|
|
35
|
+
size="default"
|
|
36
|
+
priority={true}
|
|
37
|
+
/>
|
|
38
|
+
|
|
39
|
+
// Compact card for chat-inline rendering
|
|
40
|
+
<BlogCard
|
|
41
|
+
post={blogPostSummary}
|
|
42
|
+
href={detailUrl}
|
|
43
|
+
target="_blank"
|
|
44
|
+
rel="noopener noreferrer"
|
|
45
|
+
size="sm"
|
|
46
|
+
hasEmbeddedVideo={true}
|
|
47
|
+
placeholderUrl={staticFallbackUrl}
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
// Skeleton while loading
|
|
51
|
+
<BlogCardSkeleton size="sm" />
|
|
52
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- source-hash: d68b2db5f05c474ec9bdb96a22e60341 -->
|
|
2
|
+
Thin presentation component that renders a blog post cover image (or OG-generated placeholder) with graceful 404 recovery.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `BlogImagePlaceholder`
|
|
7
|
+
A client-side React component that wraps a cover image in an HTML phrasing-content–safe `<span>`. Key behaviors:
|
|
8
|
+
|
|
9
|
+
- Returns `null` when `imageUrl` is `null`, rendering nothing
|
|
10
|
+
- Uses a plain `<img>` tag (bypasses `next/image`) to support query-string–based dynamic placeholder URLs
|
|
11
|
+
- Hides the broken-image icon via `onError` when the URL 404s, letting the parent `bg-ods-bg` background show through cleanly
|
|
12
|
+
- Wrapped in `<span className="block">` instead of `<div>` for HTML validity when rendered inside markdown `<p>` tags (e.g., compact `BlogCard` in the chat shell)
|
|
13
|
+
|
|
14
|
+
### `BlogImagePlaceholderProps`
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Description |
|
|
17
|
+
|------|------|-------------|
|
|
18
|
+
| `imageUrl` | `string \| null` | Pre-resolved cover/OG image URL; `null` renders nothing |
|
|
19
|
+
| `title` | `string` | Used for the `alt` attribute |
|
|
20
|
+
| `className` | `string` | Optional extra Tailwind classes |
|
|
21
|
+
|
|
22
|
+
## Usage Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { BlogImagePlaceholder } from './blog-image-placeholder'
|
|
26
|
+
|
|
27
|
+
// Typical usage in a BlogCard with a pre-resolved OG placeholder URL
|
|
28
|
+
<BlogImagePlaceholder
|
|
29
|
+
imageUrl="https://og.flamingo.run/placeholder?title=My+Post&category=devops"
|
|
30
|
+
title="My Post"
|
|
31
|
+
className="rounded-lg"
|
|
32
|
+
/>
|
|
33
|
+
|
|
34
|
+
// When imageUrl is null, renders nothing — safe to use unconditionally
|
|
35
|
+
<BlogImagePlaceholder
|
|
36
|
+
imageUrl={null}
|
|
37
|
+
title="Draft Post"
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: ff394dac0474471ce2eebef4dbdbb49b -->
|
|
2
|
+
A pure-presentation compact card component for displaying marketing campaigns inline in chat interfaces. Renders a 3-row layout with icon, title, metadata, and description — with optional anchor wrapping for navigation.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
| Interface | Purpose |
|
|
9
|
+
|-----------|---------|
|
|
10
|
+
| `CampaignCardItem` | Minimal campaign data shape (id, name, description, start_date, goals) |
|
|
11
|
+
| `CampaignCardAdminAnchorProps` | Anchor element props bundle (href, target, rel, onClick) |
|
|
12
|
+
| `CampaignCardAdminProps` | Main component props (campaign, className, anchorProps) |
|
|
13
|
+
|
|
14
|
+
### Exports
|
|
15
|
+
|
|
16
|
+
- **`CampaignCardAdmin`** — Primary compact card. Renders as a clickable `<a>` when `anchorProps` is provided, otherwise falls back to a static `<span>`. Displays campaign name, start date, goal count, and description.
|
|
17
|
+
- **`CampaignCardAdminSkeleton`** — Loading placeholder matching the card's 3-row layout using shimmer blocks.
|
|
18
|
+
|
|
19
|
+
## Usage Example
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// With navigation link
|
|
23
|
+
<CampaignCardAdmin
|
|
24
|
+
campaign={{
|
|
25
|
+
id: 'camp_123',
|
|
26
|
+
name: 'Q3 Product Launch',
|
|
27
|
+
description: 'Multi-channel awareness campaign',
|
|
28
|
+
start_date: '2024-07-01',
|
|
29
|
+
goals: [{ id: 1 }, { id: 2 }],
|
|
30
|
+
}}
|
|
31
|
+
anchorProps={{
|
|
32
|
+
href: '/campaigns/camp_123',
|
|
33
|
+
target: '_blank',
|
|
34
|
+
rel: 'noopener noreferrer',
|
|
35
|
+
}}
|
|
36
|
+
/>
|
|
37
|
+
|
|
38
|
+
// Static (no navigation)
|
|
39
|
+
<CampaignCardAdmin
|
|
40
|
+
campaign={{ id: 'camp_123', name: 'Q3 Launch' }}
|
|
41
|
+
/>
|
|
42
|
+
|
|
43
|
+
// Loading state
|
|
44
|
+
<CampaignCardAdminSkeleton className="my-2" />
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
> **Note:** This is the chat-inline compact variant only. The full-size admin card (with delete/manage actions) is managed by the hub, not this component.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<!-- source-hash: 02a29dbf8a78be028a2e952b979247a7 -->
|
|
2
|
+
Pure presentation component for displaying MSP case studies in two density modes — `default` (vertical detail card) and `sm` (compact horizontal for chat-inline rendering).
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `CaseStudyCard`
|
|
7
|
+
Main card component. Renders a linked, non-interactive card (no click logic — callers wrap with their own anchor and pass a resolved `href`). Supports:
|
|
8
|
+
- **`default` size**: Full vertical layout with OG-ratio cover image (`1200×630`), title, and author/MSP attribution with avatar stack.
|
|
9
|
+
- **`sm` size**: Compact horizontal layout for embedding in chat threads.
|
|
10
|
+
|
|
11
|
+
### `CaseStudyCardSkeleton`
|
|
12
|
+
Loading placeholder that mirrors the exact layout and aspect ratios of `CaseStudyCard` for both size variants, using `animate-pulse`.
|
|
13
|
+
|
|
14
|
+
### Image Fallback Chain
|
|
15
|
+
```text
|
|
16
|
+
study.featured_image → placeholderUrl (from useOgPlaceholder) → bg-ods-bg background
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Key Props (`CaseStudyCardProps`)
|
|
20
|
+
|
|
21
|
+
| Prop | Type | Description |
|
|
22
|
+
|------|------|-------------|
|
|
23
|
+
| `study` | `CaseStudy` | Case study data object |
|
|
24
|
+
| `href` | `string` | Resolved detail URL (caller-provided) |
|
|
25
|
+
| `target` | `'_blank'` | Opens in new tab (set by chat dispatch) |
|
|
26
|
+
| `placeholderUrl` | `string \| null` | OG fallback image when `featured_image` is missing |
|
|
27
|
+
| `size` | `'default' \| 'sm'` | Card density mode |
|
|
28
|
+
|
|
29
|
+
## Usage Example
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { CaseStudyCard, CaseStudyCardSkeleton } from './case-study-card'
|
|
33
|
+
import { useOgPlaceholder } from '../hooks/use-og-placeholder'
|
|
34
|
+
|
|
35
|
+
function CaseStudyGrid({ studies }: { studies: CaseStudy[] }) {
|
|
36
|
+
const placeholderUrl = useOgPlaceholder(study.id)
|
|
37
|
+
|
|
38
|
+
if (!studies) return <CaseStudyCardSkeleton size="default" />
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<CaseStudyCard
|
|
42
|
+
study={study}
|
|
43
|
+
href={`/case-studies/${study.slug}`}
|
|
44
|
+
placeholderUrl={placeholderUrl}
|
|
45
|
+
size="default"
|
|
46
|
+
/>
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Chat-inline compact variant
|
|
51
|
+
<CaseStudyCard
|
|
52
|
+
study={study}
|
|
53
|
+
href={`/case-studies/${study.slug}`}
|
|
54
|
+
target="_blank"
|
|
55
|
+
rel="noopener noreferrer"
|
|
56
|
+
size="sm"
|
|
57
|
+
/>
|
|
58
|
+
```
|