@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,26 +1,30 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 2d7b47eeea450e199010485ffef88bdb -->
|
|
2
|
+
Renders a full product release detail page with support for injectable components, linked task fetching, and flexible layout modes.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
###
|
|
7
|
-
|
|
8
|
-
- **`UseReleaseResult`** — Shape returned by the injected `useRelease` hook
|
|
9
|
-
- **`MarkdownRendererProps`**, **`RoadmapSectionProps`**, **`DeliverySectionProps`**, **`VideoSectionProps`**, **`VideoDisplaySectionProps`** — Props interfaces for each injectable section component
|
|
10
|
-
- **`RoadmapItem`**, **`DeliveryResponse`** — Re-exported canonical types for source compatibility
|
|
6
|
+
### `ReleaseDetailPage`
|
|
7
|
+
Primary export. Renders a complete release detail view including metadata, changelog, media gallery, roadmap/delivery sections, and related content.
|
|
11
8
|
|
|
12
|
-
###
|
|
13
|
-
- **`ReleaseDetailPage`** — Primary page component; orchestrates data fetching, linked task loading, gallery state, and layout rendering
|
|
9
|
+
### Exported Types
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
| Type | Purpose |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `ReleaseDetailPageProps` | Full prop interface for the page component |
|
|
14
|
+
| `UseReleaseResult` | Shape returned by the required `useRelease` hook |
|
|
15
|
+
| `VideoDisplaySectionProps` | Props for the injectable video section with bites/tabs support |
|
|
16
|
+
| `RoadmapSectionProps` | Props for the injectable roadmap task section |
|
|
17
|
+
| `DeliverySectionProps` | Props for the injectable delivery task section |
|
|
18
|
+
| `MarkdownRendererProps` | Props for the injectable markdown renderer |
|
|
19
|
+
| `RoadmapItem` | Re-exported from `../../chat/types/entities/roadmap-item` |
|
|
20
|
+
| `DeliveryResponse` | Re-exported from `../../../types/delivery` |
|
|
17
21
|
|
|
18
22
|
## Usage Example
|
|
19
23
|
|
|
20
24
|
```typescript
|
|
21
|
-
import { ReleaseDetailPage } from '
|
|
25
|
+
import { ReleaseDetailPage } from '@openframe/ui';
|
|
22
26
|
import { useRelease } from '@/hooks/use-release';
|
|
23
|
-
import {
|
|
27
|
+
import { AppMarkdownRenderer } from '@/components/markdown-renderer';
|
|
24
28
|
import { RoadmapSection } from '@/components/roadmap-section';
|
|
25
29
|
|
|
26
30
|
export default function ReleasePage({ params }: { params: { slug: string } }) {
|
|
@@ -28,14 +32,25 @@ export default function ReleasePage({ params }: { params: { slug: string } }) {
|
|
|
28
32
|
<ReleaseDetailPage
|
|
29
33
|
slug={params.slug}
|
|
30
34
|
useRelease={useRelease}
|
|
31
|
-
MarkdownRenderer={
|
|
35
|
+
MarkdownRenderer={AppMarkdownRenderer}
|
|
32
36
|
RoadmapSection={RoadmapSection}
|
|
33
37
|
roadmapApiEndpoint="/api/roadmap"
|
|
34
38
|
deliveryApiEndpoint="/api/delivery"
|
|
35
39
|
backButton={{ label: 'Back to releases', href: '/releases' }}
|
|
40
|
+
relatedContent={<RelatedReleases />}
|
|
41
|
+
shell={true}
|
|
36
42
|
/>
|
|
37
43
|
);
|
|
38
44
|
}
|
|
39
45
|
```
|
|
40
46
|
|
|
41
|
-
|
|
47
|
+
## Key Behaviors
|
|
48
|
+
|
|
49
|
+
- **Injectable architecture**: `MarkdownRenderer`, `RoadmapSection`, `DeliverySection`, and `VideoDisplaySection` are all optional overrides; defaults fall back to lib-provided components
|
|
50
|
+
- **Dual data modes**: Accepts `initialData` for admin preview (skips fetch); otherwise uses the required `useRelease` hook
|
|
51
|
+
- **Linked task fetching**: Automatically fetches ClickUp roadmap/delivery tasks via `contentFetch` when task IDs are present on the release record
|
|
52
|
+
- **Shell toggle**: `shell={false}` suppresses the outer `<PageShell>` for host layouts that already provide a page container
|
|
53
|
+
|
|
54
|
+
## Source
|
|
55
|
+
|
|
56
|
+
[`release-detail-page.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/release-detail-page.tsx)
|
|
@@ -1,37 +1,42 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Barrel export file for the shared roadmap surface, exposing grid
|
|
1
|
+
<!-- source-hash: 84846be8d32682355ecb5cfae1b2e793 -->
|
|
2
|
+
Barrel export file for the shared roadmap surface, exposing grid, skeleton, voting logic, and the self-fetching list view while intentionally omitting `RoadmapItem` and `VoteType` to avoid TypeScript TS2308 ambiguous re-export errors.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
| Export | Type | Description |
|
|
7
|
-
|
|
8
|
-
| `RoadmapGrid` | Component |
|
|
9
|
-
| `
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `useRoadmapVoting` | Hook | Hook encapsulating roadmap voting logic |
|
|
13
|
-
| `VoteState` | Type | State shape for a vote interaction |
|
|
14
|
-
| `UseRoadmapVotingOptions` | Type | Options interface for `useRoadmapVoting` |
|
|
15
|
-
|
|
16
|
-
## Intentionally Omitted Exports
|
|
17
|
-
|
|
18
|
-
| Omitted | Reason | Canonical Import Path |
|
|
19
|
-
|---------|--------|-----------------------|
|
|
20
|
-
| `RoadmapItem` | Already exported via two paths; a third triggers TS2308 | `@flamingo-stack/openframe-frontend-core/components/chat` |
|
|
21
|
-
| `VoteType` | Duplicate of the same type re-exported from `./chat` | `@flamingo-stack/openframe-frontend-core/components/chat` |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `RoadmapGrid` / `RoadmapGridProps` | Component | Renders a grid of roadmap cards |
|
|
9
|
+
| `RoadmapGridSkeleton` / `RoadmapGridSkeletonProps` | Component | Loading skeleton for the roadmap grid |
|
|
10
|
+
| `useRoadmapVoting` / `VoteState` / `UseRoadmapVotingOptions` | Hook + Types | Manages voting state and interactions on roadmap items |
|
|
11
|
+
| `RoadmapView` / `RoadmapViewProps` | Component | Self-fetching roadmap list surface; host only configures API routes |
|
|
22
12
|
|
|
23
13
|
## Usage Example
|
|
24
14
|
|
|
25
15
|
```typescript
|
|
26
|
-
// ✅ Import roadmap surface components from this barrel
|
|
27
16
|
import {
|
|
28
17
|
RoadmapGrid,
|
|
29
18
|
RoadmapGridSkeleton,
|
|
19
|
+
RoadmapView,
|
|
30
20
|
useRoadmapVoting,
|
|
31
|
-
|
|
32
|
-
type UseRoadmapVotingOptions,
|
|
33
|
-
} from '@flamingo-stack/openframe-frontend-core/components/shared/roadmap';
|
|
21
|
+
} from '@flamingo-stack/openframe-frontend-core/components/roadmap';
|
|
34
22
|
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
// Self-fetching view — host provides API route config only
|
|
24
|
+
<RoadmapView apiRoute="/api/roadmap" />
|
|
25
|
+
|
|
26
|
+
// Manual grid with voting hook
|
|
27
|
+
const { vote, voteState } = useRoadmapVoting({ itemId: 'item-123' });
|
|
28
|
+
<RoadmapGrid items={roadmapItems} onVote={vote} />
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Intentional Omissions
|
|
32
|
+
|
|
33
|
+
- **`RoadmapItem`** — canonical type is available via:
|
|
34
|
+
- `@flamingo-stack/openframe-frontend-core/components/chat`
|
|
35
|
+
- `@flamingo-stack/openframe-frontend-core/components` (via `./shared/product-release`)
|
|
36
|
+
- **`VoteType`** — canonical import path is `@flamingo-stack/openframe-frontend-core/components/chat`
|
|
37
|
+
|
|
38
|
+
Both are excluded to prevent [TS2308](https://www.typescriptlang.org/tsconfig#isolatedModules) ambiguous re-export errors at the top-level barrel.
|
|
39
|
+
|
|
40
|
+
## Source
|
|
41
|
+
|
|
42
|
+
[`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
|
|
@@ -1,66 +1,55 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 20b142caf72c6c8479a957bacef62151 -->
|
|
2
|
+
Shared roadmap list surface component that renders roadmap items either as a flat two-column grid or grouped into collapsible per-quarter accordions, with centralized voting state management.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
| `RoadmapGrid` | Component | Main grid component rendering all roadmap items |
|
|
9
|
-
| `RoadmapGridProps` | Interface | Component prop contract |
|
|
10
|
-
| `DEFAULT_BUILD_REFRESH_URL` | Constant | Default URL builder: `(taskId) => /api/roadmap/${taskId}` |
|
|
11
|
-
|
|
12
|
-
## Props
|
|
6
|
+
### `RoadmapGrid` (main export)
|
|
7
|
+
The top-level component that orchestrates both rendering modes and shared voting state.
|
|
13
8
|
|
|
9
|
+
**Props:**
|
|
14
10
|
| Prop | Type | Default | Description |
|
|
15
|
-
|
|
16
|
-
| `items` | `RoadmapItem[]` | — | Roadmap
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
H --> I{"response.ok?"}
|
|
34
|
-
I -->|Yes| J["onItemUpdate(data.item)"]
|
|
35
|
-
I -->|No| G
|
|
36
|
-
J --> G
|
|
37
|
-
```
|
|
11
|
+
|---|---|---|---|
|
|
12
|
+
| `items` | `RoadmapItem[]` | — | Roadmap items to display |
|
|
13
|
+
| `groupByQuarter` | `boolean` | `false` | Enables accordion quarter grouping |
|
|
14
|
+
| `hasActiveFilters` | `boolean` | `false` | Expands all quarters when filters are active |
|
|
15
|
+
| `quartersToKeepClosed` | `number` | `2` | Past quarter collapse window |
|
|
16
|
+
| `showLeftMargin` | `boolean` | `true` | Desktop alignment margin (~120px) |
|
|
17
|
+
| `buildRefreshUrl` | `(taskId: string) => string` | `/api/roadmap/:id` | URL builder for post-vote refresh |
|
|
18
|
+
| `votingOptions` | `UseRoadmapVotingOptions` | — | Vote endpoint + storage key config |
|
|
19
|
+
| `onItemUpdate` | `(item: RoadmapItem) => void` | — | Callback after successful vote refresh |
|
|
20
|
+
|
|
21
|
+
### `RoadmapGridSingle` (internal)
|
|
22
|
+
Flat 2-column grid for a single set of items. Receives voting handlers from the parent to avoid split state across quarters.
|
|
23
|
+
|
|
24
|
+
### Quarter Helpers (pure functions)
|
|
25
|
+
- `parseQuarterString(q)` — parses `"Q<n> <year>"` labels
|
|
26
|
+
- `compareQuarters(a, b)` — chronological sort comparator
|
|
27
|
+
- `computeDefaultExpandedQuarters(quarters, quartersToKeepClosed)` — determines which quarters open by default
|
|
28
|
+
- `getStatusPriority(status)` — sorts items within a quarter by status (Complete → Working → Review → To-Do)
|
|
38
29
|
|
|
39
30
|
## Usage Example
|
|
40
31
|
|
|
41
32
|
```typescript
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
33
|
+
// Grouped by quarter (full roadmap page)
|
|
34
|
+
<RoadmapGrid
|
|
35
|
+
items={roadmapItems}
|
|
36
|
+
groupByQuarter={true}
|
|
37
|
+
hasActiveFilters={searchQuery.length > 0}
|
|
38
|
+
quartersToKeepClosed={2}
|
|
39
|
+
onItemUpdate={(updated) => patchItem(updated)}
|
|
40
|
+
votingOptions={{ endpoint: '/api/vote', storageKey: 'roadmap-votes' }}
|
|
41
|
+
/>
|
|
42
|
+
|
|
43
|
+
// Flat mode (related-content rail)
|
|
44
|
+
<RoadmapGrid
|
|
45
|
+
items={filteredItems}
|
|
46
|
+
showLeftMargin={false}
|
|
47
|
+
votingOptions={{ endpoint: '/api/vote', storageKey: 'roadmap-votes' }}
|
|
48
|
+
/>
|
|
49
|
+
```
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
setRoadmapItems(prev =>
|
|
50
|
-
prev.map(i => (i.id === updated.id ? updated : i))
|
|
51
|
-
);
|
|
52
|
-
};
|
|
51
|
+
## Hydration Strategy
|
|
53
52
|
|
|
54
|
-
|
|
55
|
-
<RoadmapGrid
|
|
56
|
-
items={roadmapItems}
|
|
57
|
-
onItemUpdate={handleItemUpdate}
|
|
58
|
-
showLeftMargin={true}
|
|
59
|
-
buildRefreshUrl={(taskId) => `/api/roadmap/${taskId}`}
|
|
60
|
-
votingOptions={{ endpoint: '/api/votes', storageKey: 'roadmap-votes' }}
|
|
61
|
-
/>
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
```
|
|
53
|
+
`expandedQuarters` initializes to `[]` on the server and is populated in a client-only `useEffect`, ensuring SSR markup matches the first client paint before accordion state is applied.
|
|
65
54
|
|
|
66
|
-
|
|
55
|
+
**Source:** [`roadmap-grid.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/roadmap-grid.tsx)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- source-hash: 84574f4998ed905b3d23591c61799aab -->
|
|
2
|
+
Self-contained roadmap list surface that fetches roadmap data via `useSelfFetch`, applies URL-driven search/status filters, and renders the controlled `<RoadmapGrid>` with SSR hydration support.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`RoadmapView`** — Primary export. Orchestrates data fetching, URL parameter reading, scroll-to-hash deep linking, and delegates rendering to `<RoadmapGrid>`.
|
|
7
|
+
- **`RoadmapViewProps`** — Configuration interface for API routes, SSR hydration, voting, and URL parameter key overrides.
|
|
8
|
+
- **`useSelfFetch`** — Shared hook providing `data`, `setData`, `isLoading`, `error`, and `reload`. The fetch URL acts as the cache key, so filter changes automatically trigger refetches.
|
|
9
|
+
- **`useScrollToHash`** — Handles deep-link hash dispatch (e.g. `?search=<id>#roadmap-<id>` from chat cards), polling until the target item mounts.
|
|
10
|
+
- **`RoadmapGridSkeleton`** — Shown only during the first in-flight fetch when no data exists yet.
|
|
11
|
+
- **`LoadError`** — Rendered on fetch failure with a retry callback.
|
|
12
|
+
|
|
13
|
+
## Usage Example
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { RoadmapView } from './roadmap-view'
|
|
17
|
+
|
|
18
|
+
// Minimal — uses all defaults (/api/roadmap, 'search', 'status' params)
|
|
19
|
+
<RoadmapView />
|
|
20
|
+
|
|
21
|
+
// With SSR hydration, custom endpoint, and voting
|
|
22
|
+
<RoadmapView
|
|
23
|
+
endpoint="/api/v2/roadmap"
|
|
24
|
+
initialItems={serverSideItems}
|
|
25
|
+
showLeftMargin
|
|
26
|
+
buildRefreshUrl={(taskId) => `/api/v2/roadmap/${taskId}`}
|
|
27
|
+
votingOptions={{
|
|
28
|
+
voteEndpoint: '/api/roadmap/vote',
|
|
29
|
+
storageKey: 'roadmap-votes',
|
|
30
|
+
}}
|
|
31
|
+
searchParamKey="q"
|
|
32
|
+
statusParamKey="status"
|
|
33
|
+
/>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Notes
|
|
37
|
+
|
|
38
|
+
- Filter params are folded into the fetch URL (`?search=&status=`), keeping the URL as the single cache key. This mirrors the `ProductReleasesView` pattern.
|
|
39
|
+
- The `initialData` wrapper is memoized to maintain stable identity and prevent optimistic vote patches from being clobbered by re-sync effects.
|
|
40
|
+
- After a vote, `onItemUpdate` patches the refreshed task directly into local state via `setData`, keeping vote counts live without a full list refetch.
|
|
41
|
+
- `searchParamKey` and `statusParamKey` default to values from `DEV_SECTION_PARAM_KEYS` — the same registry used by the section chrome — preventing silent key divergence.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 97838d0f1dd2839bee9f826d368aa0df -->
|
|
2
|
+
Custom React hook that manages optimistic up/down voting for roadmap cards, persisting vote state to `localStorage` with one vote per task per user and syncing changes to a configurable API endpoint.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
@@ -9,7 +9,14 @@ A `localStorage`-backed React hook providing optimistic up/down voting for roadm
|
|
|
9
9
|
|------|-------------|
|
|
10
10
|
| `VoteType` | `'up' \| 'down' \| null` — current vote state for a task |
|
|
11
11
|
| `VoteState` | Record mapping `taskId → VoteType` |
|
|
12
|
-
| `UseRoadmapVotingOptions` |
|
|
12
|
+
| `UseRoadmapVotingOptions` | Hook configuration options |
|
|
13
|
+
|
|
14
|
+
### `UseRoadmapVotingOptions`
|
|
15
|
+
|
|
16
|
+
| Option | Default | Description |
|
|
17
|
+
|--------|---------|-------------|
|
|
18
|
+
| `voteApiEndpoint` | `/api/roadmap/vote` | Vote POST endpoint; override for reverse-proxy embedders |
|
|
19
|
+
| `storageKey` | `roadmap_votes_v1` | `localStorage` key; scope per surface to avoid cross-contamination |
|
|
13
20
|
|
|
14
21
|
### Hook Return Values
|
|
15
22
|
|
|
@@ -17,16 +24,15 @@ A `localStorage`-backed React hook providing optimistic up/down voting for roadm
|
|
|
17
24
|
|-------|------|-------------|
|
|
18
25
|
| `votes` | `VoteState` | All current votes keyed by `taskId` |
|
|
19
26
|
| `isLoading` | `boolean` | `true` while hydrating from `localStorage` |
|
|
20
|
-
| `getVote` | `(taskId) => VoteType` | Returns current vote for a task |
|
|
21
|
-
| `toggleVote` | `
|
|
27
|
+
| `getVote` | `(taskId: string) => VoteType` | Returns current vote for a task |
|
|
28
|
+
| `toggleVote` | `(taskId, voteType) => Promise<{success, newVote, action}>` | Casts or retracts a vote |
|
|
22
29
|
| `clearVotes` | `() => void` | Clears all votes from state and `localStorage` |
|
|
23
30
|
|
|
24
|
-
###
|
|
31
|
+
### `toggleVote` Logic
|
|
25
32
|
|
|
26
|
-
- **
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
-
- **Key change safety** — state resets and re-hydrates whenever `storageKey` changes mid-lifecycle
|
|
33
|
+
- **Same direction** → removes the existing vote (`action: 'remove'`)
|
|
34
|
+
- **Opposite direction** → fires a remove for the old vote first, then adds the new one (keeps server totals consistent)
|
|
35
|
+
- **Optimistic update** → state updates immediately; reverts on API failure
|
|
30
36
|
|
|
31
37
|
## Usage Example
|
|
32
38
|
|
|
@@ -35,34 +41,38 @@ import { useRoadmapVoting } from './use-roadmap-voting';
|
|
|
35
41
|
|
|
36
42
|
function RoadmapCard({ taskId }: { taskId: string }) {
|
|
37
43
|
const { getVote, toggleVote, isLoading } = useRoadmapVoting({
|
|
38
|
-
voteApiEndpoint: '/
|
|
44
|
+
voteApiEndpoint: '/proxy/roadmap/vote',
|
|
39
45
|
storageKey: 'roadmap_votes_v1_main',
|
|
40
46
|
});
|
|
41
47
|
|
|
42
48
|
const currentVote = getVote(taskId);
|
|
43
49
|
|
|
44
|
-
const handleVote = async (
|
|
45
|
-
const { success, newVote } = await toggleVote(taskId,
|
|
50
|
+
const handleVote = async (direction: 'up' | 'down') => {
|
|
51
|
+
const { success, newVote } = await toggleVote(taskId, direction);
|
|
46
52
|
if (!success) console.warn('Vote failed, reverted to:', newVote);
|
|
47
53
|
};
|
|
48
54
|
|
|
49
|
-
if (isLoading) return
|
|
55
|
+
if (isLoading) return null;
|
|
50
56
|
|
|
51
57
|
return (
|
|
52
58
|
<div>
|
|
53
59
|
<button
|
|
54
60
|
onClick={() => handleVote('up')}
|
|
55
|
-
|
|
61
|
+
aria-pressed={currentVote === 'up'}
|
|
56
62
|
>
|
|
57
63
|
👍
|
|
58
64
|
</button>
|
|
59
65
|
<button
|
|
60
66
|
onClick={() => handleVote('down')}
|
|
61
|
-
|
|
67
|
+
aria-pressed={currentVote === 'down'}
|
|
62
68
|
>
|
|
63
69
|
👎
|
|
64
70
|
</button>
|
|
65
71
|
</div>
|
|
66
72
|
);
|
|
67
73
|
}
|
|
68
|
-
```
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
> **Storage key scoping:** When mounting multiple roadmap surfaces on the same origin, use distinct `storageKey` values (e.g. `roadmap_votes_v1_main` vs `roadmap_votes_v1_admin`) to prevent votes from bleeding across surfaces.
|
|
77
|
+
|
|
78
|
+
**Source:** [`use-roadmap-voting.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-roadmap-voting.ts)
|
|
@@ -11,7 +11,7 @@ const Switch = React.forwardRef<
|
|
|
11
11
|
>(({ className, ...props }, ref) => (
|
|
12
12
|
<SwitchPrimitives.Root
|
|
13
13
|
className={cn(
|
|
14
|
-
"peer inline-flex h-6 w-11 shrink-0
|
|
14
|
+
"peer inline-flex h-6 w-11 shrink-0 items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
|
|
15
15
|
className,
|
|
16
16
|
)}
|
|
17
17
|
{...props}
|
|
@@ -1,39 +1,38 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: e00a581ebb9cca5570476237e530ae85 -->
|
|
2
|
+
Renders a single ticket row in the Help Center list, combining a toggleable summary button with an expandable detail drawer (`TicketDetailDrawer`) that provides full ticket interaction (compose, close, reopen).
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `HelpCenterCard` (default export)
|
|
7
|
-
The primary component
|
|
7
|
+
The primary component. Renders a `<button>` summary row using `DevCardRowContent` (shared with the delivery list for visual consistency). When expanded, mounts a sibling `TicketDetailDrawer` beneath the row. Optimistic (locally-created, not yet server-confirmed) tickets render as non-expandable, dimmed rows.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
9
|
+
**Notable behaviors:**
|
|
10
|
+
- Smooth-scroll via `scrollElementIntoView` (rAF-driven, immune to browser scroll-anchor cancellation) on expand — runs in a `useEffect`, not the click handler, so the drawer height is committed before measurement
|
|
11
|
+
- Deep-link support: accepts an `id` prop (`ticket-<external_id>`) for `useScrollToHash` hash navigation from chat cards
|
|
12
|
+
- Drawer is a DOM sibling of the toggle button — click events inside the drawer do not bubble to the row's toggle handler
|
|
12
13
|
|
|
13
|
-
### `
|
|
14
|
-
|
|
15
|
-
interface HelpCenterCardProps {
|
|
16
|
-
ticket: AnyTicket
|
|
17
|
-
expanded: boolean
|
|
18
|
-
onToggle: (id: string) => void
|
|
19
|
-
busy: boolean
|
|
20
|
-
supportSystemDown: boolean
|
|
21
|
-
onSendMessage: TicketDetailDrawerProps['onSendMessage']
|
|
22
|
-
onClose: TicketDetailDrawerProps['onClose']
|
|
23
|
-
onReopen: TicketDetailDrawerProps['onReopen']
|
|
24
|
-
onActionCollapsed: () => void
|
|
25
|
-
}
|
|
26
|
-
```
|
|
14
|
+
### `mapPriorityScheme` (local helper)
|
|
15
|
+
Maps ticket priority strings to `StatusBadge` color schemes:
|
|
27
16
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
| Priority | Color Scheme |
|
|
32
|
-
|----------|-------------|
|
|
17
|
+
| Priority | Scheme |
|
|
18
|
+
|---|---|
|
|
33
19
|
| `HIGH` / `URGENT` | `error` (red) |
|
|
34
20
|
| `MEDIUM` | `warning` (yellow) |
|
|
35
21
|
| `LOW` / unknown | `default` |
|
|
36
22
|
|
|
23
|
+
Kept local to avoid conflating workflow status colors (from `getStatusColorScheme`) with severity colors.
|
|
24
|
+
|
|
25
|
+
## Key Props (`HelpCenterCardProps`)
|
|
26
|
+
|
|
27
|
+
| Prop | Type | Description |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `ticket` | `AnyTicket` | Ticket data (real or optimistic) |
|
|
30
|
+
| `expanded` | `boolean` | Controlled open/closed state |
|
|
31
|
+
| `onToggle` | `(id: string) => void` | Called on row click |
|
|
32
|
+
| `busy` | `boolean` | Forwarded to drawer for loading state |
|
|
33
|
+
| `replyError` | `TicketDetailDrawerProps['replyError']` | Persisted reply-failure banner |
|
|
34
|
+
| `id` | `string?` | DOM `id` for hash-based deep linking |
|
|
35
|
+
|
|
37
36
|
## Usage Example
|
|
38
37
|
|
|
39
38
|
```typescript
|
|
@@ -44,8 +43,13 @@ Maps ticket priority strings to `StatusBadge` color schemes. Kept separate from
|
|
|
44
43
|
busy={isBusy}
|
|
45
44
|
supportSystemDown={false}
|
|
46
45
|
onSendMessage={handleSendMessage}
|
|
47
|
-
onClose={
|
|
48
|
-
onReopen={
|
|
46
|
+
onClose={handleClose}
|
|
47
|
+
onReopen={handleReopen}
|
|
49
48
|
onActionCollapsed={() => setExpandedId(null)}
|
|
49
|
+
replyError={replyErrors[ticket.external_id]}
|
|
50
|
+
onClearReplyError={() => clearReplyError(ticket.external_id)}
|
|
51
|
+
id={`ticket-${ticket.external_id}`}
|
|
50
52
|
/>
|
|
51
|
-
```
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Source:** [`help-center-card.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/help-center-card.tsx)
|
|
@@ -1,38 +1,50 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Thin wrapper around `<ContactForm />` that preconfigures it for Help Center ticket creation,
|
|
1
|
+
<!-- source-hash: c50de1033f2620ae73492d4bf1b8bd20 -->
|
|
2
|
+
Thin wrapper around `<ContactForm />` that preconfigures it for Help Center ticket creation, managing local Subject field state and wiring submission to `useTicketActions.submitTicket`.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `HelpCenterCreateForm`
|
|
7
|
-
|
|
8
|
-
- Hides
|
|
7
|
+
Main form component that composes `<ContactForm />` with ticket-specific behavior:
|
|
8
|
+
- Hides contact-only fields (`name`, `email`, `companySize`, `referralSource`, `helpCategory`)
|
|
9
9
|
- Injects a locally-managed `Subject` input via `extraTopField`
|
|
10
|
-
- Pre-fills hidden fields from
|
|
11
|
-
-
|
|
10
|
+
- Pre-fills hidden fields from `sessionName`/`sessionEmail` so Zod validators pass silently
|
|
11
|
+
- Routes submission through `actions.submitTicket()` into the optimistic-placeholder flow
|
|
12
12
|
|
|
13
13
|
### `HelpCenterCreateFormSkeleton`
|
|
14
|
-
|
|
14
|
+
Pixel-accurate loading placeholder that mirrors the real form's layout to prevent layout shift (CLS) while session identity resolves. Includes four hidden `<input>` elements to replicate `space-y-*` sibling counting behavior from `<ContactForm />`.
|
|
15
15
|
|
|
16
16
|
### `HelpCenterCreateFormProps`
|
|
17
17
|
| Prop | Type | Description |
|
|
18
|
-
|
|
19
|
-
| `actions` | `UseTicketActionsReturn` | Full actions bag
|
|
20
|
-
| `sessionName` | `string` |
|
|
21
|
-
| `sessionEmail` | `string` |
|
|
22
|
-
| `supportSystemDown` | `boolean
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `actions` | `UseTicketActionsReturn` | Full actions bag from `useTicketActions` |
|
|
20
|
+
| `sessionName` | `string` | Resolved session display name |
|
|
21
|
+
| `sessionEmail` | `string` | Resolved session email |
|
|
22
|
+
| `supportSystemDown` | `boolean?` | Disables all inputs when HubSpot is unavailable |
|
|
23
23
|
|
|
24
24
|
## Usage Example
|
|
25
25
|
|
|
26
26
|
```typescript
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
import { HelpCenterCreateForm, HelpCenterCreateFormSkeleton } from './help-center-create-form'
|
|
28
|
+
import { useTicketActions } from './hooks/use-ticket-actions'
|
|
29
|
+
import { useChatIdentity } from '../hooks/use-chat-identity'
|
|
30
|
+
|
|
31
|
+
function HelpCenterList() {
|
|
32
|
+
const actions = useTicketActions()
|
|
33
|
+
const identity = useChatIdentity()
|
|
34
|
+
|
|
35
|
+
if (identity.isLoading) {
|
|
36
|
+
return <HelpCenterCreateFormSkeleton />
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<HelpCenterCreateForm
|
|
41
|
+
actions={actions}
|
|
42
|
+
sessionName={identity.user?.name ?? ''}
|
|
43
|
+
sessionEmail={identity.sessionEmail}
|
|
44
|
+
supportSystemDown={actions.onSupportSystemDown}
|
|
45
|
+
/>
|
|
46
|
+
)
|
|
47
|
+
}
|
|
36
48
|
```
|
|
37
49
|
|
|
38
|
-
> **Note:** `sessionName`/`sessionEmail`
|
|
50
|
+
> **Note:** Pass `sessionName`/`sessionEmail` from the parent rather than calling `useChatIdentity` again inside this component — a second hook call mounts with stale defaults, causing Zod to silently reject submission with an empty email.
|