@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
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
'use client'
|
|
20
20
|
|
|
21
21
|
import { useEffect, useState, useMemo, useCallback } from 'react'
|
|
22
|
-
import { useRouter, useSearchParams } from 'next
|
|
22
|
+
import { useRouter, useSearchParams } from '../../embed-shims/next-navigation'
|
|
23
23
|
import { DocumentNode } from 'graphql'
|
|
24
24
|
|
|
25
25
|
import { extractVariablesFromQuery } from './graphql-parser'
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Access Code Integration Hook
|
|
5
|
+
*
|
|
6
|
+
* React-side wrapper around the pure `access-code-client` utilities.
|
|
7
|
+
* Lives in `hooks/` (client bundle) so the `createContext()` call in
|
|
8
|
+
* `endpoints-runtime-context` doesn't get pulled into the server-safe
|
|
9
|
+
* `utils/index` bundle.
|
|
10
|
+
*
|
|
11
|
+
* The pure standalone functions (`validateAccessCode`,
|
|
12
|
+
* `consumeAccessCode`, `validateAndConsumeAccessCode`) remain importable
|
|
13
|
+
* from `@flamingo-stack/openframe-frontend-core/utils` — they take the
|
|
14
|
+
* endpoints object as an argument. This hook binds those endpoints from
|
|
15
|
+
* `EndpointsRuntimeContext` so React callers don't have to plumb URLs.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React from 'react'
|
|
19
|
+
|
|
20
|
+
import { useRequiredEndpointsRuntime } from '../contexts/endpoints-runtime-context'
|
|
21
|
+
import {
|
|
22
|
+
validateAccessCode,
|
|
23
|
+
consumeAccessCode,
|
|
24
|
+
validateAndConsumeAccessCode,
|
|
25
|
+
} from '../utils/access-code-client'
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Resolves access-code endpoints from `EndpointsRuntimeContext` (throws
|
|
29
|
+
* if no provider is mounted) and exposes loading-state-aware wrappers
|
|
30
|
+
* around the standalone helpers in `utils/access-code-client`.
|
|
31
|
+
*
|
|
32
|
+
* @returns the following fields. The `validate` / `consume` /
|
|
33
|
+
* `validateAndConsume` functions and the returned object identity are
|
|
34
|
+
* NOT memoized — they're re-created each render. Wrap with
|
|
35
|
+
* `useCallback` / `useMemo` at the call site if downstream effect
|
|
36
|
+
* dep arrays depend on stable identities.
|
|
37
|
+
* - `validate(email, code)`: validates only.
|
|
38
|
+
* - `consume(email, code)`: consumes only.
|
|
39
|
+
* - `validateAndConsume(email, code)`: one-step validate-then-consume.
|
|
40
|
+
* - `isValidating: boolean`: a validate call is in flight.
|
|
41
|
+
* - `isConsuming: boolean`: a consume call is in flight.
|
|
42
|
+
* - `isProcessing: boolean`: convenience — `isValidating || isConsuming`.
|
|
43
|
+
* Use this for a single "in-flight" indicator on UI affordances that
|
|
44
|
+
* should disable during both phases.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* const { validate, consume, isProcessing } = useAccessCodeIntegration();
|
|
48
|
+
*
|
|
49
|
+
* const handleRegistration = async (formData) => {
|
|
50
|
+
* const validation = await validate(formData.email, formData.accessCode);
|
|
51
|
+
* if (!validation.valid) {
|
|
52
|
+
* setError(validation.message);
|
|
53
|
+
* return;
|
|
54
|
+
* }
|
|
55
|
+
*
|
|
56
|
+
* // Process registration...
|
|
57
|
+
* const registrationResult = await registerUser(formData);
|
|
58
|
+
*
|
|
59
|
+
* if (registrationResult.success) {
|
|
60
|
+
* await consume(formData.email, formData.accessCode);
|
|
61
|
+
* }
|
|
62
|
+
* };
|
|
63
|
+
*/
|
|
64
|
+
export function useAccessCodeIntegration() {
|
|
65
|
+
const runtime = useRequiredEndpointsRuntime()
|
|
66
|
+
const endpoints = runtime.accessCode
|
|
67
|
+
const [isValidating, setIsValidating] = React.useState(false)
|
|
68
|
+
const [isConsuming, setIsConsuming] = React.useState(false)
|
|
69
|
+
|
|
70
|
+
const validate = async (email: string, code: string) => {
|
|
71
|
+
setIsValidating(true)
|
|
72
|
+
try {
|
|
73
|
+
return await validateAccessCode(email, code, endpoints)
|
|
74
|
+
} finally {
|
|
75
|
+
setIsValidating(false)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const consume = async (email: string, code: string) => {
|
|
80
|
+
setIsConsuming(true)
|
|
81
|
+
try {
|
|
82
|
+
return await consumeAccessCode(email, code, endpoints)
|
|
83
|
+
} finally {
|
|
84
|
+
setIsConsuming(false)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const validateAndConsume = async (email: string, code: string) => {
|
|
89
|
+
setIsValidating(true)
|
|
90
|
+
setIsConsuming(true)
|
|
91
|
+
try {
|
|
92
|
+
return await validateAndConsumeAccessCode(email, code, endpoints)
|
|
93
|
+
} finally {
|
|
94
|
+
setIsValidating(false)
|
|
95
|
+
setIsConsuming(false)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return {
|
|
100
|
+
validate,
|
|
101
|
+
consume,
|
|
102
|
+
validateAndConsume,
|
|
103
|
+
isValidating,
|
|
104
|
+
isConsuming,
|
|
105
|
+
isProcessing: isValidating || isConsuming,
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useState, useCallback, useEffect } from 'react';
|
|
2
2
|
import { useToast } from "./use-toast";
|
|
3
|
-
import { useRouter } from 'next
|
|
3
|
+
import { useRouter } from '../embed-shims/next-navigation';
|
|
4
|
+
import { useRequiredEndpointsRuntime } from '../contexts/endpoints-runtime-context';
|
|
4
5
|
|
|
5
6
|
interface ContactSubmissionOptions {
|
|
6
7
|
userId?: string;
|
|
@@ -44,6 +45,9 @@ export function useContactSubmission(options: ContactSubmissionOptions = {}) {
|
|
|
44
45
|
const { userId, successRedirectUrl, successToastMessage, onSuccess } = options;
|
|
45
46
|
const { toast } = useToast();
|
|
46
47
|
const router = useRouter();
|
|
48
|
+
// Endpoint URL injected via context — hub provides hub default, embedded
|
|
49
|
+
// app provides its proxied path. Throws if no provider is mounted.
|
|
50
|
+
const { contactUrl } = useRequiredEndpointsRuntime();
|
|
47
51
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
48
52
|
const [isSuccess, setIsSuccess] = useState(false);
|
|
49
53
|
|
|
@@ -53,7 +57,7 @@ export function useContactSubmission(options: ContactSubmissionOptions = {}) {
|
|
|
53
57
|
setIsSubmitting(true);
|
|
54
58
|
|
|
55
59
|
try {
|
|
56
|
-
const response = await fetch(
|
|
60
|
+
const response = await fetch(contactUrl, {
|
|
57
61
|
method: 'POST',
|
|
58
62
|
headers: { 'Content-Type': 'application/json' },
|
|
59
63
|
body: JSON.stringify({
|
|
@@ -90,7 +94,7 @@ export function useContactSubmission(options: ContactSubmissionOptions = {}) {
|
|
|
90
94
|
} finally {
|
|
91
95
|
setIsSubmitting(false);
|
|
92
96
|
}
|
|
93
|
-
}, [isSubmitting, toast, userId, successToastMessage]);
|
|
97
|
+
}, [isSubmitting, toast, userId, successToastMessage, contactUrl]);
|
|
94
98
|
|
|
95
99
|
// Handle redirect after success
|
|
96
100
|
useEffect(() => {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useMemo } from 'react'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Hook that generates a branded placeholder image URL using the
|
|
7
|
+
* host's `/api/og-placeholder` server-side image generator (or any
|
|
8
|
+
* builder the caller supplies).
|
|
9
|
+
*
|
|
10
|
+
* THIS HOOK IS A THIN CLIENT-SIDE WRAPPER. The hub-side wrapper
|
|
11
|
+
* (`hooks/use-og-placeholder.ts` in multi-platform-hub) injects its
|
|
12
|
+
* canonical `buildOgPlaceholderUrl` from `lib/utils/entity-image.ts`.
|
|
13
|
+
* The lib version takes the builder as an argument so the lib has no
|
|
14
|
+
* hub dependency.
|
|
15
|
+
*
|
|
16
|
+
* @param buildUrl - Function that builds the placeholder URL from a
|
|
17
|
+
* title + options object (`{ site?, aspect? }`).
|
|
18
|
+
* Hub passes `buildOgPlaceholderUrl` from
|
|
19
|
+
* `lib/utils/entity-image.ts`. Embedded apps can
|
|
20
|
+
* wire any equivalent that hits their own placeholder
|
|
21
|
+
* route.
|
|
22
|
+
* @param title - Text to display on the placeholder
|
|
23
|
+
* @param siteName - Site name shown below the title (optional —
|
|
24
|
+
* defaults to empty)
|
|
25
|
+
* @param enabled - Whether to generate the URL (default: true)
|
|
26
|
+
* @param aspect - `'wide'` (1200×630 social-card; default) or `'square'`
|
|
27
|
+
* (1024×1024 — used by compact chat-inline card slots
|
|
28
|
+
* so `object-cover` doesn't crop the title off).
|
|
29
|
+
* @returns Placeholder image URL or null if disabled / no title
|
|
30
|
+
*/
|
|
31
|
+
export function useOgPlaceholder(
|
|
32
|
+
buildUrl: (title: string, options: { site?: string; aspect?: 'wide' | 'square' }) => string,
|
|
33
|
+
title: string | undefined | null,
|
|
34
|
+
siteName: string = '',
|
|
35
|
+
enabled: boolean = true,
|
|
36
|
+
aspect: 'wide' | 'square' = 'wide',
|
|
37
|
+
): string | null {
|
|
38
|
+
return useMemo(() => {
|
|
39
|
+
if (!enabled || !title) return null
|
|
40
|
+
const options: { site?: string; aspect?: 'wide' | 'square' } = {}
|
|
41
|
+
if (siteName) options.site = siteName
|
|
42
|
+
if (aspect === 'square') options.aspect = 'square'
|
|
43
|
+
return buildUrl(title, options)
|
|
44
|
+
}, [buildUrl, title, siteName, enabled, aspect])
|
|
45
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/nextjs-vite'
|
|
2
|
+
import { OnboardingStepCard } from '../components/shared/onboarding/onboarding-step-card'
|
|
3
|
+
import { UserPlusIcon } from '../components/icons-v2-generated/users/user-plus-icon'
|
|
4
|
+
|
|
5
|
+
const baseStep = {
|
|
6
|
+
id: 'invite-users',
|
|
7
|
+
title: 'Company & Team',
|
|
8
|
+
description: 'Invite team members and set up roles',
|
|
9
|
+
actionIcon: (color?: string) => <UserPlusIcon color={color} size={20} />,
|
|
10
|
+
actionText: 'Invite Users',
|
|
11
|
+
completedText: 'Manage Users',
|
|
12
|
+
onAction: () => console.log('action'),
|
|
13
|
+
onSkip: () => console.log('skip'),
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const meta = {
|
|
17
|
+
title: 'Shared/OnboardingStepCard',
|
|
18
|
+
component: OnboardingStepCard,
|
|
19
|
+
parameters: {
|
|
20
|
+
layout: 'padded',
|
|
21
|
+
docs: {
|
|
22
|
+
description: {
|
|
23
|
+
component:
|
|
24
|
+
'A single row in the Get Started onboarding list. Renders title + description on the left and state-dependent controls on the right (Skip / Action, Completed badge + Manage, Skipped badge, or loading skeleton). The card itself has no click action — only the inner buttons are interactive — so it has no hover state.',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
tags: ['autodocs'],
|
|
29
|
+
} satisfies Meta<typeof OnboardingStepCard>
|
|
30
|
+
|
|
31
|
+
export default meta
|
|
32
|
+
type Story = StoryObj<typeof meta>
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Pending step — shows Skip Step + the primary action button.
|
|
36
|
+
*/
|
|
37
|
+
export const Default: Story = {
|
|
38
|
+
args: {
|
|
39
|
+
step: baseStep,
|
|
40
|
+
isCompleted: false,
|
|
41
|
+
isSkipped: false,
|
|
42
|
+
isCheckingCompletion: false,
|
|
43
|
+
onAction: () => console.log('action'),
|
|
44
|
+
onSkip: () => console.log('skip'),
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Completed step — shows the success badge and a "Manage" button.
|
|
50
|
+
*/
|
|
51
|
+
export const Completed: Story = {
|
|
52
|
+
args: {
|
|
53
|
+
...Default.args,
|
|
54
|
+
isCompleted: true,
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Skipped step — shows only the SKIPPED badge.
|
|
60
|
+
*/
|
|
61
|
+
export const Skipped: Story = {
|
|
62
|
+
args: {
|
|
63
|
+
...Default.args,
|
|
64
|
+
isSkipped: true,
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Loading state while completion status is being checked.
|
|
70
|
+
*/
|
|
71
|
+
export const CheckingCompletion: Story = {
|
|
72
|
+
args: {
|
|
73
|
+
...Default.args,
|
|
74
|
+
isCheckingCompletion: true,
|
|
75
|
+
},
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Full list rendered the way it appears on the Get Started page.
|
|
80
|
+
* Use this story to verify that hovering any row does NOT change its
|
|
81
|
+
* border or background — only the inner buttons should react.
|
|
82
|
+
*/
|
|
83
|
+
export const List: Story = {
|
|
84
|
+
args: Default.args,
|
|
85
|
+
render: () => {
|
|
86
|
+
const steps = [
|
|
87
|
+
{
|
|
88
|
+
...baseStep,
|
|
89
|
+
id: 'orgs',
|
|
90
|
+
title: 'Organizations Setup',
|
|
91
|
+
description: 'Create and configure your organizational structure',
|
|
92
|
+
completed: true,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
...baseStep,
|
|
96
|
+
id: 'devices',
|
|
97
|
+
title: 'Device Management',
|
|
98
|
+
description: 'Connect and monitor your fleet of devices',
|
|
99
|
+
completed: true,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
...baseStep,
|
|
103
|
+
id: 'team',
|
|
104
|
+
title: 'Company & Team',
|
|
105
|
+
description: 'Invite team members and set up roles',
|
|
106
|
+
completed: false,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
...baseStep,
|
|
110
|
+
id: 'sso',
|
|
111
|
+
title: 'SSO Configuration',
|
|
112
|
+
description: 'Link Microsoft 365, Google Workspace, and other identity providers',
|
|
113
|
+
completed: false,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
...baseStep,
|
|
117
|
+
id: 'kb',
|
|
118
|
+
title: 'Knowledge Base',
|
|
119
|
+
description: 'Access documentation and learning resources',
|
|
120
|
+
completed: false,
|
|
121
|
+
},
|
|
122
|
+
]
|
|
123
|
+
|
|
124
|
+
return (
|
|
125
|
+
<div className="flex flex-col gap-3">
|
|
126
|
+
{steps.map((s) => (
|
|
127
|
+
<OnboardingStepCard
|
|
128
|
+
key={s.id}
|
|
129
|
+
step={s}
|
|
130
|
+
isCompleted={s.completed}
|
|
131
|
+
isSkipped={false}
|
|
132
|
+
isCheckingCompletion={false}
|
|
133
|
+
onAction={() => console.log('action', s.id)}
|
|
134
|
+
onSkip={() => console.log('skip', s.id)}
|
|
135
|
+
/>
|
|
136
|
+
))}
|
|
137
|
+
</div>
|
|
138
|
+
)
|
|
139
|
+
},
|
|
140
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/* =============================================================================
|
|
2
|
+
* Chat Panel (Mingo AI) — open/close motion
|
|
3
|
+
*
|
|
4
|
+
* Duration & easing follow Material 3 motion tokens + Nielsen Norman Group's
|
|
5
|
+
* 200–300 ms panel guidance:
|
|
6
|
+
* - enter: 250 ms with emphasized-decelerate (settle into place)
|
|
7
|
+
* - exit: 200 ms with emphasized-accelerate (snap away)
|
|
8
|
+
* Only transform + opacity are animated so frames stay on the GPU compositor.
|
|
9
|
+
*
|
|
10
|
+
* On <md viewports the panel is a bottom sheet (slides up); on md+ it's a
|
|
11
|
+
* right side panel (slides in from the right edge). One keyframe set per axis.
|
|
12
|
+
*
|
|
13
|
+
* prefers-reduced-motion: cross-fade replaces all slide motion (vestibular-safe
|
|
14
|
+
* per WCAG 2.3.3 / MDN guidance) — the panel still animates, just without
|
|
15
|
+
* positional movement.
|
|
16
|
+
* ============================================================================= */
|
|
17
|
+
|
|
18
|
+
@keyframes mingo-chat-overlay-in {
|
|
19
|
+
from { opacity: 0; }
|
|
20
|
+
to { opacity: 1; }
|
|
21
|
+
}
|
|
22
|
+
@keyframes mingo-chat-overlay-out {
|
|
23
|
+
from { opacity: 1; }
|
|
24
|
+
to { opacity: 0; }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@keyframes mingo-chat-slide-in-right {
|
|
28
|
+
from { opacity: 0; transform: translate3d(100%, 0, 0); }
|
|
29
|
+
to { opacity: 1; transform: translate3d(0, 0, 0); }
|
|
30
|
+
}
|
|
31
|
+
@keyframes mingo-chat-slide-out-right {
|
|
32
|
+
from { opacity: 1; transform: translate3d(0, 0, 0); }
|
|
33
|
+
to { opacity: 0; transform: translate3d(100%, 0, 0); }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@keyframes mingo-chat-slide-in-bottom {
|
|
37
|
+
from { opacity: 0; transform: translate3d(0, 100%, 0); }
|
|
38
|
+
to { opacity: 1; transform: translate3d(0, 0, 0); }
|
|
39
|
+
}
|
|
40
|
+
@keyframes mingo-chat-slide-out-bottom {
|
|
41
|
+
from { opacity: 1; transform: translate3d(0, 0, 0); }
|
|
42
|
+
to { opacity: 0; transform: translate3d(0, 100%, 0); }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@keyframes mingo-chat-fade-in {
|
|
46
|
+
from { opacity: 0; }
|
|
47
|
+
to { opacity: 1; }
|
|
48
|
+
}
|
|
49
|
+
@keyframes mingo-chat-fade-out {
|
|
50
|
+
from { opacity: 1; }
|
|
51
|
+
to { opacity: 0; }
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.mingo-chat-overlay[data-state="open"] { animation: mingo-chat-overlay-in 200ms cubic-bezier(0.05, 0.7, 0.1, 1) both; }
|
|
55
|
+
.mingo-chat-overlay[data-state="closed"] { animation: mingo-chat-overlay-out 150ms cubic-bezier(0.3, 0, 0.8, 0.15) both; }
|
|
56
|
+
|
|
57
|
+
/* Mobile: bottom-sheet motion */
|
|
58
|
+
.mingo-chat-content[data-state="open"] { animation: mingo-chat-slide-in-bottom 250ms cubic-bezier(0.05, 0.7, 0.1, 1) both; }
|
|
59
|
+
.mingo-chat-content[data-state="closed"] { animation: mingo-chat-slide-out-bottom 200ms cubic-bezier(0.3, 0, 0.8, 0.15) both; }
|
|
60
|
+
|
|
61
|
+
/* Desktop (>=768px): side-panel motion */
|
|
62
|
+
@media (min-width: 768px) {
|
|
63
|
+
.mingo-chat-content[data-state="open"] { animation-name: mingo-chat-slide-in-right; }
|
|
64
|
+
.mingo-chat-content[data-state="closed"] { animation-name: mingo-chat-slide-out-right; }
|
|
65
|
+
}
|
package/src/styles/index.css
CHANGED
|
@@ -1,17 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Access Code Client Utilities
|
|
2
|
+
* Access Code Client Utilities — pure standalone functions.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Endpoint paths are NOT hardcoded — every function takes an
|
|
5
|
+
* `endpoints` argument. The React-side wrapper that binds them from
|
|
6
|
+
* `EndpointsRuntimeContext` lives separately at
|
|
7
|
+
* `hooks/use-access-code-integration.ts` (`useAccessCodeIntegration`).
|
|
8
|
+
*
|
|
9
|
+
* Keep this file **free of React imports** — it lives in the
|
|
10
|
+
* server-safe `utils/index` tsup bundle. Any module-top-level call
|
|
11
|
+
* into `createContext()` (which the runtime context file does) would
|
|
12
|
+
* be pulled into the server bundle and crash SSR with
|
|
13
|
+
* `createContext is not a function`.
|
|
6
14
|
*/
|
|
7
15
|
|
|
8
|
-
import React from 'react';
|
|
9
16
|
import {
|
|
10
17
|
AccessCodeValidation,
|
|
11
18
|
AccessCodeValidationResponse,
|
|
12
19
|
AccessCodeConsumptionResponse
|
|
13
20
|
} from '../types/access-code-cohorts';
|
|
14
21
|
|
|
22
|
+
/** Endpoints required by the standalone client utilities. The
|
|
23
|
+
* `useAccessCodeIntegration` hook (in `hooks/`) resolves these from
|
|
24
|
+
* `EndpointsRuntimeContext.accessCode` automatically. */
|
|
25
|
+
export interface AccessCodeEndpoints {
|
|
26
|
+
validateUrl: string
|
|
27
|
+
consumeUrl: string
|
|
28
|
+
}
|
|
29
|
+
|
|
15
30
|
/**
|
|
16
31
|
* Validate an access code for a given email
|
|
17
32
|
*
|
|
@@ -31,10 +46,11 @@ import {
|
|
|
31
46
|
*/
|
|
32
47
|
export async function validateAccessCode(
|
|
33
48
|
email: string,
|
|
34
|
-
code: string
|
|
49
|
+
code: string,
|
|
50
|
+
endpoints: AccessCodeEndpoints,
|
|
35
51
|
): Promise<AccessCodeValidationResponse> {
|
|
36
52
|
try {
|
|
37
|
-
const response = await fetch(
|
|
53
|
+
const response = await fetch(endpoints.validateUrl, {
|
|
38
54
|
method: 'POST',
|
|
39
55
|
headers: {
|
|
40
56
|
'Content-Type': 'application/json',
|
|
@@ -77,10 +93,11 @@ export async function validateAccessCode(
|
|
|
77
93
|
*/
|
|
78
94
|
export async function consumeAccessCode(
|
|
79
95
|
email: string,
|
|
80
|
-
code: string
|
|
96
|
+
code: string,
|
|
97
|
+
endpoints: AccessCodeEndpoints,
|
|
81
98
|
): Promise<AccessCodeConsumptionResponse> {
|
|
82
99
|
try {
|
|
83
|
-
const response = await fetch(
|
|
100
|
+
const response = await fetch(endpoints.consumeUrl, {
|
|
84
101
|
method: 'POST',
|
|
85
102
|
headers: {
|
|
86
103
|
'Content-Type': 'application/json',
|
|
@@ -125,17 +142,18 @@ export async function consumeAccessCode(
|
|
|
125
142
|
*/
|
|
126
143
|
export async function validateAndConsumeAccessCode(
|
|
127
144
|
email: string,
|
|
128
|
-
code: string
|
|
145
|
+
code: string,
|
|
146
|
+
endpoints: AccessCodeEndpoints,
|
|
129
147
|
): Promise<AccessCodeValidationResponse & { consumed?: boolean }> {
|
|
130
148
|
// First validate
|
|
131
|
-
const validation = await validateAccessCode(email, code);
|
|
149
|
+
const validation = await validateAccessCode(email, code, endpoints);
|
|
132
150
|
|
|
133
151
|
if (!validation.valid) {
|
|
134
152
|
return validation;
|
|
135
153
|
}
|
|
136
154
|
|
|
137
155
|
// If valid, consume the code
|
|
138
|
-
const consumption = await consumeAccessCode(email, code);
|
|
156
|
+
const consumption = await consumeAccessCode(email, code, endpoints);
|
|
139
157
|
|
|
140
158
|
return {
|
|
141
159
|
...validation,
|
|
@@ -146,67 +164,6 @@ export async function validateAndConsumeAccessCode(
|
|
|
146
164
|
};
|
|
147
165
|
}
|
|
148
166
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
* @example
|
|
153
|
-
* const { validate, consume, isValidating, isConsuming } = useAccessCodeIntegration();
|
|
154
|
-
*
|
|
155
|
-
* const handleRegistration = async (formData) => {
|
|
156
|
-
* const validation = await validate(formData.email, formData.accessCode);
|
|
157
|
-
* if (!validation.valid) {
|
|
158
|
-
* setError(validation.message);
|
|
159
|
-
* return;
|
|
160
|
-
* }
|
|
161
|
-
*
|
|
162
|
-
* // Process registration...
|
|
163
|
-
* const registrationResult = await registerUser(formData);
|
|
164
|
-
*
|
|
165
|
-
* if (registrationResult.success) {
|
|
166
|
-
* await consume(formData.email, formData.accessCode);
|
|
167
|
-
* }
|
|
168
|
-
* };
|
|
169
|
-
*/
|
|
170
|
-
export function useAccessCodeIntegration() {
|
|
171
|
-
const [isValidating, setIsValidating] = React.useState(false);
|
|
172
|
-
const [isConsuming, setIsConsuming] = React.useState(false);
|
|
173
|
-
|
|
174
|
-
const validate = async (email: string, code: string) => {
|
|
175
|
-
setIsValidating(true);
|
|
176
|
-
try {
|
|
177
|
-
return await validateAccessCode(email, code);
|
|
178
|
-
} finally {
|
|
179
|
-
setIsValidating(false);
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
const consume = async (email: string, code: string) => {
|
|
184
|
-
setIsConsuming(true);
|
|
185
|
-
try {
|
|
186
|
-
return await consumeAccessCode(email, code);
|
|
187
|
-
} finally {
|
|
188
|
-
setIsConsuming(false);
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
const validateAndConsume = async (email: string, code: string) => {
|
|
193
|
-
setIsValidating(true);
|
|
194
|
-
setIsConsuming(true);
|
|
195
|
-
try {
|
|
196
|
-
return await validateAndConsumeAccessCode(email, code);
|
|
197
|
-
} finally {
|
|
198
|
-
setIsValidating(false);
|
|
199
|
-
setIsConsuming(false);
|
|
200
|
-
}
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
return {
|
|
204
|
-
validate,
|
|
205
|
-
consume,
|
|
206
|
-
validateAndConsume,
|
|
207
|
-
isValidating,
|
|
208
|
-
isConsuming,
|
|
209
|
-
isProcessing: isValidating || isConsuming,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
|
|
167
|
+
// `useAccessCodeIntegration` (the React-side wrapper) lives in
|
|
168
|
+
// `hooks/use-access-code-integration.ts`. It binds the endpoints from
|
|
169
|
+
// `EndpointsRuntimeContext` so React callers don't have to plumb URLs.
|
package/src/utils/cn.ts
CHANGED
|
@@ -16,71 +16,6 @@ export function cn(...inputs: ClassValue[]) {
|
|
|
16
16
|
return twMerge(clsx(inputs))
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
/**
|
|
20
|
-
* Format a date to a human-readable string
|
|
21
|
-
* @param date - The date to format (Date object or ISO string)
|
|
22
|
-
* @param options - Formatting options
|
|
23
|
-
* @returns Formatted date string
|
|
24
|
-
*/
|
|
25
|
-
export function formatDate(
|
|
26
|
-
date: Date | string,
|
|
27
|
-
options: Intl.DateTimeFormatOptions = {
|
|
28
|
-
year: "numeric",
|
|
29
|
-
month: "long",
|
|
30
|
-
day: "numeric",
|
|
31
|
-
},
|
|
32
|
-
): string {
|
|
33
|
-
const dateObj = typeof date === "string" ? new Date(date) : date
|
|
34
|
-
|
|
35
|
-
// Check if the date is valid
|
|
36
|
-
if (isNaN(dateObj.getTime())) {
|
|
37
|
-
console.warn("Invalid date provided to formatDate:", date)
|
|
38
|
-
return "Invalid Date"
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return dateObj.toLocaleDateString("en-US", options)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Format a number with thousands separators
|
|
46
|
-
* @param num - The number to format
|
|
47
|
-
* @returns Formatted number string
|
|
48
|
-
*/
|
|
49
|
-
export function formatNumber(num: number): string {
|
|
50
|
-
return num.toLocaleString()
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Format a price with currency symbol
|
|
55
|
-
* @param price - The price to format
|
|
56
|
-
* @param currency - The currency code
|
|
57
|
-
* @returns Formatted price string
|
|
58
|
-
*/
|
|
59
|
-
export function formatPrice(price: number, currency = "USD"): string {
|
|
60
|
-
return new Intl.NumberFormat("en-US", {
|
|
61
|
-
style: "currency",
|
|
62
|
-
currency,
|
|
63
|
-
}).format(price)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Format bytes to a human-readable string (KB, MB, GB, etc.)
|
|
68
|
-
* @param bytes - The number of bytes
|
|
69
|
-
* @param decimals - Number of decimal places
|
|
70
|
-
* @returns Formatted bytes string
|
|
71
|
-
*/
|
|
72
|
-
export function formatBytes(bytes: number, decimals = 2): string {
|
|
73
|
-
if (bytes === 0) return "0 Bytes"
|
|
74
|
-
|
|
75
|
-
const k = 1024
|
|
76
|
-
const dm = decimals < 0 ? 0 : decimals
|
|
77
|
-
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
|
|
78
|
-
|
|
79
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k))
|
|
80
|
-
|
|
81
|
-
return Number.parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i]
|
|
82
|
-
}
|
|
83
|
-
|
|
84
19
|
/**
|
|
85
20
|
* Platform URL mappings for production (with environment variable overrides)
|
|
86
21
|
*/
|