@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,40 +1,51 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Renders the full Help Center surface for
|
|
1
|
+
<!-- source-hash: ec12c761ba72a6ce29047ad308561c0d -->
|
|
2
|
+
Renders the full Help Center surface for the OpenFrame `/tickets` page, managing ticket listing, creation, optimistic updates, and drawer state via URL params.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
### `HelpCenterList` (default export)
|
|
7
|
+
Top-level component that gates rendering on auth state:
|
|
8
|
+
- **Loading** → renders `DevSectionPage` with skeleton placeholders
|
|
9
|
+
- **Anon** → renders a sign-in `EmptyState`
|
|
10
|
+
- **Authed** → delegates to `HelpCenterListAuthed` with resolved session identity
|
|
11
|
+
|
|
12
|
+
### `HelpCenterListAuthed` (internal)
|
|
13
|
+
Core authenticated view handling:
|
|
14
|
+
- **`useTicketsList`** — fetches paginated tickets from URL params (`?search=`, `?status=`, `?page=`); live-polls while a drawer is open
|
|
15
|
+
- **`useTicketActions`** — mutation handlers with optimistic prepend/remove callbacks
|
|
16
|
+
- **Optimistic state** — local `useState` (not TanStack cache) so pending placeholders survive refetches triggered by filter changes
|
|
17
|
+
- **Drawer state** — derived from `?ticket=<external_id>` URL param; a single `setOpenTicket` callback reads/writes it via `router.replace`
|
|
18
|
+
|
|
19
|
+
### `HelpCenterListProps`
|
|
20
|
+
| Prop | Type | Description |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `toast` | `typeof defaultToast` | Test-friendly toast override |
|
|
23
|
+
| `backButton` | `{label?, href?} \| false` | Forwarded to `DevSectionPage` chrome |
|
|
24
|
+
| `title` | `string` | Override hero title (e.g. `"Support Tickets"`) |
|
|
25
|
+
| `shell` | `boolean` | Pass `false` when host layout provides the page container |
|
|
14
26
|
|
|
15
27
|
## Usage Example
|
|
16
28
|
|
|
17
29
|
```typescript
|
|
18
|
-
//
|
|
19
|
-
import { HelpCenterList } from '
|
|
30
|
+
// Standard mount on the /tickets route
|
|
31
|
+
import { HelpCenterList } from '@openframe/lib'
|
|
20
32
|
|
|
21
33
|
export default function TicketsPage() {
|
|
22
34
|
return <HelpCenterList />
|
|
23
35
|
}
|
|
24
36
|
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
37
|
+
// Embedded in a custom host layout with overrides
|
|
38
|
+
export default function SupportPage() {
|
|
39
|
+
return (
|
|
40
|
+
<HelpCenterList
|
|
41
|
+
title="Support Tickets"
|
|
42
|
+
backButton={{ label: 'Back to Dashboard', href: '/dashboard' }}
|
|
43
|
+
shell={false}
|
|
44
|
+
/>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
29
47
|
```
|
|
30
48
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```text
|
|
34
|
-
URL params → search, status, page (read by useTicketsList)
|
|
35
|
-
optimisticTickets → local useState (prepend on submit, remove on settle)
|
|
36
|
-
expandedTicketId → local useState (single drawer open at a time)
|
|
37
|
-
supportSystemDown → local useState (disables create form on error)
|
|
38
|
-
```
|
|
49
|
+
> **Deep-linking:** Append `?ticket=<external_id>` to auto-open a specific ticket drawer on load. All open/close/share flows route through this single URL param.
|
|
39
50
|
|
|
40
|
-
|
|
51
|
+
**Source:** [`help-center-list.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/help-center-list.tsx)
|
|
@@ -1,65 +1,50 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Barrel export file for the tickets
|
|
1
|
+
<!-- source-hash: b1b3afa2679df984c26b9b2281cbbe54 -->
|
|
2
|
+
Barrel export file for the tickets domain, re-exporting all public components, hooks, and types from their respective modules.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
| `TicketData`, `AnyTicket`, `OptimisticTicket` | Core ticket data shapes |
|
|
29
|
-
| `TicketClickupSummary` | ClickUp-specific ticket summary |
|
|
30
|
-
| `TicketActionErrorCode`, `MappedTicketActionError` | Typed error handling |
|
|
31
|
-
| `TICKET_TOAST_COPY` | Toast notification copy constants |
|
|
32
|
-
| `isOptimistic` | Type guard for optimistic ticket entries |
|
|
33
|
-
| `TicketRef`, `TicketEngagement`, `TicketEngagementFile` | Supporting types |
|
|
6
|
+
**Components**
|
|
7
|
+
- `TicketCenter` — Top-level ticket management surface
|
|
8
|
+
- `TicketOpenForm` — Form for opening new tickets
|
|
9
|
+
- `TicketRow` — Individual ticket list row
|
|
10
|
+
- `TicketDetailDrawer` — Slide-out drawer for ticket details
|
|
11
|
+
- `TicketLinkedDeliveryCard` — Card linking a ticket to a delivery
|
|
12
|
+
- `TicketReplyComposer` — Composer for ticket replies
|
|
13
|
+
- `HelpCenterList` — Full-page customer-facing ticket list; mounts inside `<PageShell>` for third-party embedders
|
|
14
|
+
- `HelpCenterCard` — Individual help center ticket card
|
|
15
|
+
- `HelpCenterCreateForm` / `HelpCenterCreateFormSkeleton` — Creation form with loading skeleton
|
|
16
|
+
|
|
17
|
+
**Hooks**
|
|
18
|
+
- `useTicketsList` — Fetches and manages the tickets list
|
|
19
|
+
- `useTicketActions` — Ticket CRUD actions; exposes `mapTicketActionError` helper and `UseTicketActionsReturn` type
|
|
20
|
+
- `useTicketEngagements` — Manages ticket engagement threads and file attachments
|
|
21
|
+
|
|
22
|
+
**Types & Constants**
|
|
23
|
+
- `TicketData`, `OptimisticTicket`, `AnyTicket` — Core ticket data shapes
|
|
24
|
+
- `TicketClickupSummary` — ClickUp integration summary type
|
|
25
|
+
- `TicketActionErrorCode`, `MappedTicketActionError` — Typed error handling
|
|
26
|
+
- `TICKET_TOAST_COPY` — Toast notification strings
|
|
27
|
+
- `isOptimistic` — Type guard for optimistic ticket entries
|
|
34
28
|
|
|
35
29
|
## Usage Example
|
|
36
30
|
|
|
37
31
|
```typescript
|
|
38
32
|
import {
|
|
39
33
|
HelpCenterList,
|
|
40
|
-
TicketDetailDrawer,
|
|
41
34
|
useTicketsList,
|
|
42
35
|
useTicketActions,
|
|
43
36
|
isOptimistic,
|
|
44
37
|
type AnyTicket,
|
|
45
|
-
} from '
|
|
38
|
+
} from '@openframe-oss-lib/tickets'
|
|
46
39
|
|
|
47
|
-
function
|
|
40
|
+
function MyHelpCenter() {
|
|
48
41
|
const { tickets } = useTicketsList()
|
|
49
42
|
const { closeTicket } = useTicketActions()
|
|
50
43
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
<TicketDetailDrawer
|
|
55
|
-
key={isOptimistic(ticket) ? ticket.optimisticId : ticket.id}
|
|
56
|
-
ticket={ticket}
|
|
57
|
-
onClose={() => closeTicket(ticket.id)}
|
|
58
|
-
/>
|
|
59
|
-
))}
|
|
60
|
-
</HelpCenterList>
|
|
61
|
-
)
|
|
44
|
+
const confirmed = tickets.filter((t: AnyTicket) => !isOptimistic(t))
|
|
45
|
+
|
|
46
|
+
return <HelpCenterList tickets={confirmed} onClose={closeTicket} />
|
|
62
47
|
}
|
|
63
48
|
```
|
|
64
49
|
|
|
65
|
-
>
|
|
50
|
+
> Source: [`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
|
|
@@ -1,51 +1,44 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Customer-facing ticket management surface that
|
|
1
|
+
<!-- source-hash: b3b2b6747bc982e9566fa90a074c4272 -->
|
|
2
|
+
Customer-facing ticket management surface component that gates rendering on authentication state and composes ticket listing, creation, and action handling into a single embeddable view.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
| Export
|
|
7
|
-
|
|
8
|
-
| `TicketCenter` |
|
|
9
|
-
| `
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `TicketCenter` | Component | Public entry point — resolves identity and delegates to the authed view or a sign-in gate |
|
|
9
|
+
| `TicketCenterProps` | Interface | `toast` override for test-friendly injection |
|
|
10
|
+
| `TicketCenterAuthed` | Internal Component | Full ticket UI: list, form, optimistic state, and row actions |
|
|
11
|
+
| `TicketCenterSkeleton` | Internal Component | Full-page skeleton shown during initial identity resolution |
|
|
12
|
+
| `TicketListSkeleton` | Internal Component | Row-level skeletons shown while the ticket list loads |
|
|
13
|
+
|
|
14
|
+
### State managed by `TicketCenterAuthed`
|
|
15
|
+
|
|
16
|
+
| State | Purpose |
|
|
17
|
+
|-------|---------|
|
|
18
|
+
| `optimisticTickets` | Local optimistic placeholders prepended above server rows until confirmed |
|
|
19
|
+
| `expandedTicketId` | Tracks which `TicketRow` is currently expanded |
|
|
20
|
+
| `supportSystemDown` | Disables the form and row actions when the upstream ticketing system is unavailable |
|
|
13
21
|
|
|
14
22
|
## Usage Example
|
|
15
23
|
|
|
24
|
+
Mount at your app root alongside a `QueryClientProvider` and `ChatRuntimeContext.Provider` — this component provides neither:
|
|
25
|
+
|
|
16
26
|
```typescript
|
|
17
|
-
|
|
18
|
-
// already mounted at the app root (same pattern as <EmbeddableChat />)
|
|
19
|
-
import { TicketCenter } from '@/components/ticket-center/ticket-center'
|
|
20
|
-
|
|
21
|
-
export function SupportPage() {
|
|
22
|
-
return (
|
|
23
|
-
<main>
|
|
24
|
-
<TicketCenter />
|
|
25
|
-
</main>
|
|
26
|
-
)
|
|
27
|
-
}
|
|
27
|
+
import { TicketCenter } from '@openframe-oss-lib/ticket-center'
|
|
28
28
|
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
// Minimal embed — toast defaults to the lib's singleton
|
|
30
|
+
export function TicketsPage() {
|
|
31
|
+
return <TicketCenter />
|
|
32
|
+
}
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
// With toast override (useful in tests or custom notification systems)
|
|
35
|
+
export function TicketsPageCustomToast() {
|
|
36
|
+
return <TicketCenter toast={myCustomToast} />
|
|
37
|
+
}
|
|
34
38
|
```
|
|
35
39
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
```mermaid
|
|
39
|
-
flowchart TD
|
|
40
|
-
A["TicketCenter mounts"] --> B{"identity.isLoading?"}
|
|
41
|
-
B -->|yes| C["TicketCenterSkeleton"]
|
|
42
|
-
B -->|no| D{"authTier === anon\nor no email?"}
|
|
43
|
-
D -->|yes| E["EmptyState: Sign in prompt"]
|
|
44
|
-
D -->|no| F["TicketCenterAuthed"]
|
|
45
|
-
F --> G["TicketOpenForm"]
|
|
46
|
-
F --> H["TicketRow list\noptimistic + server merged"]
|
|
47
|
-
```
|
|
40
|
+
> **Identity gate:** Anonymous visitors see only a sign-in `EmptyState`. No list fetch or form is rendered, keeping the network tab clean and preventing 401s on submit.
|
|
48
41
|
|
|
49
|
-
##
|
|
42
|
+
## Source
|
|
50
43
|
|
|
51
|
-
|
|
44
|
+
[`ticket-center.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-center.tsx)
|
|
@@ -1,48 +1,38 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 98bda0d90cb3c746f4f65c2eb703add4 -->
|
|
2
|
+
Renders the expanded drawer view for a single support ticket, including the conversation timeline, metadata, and status-dependent actions (reply composer or reopen). Extracted from `ticket-row.tsx` to be shared across both the lib's `TicketRow` and the hub's `TicketCard` compositions.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- Conditionally renders `OpenActions` or `ReopenAction` based on ticket status
|
|
11
|
-
|
|
12
|
-
### `TicketTimelinePanel`
|
|
13
|
-
Internal component that builds a chronological conversation thread:
|
|
14
|
-
- Splits legacy `ticket.body` on ` --- ` separators for historical compatibility
|
|
15
|
-
- Fetches Note engagements via `useTicketEngagements`
|
|
16
|
-
- Resolves customer identity with a 4-level precedence chain (live identity → mirror name → email → "You")
|
|
17
|
-
- Shows skeleton loader during initial fetch; `EmptyState` when no content exists
|
|
18
|
-
|
|
19
|
-
### `TicketRef`
|
|
20
|
-
Minimal identity bundle (`id` + `external_id`) threaded through mutation callbacks — `external_id` targets HubSpot, `id` drives React/TanStack cache keys.
|
|
6
|
+
- **`TicketDetailDrawer`** — Root component. Renders the assigned agent row, optional linked ClickUp delivery card, conversation timeline, reply-failure banner, and status-gated action area (composer for open tickets, reopen button for closed).
|
|
7
|
+
- **`TicketTimelinePanel`** — Internal component. Fetches and renders the chronological conversation feed via `useTicketEngagements`, with Slack-style auto-scroll (`useStickToBottom`). Suppresses duplicate "Original message" body turns when a matching customer engagement already exists.
|
|
8
|
+
- **`TicketRef`** — Exported type. Identity bundle `{ id, external_id }` threaded through action callbacks.
|
|
9
|
+
- **`TicketDetailDrawerProps`** — Exported interface. Full prop surface including `onSendMessage`, `onClose`, `onReopen`, `replyError`, and `onClearReplyError`.
|
|
21
10
|
|
|
22
11
|
## Usage Example
|
|
23
12
|
|
|
24
13
|
```typescript
|
|
14
|
+
import {
|
|
15
|
+
TicketDetailDrawer,
|
|
16
|
+
type TicketRef,
|
|
17
|
+
} from '@openframe-oss-lib/ticket-detail-drawer'
|
|
18
|
+
|
|
25
19
|
<TicketDetailDrawer
|
|
26
20
|
ticket={ticket}
|
|
27
21
|
busy={isMutating}
|
|
28
22
|
supportSystemDown={false}
|
|
29
|
-
onSendMessage={async (ref, text, attachments) => {
|
|
30
|
-
await
|
|
31
|
-
return true
|
|
23
|
+
onSendMessage={async (ref: TicketRef, text, attachments) => {
|
|
24
|
+
return await sendReply(ref.external_id, text, attachments)
|
|
32
25
|
}}
|
|
33
|
-
onClose={async (ref
|
|
34
|
-
await closeTicket(ref.external_id
|
|
35
|
-
return true
|
|
26
|
+
onClose={async (ref: TicketRef) => {
|
|
27
|
+
return await closeTicket(ref.external_id)
|
|
36
28
|
}}
|
|
37
|
-
onReopen={async (ref) => {
|
|
38
|
-
await reopenTicket(ref.external_id)
|
|
39
|
-
return true
|
|
29
|
+
onReopen={async (ref: TicketRef) => {
|
|
30
|
+
return await reopenTicket(ref.external_id)
|
|
40
31
|
}}
|
|
41
32
|
onActionCollapsed={() => setDrawerOpen(false)}
|
|
33
|
+
replyError={replyError}
|
|
34
|
+
onClearReplyError={() => clearReplyError(ticket.external_id)}
|
|
42
35
|
/>
|
|
43
36
|
```
|
|
44
37
|
|
|
45
|
-
|
|
46
|
-
- All local state (composer text, attachments, close-confirm dialog) is owned here; parent owns ticket data and mutation callbacks
|
|
47
|
-
- Optimistic tickets (pre-server-confirmation) skip the engagement fetch until a real `external_id` is available
|
|
48
|
-
- The timeline intentionally has no inner scroll — content flows with the page to avoid competing scroll surfaces
|
|
38
|
+
**Source:** [`ticket-detail-drawer.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-detail-drawer.tsx)
|
|
@@ -1,41 +1,39 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 6d7cfc4afa4176d11ba07ade11300b10 -->
|
|
2
|
+
Form component that renders the "Open Ticket" submission UI at the top of `<TicketCenter />`, composing existing oss-lib primitives for subject input, message textarea, file attachments, and submit handling with multi-condition gating.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
### `
|
|
6
|
+
### `TicketOpenForm`
|
|
7
|
+
|
|
8
|
+
Main exported component. Renders a two-column `<Card>` layout with a description panel on the left and the form fields on the right.
|
|
9
|
+
|
|
10
|
+
**Props (`TicketOpenFormProps`):**
|
|
11
|
+
|
|
7
12
|
| Prop | Type | Description |
|
|
8
|
-
|
|
13
|
+
|---|---|---|
|
|
9
14
|
| `onSubmit` | `(input) => Promise<boolean>` | Wired to `useTicketActions().submitTicket`; returns `true` on success to trigger form reset |
|
|
10
|
-
| `isSubmitting` | `boolean` |
|
|
11
|
-
| `supportSystemDown` | `boolean` | Disables all inputs and
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
A --> E["subject.trim() not empty"]
|
|
22
|
-
A --> F["content.trim() not empty"]
|
|
23
|
-
A --> G["content within TICKET_TEXT_MAX_CHARS"]
|
|
24
|
-
```
|
|
15
|
+
| `isSubmitting` | `boolean` | Single-flight guard owned by the parent |
|
|
16
|
+
| `supportSystemDown` | `boolean` | Disables all inputs and shows an error banner when `true` |
|
|
17
|
+
|
|
18
|
+
**Submit gating — `canSubmit` is `true` only when all of the following hold:**
|
|
19
|
+
- Subject and content are non-empty after trim
|
|
20
|
+
- Content is within `TICKET_TEXT_MAX_CHARS`
|
|
21
|
+
- No uploads are in-flight (`hasInflightUploads === false`)
|
|
22
|
+
- `isSubmitting` is `false`
|
|
23
|
+
- `supportSystemDown` is `false`
|
|
24
|
+
|
|
25
|
+
**Character counter** — visible once content reaches 80% of `TICKET_TEXT_MAX_CHARS`; turns red when the limit is exceeded.
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
- `subject` / `content` — controlled inputs, cleared on successful submit
|
|
28
|
-
- `attachments` — managed via `useChatAttachments()`, sharing the same upload pipeline as the chat composer
|
|
27
|
+
**Attachment handling** — delegates entirely to `useChatAttachments`, reusing the same upload pipeline as the chat composer.
|
|
29
28
|
|
|
30
29
|
## Usage Example
|
|
31
30
|
|
|
32
31
|
```typescript
|
|
33
|
-
import { TicketOpenForm } from '
|
|
32
|
+
import { TicketOpenForm } from '@openframe/oss-lib'
|
|
34
33
|
import { useTicketActions } from './hooks/use-ticket-actions'
|
|
35
34
|
|
|
36
35
|
function TicketCenter() {
|
|
37
|
-
const { submitTicket, isSubmitting } = useTicketActions()
|
|
38
|
-
const supportSystemDown = false
|
|
36
|
+
const { submitTicket, isSubmitting, supportSystemDown } = useTicketActions()
|
|
39
37
|
|
|
40
38
|
return (
|
|
41
39
|
<TicketOpenForm
|
|
@@ -47,4 +45,4 @@ function TicketCenter() {
|
|
|
47
45
|
}
|
|
48
46
|
```
|
|
49
47
|
|
|
50
|
-
|
|
48
|
+
On successful submission (`onSubmit` resolves `true`), the form automatically clears subject, content, and all attachments.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- source-hash: d48a2a82c23200567034e210dc847d5a -->
|
|
2
|
+
Reply composer component for open support tickets, combining a `ChatInput` with file attachment support and a close-ticket confirmation dialog.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `TicketReplyComposer`
|
|
7
|
+
|
|
8
|
+
The main exported component. Renders a unified composer layout with:
|
|
9
|
+
|
|
10
|
+
- **`ChatAttachmentChipStrip`** — staged file chips displayed above the input
|
|
11
|
+
- **`ChatInput`** — primary text input with send button; disabled during in-flight uploads or when the support system is down
|
|
12
|
+
- **`ChatAttachmentAddButton`** — attachment trigger in the bottom toolbar (hidden when `supportSystemDown`)
|
|
13
|
+
- **`Close ticket` button** — opens an `AlertDialog` to confirm closure with an optional resolution note
|
|
14
|
+
|
|
15
|
+
### `TicketReplyComposerProps`
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Description |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `ticket` | `AnyTicket` | The ticket being replied to |
|
|
20
|
+
| `busy` | `boolean` | Disables input while a send is in progress |
|
|
21
|
+
| `supportSystemDown` | `boolean` | Signals connection loss; swaps in a placeholder and hides attachments |
|
|
22
|
+
| `onSendMessage` | `TicketDetailDrawerProps['onSendMessage']` | Async send handler; returns `boolean` indicating success |
|
|
23
|
+
| `onClose` | `TicketDetailDrawerProps['onClose']` | Async close handler; receives an optional resolution string |
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
<TicketReplyComposer
|
|
29
|
+
ticket={ticket}
|
|
30
|
+
busy={isSending}
|
|
31
|
+
supportSystemDown={!isConnected}
|
|
32
|
+
onSendMessage={async (ref, text, attachments) => {
|
|
33
|
+
const ok = await sendReply(ref.id, text, attachments)
|
|
34
|
+
return ok
|
|
35
|
+
}}
|
|
36
|
+
onClose={async (ref, resolution) => {
|
|
37
|
+
await closeTicket(ref.id, resolution)
|
|
38
|
+
}}
|
|
39
|
+
/>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Behavior Notes
|
|
43
|
+
|
|
44
|
+
- Draft text and staged files **survive a failed send** — `ChatInput` retains text; attachments are only cleared on success
|
|
45
|
+
- Close confirmation uses a **non-destructive accent button** (closing is reversible via Reopen)
|
|
46
|
+
- `autoFocus` uses `{ preventScroll: true }` internally, so the drawer's scroll-to-top animation is not interrupted
|
|
47
|
+
- The drawer is **not collapsed** after closing a ticket (no `onActionCollapsed`) to preserve the in-place status badge update
|
|
48
|
+
|
|
49
|
+
## Source
|
|
50
|
+
|
|
51
|
+
[`ticket-reply-composer.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-reply-composer.tsx)
|
|
@@ -1,12 +1,25 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Renders a single ticket row
|
|
1
|
+
<!-- source-hash: 0cb3a7a072b68a1f0cb377074de90f95 -->
|
|
2
|
+
Renders a single ticket row combining a compact summary tile with an expandable detail drawer, managing toggle interactions and scroll positioning within a ticket list.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
6
|
+
### `TicketRow`
|
|
7
|
+
The primary exported component that composes:
|
|
8
|
+
- **`<ChatTicketItem>`** — compact summary tile acting as the collapsible trigger (avoids invalid button-in-button nesting via `onClick` prop)
|
|
9
|
+
- **`<CollapsibleContent>` + `<TicketDetailDrawer>`** — animated drawer rendered only when this row is the active expanded one
|
|
10
|
+
- **`scrollElementIntoView`** — scroll correction that pre-subtracts a collapsing sibling drawer's height to land at the correct post-animation position
|
|
11
|
+
|
|
12
|
+
### `TicketRowProps`
|
|
13
|
+
| Prop | Description |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `ticket` | `AnyTicket` — real or optimistic placeholder |
|
|
16
|
+
| `expanded` | Whether this row's drawer is open |
|
|
17
|
+
| `onToggle` | Parent-owned expand/collapse state setter |
|
|
18
|
+
| `busy` | Disables drawer actions during in-flight requests |
|
|
19
|
+
| `supportSystemDown` | Surfaces degraded-mode UI in the drawer |
|
|
20
|
+
| `onSendMessage / onClose / onReopen` | Forwarded to `<TicketDetailDrawer>` |
|
|
21
|
+
| `onActionCollapsed` | Called after close/reopen so parent can collapse stale state |
|
|
22
|
+
| `id` | DOM `id` for deep-link scroll targets (e.g. `ticket-<external_id>`) |
|
|
10
23
|
|
|
11
24
|
## Usage Example
|
|
12
25
|
|
|
@@ -14,17 +27,19 @@ Renders a single ticket row with an expandable inline drawer, combining a compac
|
|
|
14
27
|
<TicketRow
|
|
15
28
|
ticket={ticket}
|
|
16
29
|
expanded={expandedTicketId === ticket.id}
|
|
17
|
-
onToggle={
|
|
18
|
-
busy={
|
|
30
|
+
onToggle={setExpandedTicketId}
|
|
31
|
+
busy={isMutating}
|
|
19
32
|
supportSystemDown={false}
|
|
20
33
|
onSendMessage={handleSendMessage}
|
|
21
34
|
onClose={handleClose}
|
|
22
35
|
onReopen={handleReopen}
|
|
23
36
|
onActionCollapsed={() => setExpandedTicketId(null)}
|
|
37
|
+
id={`ticket-${ticket.external_id}`}
|
|
24
38
|
/>
|
|
25
39
|
```
|
|
26
40
|
|
|
27
|
-
|
|
41
|
+
> **Optimistic placeholders** (`isOptimistic(ticket) === true`) render the summary tile as non-interactive — click handler and drawer are suppressed until the real ticket ID arrives from the server.
|
|
42
|
+
|
|
43
|
+
## Source
|
|
28
44
|
|
|
29
|
-
-
|
|
30
|
-
- The scroll adjustment logic mirrors `<HelpCenterCard>` — queries `div[id^="ticket-drawer-"]` to find an open drawer above the clicked row and subtracts its height from the raw scroll target, ensuring the final scroll position matches the post-collapse layout.
|
|
45
|
+
[`ticket-row.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-row.tsx)
|
|
@@ -1,19 +1,35 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: eaad96fbee2b55e506fa06a65db08f00 -->
|
|
2
|
+
Shared type contracts, constants, and utilities for the OpenFrame ticket system — consumed by both client-side hooks and UI components to describe ticket wire shapes, cache structure, error codes, and UX constants.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
|
9
|
-
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
| Name | Purpose |
|
|
9
|
+
|---|---|
|
|
10
|
+
| `TicketData` | Wire shape of a row from `POST /api/chat/agent/find-ticket`. Mirrors the server's `FindTicketResult` projection intentionally. |
|
|
11
|
+
| `TicketAssignedOwner` | Resolved agent profile (name, email, avatar) joined from `hubspot_owners` → `profiles`. |
|
|
12
|
+
| `TicketClickupSummary` | Compact projection of a linked ClickUp task for the "Linked delivery" drawer card. |
|
|
13
|
+
| `OptimisticTicket` | Extends `TicketData` with `_optimistic: true` for pre-flight list entries before server confirmation. |
|
|
14
|
+
| `TicketsCacheSlot` | Shape of a `['tickets', …]` TanStack Query cache slot — prevents the `t.map is not a function` class of cache mutation bugs. |
|
|
15
|
+
| `MappedTicketActionError` | Structured error envelope with a typed code, toast copy, and retry/cache-eviction hints. |
|
|
16
|
+
|
|
17
|
+
### Types & Union
|
|
18
|
+
|
|
19
|
+
- **`AnyTicket`** — `TicketData | OptimisticTicket`
|
|
20
|
+
- **`TicketActionErrorCode`** — discriminated union of 11 server-side error codes routed through `mapTicketActionError`
|
|
21
|
+
|
|
22
|
+
### Functions
|
|
23
|
+
|
|
24
|
+
- **`isOptimistic(t)`** — type guard narrowing `AnyTicket` to `OptimisticTicket`
|
|
25
|
+
|
|
26
|
+
### Constants
|
|
27
|
+
|
|
28
|
+
| Name | Value | Purpose |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `TICKET_TEXT_MAX_CHARS` | `5000` | Client-side cap on ticket/comment text length |
|
|
31
|
+
| `TICKET_LIVE_POLL_MS` | `8000` | Shared refetch interval (ms) for list + conversation polls on open drawers |
|
|
32
|
+
| `TOAST_COPY` | `as const` object | Centralized, QA-auditable toast strings for all ticket actions |
|
|
17
33
|
|
|
18
34
|
## Usage Example
|
|
19
35
|
|
|
@@ -21,37 +37,39 @@ Defines the shared type contract for the ticket management feature, including wi
|
|
|
21
37
|
import {
|
|
22
38
|
AnyTicket,
|
|
23
39
|
isOptimistic,
|
|
24
|
-
|
|
40
|
+
TicketsCacheSlot,
|
|
41
|
+
TICKET_LIVE_POLL_MS,
|
|
25
42
|
TICKET_TEXT_MAX_CHARS,
|
|
26
43
|
TOAST_COPY,
|
|
27
|
-
} from '
|
|
28
|
-
|
|
29
|
-
// Narrow optimistic rows before rendering the drawer
|
|
30
|
-
function renderTicket(ticket: AnyTicket) {
|
|
31
|
-
if (isOptimistic(ticket)) {
|
|
32
|
-
return <SkeletonDrawer />
|
|
33
|
-
}
|
|
34
|
-
return <TicketDrawer data={ticket} />
|
|
35
|
-
}
|
|
44
|
+
} from '@openframe/oss-lib'
|
|
36
45
|
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
// Type-guard before rendering optimistic rows
|
|
47
|
+
function renderTicket(t: AnyTicket) {
|
|
48
|
+
if (isOptimistic(t)) return <SkeletonRow />
|
|
49
|
+
return <TicketRow data={t} />
|
|
40
50
|
}
|
|
41
51
|
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
// Safe cache mutation — always project through TicketsCacheSlot
|
|
53
|
+
queryClient.setQueriesData<TicketsCacheSlot>(
|
|
54
|
+
{ queryKey: ['tickets'] },
|
|
55
|
+
(old) => ({
|
|
56
|
+
...old,
|
|
57
|
+
tickets: old?.tickets?.map((t) =>
|
|
58
|
+
t.id === updatedId ? { ...t, status: 'CLOSED' } : t
|
|
59
|
+
),
|
|
60
|
+
})
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
// Enforce text cap before submitting
|
|
64
|
+
if (body.length > TICKET_TEXT_MAX_CHARS) {
|
|
65
|
+
showError(`Max ${TICKET_TEXT_MAX_CHARS} characters`)
|
|
51
66
|
}
|
|
52
67
|
|
|
53
|
-
//
|
|
54
|
-
|
|
68
|
+
// Consistent poll cadence across list + conversation hooks
|
|
69
|
+
useQuery({ queryKey: ['tickets'], refetchInterval: TICKET_LIVE_POLL_MS })
|
|
70
|
+
|
|
71
|
+
// Centralized toast copy
|
|
72
|
+
toast(TOAST_COPY.close_success)
|
|
55
73
|
```
|
|
56
74
|
|
|
57
|
-
|
|
75
|
+
**Source:** [`types.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/types.ts)
|