@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,46 +1,45 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 6a2710f318159a01ed58b31f201488ba -->
|
|
2
|
+
Transitional shim component that forwards its props to `<VideoBitesStrip>`, preserving the legacy four-prop signature for hub call sites during migration.
|
|
3
|
+
|
|
4
|
+
> ⚠️ **Deprecated** — this component is scheduled for deletion after the hub-side migration completes. Use [`<VideoBitesStrip>`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/components/video-bites/video-bites-strip.tsx) directly in all new code.
|
|
3
5
|
|
|
4
6
|
## Key Components
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
|
9
|
-
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
8
|
+
### `VideoBitesDisplayProps`
|
|
9
|
+
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
|---|---|---|---|
|
|
12
|
+
| `bites` | `VideoTeaser[]` | — | Array of video bites/teasers to render |
|
|
13
|
+
| `title` | `string` | `DEFAULT_VIDEO_BITES_TITLE` | Section heading text |
|
|
14
|
+
| `filterPublished` | `boolean` | `true` | When true, only published bites are shown |
|
|
15
|
+
| `showTitle` | `boolean` | `true` | Toggles visibility of the section heading |
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
### `VideoBitesDisplay`
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
- **Aspect ratio grouping**: When multiple ratios exist, renders `<RatioTabs>`; otherwise falls back to a flat `<BiteGrid>`
|
|
17
|
-
- **CLS prevention**: `LazyBite` uses a CSS `aspect-ratio` placeholder matching the bite's ratio before the player mounts; `layout="fill"` on `<Video>` fills the card from first paint
|
|
18
|
-
- **Player routing**: All bites go through the `<Video>` primitive (no raw `VideoPlayer` carve-out) since MuxPlayer loads its HLS engine lazily
|
|
19
|
+
Client component that passes all four props directly to `<VideoBitesStrip>` with no additional logic.
|
|
19
20
|
|
|
20
21
|
## Usage Example
|
|
21
22
|
|
|
22
23
|
```typescript
|
|
23
|
-
|
|
24
|
-
import
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
```
|
|
24
|
+
// ⚠️ Deprecated — prefer VideoBitesStrip directly
|
|
25
|
+
import { VideoBitesDisplay } from '@openframe/lib/components/video-bites';
|
|
26
|
+
|
|
27
|
+
<VideoBitesDisplay
|
|
28
|
+
bites={videoTeasers}
|
|
29
|
+
title="Latest Clips"
|
|
30
|
+
filterPublished={true}
|
|
31
|
+
showTitle={true}
|
|
32
|
+
/>
|
|
33
|
+
|
|
34
|
+
// ✅ Preferred replacement
|
|
35
|
+
import { VideoBitesStrip } from '@openframe/lib/components/video-bites';
|
|
36
|
+
|
|
37
|
+
<VideoBitesStrip
|
|
38
|
+
bites={videoTeasers}
|
|
39
|
+
title="Latest Clips"
|
|
40
|
+
filterPublished={true}
|
|
41
|
+
showTitle={true}
|
|
42
|
+
/>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Do not add features or new consumers to this component. Track migration progress via the grep gate described in the JSDoc before removal.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- source-hash: e280ed2bbd7fa3083e59e5490366cc24 -->
|
|
2
|
+
Server-safe shared utilities for the video-bites surface, providing a title constant, profile adapter, and sort comparator that can be imported in server-side contexts without pulling in client-only dependencies.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `DEFAULT_VIDEO_BITES_TITLE` | `const` | Canonical section title string (`'Key Moments'`) |
|
|
9
|
+
| `VideoBiteStripProfile` | `interface` | Profile shape rendered in the strip's hover overlay |
|
|
10
|
+
| `toStripProfile()` | function | Adapter that maps repo-wide author/user rows to `VideoBiteStripProfile` |
|
|
11
|
+
| `sortBitesByCreatedAtDesc()` | function | Null-safe `created_at`-descending comparator for `VideoTeaser` arrays |
|
|
12
|
+
|
|
13
|
+
## Usage Example
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import {
|
|
17
|
+
DEFAULT_VIDEO_BITES_TITLE,
|
|
18
|
+
toStripProfile,
|
|
19
|
+
sortBitesByCreatedAtDesc,
|
|
20
|
+
} from '@flamingo-stack/openframe-frontend-core/components/features/video-bites-shared'
|
|
21
|
+
|
|
22
|
+
// Section title
|
|
23
|
+
console.log(DEFAULT_VIDEO_BITES_TITLE) // 'Key Moments'
|
|
24
|
+
|
|
25
|
+
// Map an author row → strip profile (returns null when full_name is absent)
|
|
26
|
+
const profile = toStripProfile(
|
|
27
|
+
{ full_name: 'Ada Lovelace', avatar_url: '/avatars/ada.jpg', job_title: 'Engineer' },
|
|
28
|
+
'Contributor', // fallback subtitle
|
|
29
|
+
)
|
|
30
|
+
// → { name: 'Ada Lovelace', avatarUrl: '/avatars/ada.jpg', subtitle: 'Engineer' }
|
|
31
|
+
|
|
32
|
+
const profile2 = toStripProfile(null) // → null
|
|
33
|
+
|
|
34
|
+
// Sort bites newest-first; missing created_at sorts last
|
|
35
|
+
const sorted = [...videoBites].sort(sortBitesByCreatedAtDesc)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Notes
|
|
39
|
+
|
|
40
|
+
- **Server-safe by design** — no React imports, no `'use client'` directive. Mirrors the same isolation pattern as `mux-origins.ts`.
|
|
41
|
+
- `toStripProfile` returns `null` (never `{ name: '' }`) when `full_name` is absent, enabling safe `profile ?? fallback` chains at call sites.
|
|
42
|
+
- Client components (`<VideoBitesStrip>`, the features barrel) re-export from this file — definitions must never be duplicated.
|
|
43
|
+
|
|
44
|
+
**Source:** [`video-bites-shared.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video-bites-shared.ts)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<!-- source-hash: f6cb5509048904127db3df5bae07f87b -->
|
|
2
|
+
Brief description: `video-bites-strip.tsx` is the unified public video-bites surface component that renders a horizontally scrolling marquee strip of video preview cards with hover-activated muted autoplay, built on the shared `CardsStrip` engine.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `VideoBitesStrip`
|
|
7
|
+
The main section-level component. Filters and sorts bites by publish status and creation date, warms up Mux/Supabase origins, and delegates rendering to `CardsStrip` via render-prop.
|
|
8
|
+
|
|
9
|
+
### `VideoBiteCard`
|
|
10
|
+
The individual card component, exported for reuse in the admin bites editor. Manages:
|
|
11
|
+
- Hover activation (controlled by strip or self-managed standalone)
|
|
12
|
+
- Player mount gating via a two-way `IntersectionObserver` (~500px root margin) to bound live `MuxPlayer` instances to the visible strip width
|
|
13
|
+
- Rendition-capped preview URLs via `toMuxPreviewUrl` (720p cap for HLS)
|
|
14
|
+
- Overlay navigation (anchor or button depending on `href` vs `onNavigate`)
|
|
15
|
+
|
|
16
|
+
### Key Types
|
|
17
|
+
- **`VideoBiteStripItem`** — extends `VideoTeaserWithRatio` with per-bite `profile`, `href`, and `onNavigate`
|
|
18
|
+
- **`VideoBitesStripProps`** — section-level config: bites array, title, scroll behavior, card dimensions, chevrons
|
|
19
|
+
- **`VideoBiteCardProps`** — card-level config: controlled vs. self-managed hover/mount, toolbar slot, inline title editing
|
|
20
|
+
|
|
21
|
+
## Usage Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { VideoBitesStrip } from './video-bites-strip';
|
|
25
|
+
|
|
26
|
+
// Section-level strip (typical public page usage)
|
|
27
|
+
<VideoBitesStrip
|
|
28
|
+
bites={bites}
|
|
29
|
+
title="Key Moments"
|
|
30
|
+
profile={{ name: 'Acme Corp', avatarUrl: '/logo.png' }}
|
|
31
|
+
href="/entity/acme"
|
|
32
|
+
autoScroll
|
|
33
|
+
autoScrollSpeed={60}
|
|
34
|
+
cardHeightDesktop={416}
|
|
35
|
+
cardHeightMobile={300}
|
|
36
|
+
/>
|
|
37
|
+
|
|
38
|
+
// Standalone card (admin editor — self-managed hover/mount)
|
|
39
|
+
import { VideoBiteCard } from './video-bites-strip';
|
|
40
|
+
|
|
41
|
+
<VideoBiteCard
|
|
42
|
+
bite={bite}
|
|
43
|
+
index={0}
|
|
44
|
+
profile={profile}
|
|
45
|
+
toolbar={<AdminToolbar />}
|
|
46
|
+
titleEditable
|
|
47
|
+
onTitleCommit={handleTitleSave}
|
|
48
|
+
/>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Architecture Notes
|
|
52
|
+
|
|
53
|
+
```mermaid
|
|
54
|
+
graph TD
|
|
55
|
+
A[VideoBitesStrip] --> B[CardsStrip engine]
|
|
56
|
+
B --> C[VideoBiteCard]
|
|
57
|
+
C --> D[Video / MuxPlayer]
|
|
58
|
+
C --> E[IntersectionObserver gate]
|
|
59
|
+
A --> F[useVideoWarmup]
|
|
60
|
+
A --> G[sortBitesByCreatedAtDesc]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Source:** [`video-bites-strip.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video-bites-strip.tsx)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!-- source-hash: 4badfa3be12a3b317bb3a4fb9a73fba2 -->
|
|
2
|
+
Defines the canonical center-overlay glyph components used for play and unmute affordances across all video surfaces in the project — solid white icons with a legibility drop-shadow and no background disc.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Types & Constants
|
|
7
|
+
|
|
8
|
+
- **`VideoCenterBadgeSize`** — Union type `'sm' | 'md' | 'lg'` controlling icon pixel size (20 / 56 / 64px respectively)
|
|
9
|
+
- **`SIZES`** — Size map: `sm` for gallery thumbnails, `md` for strip cards/unmute chip, `lg` for hero facades
|
|
10
|
+
- **`GLYPH_SHADOW`** — Shared CSS `drop-shadow` filter applied to all glyphs for legibility over arbitrary video frames
|
|
11
|
+
|
|
12
|
+
### Exports
|
|
13
|
+
|
|
14
|
+
- **`VideoPlayBadge`** — Decorative (`pointer-events-none`) play glyph rendered via `PlayFilledIcon`. Host surfaces own click activation; accent color applied externally via `group-hover:text-ods-accent`
|
|
15
|
+
- **`VideoUnmuteGlyph`** — Muted-volume glyph rendered via `VolumeOffFilledIcon`. Used by `<FilePlayer>`'s unmute button; shares the same visual identity as `VideoPlayBadge`
|
|
16
|
+
|
|
17
|
+
## Usage Example
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// Play badge on a video poster (e.g. VideoBiteCard)
|
|
21
|
+
<div className="group relative">
|
|
22
|
+
<img src={posterUrl} alt={title} />
|
|
23
|
+
<VideoPlayBadge
|
|
24
|
+
size="md"
|
|
25
|
+
className="absolute inset-0 m-auto group-hover:text-ods-accent"
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
// Unmute chip in FilePlayer
|
|
30
|
+
<button onClick={handleUnmute}>
|
|
31
|
+
<VideoUnmuteGlyph size="md" className="text-ods-text-primary" />
|
|
32
|
+
</button>
|
|
33
|
+
|
|
34
|
+
// Small glyph for MediaCarousel thumbnails
|
|
35
|
+
<VideoPlayBadge size="sm" className="group-hover:text-ods-accent" />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Consumers:** `<VideoBiteCard>`, `<YouTubeFacade>`, `<MediaCarousel>`, `<FilePlayer>`. MuxPlayer's native center button is aligned to this glyph language via `styles/app-globals.css`.
|
|
@@ -1,56 +1,63 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Aspect-ratio tab and grouping primitives for video
|
|
1
|
+
<!-- source-hash: 98c77db08c2b5bd65885d9fe120e315e -->
|
|
2
|
+
Aspect-ratio tab and grouping primitives for video surfaces, shared between admin editors and the public `VideoBitesStrip` component.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
### Types
|
|
7
|
-
|
|
8
|
-
- **`
|
|
9
|
-
- **`RatioCategory`** — Grid grouping
|
|
6
|
+
### Types
|
|
7
|
+
|
|
8
|
+
- **`VizardAspectRatio`** — Union type for Vizard clip extraction ratios: `'9:16' | '16:9' | '1:1'`
|
|
9
|
+
- **`RatioCategory`** — Grid/tab grouping category: `'portrait' | 'square' | 'landscape'`
|
|
10
|
+
- **`VideoTeaserWithRatio`** — Extends `VideoTeaser` with an optional `aspect_ratio` field; canonical type for display/aggregation code
|
|
10
11
|
|
|
11
12
|
### Constants
|
|
12
|
-
|
|
13
|
-
- **`
|
|
13
|
+
|
|
14
|
+
- **`RATIO_GRID_CLASS`** — Tailwind grid classes per `RatioCategory` (admin editors)
|
|
15
|
+
- **`RATIO_TO_CSS_ASPECT`** — CSS `aspect-ratio` values per category, consumed by strip cards and placeholders
|
|
14
16
|
|
|
15
17
|
### Components
|
|
16
|
-
|
|
18
|
+
|
|
19
|
+
- **`RatioTabs`** — Tab wrapper rendering only populated ratio groups; uses `forceMount` + CSS hiding to prevent scroll-jump on tab switch. Collapses to a flat render when only one ratio has content.
|
|
17
20
|
|
|
18
21
|
### Utilities
|
|
19
|
-
|
|
20
|
-
- **`
|
|
21
|
-
- **`
|
|
22
|
+
|
|
23
|
+
- **`detectAspectRatio(ratioString?, width?, height?)`** — Resolves a `VizardAspectRatio` from a Vizard ratio string, falling back to dimension inference. Defaults to `'9:16'`.
|
|
24
|
+
- **`ratioToCategory(ratio)`** — Maps a `VizardAspectRatio` to its `RatioCategory`
|
|
25
|
+
- **`groupByAspectRatio(items, getAspectRatio)`** — Buckets an array into portrait/square/landscape groups; includes `hasMultiple` flag for downstream tab-vs-grid decisions
|
|
22
26
|
|
|
23
27
|
## Usage Example
|
|
24
28
|
|
|
25
29
|
```typescript
|
|
26
30
|
import {
|
|
27
|
-
RatioTabs,
|
|
28
|
-
groupByAspectRatio,
|
|
29
31
|
detectAspectRatio,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
groupByAspectRatio,
|
|
33
|
+
RatioTabs,
|
|
34
|
+
RATIO_TO_CSS_ASPECT,
|
|
32
35
|
} from './video-ratio-tabs';
|
|
33
36
|
|
|
34
|
-
//
|
|
37
|
+
// Detect ratio from Vizard metadata, with dimension fallback
|
|
38
|
+
const ratio = detectAspectRatio(bite.aspect_ratio, bite.width, bite.height);
|
|
39
|
+
// → '9:16'
|
|
40
|
+
|
|
41
|
+
// Group bites into buckets
|
|
35
42
|
const { portrait, square, landscape, hasMultiple } = groupByAspectRatio(
|
|
36
|
-
|
|
37
|
-
(
|
|
43
|
+
bites,
|
|
44
|
+
(b) => detectAspectRatio(b.aspect_ratio),
|
|
38
45
|
);
|
|
39
46
|
|
|
40
|
-
// Render
|
|
47
|
+
// Render tabbed grid (admin editors only)
|
|
41
48
|
<RatioTabs
|
|
42
49
|
groups={{
|
|
43
|
-
portrait: {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div className={RATIO_DISPLAY_GRID_CLASS.portrait}>
|
|
47
|
-
{portrait.map((c) => <ClipCard key={c.id} clip={c} />)}
|
|
48
|
-
</div>
|
|
49
|
-
),
|
|
50
|
-
},
|
|
51
|
-
square: { count: square.length, render: () => <SquareGrid items={square} /> },
|
|
52
|
-
landscape: { count: landscape.length, render: () => <LandscapeGrid items={landscape} /> },
|
|
50
|
+
portrait: { count: portrait.length, render: () => <PortraitGrid items={portrait} /> },
|
|
51
|
+
square: { count: square.length, render: () => <SquareGrid items={square} /> },
|
|
52
|
+
landscape:{ count: landscape.length, render: () => <LandscapeGrid items={landscape} /> },
|
|
53
53
|
}}
|
|
54
54
|
defaultTab="portrait"
|
|
55
55
|
/>
|
|
56
|
-
|
|
56
|
+
|
|
57
|
+
// Apply CSS aspect-ratio in strip cards
|
|
58
|
+
const aspectStyle = { aspectRatio: RATIO_TO_CSS_ASPECT['portrait'] }; // '9 / 16'
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
> **Scope note:** `RatioTabs` and `RATIO_GRID_CLASS` are admin-only (`VideoBitesEditor`, `VideoLibraryGrid`). The public `VideoBitesStrip` consumes only `detectAspectRatio` and `RATIO_TO_CSS_ASPECT`.
|
|
62
|
+
|
|
63
|
+
**Source:** [`lib/components/video-ratio-tabs.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/lib/components/video-ratio-tabs.tsx)
|
|
@@ -1,40 +1,41 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: dbedaa2fa25b04c2c550b2eefc8f1a0d -->
|
|
2
|
+
Reusable React component that lets users switch between a YouTube URL input and a direct video upload, preserving both values across source-type toggles.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
###
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
6
|
+
### `VideoSourceSelector` (main export)
|
|
7
|
+
Controlled component rendering a YouTube/Upload toggle with:
|
|
8
|
+
- **YouTube mode** – URL text input with configurable placeholder and helper text
|
|
9
|
+
- **Upload mode** – file picker trigger, progress bar (custom or built-in fallback), error display, and video preview
|
|
10
|
+
- Supports optional AI-generated badge, custom preview/progress components, and disabled state
|
|
10
11
|
|
|
11
|
-
###
|
|
12
|
-
|
|
13
|
-
|---|---|
|
|
14
|
-
| `isUploading` | Tracks active upload operation |
|
|
15
|
-
| `uploadProgress` | Numeric progress (0–100) |
|
|
16
|
-
| `uploadMessage` | Status message during upload |
|
|
17
|
-
| `uploadError` | Error string if upload fails |
|
|
12
|
+
### `DefaultVideoPreview` (internal)
|
|
13
|
+
Fallback preview rendered when no `VideoPreviewComponent` prop is supplied. Wraps the shared `<Video>` component (Mux HLS / MP4) inside a `16:9` aspect-ratio container with a floating delete button.
|
|
18
14
|
|
|
19
|
-
###
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
### Types
|
|
16
|
+
| Export | Description |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `VideoSourceType` | `'youtube' \| 'uploaded'` |
|
|
19
|
+
| `VideoSourceSelectorProps` | Full prop interface with JSDoc on every field |
|
|
22
20
|
|
|
23
21
|
## Usage Example
|
|
24
22
|
|
|
25
23
|
```typescript
|
|
26
24
|
import { VideoSourceSelector, VideoSourceType } from './video-source-selector';
|
|
25
|
+
import { useState } from 'react';
|
|
27
26
|
|
|
28
|
-
function
|
|
27
|
+
function CourseEditor() {
|
|
29
28
|
const [sourceType, setSourceType] = useState<VideoSourceType>('youtube');
|
|
30
29
|
const [youtubeUrl, setYoutubeUrl] = useState('');
|
|
31
|
-
const [
|
|
30
|
+
const [uploadedUrl, setUploadedUrl] = useState('');
|
|
32
31
|
|
|
33
32
|
const handleUpload = async (file: File, onProgress?: (p: number) => void) => {
|
|
34
33
|
const formData = new FormData();
|
|
35
34
|
formData.append('file', file);
|
|
36
|
-
//
|
|
37
|
-
|
|
35
|
+
// Call your upload endpoint; report progress via onProgress
|
|
36
|
+
const res = await fetch('/api/upload-video', { method: 'POST', body: formData });
|
|
37
|
+
const { url } = await res.json();
|
|
38
|
+
return url; // returned URL stored in uploadedUrl
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
return (
|
|
@@ -43,8 +44,8 @@ function MyForm() {
|
|
|
43
44
|
onVideoSourceTypeChange={setSourceType}
|
|
44
45
|
youtubeUrl={youtubeUrl}
|
|
45
46
|
onYoutubeUrlChange={setYoutubeUrl}
|
|
46
|
-
mainVideoUrl={
|
|
47
|
-
onMainVideoUrlChange={
|
|
47
|
+
mainVideoUrl={uploadedUrl}
|
|
48
|
+
onMainVideoUrlChange={setUploadedUrl}
|
|
48
49
|
onUploadVideo={handleUpload}
|
|
49
50
|
isAIGenerated={false}
|
|
50
51
|
title="Course Video"
|
|
@@ -53,8 +54,4 @@ function MyForm() {
|
|
|
53
54
|
}
|
|
54
55
|
```
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- Switching between `youtube` and `uploaded` tabs **preserves both values** — no data is cleared on toggle
|
|
59
|
-
- Accepts optional `VideoPreviewComponent` and `UploadProgressComponent` for custom rendering; falls back to built-in implementations if omitted
|
|
60
|
-
- All text labels and placeholders are customizable via props for reuse across different contexts
|
|
57
|
+
**Source:** [`video-source-selector.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video-source-selector.tsx)
|
|
@@ -1,44 +1,52 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Renders video content from YouTube URLs,
|
|
1
|
+
<!-- source-hash: 9c0955b67c6b1b22bab746a927f92650 -->
|
|
2
|
+
Renders video content from YouTube URLs, file URLs (HLS/MP4), or bare YouTube IDs with automatic source detection, three layout modes, and optional hover-play/muted-autoplay behavior.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- **`
|
|
9
|
-
- **`VideoLayout`** — `'centered'
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
### Exports
|
|
7
|
+
|
|
8
|
+
- **`extractYouTubeId(url: string): string | null`** — Parses any YouTube URL shape or bare 11-char ID into a video ID. Uses strict `URL` parsing with anchored regexes to prevent ReDoS attacks.
|
|
9
|
+
- **`VideoLayout`** — Union type: `'centered' | 'fill' | 'native'`
|
|
10
|
+
- **`<Video>`** (default export) — Single unified video component routing to lite-YouTube facade or `<MuxPlayer>` based on `kind` prop.
|
|
11
|
+
|
|
12
|
+
### Internal Utilities
|
|
13
|
+
|
|
14
|
+
- **`videoPerfDebugEnabled()`** — Gates hover-to-play latency instrumentation; always on in dev, opt-in via `localStorage.VIDEO_PERF_DEBUG` in production.
|
|
15
|
+
- **`isYouTubeUrl(url)`** — Hostname-based YouTube detection against a strict allowlist.
|
|
16
|
+
- **`extractYouTubeId(url)`** — Exported ID extractor usable by admin tooling without rendering the component.
|
|
17
|
+
|
|
18
|
+
### Key Behaviors
|
|
19
|
+
|
|
20
|
+
| Feature | Detail |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `kind="auto"` | Bare 11-char ID → YouTube; YouTube hostname → YouTube; anything else → file |
|
|
23
|
+
| `layout="centered"` | `max-w-3xl` centered wrapper — detail pages |
|
|
24
|
+
| `layout="fill"` | `absolute inset-0` — carousel slides |
|
|
25
|
+
| `layout="native"` | Intrinsic aspect ratio — grid/card embeds |
|
|
26
|
+
| Cast suppression | Stubs `chrome.cast` to block MuxPlayer's CSP-violating Cast SDK injection |
|
|
27
|
+
| Autoplay policy | Module-level `pointerdown`/`keydown` tracker gates muted vs. sound-first hover play |
|
|
13
28
|
|
|
14
29
|
## Usage Example
|
|
15
30
|
|
|
16
31
|
```typescript
|
|
17
|
-
|
|
18
|
-
<Video url="https://www.youtube.com/watch?v=dQw4w9WgXcQ" layout="centered" />
|
|
32
|
+
import { Video, extractYouTubeId } from '@/components/video';
|
|
19
33
|
|
|
20
|
-
//
|
|
21
|
-
<Video url="dQw4w9WgXcQ" layout="
|
|
34
|
+
// Auto-detect source from URL
|
|
35
|
+
<Video url="https://www.youtube.com/watch?v=dQw4w9WgXcQ" layout="centered" />
|
|
22
36
|
|
|
23
|
-
//
|
|
37
|
+
// Explicit file source with captions
|
|
24
38
|
<Video
|
|
25
39
|
kind="file"
|
|
26
|
-
url="https://cdn.example.com/
|
|
40
|
+
url="https://cdn.example.com/clip.m3u8"
|
|
27
41
|
captionsUrl="https://cdn.example.com/captions.vtt"
|
|
28
42
|
layout="fill"
|
|
43
|
+
autoPlay
|
|
29
44
|
muted
|
|
45
|
+
loop
|
|
30
46
|
/>
|
|
31
47
|
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
url="https://youtu.be/dQw4w9WgXcQ"
|
|
36
|
-
layout="centered"
|
|
37
|
-
minimalControls
|
|
38
|
-
title="Product demo"
|
|
39
|
-
/>
|
|
48
|
+
// Extract ID for thumbnail logic without rendering
|
|
49
|
+
const id = extractYouTubeId('https://youtu.be/dQw4w9WgXcQ'); // "dQw4w9WgXcQ"
|
|
50
|
+
```
|
|
40
51
|
|
|
41
|
-
|
|
42
|
-
import { extractYouTubeId } from './video';
|
|
43
|
-
const id = extractYouTubeId('https://youtu.be/dQw4w9WgXcQ'); // → "dQw4w9WgXcQ"
|
|
44
|
-
```
|
|
52
|
+
**Source:** [`video.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video.tsx)
|
|
@@ -1,60 +1,66 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 8fbc6cc433de62257e74785b11ef3d03 -->
|
|
2
|
+
Platform-agnostic waitlist registration form component with email/phone capture, bot protection, geo-detection, and SMS consent handling.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `WaitlistFormProps`
|
|
7
|
-
Configuration interface with the following notable props:
|
|
8
7
|
|
|
9
|
-
| Prop | Type | Description |
|
|
10
|
-
|
|
11
|
-
| `onRegister` | `(email, phone?) => Promise<void>` | Required
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
8
|
+
| Prop | Type | Default | Description |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
| `onRegister` | `(email, phone?, signals?) => Promise<void>` | — | **Required.** Registration handler; must throw on failure |
|
|
11
|
+
| `isSubmitting` | `boolean` | `false` | Controls loading state |
|
|
12
|
+
| `isSuccess` | `boolean` | `false` | Toggles success label on submit button |
|
|
13
|
+
| `defaultEmail` | `string` | `''` | Pre-filled email |
|
|
14
|
+
| `defaultPhone` | `string` | `''` | Pre-filled phone |
|
|
15
|
+
| `geoApiUrl` | `string \| null` | `'/api/geo'` | Geo-detection endpoint; set to `null` to disable |
|
|
16
|
+
| `submitLabel` | `string` | `'Get Beta Access'` | Submit button label |
|
|
17
|
+
| `successLabel` | `string` | `"You're in!"` | Post-success button label |
|
|
18
|
+
| `termsOfServiceUrl` | `string` | — | ToS link in consent text |
|
|
19
|
+
| `privacyPolicyUrl` | `string` | — | Privacy Policy link in consent text |
|
|
17
20
|
|
|
18
21
|
### `WaitlistForm`
|
|
19
|
-
The exported form component. Key internal behaviors:
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
- **
|
|
26
|
-
- **
|
|
23
|
+
The exported form component. Internally manages:
|
|
24
|
+
|
|
25
|
+
- **Email validation** — warns on generic domains via `hasGenericEmailDomain`
|
|
26
|
+
- **Phone handling** — E.164 formatting via `formatPhoneE164`; country auto-detected from geo API
|
|
27
|
+
- **Bot protection** — invisible `HoneypotField` + timing signals via `useHumanitySignals`
|
|
28
|
+
- **SMS consent gate** — blocks submission if phone is provided without consent
|
|
29
|
+
- **Hydration safety** — renders an animated skeleton until client-side hydration completes
|
|
27
30
|
|
|
28
31
|
## Usage Example
|
|
29
32
|
|
|
30
33
|
```typescript
|
|
31
34
|
import { WaitlistForm } from './waitlist-form'
|
|
32
35
|
|
|
33
|
-
function
|
|
36
|
+
async function register(email: string, phone?: string, signals?: HumanitySignals) {
|
|
37
|
+
const res = await fetch('/api/waitlist', {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body: JSON.stringify({ email, phone, ...signals }),
|
|
40
|
+
})
|
|
41
|
+
if (!res.ok) throw new Error('Registration failed')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default function Page() {
|
|
34
45
|
const [isSubmitting, setIsSubmitting] = useState(false)
|
|
35
46
|
const [isSuccess, setIsSuccess] = useState(false)
|
|
36
47
|
|
|
37
|
-
const handleRegister = async (email: string, phone?: string) => {
|
|
38
|
-
setIsSubmitting(true)
|
|
39
|
-
try {
|
|
40
|
-
await api.joinWaitlist({ email, phone })
|
|
41
|
-
setIsSuccess(true)
|
|
42
|
-
} finally {
|
|
43
|
-
setIsSubmitting(false)
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
48
|
return (
|
|
48
49
|
<WaitlistForm
|
|
49
|
-
onRegister={
|
|
50
|
+
onRegister={async (email, phone, signals) => {
|
|
51
|
+
setIsSubmitting(true)
|
|
52
|
+
await register(email, phone, signals)
|
|
53
|
+
setIsSuccess(true)
|
|
54
|
+
setIsSubmitting(false)
|
|
55
|
+
}}
|
|
50
56
|
isSubmitting={isSubmitting}
|
|
51
57
|
isSuccess={isSuccess}
|
|
52
58
|
geoApiUrl="/api/geo"
|
|
53
|
-
termsOfServiceUrl="/
|
|
54
|
-
privacyPolicyUrl="/
|
|
59
|
+
termsOfServiceUrl="https://flamingo.run/terms"
|
|
60
|
+
privacyPolicyUrl="https://flamingo.run/privacy"
|
|
55
61
|
/>
|
|
56
62
|
)
|
|
57
63
|
}
|
|
58
64
|
```
|
|
59
65
|
|
|
60
|
-
|
|
66
|
+
**Source:** [`waitlist-form.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/waitlist-form.tsx)
|