@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,29 @@
|
|
|
1
|
+
<!-- source-hash: d44532c82b6ead050537a1a73696aeb3 -->
|
|
2
|
+
Re-export shim that surfaces the canonical `ProductReleaseCard` component and its related types/skeleton under the `entity-cards/` namespace for unified chat barrel imports.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Source | Description |
|
|
7
|
+
|--------|--------|-------------|
|
|
8
|
+
| `ProductReleaseCard` | `shared/product-release/product-release-card` | Main card component (lg + sm variants) |
|
|
9
|
+
| `ProductReleaseCardProps` | `shared/product-release/product-release-card` | Component props type |
|
|
10
|
+
| `ProductReleaseCardSize` | `shared/product-release/product-release-card` | Size variant union type |
|
|
11
|
+
| `ProductReleaseCardAnchorProps` | `shared/product-release/product-release-card` | Anchor/link props type |
|
|
12
|
+
| `ProductReleaseCardSkeleton` | `shared/product-release/product-release-card-skeleton` | Loading skeleton component |
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// Via the chat barrel (preferred)
|
|
18
|
+
import {
|
|
19
|
+
ProductReleaseCard,
|
|
20
|
+
ProductReleaseCardSkeleton,
|
|
21
|
+
type ProductReleaseCardProps,
|
|
22
|
+
type ProductReleaseCardSize,
|
|
23
|
+
} from '@/components/chat'
|
|
24
|
+
|
|
25
|
+
// Direct import (bypasses indirection)
|
|
26
|
+
import { ProductReleaseCard } from '@/components/shared/product-release/product-release-card'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
> **Source of Truth:** All component logic and variants live in `src/components/shared/product-release/`. This file is purely a re-export — do not add logic here.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- source-hash: b76130e377c5c19a3a90e82e946098da -->
|
|
2
|
+
Provides fallback `ProgramConfig` defaults for the chat dispatch layer, ensuring `<ProgramCard size='sm'>` renders correctly without requiring embedders to supply hub-side catalog configuration.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `makeDefault<T>`
|
|
7
|
+
Generic factory function that constructs a minimal `ProgramConfig<T>` for a given program type. Populates only the fields the compact chat card actually reads (`type`, `labels.singular`) plus safe placeholder values for catalog-page fields (`dateField`, `table`, `apiEndpoint`, `icon`, `detailRoute`, `externalLinkLabel`) so TypeScript type-checking passes without binding embedders to hub-internal imports.
|
|
8
|
+
|
|
9
|
+
### `DEFAULT_PROGRAM_CONFIGS`
|
|
10
|
+
Exported `const` map of ready-to-use defaults for all three program types:
|
|
11
|
+
|
|
12
|
+
| Key | `type` | `labels.singular` | `labels.plural` |
|
|
13
|
+
|--------|---------|-------------------|-----------------|
|
|
14
|
+
| `podcast` | `"podcast"` | `"Episode"` | `"Episodes"` |
|
|
15
|
+
| `webinar` | `"webinar"` | `"Webinar"` | `"Webinars"` |
|
|
16
|
+
| `event` | `"event"` | `"Event"` | `"Events"` |
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
The chat dispatch reads `extras.programConfigs.X ?? DEFAULT_PROGRAM_CONFIGS.X`, so overriding is opt-in:
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { DEFAULT_PROGRAM_CONFIGS } from './program-card-defaults'
|
|
24
|
+
|
|
25
|
+
// Use defaults — no hub-side config required
|
|
26
|
+
const config = DEFAULT_PROGRAM_CONFIGS.podcast
|
|
27
|
+
// config.labels.singular → "Episode"
|
|
28
|
+
// config.type → "podcast"
|
|
29
|
+
|
|
30
|
+
// Override only what you need; fallback handles the rest
|
|
31
|
+
const customConfigs = {
|
|
32
|
+
podcast: {
|
|
33
|
+
...DEFAULT_PROGRAM_CONFIGS.podcast,
|
|
34
|
+
icon: MyPodcastIcon,
|
|
35
|
+
externalLinkLabel: 'Listen Now',
|
|
36
|
+
detailRoute: '/podcasts',
|
|
37
|
+
},
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
> **Why this exists:** Previously, missing `extras.programConfigs` caused the dispatch to return `null`, falling back to a bare text chip. These defaults decouple non-hub embedders (e.g. the validation app) from `currentPlatform()` and `buildContentURL` — hub-internal dependencies they cannot safely import.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<!-- source-hash: 882a2c614fa33ecfd7b3ef948ea40a94 -->
|
|
2
|
+
Brief overview of the `program-card.tsx` component — a pure presentational card for displaying podcasts, webinars, and events with two density modes.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Exports
|
|
7
|
+
|
|
8
|
+
| Export | Type | Description |
|
|
9
|
+
|--------|------|-------------|
|
|
10
|
+
| `ProgramCardSkeleton` | Component | Loading placeholder supporting `default` and `sm` sizes |
|
|
11
|
+
| `ProgramCard<T>` | Generic Component | Main card component, typed against `BaseProgramItem` |
|
|
12
|
+
| `ProgramCardProps<T>` | Interface | Props contract for `ProgramCard` |
|
|
13
|
+
|
|
14
|
+
### Internal Helpers
|
|
15
|
+
|
|
16
|
+
- **`getHosts()`** — Normalizes host data from either a typed array or a JSON string
|
|
17
|
+
- **`MediaGallery`** — Scrollable thumbnail strip with `ImageGalleryModal` lightbox integration
|
|
18
|
+
|
|
19
|
+
### Card Sizes (`CardSize`)
|
|
20
|
+
|
|
21
|
+
| Size | Layout | Use Case |
|
|
22
|
+
|------|--------|----------|
|
|
23
|
+
| `default` | Vertical, full detail | Standalone page/feed cards |
|
|
24
|
+
| `sm` | Compact horizontal | Chat-inline embeds |
|
|
25
|
+
|
|
26
|
+
### Type-Aware Metadata
|
|
27
|
+
|
|
28
|
+
The card adapts displayed metadata based on `config.type`:
|
|
29
|
+
|
|
30
|
+
- **`podcast`** → Duration via `formatDurationCompact`
|
|
31
|
+
- **`event`** → Location name
|
|
32
|
+
- **`webinar`** → Start time + duration via `formatTimeWithTimezone` / `formatDurationFromRange`
|
|
33
|
+
|
|
34
|
+
## Usage Example
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { ProgramCard } from './program-card'
|
|
38
|
+
|
|
39
|
+
// Default (vertical) layout
|
|
40
|
+
<ProgramCard
|
|
41
|
+
config={{ type: 'podcast', labels: { singular: 'Episode' } }}
|
|
42
|
+
item={episode}
|
|
43
|
+
href="/podcasts/ep-42"
|
|
44
|
+
size="default"
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
// Compact inline variant (e.g., inside chat)
|
|
48
|
+
<ProgramCard
|
|
49
|
+
config={{ type: 'webinar', labels: { singular: 'Webinar' } }}
|
|
50
|
+
item={webinarItem}
|
|
51
|
+
href="https://external.com/webinar"
|
|
52
|
+
target="_blank"
|
|
53
|
+
rel="noopener noreferrer"
|
|
54
|
+
size="sm"
|
|
55
|
+
placeholderUrl="https://cdn.example.com/og-fallback.png"
|
|
56
|
+
/>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
> **Note:** `ProgramCard` is purely presentational — it owns no navigation logic. Callers are responsible for computing and passing `href` and `target`.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- source-hash: 853672c07dc2c32f2542a936a393a3ad -->
|
|
2
|
+
Pure presentation component for roadmap items with two density modes — a rich default card (vote buttons, Figma/screenshot controls) and a compact horizontal variant for inline chat display.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|--------|-------------|
|
|
8
|
+
| `RoadmapCard` | Main card component, renders either `default` or `sm` layout |
|
|
9
|
+
| `RoadmapCardSkeleton` | Loading placeholder matching both card densities |
|
|
10
|
+
| `VoteType` | Union type `'up' \| 'down' \| null` for vote state |
|
|
11
|
+
| `RoadmapCardProps` | Full props interface for the card |
|
|
12
|
+
|
|
13
|
+
## Usage Example
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
// Default (full roadmap page card with vote controls)
|
|
17
|
+
<RoadmapCard
|
|
18
|
+
item={roadmapItem}
|
|
19
|
+
userVote={currentVote}
|
|
20
|
+
onVote={(type) => handleVote(item.id, type)}
|
|
21
|
+
isVoting={isPending}
|
|
22
|
+
/>
|
|
23
|
+
|
|
24
|
+
// Compact inline variant (chat/sidebar)
|
|
25
|
+
<a href={`/roadmap/${item.id}`}>
|
|
26
|
+
<RoadmapCard
|
|
27
|
+
item={roadmapItem}
|
|
28
|
+
size="sm"
|
|
29
|
+
href={`/roadmap/${item.id}`}
|
|
30
|
+
cardType="delivery_item"
|
|
31
|
+
target="_blank"
|
|
32
|
+
rel="noopener noreferrer"
|
|
33
|
+
/>
|
|
34
|
+
</a>
|
|
35
|
+
|
|
36
|
+
// Skeleton loader
|
|
37
|
+
<RoadmapCardSkeleton size="sm" />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Key Behaviors
|
|
41
|
+
|
|
42
|
+
- **Icon resolution**: prefers `item.icon` (proxied), falls back to `TaskTypeIcon` for internal tasks, then initials
|
|
43
|
+
- **`sm` branch**: wraps content in `<a>` when `href` is valid; renders a static `<span>` when no href is available
|
|
44
|
+
- **Vote UI** (`default` only): rendered only when `onVote` is provided; buttons disabled during `isVoting`
|
|
45
|
+
- **Screenshot gallery**: controlled via local `showScreenshots` state; Figma link and screenshot count displayed as metadata badges in the compact branch
|
|
46
|
+
- **Responsive status badge**: shown inline on `md+` screens, moves below the header row on mobile
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!-- source-hash: 69f5a0ba80b7e510b67573e50f546e85 -->
|
|
2
|
+
A pure-presentational thumbs-up / thumbs-down vote button used within `RoadmapCard`'s default variant. Renders an icon with an optional vote count; all interaction logic is delegated to the parent via `onClick`.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `RoadmapVoteButtonProps` | `interface` | Prop contract for the button |
|
|
9
|
+
| `RoadmapVoteButton` | `function` | Styled outline button with thumb icon and count |
|
|
10
|
+
|
|
11
|
+
### Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Default | Description |
|
|
14
|
+
|------|------|---------|-------------|
|
|
15
|
+
| `voteType` | `'up' \| 'down'` | — | Selects `ThumbsUpIcon` or `ThumbsDownIcon` |
|
|
16
|
+
| `count` | `number` | — | Vote tally displayed next to the icon |
|
|
17
|
+
| `isActive` | `boolean` | — | Applies active background when the user has voted |
|
|
18
|
+
| `onClick` | `() => void` | — | Click handler supplied by parent (e.g. `useRoadmapVoting`) |
|
|
19
|
+
| `disabled` | `boolean` | `false` | Disables interaction and applies reduced opacity |
|
|
20
|
+
| `showCount` | `boolean` | `true` | Toggles count label visibility |
|
|
21
|
+
| `color` | `string` | — | Forwarded to the icon as a fill/stroke color |
|
|
22
|
+
| `className` | `string` | — | Additional CSS classes merged via `cn()` |
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { RoadmapVoteButton } from './roadmap-vote-button'
|
|
28
|
+
|
|
29
|
+
function RoadmapCard() {
|
|
30
|
+
const { upvotes, hasVotedUp, handleVote } = useRoadmapVoting(itemId)
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div className="flex gap-2">
|
|
34
|
+
<RoadmapVoteButton
|
|
35
|
+
voteType="up"
|
|
36
|
+
count={upvotes}
|
|
37
|
+
isActive={hasVotedUp}
|
|
38
|
+
onClick={() => handleVote('up')}
|
|
39
|
+
color="#FFC008"
|
|
40
|
+
/>
|
|
41
|
+
<RoadmapVoteButton
|
|
42
|
+
voteType="down"
|
|
43
|
+
count={0}
|
|
44
|
+
isActive={false}
|
|
45
|
+
onClick={() => handleVote('down')}
|
|
46
|
+
showCount={false}
|
|
47
|
+
disabled
|
|
48
|
+
/>
|
|
49
|
+
</div>
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: 82997feaf6df9370cc3057cd02b01be6 -->
|
|
2
|
+
Renders a visual card component for Slack message markers, supporting both `compact` and `row` display variants with optional anchor navigation and a loading skeleton state.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `SlackMessageCard`
|
|
7
|
+
Main card component that displays a Slack message entry with icon, title, preview text, channel name, and date. Rendering behavior varies by nav context:
|
|
8
|
+
- Wraps in a caller-provided `<a>` via `anchorProps` if supplied
|
|
9
|
+
- Falls back to a direct external `<a href>` if `item.url` is valid
|
|
10
|
+
- Renders a static `<span>` when no link is available
|
|
11
|
+
|
|
12
|
+
### `SlackMessageCardSkeleton`
|
|
13
|
+
Animated placeholder matching the card layout for loading states. Accepts `variant` and `className` props.
|
|
14
|
+
|
|
15
|
+
### `parseChannelFromUrl` *(internal)*
|
|
16
|
+
Extracts the Slack channel ID from a Slack archive URL (`*.slack.com/archives/<channelId>/...`) as a fallback when `item.channel` is not set.
|
|
17
|
+
|
|
18
|
+
### Interfaces
|
|
19
|
+
|
|
20
|
+
| Interface | Purpose |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `SlackMessageCardProps` | `item`, `variant`, `className`, `anchorProps` |
|
|
23
|
+
| `SlackMessageCardAnchorProps` | Typed `<a>` prop bundle composed by the caller |
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { SlackMessageCard, SlackMessageCardSkeleton } from './slack-message-card'
|
|
29
|
+
|
|
30
|
+
// Compact card with caller-controlled navigation
|
|
31
|
+
<SlackMessageCard
|
|
32
|
+
item={slackMessageItem}
|
|
33
|
+
variant="compact"
|
|
34
|
+
anchorProps={{
|
|
35
|
+
href: '/messages/123',
|
|
36
|
+
onClick: (e) => handleNavigate(e),
|
|
37
|
+
}}
|
|
38
|
+
/>
|
|
39
|
+
|
|
40
|
+
// Inline row variant (e.g. inside a list or table)
|
|
41
|
+
<SlackMessageCard
|
|
42
|
+
item={slackMessageItem}
|
|
43
|
+
variant="row"
|
|
44
|
+
/>
|
|
45
|
+
|
|
46
|
+
// Skeleton while loading
|
|
47
|
+
<SlackMessageCardSkeleton variant="compact" />
|
|
48
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: 3003c61a214e3bd7c976af0a59119cb4 -->
|
|
2
|
+
Renders a Lucide icon corresponding to a ClickUp task type, resolved from `custom_item_id` via the `CUSTOM_ITEM_ID` map.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
**`iconFor(customItemId)`** — Internal function that maps a `custom_item_id` integer to a Lucide icon component. Falls back to `CheckSquare` for unknown or `null`/`undefined` values.
|
|
7
|
+
|
|
8
|
+
**`TaskTypeIcon`** — Client component that renders the resolved icon with configurable sizing via `className`.
|
|
9
|
+
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
|------|------|---------|-------------|
|
|
12
|
+
| `customItemId` | `number \| null \| undefined` | — | ClickUp `custom_item_id` to resolve |
|
|
13
|
+
| `className` | `string` | `'h-5 w-5'` | Tailwind classes applied to the icon |
|
|
14
|
+
|
|
15
|
+
**Type → Icon mapping:**
|
|
16
|
+
|
|
17
|
+
| Task Type | Icon |
|
|
18
|
+
|-----------|------|
|
|
19
|
+
| `BUG` | `Bug` |
|
|
20
|
+
| `REQUEST` | `Inbox` |
|
|
21
|
+
| `FEATURE` | `Sparkles` |
|
|
22
|
+
| `STORY` | `BookOpen` |
|
|
23
|
+
| `EPIC` | `Trophy` |
|
|
24
|
+
| `COMPONENT` | `Component` |
|
|
25
|
+
| `INITIATIVE` | `Flag` |
|
|
26
|
+
| `MILESTONE` | `Goal` |
|
|
27
|
+
| `SUBTASK` | `ListTodo` |
|
|
28
|
+
| `FORM` | `FileText` |
|
|
29
|
+
| `RECURRING` | `Repeat` |
|
|
30
|
+
| `PLAN` / `STRATEGY` | `Compass` |
|
|
31
|
+
| `TASK` / default | `CheckSquare` |
|
|
32
|
+
|
|
33
|
+
## Usage Example
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { TaskTypeIcon } from './task-type-icon'
|
|
37
|
+
import { CUSTOM_ITEM_ID } from '../utils/clickup-task-type-utils'
|
|
38
|
+
|
|
39
|
+
// Render a bug icon
|
|
40
|
+
<TaskTypeIcon customItemId={CUSTOM_ITEM_ID.BUG} />
|
|
41
|
+
|
|
42
|
+
// Custom size via className
|
|
43
|
+
<TaskTypeIcon customItemId={CUSTOM_ITEM_ID.EPIC} className="h-4 w-4 text-yellow-400" />
|
|
44
|
+
|
|
45
|
+
// Safely handles null/undefined — renders CheckSquare fallback
|
|
46
|
+
<TaskTypeIcon customItemId={task.custom_item_id} />
|
|
47
|
+
```
|
|
@@ -1,31 +1,46 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: d1cebe46eff04115f214c16b75a69467 -->
|
|
2
|
+
Barrel export file for the chat hooks module, re-exporting all public hooks from their individual files into a single `'use client'` entry point.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
| Export Group | Hooks |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Realtime / Streaming** | `useChunkCatchup`, `useRealtimeChunkProcessor`, `useJetstreamDialogSubscription`, `useNatsDialogSubscription` |
|
|
9
|
+
| **UI Utilities** | `useCollapsible`, `useCloseOnNavigation`, `useChatCardItem` |
|
|
10
|
+
| **Chat Core** | `useChat`, `useSSE`, `useChatIdentity`, `useChatAttachments`, `useChatAttachmentImageGallery`, `useSlashCommands` |
|
|
11
|
+
| **Transport Adapters** | `useSSEChatAdapter`, `useNatsChatAdapter` |
|
|
12
|
+
| **Unified Surface** | `useUnifiedChat` (primary), `useEmbeddedChat` (legacy SSE alias) |
|
|
13
|
+
| **Image Proxy** | `useProxiedImageUrl` |
|
|
10
14
|
|
|
11
15
|
## Usage Example
|
|
12
16
|
|
|
13
17
|
```typescript
|
|
14
|
-
//
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
// Typical consumer — import directly from the module index
|
|
19
|
+
import {
|
|
20
|
+
useUnifiedChat,
|
|
21
|
+
useChatAttachments,
|
|
22
|
+
useSlashCommands,
|
|
23
|
+
} from '@flamingo/chat-hooks'
|
|
24
|
+
|
|
25
|
+
function ChatPanel({ modes, activeMode }) {
|
|
26
|
+
const chat = useUnifiedChat({ modes, activeMode })
|
|
27
|
+
const attachments = useChatAttachments()
|
|
28
|
+
const slashCommands = useSlashCommands()
|
|
29
|
+
|
|
30
|
+
// ...
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Advanced: direct transport access
|
|
34
|
+
import { useNatsChatAdapter } from '@flamingo/chat-hooks'
|
|
35
|
+
|
|
36
|
+
function CustomTransportPanel() {
|
|
37
|
+
const nats = useNatsChatAdapter({ /* config */ })
|
|
38
|
+
// ...
|
|
28
39
|
}
|
|
29
40
|
```
|
|
30
41
|
|
|
31
|
-
|
|
42
|
+
## Notes
|
|
43
|
+
|
|
44
|
+
- Marked `'use client'` — safe for React Server Component trees; hooks run only on the client.
|
|
45
|
+
- `useUnifiedChat` is the recommended entry point for new consumers; `useEmbeddedChat` is the legacy SSE alias kept for backward compatibility.
|
|
46
|
+
- `useProxiedImageUrl` reads proxy config from `ChatRuntime.endpoints`, keeping image-proxy resolution consistent between hub and embedder environments.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- source-hash: 129697fa517b38437fd6fa76813ba652 -->
|
|
2
|
+
Provides a React hook that enables click-to-expand image gallery functionality for chat attachment images within a chat thread panel.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `useChatAttachmentImageGallery()`
|
|
7
|
+
Primary export. Returns `{ panelRef, modal }`:
|
|
8
|
+
- **`panelRef`** — `RefObject<HTMLDivElement>` to attach to the chat content wrapper; installs a delegated `click` listener
|
|
9
|
+
- **`modal`** — JSX element (`ImageGalleryModal`) rendered when open, or `null` when closed (enabling React garbage collection of blob URLs)
|
|
10
|
+
|
|
11
|
+
### `GalleryState` (interface)
|
|
12
|
+
Internal state shape: `{ isOpen: boolean, images: string[], initialIndex: number }`
|
|
13
|
+
|
|
14
|
+
### `absolutize(prefix: string)` (internal)
|
|
15
|
+
Normalizes relative URL prefixes (e.g. `/api/storage/view/`) to absolute URLs for reliable comparison against browser-resolved `<img>.src` values.
|
|
16
|
+
|
|
17
|
+
## Usage Example
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// In a chat panel host component
|
|
21
|
+
export function ChatPanel() {
|
|
22
|
+
const { panelRef, modal } = useChatAttachmentImageGallery()
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<>
|
|
26
|
+
{/* panelRef wraps the scrollable message list */}
|
|
27
|
+
<div ref={panelRef} className="chat-thread-wrapper">
|
|
28
|
+
{/* ...message bubbles rendered here... */}
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
{/* modal renders outside overflow-hidden bubbles */}
|
|
32
|
+
{modal}
|
|
33
|
+
</>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Click Delegation Flow
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
graph TD
|
|
42
|
+
Click["Click Event"] --> ImgCheck{"img src starts\nwith viewUrlPrefix?"}
|
|
43
|
+
ImgCheck -->|No| Ignore["Ignore click"]
|
|
44
|
+
ImgCheck -->|Yes| BubbleWalk["Walk up to\n[data-message-role]"]
|
|
45
|
+
BubbleWalk --> NoBubble{"Bubble found?"}
|
|
46
|
+
NoBubble -->|No| SingleImg["Open modal with\nsingle image"]
|
|
47
|
+
NoBubble -->|Yes| Collect["Collect all matching\nimgs in bubble (DOM order)"]
|
|
48
|
+
Collect --> OpenModal["Open ImageGalleryModal\nwith computed initialIndex"]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
> **Note:** The hook filters `<img>` elements by `attachmentViewUrlPrefix` from the chat runtime context, ensuring avatar and UI images are never intercepted.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: aa7997b65102b2c65fd293fc9f3faa3d -->
|
|
2
|
+
Manages the upload state machine for chat file attachments, handling multi-file staging, magic-byte MIME validation, progress tracking, and per-file abort control before sending messages.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `StagedAttachment`
|
|
7
|
+
Internal state shape for each file in the upload pipeline. Tracks `id`, `file`, `status` (`sniffing | uploading | ready | error`), `progress` (0–100), `storagePath`, `viewToken`, and `errorMessage`.
|
|
8
|
+
|
|
9
|
+
### `uploadWithProgress(url, file, token, onProgress?, signal?)`
|
|
10
|
+
Inline XHR helper that PUTs file bytes to a Supabase signed URL. Maps raw network progress to the 10–95 range, supports `AbortSignal` cancellation, and handles timeout/error/abort events with proper cleanup.
|
|
11
|
+
|
|
12
|
+
### `useChatAttachments()`
|
|
13
|
+
Primary hook exposing `UseChatAttachmentsApi`:
|
|
14
|
+
|
|
15
|
+
| Member | Description |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `attachments` | Full staged array with state-machine metadata |
|
|
18
|
+
| `readyAttachments` | Wire-format `ChatAttachment[]` for `sendMessage` |
|
|
19
|
+
| `hasInflightUploads` | `true` while any upload is in-progress (disables Send) |
|
|
20
|
+
| `addFiles(files)` | Stages and begins uploading files; deduplicates by `(name, size, lastModified)` |
|
|
21
|
+
| `removeAttachment(id)` | Aborts in-flight XHR and removes the file |
|
|
22
|
+
| `clear()` | Aborts all controllers and resets state |
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
const {
|
|
28
|
+
attachments,
|
|
29
|
+
readyAttachments,
|
|
30
|
+
hasInflightUploads,
|
|
31
|
+
addFiles,
|
|
32
|
+
removeAttachment,
|
|
33
|
+
clear,
|
|
34
|
+
} = useChatAttachments()
|
|
35
|
+
|
|
36
|
+
// Stage files from an input element
|
|
37
|
+
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
38
|
+
if (e.target.files) addFiles(e.target.files)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Pass ready attachments when sending
|
|
42
|
+
await sendMessage(text, { pendingAttachments: readyAttachments })
|
|
43
|
+
|
|
44
|
+
// Abort a specific upload mid-flight
|
|
45
|
+
removeAttachment(attachmentId)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
> **Security note:** Files are validated via magic-byte sniffing (`file-type`) before upload, rejecting extension spoofs (e.g. `evil.exe` renamed `screenshot.png`). The sniffed MIME — not `file.type` — is sent to the server for URL minting.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- source-hash: 4c8bb965154478fda34b9e6e30abb929 -->
|
|
2
|
+
Fetches a fully-mapped content item for an inline chat card by reusing the same list-API endpoint as public-facing pages (`/blog`, `/podcasts`, `/roadmap`, etc.), ensuring a single source of truth for item shape and joins.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `useChatCardItem<T>(type, id)`
|
|
7
|
+
Primary hook. Builds the list URL via `runtime.endpoints.buildListUrl`, fires a TanStack Query fetch, and returns the matched item. Deduplicated by `['chat-card-item', type, id]` query key — multiple references to the same `(type, id)` within one chat message produce a single network request. `refetchOnWindowFocus` is disabled to avoid wasteful re-fetches as the chat panel is toggled.
|
|
8
|
+
|
|
9
|
+
### `extractItems(data)`
|
|
10
|
+
Normalizes heterogeneous API response shapes (`{ items }`, `{ posts }`, `{ campaigns }`, `{ completed, inProgress }`, `{ data }`, or bare arrays) into a flat `unknown[]`. Single normalization point for all content types.
|
|
11
|
+
|
|
12
|
+
### `extractItemId(type, item)`
|
|
13
|
+
Resolves the primary key from a fetched item, handling both `id` and `external_id` fields for ClickUp-backed types (`roadmap_item`, `delivery_item`, `internal_task`).
|
|
14
|
+
|
|
15
|
+
### `UseChatCardItemResult<T>`
|
|
16
|
+
Return type interface exposing `item`, `isLoading`, and `isError`.
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { useChatCardItem } from './use-chat-card-item'
|
|
22
|
+
|
|
23
|
+
interface BlogPost {
|
|
24
|
+
id: string
|
|
25
|
+
title: string
|
|
26
|
+
author: string
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function ChatBlogCard({ id }: { id: string }) {
|
|
30
|
+
const { item, isLoading, isError } = useChatCardItem<BlogPost>('post', id)
|
|
31
|
+
|
|
32
|
+
if (isLoading) return <Spinner />
|
|
33
|
+
if (isError || !item) return <ErrorCard />
|
|
34
|
+
|
|
35
|
+
return <BlogCardPreview title={item.title} author={item.author} />
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> **Runtime dependency:** The hook reads `runtime.endpoints.buildListUrl` from `ChatRuntimeContext`. Hub environments wire the registry-driven builder directly; embedded apps supply a per-type URL builder pointing at the reverse proxy.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- source-hash: b3bbee124a5b530f9a19e9b047eec040 -->
|
|
2
|
+
Fetches and surfaces the current chat session's identity tier (`authTier`, `source`, `attachmentsEnabled`, `user`) via a lightweight `useEffect`/`useState` hook — no client-side cache by design.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
- **`ChatIdentityResponse`** — Wire shape mirroring the hub's `/api/auth/identity` route response. Includes `authTier` (`'session' | 'bearer-act-as' | 'anon'`), `source`, `attachmentsEnabled` (server-computed), and a nullable `user` object with optional `firstName`, `lastName`, and `avatarUrl`.
|
|
9
|
+
- **`ChatIdentitySurface`** — Extends `ChatIdentityResponse` with an `isLoading` boolean for skeleton/spinner states.
|
|
10
|
+
|
|
11
|
+
### Hook
|
|
12
|
+
|
|
13
|
+
- **`useChatIdentity()`** — Reads the identity endpoint URL from `useRequiredChatRuntime()`, fires an authenticated fetch via `chatAuthedFetch`, and returns identity data merged with `isLoading`. Falls back to `ANON_DEFAULTS` on errors or non-OK responses — never throws.
|
|
14
|
+
|
|
15
|
+
### Constants
|
|
16
|
+
|
|
17
|
+
- **`ANON_DEFAULTS`** — Safe fallback (`authTier: 'anon'`, `attachmentsEnabled: false`, `user: null`) used during loading and on any fetch failure.
|
|
18
|
+
|
|
19
|
+
## Usage Example
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { useChatIdentity } from './use-chat-identity'
|
|
23
|
+
|
|
24
|
+
function AttachmentButton() {
|
|
25
|
+
const { isLoading, attachmentsEnabled, user } = useChatIdentity()
|
|
26
|
+
|
|
27
|
+
if (isLoading) return <Spinner />
|
|
28
|
+
if (!attachmentsEnabled) return null
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<button>
|
|
32
|
+
Attach file {user?.firstName ? `(${user.firstName})` : ''}
|
|
33
|
+
</button>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Design Notes
|
|
39
|
+
|
|
40
|
+
| Concern | Decision |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Caching | None — avoids stale identity across credential rotations |
|
|
43
|
+
| Error handling | Falls back to anon defaults; never throws |
|
|
44
|
+
| Credential changes | Re-fetches automatically when `proxyEmail` (from `localStorage`) changes |
|
|
45
|
+
| `attachmentsEnabled` | Computed server-side; consumers read it directly without combining fields |
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<!-- source-hash: c1d1e8fb922837f8d57888644f4624f5 -->
|
|
2
|
+
Manages the client-side chat state for an AI assistant conversation, handling message streaming, tool approval workflows, and adaptive thinking display via SSE.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `UseChatOptions`
|
|
7
|
+
Configuration interface for the hook:
|
|
8
|
+
- `useMock` / `debugMode` — toggle mock/debug SSE modes
|
|
9
|
+
- `assistantName` / `assistantAvatar` — customize assistant identity
|
|
10
|
+
- `streamFn` — override default SSE transport with a custom function
|
|
11
|
+
- `initialMessages` — seed conversation state (e.g., from `localStorage`)
|
|
12
|
+
- `onMessagesChange` — persistence callback triggered on every message update
|
|
13
|
+
|
|
14
|
+
### `useChat(options)`
|
|
15
|
+
Primary hook returning:
|
|
16
|
+
|
|
17
|
+
| Return Value | Type | Description |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `messages` | `Message[]` | Full conversation history |
|
|
20
|
+
| `isTyping` | `boolean` | True until first text chunk arrives |
|
|
21
|
+
| `isStreaming` | `boolean` | True while SSE stream is active |
|
|
22
|
+
| `sseError` | `Error \| null` | Stream-level error state |
|
|
23
|
+
| `sendMessage` | `fn` | Send a user turn, optionally hidden |
|
|
24
|
+
| `abort` | `fn` | Cancel the active stream |
|
|
25
|
+
| `reset` | `fn` | Reset SSE state |
|
|
26
|
+
|
|
27
|
+
### `sendMessage(text, extra?, options?)`
|
|
28
|
+
Appends a user message, creates an optimistic assistant placeholder, then iterates the SSE stream, handling three segment types:
|
|
29
|
+
- **`text`** — accumulates into the last assistant message
|
|
30
|
+
- **`thinking`** — prepended as a thinking card (always before answer text)
|
|
31
|
+
- **`approval_request`** — renders a tool-approval card with `onApprove`/`onReject` callbacks
|
|
32
|
+
- **`decision_resolved`** — flips approval card status and appends a receipt to the current turn
|
|
33
|
+
|
|
34
|
+
## Usage Example
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { useChat } from './use-chat'
|
|
38
|
+
|
|
39
|
+
function ChatWidget() {
|
|
40
|
+
const { messages, isTyping, sendMessage, abort } = useChat({
|
|
41
|
+
assistantName: 'Mingo',
|
|
42
|
+
initialMessages: JSON.parse(localStorage.getItem('chat') ?? '[]'),
|
|
43
|
+
onMessagesChange: (msgs) => localStorage.setItem('chat', JSON.stringify(msgs)),
|
|
44
|
+
streamFn: myCustomStreamFn, // optional: bypass default SSE
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<div>
|
|
49
|
+
{messages.map((m) => <MessageBubble key={m.id} message={m} />)}
|
|
50
|
+
{isTyping && <TypingIndicator />}
|
|
51
|
+
<button onClick={() => sendMessage('Hello!')}>Send</button>
|
|
52
|
+
<button onClick={abort}>Stop</button>
|
|
53
|
+
</div>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
> **Hidden turns**: Pass `{ hidden: true }` to `sendMessage` for post-approval auto-continuation — the user message is added to LLM context but not rendered in the UI, keeping the visible thread clean.
|