@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
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- source-hash: 5e30f7353e7e3464bee931d93655ddb7 -->
|
|
2
|
+
A React client component that renders a PDF file with an embedded iframe viewer and action buttons for previewing and downloading.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `PdfViewerProps`
|
|
7
|
+
| Prop | Type | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| `src` | `string` | URL of the PDF file to display |
|
|
10
|
+
| `fileName` | `string?` | Display name shown in the header (defaults to `"PDF Document"`) |
|
|
11
|
+
| `onPreview` | `() => void?` | Custom preview handler; if omitted, opens `src` in a new tab |
|
|
12
|
+
| `onDownload` | `() => void?` | Custom download handler; if omitted, opens `src` in a new tab |
|
|
13
|
+
| `height` | `string?` | Optional height passed to the embedded iframe |
|
|
14
|
+
|
|
15
|
+
### `PdfViewer`
|
|
16
|
+
The primary exported component. Renders an empty state with an Adobe PDF icon when `src` is falsy, otherwise displays:
|
|
17
|
+
- A header row with the PDF icon, file name, and **Preview**/**Download** buttons
|
|
18
|
+
- An `EmbedIframe` for inline viewing
|
|
19
|
+
|
|
20
|
+
## Usage Example
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// Basic usage — buttons open src in a new tab
|
|
24
|
+
<PdfViewer
|
|
25
|
+
src="https://example.com/report.pdf"
|
|
26
|
+
fileName="Q1 Report"
|
|
27
|
+
/>
|
|
28
|
+
|
|
29
|
+
// With custom handlers
|
|
30
|
+
<PdfViewer
|
|
31
|
+
src="https://example.com/report.pdf"
|
|
32
|
+
fileName="Q1 Report"
|
|
33
|
+
height="600px"
|
|
34
|
+
onPreview={() => openPreviewModal()}
|
|
35
|
+
onDownload={() => triggerDownload()}
|
|
36
|
+
/>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Notes
|
|
40
|
+
|
|
41
|
+
- When `onPreview` or `onDownload` callbacks are provided, the corresponding button uses `onClick` instead of an `href`, preventing a new tab from opening.
|
|
42
|
+
- The component is responsive: button layout switches from stacked (`flex-col`) on mobile to inline (`flex-row`) on `sm` breakpoints.
|
|
43
|
+
- Source: [`pdf-viewer.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/pdf-viewer.tsx)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- source-hash: 69e19d1dd3c34ac5624e382237522c62 -->
|
|
2
|
+
React client component that fetches and renders Reddit post embeds with support for video, gallery, and image previews, using a centralized social embed cache for data fetching.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `RedditEmbedClient`
|
|
7
|
+
Main export. Accepts a Reddit post `url` and optional `maxWidth`, fetches post data via `socialCache.fetchWithHierarchy`, and renders a styled embed card.
|
|
8
|
+
|
|
9
|
+
### `RedditPost` Interface
|
|
10
|
+
Typed shape for the Reddit API JSON response, covering text, author, vote counts, preview images, hosted video, gallery data, and media metadata.
|
|
11
|
+
|
|
12
|
+
### `getMediaContent(): MediaItem[]`
|
|
13
|
+
Internal helper that extracts media from a post in priority order:
|
|
14
|
+
1. **Reddit-hosted video** (`v.redd.it` DASH streams) with poster image generation
|
|
15
|
+
2. **Gallery posts** (`gallery_data` + `media_metadata`)
|
|
16
|
+
3. **Single preview images** (best resolution ≤ 1200 px wide)
|
|
17
|
+
|
|
18
|
+
Skips all media extraction when the API signals a removed or deleted post (`selftext === '[removed]'`, `author === '[deleted]'`, etc.).
|
|
19
|
+
|
|
20
|
+
### Inline SVG Icons
|
|
21
|
+
`MessageCircleIcon`, `ExternalLinkIcon`, `ArrowUpIcon`, `ClockIcon`, `UserIcon`, `RedditIcon` — self-contained SVGs to avoid external icon dependencies.
|
|
22
|
+
|
|
23
|
+
### `RedditProfilePic`
|
|
24
|
+
Minimal avatar component rendering a Reddit-orange circle with `u/` text instead of fetching user avatars.
|
|
25
|
+
|
|
26
|
+
## Usage Example
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { RedditEmbedClient } from './reddit-embed-client';
|
|
30
|
+
|
|
31
|
+
// In a React component / MDX page:
|
|
32
|
+
<RedditEmbedClient
|
|
33
|
+
url="https://www.reddit.com/r/nextjs/comments/abc123/some_post"
|
|
34
|
+
maxWidth={600}
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The component is a `"use client"` boundary — server components should use dynamic import or a server-side wrapper. It renders a skeleton loader while fetching, a fallback error card (with a direct Reddit link) on failure, and the full post card with `MediaCarousel` on success.
|
|
39
|
+
|
|
40
|
+
**Source:** [`reddit-embed-client.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/reddit-embed-client.tsx)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- source-hash: 5b535a89e6cfb9cb002c7fd306bbaa13 -->
|
|
2
|
+
Provides a lightweight React context (`RichMarkdownRuntimeContext`) that threads proxy endpoint URLs and an optional image-transform function from `<RichMarkdownRenderer>` down to its satellite embed clients, without depending on the chat runtime.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `RichMarkdownRuntime` | Interface | Defines the three proxy URLs and the `transformImageSrc` knob |
|
|
9
|
+
| `RichMarkdownRuntimeProvider` | React component | Wraps subtrees with resolved runtime values; memoizes to prevent unnecessary re-renders |
|
|
10
|
+
| `useRichMarkdownRuntime` | Hook | Reads the ambient runtime; returns hub-matching defaults when called outside any provider |
|
|
11
|
+
|
|
12
|
+
### `RichMarkdownRuntime` Interface Fields
|
|
13
|
+
|
|
14
|
+
| Field | Default | Description |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| `redditProxyUrl` | `/api/blog/reddit-proxy` | Proxy endpoint for Reddit embeds |
|
|
17
|
+
| `twitterProxyUrl` | `/api/blog/twitter-proxy` | Proxy endpoint for Twitter/X embeds |
|
|
18
|
+
| `ogScraperUrl` | `/api/og-scraper` | Endpoint for OG link-preview scraping |
|
|
19
|
+
| `transformImageSrc` | `() => null` (identity / no rewrite) | Hub-only Supabase image transformer; return `null` to use `src` as-is |
|
|
20
|
+
|
|
21
|
+
## Usage Example
|
|
22
|
+
|
|
23
|
+
**Hub usage — override the image transformer, inherit proxy defaults:**
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { RichMarkdownRuntimeProvider } from './rich-markdown-runtime'
|
|
27
|
+
|
|
28
|
+
function BlogLayout({ children }: { children: React.ReactNode }) {
|
|
29
|
+
return (
|
|
30
|
+
<RichMarkdownRuntimeProvider
|
|
31
|
+
transformImageSrc={(src, opts) =>
|
|
32
|
+
supabaseImageTransform(src, opts)
|
|
33
|
+
}
|
|
34
|
+
>
|
|
35
|
+
{children}
|
|
36
|
+
</RichMarkdownRuntimeProvider>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Embedder usage — read the runtime inside a satellite client:**
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { useRichMarkdownRuntime } from './rich-markdown-runtime'
|
|
45
|
+
|
|
46
|
+
function RedditEmbedClient({ postUrl }: { postUrl: string }) {
|
|
47
|
+
const { redditProxyUrl } = useRichMarkdownRuntime()
|
|
48
|
+
// Falls back to '/api/blog/reddit-proxy' if no provider is in scope
|
|
49
|
+
const data = useFetch(`${redditProxyUrl}?url=${postUrl}`)
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Source:** [`rich-markdown-runtime.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/rich-markdown-runtime.tsx)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- source-hash: 4a337b178db352704df1ccdf20c1ec95 -->
|
|
2
|
+
A client-side React component that fetches and renders a styled Twitter/X post embed using the oEmbed API, with loading skeletons, error fallback states, and extracted tweet metadata.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `TwitterEmbedClient`
|
|
7
|
+
The main exported component. Accepts a tweet URL (or optional `tweetId`) and renders a fully styled card with profile picture, tweet text, links, and engagement stat labels.
|
|
8
|
+
|
|
9
|
+
**Props:**
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
|------|------|---------|-------------|
|
|
12
|
+
| `url` | `string` | — | Full Twitter/X post URL |
|
|
13
|
+
| `tweetId` | `string?` | — | Optional explicit tweet ID |
|
|
14
|
+
| `maxWidth` | `number` | `700` | Controls content area max height calculation |
|
|
15
|
+
|
|
16
|
+
### Internal SVG Icons
|
|
17
|
+
Inline SVG components (`MessageCircleIcon`, `ExternalLinkIcon`, `HeartIcon`, `RepeatIcon`, `ClockIcon`, `UserIcon`) avoid external icon library dependencies. `XIcon` wraps the shared `XLogo` component.
|
|
18
|
+
|
|
19
|
+
### `TwitterOEmbedResponse`
|
|
20
|
+
TypeScript interface modeling the oEmbed API response shape (author info, HTML, dimensions, provider metadata).
|
|
21
|
+
|
|
22
|
+
### Key Behaviors
|
|
23
|
+
- **Cache-first fetching** via `socialCache.fetchWithHierarchy` — deduplicated, runs once via `initializationDone` ref
|
|
24
|
+
- **URL normalization** — extracts tweet ID via regex from any `twitter.com` or `x.com` URL
|
|
25
|
+
- **Profile pictures** — fetched from `unavatar.io/twitter/{username}` with an inline SVG base64 fallback on error
|
|
26
|
+
- **Text extraction** — parses oEmbed HTML with `DOMParser`, strips attribution suffix, truncates at 600 characters
|
|
27
|
+
|
|
28
|
+
## Usage Example
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { TwitterEmbedClient } from './twitter-embed-client';
|
|
32
|
+
|
|
33
|
+
// Minimal usage with full URL
|
|
34
|
+
<TwitterEmbedClient url="https://x.com/OpenAI/status/1234567890123456789" />
|
|
35
|
+
|
|
36
|
+
// With explicit tweet ID and custom width
|
|
37
|
+
<TwitterEmbedClient
|
|
38
|
+
url="https://x.com/OpenAI/status/1234567890123456789"
|
|
39
|
+
tweetId="1234567890123456789"
|
|
40
|
+
maxWidth={500}
|
|
41
|
+
/>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Runtime requirement:** The component calls `useRichMarkdownRuntime()` to obtain `twitterProxyUrl`. A compatible runtime provider must exist in the component tree — see [`useRichMarkdownRuntime`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/components/rich-markdown/rich-markdown-runtime.ts) for context setup details.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<!-- source-hash: 8a01e8caf8a388648de21a863fa2e4b4 -->
|
|
2
|
+
Full-page FAQ document component that composes `PageShell`, `PageLayout`, and `FaqSection` into a single drop-in page, mirroring the `LegalDocumentPage` / `DevSectionPage` pattern so host pages need only pass config and SSR-resolved data.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `FaqDocumentPage`
|
|
7
|
+
|
|
8
|
+
The primary export. Renders a complete `/faqs` page with:
|
|
9
|
+
|
|
10
|
+
- **`PageLayout` `TitleBlock`** — owns the `<h1>` (title + subtitle), keeping `FaqSection` headings at `<h2>`/`<h3>` for correct SEO outline
|
|
11
|
+
- **`PageShell`** — optional standalone `<main>` container (disable via `shell={false}` when the host layout already provides one)
|
|
12
|
+
- **`FaqSection`** — receives SSR-hydrated `initialFaqs` to skip its client self-fetch, or omit for self-fetching embed mode
|
|
13
|
+
- **Back button** — follows the same `{ label, href } | false` pattern as `LegalDocumentPage` / `DevSectionPage`
|
|
14
|
+
|
|
15
|
+
### `FaqDocumentPageProps`
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | Description |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| `title` | `string` | `'Frequently Asked Questions'` | Page `<h1>` text |
|
|
20
|
+
| `subtitle` | `string` | — | Subtitle beneath the title |
|
|
21
|
+
| `backButton` | `{ label?, href? } \| false` | `{ label: 'Back to home', href: '/' }` | Back nav; `false` hides it |
|
|
22
|
+
| `shell` | `boolean` | `true` | Wrap with `PageShell`; set `false` when host owns `<main>` |
|
|
23
|
+
| `initialFaqs` | `Faq[]` | — | SSR-resolved FAQs; omit for client self-fetch |
|
|
24
|
+
| `emitJsonLd` | `boolean` | `false` | Emit `FAQPage` schema.org JSON-LD |
|
|
25
|
+
| `jsonLd` | `FaqSchemaOptions` | — | JSON-LD name/description/url overrides |
|
|
26
|
+
| `apiBaseUrl` | `string` | — | Base URL for `/api/faqs` (reverse-proxy embedders) |
|
|
27
|
+
| `entityType` / `entityId` | `string / number` | — | Optional entity scoping |
|
|
28
|
+
| `minResults` | `number` | — | Minimum FAQ count before rendering |
|
|
29
|
+
|
|
30
|
+
## Usage Example
|
|
31
|
+
|
|
32
|
+
**Standalone page (SSR, shell on):**
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// app/faqs/page.tsx
|
|
36
|
+
import { FaqDocumentPage } from '@openframe-oss-lib/components/faq';
|
|
37
|
+
import { fetchFaqs } from '@/lib/api';
|
|
38
|
+
|
|
39
|
+
export default async function FaqsPage() {
|
|
40
|
+
const initialFaqs = await fetchFaqs({ platform: 'acme' });
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<FaqDocumentPage
|
|
44
|
+
title="Help Center"
|
|
45
|
+
subtitle="Find answers to common questions"
|
|
46
|
+
initialFaqs={initialFaqs}
|
|
47
|
+
emitJsonLd
|
|
48
|
+
jsonLd={{ url: 'https://acme.com/faqs' }}
|
|
49
|
+
/>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Embedded inside host layout (shell off, no back button):**
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
<FaqDocumentPage
|
|
58
|
+
shell={false}
|
|
59
|
+
backButton={false}
|
|
60
|
+
apiBaseUrl="https://api.acme.com"
|
|
61
|
+
entityType="product"
|
|
62
|
+
entityId={42}
|
|
63
|
+
/>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Source
|
|
67
|
+
|
|
68
|
+
[`faq-document-page.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/faq-document-page.tsx)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<!-- source-hash: b59367c69f5c5d87cc41d5f3c3c747da -->
|
|
2
|
+
Renders a grouped, deep-linkable FAQ section with category jump-navigation, scroll-spy active states, hash-based accordion expansion, and optional JSON-LD schema emission.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `FaqSection` (default export)
|
|
7
|
+
The top-level client component that fetches FAQ data via `useSelfFetch`, groups results by section, and renders either a flat or grouped accordion layout depending on whether multiple categories exist.
|
|
8
|
+
|
|
9
|
+
**Props (`FaqSectionProps`):**
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Description |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `initialFaqs` | `Faq[]` | SSR hydration seed — skips first client fetch |
|
|
14
|
+
| `entityType` / `entityId` | `string` / `number\|string` | Scopes the `/api/faqs` request to a specific entity |
|
|
15
|
+
| `heading` | `ReactNode \| null` | Custom heading; `null` = no heading (host owns `<h1>`) |
|
|
16
|
+
| `emitJsonLd` | `boolean` | Injects FAQPage `schema.org` JSON-LD `<script>` |
|
|
17
|
+
| `jsonLd` | `FaqSchemaOptions` | Overrides for JSON-LD `name`/`description`/`url` |
|
|
18
|
+
| `minResults` | `number` | Maps to `?count=` query param |
|
|
19
|
+
| `apiBaseUrl` | `string` | Fetch-URL prefix for third-party embeds/proxies |
|
|
20
|
+
|
|
21
|
+
### `GroupedFaqList` (internal)
|
|
22
|
+
Renders category jump-nav pills (`<a href="#slug">`) above stacked accordion sections. Includes:
|
|
23
|
+
- **Scroll-spy** via `IntersectionObserver` — highlights the pill for the section in view
|
|
24
|
+
- **Hash dispatch** — item hashes (`#faq-item-<id>`) auto-expand the cited accordion row; section hashes (`#faq-<slug>`) activate the matching pill
|
|
25
|
+
- `useScrollToHash` with sticky-header offset compensation
|
|
26
|
+
|
|
27
|
+
### `groupFaqsBySection` (internal)
|
|
28
|
+
Pure function that groups `Faq[]` into `FaqGroup[]` ordered by first-seen display order. Uncategorized items (blank/missing `section`) sink to the end.
|
|
29
|
+
|
|
30
|
+
### `buildFaqsUrl` (internal)
|
|
31
|
+
Composes the `/api/faqs` fetch URL via `buildSuggestionUrl`, compatible with `apiBaseUrl`, `entityType`, `entityId`, and `minResults`.
|
|
32
|
+
|
|
33
|
+
## Usage Example
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// Server component passes SSR-fetched FAQs; client skips re-fetch
|
|
37
|
+
import { FaqSection } from '@openframe-oss-lib/components'
|
|
38
|
+
|
|
39
|
+
export default async function SupportPage() {
|
|
40
|
+
const faqs = await fetchFaqsForEntity('product', 42)
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<FaqSection
|
|
44
|
+
initialFaqs={faqs}
|
|
45
|
+
entityType="product"
|
|
46
|
+
entityId={42}
|
|
47
|
+
emitJsonLd
|
|
48
|
+
jsonLd={{ name: 'Product FAQs', url: 'https://example.com/support' }}
|
|
49
|
+
minResults={10}
|
|
50
|
+
/>
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
> **Source:** [`faq-section.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/faq-section.tsx)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!-- source-hash: f21bd805bd5c6f7a4aa946b0f56c688e -->
|
|
2
|
+
Re-exports the client-side FAQ UI components (`FaqSection` and `FaqDocumentPage`) from the `components/faq` subpath barrel, explicitly excluding server-only JSON-LD utilities to preserve `"use client"` bundle safety.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `FaqSection` | Component | Client-side FAQ accordion/section UI component |
|
|
9
|
+
| `FaqSectionProps` | Type | Props interface for `FaqSection` |
|
|
10
|
+
| `FaqDocumentPage` | Component | Full-page FAQ document layout component |
|
|
11
|
+
| `FaqDocumentPageProps` | Type | Props interface for `FaqDocumentPage` |
|
|
12
|
+
|
|
13
|
+
> **Not exported here:** `baseFaqSchema` and `buildFaqJsonLdFromFaqs` — these are server-safe utilities intentionally excluded from this client bundle. Import them from the dedicated server subpath instead.
|
|
14
|
+
|
|
15
|
+
## Usage Example
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// ✅ Client Component — import from the client subpath
|
|
19
|
+
import { FaqSection, FaqDocumentPage } from '@flamingo-stack/openframe-oss-lib/components/faq'
|
|
20
|
+
|
|
21
|
+
// ✅ Server Component — import JSON-LD builder from the server-safe subpath
|
|
22
|
+
import { buildFaqJsonLdFromFaqs } from '@flamingo-stack/openframe-oss-lib/components/faq/json-ld'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Notes
|
|
26
|
+
|
|
27
|
+
- This barrel is compiled by tsup with a `"use client"` banner, making it safe for React client component trees.
|
|
28
|
+
- Server Components **must not** import JSON-LD builders from this subpath — use `./components/faq/json-ld` as wired in `tsup.config.ts` and exposed via `package.json#exports`.
|
|
29
|
+
- See [`tsup.config.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/tsup.config.ts) for the server/universal entry block configuration.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: a1dee0a9eb92d427adbd583bf0d77420 -->
|
|
2
|
+
Utility for building [Schema.org FAQPage](https://schema.org/FAQPage) JSON-LD structured data from FAQ entries. Designed as a pure, framework-free module safe for use in React Server Components.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `FaqSchemaOptions` | Interface | Optional branding overrides: `name`, `description`, `url` |
|
|
9
|
+
| `baseFaqSchema` | Function | Returns base `FAQPage` schema object without `mainEntity` |
|
|
10
|
+
| `buildFaqJsonLdFromFaqs` | Function | Builds complete FAQ JSON-LD from a `Faq[]` array |
|
|
11
|
+
|
|
12
|
+
## Usage Example
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { buildFaqJsonLdFromFaqs } from 'openframe-oss-lib/components/faq'
|
|
16
|
+
|
|
17
|
+
const faqs = [
|
|
18
|
+
{ question: 'What is OpenFrame?', answer: 'A unified MSP platform.' },
|
|
19
|
+
{ question: 'Is it open source?', answer: 'Yes.' },
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
const jsonLd = buildFaqJsonLdFromFaqs(faqs, {
|
|
23
|
+
name: 'OpenFrame FAQ',
|
|
24
|
+
description: 'Common questions about the OpenFrame platform.',
|
|
25
|
+
url: 'https://openframe.ai/faq',
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
// In a Next.js Server Component:
|
|
29
|
+
export default function FaqPage() {
|
|
30
|
+
return (
|
|
31
|
+
<>
|
|
32
|
+
<script
|
|
33
|
+
type="application/ld+json"
|
|
34
|
+
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
|
35
|
+
/>
|
|
36
|
+
{/* ... */}
|
|
37
|
+
</>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Notes
|
|
43
|
+
|
|
44
|
+
- **Server Component safe** — no React or browser dependencies. Import via the `./components/faq` subpath export only. Avoid the root `./components` barrel (`"use client"`) to prevent pulling the client graph into the server bundle.
|
|
45
|
+
- Defaults to `"Frequently Asked Questions"` / `"Answers to common questions."` when no `FaqSchemaOptions` are provided.
|
|
46
|
+
- The `url` field is omitted from the schema output when not supplied.
|
|
47
|
+
|
|
48
|
+
**Source:** [`src/components/faq/json-ld.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/components/faq/json-ld.ts)
|
|
@@ -1,44 +1,52 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A generic, reusable React component for managing
|
|
1
|
+
<!-- source-hash: f65d2f7c16e2d70cc404f49cf8a55c51 -->
|
|
2
|
+
A generic, reusable React component for managing ordered lists of structured objects, supporting inline editing, item removal, multi-line paste, and optional deferred saves.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
### `
|
|
7
|
-
A generic client component that renders a labeled list of editable input entries backed by a typed array.
|
|
8
|
-
|
|
9
|
-
**Props:**
|
|
6
|
+
### `ArrayEntryManagerProps<T>`
|
|
10
7
|
|
|
11
8
|
| Prop | Type | Description |
|
|
12
|
-
|
|
13
|
-
| `title` | `ReactNode` | Section
|
|
14
|
-
| `items` | `T[]` | Array of
|
|
15
|
-
| `onChange` | `(items: T[]) => void` | Called
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| `title` | `ReactNode` | Section header; supports strings or badge elements |
|
|
11
|
+
| `items` | `T[]` | Array of items to manage |
|
|
12
|
+
| `onChange` | `(items: T[]) => void` | Called when items change (immediately or on save) |
|
|
16
13
|
| `fieldKey` | `keyof T` | Object key to bind each input to |
|
|
17
|
-
| `
|
|
14
|
+
| `placeholder` | `string` | Input placeholder text |
|
|
15
|
+
| `emptyMessage` | `string` | Text shown when the list is empty |
|
|
16
|
+
| `addButtonText` | `string` | Label for the add button |
|
|
17
|
+
| `requireSave` | `boolean` | Enables draft mode — defers `onChange` until Save is clicked |
|
|
18
18
|
| `onDirtyChange` | `(isDirty: boolean) => void` | Notifies parent of unsaved changes |
|
|
19
|
-
| `renderLabel` | `(item: T, index: number) => ReactNode` | Custom
|
|
20
|
-
| `isSaving` | `boolean` | Shows spinner on the
|
|
19
|
+
| `renderLabel` | `(item: T, index: number) => ReactNode` | Custom per-entry label or badge renderer |
|
|
20
|
+
| `isSaving` | `boolean` | Shows spinner on the Save button during async operations |
|
|
21
|
+
|
|
22
|
+
### `ArrayEntryManager<T>` (Component)
|
|
21
23
|
|
|
22
|
-
**
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
- **Multi-line paste**: pasting newline-separated values auto-creates multiple entries
|
|
26
|
-
- **Add at top**: new items are prepended for better UX
|
|
24
|
+
- **Draft mode** (`requireSave=true`): maintains local `draftItems` state and syncs to parent only on explicit save, preventing mid-edit prop conflicts.
|
|
25
|
+
- **Multi-line paste**: splits clipboard text on newlines and inserts each line as a separate entry starting at the pasted position.
|
|
26
|
+
- **Add at top**: new entries are prepended for faster access.
|
|
27
27
|
|
|
28
28
|
## Usage Example
|
|
29
29
|
|
|
30
30
|
```typescript
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
import { ArrayEntryManager } from './array-entry-manager';
|
|
32
|
+
|
|
33
|
+
interface ReleaseUrl {
|
|
34
|
+
github_release_url: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
<ArrayEntryManager<ReleaseUrl>
|
|
38
|
+
title="GitHub Release URLs"
|
|
33
39
|
items={releaseUrls}
|
|
34
40
|
onChange={setReleaseUrls}
|
|
35
41
|
fieldKey="github_release_url"
|
|
36
42
|
placeholder="https://github.com/org/repo/releases/tag/v1.0.0"
|
|
37
|
-
emptyMessage="No release URLs
|
|
43
|
+
emptyMessage="No release URLs added yet."
|
|
38
44
|
addButtonText="Add URL"
|
|
45
|
+
requireSave
|
|
39
46
|
saveButtonText="Save URLs"
|
|
40
|
-
requireSave={true}
|
|
41
|
-
onDirtyChange={(dirty) => setHasUnsavedChanges(dirty)}
|
|
42
47
|
isSaving={isSaving}
|
|
48
|
+
onDirtyChange={(dirty) => setHasUnsavedChanges(dirty)}
|
|
43
49
|
/>
|
|
44
|
-
```
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Source:** [`array-entry-manager.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/array-entry-manager.tsx)
|
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: d7253522e7ee7bae898c156797543da4 -->
|
|
2
|
+
Renders a list of SSO provider buttons with optional divider, supporting vertical and horizontal layouts. Filters and maps enabled providers to `ProviderButton` components with built-in error handling.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
### `SSOConfigStatus` (exported interface)
|
|
7
|
+
| Property | Type | Description |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `provider` | `string` | Provider identifier (e.g. `"google"`, `"microsoft"`) |
|
|
10
|
+
| `enabled` | `boolean` | Whether this provider should be rendered |
|
|
11
|
+
| `clientId` | `string?` | Optional OAuth client ID |
|
|
12
|
+
|
|
13
|
+
### `AuthProvidersList` (exported component)
|
|
14
|
+
| Prop | Type | Default | Description |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `enabledProviders` | `SSOConfigStatus[]` | — | List of SSO provider configs |
|
|
17
|
+
| `onProviderClick` | `(provider: string) => Promise<void>` | — | Auth callback per provider |
|
|
18
|
+
| `loading` | `boolean` | `false` | Disables all buttons while loading |
|
|
19
|
+
| `showDivider` | `boolean` | `true` | Renders an `"or"` divider above the list |
|
|
20
|
+
| `dividerText` | `string` | `"or"` | Custom divider label |
|
|
21
|
+
| `orientation` | `'vertical' \| 'horizontal'` | `'vertical'` | Layout direction |
|
|
22
|
+
|
|
23
|
+
Returns `null` if `enabledProviders` is empty. Errors thrown by `onProviderClick` are caught and logged without crashing the UI.
|
|
18
24
|
|
|
19
25
|
## Usage Example
|
|
20
26
|
|
|
@@ -22,26 +28,21 @@ A React component that renders a list of authentication provider buttons with co
|
|
|
22
28
|
import { AuthProvidersList, SSOConfigStatus } from './auth-providers-list';
|
|
23
29
|
|
|
24
30
|
const providers: SSOConfigStatus[] = [
|
|
25
|
-
{ provider: 'google',
|
|
26
|
-
{ provider: '
|
|
27
|
-
{ provider: '
|
|
31
|
+
{ provider: 'google', enabled: true, clientId: 'abc123' },
|
|
32
|
+
{ provider: 'microsoft', enabled: true, clientId: 'def456' },
|
|
33
|
+
{ provider: 'slack', enabled: false },
|
|
28
34
|
];
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
// Implement your auth logic (OAuth redirect, etc.)
|
|
33
|
-
window.location.href = `/auth/${provider}`;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
return (
|
|
37
|
-
<AuthProvidersList
|
|
38
|
-
enabledProviders={providers}
|
|
39
|
-
onProviderClick={handleAuth}
|
|
40
|
-
orientation="horizontal"
|
|
41
|
-
dividerText="or continue with"
|
|
42
|
-
/>
|
|
43
|
-
);
|
|
36
|
+
async function handleSignIn(provider: string) {
|
|
37
|
+
await signInWithProvider(provider); // your auth logic
|
|
44
38
|
}
|
|
39
|
+
|
|
40
|
+
<AuthProvidersList
|
|
41
|
+
enabledProviders={providers}
|
|
42
|
+
onProviderClick={handleSignIn}
|
|
43
|
+
orientation="horizontal"
|
|
44
|
+
dividerText="or continue with"
|
|
45
|
+
/>
|
|
45
46
|
```
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
**Source:** [`auth-providers-list.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/auth-providers-list.tsx)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- source-hash: 91af97ee03e3f4fa98e259bed1e212df -->
|
|
2
|
+
Builds the captions API URL for a video entity, returning the HTTPS path to the `/api/captions/[entityType]/[entityId]` endpoint that serves VTT content for iOS native fullscreen subtitles.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `getCaptionsUrl(entityType, entityId, srtContent?)`
|
|
7
|
+
|
|
8
|
+
| Parameter | Type | Description |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| `entityType` | `string` | Entity-type discriminator for the reverse-proxied captions route |
|
|
11
|
+
| `entityId` | `string \| number` | Unique identifier of the video entity |
|
|
12
|
+
| `srtContent` | `string \| null \| undefined` | Raw SRT subtitle content; returns `undefined` if absent |
|
|
13
|
+
|
|
14
|
+
**Returns:** `string | undefined` — A cache-busted URL of the form `/api/captions/{entityType}/{entityId}?v={hash}`, or `undefined` when no SRT content exists.
|
|
15
|
+
|
|
16
|
+
**Cache-busting strategy:** The `?v=` hash is derived from the SRT content length combined with the first 8 non-whitespace characters. This forces iOS Safari to re-fetch the VTT track when subtitles are regenerated, working around Safari's aggressive `<track>` `src` caching.
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { getCaptionsUrl } from './captions-url'
|
|
22
|
+
|
|
23
|
+
// Returns a cache-busted captions URL
|
|
24
|
+
const url = getCaptionsUrl('ticket', 42, 'WEBVTT\n\n1\n00:00:01...')
|
|
25
|
+
// → '/api/captions/ticket/42?v=23-WEBVTT'
|
|
26
|
+
|
|
27
|
+
// Returns undefined when no subtitles exist
|
|
28
|
+
const noUrl = getCaptionsUrl('ticket', 42, null)
|
|
29
|
+
// → undefined
|
|
30
|
+
|
|
31
|
+
// Use in a <track> element
|
|
32
|
+
const trackSrc = getCaptionsUrl(entityType, entityId, video.srt_content)
|
|
33
|
+
if (trackSrc) {
|
|
34
|
+
// <track kind="subtitles" src={trackSrc} default />
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Notes
|
|
39
|
+
|
|
40
|
+
- Ported from the Flamingo hub's `lib/utils/captions-url.ts`; the hub's `VideoEnabledEntityType` enum is widened to `string` so embedders can pass any entity-type their proxied route expects.
|
|
41
|
+
- VTT conversion from SRT happens server-side at the `/api/captions/...` endpoint, not in this utility.
|
|
42
|
+
|
|
43
|
+
**Source:** [`lib/captions-url.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/lib/captions-url.ts)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: a95a8735a6e13b8d71845dddc72be3e2 -->
|
|
2
|
+
Horizontal card-strip engine that serves as a single source of truth for marquee/chevron/seam/measure behavior across all strip surfaces. Supports two input modes: render-prop (`items` + `renderCard`) for full control, and children (organic JSX) for zero-registration card composition.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`CardsStrip<T>`** — Primary export. Generic component accepting either render-prop mode (Mode A) or children mode (Mode B).
|
|
7
|
+
- **`ManagedCell`** — Internal cell wrapper for children mode; handles fixed widths, hover/keyboard activation, and clone a11y (`aria-hidden` + focus suppression via `useSuppressCloneFocus`).
|
|
8
|
+
- **`CardStripRenderCtx`** — Context interface passed to `renderCard`; exposes activation callbacks, clone flag, touch/mobile state, and a shared near-viewport mount gate.
|
|
9
|
+
- **`CardsStripProps<T>`** — XOR-discriminated union of `CardsStripEngineProps & (RenderCardMode<T> | ChildrenMode)`.
|
|
10
|
+
- **`STRIP_CELL_MAX_WIDTH`** — Exported constant (`'90vw'`) shared with card components for consistent sizing.
|
|
11
|
+
|
|
12
|
+
## Usage Example
|
|
13
|
+
|
|
14
|
+
**Mode A — render-prop:**
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
<CardsStrip
|
|
18
|
+
items={bites}
|
|
19
|
+
itemKey={(item) => item.id}
|
|
20
|
+
renderCard={(item, ctx) => (
|
|
21
|
+
<VideoBiteCard key={ctx.cardKey} bite={item} ctx={ctx} />
|
|
22
|
+
)}
|
|
23
|
+
title="Video Bites"
|
|
24
|
+
autoScrollSpeed={60}
|
|
25
|
+
/>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Mode B — children (organic):**
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
<CardsStrip
|
|
32
|
+
title="Featured Tools"
|
|
33
|
+
cardWidthDesktop={400}
|
|
34
|
+
cardWidthMobile={320}
|
|
35
|
+
autoScroll={false}
|
|
36
|
+
showChevrons
|
|
37
|
+
>
|
|
38
|
+
{tools.map((tool) => (
|
|
39
|
+
<ToolCard key={tool.id} tool={tool} />
|
|
40
|
+
))}
|
|
41
|
+
</CardsStrip>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> **Children mode warning:** Pass an array of elements — a single `<Fragment>` wrapping all cards becomes one giant cell. Effects and DOM IDs in children must be clone-safe when `autoScroll` is enabled.
|
|
45
|
+
|
|
46
|
+
## Source
|
|
47
|
+
|
|
48
|
+
[`cards-strip.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/cards-strip.tsx)
|