@flamingo-stack/openframe-frontend-core 0.0.204 → 0.0.205
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-4CWSZPXH.cjs → chunk-24KCAECR.cjs} +9 -9
- package/dist/{chunk-4CWSZPXH.cjs.map → chunk-24KCAECR.cjs.map} +1 -1
- package/dist/chunk-27APPAJN.cjs +24 -0
- package/dist/chunk-27APPAJN.cjs.map +1 -0
- package/dist/{chunk-UC43NICZ.cjs → chunk-664KA5FI.cjs} +2 -35
- package/dist/chunk-664KA5FI.cjs.map +1 -0
- package/dist/chunk-6RZYJICV.cjs +24 -0
- package/dist/chunk-6RZYJICV.cjs.map +1 -0
- package/dist/chunk-7L4DWM7P.js +24 -0
- package/dist/chunk-7L4DWM7P.js.map +1 -0
- package/dist/chunk-BZFW3FOF.cjs +21 -0
- package/dist/chunk-BZFW3FOF.cjs.map +1 -0
- package/dist/{chunk-N57KWHDB.js → chunk-CIPO6DXK.js} +5 -5
- package/dist/chunk-EL5YVPD5.js +21 -0
- package/dist/chunk-EL5YVPD5.js.map +1 -0
- package/dist/{chunk-ARQ4XP64.cjs → chunk-FDCFI7YT.cjs} +40080 -31492
- package/dist/chunk-FDCFI7YT.cjs.map +1 -0
- package/dist/chunk-G7UE6RKV.cjs +121 -0
- package/dist/chunk-G7UE6RKV.cjs.map +1 -0
- package/dist/{chunk-25LVV26X.cjs → chunk-JUZGUQMX.cjs} +178 -50
- package/dist/chunk-JUZGUQMX.cjs.map +1 -0
- package/dist/{chunk-SZPJ5R5B.js → chunk-KSOOKNBG.js} +1 -34
- package/dist/chunk-KSOOKNBG.js.map +1 -0
- package/dist/{chunk-RMB5DVED.cjs → chunk-KUZGEA7U.cjs} +83 -66
- package/dist/chunk-KUZGEA7U.cjs.map +1 -0
- package/dist/chunk-LXC6P2EO.js +63 -0
- package/dist/chunk-LXC6P2EO.js.map +1 -0
- package/dist/chunk-MJNXIEV2.js +24 -0
- package/dist/chunk-MJNXIEV2.js.map +1 -0
- package/dist/{chunk-CPXLQ57U.js → chunk-MVGGXOFA.js} +37 -20
- package/dist/chunk-MVGGXOFA.js.map +1 -0
- package/dist/{chunk-LY34ORX6.js → chunk-O55ZUAX7.js} +39920 -31332
- package/dist/chunk-O55ZUAX7.js.map +1 -0
- package/dist/chunk-OHPI2HRK.js +47 -0
- package/dist/chunk-OHPI2HRK.js.map +1 -0
- package/dist/chunk-PLJLE4A4.js +121 -0
- package/dist/chunk-PLJLE4A4.js.map +1 -0
- package/dist/{chunk-XGL5FKIK.js → chunk-SCN5WFIZ.js} +148 -20
- package/dist/chunk-SCN5WFIZ.js.map +1 -0
- package/dist/chunk-WBR7H6E3.cjs +47 -0
- package/dist/chunk-WBR7H6E3.cjs.map +1 -0
- package/dist/chunk-XL4V2PYG.cjs +63 -0
- package/dist/chunk-XL4V2PYG.cjs.map +1 -0
- package/dist/components/announcement-bar.d.ts.map +1 -1
- package/dist/components/chat/chat-attachment-bar.d.ts +66 -0
- package/dist/components/chat/chat-attachment-bar.d.ts.map +1 -0
- package/dist/components/chat/chat-container.d.ts +21 -1
- package/dist/components/chat/chat-container.d.ts.map +1 -1
- package/dist/components/chat/chat-input.d.ts.map +1 -1
- package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
- package/dist/components/chat/chat-message-list.d.ts.map +1 -1
- package/dist/components/chat/chat-panel-context.d.ts +9 -0
- package/dist/components/chat/chat-panel-context.d.ts.map +1 -0
- package/dist/components/chat/chat-ticket-list.d.ts +1 -1
- package/dist/components/chat/chat-ticket-list.d.ts.map +1 -1
- package/dist/components/chat/embeddable-chat.d.ts +42 -0
- package/dist/components/chat/embeddable-chat.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/admin-content-card.d.ts +34 -0
- package/dist/components/chat/entity-cards/admin-content-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/block-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/blog-card.d.ts +30 -0
- package/dist/components/chat/entity-cards/blog-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/blog-image-placeholder.d.ts +26 -0
- package/dist/components/chat/entity-cards/blog-image-placeholder.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/campaign-card-admin.d.ts +33 -0
- package/dist/components/chat/entity-cards/campaign-card-admin.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/case-study-card.d.ts +20 -0
- package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/chat-ticket-item.d.ts.map +1 -0
- package/dist/components/chat/{chat-video-entity-card.d.ts → entity-cards/chat-video-entity-card.d.ts} +1 -1
- package/dist/components/chat/entity-cards/chat-video-entity-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/customer-interview-card.d.ts +19 -0
- package/dist/components/chat/entity-cards/customer-interview-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/data-room-doc-card.d.ts +47 -0
- package/dist/components/chat/entity-cards/data-room-doc-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/dispatch.d.ts +119 -0
- package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/entity-author-card.d.ts +87 -0
- package/dist/components/chat/entity-cards/entity-author-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/generic-entity-card.d.ts +42 -0
- package/dist/components/chat/entity-cards/generic-entity-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/github-activity-card.d.ts +37 -0
- package/dist/components/chat/entity-cards/github-activity-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts +28 -0
- package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/index.d.ts +32 -0
- package/dist/components/chat/entity-cards/index.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/investor-update-card.d.ts +19 -0
- package/dist/components/chat/entity-cards/investor-update-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts +20 -0
- package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/product-release-card-defaults.d.ts +21 -0
- package/dist/components/chat/entity-cards/product-release-card-defaults.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/product-release-card.d.ts +12 -0
- package/dist/components/chat/entity-cards/product-release-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/program-card-defaults.d.ts +32 -0
- package/dist/components/chat/entity-cards/program-card-defaults.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/program-card.d.ts +37 -0
- package/dist/components/chat/entity-cards/program-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/roadmap-card.d.ts +28 -0
- package/dist/components/chat/entity-cards/roadmap-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/roadmap-vote-button.d.ts +12 -0
- package/dist/components/chat/entity-cards/roadmap-vote-button.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/slack-message-card.d.ts +28 -0
- package/dist/components/chat/entity-cards/slack-message-card.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/task-type-icon.d.ts +6 -0
- package/dist/components/chat/entity-cards/task-type-icon.d.ts.map +1 -0
- package/dist/components/chat/hooks/index.d.ts +10 -0
- package/dist/components/chat/hooks/index.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts +5 -0
- package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-chat-attachments.d.ts +33 -0
- package/dist/components/chat/hooks/use-chat-attachments.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-chat-card-item.d.ts +7 -0
- package/dist/components/chat/hooks/use-chat-card-item.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-chat-identity.d.ts +44 -0
- package/dist/components/chat/hooks/use-chat-identity.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-chat.d.ts +30 -0
- package/dist/components/chat/hooks/use-chat.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-close-on-navigation.d.ts +2 -0
- package/dist/components/chat/hooks/use-close-on-navigation.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-embedded-chat.d.ts +174 -0
- package/dist/components/chat/hooks/use-embedded-chat.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-proxied-image-url.d.ts +18 -0
- package/dist/components/chat/hooks/use-proxied-image-url.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-slash-commands.d.ts +32 -0
- package/dist/components/chat/hooks/use-slash-commands.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-sse.d.ts +57 -0
- package/dist/components/chat/hooks/use-sse.d.ts.map +1 -0
- package/dist/components/chat/index.cjs +393 -0
- package/dist/components/chat/index.cjs.map +1 -0
- package/dist/components/chat/index.d.ts +5 -3
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +393 -0
- package/dist/components/chat/index.js.map +1 -0
- package/dist/components/chat/nav-link-anchor-via-runtime.d.ts +33 -0
- package/dist/components/chat/nav-link-anchor-via-runtime.d.ts.map +1 -0
- package/dist/components/chat/source-action-button.d.ts +39 -0
- package/dist/components/chat/source-action-button.d.ts.map +1 -0
- package/dist/components/chat/types/chat.types.d.ts +36 -0
- package/dist/components/chat/types/chat.types.d.ts.map +1 -1
- package/dist/components/chat/types/component.types.d.ts +56 -11
- package/dist/components/chat/types/component.types.d.ts.map +1 -1
- package/dist/components/chat/types/entities/blog.d.ts +14 -0
- package/dist/components/chat/types/entities/blog.d.ts.map +1 -0
- package/dist/components/chat/types/entities/case-study.d.ts +10 -0
- package/dist/components/chat/types/entities/case-study.d.ts.map +1 -0
- package/dist/components/chat/types/entities/content-ref.d.ts +23 -0
- package/dist/components/chat/types/entities/content-ref.d.ts.map +1 -0
- package/dist/components/chat/types/entities/customer-interview.d.ts +10 -0
- package/dist/components/chat/types/entities/customer-interview.d.ts.map +1 -0
- package/dist/components/chat/types/entities/data-room-doc.d.ts +37 -0
- package/dist/components/chat/types/entities/data-room-doc.d.ts.map +1 -0
- package/dist/components/chat/types/entities/github-activity.d.ts +29 -0
- package/dist/components/chat/types/entities/github-activity.d.ts.map +1 -0
- package/dist/components/chat/types/entities/hubspot-ticket.d.ts +39 -0
- package/dist/components/chat/types/entities/hubspot-ticket.d.ts.map +1 -0
- package/dist/components/chat/types/entities/index.d.ts +28 -0
- package/dist/components/chat/types/entities/index.d.ts.map +1 -0
- package/dist/components/chat/types/entities/investor-update.d.ts +83 -0
- package/dist/components/chat/types/entities/investor-update.d.ts.map +1 -0
- package/dist/components/chat/types/entities/onboarding-guide.d.ts +79 -0
- package/dist/components/chat/types/entities/onboarding-guide.d.ts.map +1 -0
- package/dist/components/chat/types/entities/program-types.d.ts +303 -0
- package/dist/components/chat/types/entities/program-types.d.ts.map +1 -0
- package/dist/components/chat/types/entities/roadmap-item.d.ts +41 -0
- package/dist/components/chat/types/entities/roadmap-item.d.ts.map +1 -0
- package/dist/components/chat/types/entities/slack-message.d.ts +28 -0
- package/dist/components/chat/types/entities/slack-message.d.ts.map +1 -0
- package/dist/components/chat/types/index.d.ts +1 -0
- package/dist/components/chat/types/index.d.ts.map +1 -1
- package/dist/components/chat/utils/agent-status-message.d.ts +18 -0
- package/dist/components/chat/utils/agent-status-message.d.ts.map +1 -0
- package/dist/components/chat/utils/auto-continuation-directive.d.ts +38 -0
- package/dist/components/chat/utils/auto-continuation-directive.d.ts.map +1 -0
- package/dist/components/chat/utils/chat-attachment-markdown.d.ts +114 -0
- package/dist/components/chat/utils/chat-attachment-markdown.d.ts.map +1 -0
- package/dist/components/chat/utils/chat-authed-fetch.d.ts +13 -0
- package/dist/components/chat/utils/chat-authed-fetch.d.ts.map +1 -0
- package/dist/components/chat/utils/chat-nav-resolution.d.ts +72 -0
- package/dist/components/chat/utils/chat-nav-resolution.d.ts.map +1 -0
- package/dist/components/chat/utils/chat-proxy-auth-storage.d.ts +43 -0
- package/dist/components/chat/utils/chat-proxy-auth-storage.d.ts.map +1 -0
- package/dist/components/chat/utils/chip-action-class.d.ts +16 -0
- package/dist/components/chat/utils/chip-action-class.d.ts.map +1 -0
- package/dist/components/chat/utils/chip-styles.d.ts +32 -0
- package/dist/components/chat/utils/chip-styles.d.ts.map +1 -0
- package/dist/components/chat/utils/clickup-task-type-utils.d.ts +38 -0
- package/dist/components/chat/utils/clickup-task-type-utils.d.ts.map +1 -0
- package/dist/components/chat/utils/compact-card-classes.d.ts +50 -0
- package/dist/components/chat/utils/compact-card-classes.d.ts.map +1 -0
- package/dist/components/chat/utils/decide-new-tab.d.ts +39 -0
- package/dist/components/chat/utils/decide-new-tab.d.ts.map +1 -0
- package/dist/components/chat/utils/external-app-urls.d.ts +14 -0
- package/dist/components/chat/utils/external-app-urls.d.ts.map +1 -0
- package/dist/components/chat/utils/flatten-assistant-content.d.ts +25 -0
- package/dist/components/chat/utils/flatten-assistant-content.d.ts.map +1 -0
- package/dist/components/chat/utils/icon-registry.d.ts +67 -0
- package/dist/components/chat/utils/icon-registry.d.ts.map +1 -0
- package/dist/components/chat/utils/index.d.ts +21 -0
- package/dist/components/chat/utils/index.d.ts.map +1 -1
- package/dist/components/chat/utils/is-cross-origin-url.d.ts +22 -0
- package/dist/components/chat/utils/is-cross-origin-url.d.ts.map +1 -0
- package/dist/components/chat/utils/nav-anchor-props.d.ts +54 -0
- package/dist/components/chat/utils/nav-anchor-props.d.ts.map +1 -0
- package/dist/components/chat/utils/nav-click-handler.d.ts +51 -0
- package/dist/components/chat/utils/nav-click-handler.d.ts.map +1 -0
- package/dist/components/chat/utils/scroll-anchor.d.ts +30 -0
- package/dist/components/chat/utils/scroll-anchor.d.ts.map +1 -0
- package/dist/components/chat/utils/slash-dispatch-utils.d.ts +109 -0
- package/dist/components/chat/utils/slash-dispatch-utils.d.ts.map +1 -0
- package/dist/components/chat/utils/source-icons.d.ts +8 -0
- package/dist/components/chat/utils/source-icons.d.ts.map +1 -0
- package/dist/components/chat/utils/source-row-cta.d.ts +111 -0
- package/dist/components/chat/utils/source-row-cta.d.ts.map +1 -0
- package/dist/components/features/figma-prototype-viewer.d.ts.map +1 -1
- package/dist/components/features/index.cjs +12 -6
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.js +11 -5
- package/dist/components/features/video.d.ts.map +1 -1
- package/dist/components/icons/index.cjs +3 -3
- package/dist/components/icons/index.js +2 -2
- package/dist/components/index.cjs +274 -8
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +273 -7
- package/dist/components/interactive-wrapper.d.ts +3 -3
- package/dist/components/navigation/index.cjs +12 -6
- package/dist/components/navigation/index.cjs.map +1 -1
- package/dist/components/navigation/index.js +11 -5
- package/dist/components/resizable.d.ts +1 -1
- package/dist/components/shared/product-release/product-release-card-skeleton.d.ts +1 -1
- package/dist/components/shared/product-release/product-release-card-skeleton.d.ts.map +1 -1
- package/dist/components/shared/product-release/product-release-card.d.ts +19 -12
- package/dist/components/shared/product-release/product-release-card.d.ts.map +1 -1
- package/dist/components/shared/product-release/release-detail-page.d.ts +2 -4
- package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
- package/dist/components/ui/button/button.d.ts +13 -0
- package/dist/components/ui/button/button.d.ts.map +1 -1
- package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
- package/dist/components/ui/entity-image.d.ts.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +71 -70
- package/dist/components/ui/file-manager/index.cjs.map +1 -1
- package/dist/components/ui/file-manager/index.js +6 -5
- package/dist/components/ui/file-manager/index.js.map +1 -1
- package/dist/components/ui/hover-dropdown.d.ts +66 -0
- package/dist/components/ui/hover-dropdown.d.ts.map +1 -0
- package/dist/components/ui/index.cjs +276 -6
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +278 -8
- package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
- package/dist/components/ui/square-avatar.d.ts.map +1 -1
- package/dist/contexts/chat-runtime-context.d.ts +109 -0
- package/dist/contexts/chat-runtime-context.d.ts.map +1 -0
- package/dist/contexts/endpoints-runtime-context.d.ts +28 -0
- package/dist/contexts/endpoints-runtime-context.d.ts.map +1 -0
- package/dist/contexts/index.cjs +30 -0
- package/dist/contexts/index.cjs.map +1 -0
- package/dist/contexts/index.d.ts +26 -0
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/contexts/index.js +30 -0
- package/dist/contexts/index.js.map +1 -0
- package/dist/contexts/use-outer-or-default.d.ts +29 -0
- package/dist/contexts/use-outer-or-default.d.ts.map +1 -0
- package/dist/embed-shims/index.cjs +51 -0
- package/dist/embed-shims/index.cjs.map +1 -0
- package/dist/embed-shims/index.d.ts +31 -0
- package/dist/embed-shims/index.d.ts.map +1 -0
- package/dist/embed-shims/index.js +51 -0
- package/dist/embed-shims/index.js.map +1 -0
- package/dist/embed-shims/next-dynamic.cjs +12 -0
- package/dist/embed-shims/next-dynamic.cjs.map +1 -0
- package/dist/embed-shims/next-dynamic.d.ts +47 -0
- package/dist/embed-shims/next-dynamic.d.ts.map +1 -0
- package/dist/embed-shims/next-dynamic.js +12 -0
- package/dist/embed-shims/next-dynamic.js.map +1 -0
- package/dist/embed-shims/next-image.cjs +12 -0
- package/dist/embed-shims/next-image.cjs.map +1 -0
- package/dist/embed-shims/next-image.d.ts +28 -0
- package/dist/embed-shims/next-image.d.ts.map +1 -0
- package/dist/embed-shims/next-image.js +12 -0
- package/dist/embed-shims/next-image.js.map +1 -0
- package/dist/embed-shims/next-link.cjs +14 -0
- package/dist/embed-shims/next-link.cjs.map +1 -0
- package/dist/embed-shims/next-link.d.ts +22 -0
- package/dist/embed-shims/next-link.d.ts.map +1 -0
- package/dist/embed-shims/next-link.js +14 -0
- package/dist/embed-shims/next-link.js.map +1 -0
- package/dist/embed-shims/next-navigation.cjs +30 -0
- package/dist/embed-shims/next-navigation.cjs.map +1 -0
- package/dist/embed-shims/next-navigation.d.ts +46 -0
- package/dist/embed-shims/next-navigation.d.ts.map +1 -0
- package/dist/embed-shims/next-navigation.js +30 -0
- package/dist/embed-shims/next-navigation.js.map +1 -0
- package/dist/hooks/index.cjs +10 -4
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +9 -3
- package/dist/hooks/use-access-code-integration.d.ts +48 -0
- package/dist/hooks/use-access-code-integration.d.ts.map +1 -0
- package/dist/hooks/use-contact-submission.d.ts.map +1 -1
- package/dist/hooks/use-og-placeholder.d.ts +31 -0
- package/dist/hooks/use-og-placeholder.d.ts.map +1 -0
- package/dist/hooks/use-toast.d.ts +1 -1
- package/dist/index.cjs +367 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +378 -18
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/access-code-client.d.ts +21 -37
- package/dist/utils/access-code-client.d.ts.map +1 -1
- package/dist/utils/cn.d.ts +0 -27
- package/dist/utils/cn.d.ts.map +1 -1
- package/dist/utils/color-analysis.d.ts +33 -0
- package/dist/utils/color-analysis.d.ts.map +1 -0
- package/dist/utils/date-formatters.d.ts +16 -5
- package/dist/utils/date-formatters.d.ts.map +1 -1
- package/dist/utils/fetch-priority.d.ts +3 -0
- package/dist/utils/fetch-priority.d.ts.map +1 -0
- package/dist/utils/format.d.ts +192 -1
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/image-proxy.d.ts +67 -2
- package/dist/utils/image-proxy.d.ts.map +1 -1
- package/dist/utils/index.cjs +1274 -155
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +19 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1200 -157
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/local-storage-adapter.d.ts +46 -0
- package/dist/utils/local-storage-adapter.d.ts.map +1 -0
- package/dist/utils/source-icons.d.ts +78 -0
- package/dist/utils/source-icons.d.ts.map +1 -0
- package/package.json +29 -2
- package/src/components/announcement-bar.tsx +26 -4
- package/src/components/categories-cart.tsx +1 -1
- package/src/components/chat/chat-attachment-bar.tsx +323 -0
- package/src/components/chat/chat-container.tsx +39 -5
- package/src/components/chat/chat-input.tsx +7 -1
- package/src/components/chat/chat-message-enhanced.tsx +32 -22
- package/src/components/chat/chat-message-list.tsx +53 -4
- package/src/components/chat/chat-panel-context.tsx +37 -0
- package/src/components/chat/chat-ticket-list.tsx +1 -1
- package/src/components/chat/embeddable-chat.tsx +1106 -0
- package/src/components/chat/entity-cards/admin-content-card.tsx +155 -0
- package/src/components/chat/entity-cards/blog-card.tsx +259 -0
- package/src/components/chat/entity-cards/blog-image-placeholder.tsx +52 -0
- package/src/components/chat/entity-cards/campaign-card-admin.tsx +113 -0
- package/src/components/chat/entity-cards/case-study-card.tsx +192 -0
- package/src/components/chat/{chat-ticket-item.tsx → entity-cards/chat-ticket-item.tsx} +2 -2
- package/src/components/chat/{chat-video-entity-card.tsx → entity-cards/chat-video-entity-card.tsx} +2 -2
- package/src/components/chat/entity-cards/customer-interview-card.tsx +211 -0
- package/src/components/chat/entity-cards/data-room-doc-card.tsx +120 -0
- package/src/components/chat/entity-cards/dispatch.tsx +1093 -0
- package/src/components/chat/entity-cards/entity-author-card.tsx +193 -0
- package/src/components/chat/entity-cards/generic-entity-card.tsx +144 -0
- package/src/components/chat/entity-cards/github-activity-card.tsx +305 -0
- package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +205 -0
- package/src/components/chat/entity-cards/index.ts +125 -0
- package/src/components/chat/entity-cards/investor-update-card.tsx +150 -0
- package/src/components/chat/entity-cards/onboarding-guide-card.tsx +326 -0
- package/src/components/chat/entity-cards/product-release-card-defaults.ts +57 -0
- package/src/components/chat/entity-cards/product-release-card.tsx +19 -0
- package/src/components/chat/entity-cards/program-card-defaults.ts +62 -0
- package/src/components/chat/entity-cards/program-card.tsx +451 -0
- package/src/components/chat/entity-cards/roadmap-card.tsx +356 -0
- package/src/components/chat/entity-cards/roadmap-vote-button.tsx +54 -0
- package/src/components/chat/entity-cards/slack-message-card.tsx +182 -0
- package/src/components/chat/entity-cards/task-type-icon.tsx +60 -0
- package/src/components/chat/hooks/index.ts +22 -0
- package/src/components/chat/hooks/use-chat-attachment-image-gallery.tsx +114 -0
- package/src/components/chat/hooks/use-chat-attachments.ts +429 -0
- package/src/components/chat/hooks/use-chat-card-item.ts +102 -0
- package/src/components/chat/hooks/use-chat-identity.ts +139 -0
- package/src/components/chat/hooks/use-chat.ts +501 -0
- package/src/components/chat/hooks/use-close-on-navigation.ts +87 -0
- package/src/components/chat/hooks/use-embedded-chat.ts +1023 -0
- package/src/components/chat/hooks/use-proxied-image-url.ts +31 -0
- package/src/components/chat/hooks/use-slash-commands.ts +106 -0
- package/src/components/chat/hooks/use-sse.ts +143 -0
- package/src/components/chat/index.ts +30 -4
- package/src/components/chat/nav-link-anchor-via-runtime.tsx +72 -0
- package/src/components/chat/source-action-button.tsx +120 -0
- package/src/components/chat/types/chat.types.ts +61 -0
- package/src/components/chat/types/component.types.ts +57 -11
- package/src/components/chat/types/entities/blog.ts +27 -0
- package/src/components/chat/types/entities/case-study.ts +14 -0
- package/src/components/chat/types/entities/content-ref.ts +23 -0
- package/src/components/chat/types/entities/customer-interview.ts +15 -0
- package/src/components/chat/types/entities/data-room-doc.ts +37 -0
- package/src/components/chat/types/entities/github-activity.ts +36 -0
- package/src/components/chat/types/entities/hubspot-ticket.ts +39 -0
- package/src/components/chat/types/entities/index.ts +28 -0
- package/src/components/chat/types/entities/investor-update.ts +100 -0
- package/src/components/chat/types/entities/onboarding-guide.ts +101 -0
- package/src/components/chat/types/entities/program-types.ts +433 -0
- package/src/components/chat/types/entities/roadmap-item.ts +42 -0
- package/src/components/chat/types/entities/slack-message.ts +28 -0
- package/src/components/chat/types/index.ts +1 -0
- package/src/components/chat/utils/agent-status-message.ts +52 -0
- package/src/components/chat/utils/auto-continuation-directive.ts +70 -0
- package/src/components/chat/utils/chat-attachment-markdown.ts +190 -0
- package/src/components/chat/utils/chat-authed-fetch.ts +73 -0
- package/src/components/chat/utils/chat-nav-resolution.ts +151 -0
- package/src/components/chat/utils/chat-proxy-auth-storage.ts +148 -0
- package/src/components/chat/utils/chip-action-class.ts +19 -0
- package/src/components/chat/utils/chip-styles.ts +51 -0
- package/src/components/chat/utils/clickup-task-type-utils.ts +59 -0
- package/src/components/chat/utils/compact-card-classes.ts +97 -0
- package/src/components/chat/utils/decide-new-tab.ts +57 -0
- package/src/components/chat/utils/external-app-urls.ts +19 -0
- package/src/components/chat/utils/flatten-assistant-content.ts +35 -0
- package/src/components/chat/utils/icon-registry.ts +297 -0
- package/src/components/chat/utils/index.ts +133 -0
- package/src/components/chat/utils/is-cross-origin-url.ts +28 -0
- package/src/components/chat/utils/nav-anchor-props.ts +78 -0
- package/src/components/chat/utils/nav-click-handler.ts +81 -0
- package/src/components/chat/utils/scroll-anchor.ts +35 -0
- package/src/components/chat/utils/slash-dispatch-utils.ts +183 -0
- package/src/components/chat/utils/source-icons.ts +14 -0
- package/src/components/chat/utils/source-row-cta.ts +215 -0
- package/src/components/empty-state.tsx +1 -1
- package/src/components/features/board/ticket-card.tsx +1 -1
- package/src/components/features/figma-prototype-viewer.tsx +2 -1
- package/src/components/features/media-gallery-manager.tsx +1 -1
- package/src/components/features/parallax-image-showcase.tsx +1 -1
- package/src/components/features/release-media-manager.tsx +1 -1
- package/src/components/features/seo-editor-preview.tsx +1 -1
- package/src/components/features/video.tsx +54 -3
- package/src/components/footer-waitlist-button.tsx +1 -1
- package/src/components/navigation/header.tsx +1 -1
- package/src/components/shared/onboarding/onboarding-step-card.tsx +1 -1
- package/src/components/shared/product-release/product-release-card-skeleton.tsx +8 -44
- package/src/components/shared/product-release/product-release-card.tsx +31 -116
- package/src/components/shared/product-release/release-detail-page.tsx +12 -16
- package/src/components/ui/actions-menu.tsx +1 -1
- package/src/components/ui/button/button.tsx +41 -11
- package/src/components/ui/button/split-button.tsx +1 -1
- package/src/components/ui/dashboard-info-card.tsx +2 -3
- package/src/components/ui/data-table/data-table-row.tsx +1 -1
- package/src/components/ui/entity-image.tsx +2 -8
- package/src/components/ui/hover-dropdown.tsx +258 -0
- package/src/components/ui/image-gallery-modal.tsx +1 -1
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/markdown-editor.tsx +1 -1
- package/src/components/ui/more-actions-menu.tsx +1 -1
- package/src/components/ui/organization-card.tsx +1 -1
- package/src/components/ui/simple-markdown-renderer.tsx +53 -5
- package/src/components/ui/square-avatar.tsx +3 -12
- package/src/components/ui/tab-navigation.tsx +1 -1
- package/src/components/ui/table/table-row.tsx +1 -1
- package/src/components/unified-filter-logic.tsx +1 -1
- package/src/components/unified-pagination.tsx +1 -1
- package/src/components/user-summary-stub.tsx +1 -1
- package/src/components/vendor-display-button.tsx +1 -1
- package/src/components/vendor-icon.tsx +1 -1
- package/src/contexts/chat-runtime-context.tsx +163 -0
- package/src/contexts/endpoints-runtime-context.tsx +68 -0
- package/src/contexts/index.ts +38 -0
- package/src/contexts/use-outer-or-default.ts +42 -0
- package/src/embed-shims/index.ts +42 -0
- package/src/embed-shims/next-dynamic.tsx +70 -0
- package/src/embed-shims/next-image.tsx +114 -0
- package/src/embed-shims/next-link.tsx +91 -0
- package/src/embed-shims/next-navigation.tsx +201 -0
- package/src/hooks/index.ts +9 -0
- package/src/hooks/state/use-api-params.ts +1 -1
- package/src/hooks/state/use-query-params.ts +1 -1
- package/src/hooks/use-access-code-integration.ts +107 -0
- package/src/hooks/use-contact-submission.ts +7 -3
- package/src/hooks/use-og-placeholder.ts +45 -0
- package/src/stories/OnboardingStepCard.stories.tsx +140 -0
- package/src/styles/chat-animations.css +65 -0
- package/src/styles/index.css +1 -0
- package/src/utils/access-code-client.ts +32 -75
- package/src/utils/cn.ts +0 -65
- package/src/utils/color-analysis.ts +205 -0
- package/src/utils/date-formatters.ts +54 -11
- package/src/utils/fetch-priority.ts +41 -0
- package/src/utils/format.ts +525 -1
- package/src/utils/image-proxy.ts +127 -7
- package/src/utils/index.ts +145 -5
- package/src/utils/local-storage-adapter.ts +105 -0
- package/src/utils/source-icons.ts +219 -0
- package/dist/chunk-25LVV26X.cjs.map +0 -1
- package/dist/chunk-ARQ4XP64.cjs.map +0 -1
- package/dist/chunk-CPXLQ57U.js.map +0 -1
- package/dist/chunk-LY34ORX6.js.map +0 -1
- package/dist/chunk-RMB5DVED.cjs.map +0 -1
- package/dist/chunk-SZPJ5R5B.js.map +0 -1
- package/dist/chunk-UC43NICZ.cjs.map +0 -1
- package/dist/chunk-XGL5FKIK.js.map +0 -1
- package/dist/components/chat/block-card.d.ts.map +0 -1
- package/dist/components/chat/chat-ticket-item.d.ts.map +0 -1
- package/dist/components/chat/chat-video-entity-card.d.ts.map +0 -1
- package/dist/utils/dynamic-icons.d.ts +0 -26
- package/dist/utils/dynamic-icons.d.ts.map +0 -1
- package/dist/utils/format-relative-time.d.ts +0 -21
- package/dist/utils/format-relative-time.d.ts.map +0 -1
- package/src/utils/.dynamic-icons.md +0 -30
- package/src/utils/.format-relative-time.md +0 -36
- package/src/utils/dynamic-icons.tsx +0 -120
- package/src/utils/format-relative-time.ts +0 -52
- /package/dist/{chunk-N57KWHDB.js.map → chunk-CIPO6DXK.js.map} +0 -0
- /package/dist/components/chat/{block-card.d.ts → entity-cards/block-card.d.ts} +0 -0
- /package/dist/components/chat/{chat-ticket-item.d.ts → entity-cards/chat-ticket-item.d.ts} +0 -0
- /package/src/components/chat/{block-card.tsx → entity-cards/block-card.tsx} +0 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* CaseStudyCard (pure presentation). Two densities — `default` (vertical
|
|
5
|
+
* detail) and `sm` (compact horizontal for chat-inline).
|
|
6
|
+
*
|
|
7
|
+
* The card writes NO click logic — callers wrap with their own anchor
|
|
8
|
+
* and pass the resolved detail URL via `href`.
|
|
9
|
+
*
|
|
10
|
+
* Image-fallback chain:
|
|
11
|
+
* `study.featured_image` → `placeholderUrl` (caller passes
|
|
12
|
+
* `useOgPlaceholder(...)`) → `bg-ods-bg`.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import React from 'react'
|
|
16
|
+
import Image from '../../../embed-shims/next-image'
|
|
17
|
+
import { Card } from '../../ui/card'
|
|
18
|
+
import { cn } from '../../../utils/cn'
|
|
19
|
+
import type { CaseStudy } from '../../../types/case-study'
|
|
20
|
+
import {
|
|
21
|
+
COMPACT_CARD_IMAGE_SLOT,
|
|
22
|
+
COMPACT_CARD_META_ROW_BOX,
|
|
23
|
+
COMPACT_CARD_OUTER,
|
|
24
|
+
COMPACT_CARD_ROW_FILLER,
|
|
25
|
+
COMPACT_CARD_SKELETON_IMAGE_SLOT,
|
|
26
|
+
COMPACT_CARD_SKELETON_OUTER,
|
|
27
|
+
COMPACT_CARD_SUBTITLE,
|
|
28
|
+
COMPACT_CARD_SUMMARY,
|
|
29
|
+
COMPACT_CARD_TEXT_COL,
|
|
30
|
+
COMPACT_CARD_TITLE,
|
|
31
|
+
COMPACT_CARD_TITLE_ROW,
|
|
32
|
+
} from '../utils/compact-card-classes'
|
|
33
|
+
|
|
34
|
+
const hideOnError = (e: React.SyntheticEvent<HTMLImageElement>) => {
|
|
35
|
+
;(e.currentTarget as HTMLImageElement).style.display = 'none'
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface CaseStudyCardProps {
|
|
39
|
+
study: CaseStudy
|
|
40
|
+
/** Detail URL resolved by the caller. */
|
|
41
|
+
href: string
|
|
42
|
+
/** When `_blank`, opens in a new tab. Set by chat dispatch via
|
|
43
|
+
* `computeIsNewTab`. Defaults to same-tab. */
|
|
44
|
+
target?: '_blank'
|
|
45
|
+
rel?: 'noopener noreferrer'
|
|
46
|
+
targetPlatform?: string | null
|
|
47
|
+
/** OG placeholder URL, used when `study.featured_image` is missing. */
|
|
48
|
+
placeholderUrl?: string | null
|
|
49
|
+
size?: 'default' | 'sm'
|
|
50
|
+
className?: string
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function CaseStudyCardSkeleton({ size = 'default' }: { size?: 'default' | 'sm' }) {
|
|
54
|
+
if (size === 'sm') {
|
|
55
|
+
return (
|
|
56
|
+
<span className={COMPACT_CARD_SKELETON_OUTER}>
|
|
57
|
+
<span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
|
|
58
|
+
<span className={COMPACT_CARD_TEXT_COL}>
|
|
59
|
+
<span className={COMPACT_CARD_TITLE_ROW}>
|
|
60
|
+
<span className="h-3.5 w-3/5 rounded bg-ods-bg" />
|
|
61
|
+
</span>
|
|
62
|
+
<span className={COMPACT_CARD_META_ROW_BOX}>
|
|
63
|
+
<span className="h-3 w-1/2 rounded bg-ods-bg/70" />
|
|
64
|
+
</span>
|
|
65
|
+
<span className={COMPACT_CARD_META_ROW_BOX}>
|
|
66
|
+
<span className="h-3 w-11/12 rounded bg-ods-bg/40" />
|
|
67
|
+
</span>
|
|
68
|
+
</span>
|
|
69
|
+
</span>
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
return (
|
|
73
|
+
<div className="bg-ods-card border border-ods-border rounded-lg overflow-hidden p-6 flex flex-col gap-6 animate-pulse">
|
|
74
|
+
<div className="h-[200px] w-full rounded-sm bg-ods-bg" />
|
|
75
|
+
<div className="h-[72px] flex flex-col gap-2">
|
|
76
|
+
<div className="h-5 w-3/4 bg-ods-bg rounded" />
|
|
77
|
+
<div className="h-5 w-1/2 bg-ods-bg rounded" />
|
|
78
|
+
</div>
|
|
79
|
+
<div className="h-[60px] flex items-center gap-3">
|
|
80
|
+
<div className="h-12 w-12 rounded-full bg-ods-bg" />
|
|
81
|
+
<div className="flex-1 space-y-2">
|
|
82
|
+
<div className="h-4 w-2/3 bg-ods-bg rounded" />
|
|
83
|
+
<div className="h-3 w-1/2 bg-ods-bg/60 rounded" />
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function CaseStudyCard({ study, href, target, rel, placeholderUrl, size = 'default', className }: CaseStudyCardProps) {
|
|
91
|
+
const coverImage = study.featured_image || placeholderUrl || null
|
|
92
|
+
|
|
93
|
+
if (size === 'sm') {
|
|
94
|
+
return (
|
|
95
|
+
<a href={href} target={target} rel={rel} className={cn(COMPACT_CARD_OUTER, className)}>
|
|
96
|
+
<span className={COMPACT_CARD_IMAGE_SLOT}>
|
|
97
|
+
{coverImage ? (
|
|
98
|
+
<img
|
|
99
|
+
src={coverImage}
|
|
100
|
+
alt={`${study.msp?.name || study.title} cover`}
|
|
101
|
+
className="absolute inset-0 block w-full h-full object-contain"
|
|
102
|
+
onError={hideOnError}
|
|
103
|
+
/>
|
|
104
|
+
) : null}
|
|
105
|
+
</span>
|
|
106
|
+
<span className={COMPACT_CARD_TEXT_COL}>
|
|
107
|
+
<span className={COMPACT_CARD_TITLE_ROW}>
|
|
108
|
+
<span className={COMPACT_CARD_TITLE}>{study.title}</span>
|
|
109
|
+
</span>
|
|
110
|
+
<span className={COMPACT_CARD_META_ROW_BOX}>
|
|
111
|
+
<span className={COMPACT_CARD_SUBTITLE}>
|
|
112
|
+
{[study.msp?.name, study.user?.full_name].filter(Boolean).join(' · ') || 'Case study'}
|
|
113
|
+
</span>
|
|
114
|
+
</span>
|
|
115
|
+
<span className={COMPACT_CARD_META_ROW_BOX}>
|
|
116
|
+
<span className={COMPACT_CARD_SUMMARY}>
|
|
117
|
+
{study.summary || COMPACT_CARD_ROW_FILLER}
|
|
118
|
+
</span>
|
|
119
|
+
</span>
|
|
120
|
+
</span>
|
|
121
|
+
</a>
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return (
|
|
126
|
+
<a href={href} target={target} rel={rel} className={cn('block h-full', className)}>
|
|
127
|
+
<Card className="bg-ods-card border border-ods-border hover:border-ods-accent transition-colors p-6 flex flex-col gap-6 overflow-hidden">
|
|
128
|
+
<div className="relative h-[200px] w-full rounded-sm overflow-hidden bg-ods-bg shrink-0">
|
|
129
|
+
{coverImage && (
|
|
130
|
+
<Image
|
|
131
|
+
src={coverImage}
|
|
132
|
+
alt={study.msp?.name || study.title}
|
|
133
|
+
className="w-full h-full object-cover"
|
|
134
|
+
sizes="(min-width: 1545px) 515px, (min-width: 1280px) 33vw, (min-width: 800px) 50vw, 100vw"
|
|
135
|
+
fill
|
|
136
|
+
unoptimized
|
|
137
|
+
onError={hideOnError}
|
|
138
|
+
/>
|
|
139
|
+
)}
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
<div className="h-[72px] flex items-center shrink-0">
|
|
143
|
+
<p className="text-h4 text-ods-text-primary line-clamp-3 break-words">{study.title}</p>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<div className="h-[60px] flex items-center shrink-0">
|
|
147
|
+
<div className="flex items-center gap-3 min-w-0 w-full">
|
|
148
|
+
<div className="relative shrink-0 w-12 h-12">
|
|
149
|
+
{study.user?.avatar_url ? (
|
|
150
|
+
<Image
|
|
151
|
+
src={study.user.avatar_url}
|
|
152
|
+
alt={study.user?.full_name || 'User'}
|
|
153
|
+
className="w-12 h-12 rounded-full object-cover bg-ods-background border border-ods-border"
|
|
154
|
+
width={48}
|
|
155
|
+
height={48}
|
|
156
|
+
unoptimized
|
|
157
|
+
/>
|
|
158
|
+
) : (
|
|
159
|
+
<div className="w-12 h-12 rounded-full bg-ods-background border border-ods-border flex items-center justify-center">
|
|
160
|
+
<span className="text-ods-text-secondary font-medium text-xl">
|
|
161
|
+
{(study.user?.full_name || 'A').charAt(0).toUpperCase()}
|
|
162
|
+
</span>
|
|
163
|
+
</div>
|
|
164
|
+
)}
|
|
165
|
+
{study.msp?.icon_url && (
|
|
166
|
+
<div className="absolute -bottom-1 -right-1 w-6 h-6 rounded-full bg-ods-text-primary ring-1 ring-ods-bg overflow-hidden flex items-center justify-center">
|
|
167
|
+
<Image
|
|
168
|
+
src={study.msp.icon_url}
|
|
169
|
+
alt={study.msp.name || 'MSP'}
|
|
170
|
+
className="w-full h-full object-cover"
|
|
171
|
+
width={24}
|
|
172
|
+
height={24}
|
|
173
|
+
unoptimized
|
|
174
|
+
/>
|
|
175
|
+
</div>
|
|
176
|
+
)}
|
|
177
|
+
</div>
|
|
178
|
+
<div className="min-w-0 flex-1">
|
|
179
|
+
<p className="font-['DM_Sans'] text-[16px] leading-[1.3] text-ods-text-primary truncate">
|
|
180
|
+
{study.user?.full_name || 'Anonymous'}
|
|
181
|
+
{study.msp?.name && <span className="text-ods-text-secondary"> • {study.msp.name}</span>}
|
|
182
|
+
</p>
|
|
183
|
+
<p className="font-['DM_Sans'] text-[14px] leading-none text-ods-text-secondary truncate">
|
|
184
|
+
{study.user?.job_title || ' '}
|
|
185
|
+
</p>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</Card>
|
|
190
|
+
</a>
|
|
191
|
+
)
|
|
192
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
-
import { cn } from '
|
|
4
|
+
import { cn } from '../../../utils/cn'
|
|
5
5
|
import { ChevronRight } from 'lucide-react'
|
|
6
|
-
import { TicketStatusTag, resolveTicketStatus } from '
|
|
6
|
+
import { TicketStatusTag, resolveTicketStatus } from '../../ui/ticket-status-tag'
|
|
7
7
|
|
|
8
8
|
export interface ChatTicketItemData {
|
|
9
9
|
id: string
|
package/src/components/chat/{chat-video-entity-card.tsx → entity-cards/chat-video-entity-card.tsx}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import React from 'react'
|
|
4
|
-
import { EntityVideoSection } from '
|
|
5
|
-
import type { ChatRef } from '
|
|
4
|
+
import { EntityVideoSection } from '../../features/entity-video-section'
|
|
5
|
+
import type { ChatRef } from '../chat-ref.types'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* <ChatVideoEntityCard> — chat-side inline render for video-bearing
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* CustomerInterviewCard (pure presentation). Two densities — `default`
|
|
5
|
+
* and `sm` (compact horizontal for chat-inline).
|
|
6
|
+
*
|
|
7
|
+
* The card writes NO click logic — callers wrap with their own anchor
|
|
8
|
+
* and pass the resolved detail URL via `href`.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react'
|
|
12
|
+
import { Card } from '../../ui/card'
|
|
13
|
+
import { cn } from '../../../utils/cn'
|
|
14
|
+
import { Video } from 'lucide-react'
|
|
15
|
+
import type { CustomerInterview } from '../../../types/customer-interview'
|
|
16
|
+
import {
|
|
17
|
+
COMPACT_CARD_IMAGE_SLOT,
|
|
18
|
+
COMPACT_CARD_META_ROW_BOX,
|
|
19
|
+
COMPACT_CARD_OUTER,
|
|
20
|
+
COMPACT_CARD_ROW_FILLER,
|
|
21
|
+
COMPACT_CARD_SKELETON_IMAGE_SLOT,
|
|
22
|
+
COMPACT_CARD_SKELETON_OUTER,
|
|
23
|
+
COMPACT_CARD_SUBTITLE,
|
|
24
|
+
COMPACT_CARD_SUMMARY,
|
|
25
|
+
COMPACT_CARD_TEXT_COL,
|
|
26
|
+
COMPACT_CARD_TITLE,
|
|
27
|
+
COMPACT_CARD_TITLE_ROW,
|
|
28
|
+
} from '../utils/compact-card-classes'
|
|
29
|
+
|
|
30
|
+
const hideOnError = (e: React.SyntheticEvent<HTMLImageElement>) => {
|
|
31
|
+
;(e.currentTarget as HTMLImageElement).style.display = 'none'
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface CustomerInterviewCardProps {
|
|
35
|
+
interview: CustomerInterview
|
|
36
|
+
href: string
|
|
37
|
+
/** When `_blank`, opens in a new tab. Set by chat dispatch via
|
|
38
|
+
* `computeIsNewTab`. Defaults to same-tab. */
|
|
39
|
+
target?: '_blank'
|
|
40
|
+
rel?: 'noopener noreferrer'
|
|
41
|
+
targetPlatform?: string | null
|
|
42
|
+
/** OG placeholder URL fallback when `interview.featured_image` is missing. */
|
|
43
|
+
placeholderUrl?: string | null
|
|
44
|
+
size?: 'default' | 'sm'
|
|
45
|
+
className?: string
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function CustomerInterviewCardSkeleton({ size = 'default' }: { size?: 'default' | 'sm' }) {
|
|
49
|
+
if (size === 'sm') {
|
|
50
|
+
return (
|
|
51
|
+
<span className={COMPACT_CARD_SKELETON_OUTER}>
|
|
52
|
+
<span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
|
|
53
|
+
<span className={COMPACT_CARD_TEXT_COL}>
|
|
54
|
+
<span className={COMPACT_CARD_TITLE_ROW}>
|
|
55
|
+
<span className="h-3.5 w-3/5 rounded bg-ods-bg" />
|
|
56
|
+
</span>
|
|
57
|
+
<span className={COMPACT_CARD_META_ROW_BOX}>
|
|
58
|
+
<span className="h-3 w-2/5 rounded bg-ods-bg/70" />
|
|
59
|
+
</span>
|
|
60
|
+
<span className={COMPACT_CARD_META_ROW_BOX}>
|
|
61
|
+
<span className="h-3 w-11/12 rounded bg-ods-bg/40" />
|
|
62
|
+
</span>
|
|
63
|
+
</span>
|
|
64
|
+
</span>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
return (
|
|
68
|
+
<div className="bg-ods-card border border-ods-border rounded-lg overflow-hidden p-6 flex flex-col gap-6 animate-pulse">
|
|
69
|
+
<div className="h-[200px] w-full rounded-sm bg-ods-bg" />
|
|
70
|
+
<div className="space-y-2">
|
|
71
|
+
<div className="h-5 w-3/4 bg-ods-bg rounded" />
|
|
72
|
+
<div className="h-5 w-1/2 bg-ods-bg rounded" />
|
|
73
|
+
</div>
|
|
74
|
+
<div className="space-y-2">
|
|
75
|
+
<div className="h-3 w-full bg-ods-bg/60 rounded" />
|
|
76
|
+
<div className="h-3 w-5/6 bg-ods-bg/60 rounded" />
|
|
77
|
+
<div className="h-3 w-4/5 bg-ods-bg/60 rounded" />
|
|
78
|
+
</div>
|
|
79
|
+
<div className="h-[60px] flex items-center gap-3 mt-auto">
|
|
80
|
+
<div className="h-12 w-12 rounded-full bg-ods-bg" />
|
|
81
|
+
<div className="flex-1 space-y-2">
|
|
82
|
+
<div className="h-4 w-2/3 bg-ods-bg rounded" />
|
|
83
|
+
<div className="h-3 w-1/2 bg-ods-bg/60 rounded" />
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function CustomerInterviewCard({ interview, href, target, rel, placeholderUrl, size = 'default', className }: CustomerInterviewCardProps) {
|
|
91
|
+
const thumbnailUrl = interview.featured_image || placeholderUrl || null
|
|
92
|
+
|
|
93
|
+
if (size === 'sm') {
|
|
94
|
+
return (
|
|
95
|
+
<a href={href} target={target} rel={rel} className={cn(COMPACT_CARD_OUTER, className)}>
|
|
96
|
+
<span className={COMPACT_CARD_IMAGE_SLOT}>
|
|
97
|
+
{thumbnailUrl ? (
|
|
98
|
+
<img
|
|
99
|
+
src={thumbnailUrl}
|
|
100
|
+
alt={interview.title}
|
|
101
|
+
className="absolute inset-0 block w-full h-full object-contain"
|
|
102
|
+
onError={hideOnError}
|
|
103
|
+
/>
|
|
104
|
+
) : null}
|
|
105
|
+
{interview.main_video_url ? (
|
|
106
|
+
<span className="absolute inset-0 flex items-center justify-center bg-black/30">
|
|
107
|
+
<Video className="h-4 w-4 text-white" />
|
|
108
|
+
</span>
|
|
109
|
+
) : null}
|
|
110
|
+
</span>
|
|
111
|
+
<span className={COMPACT_CARD_TEXT_COL}>
|
|
112
|
+
<span className={COMPACT_CARD_TITLE_ROW}>
|
|
113
|
+
<span className={COMPACT_CARD_TITLE}>{interview.title}</span>
|
|
114
|
+
</span>
|
|
115
|
+
<span className={COMPACT_CARD_META_ROW_BOX}>
|
|
116
|
+
<span className={COMPACT_CARD_SUBTITLE}>
|
|
117
|
+
{[interview.user?.full_name, interview.msp?.name].filter(Boolean).join(' · ') || 'Customer interview'}
|
|
118
|
+
</span>
|
|
119
|
+
</span>
|
|
120
|
+
<span className={COMPACT_CARD_META_ROW_BOX}>
|
|
121
|
+
<span className={COMPACT_CARD_SUMMARY}>
|
|
122
|
+
{interview.video_summary || COMPACT_CARD_ROW_FILLER}
|
|
123
|
+
</span>
|
|
124
|
+
</span>
|
|
125
|
+
</span>
|
|
126
|
+
</a>
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<a href={href} target={target} rel={rel} className={cn('block h-full', className)}>
|
|
132
|
+
<Card className="bg-ods-card border border-ods-border hover:border-ods-accent transition-colors p-6 flex flex-col gap-6 overflow-hidden">
|
|
133
|
+
<div className="h-[200px] w-full rounded-sm overflow-hidden bg-ods-bg shrink-0 relative">
|
|
134
|
+
{thumbnailUrl ? (
|
|
135
|
+
<>
|
|
136
|
+
<img
|
|
137
|
+
src={thumbnailUrl}
|
|
138
|
+
alt={interview.title}
|
|
139
|
+
className="w-full h-full object-cover"
|
|
140
|
+
onError={hideOnError}
|
|
141
|
+
/>
|
|
142
|
+
{interview.main_video_url && (
|
|
143
|
+
<div className="absolute inset-0 bg-black/40 flex items-center justify-center">
|
|
144
|
+
<div className="w-16 h-16 rounded-full bg-ods-accent/90 flex items-center justify-center">
|
|
145
|
+
<Video className="w-8 h-8 text-black" />
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
)}
|
|
149
|
+
</>
|
|
150
|
+
) : (
|
|
151
|
+
<div className="w-full h-full flex items-center justify-center bg-ods-bg">
|
|
152
|
+
<Video className="w-12 h-12 text-ods-text-secondary" />
|
|
153
|
+
</div>
|
|
154
|
+
)}
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<div className="shrink-0">
|
|
158
|
+
<h3 className="font-['DM_Sans'] font-semibold text-[20px] leading-[28px] text-ods-text-primary line-clamp-2 break-words">
|
|
159
|
+
{interview.title}
|
|
160
|
+
</h3>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
{interview.video_summary && (
|
|
164
|
+
<div className="shrink-0">
|
|
165
|
+
<p className="font-['DM_Sans'] text-[14px] leading-[20px] text-ods-text-secondary line-clamp-3">
|
|
166
|
+
{interview.video_summary}
|
|
167
|
+
</p>
|
|
168
|
+
</div>
|
|
169
|
+
)}
|
|
170
|
+
|
|
171
|
+
<div className="h-[60px] flex items-center shrink-0 mt-auto">
|
|
172
|
+
<div className="flex items-center gap-3 min-w-0 w-full">
|
|
173
|
+
<div className="relative shrink-0 w-12 h-12">
|
|
174
|
+
{interview.user?.avatar_url ? (
|
|
175
|
+
<img
|
|
176
|
+
src={interview.user.avatar_url}
|
|
177
|
+
alt={interview.user?.full_name || 'Customer'}
|
|
178
|
+
className="w-12 h-12 rounded-full object-cover bg-ods-background border border-ods-border"
|
|
179
|
+
/>
|
|
180
|
+
) : (
|
|
181
|
+
<div className="w-12 h-12 rounded-full bg-ods-background border border-ods-border flex items-center justify-center">
|
|
182
|
+
<span className="text-ods-text-secondary font-medium text-xl">
|
|
183
|
+
{(interview.user?.full_name || 'A').charAt(0).toUpperCase()}
|
|
184
|
+
</span>
|
|
185
|
+
</div>
|
|
186
|
+
)}
|
|
187
|
+
{interview.msp?.icon_url && (
|
|
188
|
+
<div className="absolute -bottom-1 -right-1 w-6 h-6 rounded-full bg-ods-text-primary ring-1 ring-ods-bg overflow-hidden flex items-center justify-center">
|
|
189
|
+
<img
|
|
190
|
+
src={interview.msp.icon_url}
|
|
191
|
+
alt={interview.msp.name || 'MSP'}
|
|
192
|
+
className="w-full h-full object-cover"
|
|
193
|
+
/>
|
|
194
|
+
</div>
|
|
195
|
+
)}
|
|
196
|
+
</div>
|
|
197
|
+
<div className="min-w-0 flex-1">
|
|
198
|
+
<p className="font-['DM_Sans'] text-[16px] leading-[1.3] text-ods-text-primary truncate">
|
|
199
|
+
{interview.user?.full_name || 'Anonymous'}
|
|
200
|
+
{interview.msp?.name && <span className="text-ods-text-secondary"> • {interview.msp.name}</span>}
|
|
201
|
+
</p>
|
|
202
|
+
<p className="font-['DM_Sans'] text-[14px] leading-none text-ods-text-secondary truncate">
|
|
203
|
+
{interview.user?.job_title || ' '}
|
|
204
|
+
</p>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
</Card>
|
|
209
|
+
</a>
|
|
210
|
+
)
|
|
211
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Data-room / OpenFrame-docs inline chat card.
|
|
5
|
+
*
|
|
6
|
+
* PURE PRESENTATION. The card receives a pre-composed `<a>` prop bundle
|
|
7
|
+
* (`anchorProps`) plus a pre-resolved badge label — both decisions
|
|
8
|
+
* (URL composition + cross-app routing) are made in the consumer's
|
|
9
|
+
* runtime layer, not inside this card.
|
|
10
|
+
*
|
|
11
|
+
* Renders `[card://data_room_doc:<id>]` and `[card://markdown:<id>]` markers
|
|
12
|
+
* — both use this card because their viewer surface is structurally
|
|
13
|
+
* identical; only the `baseRoute` differs (`/data-room` vs `/knowledge-base`).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import React from 'react'
|
|
17
|
+
import { ExternalLink } from 'lucide-react'
|
|
18
|
+
import { StatusBadge } from '../../ui/status-badge'
|
|
19
|
+
import {
|
|
20
|
+
COMPACT_CARD_OUTER,
|
|
21
|
+
COMPACT_CARD_OUTER_STATIC,
|
|
22
|
+
COMPACT_CARD_SKELETON_OUTER,
|
|
23
|
+
COMPACT_CARD_TEXT_COL,
|
|
24
|
+
COMPACT_CARD_TITLE,
|
|
25
|
+
} from '../utils/compact-card-classes'
|
|
26
|
+
import type { DataRoomDocCardItem } from '../types/entities/data-room-doc'
|
|
27
|
+
|
|
28
|
+
export interface DataRoomDocCardAnchorProps {
|
|
29
|
+
href: string
|
|
30
|
+
target?: '_blank'
|
|
31
|
+
rel?: 'noopener noreferrer'
|
|
32
|
+
onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface DataRoomDocCardProps {
|
|
36
|
+
item: DataRoomDocCardItem
|
|
37
|
+
className?: string
|
|
38
|
+
/** Pre-composed badge label. REQUIRED — the consumer resolves
|
|
39
|
+
* `sourceRepo` against its `SOURCE_LABELS_BY_TABLE` registry and
|
|
40
|
+
* passes the result here.
|
|
41
|
+
*
|
|
42
|
+
* Why required (no default): if the badge silently defaulted to a
|
|
43
|
+
* literal like "Data room", a card sourced from openframe-docs (or
|
|
44
|
+
* any other repo) whose `sourceRepo` resolution failed would
|
|
45
|
+
* display the wrong provenance label — a real security signal,
|
|
46
|
+
* because "Data Room" implies private/internal documents to
|
|
47
|
+
* end-users. Forcing the consumer to supply the label means a
|
|
48
|
+
* bug at the resolution step surfaces as a TypeScript error
|
|
49
|
+
* ("badgeText required") instead of a falsely-labeled production
|
|
50
|
+
* card. The hub-side dispatcher already passes
|
|
51
|
+
* `getSourceLabel(sourceRepo)` with a non-null fallback. */
|
|
52
|
+
badgeText: string
|
|
53
|
+
/** Pre-composed `<a>` prop bundle. When provided, the outer renders
|
|
54
|
+
* as `<a {...anchorProps}>`; otherwise the card is non-interactive. */
|
|
55
|
+
anchorProps?: DataRoomDocCardAnchorProps
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function DataRoomDocCard({ item, className, badgeText, anchorProps }: DataRoomDocCardProps) {
|
|
59
|
+
const body = (
|
|
60
|
+
<>
|
|
61
|
+
<span className={COMPACT_CARD_TEXT_COL}>
|
|
62
|
+
<span className="flex flex-wrap items-center gap-1.5 min-w-0">
|
|
63
|
+
<span className={`${COMPACT_CARD_TITLE} shrink min-w-0`}>{item.title}</span>
|
|
64
|
+
<StatusBadge text={badgeText} variant="button" colorScheme="cyan" className="shrink-0" />
|
|
65
|
+
</span>
|
|
66
|
+
{item.path ? (
|
|
67
|
+
<span className="flex min-w-0 items-center gap-1 text-[11px] leading-4 text-ods-text-secondary">
|
|
68
|
+
<span className="shrink-0 text-ods-text-secondary/70">Path:</span>
|
|
69
|
+
<span className="min-w-0 truncate font-mono">{item.path}</span>
|
|
70
|
+
</span>
|
|
71
|
+
) : null}
|
|
72
|
+
{item.preview ? (
|
|
73
|
+
<span className="flex min-w-0">
|
|
74
|
+
<span className="line-clamp-2 whitespace-pre-wrap break-words text-[13px] leading-5 text-ods-text-secondary">
|
|
75
|
+
{item.preview}
|
|
76
|
+
</span>
|
|
77
|
+
</span>
|
|
78
|
+
) : null}
|
|
79
|
+
</span>
|
|
80
|
+
{anchorProps?.href ? (
|
|
81
|
+
<span className="flex shrink-0 items-center self-start h-5 text-ods-text-secondary">
|
|
82
|
+
<ExternalLink className="w-3.5 h-3.5" />
|
|
83
|
+
</span>
|
|
84
|
+
) : null}
|
|
85
|
+
</>
|
|
86
|
+
)
|
|
87
|
+
if (!anchorProps) {
|
|
88
|
+
return (
|
|
89
|
+
<span className={`${COMPACT_CARD_OUTER_STATIC} ${className ?? ''}`} aria-label="No link available">
|
|
90
|
+
{body}
|
|
91
|
+
</span>
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
return (
|
|
95
|
+
<a {...anchorProps} className={`${COMPACT_CARD_OUTER} ${className ?? ''}`}>
|
|
96
|
+
{body}
|
|
97
|
+
</a>
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function DataRoomDocCardSkeleton({ className }: { className?: string }) {
|
|
102
|
+
return (
|
|
103
|
+
<span className={`${COMPACT_CARD_SKELETON_OUTER} ${className ?? ''}`}>
|
|
104
|
+
<span className={COMPACT_CARD_TEXT_COL}>
|
|
105
|
+
<span className="flex items-center gap-1.5 min-w-0">
|
|
106
|
+
<span className="h-3.5 w-2/3 rounded bg-ods-bg" />
|
|
107
|
+
<span className="h-4 w-16 rounded-full bg-ods-bg/60" />
|
|
108
|
+
</span>
|
|
109
|
+
<span className="h-4 w-1/2 rounded bg-ods-bg/60" />
|
|
110
|
+
<span className="flex flex-col gap-0 min-w-0">
|
|
111
|
+
<span className="h-5 w-5/6 rounded bg-ods-bg/60" />
|
|
112
|
+
<span className="h-5 w-3/4 rounded bg-ods-bg/60" />
|
|
113
|
+
</span>
|
|
114
|
+
</span>
|
|
115
|
+
<span className="flex shrink-0 items-center self-start h-5">
|
|
116
|
+
<span className="h-3.5 w-3.5 rounded bg-ods-bg" />
|
|
117
|
+
</span>
|
|
118
|
+
</span>
|
|
119
|
+
)
|
|
120
|
+
}
|