@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,433 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Program System Types
|
|
3
|
+
*
|
|
4
|
+
* Base interfaces and types for the Unified Program System that handles
|
|
5
|
+
* events, podcasts, and webinars through a single set of generic components.
|
|
6
|
+
*
|
|
7
|
+
* Design Goals:
|
|
8
|
+
* 1. Maximum Reuse: Single set of components works for all program types
|
|
9
|
+
* 2. Type Safety: TypeScript generics ensure correct data shapes
|
|
10
|
+
* 3. Configuration-Driven: Program types defined via configuration objects
|
|
11
|
+
* 4. Admin Consistency: Same patterns work for public pages and admin CRUD
|
|
12
|
+
*
|
|
13
|
+
* Lifted from `lib/types/program-types.ts` in the hub. The pure transform
|
|
14
|
+
* helpers (`transformEventToProgram`, `transformPodcastToProgram`,
|
|
15
|
+
* `transformWebinarToProgram`) also move here — they're pure shape
|
|
16
|
+
* mappers with no DB / state access.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type { ReactNode } from 'react';
|
|
20
|
+
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// HOST TYPES
|
|
23
|
+
// ============================================================================
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Host/Speaker information for programs
|
|
27
|
+
*/
|
|
28
|
+
export interface ProgramHost {
|
|
29
|
+
id?: string;
|
|
30
|
+
name: string;
|
|
31
|
+
email?: string;
|
|
32
|
+
avatar_url?: string;
|
|
33
|
+
bio?: string;
|
|
34
|
+
role?: string; // e.g., "Host", "Speaker", "Guest"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// DATABASE ROW TYPES
|
|
39
|
+
// ============================================================================
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Raw database row from luma_events table
|
|
43
|
+
* Note: Many fields are optional to support partial queries
|
|
44
|
+
* where not all columns are selected. The hosts field uses
|
|
45
|
+
* unknown to accommodate JSON parsing from the database.
|
|
46
|
+
*/
|
|
47
|
+
export interface LumaEventRow {
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
description?: string | null;
|
|
51
|
+
cover_url?: string | null;
|
|
52
|
+
start_at: string;
|
|
53
|
+
end_at: string;
|
|
54
|
+
timezone?: string | null;
|
|
55
|
+
location_name?: string | null;
|
|
56
|
+
location_full_address?: string | null;
|
|
57
|
+
geo_latitude?: number | null;
|
|
58
|
+
geo_longitude?: number | null;
|
|
59
|
+
meeting_url?: string | null;
|
|
60
|
+
event_url?: string | null;
|
|
61
|
+
guest_count?: number | null;
|
|
62
|
+
visibility?: string | null;
|
|
63
|
+
hosts?: ProgramHost[] | null;
|
|
64
|
+
platform_id: string;
|
|
65
|
+
luma_api_id: string;
|
|
66
|
+
is_deleted?: boolean;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Raw database row from podcast_episodes table
|
|
71
|
+
* Note: Many fields are optional to support partial queries
|
|
72
|
+
* where not all columns are selected.
|
|
73
|
+
*/
|
|
74
|
+
export interface PodcastEpisodeRow {
|
|
75
|
+
id: string;
|
|
76
|
+
title: string;
|
|
77
|
+
description?: string | null;
|
|
78
|
+
cover_url?: string | null;
|
|
79
|
+
published_at?: string | null;
|
|
80
|
+
created_at: string;
|
|
81
|
+
external_url?: string | null;
|
|
82
|
+
hosts?: ProgramHost[] | null;
|
|
83
|
+
platform_id: string;
|
|
84
|
+
podbean_episode_id: string;
|
|
85
|
+
podbean_podcast_id: string;
|
|
86
|
+
audio_url?: string | null;
|
|
87
|
+
/** Podbean-supplied source video URL (was `video_url` pre-rename). */
|
|
88
|
+
main_video_url?: string | null;
|
|
89
|
+
media_type?: 'audio' | 'video' | null;
|
|
90
|
+
duration_seconds?: number | null;
|
|
91
|
+
status?: string | null;
|
|
92
|
+
is_deleted?: boolean;
|
|
93
|
+
// Override fields (not synced by job)
|
|
94
|
+
cover_image_override?: string | null;
|
|
95
|
+
custom_video_url?: string | null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Raw database row from webinars table
|
|
100
|
+
* Note: Many fields are optional to support partial queries
|
|
101
|
+
* where not all columns are selected.
|
|
102
|
+
*/
|
|
103
|
+
export interface WebinarRow {
|
|
104
|
+
id: string;
|
|
105
|
+
title: string;
|
|
106
|
+
description?: string | null;
|
|
107
|
+
cover_url?: string | null;
|
|
108
|
+
start_at: string;
|
|
109
|
+
end_at?: string | null;
|
|
110
|
+
timezone?: string | null;
|
|
111
|
+
registration_url?: string | null;
|
|
112
|
+
hosts?: ProgramHost[] | null;
|
|
113
|
+
platform_id: string;
|
|
114
|
+
livestorm_event_id: string;
|
|
115
|
+
is_deleted?: boolean;
|
|
116
|
+
/** Livestorm-supplied recording URL (was `recording_url` pre-rename). */
|
|
117
|
+
main_video_url?: string | null;
|
|
118
|
+
// Override fields (not synced by job)
|
|
119
|
+
custom_video_url?: string | null;
|
|
120
|
+
display_date_override?: string | null;
|
|
121
|
+
cover_image_override?: string | null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// ============================================================================
|
|
125
|
+
// BASE PROGRAM ITEM
|
|
126
|
+
// ============================================================================
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Base interface that all program items must implement
|
|
130
|
+
* This enables the generic components to work across events, podcasts, and webinars
|
|
131
|
+
*/
|
|
132
|
+
export interface BaseProgramItem {
|
|
133
|
+
id: string;
|
|
134
|
+
title: string; // Maps to: name (events), title (podcasts/webinars)
|
|
135
|
+
description: string | null;
|
|
136
|
+
cover_url: string | null; // Primary image
|
|
137
|
+
date: string; // ISO date string - maps to: start_at, published_at
|
|
138
|
+
external_url?: string | null; // Registration/play link
|
|
139
|
+
hosts?: ProgramHost[] | null; // Speakers/hosts
|
|
140
|
+
platform_id: string;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// ============================================================================
|
|
144
|
+
// PROGRAM-SPECIFIC INTERFACES
|
|
145
|
+
// ============================================================================
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Event-specific fields (from luma_events table)
|
|
149
|
+
*/
|
|
150
|
+
export interface EventItem extends BaseProgramItem {
|
|
151
|
+
luma_api_id: string;
|
|
152
|
+
end_at: string;
|
|
153
|
+
timezone?: string | null;
|
|
154
|
+
location_name?: string | null;
|
|
155
|
+
location_full_address?: string | null;
|
|
156
|
+
geo_latitude?: number | null;
|
|
157
|
+
geo_longitude?: number | null;
|
|
158
|
+
meeting_url?: string | null;
|
|
159
|
+
event_url?: string | null;
|
|
160
|
+
guest_count?: number | null;
|
|
161
|
+
visibility?: string | null;
|
|
162
|
+
is_deleted: boolean;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Podcast episode fields (from podcast_episodes table)
|
|
167
|
+
* Updated for Podbean video podcast support
|
|
168
|
+
*/
|
|
169
|
+
export interface PodcastItem extends BaseProgramItem {
|
|
170
|
+
author_id?: string | null;
|
|
171
|
+
podbean_episode_id: string;
|
|
172
|
+
podbean_podcast_id: string;
|
|
173
|
+
audio_url?: string | null;
|
|
174
|
+
/** Podbean-supplied source video URL (was `video_url` pre-rename). */
|
|
175
|
+
main_video_url?: string | null;
|
|
176
|
+
media_type: 'audio' | 'video';
|
|
177
|
+
duration_seconds?: number | null;
|
|
178
|
+
status: string;
|
|
179
|
+
published_at: string | null;
|
|
180
|
+
is_deleted: boolean;
|
|
181
|
+
podcast_url?: string | null; // Main podcast page URL from Podbean
|
|
182
|
+
// Override fields (not synced by job)
|
|
183
|
+
cover_image_override?: string | null;
|
|
184
|
+
custom_video_url?: string | null;
|
|
185
|
+
// Video processing fields
|
|
186
|
+
transcript?: string | null;
|
|
187
|
+
transcript_words_data?: unknown;
|
|
188
|
+
srt_content?: string | null;
|
|
189
|
+
video_summary?: string | null;
|
|
190
|
+
video_bites?: unknown[];
|
|
191
|
+
highlight_video_url?: string | null;
|
|
192
|
+
highlight_video_source?: string | null;
|
|
193
|
+
highlight_video_thumbnail?: string | null;
|
|
194
|
+
highlight_video_duration_ms?: number | null;
|
|
195
|
+
main_video_thumbnail?: string | null;
|
|
196
|
+
config?: Record<string, unknown>;
|
|
197
|
+
custom_instructions?: string | null;
|
|
198
|
+
seo_title?: string | null;
|
|
199
|
+
seo_description?: string | null;
|
|
200
|
+
seo_keywords?: string | null;
|
|
201
|
+
ai_confidence_video_summary?: number | null;
|
|
202
|
+
ai_confidence_transcript?: number | null;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Webinar fields (from webinars table)
|
|
207
|
+
*/
|
|
208
|
+
export interface WebinarItem extends BaseProgramItem {
|
|
209
|
+
author_id?: string | null;
|
|
210
|
+
livestorm_event_id: string;
|
|
211
|
+
start_at: string;
|
|
212
|
+
end_at?: string | null;
|
|
213
|
+
timezone?: string | null;
|
|
214
|
+
registration_url?: string | null;
|
|
215
|
+
is_deleted: boolean;
|
|
216
|
+
/** Livestorm-supplied recording URL (was `recording_url` pre-rename). */
|
|
217
|
+
main_video_url?: string | null;
|
|
218
|
+
// Override fields (not synced by job)
|
|
219
|
+
custom_video_url?: string | null;
|
|
220
|
+
display_date_override?: string | null;
|
|
221
|
+
cover_image_override?: string | null;
|
|
222
|
+
// Video processing fields
|
|
223
|
+
transcript?: string | null;
|
|
224
|
+
transcript_words_data?: unknown;
|
|
225
|
+
srt_content?: string | null;
|
|
226
|
+
video_summary?: string | null;
|
|
227
|
+
video_bites?: unknown[];
|
|
228
|
+
highlight_video_url?: string | null;
|
|
229
|
+
highlight_video_source?: string | null;
|
|
230
|
+
highlight_video_thumbnail?: string | null;
|
|
231
|
+
highlight_video_duration_ms?: number | null;
|
|
232
|
+
main_video_thumbnail?: string | null;
|
|
233
|
+
config?: Record<string, unknown>;
|
|
234
|
+
custom_instructions?: string | null;
|
|
235
|
+
seo_title?: string | null;
|
|
236
|
+
seo_description?: string | null;
|
|
237
|
+
seo_keywords?: string | null;
|
|
238
|
+
ai_confidence_video_summary?: number | null;
|
|
239
|
+
ai_confidence_transcript?: number | null;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// ============================================================================
|
|
243
|
+
// PROGRAM CONFIGURATION
|
|
244
|
+
// ============================================================================
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Program type identifier
|
|
248
|
+
*/
|
|
249
|
+
export type ProgramType = 'event' | 'podcast' | 'webinar';
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Labels configuration for a program type
|
|
253
|
+
*/
|
|
254
|
+
export interface ProgramLabels {
|
|
255
|
+
singular: string; // "Event", "Episode", "Webinar"
|
|
256
|
+
plural: string; // "Events", "Episodes", "Webinars"
|
|
257
|
+
upcoming: string; // "Next Event", "Latest Episode", "Upcoming Webinar"
|
|
258
|
+
upcomingSection: string; // "Upcoming Events", "Upcoming Episodes", "Upcoming Webinars"
|
|
259
|
+
archive: string; // "Past Events", "All Episodes", "Past Webinars"
|
|
260
|
+
empty: string; // "No events yet", "No episodes yet", "No webinars yet"
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Configuration object that defines how a program type behaves
|
|
265
|
+
* This is the core abstraction that enables generic components
|
|
266
|
+
*/
|
|
267
|
+
export interface ProgramConfig<T extends BaseProgramItem = BaseProgramItem> {
|
|
268
|
+
type: ProgramType;
|
|
269
|
+
labels: ProgramLabels;
|
|
270
|
+
dateField: keyof T; // Which field to sort/filter by
|
|
271
|
+
table: string; // Database table name
|
|
272
|
+
apiEndpoint: string; // Base API path
|
|
273
|
+
icon: ReactNode; // Section icon (CalendarDays, Mic, Video)
|
|
274
|
+
platformIcon?: ReactNode; // External platform icon (optional)
|
|
275
|
+
externalLinkLabel: string; // "View on Luma", "Listen on Podbean", "Watch on Livestorm"
|
|
276
|
+
detailRoute: string; // "/events", "/podcasts", "/webinars"
|
|
277
|
+
|
|
278
|
+
// Optional customization
|
|
279
|
+
sortOrder?: 'asc' | 'desc'; // Default sort order for archive
|
|
280
|
+
showInNav?: boolean; // Whether to show in navigation
|
|
281
|
+
platformUrl?: string; // Fallback URL to external platform (e.g., Podbean main page)
|
|
282
|
+
heroCoverAspect?: 'landscape' | 'square'; // Hero cover image aspect ratio (default: 'landscape')
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// ============================================================================
|
|
286
|
+
// GENERIC DATA TYPES
|
|
287
|
+
// ============================================================================
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Generic response for program list queries
|
|
291
|
+
*/
|
|
292
|
+
export interface ProgramListResponse<T extends BaseProgramItem> {
|
|
293
|
+
items: T[];
|
|
294
|
+
count: number;
|
|
295
|
+
hasMore?: boolean;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Generic response for single program queries
|
|
300
|
+
*/
|
|
301
|
+
export interface ProgramItemResponse<T extends BaseProgramItem> {
|
|
302
|
+
item: T;
|
|
303
|
+
media?: ProgramMedia[];
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Program media (photos, videos, etc.)
|
|
308
|
+
*/
|
|
309
|
+
export interface ProgramMedia {
|
|
310
|
+
id: string;
|
|
311
|
+
program_id: string;
|
|
312
|
+
media_type: 'image' | 'video' | 'audio';
|
|
313
|
+
media_url: string;
|
|
314
|
+
title?: string | null;
|
|
315
|
+
description?: string | null;
|
|
316
|
+
display_order: number;
|
|
317
|
+
created_at: string;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// ============================================================================
|
|
321
|
+
// FILTER AND QUERY TYPES
|
|
322
|
+
// ============================================================================
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Filter options for program queries
|
|
326
|
+
*/
|
|
327
|
+
export interface ProgramFilter {
|
|
328
|
+
filter: 'upcoming' | 'past' | 'all';
|
|
329
|
+
limit?: number;
|
|
330
|
+
offset?: number;
|
|
331
|
+
search?: string;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Admin query options
|
|
336
|
+
*/
|
|
337
|
+
export interface AdminProgramFilter extends ProgramFilter {
|
|
338
|
+
includeDeleted?: boolean;
|
|
339
|
+
sortBy?: string;
|
|
340
|
+
sortOrder?: 'asc' | 'desc';
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// ============================================================================
|
|
344
|
+
// TRANSFORM UTILITIES
|
|
345
|
+
// ============================================================================
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Transform a database event row to EventItem
|
|
349
|
+
*/
|
|
350
|
+
export function transformEventToProgram(event: LumaEventRow): EventItem {
|
|
351
|
+
return {
|
|
352
|
+
id: event.id,
|
|
353
|
+
title: event.name,
|
|
354
|
+
description: event.description ?? null,
|
|
355
|
+
cover_url: event.cover_url ?? null,
|
|
356
|
+
date: event.start_at,
|
|
357
|
+
external_url: event.event_url ?? null,
|
|
358
|
+
hosts: event.hosts ?? null,
|
|
359
|
+
platform_id: event.platform_id,
|
|
360
|
+
luma_api_id: event.luma_api_id,
|
|
361
|
+
end_at: event.end_at,
|
|
362
|
+
timezone: event.timezone ?? null,
|
|
363
|
+
location_name: event.location_name ?? null,
|
|
364
|
+
location_full_address: event.location_full_address ?? null,
|
|
365
|
+
geo_latitude: event.geo_latitude ?? null,
|
|
366
|
+
geo_longitude: event.geo_longitude ?? null,
|
|
367
|
+
meeting_url: event.meeting_url ?? null,
|
|
368
|
+
event_url: event.event_url ?? null,
|
|
369
|
+
guest_count: event.guest_count ?? null,
|
|
370
|
+
visibility: event.visibility ?? null,
|
|
371
|
+
is_deleted: event.is_deleted ?? false,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Transform a database podcast row to PodcastItem
|
|
377
|
+
*/
|
|
378
|
+
export function transformPodcastToProgram(episode: PodcastEpisodeRow): PodcastItem {
|
|
379
|
+
return {
|
|
380
|
+
id: episode.id,
|
|
381
|
+
title: episode.title,
|
|
382
|
+
description: episode.description ?? null,
|
|
383
|
+
// Use cover_image_override if set, otherwise use cover_url
|
|
384
|
+
cover_url: episode.cover_image_override ?? episode.cover_url ?? null,
|
|
385
|
+
date: episode.published_at ?? episode.created_at,
|
|
386
|
+
external_url: episode.external_url ?? null,
|
|
387
|
+
hosts: episode.hosts ?? null,
|
|
388
|
+
platform_id: episode.platform_id,
|
|
389
|
+
podbean_episode_id: episode.podbean_episode_id,
|
|
390
|
+
podbean_podcast_id: episode.podbean_podcast_id,
|
|
391
|
+
audio_url: episode.audio_url ?? null,
|
|
392
|
+
main_video_url: episode.main_video_url ?? null,
|
|
393
|
+
media_type: episode.media_type ?? 'audio',
|
|
394
|
+
duration_seconds: episode.duration_seconds ?? null,
|
|
395
|
+
status: episode.status ?? 'published',
|
|
396
|
+
published_at: episode.published_at ?? null,
|
|
397
|
+
is_deleted: episode.is_deleted ?? false,
|
|
398
|
+
// Override fields
|
|
399
|
+
cover_image_override: episode.cover_image_override ?? null,
|
|
400
|
+
custom_video_url: episode.custom_video_url ?? null,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Transform a database webinar row to WebinarItem
|
|
406
|
+
* Uses display_date_override for date field when available (for backdating)
|
|
407
|
+
* Uses cover_image_override for cover_url when available
|
|
408
|
+
*/
|
|
409
|
+
export function transformWebinarToProgram(webinar: WebinarRow): WebinarItem {
|
|
410
|
+
return {
|
|
411
|
+
id: webinar.id,
|
|
412
|
+
title: webinar.title,
|
|
413
|
+
description: webinar.description ?? null,
|
|
414
|
+
// Use cover_image_override if set, otherwise use cover_url
|
|
415
|
+
cover_url: webinar.cover_image_override ?? webinar.cover_url ?? null,
|
|
416
|
+
// Use display_date_override if set, otherwise use start_at
|
|
417
|
+
date: webinar.display_date_override ?? webinar.start_at,
|
|
418
|
+
external_url: webinar.registration_url ?? null,
|
|
419
|
+
hosts: webinar.hosts ?? null,
|
|
420
|
+
platform_id: webinar.platform_id,
|
|
421
|
+
livestorm_event_id: webinar.livestorm_event_id,
|
|
422
|
+
start_at: webinar.start_at,
|
|
423
|
+
end_at: webinar.end_at ?? null,
|
|
424
|
+
timezone: webinar.timezone ?? null,
|
|
425
|
+
registration_url: webinar.registration_url ?? null,
|
|
426
|
+
is_deleted: webinar.is_deleted ?? false,
|
|
427
|
+
main_video_url: webinar.main_video_url ?? null,
|
|
428
|
+
// Override fields
|
|
429
|
+
custom_video_url: webinar.custom_video_url ?? null,
|
|
430
|
+
display_date_override: webinar.display_date_override ?? null,
|
|
431
|
+
cover_image_override: webinar.cover_image_override ?? null,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Roadmap Item entity — wire shape for the chat roadmap card and the
|
|
3
|
+
* public `/api/roadmap` reads.
|
|
4
|
+
*
|
|
5
|
+
* Lifted from `lib/data/clickup-query-utils.ts` in the hub. Mirrors the
|
|
6
|
+
* `roadmap_items` projection produced by `transformTask()` in
|
|
7
|
+
* `clickup-sync-utils.ts`.
|
|
8
|
+
*
|
|
9
|
+
* Naming note: a `RoadmapItem` stub already exists in
|
|
10
|
+
* `src/components/shared/product-release/release-detail-page.tsx` as
|
|
11
|
+
* `{ id: string; [key: string]: unknown }` — that placeholder predates this
|
|
12
|
+
* canonical shape and lives in a different module, so the two don't
|
|
13
|
+
* collide. Callers that want the strongly-typed wire shape import from
|
|
14
|
+
* `@/components/chat/types/entities/roadmap-item`; the product-release
|
|
15
|
+
* placeholder will be reconciled in a follow-up.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export interface RoadmapItem {
|
|
19
|
+
id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
description: string;
|
|
22
|
+
status: string;
|
|
23
|
+
statusColor: string;
|
|
24
|
+
icon: string | null;
|
|
25
|
+
figmaUrl: string | null;
|
|
26
|
+
screenshots: string[];
|
|
27
|
+
targetVersion: string | null;
|
|
28
|
+
upvotes: number;
|
|
29
|
+
downvotes: number;
|
|
30
|
+
quarter: string;
|
|
31
|
+
clickupUrl: string;
|
|
32
|
+
/** ClickUp canonical task-type taxonomy ID (1008=Bug, 1009=Request,
|
|
33
|
+
* 1010=Feature, …). Drives the type-specific icon rendered in the
|
|
34
|
+
* chat's compact card for the internal-tasks variant — see
|
|
35
|
+
* `getTaskTypeIcon` in `lib/utils/clickup-task-type-utils.ts`. */
|
|
36
|
+
customItemId: number | null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface RoadmapStaleness {
|
|
40
|
+
lastSyncedAt: string | null;
|
|
41
|
+
staleSinceMs: number;
|
|
42
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack Message entity — wire shape for the chat slack-message card.
|
|
3
|
+
*
|
|
4
|
+
* Lifted from `components/shared/slack/slack-message-card.tsx`. The card
|
|
5
|
+
* consumes this shape; the row shape coming out of the `slack_messages`
|
|
6
|
+
* RAG table is reduced to this minimal projection at render time.
|
|
7
|
+
*
|
|
8
|
+
* Naming note: this is intentionally `SlackMessageItem` (not the broader
|
|
9
|
+
* `SlackMessage` in `src/types/slack.ts`, which describes the Slack
|
|
10
|
+
* Community feature's message structure including reactions / threading /
|
|
11
|
+
* user objects). The chat card needs only the post-RAG projection: id,
|
|
12
|
+
* title, preview, channel, date, permalink — no reactions / threads.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export interface SlackMessageItem {
|
|
16
|
+
/** Slack message ID (ts or url-derived) */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Display title — typically "author · channel" or message subject */
|
|
19
|
+
title: string;
|
|
20
|
+
/** Message body preview (PII-sanitized server-side) */
|
|
21
|
+
preview?: string;
|
|
22
|
+
/** Channel name parsed from URL or stored on the row, when available */
|
|
23
|
+
channel?: string;
|
|
24
|
+
/** ISO timestamp or millisecond epoch */
|
|
25
|
+
dateUpdated?: string | number | null;
|
|
26
|
+
/** Slack permalink (https://*.slack.com/archives/<channel>/p<ts>) */
|
|
27
|
+
url?: string | null;
|
|
28
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status color-scheme resolver used by chat-adjacent badges (StatusBadge
|
|
3
|
+
* components rendering job, ClickUp task, and log-level statuses).
|
|
4
|
+
*
|
|
5
|
+
* Lib-side subset of the hub's `lib/utils/agent-status-message.ts`. The
|
|
6
|
+
* hub file also carries CSS-class resolvers + an `AgentStatusMessage`
|
|
7
|
+
* builder for the SSE-status surface; those live hub-side because they
|
|
8
|
+
* reference hub-only ODS class names. This function returns the abstract
|
|
9
|
+
* color scheme name only — the consuming `StatusBadge` (in this lib)
|
|
10
|
+
* maps it to concrete colors.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export type ColorScheme = 'success' | 'error' | 'warning' | 'cyan' | 'default'
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Map a status to a color scheme name for StatusBadge components.
|
|
17
|
+
* Supports job/processing statuses, ClickUp task statuses, and log levels.
|
|
18
|
+
*/
|
|
19
|
+
export function getStatusColorScheme(status: string): ColorScheme {
|
|
20
|
+
const s = status?.toLowerCase() || ''
|
|
21
|
+
|
|
22
|
+
// Exact matches first (most common)
|
|
23
|
+
switch (status) {
|
|
24
|
+
case 'completed':
|
|
25
|
+
case 'success':
|
|
26
|
+
case 'active': // review cycles, feature flags, etc.
|
|
27
|
+
return 'success'
|
|
28
|
+
case 'failed':
|
|
29
|
+
case 'failure':
|
|
30
|
+
case 'cancelled':
|
|
31
|
+
case 'error':
|
|
32
|
+
return 'error'
|
|
33
|
+
case 'running':
|
|
34
|
+
case 'processing':
|
|
35
|
+
case 'closed': // review cycles past their active window
|
|
36
|
+
return 'cyan'
|
|
37
|
+
case 'pending':
|
|
38
|
+
case 'warning':
|
|
39
|
+
return 'warning'
|
|
40
|
+
case 'draft': // review cycles not yet opened to reviewers
|
|
41
|
+
case 'info':
|
|
42
|
+
return 'default'
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Partial matches for ClickUp-style statuses (Complete, Done, Working, etc.)
|
|
46
|
+
if (s.includes('complete') || s.includes('done')) return 'success'
|
|
47
|
+
if (s.includes('review')) return 'cyan'
|
|
48
|
+
if (s.includes('working') || s.includes('progress')) return 'warning'
|
|
49
|
+
if (s.includes('blocked') || s.includes('failed')) return 'error'
|
|
50
|
+
|
|
51
|
+
return 'default'
|
|
52
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared cross-process contract for the post-approval auto-continuation
|
|
3
|
+
* directive. The client emits a hidden synthetic user message starting
|
|
4
|
+
* with `AUTO_CONTINUATION_DIRECTIVE_PREFIX`; the server's `decideRoute`
|
|
5
|
+
* matches that exact prefix on the RAW user query (pre-rewriter) and
|
|
6
|
+
* hard-disables tools for the directive turn, forcing the LLM to
|
|
7
|
+
* respond with prose follow-up questions instead of duplicating the
|
|
8
|
+
* just-approved tool call.
|
|
9
|
+
*
|
|
10
|
+
* Single source of truth — both server-side `decideRoute` AND
|
|
11
|
+
* client-side `autoContinueRef` import from here. Drifting the literal
|
|
12
|
+
* on either side would silently break the duplicate-ticket guard
|
|
13
|
+
* (server would route normally with tools wired; LLM would propose the
|
|
14
|
+
* same tool again).
|
|
15
|
+
*
|
|
16
|
+
* `toolName` is typed as `string` (not a const-union) so the lib stays
|
|
17
|
+
* generic across hub deployments — host code that has a sharper
|
|
18
|
+
* `KnownWriteToolName` type can pass that through; this builder only
|
|
19
|
+
* cares about a handful of string-equal branches.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
export const AUTO_CONTINUATION_DIRECTIVE_PREFIX = '[internal-auto-continuation]'
|
|
23
|
+
|
|
24
|
+
export interface BuildAutoContinuationOptions {
|
|
25
|
+
ticketId?: string
|
|
26
|
+
/** Reading of `args.status` on the just-approved tool call. Used to
|
|
27
|
+
* branch the directive between "post-create diagnostic Qs",
|
|
28
|
+
* "post-close resolution ask", and "post-update acknowledgement". */
|
|
29
|
+
status?: string
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Build the directive text the client sends as a HIDDEN user message
|
|
34
|
+
* after every successful Approve. The LLM treats it as the user
|
|
35
|
+
* speaking; the chat shell filters it out at render time.
|
|
36
|
+
*
|
|
37
|
+
* Branch logic mirrors `TICKET_TOOL_PROTOCOL` §1a/§1b — keep them in
|
|
38
|
+
* sync: the directive tells the model WHICH section to follow.
|
|
39
|
+
*/
|
|
40
|
+
export function buildAutoContinuationDirective(
|
|
41
|
+
toolName: string,
|
|
42
|
+
opts: BuildAutoContinuationOptions = {},
|
|
43
|
+
): string {
|
|
44
|
+
const ticketRef = opts.ticketId ? ` (ticket #${opts.ticketId})` : ''
|
|
45
|
+
const ticketHash = opts.ticketId ? ` #${opts.ticketId}` : ''
|
|
46
|
+
const isClose = toolName === 'update_ticket' && opts.status?.toUpperCase() === 'CLOSED'
|
|
47
|
+
if (toolName === 'create_ticket') {
|
|
48
|
+
return (
|
|
49
|
+
`${AUTO_CONTINUATION_DIRECTIVE_PREFIX} The user just approved create_ticket${ticketRef}. ` +
|
|
50
|
+
`Per ticket-protocol §1a, ask 2-4 SHORT, issue-specific diagnostic follow-up questions ` +
|
|
51
|
+
`tailored to the symptom they reported in their original message. When they answer, ` +
|
|
52
|
+
`propose an update_ticket with content_addendum carrying a clean Q&A digest. ` +
|
|
53
|
+
`Do NOT call any tool in this turn — just write the questions as prose.`
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
if (isClose) {
|
|
57
|
+
return (
|
|
58
|
+
`${AUTO_CONTINUATION_DIRECTIVE_PREFIX} The user just approved closing ticket${ticketHash}. ` +
|
|
59
|
+
`Per ticket-protocol §1b, ask ONE short question: "How was this resolved? I'll add it ` +
|
|
60
|
+
`to the ticket as a closing note." Phrase kindly even if the user was curt. When they ` +
|
|
61
|
+
`answer, propose an update_ticket with content_addendum="[Resolution] <their words>". ` +
|
|
62
|
+
`Do NOT call any tool in this turn — just write the prose ask.`
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
return (
|
|
66
|
+
`${AUTO_CONTINUATION_DIRECTIVE_PREFIX} The user just approved update_ticket${ticketHash}. ` +
|
|
67
|
+
`Acknowledge the change in ONE short sentence; if anything else looks like it needs ` +
|
|
68
|
+
`attention, ask. Do NOT call any tool in this turn.`
|
|
69
|
+
)
|
|
70
|
+
}
|