@flamingo-stack/openframe-frontend-core 0.0.481 → 0.0.482
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-H6DFCF44.cjs → chunk-22AED5IC.cjs} +82 -82
- package/dist/{chunk-H6DFCF44.cjs.map → chunk-22AED5IC.cjs.map} +1 -1
- package/dist/{chunk-MGKCS6KS.js → chunk-3WCARCI4.js} +2 -2
- package/dist/{chunk-LNKWY74S.cjs → chunk-4HL6UENH.cjs} +5 -5
- package/dist/{chunk-LNKWY74S.cjs.map → chunk-4HL6UENH.cjs.map} +1 -1
- package/dist/{chunk-Y3Y2DLNO.js → chunk-6UGYBCEN.js} +3 -3
- package/dist/{chunk-BBUEY73L.js → chunk-7I5B5PQ4.js} +6269 -5339
- package/dist/chunk-7I5B5PQ4.js.map +1 -0
- package/dist/{chunk-PSPWT2Q5.js → chunk-7LWXWXEY.js} +4 -4
- package/dist/{chunk-M7O74OWG.cjs → chunk-ACOU5YJI.cjs} +31 -31
- package/dist/{chunk-M7O74OWG.cjs.map → chunk-ACOU5YJI.cjs.map} +1 -1
- package/dist/{chunk-INDFIVDV.cjs → chunk-AHGSN4AT.cjs} +12 -12
- package/dist/{chunk-INDFIVDV.cjs.map → chunk-AHGSN4AT.cjs.map} +1 -1
- package/dist/{chunk-VTSRDC4W.js → chunk-CKC3EAYT.js} +2 -2
- package/dist/{chunk-SASR7SK5.js → chunk-GZK7FWJJ.js} +20 -4
- package/dist/chunk-GZK7FWJJ.js.map +1 -0
- package/dist/{chunk-ZRANZNEA.js → chunk-JJE5TUZK.js} +2 -2
- package/dist/{chunk-66BNAFO6.js → chunk-JQIUBFHL.js} +4 -4
- package/dist/{chunk-MMCBQJKE.cjs → chunk-KUBJHB6I.cjs} +11 -11
- package/dist/{chunk-MMCBQJKE.cjs.map → chunk-KUBJHB6I.cjs.map} +1 -1
- package/dist/{chunk-ZV6E3U3C.cjs → chunk-MRGTMMJ3.cjs} +30 -30
- package/dist/{chunk-ZV6E3U3C.cjs.map → chunk-MRGTMMJ3.cjs.map} +1 -1
- package/dist/{chunk-OZJN54R5.cjs → chunk-NWVKG7QC.cjs} +37 -37
- package/dist/{chunk-OZJN54R5.cjs.map → chunk-NWVKG7QC.cjs.map} +1 -1
- package/dist/{chunk-AN47EIIJ.cjs → chunk-PHTSSHIQ.cjs} +59 -59
- package/dist/{chunk-AN47EIIJ.cjs.map → chunk-PHTSSHIQ.cjs.map} +1 -1
- package/dist/{chunk-N2JZ33V7.cjs → chunk-RUA3OXSJ.cjs} +26 -26
- package/dist/{chunk-N2JZ33V7.cjs.map → chunk-RUA3OXSJ.cjs.map} +1 -1
- package/dist/{chunk-LK623WCC.cjs → chunk-RZPF7MJ2.cjs} +9 -9
- package/dist/{chunk-LK623WCC.cjs.map → chunk-RZPF7MJ2.cjs.map} +1 -1
- package/dist/{chunk-G3UN2DXU.cjs → chunk-STYA77PH.cjs} +20 -4
- package/dist/chunk-STYA77PH.cjs.map +1 -0
- package/dist/{chunk-JUJY3HQS.cjs → chunk-U37UTLP7.cjs} +19 -19
- package/dist/{chunk-JUJY3HQS.cjs.map → chunk-U37UTLP7.cjs.map} +1 -1
- package/dist/{chunk-2DIOV7BR.js → chunk-UPN6EFOM.js} +4 -4
- package/dist/{chunk-OWMLWJQY.cjs → chunk-VPVOJD5X.cjs} +2432 -1502
- package/dist/chunk-VPVOJD5X.cjs.map +1 -0
- package/dist/{chunk-4SMRQ4SN.js → chunk-WBL5Y4PS.js} +3 -3
- package/dist/{chunk-FP4H6Y5O.js → chunk-WPYPSIY2.js} +3 -3
- package/dist/{chunk-R5WJJL4V.js → chunk-X5X43HFV.js} +5 -5
- package/dist/{chunk-DEHZ5CTC.js → chunk-XTWKDMCG.js} +2 -2
- package/dist/components/case-studies/index.cjs +9 -9
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/chat/index.js +2 -2
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +6 -6
- package/dist/components/docs/index.js +5 -5
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/faq/index.js +3 -3
- package/dist/components/features/captions-url.cjs +12 -0
- package/dist/components/features/captions-url.cjs.map +1 -0
- package/dist/components/features/captions-url.js +10 -0
- package/dist/components/features/captions-url.js.map +1 -0
- package/dist/components/features/card-hit-layer.d.ts +40 -0
- package/dist/components/features/card-hit-layer.d.ts.map +1 -0
- package/dist/components/features/floating-walkthrough-video.d.ts +71 -0
- package/dist/components/features/floating-walkthrough-video.d.ts.map +1 -0
- package/dist/components/features/index.cjs +11 -3
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.d.ts +4 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +12 -4
- package/dist/components/features/use-walkthrough-video.d.ts +16 -0
- package/dist/components/features/use-walkthrough-video.d.ts.map +1 -0
- package/dist/components/features/video-bites-strip.d.ts.map +1 -1
- package/dist/components/features/video-center-badge.d.ts.map +1 -1
- package/dist/components/features/video-hover-preview.d.ts +68 -0
- package/dist/components/features/video-hover-preview.d.ts.map +1 -0
- package/dist/components/features/video.d.ts +78 -40
- package/dist/components/features/video.d.ts.map +1 -1
- package/dist/components/form.d.ts +0 -1
- package/dist/components/form.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +21 -21
- package/dist/components/help-center-pages/index.js +12 -12
- package/dist/components/index.cjs +163 -155
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +18 -10
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +3 -3
- package/dist/components/navigation/index.js +2 -2
- package/dist/components/onboarding-guides/index.cjs +6 -6
- package/dist/components/onboarding-guides/index.js +5 -5
- package/dist/components/related-content/index.cjs +4 -4
- package/dist/components/related-content/index.js +3 -3
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/tickets/index.js +5 -5
- package/dist/components/ui/button/button-styles.d.ts +2 -0
- package/dist/components/ui/button/button-styles.d.ts.map +1 -1
- package/dist/components/ui/button/button.d.ts +2 -2
- package/dist/components/ui/button/button.d.ts.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +50 -50
- package/dist/components/ui/file-manager/index.js +1 -1
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/index.js +2 -2
- package/dist/components/ui/page-actions.d.ts +2 -1
- package/dist/components/ui/page-actions.d.ts.map +1 -1
- package/dist/index.cjs +27 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +28 -4
- package/dist/types/supabase.d.ts +80 -0
- package/dist/types/supabase.d.ts.map +1 -1
- package/dist/types/video-processing.d.ts +1 -1
- package/dist/types/video-processing.d.ts.map +1 -1
- package/dist/utils/announcement-storage.d.ts +1 -1
- package/dist/utils/announcement-storage.d.ts.map +1 -1
- package/dist/utils/dismiss-cookie.d.ts +27 -0
- package/dist/utils/dismiss-cookie.d.ts.map +1 -0
- package/dist/utils/dismissal-storage.d.ts +19 -0
- package/dist/utils/dismissal-storage.d.ts.map +1 -0
- package/dist/utils/index.cjs +48 -10
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -11
- package/dist/utils/index.js.map +1 -1
- package/package.json +8 -2
- package/src/.index.md +39 -32
- package/src/.platform-domains.md +65 -0
- package/src/assets/.fae-avatar.md +33 -0
- package/src/assets/.index.md +15 -9
- package/src/components/.agent-mark.md +31 -0
- package/src/components/.announcement-bar.md +47 -35
- package/src/components/.calendar.md +19 -15
- package/src/components/.categories-cart.md +34 -30
- package/src/components/.category-card.md +33 -33
- package/src/components/.chart.md +38 -40
- package/src/components/.command.md +47 -23
- package/src/components/.comment-card.md +31 -26
- package/src/components/.content-loading-container.md +45 -20
- package/src/components/.context-menu.md +45 -31
- package/src/components/.date-time-picker.md +36 -30
- package/src/components/.empty-state.md +31 -31
- package/src/components/.faq-accordion.md +20 -30
- package/src/components/.filter-chip.md +36 -33
- package/src/components/.footer-waitlist-button.md +27 -21
- package/src/components/.footer.md +39 -24
- package/src/components/.form.md +32 -20
- package/src/components/.hero-image-uploader.md +35 -31
- package/src/components/.icon-display.md +53 -0
- package/src/components/.image-cropper.md +34 -33
- package/src/components/.index.md +25 -29
- package/src/components/.logs-list.md +27 -23
- package/src/components/.media-carousel.md +47 -26
- package/src/components/.metric-value.md +27 -24
- package/src/components/.msp-display.md +29 -23
- package/src/components/.open-source-features.md +23 -26
- package/src/components/.pagination.md +44 -39
- package/src/components/.persistent-filter-controls.md +61 -28
- package/src/components/.pricing-display.md +34 -33
- package/src/components/.results-count.md +33 -20
- package/src/components/.smooth-accordion.md +24 -20
- package/src/components/.social-icon-row.md +33 -21
- package/src/components/.sonner.md +40 -25
- package/src/components/.steps.md +39 -25
- package/src/components/.tool-icon.md +34 -21
- package/src/components/.unified-filter-logic.md +32 -36
- package/src/components/.user-display.md +33 -28
- package/src/components/.user-summary-stub.md +40 -33
- package/src/components/.vendor-display-button.md +17 -15
- package/src/components/.vendor-icon.md +17 -25
- package/src/components/.vendor-tag.md +39 -34
- package/src/components/.why-it-matters.md +15 -11
- package/src/components/.yes-no-display.md +36 -31
- package/src/components/authors/.author-detail-view.md +50 -0
- package/src/components/case-studies/.index.md +26 -0
- package/src/components/case-studies/.share-experience-section.md +45 -0
- package/src/components/chat/.approval-batch-message.md +48 -33
- package/src/components/chat/.approval-request-message.md +37 -26
- package/src/components/chat/.chat-archive-page.md +56 -0
- package/src/components/chat/.chat-attachment-bar.md +32 -40
- package/src/components/chat/.chat-composer.md +43 -0
- package/src/components/chat/.chat-container.md +41 -25
- package/src/components/chat/.chat-context-memory-bar.md +53 -0
- package/src/components/chat/.chat-context-picker.md +89 -0
- package/src/components/chat/.chat-header-icon-button.md +43 -0
- package/src/components/chat/.chat-header-search-field.md +51 -0
- package/src/components/chat/.chat-input.md +63 -30
- package/src/components/chat/.chat-list-empty-state.md +44 -0
- package/src/components/chat/.chat-message-enhanced.md +29 -31
- package/src/components/chat/.chat-message-list.md +34 -44
- package/src/components/chat/.chat-message-row.md +56 -0
- package/src/components/chat/.chat-message-skeleton.md +32 -26
- package/src/components/chat/.chat-panel-header-mobile.md +46 -0
- package/src/components/chat/.chat-panel-header.md +80 -0
- package/src/components/chat/.chat-sidebar-skeleton.md +31 -30
- package/src/components/chat/.chat-sidebar.md +36 -29
- package/src/components/chat/.chat-ticket-list.md +38 -23
- package/src/components/chat/.chat-typing-indicator.md +37 -19
- package/src/components/chat/.context-compaction-display.md +19 -15
- package/src/components/chat/.context-items-list.md +57 -0
- package/src/components/chat/.embeddable-chat.md +57 -66
- package/src/components/chat/.error-message-display.md +40 -22
- package/src/components/chat/.guide-mode-banner.md +41 -0
- package/src/components/chat/.guide-welcome.md +43 -0
- package/src/components/chat/.index.md +26 -21
- package/src/components/chat/.mingo-chat-history.md +63 -0
- package/src/components/chat/.mingo-chat-modals.md +44 -0
- package/src/components/chat/.mingo-history-rail.md +63 -0
- package/src/components/chat/.mingo-info-card.md +59 -0
- package/src/components/chat/.mingo-onboarding-card.md +21 -27
- package/src/components/chat/.mingo-welcome.md +60 -0
- package/src/components/chat/.model-display.md +33 -25
- package/src/components/chat/.msp-organization-card-skeleton.md +44 -0
- package/src/components/chat/.msp-organization-card.md +51 -0
- package/src/components/chat/.nav-link-anchor-via-runtime.md +36 -25
- package/src/components/chat/.quick-action-chip.md +60 -0
- package/src/components/chat/.quick-action-marquee.md +53 -0
- package/src/components/chat/.quick-action-wall.md +68 -0
- package/src/components/chat/.remark-mention-chips.md +41 -0
- package/src/components/chat/.slash-command-suggestions.md +30 -36
- package/src/components/chat/.source-action-button.md +28 -25
- package/src/components/chat/.tool-call-blocks.md +18 -30
- package/src/components/chat/.tool-execution-display.md +29 -34
- package/src/components/chat/entity-cards/.admin-content-card.md +29 -22
- package/src/components/chat/entity-cards/.blog-card.md +44 -33
- package/src/components/chat/entity-cards/.blog-image-placeholder.md +20 -18
- package/src/components/chat/entity-cards/.case-study-card.md +24 -33
- package/src/components/chat/entity-cards/.chat-ticket-item.md +39 -22
- package/src/components/chat/entity-cards/.customer-interview-card.md +29 -32
- package/src/components/chat/entity-cards/.data-room-doc-card.md +21 -22
- package/src/components/chat/entity-cards/.dispatch.md +41 -24
- package/src/components/chat/entity-cards/.entity-author-card.md +36 -33
- package/src/components/chat/entity-cards/.entity-portrait-card.md +47 -0
- package/src/components/chat/entity-cards/.generic-entity-card.md +26 -25
- package/src/components/chat/entity-cards/.github-activity-card.md +35 -41
- package/src/components/chat/entity-cards/.hubspot-ticket-card.md +22 -28
- package/src/components/chat/entity-cards/.index.md +33 -44
- package/src/components/chat/entity-cards/.investor-update-card.md +36 -25
- package/src/components/chat/entity-cards/.onboarding-guide-card.md +20 -29
- package/src/components/chat/entity-cards/.product-release-card-defaults.md +26 -19
- package/src/components/chat/entity-cards/.program-card.md +30 -33
- package/src/components/chat/entity-cards/.roadmap-card.md +40 -31
- package/src/components/chat/entity-cards/.roadmap-vote-button.md +33 -36
- package/src/components/chat/entity-cards/.slack-message-card.md +31 -32
- package/src/components/chat/entity-cards/.use-cover-image-fallback.md +47 -0
- package/src/components/chat/entity-cards/.use-entity-card-link.md +51 -0
- package/src/components/chat/entity-cards/.use-entity-card-placeholder.md +47 -0
- package/src/components/chat/entity-cards/.what-i-shipped-card.md +43 -0
- package/src/components/chat/hooks/.index.md +33 -30
- package/src/components/chat/hooks/.use-chat-card-item.md +30 -17
- package/src/components/chat/hooks/.use-chat-dialog-manager.md +59 -0
- package/src/components/chat/hooks/.use-chat-identity.md +37 -25
- package/src/components/chat/hooks/.use-chunk-catchup.md +53 -36
- package/src/components/chat/hooks/.use-empty-state-config.md +39 -0
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +65 -30
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
- package/src/components/chat/hooks/.use-nats-dialog-subscription.md +66 -50
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +58 -31
- package/src/components/chat/hooks/.use-scripted-stream.md +46 -0
- package/src/components/chat/hooks/.use-slash-commands.md +32 -25
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +32 -21
- package/src/components/chat/hooks/.use-unified-chat.md +45 -35
- package/src/components/chat/types/.api.types.md +49 -41
- package/src/components/chat/types/.chat.types.md +56 -34
- package/src/components/chat/types/.component.types.md +36 -36
- package/src/components/chat/types/.context-item.types.md +61 -0
- package/src/components/chat/types/.index.md +32 -17
- package/src/components/chat/types/.message.types.md +44 -45
- package/src/components/chat/types/.network.types.md +46 -46
- package/src/components/chat/types/.processing.types.md +49 -37
- package/src/components/chat/types/.unified-chat-state.types.md +41 -26
- package/src/components/chat/types/entities/.content-ref.md +20 -31
- package/src/components/chat/types/entities/.investor-update.md +14 -16
- package/src/components/chat/types/entities/.onboarding-guide.md +35 -34
- package/src/components/chat/types/entities/.program-types.md +55 -43
- package/src/components/chat/utils/.chip-action-class.md +17 -19
- package/src/components/chat/utils/.chip-styles.md +18 -18
- package/src/components/chat/utils/.chunk-parser.md +48 -37
- package/src/components/chat/utils/.compact-card-classes.md +33 -35
- package/src/components/chat/utils/.execute-navigation.md +49 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +9 -12
- package/src/components/chat/utils/.history-merge.md +65 -0
- package/src/components/chat/utils/.icon-library.md +33 -31
- package/src/components/chat/utils/.icon-registry.md +44 -0
- package/src/components/chat/utils/.index.md +37 -33
- package/src/components/chat/utils/.is-cross-origin-url.md +26 -22
- package/src/components/chat/utils/.message-segment-accumulator.md +46 -25
- package/src/components/chat/utils/.nav-anchor-props.md +29 -34
- package/src/components/chat/utils/.nav-click-handler.md +29 -33
- package/src/components/chat/utils/.process-historical-messages.md +29 -33
- package/src/components/chat/utils/.scripted-stream.md +52 -0
- package/src/components/chat/utils/.source-row-cta.md +32 -31
- package/src/components/chat/utils/.tool-call-helpers.md +25 -17
- package/src/components/contact/.contact-form.md +24 -19
- package/src/components/docs/.doc-navigation-context.md +49 -0
- package/src/components/docs/.doc-viewer.md +64 -0
- package/src/components/docs/.docs-hub-page.md +49 -0
- package/src/components/docs/.index.md +51 -0
- package/src/components/docs/.skeletons.md +47 -0
- package/src/components/docs/.use-docs-resolve-link.md +61 -0
- package/src/components/docs/.use-document-tree.md +83 -0
- package/src/components/docs/.use-scroll-spy.md +58 -0
- package/src/components/embeds/.embed-container.md +45 -0
- package/src/components/embeds/.embed-iframe.md +51 -0
- package/src/components/embeds/.figma-embed.md +43 -0
- package/src/components/embeds/.file-download-card.md +47 -0
- package/src/components/embeds/.google-sheets-viewer.md +40 -0
- package/src/components/embeds/.index.md +58 -0
- package/src/components/embeds/.linkedin-embed-client.md +50 -0
- package/src/components/embeds/.markdown-image.md +40 -0
- package/src/components/embeds/.og-link-preview.md +54 -0
- package/src/components/embeds/.pdf-viewer.md +43 -0
- package/src/components/embeds/.reddit-embed-client.md +40 -0
- package/src/components/embeds/.rich-markdown-runtime.md +53 -0
- package/src/components/embeds/.twitter-embed-client.md +44 -0
- package/src/components/faq/.faq-document-page.md +68 -0
- package/src/components/faq/.faq-section.md +55 -0
- package/src/components/faq/.index.md +29 -0
- package/src/components/faq/.json-ld.md +48 -0
- package/src/components/features/.array-entry-manager.md +32 -24
- package/src/components/features/.auth-providers-list.md +33 -32
- package/src/components/features/.captions-url.md +43 -0
- package/src/components/features/.cards-strip.md +48 -0
- package/src/components/features/.changelog-manager.md +17 -20
- package/src/components/features/.command-box.md +11 -16
- package/src/components/features/.entity-summary-editor.md +20 -15
- package/src/components/features/.entity-tag-badges.md +43 -0
- package/src/components/features/.entity-video-section.md +31 -41
- package/src/components/features/.figma-prototype-viewer.md +55 -37
- package/src/components/features/.filters-dropdown.md +14 -13
- package/src/components/features/.highlight-config-section.md +19 -16
- package/src/components/features/.highlight-video-combined-section.md +28 -19
- package/src/components/features/.highlight-video-preview.md +13 -11
- package/src/components/features/.highlight-video-section.md +26 -22
- package/src/components/features/.index.md +40 -36
- package/src/components/features/.media-gallery-manager.md +37 -35
- package/src/components/features/.mux-origins.md +46 -0
- package/src/components/features/.og-editor-preview.md +29 -24
- package/src/components/features/.os-type-badge-group.md +26 -18
- package/src/components/features/.os-type-badge.md +41 -24
- package/src/components/features/.paths-display.md +42 -25
- package/src/components/features/.platform-badge.md +26 -17
- package/src/components/features/.policy-configuration-panel.md +33 -31
- package/src/components/features/.provider-button.md +29 -20
- package/src/components/features/.push-button-selector.md +39 -41
- package/src/components/features/.release-media-manager.md +41 -34
- package/src/components/features/.section-selector.md +27 -16
- package/src/components/features/.select-button.md +21 -32
- package/src/components/features/.seo-editor-preview.md +49 -36
- package/src/components/features/.social-links-manager.md +40 -18
- package/src/components/features/.start-with-openframe-button.md +30 -32
- package/src/components/features/.status-filter-component.md +29 -38
- package/src/components/features/.tags-selector.md +25 -29
- package/src/components/features/.transcript-summary-editor.md +24 -18
- package/src/components/features/.use-video-warmup.md +47 -0
- package/src/components/features/.video-bites-display.md +36 -37
- package/src/components/features/.video-bites-shared.md +44 -0
- package/src/components/features/.video-bites-strip.md +63 -0
- package/src/components/features/.video-center-badge.md +38 -0
- package/src/components/features/.video-ratio-tabs.md +38 -31
- package/src/components/features/.video-source-selector.md +24 -27
- package/src/components/features/.video.md +35 -27
- package/src/components/features/.waitlist-form.md +39 -33
- package/src/components/features/.warning-block.md +53 -0
- package/src/components/features/ai-enrich/.AIEnrichSection.md +24 -25
- package/src/components/features/ai-enrich/.AIRequiredBadge.md +22 -21
- package/src/components/features/ai-enrich/.AIStatusIndicator.md +42 -35
- package/src/components/features/ai-enrich/.AIWarningsSection.md +23 -20
- package/src/components/features/ai-enrich/.ConfidenceBadge.md +35 -20
- package/src/components/features/auth/.auth-benefits-panel.md +48 -0
- package/src/components/features/auth/.auth-branding.md +51 -0
- package/src/components/features/auth/.auth-shell.md +51 -0
- package/src/components/features/auth/.back-to-login-link.md +48 -0
- package/src/components/features/auth/.complete-account-form.md +45 -0
- package/src/components/features/auth/.create-organization-form.md +53 -0
- package/src/components/features/auth/.index.md +48 -0
- package/src/components/features/auth/.invite-link-invalid-modal.md +42 -0
- package/src/components/features/auth/.login-form.md +42 -0
- package/src/components/features/auth/.openframe-sso-login-form.md +46 -0
- package/src/components/features/auth/.openframe-sso-signup-form.md +51 -0
- package/src/components/features/auth/.password-reset-form.md +57 -0
- package/src/components/features/auth/.sso-auth-shell.md +35 -0
- package/src/components/features/auth/.sso-providers.md +42 -0
- package/src/components/features/auth/.terms-agreement-label.md +28 -0
- package/src/components/features/board/.board-column-header.md +24 -18
- package/src/components/features/board/.board-column.md +32 -32
- package/src/components/features/board/.board-ticket-approval.md +42 -0
- package/src/components/features/board/.board.md +38 -38
- package/src/components/features/board/.index.md +35 -38
- package/src/components/features/board/.ticket-card.md +33 -36
- package/src/components/features/board/.types.md +38 -31
- package/src/components/features/card-hit-layer.tsx +84 -0
- package/src/components/features/floating-walkthrough-video.tsx +891 -0
- package/src/components/features/index.ts +4 -0
- package/src/components/features/notifications/.approval-request-notification-tile.md +45 -0
- package/src/components/features/notifications/.index.md +35 -31
- package/src/components/features/notifications/.notification-drawer.md +32 -19
- package/src/components/features/notifications/.notification-popups.md +51 -0
- package/src/components/features/notifications/.notification-tile.md +43 -27
- package/src/components/features/notifications/.notifications-context.md +42 -45
- package/src/components/features/notifications/.types.md +51 -31
- package/src/components/features/ticket-status-config-list/.ticket-status-config-list.md +51 -0
- package/src/components/features/time-tracker/.index.md +48 -0
- package/src/components/features/time-tracker/.time-tracker-context.md +55 -0
- package/src/components/features/time-tracker/.time-tracker-header-button.md +51 -0
- package/src/components/features/time-tracker/.time-tracker-panel.md +58 -0
- package/src/components/features/time-tracker/.types.md +51 -0
- package/src/components/features/time-tracker/.use-tracker-clock.md +32 -0
- package/src/components/features/use-walkthrough-video.ts +70 -0
- package/src/components/features/video-bites-strip.tsx +46 -146
- package/src/components/features/video-center-badge.tsx +11 -2
- package/src/components/features/video-hover-preview.tsx +201 -0
- package/src/components/features/video.tsx +368 -73
- package/src/components/help-center-pages/.delivery-page.md +51 -0
- package/src/components/help-center-pages/.index.md +51 -0
- package/src/components/help-center-pages/.onboarding-guides-catalog-page.md +53 -0
- package/src/components/help-center-pages/.product-releases-list-page.md +51 -0
- package/src/components/help-center-pages/.roadmap-page.md +46 -0
- package/src/components/icons/.figma-icon.md +13 -7
- package/src/components/icons/.index.md +26 -22
- package/src/components/icons/.vendor-directory-icon.md +30 -18
- package/src/components/icons/.x-logo.md +26 -10
- package/src/components/icons-v2-generated/.index.md +30 -41
- package/src/components/icons-v2-generated/brand-logos/.index.md +25 -19
- package/src/components/icons-v2-generated/communication/.index.md +26 -30
- package/src/components/icons-v2-generated/logos/.flamingo-logo-icon.md +41 -0
- package/src/components/layout/.article-detail-layout.md +32 -21
- package/src/components/layout/.page-container.md +25 -23
- package/src/components/layout/.page-heading.md +48 -0
- package/src/components/layout/.page-layout.md +30 -25
- package/src/components/layout/.title-block.md +43 -24
- package/src/components/loading/.card-skeleton.md +28 -35
- package/src/components/loading/.category-card-skeleton.md +25 -23
- package/src/components/loading/.device-card-skeleton.md +22 -15
- package/src/components/loading/.margin-report-skeleton.md +30 -35
- package/src/components/loading/.openmsp-heartbeat.md +30 -32
- package/src/components/loading/.organization-card-skeleton.md +22 -25
- package/src/components/loading/.organization-icon-skeleton.md +39 -27
- package/src/components/loading/.page-layout-skeleton.md +50 -28
- package/src/components/loading/.unified-skeleton.md +37 -40
- package/src/components/loading/.users-grid-skeleton.md +19 -38
- package/src/components/navigation/.app-header.md +35 -28
- package/src/components/navigation/.app-layout-context.md +48 -0
- package/src/components/navigation/.app-layout-drawer.md +56 -0
- package/src/components/navigation/.app-layout.md +24 -23
- package/src/components/navigation/.header-mingo-button.md +46 -0
- package/src/components/navigation/.header-organization-filter.md +32 -18
- package/src/components/navigation/.header.md +24 -31
- package/src/components/navigation/.index.md +36 -50
- package/src/components/navigation/.mingo-ai-button.md +41 -0
- package/src/components/navigation/.mobile-burger-menu.md +29 -29
- package/src/components/navigation/.mobile-nav-panel.md +41 -49
- package/src/components/navigation/.multi-level-navigation.md +76 -0
- package/src/components/navigation/.navigation-sidebar-item.md +14 -14
- package/src/components/navigation/.navigation-sidebar.md +30 -23
- package/src/components/navigation/.sliding-sidebar.md +30 -25
- package/src/components/navigation/.sticky-section-nav.md +23 -21
- package/src/components/onboarding-guides/.index.md +40 -0
- package/src/components/onboarding-guides/.onboarding-guide-detail-view.md +55 -0
- package/src/components/onboarding-guides/.onboarding-guides-catalog-skeleton.md +33 -0
- package/src/components/onboarding-guides/.onboarding-guides-catalog-view.md +50 -0
- package/src/components/onboarding-guides/hooks/.use-onboarding-guides.md +54 -0
- package/src/components/platform/.CveLink.md +28 -17
- package/src/components/platform/.ScriptArguments.md +18 -23
- package/src/components/platform/.ScriptInfoSection.md +27 -21
- package/src/components/platform/.ShellTypeBadge.md +34 -18
- package/src/components/platform/.SoftwareInfo.md +23 -21
- package/src/components/platform/.ToolBadge.md +18 -16
- package/src/components/profile/.ProfileLoadingSkeleton.md +24 -23
- package/src/components/related-content/.index.md +41 -0
- package/src/components/related-content/.related-content-section.md +62 -0
- package/src/components/shared/.article-author-byline.md +56 -0
- package/src/components/shared/.detail-page-skeleton.md +32 -43
- package/src/components/shared/.media-gallery-strip.md +43 -0
- package/src/components/shared/delivery/.delivery-lists.md +20 -19
- package/src/components/shared/delivery/.delivery-row.md +24 -20
- package/src/components/shared/delivery/.delivery-table.md +20 -22
- package/src/components/shared/dev-section/.dev-card-row.md +28 -36
- package/src/components/shared/dev-section/.dev-section-page.md +36 -25
- package/src/components/shared/dev-section/.dev-section-view.md +32 -22
- package/src/components/shared/doc-search/.doc-search-bar.md +58 -0
- package/src/components/shared/doc-search/.doc-search-result-row.md +50 -0
- package/src/components/shared/doc-search/.format-relative-path.md +30 -0
- package/src/components/shared/doc-search/.index.md +46 -0
- package/src/components/shared/doc-search/.map-doc-search-results.md +44 -0
- package/src/components/shared/doc-search/.resolve-search-result-action.md +52 -0
- package/src/components/shared/doc-search/.types.md +49 -0
- package/src/components/shared/doc-search/.use-doc-search.md +66 -0
- package/src/components/shared/legal-document/.legal-document-page.md +26 -20
- package/src/components/shared/legal-document/.use-legal-docs.md +36 -30
- package/src/components/shared/onboarding/.onboarding-step-card.md +24 -16
- package/src/components/shared/onboarding/.onboarding-walkthrough.md +42 -28
- package/src/components/shared/product-release/.index.md +33 -24
- package/src/components/shared/product-release/.product-release-card-skeleton.md +22 -28
- package/src/components/shared/product-release/.product-release-card.md +28 -29
- package/src/components/shared/product-release/.product-releases-view.md +49 -0
- package/src/components/shared/product-release/.release-detail-page.md +30 -15
- package/src/components/shared/roadmap/.index.md +29 -24
- package/src/components/shared/roadmap/.roadmap-grid.md +43 -54
- package/src/components/shared/roadmap/.roadmap-view.md +41 -0
- package/src/components/shared/roadmap/.use-roadmap-voting.md +27 -17
- package/src/components/switch.tsx +1 -1
- package/src/components/tickets/.help-center-card.md +32 -28
- package/src/components/tickets/.help-center-create-form.md +34 -22
- package/src/components/tickets/.help-center-list.md +36 -25
- package/src/components/tickets/.index.md +30 -45
- package/src/components/tickets/.ticket-center.md +31 -38
- package/src/components/tickets/.ticket-detail-drawer.md +20 -30
- package/src/components/tickets/.ticket-open-form.md +24 -26
- package/src/components/tickets/.ticket-reply-composer.md +51 -0
- package/src/components/tickets/.ticket-row.md +26 -11
- package/src/components/tickets/.types.md +56 -38
- package/src/components/tickets/hooks/.use-ticket-actions.md +60 -47
- package/src/components/tickets/hooks/.use-ticket-engagements.md +27 -27
- package/src/components/tickets/hooks/.use-tickets-list.md +24 -30
- package/src/components/ui/.accordion.md +28 -21
- package/src/components/ui/.actions-menu.md +36 -54
- package/src/components/ui/.ai-generated-badge.md +25 -0
- package/src/components/ui/.alert-dialog.md +21 -16
- package/src/components/ui/.alert.md +30 -25
- package/src/components/ui/.allowed-domains-input.md +26 -15
- package/src/components/ui/.announcement-bar-view.md +46 -0
- package/src/components/ui/.autocomplete.md +40 -27
- package/src/components/ui/.badge.md +34 -31
- package/src/components/ui/.brand-association-card.md +22 -18
- package/src/components/ui/.breadcrumb.md +18 -14
- package/src/components/ui/.bullet-list.md +35 -23
- package/src/components/ui/.card.md +47 -30
- package/src/components/ui/.checkbox-block.md +34 -22
- package/src/components/ui/.checkbox-with-description.md +18 -20
- package/src/components/ui/.chevron-button.md +29 -29
- package/src/components/ui/.circular-progress.md +30 -41
- package/src/components/ui/.color-preset-select.md +54 -0
- package/src/components/ui/.color-swatch.md +37 -0
- package/src/components/ui/.content-loader.md +34 -27
- package/src/components/ui/.crossfade-panels.md +50 -0
- package/src/components/ui/.cursor-pagination.md +38 -26
- package/src/components/ui/.dashboard-info-card.md +46 -27
- package/src/components/ui/.date-picker.md +52 -36
- package/src/components/ui/.device-card-compact.md +23 -20
- package/src/components/ui/.device-card.md +39 -30
- package/src/components/ui/.dialog.md +14 -14
- package/src/components/ui/.drawer.md +45 -39
- package/src/components/ui/.dropdown-button.md +41 -33
- package/src/components/ui/.dropdown-menu.md +40 -23
- package/src/components/ui/.duration-input.md +41 -0
- package/src/components/ui/.entity-image.md +32 -28
- package/src/components/ui/.error-state.md +30 -26
- package/src/components/ui/.fade-preview.md +44 -0
- package/src/components/ui/.field-wrapper.md +34 -23
- package/src/components/ui/.file-upload.md +30 -18
- package/src/components/ui/.filter-modal.md +30 -32
- package/src/components/ui/.filter-pill-row.md +58 -0
- package/src/components/ui/.floating-tooltip.md +27 -32
- package/src/components/ui/.hidden-tags-popup.md +18 -20
- package/src/components/ui/.highlight-card.md +36 -23
- package/src/components/ui/.honeypot-field.md +41 -0
- package/src/components/ui/.hover-dropdown.md +44 -31
- package/src/components/ui/.image-gallery-modal.md +28 -30
- package/src/components/ui/.image-uploader.md +39 -22
- package/src/components/ui/.index.md +33 -31
- package/src/components/ui/.info-card-row.md +50 -0
- package/src/components/ui/.info-card.md +27 -20
- package/src/components/ui/.info-row.md +30 -24
- package/src/components/ui/.info-section.md +63 -0
- package/src/components/ui/.input.md +29 -28
- package/src/components/ui/.label.md +34 -26
- package/src/components/ui/.markdown-editor.md +26 -25
- package/src/components/ui/.marquee-wall.md +64 -0
- package/src/components/ui/.menubar.md +50 -16
- package/src/components/ui/.modal-v2.md +41 -27
- package/src/components/ui/.modal.md +22 -19
- package/src/components/ui/.more-actions-menu.md +30 -24
- package/src/components/ui/.navigation-menu.md +40 -25
- package/src/components/ui/.organization-card.md +46 -27
- package/src/components/ui/.page-actions.md +55 -41
- package/src/components/ui/.page-loader.md +40 -23
- package/src/components/ui/.password-input.md +30 -0
- package/src/components/ui/.phone-input.md +20 -22
- package/src/components/ui/.portal-container.md +43 -0
- package/src/components/ui/.progress-bar.md +40 -27
- package/src/components/ui/.release-changelog-section.md +32 -26
- package/src/components/ui/.rich-markdown-renderer.md +45 -0
- package/src/components/ui/.scroll-fade.md +56 -0
- package/src/components/ui/.search-input.md +55 -37
- package/src/components/ui/.select.md +25 -26
- package/src/components/ui/.service-card.md +25 -19
- package/src/components/ui/.sheet.md +21 -21
- package/src/components/ui/.simple-markdown-renderer.md +36 -24
- package/src/components/ui/.slack-channel-chip.md +49 -0
- package/src/components/ui/.square-avatar.md +29 -26
- package/src/components/ui/.stacked-rows-panel.md +61 -0
- package/src/components/ui/.status-badge.md +30 -24
- package/src/components/ui/.status-indicator.md +35 -21
- package/src/components/ui/.tab-content.md +34 -22
- package/src/components/ui/.tab-navigation.md +40 -50
- package/src/components/ui/.tab-selector.md +48 -31
- package/src/components/ui/.tabs.md +34 -21
- package/src/components/ui/.tag-search-input.md +20 -20
- package/src/components/ui/.tag-select-dropdown.md +59 -0
- package/src/components/ui/.tag.md +25 -43
- package/src/components/ui/.tags-input.md +31 -31
- package/src/components/ui/.textarea.md +32 -30
- package/src/components/ui/.ticket-attachments-list.md +36 -29
- package/src/components/ui/.ticket-info-section.md +37 -42
- package/src/components/ui/.ticket-status-config-row.md +66 -0
- package/src/components/ui/.ticket-status-tag.md +39 -35
- package/src/components/ui/.toaster.md +21 -15
- package/src/components/ui/.toggle.md +38 -37
- package/src/components/ui/.tooltip.md +16 -13
- package/src/components/ui/button/.button-styles.md +17 -18
- package/src/components/ui/button/.button.md +30 -37
- package/src/components/ui/button/.split-button.md +46 -23
- package/src/components/ui/button/button-styles.ts +13 -0
- package/src/components/ui/button/button.tsx +5 -0
- package/src/components/ui/data-table/.data-table-body.md +50 -35
- package/src/components/ui/data-table/.data-table-empty.md +17 -33
- package/src/components/ui/data-table/.data-table-header.md +43 -40
- package/src/components/ui/data-table/.data-table-row.md +31 -31
- package/src/components/ui/data-table/.types.md +23 -28
- package/src/components/ui/file-manager/.file-manager-breadcrumb.md +16 -24
- package/src/components/ui/file-manager/.file-manager-empty.md +23 -15
- package/src/components/ui/file-manager/.file-manager-skeleton.md +34 -36
- package/src/components/ui/file-manager/.file-manager-table-row.md +29 -29
- package/src/components/ui/file-manager/.file-manager-table.md +39 -24
- package/src/components/ui/no-data/.index.md +22 -0
- package/src/components/ui/no-data/.no-data-actions.md +29 -0
- package/src/components/ui/no-data/.no-data-message.md +37 -0
- package/src/components/ui/no-data/.no-data-styles.md +39 -0
- package/src/components/ui/no-data/.no-data.md +59 -0
- package/src/components/ui/page-actions.tsx +2 -1
- package/src/components/ui/query-report-table/.query-report-table-header.md +15 -15
- package/src/components/ui/query-report-table/.query-report-table-row.md +16 -16
- package/src/components/ui/query-report-table/.query-report-table.md +39 -24
- package/src/components/ui/table/.table-column-filter-dropdown.md +15 -9
- package/src/components/ui/table/.table-description-cell.md +13 -12
- package/src/components/ui/table/.table-empty-state.md +19 -20
- package/src/components/ui/table/.table-row.md +30 -20
- package/src/components/ui/table/.table-skeleton.md +32 -27
- package/src/components/ui/table/.table-timestamp-cell.md +24 -23
- package/src/components/ui/table/.table.md +43 -30
- package/src/components/ui/table/.types.md +49 -45
- package/src/components/ui/table/.use-table-motion.md +45 -0
- package/src/contexts/.chat-runtime-context.md +55 -26
- package/src/contexts/.endpoints-runtime-context.md +40 -44
- package/src/embed-shims/.next-navigation.md +38 -31
- package/src/hooks/.api-hooks.md +28 -21
- package/src/hooks/.index.md +30 -25
- package/src/hooks/.use-authed-image-src.md +38 -0
- package/src/hooks/.use-contact-submission.md +35 -36
- package/src/hooks/.use-humanity-signals.md +47 -0
- package/src/hooks/.use-near-viewport.md +30 -30
- package/src/hooks/.use-og-placeholder-url.md +57 -0
- package/src/hooks/.use-scroll-to-hash.md +46 -0
- package/src/hooks/.use-self-fetch.md +52 -0
- package/src/hooks/state/.flatten-schema.md +37 -29
- package/src/hooks/ui/.index.md +37 -25
- package/src/hooks/ui/.use-auto-limit-tags.md +55 -38
- package/src/hooks/ui/.use-deferred-error.md +44 -0
- package/src/hooks/ui/.use-focus-trap.md +59 -0
- package/src/hooks/ui/.use-header-height.md +37 -0
- package/src/hooks/ui/.use-horizontal-scrollbar.md +25 -34
- package/src/hooks/ui/.use-marquee-engine.md +73 -0
- package/src/hooks/ui/.use-notification-permission.md +49 -0
- package/src/hooks/ui/.use-reset-on-page-hidden.md +40 -0
- package/src/hooks/ui/.use-suppress-clone-focus.md +41 -0
- package/src/nats/.index.md +39 -0
- package/src/nats/.nats-provider.md +46 -0
- package/src/nats/.nats.md +38 -28
- package/src/nats/.shared-connection.md +56 -0
- package/src/nats/.use-nats-subscription.md +57 -0
- package/src/stories/.ActionsMenu.stories.md +57 -0
- package/src/stories/.Alert.stories.md +46 -0
- package/src/stories/.AnnouncementBar.stories.md +59 -32
- package/src/stories/.AppLayoutDrawer.stories.md +60 -0
- package/src/stories/.AppLayoutSidebar.stories.md +45 -0
- package/src/stories/.ApprovalBatchMessage.stories.md +46 -0
- package/src/stories/.ApprovalBatchMessageClient.stories.md +55 -0
- package/src/stories/.ApprovalRequestMessage.stories.md +50 -0
- package/src/stories/.ApprovalRequestMessageClient.stories.md +41 -0
- package/src/stories/.BlogCard.stories.md +52 -0
- package/src/stories/.Board.stories.md +25 -20
- package/src/stories/.Button.stories.md +35 -40
- package/src/stories/.CampaignCardAdmin.stories.md +38 -0
- package/src/stories/.CardsStrip.stories.md +39 -0
- package/src/stories/.CaseStudyCard.stories.md +41 -0
- package/src/stories/.ChatContainer.stories.md +41 -0
- package/src/stories/.ChatInlineVideoPill.stories.md +36 -0
- package/src/stories/.ChatMessageEnhanced.stories.md +51 -0
- package/src/stories/.ChatMingoInfoCards.stories.md +30 -0
- package/src/stories/.ChatTicketList.stories.md +38 -22
- package/src/stories/.ChatTypingIndicator.stories.md +47 -0
- package/src/stories/.CheckboxBlock.stories.md +34 -35
- package/src/stories/.ContextCompactionDisplay.stories.md +28 -0
- package/src/stories/.CustomerInterviewCard.stories.md +36 -0
- package/src/stories/.DashboardInfoCard.stories.md +40 -33
- package/src/stories/.DataRoomDocCard.stories.md +42 -0
- package/src/stories/.DataTable.stories.md +37 -32
- package/src/stories/.DatePicker.stories.md +34 -30
- package/src/stories/.EmbeddableChat.stories.md +45 -28
- package/src/stories/.EmptyState.stories.md +55 -0
- package/src/stories/.ErrorMessageDisplay.stories.md +45 -0
- package/src/stories/.FilterModal.stories.md +28 -22
- package/src/stories/.GenericEntityCard.stories.md +50 -0
- package/src/stories/.GitHubActivityCard.stories.md +41 -0
- package/src/stories/.GuideWelcome.stories.md +38 -0
- package/src/stories/.Header.stories.md +32 -22
- package/src/stories/.HubspotTicketCard.stories.md +41 -0
- package/src/stories/.InfoCard.stories.md +37 -26
- package/src/stories/.InfoCardRow.stories.md +48 -0
- package/src/stories/.InfoSection.stories.md +55 -0
- package/src/stories/.Input.stories.md +45 -35
- package/src/stories/.InvestorUpdateCard.stories.md +41 -0
- package/src/stories/.MarqueeWall.stories.md +53 -0
- package/src/stories/.MingoAiButton.stories.md +31 -0
- package/src/stories/.MingoChatModals.stories.md +47 -0
- package/src/stories/.MingoInfoCard.stories.md +50 -0
- package/src/stories/.MingoOnboardingCard.stories.md +19 -19
- package/src/stories/.MingoWelcome.stories.md +41 -0
- package/src/stories/.MobileNavPanel.stories.md +52 -0
- package/src/stories/.Modal.stories.md +19 -16
- package/src/stories/.MspOrganizationCard.stories.md +45 -0
- package/src/stories/.NotificationDrawer.stories.md +39 -28
- package/src/stories/.OSTypeBadge.stories.md +34 -25
- package/src/stories/.OnboardingGuideCard.stories.md +41 -0
- package/src/stories/.PageActions.stories.md +21 -21
- package/src/stories/.PageContainer.stories.md +29 -24
- package/src/stories/.PageLayout.stories.md +18 -35
- package/src/stories/.PolicyConfigurationPanel.stories.md +58 -0
- package/src/stories/.ProductReleaseCard.stories.md +39 -0
- package/src/stories/.ProgramCard.stories.md +51 -0
- package/src/stories/.QuickActionChip.stories.md +59 -0
- package/src/stories/.QuickActionMarquee.stories.md +51 -0
- package/src/stories/.QuickActionWall.stories.md +58 -0
- package/src/stories/.RoadmapCard.stories.md +41 -0
- package/src/stories/.ShellTypeBadge.stories.md +42 -22
- package/src/stories/.SlackMessageCard.stories.md +42 -0
- package/src/stories/.SlashCommandSuggestions.stories.md +21 -31
- package/src/stories/.SplitButton.stories.md +23 -25
- package/src/stories/.StackedRowsPanel.stories.md +65 -0
- package/src/stories/.TabSelector.stories.md +26 -38
- package/src/stories/.Tag.stories.md +32 -27
- package/src/stories/.ThinkingDisplay.stories.md +43 -0
- package/src/stories/.TicketCard.stories.md +60 -0
- package/src/stories/.TicketInfoSection.stories.md +28 -20
- package/src/stories/.TimeTracker.stories.md +35 -0
- package/src/stories/.Toaster.stories.md +26 -20
- package/src/stories/.ToolBadge.stories.md +34 -24
- package/src/stories/.ToolExecutionDisplay.stories.md +22 -20
- package/src/stories/.ToolExecutionDisplayClient.stories.md +33 -0
- package/src/stories/.VideoBitesStrip.stories.md +37 -0
- package/src/stories/.WarningBlock.stories.md +51 -0
- package/src/stories/__fixtures__/.chat-card-decorator.md +39 -0
- package/src/stories/__fixtures__/.chat-cards.md +57 -0
- package/src/stories/auth/.CompleteAccount.stories.md +36 -0
- package/src/stories/auth/.CreateOrganization.stories.md +52 -0
- package/src/stories/auth/.InviteLinkInvalid.stories.md +21 -0
- package/src/stories/auth/.Login.stories.md +32 -0
- package/src/stories/auth/.OpenFrameSso.stories.md +58 -0
- package/src/stories/auth/.PasswordReset.stories.md +49 -0
- package/src/styles/ods-interaction-states.css +32 -0
- package/src/types/.announcement.md +67 -35
- package/src/types/.blog.md +44 -41
- package/src/types/.case-study.md +31 -17
- package/src/types/.content-ref.md +37 -0
- package/src/types/.customer-interview.md +38 -38
- package/src/types/.doc-source.md +87 -0
- package/src/types/.entity-author.md +53 -0
- package/src/types/.entity-platform.md +40 -0
- package/src/types/.index.md +23 -17
- package/src/types/.marketing.md +32 -35
- package/src/types/.navigation.md +31 -19
- package/src/types/.os.types.md +30 -31
- package/src/types/.permissions.md +49 -35
- package/src/types/.platform.md +44 -28
- package/src/types/.product-release.md +59 -42
- package/src/types/.shell.types.md +46 -30
- package/src/types/.supabase.md +43 -29
- package/src/types/.tool.types.md +43 -23
- package/src/types/.video-processing.md +40 -31
- package/src/types/supabase.ts +80 -0
- package/src/types/video-processing.ts +1 -0
- package/src/utils/.announcement-storage.md +49 -17
- package/src/utils/.app-config.md +22 -18
- package/src/utils/.brand-marks.md +46 -0
- package/src/utils/.cn.md +40 -29
- package/src/utils/.color-analysis.md +34 -25
- package/src/utils/.common.md +43 -23
- package/src/utils/.content-href.md +64 -0
- package/src/utils/.content-ref-groups.md +51 -0
- package/src/utils/.date-utils.md +46 -35
- package/src/utils/.doc-path-utils.md +38 -0
- package/src/utils/.doc-tree-nav.md +51 -0
- package/src/utils/.embed-authed-fetch.md +48 -32
- package/src/utils/.embed-content-fetch.md +36 -0
- package/src/utils/.embed-url-converters.md +52 -0
- package/src/utils/.extract-items.md +49 -0
- package/src/utils/.faq-anchor.md +48 -0
- package/src/utils/.format.md +73 -55
- package/src/utils/.humanity-signals.md +59 -0
- package/src/utils/.index.md +73 -31
- package/src/utils/.list-url.md +43 -0
- package/src/utils/.markdown-section-extractor.md +57 -0
- package/src/utils/.markdown-to-plain.md +51 -0
- package/src/utils/.media-carousel-utils-stub.md +42 -31
- package/src/utils/.ods-color-utils.md +84 -43
- package/src/utils/.og-placeholder.md +45 -0
- package/src/utils/.page-header-constants.md +26 -0
- package/src/utils/.platform-config.md +34 -34
- package/src/utils/.release-badge.md +47 -0
- package/src/utils/.release-cover.md +45 -0
- package/src/utils/.same-page-hash-nav.md +45 -0
- package/src/utils/.scroll-into-view.md +32 -25
- package/src/utils/.seo-description.md +37 -0
- package/src/utils/.seo-title.md +25 -0
- package/src/utils/.social-embed-cache.md +37 -0
- package/src/utils/.source-icons.md +30 -34
- package/src/utils/.suggestion-url.md +46 -0
- package/src/utils/.tool-utils.md +39 -24
- package/src/utils/.tree-builder.md +64 -0
- package/src/utils/.video-bite-id.md +42 -0
- package/src/utils/announcement-storage.ts +9 -18
- package/src/utils/dev-sections/.dev-section-param-keys.md +51 -0
- package/src/utils/dev-sections/.openframe-dev-sections.md +40 -28
- package/src/utils/dismiss-cookie.ts +55 -0
- package/src/utils/dismissal-storage.ts +38 -0
- package/src/utils/index.ts +3 -0
- package/dist/chunk-BBUEY73L.js.map +0 -1
- package/dist/chunk-G3UN2DXU.cjs.map +0 -1
- package/dist/chunk-OWMLWJQY.cjs.map +0 -1
- package/dist/chunk-SASR7SK5.js.map +0 -1
- package/src/components/chat/utils/.onboarding-icons.md +0 -28
- package/src/hooks/.use-og-placeholder.md +0 -51
- /package/dist/{chunk-MGKCS6KS.js.map → chunk-3WCARCI4.js.map} +0 -0
- /package/dist/{chunk-Y3Y2DLNO.js.map → chunk-6UGYBCEN.js.map} +0 -0
- /package/dist/{chunk-PSPWT2Q5.js.map → chunk-7LWXWXEY.js.map} +0 -0
- /package/dist/{chunk-VTSRDC4W.js.map → chunk-CKC3EAYT.js.map} +0 -0
- /package/dist/{chunk-ZRANZNEA.js.map → chunk-JJE5TUZK.js.map} +0 -0
- /package/dist/{chunk-66BNAFO6.js.map → chunk-JQIUBFHL.js.map} +0 -0
- /package/dist/{chunk-2DIOV7BR.js.map → chunk-UPN6EFOM.js.map} +0 -0
- /package/dist/{chunk-4SMRQ4SN.js.map → chunk-WBL5Y4PS.js.map} +0 -0
- /package/dist/{chunk-FP4H6Y5O.js.map → chunk-WPYPSIY2.js.map} +0 -0
- /package/dist/{chunk-R5WJJL4V.js.map → chunk-X5X43HFV.js.map} +0 -0
- /package/dist/{chunk-DEHZ5CTC.js.map → chunk-XTWKDMCG.js.map} +0 -0
|
@@ -1,47 +1,58 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Pure presentation component for
|
|
1
|
+
<!-- source-hash: a793a81d6d93872c90072ec1575fa676 -->
|
|
2
|
+
Pure presentation component for displaying investor update entities across three density variants (`default`, `sm`, `portrait`), with no internal click logic — callers provide the resolved `href`.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `InvestorUpdateCard` | Main card component rendering one of three layouts based on the `size` prop |
|
|
9
|
+
| `InvestorUpdateCardSkeleton` | Loading placeholder matching the card's layout for `default`/`portrait` or `sm` density |
|
|
10
|
+
| `InvestorUpdateCardProps` | Props interface defining the card's API |
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
Loading placeholder matching the visual footprint of each density mode. Uses `animate-pulse` for the default size.
|
|
12
|
+
**Size variants:**
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|------|------|-------------|
|
|
18
|
-
| `update` | `InvestorUpdate` | Entity data |
|
|
19
|
-
| `href` | `string` | Resolved detail URL (caller-supplied) |
|
|
20
|
-
| `target` | `'_blank'` | Optional new-tab behavior |
|
|
21
|
-
| `placeholderUrl` | `string \| null` | OG fallback when `featured_image` is absent |
|
|
22
|
-
| `size` | `'default' \| 'sm'` | Card density (defaults to `'default'`) |
|
|
14
|
+
- **`default`** — Full card using `AdminContentCard` with cover image, title, summary, badge, and period meta
|
|
15
|
+
- **`sm`** — Compact horizontal layout (`EntityPortraitCard`-style) with image slot, title, update number badge, period subtitle, and truncated summary
|
|
16
|
+
- **`portrait`** — Rail/strip layout delegated to `EntityPortraitCard`, with optional content-type chip controlled by `showTypeBadge`
|
|
23
17
|
|
|
24
18
|
## Usage Example
|
|
25
19
|
|
|
26
20
|
```typescript
|
|
27
|
-
|
|
21
|
+
import { InvestorUpdateCard, InvestorUpdateCardSkeleton } from './investor-update-card'
|
|
22
|
+
|
|
23
|
+
// Default density
|
|
28
24
|
<InvestorUpdateCard
|
|
29
25
|
update={investorUpdate}
|
|
30
|
-
href=
|
|
31
|
-
|
|
26
|
+
href="/updates/q3-2024"
|
|
27
|
+
size="default"
|
|
32
28
|
/>
|
|
33
29
|
|
|
34
|
-
// Compact horizontal
|
|
30
|
+
// Compact horizontal (e.g., list/feed rows)
|
|
35
31
|
<InvestorUpdateCard
|
|
36
32
|
update={investorUpdate}
|
|
37
|
-
href=
|
|
33
|
+
href="/updates/q3-2024"
|
|
34
|
+
size="sm"
|
|
38
35
|
target="_blank"
|
|
39
36
|
rel="noopener noreferrer"
|
|
40
|
-
size="sm"
|
|
41
37
|
/>
|
|
42
38
|
|
|
43
|
-
//
|
|
39
|
+
// Portrait rail (mixed-type content strips)
|
|
40
|
+
<InvestorUpdateCard
|
|
41
|
+
update={investorUpdate}
|
|
42
|
+
href="/updates/q3-2024"
|
|
43
|
+
size="portrait"
|
|
44
|
+
showTypeBadge={true}
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
// Loading state
|
|
44
48
|
<InvestorUpdateCardSkeleton size="sm" />
|
|
45
49
|
```
|
|
46
50
|
|
|
47
|
-
|
|
51
|
+
**Key behaviours:**
|
|
52
|
+
- Falls back to a generated placeholder image via `useEntityCardPlaceholder` when `featured_image` is absent; aspect ratio is `square` for `sm`, `wide` otherwise
|
|
53
|
+
- Tab target and `rel` are resolved by `useEntityCardLink`, supporting cross-platform dispatch via `targetPlatform`
|
|
54
|
+
- Image `onError` hides broken images gracefully in the `sm` variant
|
|
55
|
+
|
|
56
|
+
## Source
|
|
57
|
+
|
|
58
|
+
[`investor-update-card.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/investor-update-card.tsx)
|
|
@@ -1,58 +1,49 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: a2963272b94148f7415e5c66d6d9d7b8 -->
|
|
2
|
+
Renders an onboarding guide entity card in four layout variants (`catalog`, `default`, `sm`, `portrait`), with runtime-derived link attributes and placeholder images sourced from `ChatRuntime` via hub-wired hooks.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `OnboardingGuideCard`
|
|
7
|
-
Main
|
|
7
|
+
Main export. Renders one of four variants based on the `size` prop:
|
|
8
|
+
- **`catalog`** — Rich detail card with hero image, title, summary, duration badge, and `EntityAuthorCard` author/section grid.
|
|
9
|
+
- **`default`** — Horizontal step-numbered card for "More in section" rails.
|
|
10
|
+
- **`sm`** — Compact horizontal card for inline chat rendering.
|
|
11
|
+
- **`portrait`** — Delegates to `EntityPortraitCard` for strip/rail density layouts.
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
|------|------|-------------|
|
|
11
|
-
| `guide` | `OnboardingGuide` | Guide entity data |
|
|
12
|
-
| `href` | `string` | Detail URL resolved by caller |
|
|
13
|
-
| `target` | `'_blank'` | Optional new-tab behavior |
|
|
14
|
-
| `size` | `'catalog' \| 'default' \| 'sm'` | Layout variant (default: `'default'`) |
|
|
15
|
-
| `placeholderUrl` | `string \| null` | OG fallback image for catalog/sm |
|
|
16
|
-
| `className` | `string` | Additional CSS classes |
|
|
13
|
+
Link `target`/`rel` are resolved via `useEntityCardLink`; placeholder images via `useEntityCardPlaceholder`. Explicit props always override runtime values.
|
|
17
14
|
|
|
18
15
|
### `OnboardingGuideCardSkeleton`
|
|
19
|
-
Loading placeholder
|
|
16
|
+
Loading placeholder matching the layout of each `size` variant. Supports `catalog`, `default`, and `sm`.
|
|
20
17
|
|
|
21
|
-
### `
|
|
22
|
-
Internal
|
|
23
|
-
|
|
24
|
-
## Variants
|
|
18
|
+
### `stripMarkdownPreview(text)`
|
|
19
|
+
Internal utility. Strips raw markdown syntax (fenced code blocks, headings, links, bold/italic markers) from guide summaries before rendering as prose. Hard-caps output at 240 characters to prevent CSS `line-clamp` failures from dumping full guide content into the card.
|
|
25
20
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
| `catalog` | Hero image + author grid | Public catalog page |
|
|
29
|
-
| `default` | Horizontal step-numbered | "More in section" rail |
|
|
30
|
-
| `sm` | Compact horizontal | Chat-inline rendering |
|
|
21
|
+
### `HORIZONTAL_SIZE_TOKENS`
|
|
22
|
+
Frozen design-token map scoping padding, icon sizing, and typography to the `default` variant.
|
|
31
23
|
|
|
32
24
|
## Usage Example
|
|
33
25
|
|
|
34
26
|
```typescript
|
|
35
27
|
import { OnboardingGuideCard, OnboardingGuideCardSkeleton } from './onboarding-guide-card'
|
|
36
28
|
|
|
37
|
-
//
|
|
38
|
-
if (isLoading) {
|
|
39
|
-
return <OnboardingGuideCardSkeleton size="catalog" />
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Catalog variant (public listing)
|
|
29
|
+
// Catalog variant (public guide listing page)
|
|
43
30
|
<OnboardingGuideCard
|
|
44
31
|
guide={guide}
|
|
45
32
|
href={`/guides/${guide.slug}`}
|
|
46
33
|
size="catalog"
|
|
47
|
-
|
|
34
|
+
showTypeBadge={false}
|
|
48
35
|
/>
|
|
49
36
|
|
|
50
|
-
//
|
|
37
|
+
// Compact inline variant (chat message)
|
|
51
38
|
<OnboardingGuideCard
|
|
52
39
|
guide={guide}
|
|
53
40
|
href={`/guides/${guide.slug}`}
|
|
54
41
|
size="sm"
|
|
55
42
|
target="_blank"
|
|
56
43
|
rel="noopener noreferrer"
|
|
44
|
+
placeholderUrl="https://api.example.com/og-placeholder.png"
|
|
57
45
|
/>
|
|
46
|
+
|
|
47
|
+
// Loading state
|
|
48
|
+
<OnboardingGuideCardSkeleton size="catalog" />
|
|
58
49
|
```
|
|
@@ -1,31 +1,38 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Provides
|
|
1
|
+
<!-- source-hash: 29cc203019f2ef9b57297e18679a37af -->
|
|
2
|
+
Provides lib-side default prop builders for `<ProductReleaseCard>`, covering both the compact `sm` (chat dispatch) and full `lg` (catalog page) card variants without requiring embedder-supplied extras.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### Interfaces
|
|
7
|
-
|
|
8
|
-
- **`
|
|
7
|
+
|
|
8
|
+
- **`ReleaseLike`** — Minimal shape for `sm` builder; covers image/video thumbnail and date fields
|
|
9
|
+
- **`RichReleaseLike`** — Extended shape for `lg` builder; adds `release_type`, `release_status`, `view_count`, `author`, and changelog arrays
|
|
10
|
+
- **`DerivedSmProps`** — Output type for the compact builder (`coverImage`, `hasVideoCover`, `formattedDate`)
|
|
11
|
+
- **`ProductReleaseCardDerivedProps`** — Full output type for the rich builder, including badge color, author, view count, and changelog counts
|
|
9
12
|
|
|
10
13
|
### Functions
|
|
11
|
-
|
|
12
|
-
- **`
|
|
14
|
+
|
|
15
|
+
- **`pickCover(item)`** *(internal)* — Selects the best cover image URL using a simplified sm-specific heuristic: prefers video thumbnails when a video URL is present, otherwise falls back to `featured_image` or `og_image_url`
|
|
16
|
+
- **`defaultBuildProductReleaseCardProps(item)`** — Lightweight builder for chat-dispatch `sm` cards; satisfies only the three fields the compact variant reads
|
|
17
|
+
- **`buildProductReleaseCardProps(item)`** — Rich `lg`-variant builder and the **default** for `<ProductReleasesView>`; populates the full metadata grid using `resolveReleaseCover` and `releaseTypeToBadgeColor`
|
|
13
18
|
|
|
14
19
|
## Usage Example
|
|
15
20
|
|
|
16
21
|
```typescript
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
import {
|
|
23
|
+
defaultBuildProductReleaseCardProps,
|
|
24
|
+
buildProductReleaseCardProps,
|
|
25
|
+
} from './product-release-card-defaults'
|
|
26
|
+
|
|
27
|
+
// Compact sm card (chat dispatch — no extras needed)
|
|
28
|
+
const smProps = defaultBuildProductReleaseCardProps(releaseRow)
|
|
29
|
+
// → { coverImage, hasVideoCover, formattedDate }
|
|
30
|
+
|
|
31
|
+
// Full lg card (ProductReleasesView default)
|
|
32
|
+
const lgProps = buildProductReleaseCardProps(releaseRow)
|
|
33
|
+
// → { coverImage, hasVideoCover, formattedDate, releaseType,
|
|
34
|
+
// releaseStatus, releaseTypeBadgeColor, viewCount,
|
|
35
|
+
// author, changelogCounts }
|
|
25
36
|
```
|
|
26
37
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- Uses `formatReleaseDate` (not `new Date().toLocaleDateString`) to avoid UTC off-by-one day shifts on date-only `YYYY-MM-DD` strings
|
|
30
|
-
- Produces an empty string for `formattedDate` when `release_date` is absent, rather than throwing
|
|
31
|
-
- lg-only fields (`changelogCounts`, badge color, view count) are intentionally omitted — hub embedders supply those via `extras`
|
|
38
|
+
> Hub-side embedders can override the default by passing a richer builder via `opts.extras.buildProductReleaseCardProps`. The `sm` builder intentionally diverges from `resolveReleaseCover` to avoid pulling hub-only dependencies into the lib bundle.
|
|
@@ -1,59 +1,56 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: d98ea9bb6ec08d6a08478099793fa07d -->
|
|
2
|
+
Presentation-only card component for programs (podcasts, webinars, events) supporting three density modes: `default`, `sm` (compact), and `portrait` (vertical rail).
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### Exports
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
| `ProgramCard<T>` | Generic Component | Main card component, typed against `BaseProgramItem` |
|
|
12
|
-
| `ProgramCardProps<T>` | Interface | Props contract for `ProgramCard` |
|
|
8
|
+
- **`ProgramCard<T>`** — Generic card component accepting any `BaseProgramItem` subtype; delegates to density-specific render branches
|
|
9
|
+
- **`ProgramCardSkeleton`** — Animated loading placeholder matching `default` or `sm` layout
|
|
10
|
+
- **`ProgramCardProps<T>`** — Interface defining all card inputs
|
|
13
11
|
|
|
14
|
-
### Internal
|
|
12
|
+
### Internal Utilities
|
|
15
13
|
|
|
16
|
-
- **`
|
|
17
|
-
- **`
|
|
14
|
+
- **`formatUtc(date, fmt)`** — UTC-pinned `date-fns` formatter that prevents React #418 hydration mismatches between server (UTC) and client (local) timezones
|
|
15
|
+
- **`getHosts(hosts)`** — Normalizes `ProgramHost[]` or raw JSON string into `{ name, avatar }[]`
|
|
16
|
+
- **`MediaGallery`** — Horizontally scrollable thumbnail strip with `ImageGalleryModal` lightbox on click
|
|
18
17
|
|
|
19
|
-
###
|
|
18
|
+
### Density Modes
|
|
20
19
|
|
|
21
20
|
| Size | Layout | Use Case |
|
|
22
|
-
|
|
23
|
-
| `default` |
|
|
24
|
-
| `sm` | Compact horizontal | Chat-inline
|
|
25
|
-
|
|
26
|
-
### Type-Aware Metadata
|
|
27
|
-
|
|
28
|
-
The card adapts displayed metadata based on `config.type`:
|
|
29
|
-
|
|
30
|
-
- **`podcast`** → Duration via `formatDurationCompact`
|
|
31
|
-
- **`event`** → Location name
|
|
32
|
-
- **`webinar`** → Start time + duration via `formatTimeWithTimezone` / `formatDurationFromRange`
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `default` | Wide horizontal with full detail | Archive/listing pages |
|
|
23
|
+
| `sm` | Compact horizontal row | Chat-inline cards |
|
|
24
|
+
| `portrait` | Vertical via `EntityPortraitCard` | Mixed-content rails |
|
|
33
25
|
|
|
34
26
|
## Usage Example
|
|
35
27
|
|
|
36
28
|
```typescript
|
|
37
|
-
import { ProgramCard } from './program-card'
|
|
29
|
+
import { ProgramCard, ProgramCardSkeleton } from './program-card'
|
|
30
|
+
import { podcastConfig } from '../config/podcast-config'
|
|
31
|
+
|
|
32
|
+
// Loading state
|
|
33
|
+
if (isLoading) return <ProgramCardSkeleton size="sm" />
|
|
38
34
|
|
|
39
|
-
// Default
|
|
35
|
+
// Default density
|
|
40
36
|
<ProgramCard
|
|
41
|
-
config={
|
|
37
|
+
config={podcastConfig}
|
|
42
38
|
item={episode}
|
|
43
|
-
|
|
39
|
+
media={episode.media}
|
|
40
|
+
href={`/podcasts/${episode.slug}`}
|
|
44
41
|
size="default"
|
|
45
42
|
/>
|
|
46
43
|
|
|
47
|
-
//
|
|
44
|
+
// Portrait for mixed-content rail
|
|
48
45
|
<ProgramCard
|
|
49
|
-
config={
|
|
50
|
-
item={
|
|
51
|
-
href=
|
|
46
|
+
config={webinarConfig}
|
|
47
|
+
item={webinar}
|
|
48
|
+
href={`/webinars/${webinar.slug}`}
|
|
49
|
+
size="portrait"
|
|
50
|
+
showTypeBadge={true}
|
|
52
51
|
target="_blank"
|
|
53
52
|
rel="noopener noreferrer"
|
|
54
|
-
size="sm"
|
|
55
|
-
placeholderUrl="https://cdn.example.com/og-fallback.png"
|
|
56
53
|
/>
|
|
57
54
|
```
|
|
58
55
|
|
|
59
|
-
>
|
|
56
|
+
> The card writes no click logic — callers wrap or pass `href` directly. Use `target="_blank"` with `rel="noopener noreferrer"` for cross-platform or embed contexts.
|
|
@@ -1,46 +1,55 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Pure presentation component for roadmap items
|
|
1
|
+
<!-- source-hash: 7154e56664d4c339b92c30b7f464bd80 -->
|
|
2
|
+
Pure presentation component for roadmap feature items, supporting two layout densities: a rich `default` card (with vote buttons, Figma links, and screenshot gallery) and a compact `sm` card for inline chat display.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
|
|
11
|
-
| `
|
|
6
|
+
### `RoadmapCard`
|
|
7
|
+
Main export. Renders either the full roadmap page card or a compact horizontal card based on the `size` prop.
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Description |
|
|
10
|
+
|------|------|-------------|
|
|
11
|
+
| `item` | `RoadmapItem` | Roadmap item data (title, status, description, votes, etc.) |
|
|
12
|
+
| `size` | `'default' \| 'sm'` | Layout density |
|
|
13
|
+
| `href` | `string` | Navigation URL (compact branch only) |
|
|
14
|
+
| `target` | `'_blank'` | Opens in new tab when set |
|
|
15
|
+
| `userVote` | `VoteType` | Current user's vote (`'up'`, `'down'`, or `null`) |
|
|
16
|
+
| `onVote` | `(type) => void` | Vote handler (default size only) |
|
|
17
|
+
| `isVoting` | `boolean` | Disables vote buttons during pending request |
|
|
18
|
+
| `id` | `string` | DOM id for `useScrollToHash` deep-linking (e.g. `roadmap-<external_id>`) |
|
|
19
|
+
|
|
20
|
+
### `RoadmapCardSkeleton`
|
|
21
|
+
Loading placeholder that mirrors the layout of either size variant using animated pulse placeholders.
|
|
22
|
+
|
|
23
|
+
### `VoteType`
|
|
24
|
+
```typescript
|
|
25
|
+
export type VoteType = 'up' | 'down' | null
|
|
26
|
+
```
|
|
12
27
|
|
|
13
28
|
## Usage Example
|
|
14
29
|
|
|
15
30
|
```typescript
|
|
16
|
-
// Default (
|
|
31
|
+
// Default rich card (roadmap page)
|
|
17
32
|
<RoadmapCard
|
|
18
|
-
|
|
33
|
+
id={`roadmap-${item.externalId}`}
|
|
34
|
+
item={item}
|
|
35
|
+
size="default"
|
|
19
36
|
userVote={currentVote}
|
|
20
37
|
onVote={(type) => handleVote(item.id, type)}
|
|
21
|
-
isVoting={
|
|
38
|
+
isVoting={votingInFlight}
|
|
22
39
|
/>
|
|
23
40
|
|
|
24
|
-
// Compact inline
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// Skeleton loader
|
|
41
|
+
// Compact card (chat inline, wrapped by parent anchor)
|
|
42
|
+
<RoadmapCard
|
|
43
|
+
item={item}
|
|
44
|
+
size="sm"
|
|
45
|
+
href={`/roadmap/${item.externalId}`}
|
|
46
|
+
target="_blank"
|
|
47
|
+
rel="noopener noreferrer"
|
|
48
|
+
cardType="roadmap_item"
|
|
49
|
+
/>
|
|
50
|
+
|
|
51
|
+
// Skeleton while loading
|
|
37
52
|
<RoadmapCardSkeleton size="sm" />
|
|
38
53
|
```
|
|
39
54
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
- **Icon resolution**: prefers `item.icon` (proxied), falls back to `TaskTypeIcon` for internal tasks, then initials
|
|
43
|
-
- **`sm` branch**: wraps content in `<a>` when `href` is valid; renders a static `<span>` when no href is available
|
|
44
|
-
- **Vote UI** (`default` only): rendered only when `onVote` is provided; buttons disabled during `isVoting`
|
|
45
|
-
- **Screenshot gallery**: controlled via local `showScreenshots` state; Figma link and screenshot count displayed as metadata badges in the compact branch
|
|
46
|
-
- **Responsive status badge**: shown inline on `md+` screens, moves below the header row on mobile
|
|
55
|
+
> **Icon fallback order (compact branch):** `TaskTypeIcon` (internal tasks) → proxied logo image → 2-letter title abbreviation.
|
|
@@ -1,52 +1,49 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: 289ff1c6a5daf3110837897be5b2e698 -->
|
|
2
|
+
A presentational thumbs-up/thumbs-down vote button component used within `RoadmapCard`'s default variant. Delegates all interaction logic to the parent via an `onClick` prop.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|--------|------|-------------|
|
|
8
|
-
| `RoadmapVoteButtonProps` | `interface` | Prop contract for the button |
|
|
9
|
-
| `RoadmapVoteButton` | `function` | Styled outline button with thumb icon and count |
|
|
6
|
+
### `RoadmapVoteButton`
|
|
10
7
|
|
|
11
|
-
|
|
8
|
+
The sole export — a styled `Button` wrapper that renders either a `ThumbsUpIcon` or `ThumbsDownIcon` based on `voteType`, with optional vote count display and active/disabled states.
|
|
9
|
+
|
|
10
|
+
### `RoadmapVoteButtonProps`
|
|
12
11
|
|
|
13
12
|
| Prop | Type | Default | Description |
|
|
14
|
-
|
|
15
|
-
| `voteType` | `'up' \| 'down'` | — |
|
|
16
|
-
| `count` | `number` | — | Vote
|
|
17
|
-
| `isActive` | `boolean` | — | Applies active background when the user has voted |
|
|
18
|
-
| `onClick` | `() => void` | — | Click handler
|
|
19
|
-
| `disabled` | `boolean` | `false` |
|
|
20
|
-
| `showCount` | `boolean` | `true` | Toggles count label
|
|
21
|
-
| `color` | `string` | — |
|
|
22
|
-
| `className` | `string` | — | Additional
|
|
13
|
+
|---|---|---|---|
|
|
14
|
+
| `voteType` | `'up' \| 'down'` | — | Determines which icon to render |
|
|
15
|
+
| `count` | `number` | — | Vote count displayed alongside the icon |
|
|
16
|
+
| `isActive` | `boolean` | — | Applies active background styling when the user has voted |
|
|
17
|
+
| `onClick` | `() => void` | — | Click handler; typically wired from a `useRoadmapVoting` hook |
|
|
18
|
+
| `disabled` | `boolean` | `false` | Prevents interaction and applies reduced opacity |
|
|
19
|
+
| `showCount` | `boolean` | `true` | Toggles visibility of the vote count label |
|
|
20
|
+
| `color` | `string` | — | Optional color override passed to the icon |
|
|
21
|
+
| `className` | `string` | — | Additional classes merged via `cn()` |
|
|
23
22
|
|
|
24
23
|
## Usage Example
|
|
25
24
|
|
|
26
25
|
```typescript
|
|
27
26
|
import { RoadmapVoteButton } from './roadmap-vote-button'
|
|
28
27
|
|
|
29
|
-
function RoadmapCard() {
|
|
30
|
-
const {
|
|
28
|
+
function RoadmapCard({ item }) {
|
|
29
|
+
const { upvoteCount, hasUpvoted, handleUpvote } = useRoadmapVoting(item.id)
|
|
31
30
|
|
|
32
31
|
return (
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/>
|
|
41
|
-
<RoadmapVoteButton
|
|
42
|
-
voteType="down"
|
|
43
|
-
count={0}
|
|
44
|
-
isActive={false}
|
|
45
|
-
onClick={() => handleVote('down')}
|
|
46
|
-
showCount={false}
|
|
47
|
-
disabled
|
|
48
|
-
/>
|
|
49
|
-
</div>
|
|
32
|
+
<RoadmapVoteButton
|
|
33
|
+
voteType="up"
|
|
34
|
+
count={upvoteCount}
|
|
35
|
+
isActive={hasUpvoted}
|
|
36
|
+
onClick={handleUpvote}
|
|
37
|
+
disabled={!isAuthenticated}
|
|
38
|
+
/>
|
|
50
39
|
)
|
|
51
40
|
}
|
|
52
|
-
```
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Notes
|
|
44
|
+
|
|
45
|
+
- Pure presentational component — no internal state or data fetching.
|
|
46
|
+
- Active state (`isActive`) applies `bg-ods-border` styling to visually distinguish a cast vote.
|
|
47
|
+
- Uses the `cn()` utility for conditional class merging; all ODS design tokens (`ods-bg`, `ods-border`) follow the OpenFrame Design System conventions.
|
|
48
|
+
|
|
49
|
+
**Source:** [`roadmap-vote-button.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/roadmap-vote-button.tsx)
|
|
@@ -1,48 +1,47 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Renders a visual card
|
|
1
|
+
<!-- source-hash: 39388beb5287597e62780b1e9b0cd15d -->
|
|
2
|
+
Renders a visual card for Slack message markers in two layout variants (`compact` and `row`), with a matching skeleton loader for loading states. Pure presentation component — navigation behavior is injected externally via `anchorProps`.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Animated placeholder matching the card layout for loading states. Accepts `variant` and `className` props.
|
|
14
|
-
|
|
15
|
-
### `parseChannelFromUrl` *(internal)*
|
|
16
|
-
Extracts the Slack channel ID from a Slack archive URL (`*.slack.com/archives/<channelId>/...`) as a fallback when `item.channel` is not set.
|
|
17
|
-
|
|
18
|
-
### Interfaces
|
|
19
|
-
|
|
20
|
-
| Interface | Purpose |
|
|
21
|
-
|---|---|
|
|
22
|
-
| `SlackMessageCardProps` | `item`, `variant`, `className`, `anchorProps` |
|
|
23
|
-
| `SlackMessageCardAnchorProps` | Typed `<a>` prop bundle composed by the caller |
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `SlackMessageCard` | Component | Main card rendering a `SlackMessageItem` in `compact` (default) or `row` layout |
|
|
9
|
+
| `SlackMessageCardSkeleton` | Component | Animated placeholder matching the card's layout during data fetching |
|
|
10
|
+
| `SlackMessageCardProps` | Interface | Props for `SlackMessageCard`: `item`, `variant`, `className`, `anchorProps` |
|
|
11
|
+
| `SlackMessageCardAnchorProps` | Interface | Anchor prop bundle (`href`, `target`, `rel`, `onClick`) composed by the caller |
|
|
12
|
+
| `parseChannelFromUrl` | Helper (private) | Extracts the Slack channel ID from a `*.slack.com/archives/<channel>` URL |
|
|
24
13
|
|
|
25
14
|
## Usage Example
|
|
26
15
|
|
|
27
16
|
```typescript
|
|
28
17
|
import { SlackMessageCard, SlackMessageCardSkeleton } from './slack-message-card'
|
|
18
|
+
import type { SlackMessageItem } from '../types/entities/slack-message'
|
|
19
|
+
|
|
20
|
+
const item: SlackMessageItem = {
|
|
21
|
+
title: 'Deployment alert',
|
|
22
|
+
preview: 'Production deploy succeeded at 14:32 UTC.',
|
|
23
|
+
url: 'https://myteam.slack.com/archives/C01AB2CD3EF/p1234567890',
|
|
24
|
+
channel: null,
|
|
25
|
+
dateUpdated: '2024-06-01T14:32:00Z',
|
|
26
|
+
}
|
|
29
27
|
|
|
30
|
-
// Compact card with
|
|
28
|
+
// Compact card with external navigation
|
|
29
|
+
<SlackMessageCard item={item} />
|
|
30
|
+
|
|
31
|
+
// Compact card with caller-controlled navigation (e.g. SPA router)
|
|
31
32
|
<SlackMessageCard
|
|
32
|
-
item={
|
|
33
|
-
variant="compact"
|
|
33
|
+
item={item}
|
|
34
34
|
anchorProps={{
|
|
35
|
-
href: '/messages/
|
|
36
|
-
onClick: (e) =>
|
|
35
|
+
href: '/messages/42',
|
|
36
|
+
onClick: (e) => { e.preventDefault(); router.push('/messages/42') },
|
|
37
37
|
}}
|
|
38
38
|
/>
|
|
39
39
|
|
|
40
|
-
// Inline row
|
|
41
|
-
<SlackMessageCard
|
|
42
|
-
item={slackMessageItem}
|
|
43
|
-
variant="row"
|
|
44
|
-
/>
|
|
40
|
+
// Inline row layout (e.g. inside a list or table)
|
|
41
|
+
<SlackMessageCard item={item} variant="row" />
|
|
45
42
|
|
|
46
|
-
//
|
|
43
|
+
// Loading state
|
|
47
44
|
<SlackMessageCardSkeleton variant="compact" />
|
|
48
|
-
```
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Anchor resolution priority:** `anchorProps` → `item.url` (opens `_blank`) → static `<span>` when no URL is available.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: f3c02d66e41de5152b76a04f3d0f2e14 -->
|
|
2
|
+
Manages a two-step cover image fallback chain for entity cards: real cover URL → branded placeholder URL → `null` (hide the media element).
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `useCoverImageFallback(imageUrl?, placeholderUrl?)`
|
|
7
|
+
Primary hook implementing the fallback chain. Tracks failed URLs in a `Set` so derived `src` re-resolves instantly on prop changes without reset effects or retry loops.
|
|
8
|
+
|
|
9
|
+
**Returns `CoverImageFallback`:**
|
|
10
|
+
|
|
11
|
+
| Field | Type | Description |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `src` | `string \| null` | First non-failed URL from `[imageUrl, placeholderUrl]`, or `null` |
|
|
14
|
+
| `onError` | `() => void` | Wire directly to the media element's `onError` handler |
|
|
15
|
+
|
|
16
|
+
### `hideOnError`
|
|
17
|
+
Standalone event handler for compact image slots with no placeholder chain. Sets `display: none` on the broken image element, leaving the slot background visible.
|
|
18
|
+
|
|
19
|
+
## Usage Example
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { useCoverImageFallback, hideOnError } from './use-cover-image-fallback'
|
|
23
|
+
|
|
24
|
+
// Full fallback chain (cover → placeholder → hide slot)
|
|
25
|
+
function EntityCard({ coverUrl, placeholderUrl }) {
|
|
26
|
+
const { src, onError } = useCoverImageFallback(coverUrl, placeholderUrl)
|
|
27
|
+
|
|
28
|
+
if (!src) return <div className="empty-media-slot" />
|
|
29
|
+
|
|
30
|
+
return <img src={src} onError={onError} alt="Cover" />
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Compact card — no placeholder, just hide on break
|
|
34
|
+
function CompactCard({ coverUrl }) {
|
|
35
|
+
return <img src={coverUrl} onError={hideOnError} alt="Cover" />
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Design Notes
|
|
40
|
+
|
|
41
|
+
- **No retry loops:** failed URLs are stored in a `Set`; once marked failed they are skipped permanently for the component's lifetime.
|
|
42
|
+
- **Prop-change safe:** `src` is fully derived — passing a new `coverUrl` re-resolves immediately with no `useEffect` reset needed.
|
|
43
|
+
- **Centralised logic:** replaces per-card `imageError` state and `displayImage` ternaries that previously drifted across `BlogCard` and `EntityPortraitCard`.
|
|
44
|
+
|
|
45
|
+
## Source
|
|
46
|
+
|
|
47
|
+
[`use-cover-image-fallback.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-cover-image-fallback.ts)
|