@flamingo-stack/openframe-frontend-core 0.0.481 → 0.0.482
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-H6DFCF44.cjs → chunk-22AED5IC.cjs} +82 -82
- package/dist/{chunk-H6DFCF44.cjs.map → chunk-22AED5IC.cjs.map} +1 -1
- package/dist/{chunk-MGKCS6KS.js → chunk-3WCARCI4.js} +2 -2
- package/dist/{chunk-LNKWY74S.cjs → chunk-4HL6UENH.cjs} +5 -5
- package/dist/{chunk-LNKWY74S.cjs.map → chunk-4HL6UENH.cjs.map} +1 -1
- package/dist/{chunk-Y3Y2DLNO.js → chunk-6UGYBCEN.js} +3 -3
- package/dist/{chunk-BBUEY73L.js → chunk-7I5B5PQ4.js} +6269 -5339
- package/dist/chunk-7I5B5PQ4.js.map +1 -0
- package/dist/{chunk-PSPWT2Q5.js → chunk-7LWXWXEY.js} +4 -4
- package/dist/{chunk-M7O74OWG.cjs → chunk-ACOU5YJI.cjs} +31 -31
- package/dist/{chunk-M7O74OWG.cjs.map → chunk-ACOU5YJI.cjs.map} +1 -1
- package/dist/{chunk-INDFIVDV.cjs → chunk-AHGSN4AT.cjs} +12 -12
- package/dist/{chunk-INDFIVDV.cjs.map → chunk-AHGSN4AT.cjs.map} +1 -1
- package/dist/{chunk-VTSRDC4W.js → chunk-CKC3EAYT.js} +2 -2
- package/dist/{chunk-SASR7SK5.js → chunk-GZK7FWJJ.js} +20 -4
- package/dist/chunk-GZK7FWJJ.js.map +1 -0
- package/dist/{chunk-ZRANZNEA.js → chunk-JJE5TUZK.js} +2 -2
- package/dist/{chunk-66BNAFO6.js → chunk-JQIUBFHL.js} +4 -4
- package/dist/{chunk-MMCBQJKE.cjs → chunk-KUBJHB6I.cjs} +11 -11
- package/dist/{chunk-MMCBQJKE.cjs.map → chunk-KUBJHB6I.cjs.map} +1 -1
- package/dist/{chunk-ZV6E3U3C.cjs → chunk-MRGTMMJ3.cjs} +30 -30
- package/dist/{chunk-ZV6E3U3C.cjs.map → chunk-MRGTMMJ3.cjs.map} +1 -1
- package/dist/{chunk-OZJN54R5.cjs → chunk-NWVKG7QC.cjs} +37 -37
- package/dist/{chunk-OZJN54R5.cjs.map → chunk-NWVKG7QC.cjs.map} +1 -1
- package/dist/{chunk-AN47EIIJ.cjs → chunk-PHTSSHIQ.cjs} +59 -59
- package/dist/{chunk-AN47EIIJ.cjs.map → chunk-PHTSSHIQ.cjs.map} +1 -1
- package/dist/{chunk-N2JZ33V7.cjs → chunk-RUA3OXSJ.cjs} +26 -26
- package/dist/{chunk-N2JZ33V7.cjs.map → chunk-RUA3OXSJ.cjs.map} +1 -1
- package/dist/{chunk-LK623WCC.cjs → chunk-RZPF7MJ2.cjs} +9 -9
- package/dist/{chunk-LK623WCC.cjs.map → chunk-RZPF7MJ2.cjs.map} +1 -1
- package/dist/{chunk-G3UN2DXU.cjs → chunk-STYA77PH.cjs} +20 -4
- package/dist/chunk-STYA77PH.cjs.map +1 -0
- package/dist/{chunk-JUJY3HQS.cjs → chunk-U37UTLP7.cjs} +19 -19
- package/dist/{chunk-JUJY3HQS.cjs.map → chunk-U37UTLP7.cjs.map} +1 -1
- package/dist/{chunk-2DIOV7BR.js → chunk-UPN6EFOM.js} +4 -4
- package/dist/{chunk-OWMLWJQY.cjs → chunk-VPVOJD5X.cjs} +2432 -1502
- package/dist/chunk-VPVOJD5X.cjs.map +1 -0
- package/dist/{chunk-4SMRQ4SN.js → chunk-WBL5Y4PS.js} +3 -3
- package/dist/{chunk-FP4H6Y5O.js → chunk-WPYPSIY2.js} +3 -3
- package/dist/{chunk-R5WJJL4V.js → chunk-X5X43HFV.js} +5 -5
- package/dist/{chunk-DEHZ5CTC.js → chunk-XTWKDMCG.js} +2 -2
- package/dist/components/case-studies/index.cjs +9 -9
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/chat/index.js +2 -2
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +6 -6
- package/dist/components/docs/index.js +5 -5
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/faq/index.js +3 -3
- package/dist/components/features/captions-url.cjs +12 -0
- package/dist/components/features/captions-url.cjs.map +1 -0
- package/dist/components/features/captions-url.js +10 -0
- package/dist/components/features/captions-url.js.map +1 -0
- package/dist/components/features/card-hit-layer.d.ts +40 -0
- package/dist/components/features/card-hit-layer.d.ts.map +1 -0
- package/dist/components/features/floating-walkthrough-video.d.ts +71 -0
- package/dist/components/features/floating-walkthrough-video.d.ts.map +1 -0
- package/dist/components/features/index.cjs +11 -3
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.d.ts +4 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +12 -4
- package/dist/components/features/use-walkthrough-video.d.ts +16 -0
- package/dist/components/features/use-walkthrough-video.d.ts.map +1 -0
- package/dist/components/features/video-bites-strip.d.ts.map +1 -1
- package/dist/components/features/video-center-badge.d.ts.map +1 -1
- package/dist/components/features/video-hover-preview.d.ts +68 -0
- package/dist/components/features/video-hover-preview.d.ts.map +1 -0
- package/dist/components/features/video.d.ts +78 -40
- package/dist/components/features/video.d.ts.map +1 -1
- package/dist/components/form.d.ts +0 -1
- package/dist/components/form.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +21 -21
- package/dist/components/help-center-pages/index.js +12 -12
- package/dist/components/index.cjs +163 -155
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +18 -10
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +3 -3
- package/dist/components/navigation/index.js +2 -2
- package/dist/components/onboarding-guides/index.cjs +6 -6
- package/dist/components/onboarding-guides/index.js +5 -5
- package/dist/components/related-content/index.cjs +4 -4
- package/dist/components/related-content/index.js +3 -3
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/tickets/index.js +5 -5
- package/dist/components/ui/button/button-styles.d.ts +2 -0
- package/dist/components/ui/button/button-styles.d.ts.map +1 -1
- package/dist/components/ui/button/button.d.ts +2 -2
- package/dist/components/ui/button/button.d.ts.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +50 -50
- package/dist/components/ui/file-manager/index.js +1 -1
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/index.js +2 -2
- package/dist/components/ui/page-actions.d.ts +2 -1
- package/dist/components/ui/page-actions.d.ts.map +1 -1
- package/dist/index.cjs +27 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +28 -4
- package/dist/types/supabase.d.ts +80 -0
- package/dist/types/supabase.d.ts.map +1 -1
- package/dist/types/video-processing.d.ts +1 -1
- package/dist/types/video-processing.d.ts.map +1 -1
- package/dist/utils/announcement-storage.d.ts +1 -1
- package/dist/utils/announcement-storage.d.ts.map +1 -1
- package/dist/utils/dismiss-cookie.d.ts +27 -0
- package/dist/utils/dismiss-cookie.d.ts.map +1 -0
- package/dist/utils/dismissal-storage.d.ts +19 -0
- package/dist/utils/dismissal-storage.d.ts.map +1 -0
- package/dist/utils/index.cjs +48 -10
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -11
- package/dist/utils/index.js.map +1 -1
- package/package.json +8 -2
- package/src/.index.md +39 -32
- package/src/.platform-domains.md +65 -0
- package/src/assets/.fae-avatar.md +33 -0
- package/src/assets/.index.md +15 -9
- package/src/components/.agent-mark.md +31 -0
- package/src/components/.announcement-bar.md +47 -35
- package/src/components/.calendar.md +19 -15
- package/src/components/.categories-cart.md +34 -30
- package/src/components/.category-card.md +33 -33
- package/src/components/.chart.md +38 -40
- package/src/components/.command.md +47 -23
- package/src/components/.comment-card.md +31 -26
- package/src/components/.content-loading-container.md +45 -20
- package/src/components/.context-menu.md +45 -31
- package/src/components/.date-time-picker.md +36 -30
- package/src/components/.empty-state.md +31 -31
- package/src/components/.faq-accordion.md +20 -30
- package/src/components/.filter-chip.md +36 -33
- package/src/components/.footer-waitlist-button.md +27 -21
- package/src/components/.footer.md +39 -24
- package/src/components/.form.md +32 -20
- package/src/components/.hero-image-uploader.md +35 -31
- package/src/components/.icon-display.md +53 -0
- package/src/components/.image-cropper.md +34 -33
- package/src/components/.index.md +25 -29
- package/src/components/.logs-list.md +27 -23
- package/src/components/.media-carousel.md +47 -26
- package/src/components/.metric-value.md +27 -24
- package/src/components/.msp-display.md +29 -23
- package/src/components/.open-source-features.md +23 -26
- package/src/components/.pagination.md +44 -39
- package/src/components/.persistent-filter-controls.md +61 -28
- package/src/components/.pricing-display.md +34 -33
- package/src/components/.results-count.md +33 -20
- package/src/components/.smooth-accordion.md +24 -20
- package/src/components/.social-icon-row.md +33 -21
- package/src/components/.sonner.md +40 -25
- package/src/components/.steps.md +39 -25
- package/src/components/.tool-icon.md +34 -21
- package/src/components/.unified-filter-logic.md +32 -36
- package/src/components/.user-display.md +33 -28
- package/src/components/.user-summary-stub.md +40 -33
- package/src/components/.vendor-display-button.md +17 -15
- package/src/components/.vendor-icon.md +17 -25
- package/src/components/.vendor-tag.md +39 -34
- package/src/components/.why-it-matters.md +15 -11
- package/src/components/.yes-no-display.md +36 -31
- package/src/components/authors/.author-detail-view.md +50 -0
- package/src/components/case-studies/.index.md +26 -0
- package/src/components/case-studies/.share-experience-section.md +45 -0
- package/src/components/chat/.approval-batch-message.md +48 -33
- package/src/components/chat/.approval-request-message.md +37 -26
- package/src/components/chat/.chat-archive-page.md +56 -0
- package/src/components/chat/.chat-attachment-bar.md +32 -40
- package/src/components/chat/.chat-composer.md +43 -0
- package/src/components/chat/.chat-container.md +41 -25
- package/src/components/chat/.chat-context-memory-bar.md +53 -0
- package/src/components/chat/.chat-context-picker.md +89 -0
- package/src/components/chat/.chat-header-icon-button.md +43 -0
- package/src/components/chat/.chat-header-search-field.md +51 -0
- package/src/components/chat/.chat-input.md +63 -30
- package/src/components/chat/.chat-list-empty-state.md +44 -0
- package/src/components/chat/.chat-message-enhanced.md +29 -31
- package/src/components/chat/.chat-message-list.md +34 -44
- package/src/components/chat/.chat-message-row.md +56 -0
- package/src/components/chat/.chat-message-skeleton.md +32 -26
- package/src/components/chat/.chat-panel-header-mobile.md +46 -0
- package/src/components/chat/.chat-panel-header.md +80 -0
- package/src/components/chat/.chat-sidebar-skeleton.md +31 -30
- package/src/components/chat/.chat-sidebar.md +36 -29
- package/src/components/chat/.chat-ticket-list.md +38 -23
- package/src/components/chat/.chat-typing-indicator.md +37 -19
- package/src/components/chat/.context-compaction-display.md +19 -15
- package/src/components/chat/.context-items-list.md +57 -0
- package/src/components/chat/.embeddable-chat.md +57 -66
- package/src/components/chat/.error-message-display.md +40 -22
- package/src/components/chat/.guide-mode-banner.md +41 -0
- package/src/components/chat/.guide-welcome.md +43 -0
- package/src/components/chat/.index.md +26 -21
- package/src/components/chat/.mingo-chat-history.md +63 -0
- package/src/components/chat/.mingo-chat-modals.md +44 -0
- package/src/components/chat/.mingo-history-rail.md +63 -0
- package/src/components/chat/.mingo-info-card.md +59 -0
- package/src/components/chat/.mingo-onboarding-card.md +21 -27
- package/src/components/chat/.mingo-welcome.md +60 -0
- package/src/components/chat/.model-display.md +33 -25
- package/src/components/chat/.msp-organization-card-skeleton.md +44 -0
- package/src/components/chat/.msp-organization-card.md +51 -0
- package/src/components/chat/.nav-link-anchor-via-runtime.md +36 -25
- package/src/components/chat/.quick-action-chip.md +60 -0
- package/src/components/chat/.quick-action-marquee.md +53 -0
- package/src/components/chat/.quick-action-wall.md +68 -0
- package/src/components/chat/.remark-mention-chips.md +41 -0
- package/src/components/chat/.slash-command-suggestions.md +30 -36
- package/src/components/chat/.source-action-button.md +28 -25
- package/src/components/chat/.tool-call-blocks.md +18 -30
- package/src/components/chat/.tool-execution-display.md +29 -34
- package/src/components/chat/entity-cards/.admin-content-card.md +29 -22
- package/src/components/chat/entity-cards/.blog-card.md +44 -33
- package/src/components/chat/entity-cards/.blog-image-placeholder.md +20 -18
- package/src/components/chat/entity-cards/.case-study-card.md +24 -33
- package/src/components/chat/entity-cards/.chat-ticket-item.md +39 -22
- package/src/components/chat/entity-cards/.customer-interview-card.md +29 -32
- package/src/components/chat/entity-cards/.data-room-doc-card.md +21 -22
- package/src/components/chat/entity-cards/.dispatch.md +41 -24
- package/src/components/chat/entity-cards/.entity-author-card.md +36 -33
- package/src/components/chat/entity-cards/.entity-portrait-card.md +47 -0
- package/src/components/chat/entity-cards/.generic-entity-card.md +26 -25
- package/src/components/chat/entity-cards/.github-activity-card.md +35 -41
- package/src/components/chat/entity-cards/.hubspot-ticket-card.md +22 -28
- package/src/components/chat/entity-cards/.index.md +33 -44
- package/src/components/chat/entity-cards/.investor-update-card.md +36 -25
- package/src/components/chat/entity-cards/.onboarding-guide-card.md +20 -29
- package/src/components/chat/entity-cards/.product-release-card-defaults.md +26 -19
- package/src/components/chat/entity-cards/.program-card.md +30 -33
- package/src/components/chat/entity-cards/.roadmap-card.md +40 -31
- package/src/components/chat/entity-cards/.roadmap-vote-button.md +33 -36
- package/src/components/chat/entity-cards/.slack-message-card.md +31 -32
- package/src/components/chat/entity-cards/.use-cover-image-fallback.md +47 -0
- package/src/components/chat/entity-cards/.use-entity-card-link.md +51 -0
- package/src/components/chat/entity-cards/.use-entity-card-placeholder.md +47 -0
- package/src/components/chat/entity-cards/.what-i-shipped-card.md +43 -0
- package/src/components/chat/hooks/.index.md +33 -30
- package/src/components/chat/hooks/.use-chat-card-item.md +30 -17
- package/src/components/chat/hooks/.use-chat-dialog-manager.md +59 -0
- package/src/components/chat/hooks/.use-chat-identity.md +37 -25
- package/src/components/chat/hooks/.use-chunk-catchup.md +53 -36
- package/src/components/chat/hooks/.use-empty-state-config.md +39 -0
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +65 -30
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
- package/src/components/chat/hooks/.use-nats-dialog-subscription.md +66 -50
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +58 -31
- package/src/components/chat/hooks/.use-scripted-stream.md +46 -0
- package/src/components/chat/hooks/.use-slash-commands.md +32 -25
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +32 -21
- package/src/components/chat/hooks/.use-unified-chat.md +45 -35
- package/src/components/chat/types/.api.types.md +49 -41
- package/src/components/chat/types/.chat.types.md +56 -34
- package/src/components/chat/types/.component.types.md +36 -36
- package/src/components/chat/types/.context-item.types.md +61 -0
- package/src/components/chat/types/.index.md +32 -17
- package/src/components/chat/types/.message.types.md +44 -45
- package/src/components/chat/types/.network.types.md +46 -46
- package/src/components/chat/types/.processing.types.md +49 -37
- package/src/components/chat/types/.unified-chat-state.types.md +41 -26
- package/src/components/chat/types/entities/.content-ref.md +20 -31
- package/src/components/chat/types/entities/.investor-update.md +14 -16
- package/src/components/chat/types/entities/.onboarding-guide.md +35 -34
- package/src/components/chat/types/entities/.program-types.md +55 -43
- package/src/components/chat/utils/.chip-action-class.md +17 -19
- package/src/components/chat/utils/.chip-styles.md +18 -18
- package/src/components/chat/utils/.chunk-parser.md +48 -37
- package/src/components/chat/utils/.compact-card-classes.md +33 -35
- package/src/components/chat/utils/.execute-navigation.md +49 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +9 -12
- package/src/components/chat/utils/.history-merge.md +65 -0
- package/src/components/chat/utils/.icon-library.md +33 -31
- package/src/components/chat/utils/.icon-registry.md +44 -0
- package/src/components/chat/utils/.index.md +37 -33
- package/src/components/chat/utils/.is-cross-origin-url.md +26 -22
- package/src/components/chat/utils/.message-segment-accumulator.md +46 -25
- package/src/components/chat/utils/.nav-anchor-props.md +29 -34
- package/src/components/chat/utils/.nav-click-handler.md +29 -33
- package/src/components/chat/utils/.process-historical-messages.md +29 -33
- package/src/components/chat/utils/.scripted-stream.md +52 -0
- package/src/components/chat/utils/.source-row-cta.md +32 -31
- package/src/components/chat/utils/.tool-call-helpers.md +25 -17
- package/src/components/contact/.contact-form.md +24 -19
- package/src/components/docs/.doc-navigation-context.md +49 -0
- package/src/components/docs/.doc-viewer.md +64 -0
- package/src/components/docs/.docs-hub-page.md +49 -0
- package/src/components/docs/.index.md +51 -0
- package/src/components/docs/.skeletons.md +47 -0
- package/src/components/docs/.use-docs-resolve-link.md +61 -0
- package/src/components/docs/.use-document-tree.md +83 -0
- package/src/components/docs/.use-scroll-spy.md +58 -0
- package/src/components/embeds/.embed-container.md +45 -0
- package/src/components/embeds/.embed-iframe.md +51 -0
- package/src/components/embeds/.figma-embed.md +43 -0
- package/src/components/embeds/.file-download-card.md +47 -0
- package/src/components/embeds/.google-sheets-viewer.md +40 -0
- package/src/components/embeds/.index.md +58 -0
- package/src/components/embeds/.linkedin-embed-client.md +50 -0
- package/src/components/embeds/.markdown-image.md +40 -0
- package/src/components/embeds/.og-link-preview.md +54 -0
- package/src/components/embeds/.pdf-viewer.md +43 -0
- package/src/components/embeds/.reddit-embed-client.md +40 -0
- package/src/components/embeds/.rich-markdown-runtime.md +53 -0
- package/src/components/embeds/.twitter-embed-client.md +44 -0
- package/src/components/faq/.faq-document-page.md +68 -0
- package/src/components/faq/.faq-section.md +55 -0
- package/src/components/faq/.index.md +29 -0
- package/src/components/faq/.json-ld.md +48 -0
- package/src/components/features/.array-entry-manager.md +32 -24
- package/src/components/features/.auth-providers-list.md +33 -32
- package/src/components/features/.captions-url.md +43 -0
- package/src/components/features/.cards-strip.md +48 -0
- package/src/components/features/.changelog-manager.md +17 -20
- package/src/components/features/.command-box.md +11 -16
- package/src/components/features/.entity-summary-editor.md +20 -15
- package/src/components/features/.entity-tag-badges.md +43 -0
- package/src/components/features/.entity-video-section.md +31 -41
- package/src/components/features/.figma-prototype-viewer.md +55 -37
- package/src/components/features/.filters-dropdown.md +14 -13
- package/src/components/features/.highlight-config-section.md +19 -16
- package/src/components/features/.highlight-video-combined-section.md +28 -19
- package/src/components/features/.highlight-video-preview.md +13 -11
- package/src/components/features/.highlight-video-section.md +26 -22
- package/src/components/features/.index.md +40 -36
- package/src/components/features/.media-gallery-manager.md +37 -35
- package/src/components/features/.mux-origins.md +46 -0
- package/src/components/features/.og-editor-preview.md +29 -24
- package/src/components/features/.os-type-badge-group.md +26 -18
- package/src/components/features/.os-type-badge.md +41 -24
- package/src/components/features/.paths-display.md +42 -25
- package/src/components/features/.platform-badge.md +26 -17
- package/src/components/features/.policy-configuration-panel.md +33 -31
- package/src/components/features/.provider-button.md +29 -20
- package/src/components/features/.push-button-selector.md +39 -41
- package/src/components/features/.release-media-manager.md +41 -34
- package/src/components/features/.section-selector.md +27 -16
- package/src/components/features/.select-button.md +21 -32
- package/src/components/features/.seo-editor-preview.md +49 -36
- package/src/components/features/.social-links-manager.md +40 -18
- package/src/components/features/.start-with-openframe-button.md +30 -32
- package/src/components/features/.status-filter-component.md +29 -38
- package/src/components/features/.tags-selector.md +25 -29
- package/src/components/features/.transcript-summary-editor.md +24 -18
- package/src/components/features/.use-video-warmup.md +47 -0
- package/src/components/features/.video-bites-display.md +36 -37
- package/src/components/features/.video-bites-shared.md +44 -0
- package/src/components/features/.video-bites-strip.md +63 -0
- package/src/components/features/.video-center-badge.md +38 -0
- package/src/components/features/.video-ratio-tabs.md +38 -31
- package/src/components/features/.video-source-selector.md +24 -27
- package/src/components/features/.video.md +35 -27
- package/src/components/features/.waitlist-form.md +39 -33
- package/src/components/features/.warning-block.md +53 -0
- package/src/components/features/ai-enrich/.AIEnrichSection.md +24 -25
- package/src/components/features/ai-enrich/.AIRequiredBadge.md +22 -21
- package/src/components/features/ai-enrich/.AIStatusIndicator.md +42 -35
- package/src/components/features/ai-enrich/.AIWarningsSection.md +23 -20
- package/src/components/features/ai-enrich/.ConfidenceBadge.md +35 -20
- package/src/components/features/auth/.auth-benefits-panel.md +48 -0
- package/src/components/features/auth/.auth-branding.md +51 -0
- package/src/components/features/auth/.auth-shell.md +51 -0
- package/src/components/features/auth/.back-to-login-link.md +48 -0
- package/src/components/features/auth/.complete-account-form.md +45 -0
- package/src/components/features/auth/.create-organization-form.md +53 -0
- package/src/components/features/auth/.index.md +48 -0
- package/src/components/features/auth/.invite-link-invalid-modal.md +42 -0
- package/src/components/features/auth/.login-form.md +42 -0
- package/src/components/features/auth/.openframe-sso-login-form.md +46 -0
- package/src/components/features/auth/.openframe-sso-signup-form.md +51 -0
- package/src/components/features/auth/.password-reset-form.md +57 -0
- package/src/components/features/auth/.sso-auth-shell.md +35 -0
- package/src/components/features/auth/.sso-providers.md +42 -0
- package/src/components/features/auth/.terms-agreement-label.md +28 -0
- package/src/components/features/board/.board-column-header.md +24 -18
- package/src/components/features/board/.board-column.md +32 -32
- package/src/components/features/board/.board-ticket-approval.md +42 -0
- package/src/components/features/board/.board.md +38 -38
- package/src/components/features/board/.index.md +35 -38
- package/src/components/features/board/.ticket-card.md +33 -36
- package/src/components/features/board/.types.md +38 -31
- package/src/components/features/card-hit-layer.tsx +84 -0
- package/src/components/features/floating-walkthrough-video.tsx +891 -0
- package/src/components/features/index.ts +4 -0
- package/src/components/features/notifications/.approval-request-notification-tile.md +45 -0
- package/src/components/features/notifications/.index.md +35 -31
- package/src/components/features/notifications/.notification-drawer.md +32 -19
- package/src/components/features/notifications/.notification-popups.md +51 -0
- package/src/components/features/notifications/.notification-tile.md +43 -27
- package/src/components/features/notifications/.notifications-context.md +42 -45
- package/src/components/features/notifications/.types.md +51 -31
- package/src/components/features/ticket-status-config-list/.ticket-status-config-list.md +51 -0
- package/src/components/features/time-tracker/.index.md +48 -0
- package/src/components/features/time-tracker/.time-tracker-context.md +55 -0
- package/src/components/features/time-tracker/.time-tracker-header-button.md +51 -0
- package/src/components/features/time-tracker/.time-tracker-panel.md +58 -0
- package/src/components/features/time-tracker/.types.md +51 -0
- package/src/components/features/time-tracker/.use-tracker-clock.md +32 -0
- package/src/components/features/use-walkthrough-video.ts +70 -0
- package/src/components/features/video-bites-strip.tsx +46 -146
- package/src/components/features/video-center-badge.tsx +11 -2
- package/src/components/features/video-hover-preview.tsx +201 -0
- package/src/components/features/video.tsx +368 -73
- package/src/components/help-center-pages/.delivery-page.md +51 -0
- package/src/components/help-center-pages/.index.md +51 -0
- package/src/components/help-center-pages/.onboarding-guides-catalog-page.md +53 -0
- package/src/components/help-center-pages/.product-releases-list-page.md +51 -0
- package/src/components/help-center-pages/.roadmap-page.md +46 -0
- package/src/components/icons/.figma-icon.md +13 -7
- package/src/components/icons/.index.md +26 -22
- package/src/components/icons/.vendor-directory-icon.md +30 -18
- package/src/components/icons/.x-logo.md +26 -10
- package/src/components/icons-v2-generated/.index.md +30 -41
- package/src/components/icons-v2-generated/brand-logos/.index.md +25 -19
- package/src/components/icons-v2-generated/communication/.index.md +26 -30
- package/src/components/icons-v2-generated/logos/.flamingo-logo-icon.md +41 -0
- package/src/components/layout/.article-detail-layout.md +32 -21
- package/src/components/layout/.page-container.md +25 -23
- package/src/components/layout/.page-heading.md +48 -0
- package/src/components/layout/.page-layout.md +30 -25
- package/src/components/layout/.title-block.md +43 -24
- package/src/components/loading/.card-skeleton.md +28 -35
- package/src/components/loading/.category-card-skeleton.md +25 -23
- package/src/components/loading/.device-card-skeleton.md +22 -15
- package/src/components/loading/.margin-report-skeleton.md +30 -35
- package/src/components/loading/.openmsp-heartbeat.md +30 -32
- package/src/components/loading/.organization-card-skeleton.md +22 -25
- package/src/components/loading/.organization-icon-skeleton.md +39 -27
- package/src/components/loading/.page-layout-skeleton.md +50 -28
- package/src/components/loading/.unified-skeleton.md +37 -40
- package/src/components/loading/.users-grid-skeleton.md +19 -38
- package/src/components/navigation/.app-header.md +35 -28
- package/src/components/navigation/.app-layout-context.md +48 -0
- package/src/components/navigation/.app-layout-drawer.md +56 -0
- package/src/components/navigation/.app-layout.md +24 -23
- package/src/components/navigation/.header-mingo-button.md +46 -0
- package/src/components/navigation/.header-organization-filter.md +32 -18
- package/src/components/navigation/.header.md +24 -31
- package/src/components/navigation/.index.md +36 -50
- package/src/components/navigation/.mingo-ai-button.md +41 -0
- package/src/components/navigation/.mobile-burger-menu.md +29 -29
- package/src/components/navigation/.mobile-nav-panel.md +41 -49
- package/src/components/navigation/.multi-level-navigation.md +76 -0
- package/src/components/navigation/.navigation-sidebar-item.md +14 -14
- package/src/components/navigation/.navigation-sidebar.md +30 -23
- package/src/components/navigation/.sliding-sidebar.md +30 -25
- package/src/components/navigation/.sticky-section-nav.md +23 -21
- package/src/components/onboarding-guides/.index.md +40 -0
- package/src/components/onboarding-guides/.onboarding-guide-detail-view.md +55 -0
- package/src/components/onboarding-guides/.onboarding-guides-catalog-skeleton.md +33 -0
- package/src/components/onboarding-guides/.onboarding-guides-catalog-view.md +50 -0
- package/src/components/onboarding-guides/hooks/.use-onboarding-guides.md +54 -0
- package/src/components/platform/.CveLink.md +28 -17
- package/src/components/platform/.ScriptArguments.md +18 -23
- package/src/components/platform/.ScriptInfoSection.md +27 -21
- package/src/components/platform/.ShellTypeBadge.md +34 -18
- package/src/components/platform/.SoftwareInfo.md +23 -21
- package/src/components/platform/.ToolBadge.md +18 -16
- package/src/components/profile/.ProfileLoadingSkeleton.md +24 -23
- package/src/components/related-content/.index.md +41 -0
- package/src/components/related-content/.related-content-section.md +62 -0
- package/src/components/shared/.article-author-byline.md +56 -0
- package/src/components/shared/.detail-page-skeleton.md +32 -43
- package/src/components/shared/.media-gallery-strip.md +43 -0
- package/src/components/shared/delivery/.delivery-lists.md +20 -19
- package/src/components/shared/delivery/.delivery-row.md +24 -20
- package/src/components/shared/delivery/.delivery-table.md +20 -22
- package/src/components/shared/dev-section/.dev-card-row.md +28 -36
- package/src/components/shared/dev-section/.dev-section-page.md +36 -25
- package/src/components/shared/dev-section/.dev-section-view.md +32 -22
- package/src/components/shared/doc-search/.doc-search-bar.md +58 -0
- package/src/components/shared/doc-search/.doc-search-result-row.md +50 -0
- package/src/components/shared/doc-search/.format-relative-path.md +30 -0
- package/src/components/shared/doc-search/.index.md +46 -0
- package/src/components/shared/doc-search/.map-doc-search-results.md +44 -0
- package/src/components/shared/doc-search/.resolve-search-result-action.md +52 -0
- package/src/components/shared/doc-search/.types.md +49 -0
- package/src/components/shared/doc-search/.use-doc-search.md +66 -0
- package/src/components/shared/legal-document/.legal-document-page.md +26 -20
- package/src/components/shared/legal-document/.use-legal-docs.md +36 -30
- package/src/components/shared/onboarding/.onboarding-step-card.md +24 -16
- package/src/components/shared/onboarding/.onboarding-walkthrough.md +42 -28
- package/src/components/shared/product-release/.index.md +33 -24
- package/src/components/shared/product-release/.product-release-card-skeleton.md +22 -28
- package/src/components/shared/product-release/.product-release-card.md +28 -29
- package/src/components/shared/product-release/.product-releases-view.md +49 -0
- package/src/components/shared/product-release/.release-detail-page.md +30 -15
- package/src/components/shared/roadmap/.index.md +29 -24
- package/src/components/shared/roadmap/.roadmap-grid.md +43 -54
- package/src/components/shared/roadmap/.roadmap-view.md +41 -0
- package/src/components/shared/roadmap/.use-roadmap-voting.md +27 -17
- package/src/components/switch.tsx +1 -1
- package/src/components/tickets/.help-center-card.md +32 -28
- package/src/components/tickets/.help-center-create-form.md +34 -22
- package/src/components/tickets/.help-center-list.md +36 -25
- package/src/components/tickets/.index.md +30 -45
- package/src/components/tickets/.ticket-center.md +31 -38
- package/src/components/tickets/.ticket-detail-drawer.md +20 -30
- package/src/components/tickets/.ticket-open-form.md +24 -26
- package/src/components/tickets/.ticket-reply-composer.md +51 -0
- package/src/components/tickets/.ticket-row.md +26 -11
- package/src/components/tickets/.types.md +56 -38
- package/src/components/tickets/hooks/.use-ticket-actions.md +60 -47
- package/src/components/tickets/hooks/.use-ticket-engagements.md +27 -27
- package/src/components/tickets/hooks/.use-tickets-list.md +24 -30
- package/src/components/ui/.accordion.md +28 -21
- package/src/components/ui/.actions-menu.md +36 -54
- package/src/components/ui/.ai-generated-badge.md +25 -0
- package/src/components/ui/.alert-dialog.md +21 -16
- package/src/components/ui/.alert.md +30 -25
- package/src/components/ui/.allowed-domains-input.md +26 -15
- package/src/components/ui/.announcement-bar-view.md +46 -0
- package/src/components/ui/.autocomplete.md +40 -27
- package/src/components/ui/.badge.md +34 -31
- package/src/components/ui/.brand-association-card.md +22 -18
- package/src/components/ui/.breadcrumb.md +18 -14
- package/src/components/ui/.bullet-list.md +35 -23
- package/src/components/ui/.card.md +47 -30
- package/src/components/ui/.checkbox-block.md +34 -22
- package/src/components/ui/.checkbox-with-description.md +18 -20
- package/src/components/ui/.chevron-button.md +29 -29
- package/src/components/ui/.circular-progress.md +30 -41
- package/src/components/ui/.color-preset-select.md +54 -0
- package/src/components/ui/.color-swatch.md +37 -0
- package/src/components/ui/.content-loader.md +34 -27
- package/src/components/ui/.crossfade-panels.md +50 -0
- package/src/components/ui/.cursor-pagination.md +38 -26
- package/src/components/ui/.dashboard-info-card.md +46 -27
- package/src/components/ui/.date-picker.md +52 -36
- package/src/components/ui/.device-card-compact.md +23 -20
- package/src/components/ui/.device-card.md +39 -30
- package/src/components/ui/.dialog.md +14 -14
- package/src/components/ui/.drawer.md +45 -39
- package/src/components/ui/.dropdown-button.md +41 -33
- package/src/components/ui/.dropdown-menu.md +40 -23
- package/src/components/ui/.duration-input.md +41 -0
- package/src/components/ui/.entity-image.md +32 -28
- package/src/components/ui/.error-state.md +30 -26
- package/src/components/ui/.fade-preview.md +44 -0
- package/src/components/ui/.field-wrapper.md +34 -23
- package/src/components/ui/.file-upload.md +30 -18
- package/src/components/ui/.filter-modal.md +30 -32
- package/src/components/ui/.filter-pill-row.md +58 -0
- package/src/components/ui/.floating-tooltip.md +27 -32
- package/src/components/ui/.hidden-tags-popup.md +18 -20
- package/src/components/ui/.highlight-card.md +36 -23
- package/src/components/ui/.honeypot-field.md +41 -0
- package/src/components/ui/.hover-dropdown.md +44 -31
- package/src/components/ui/.image-gallery-modal.md +28 -30
- package/src/components/ui/.image-uploader.md +39 -22
- package/src/components/ui/.index.md +33 -31
- package/src/components/ui/.info-card-row.md +50 -0
- package/src/components/ui/.info-card.md +27 -20
- package/src/components/ui/.info-row.md +30 -24
- package/src/components/ui/.info-section.md +63 -0
- package/src/components/ui/.input.md +29 -28
- package/src/components/ui/.label.md +34 -26
- package/src/components/ui/.markdown-editor.md +26 -25
- package/src/components/ui/.marquee-wall.md +64 -0
- package/src/components/ui/.menubar.md +50 -16
- package/src/components/ui/.modal-v2.md +41 -27
- package/src/components/ui/.modal.md +22 -19
- package/src/components/ui/.more-actions-menu.md +30 -24
- package/src/components/ui/.navigation-menu.md +40 -25
- package/src/components/ui/.organization-card.md +46 -27
- package/src/components/ui/.page-actions.md +55 -41
- package/src/components/ui/.page-loader.md +40 -23
- package/src/components/ui/.password-input.md +30 -0
- package/src/components/ui/.phone-input.md +20 -22
- package/src/components/ui/.portal-container.md +43 -0
- package/src/components/ui/.progress-bar.md +40 -27
- package/src/components/ui/.release-changelog-section.md +32 -26
- package/src/components/ui/.rich-markdown-renderer.md +45 -0
- package/src/components/ui/.scroll-fade.md +56 -0
- package/src/components/ui/.search-input.md +55 -37
- package/src/components/ui/.select.md +25 -26
- package/src/components/ui/.service-card.md +25 -19
- package/src/components/ui/.sheet.md +21 -21
- package/src/components/ui/.simple-markdown-renderer.md +36 -24
- package/src/components/ui/.slack-channel-chip.md +49 -0
- package/src/components/ui/.square-avatar.md +29 -26
- package/src/components/ui/.stacked-rows-panel.md +61 -0
- package/src/components/ui/.status-badge.md +30 -24
- package/src/components/ui/.status-indicator.md +35 -21
- package/src/components/ui/.tab-content.md +34 -22
- package/src/components/ui/.tab-navigation.md +40 -50
- package/src/components/ui/.tab-selector.md +48 -31
- package/src/components/ui/.tabs.md +34 -21
- package/src/components/ui/.tag-search-input.md +20 -20
- package/src/components/ui/.tag-select-dropdown.md +59 -0
- package/src/components/ui/.tag.md +25 -43
- package/src/components/ui/.tags-input.md +31 -31
- package/src/components/ui/.textarea.md +32 -30
- package/src/components/ui/.ticket-attachments-list.md +36 -29
- package/src/components/ui/.ticket-info-section.md +37 -42
- package/src/components/ui/.ticket-status-config-row.md +66 -0
- package/src/components/ui/.ticket-status-tag.md +39 -35
- package/src/components/ui/.toaster.md +21 -15
- package/src/components/ui/.toggle.md +38 -37
- package/src/components/ui/.tooltip.md +16 -13
- package/src/components/ui/button/.button-styles.md +17 -18
- package/src/components/ui/button/.button.md +30 -37
- package/src/components/ui/button/.split-button.md +46 -23
- package/src/components/ui/button/button-styles.ts +13 -0
- package/src/components/ui/button/button.tsx +5 -0
- package/src/components/ui/data-table/.data-table-body.md +50 -35
- package/src/components/ui/data-table/.data-table-empty.md +17 -33
- package/src/components/ui/data-table/.data-table-header.md +43 -40
- package/src/components/ui/data-table/.data-table-row.md +31 -31
- package/src/components/ui/data-table/.types.md +23 -28
- package/src/components/ui/file-manager/.file-manager-breadcrumb.md +16 -24
- package/src/components/ui/file-manager/.file-manager-empty.md +23 -15
- package/src/components/ui/file-manager/.file-manager-skeleton.md +34 -36
- package/src/components/ui/file-manager/.file-manager-table-row.md +29 -29
- package/src/components/ui/file-manager/.file-manager-table.md +39 -24
- package/src/components/ui/no-data/.index.md +22 -0
- package/src/components/ui/no-data/.no-data-actions.md +29 -0
- package/src/components/ui/no-data/.no-data-message.md +37 -0
- package/src/components/ui/no-data/.no-data-styles.md +39 -0
- package/src/components/ui/no-data/.no-data.md +59 -0
- package/src/components/ui/page-actions.tsx +2 -1
- package/src/components/ui/query-report-table/.query-report-table-header.md +15 -15
- package/src/components/ui/query-report-table/.query-report-table-row.md +16 -16
- package/src/components/ui/query-report-table/.query-report-table.md +39 -24
- package/src/components/ui/table/.table-column-filter-dropdown.md +15 -9
- package/src/components/ui/table/.table-description-cell.md +13 -12
- package/src/components/ui/table/.table-empty-state.md +19 -20
- package/src/components/ui/table/.table-row.md +30 -20
- package/src/components/ui/table/.table-skeleton.md +32 -27
- package/src/components/ui/table/.table-timestamp-cell.md +24 -23
- package/src/components/ui/table/.table.md +43 -30
- package/src/components/ui/table/.types.md +49 -45
- package/src/components/ui/table/.use-table-motion.md +45 -0
- package/src/contexts/.chat-runtime-context.md +55 -26
- package/src/contexts/.endpoints-runtime-context.md +40 -44
- package/src/embed-shims/.next-navigation.md +38 -31
- package/src/hooks/.api-hooks.md +28 -21
- package/src/hooks/.index.md +30 -25
- package/src/hooks/.use-authed-image-src.md +38 -0
- package/src/hooks/.use-contact-submission.md +35 -36
- package/src/hooks/.use-humanity-signals.md +47 -0
- package/src/hooks/.use-near-viewport.md +30 -30
- package/src/hooks/.use-og-placeholder-url.md +57 -0
- package/src/hooks/.use-scroll-to-hash.md +46 -0
- package/src/hooks/.use-self-fetch.md +52 -0
- package/src/hooks/state/.flatten-schema.md +37 -29
- package/src/hooks/ui/.index.md +37 -25
- package/src/hooks/ui/.use-auto-limit-tags.md +55 -38
- package/src/hooks/ui/.use-deferred-error.md +44 -0
- package/src/hooks/ui/.use-focus-trap.md +59 -0
- package/src/hooks/ui/.use-header-height.md +37 -0
- package/src/hooks/ui/.use-horizontal-scrollbar.md +25 -34
- package/src/hooks/ui/.use-marquee-engine.md +73 -0
- package/src/hooks/ui/.use-notification-permission.md +49 -0
- package/src/hooks/ui/.use-reset-on-page-hidden.md +40 -0
- package/src/hooks/ui/.use-suppress-clone-focus.md +41 -0
- package/src/nats/.index.md +39 -0
- package/src/nats/.nats-provider.md +46 -0
- package/src/nats/.nats.md +38 -28
- package/src/nats/.shared-connection.md +56 -0
- package/src/nats/.use-nats-subscription.md +57 -0
- package/src/stories/.ActionsMenu.stories.md +57 -0
- package/src/stories/.Alert.stories.md +46 -0
- package/src/stories/.AnnouncementBar.stories.md +59 -32
- package/src/stories/.AppLayoutDrawer.stories.md +60 -0
- package/src/stories/.AppLayoutSidebar.stories.md +45 -0
- package/src/stories/.ApprovalBatchMessage.stories.md +46 -0
- package/src/stories/.ApprovalBatchMessageClient.stories.md +55 -0
- package/src/stories/.ApprovalRequestMessage.stories.md +50 -0
- package/src/stories/.ApprovalRequestMessageClient.stories.md +41 -0
- package/src/stories/.BlogCard.stories.md +52 -0
- package/src/stories/.Board.stories.md +25 -20
- package/src/stories/.Button.stories.md +35 -40
- package/src/stories/.CampaignCardAdmin.stories.md +38 -0
- package/src/stories/.CardsStrip.stories.md +39 -0
- package/src/stories/.CaseStudyCard.stories.md +41 -0
- package/src/stories/.ChatContainer.stories.md +41 -0
- package/src/stories/.ChatInlineVideoPill.stories.md +36 -0
- package/src/stories/.ChatMessageEnhanced.stories.md +51 -0
- package/src/stories/.ChatMingoInfoCards.stories.md +30 -0
- package/src/stories/.ChatTicketList.stories.md +38 -22
- package/src/stories/.ChatTypingIndicator.stories.md +47 -0
- package/src/stories/.CheckboxBlock.stories.md +34 -35
- package/src/stories/.ContextCompactionDisplay.stories.md +28 -0
- package/src/stories/.CustomerInterviewCard.stories.md +36 -0
- package/src/stories/.DashboardInfoCard.stories.md +40 -33
- package/src/stories/.DataRoomDocCard.stories.md +42 -0
- package/src/stories/.DataTable.stories.md +37 -32
- package/src/stories/.DatePicker.stories.md +34 -30
- package/src/stories/.EmbeddableChat.stories.md +45 -28
- package/src/stories/.EmptyState.stories.md +55 -0
- package/src/stories/.ErrorMessageDisplay.stories.md +45 -0
- package/src/stories/.FilterModal.stories.md +28 -22
- package/src/stories/.GenericEntityCard.stories.md +50 -0
- package/src/stories/.GitHubActivityCard.stories.md +41 -0
- package/src/stories/.GuideWelcome.stories.md +38 -0
- package/src/stories/.Header.stories.md +32 -22
- package/src/stories/.HubspotTicketCard.stories.md +41 -0
- package/src/stories/.InfoCard.stories.md +37 -26
- package/src/stories/.InfoCardRow.stories.md +48 -0
- package/src/stories/.InfoSection.stories.md +55 -0
- package/src/stories/.Input.stories.md +45 -35
- package/src/stories/.InvestorUpdateCard.stories.md +41 -0
- package/src/stories/.MarqueeWall.stories.md +53 -0
- package/src/stories/.MingoAiButton.stories.md +31 -0
- package/src/stories/.MingoChatModals.stories.md +47 -0
- package/src/stories/.MingoInfoCard.stories.md +50 -0
- package/src/stories/.MingoOnboardingCard.stories.md +19 -19
- package/src/stories/.MingoWelcome.stories.md +41 -0
- package/src/stories/.MobileNavPanel.stories.md +52 -0
- package/src/stories/.Modal.stories.md +19 -16
- package/src/stories/.MspOrganizationCard.stories.md +45 -0
- package/src/stories/.NotificationDrawer.stories.md +39 -28
- package/src/stories/.OSTypeBadge.stories.md +34 -25
- package/src/stories/.OnboardingGuideCard.stories.md +41 -0
- package/src/stories/.PageActions.stories.md +21 -21
- package/src/stories/.PageContainer.stories.md +29 -24
- package/src/stories/.PageLayout.stories.md +18 -35
- package/src/stories/.PolicyConfigurationPanel.stories.md +58 -0
- package/src/stories/.ProductReleaseCard.stories.md +39 -0
- package/src/stories/.ProgramCard.stories.md +51 -0
- package/src/stories/.QuickActionChip.stories.md +59 -0
- package/src/stories/.QuickActionMarquee.stories.md +51 -0
- package/src/stories/.QuickActionWall.stories.md +58 -0
- package/src/stories/.RoadmapCard.stories.md +41 -0
- package/src/stories/.ShellTypeBadge.stories.md +42 -22
- package/src/stories/.SlackMessageCard.stories.md +42 -0
- package/src/stories/.SlashCommandSuggestions.stories.md +21 -31
- package/src/stories/.SplitButton.stories.md +23 -25
- package/src/stories/.StackedRowsPanel.stories.md +65 -0
- package/src/stories/.TabSelector.stories.md +26 -38
- package/src/stories/.Tag.stories.md +32 -27
- package/src/stories/.ThinkingDisplay.stories.md +43 -0
- package/src/stories/.TicketCard.stories.md +60 -0
- package/src/stories/.TicketInfoSection.stories.md +28 -20
- package/src/stories/.TimeTracker.stories.md +35 -0
- package/src/stories/.Toaster.stories.md +26 -20
- package/src/stories/.ToolBadge.stories.md +34 -24
- package/src/stories/.ToolExecutionDisplay.stories.md +22 -20
- package/src/stories/.ToolExecutionDisplayClient.stories.md +33 -0
- package/src/stories/.VideoBitesStrip.stories.md +37 -0
- package/src/stories/.WarningBlock.stories.md +51 -0
- package/src/stories/__fixtures__/.chat-card-decorator.md +39 -0
- package/src/stories/__fixtures__/.chat-cards.md +57 -0
- package/src/stories/auth/.CompleteAccount.stories.md +36 -0
- package/src/stories/auth/.CreateOrganization.stories.md +52 -0
- package/src/stories/auth/.InviteLinkInvalid.stories.md +21 -0
- package/src/stories/auth/.Login.stories.md +32 -0
- package/src/stories/auth/.OpenFrameSso.stories.md +58 -0
- package/src/stories/auth/.PasswordReset.stories.md +49 -0
- package/src/styles/ods-interaction-states.css +32 -0
- package/src/types/.announcement.md +67 -35
- package/src/types/.blog.md +44 -41
- package/src/types/.case-study.md +31 -17
- package/src/types/.content-ref.md +37 -0
- package/src/types/.customer-interview.md +38 -38
- package/src/types/.doc-source.md +87 -0
- package/src/types/.entity-author.md +53 -0
- package/src/types/.entity-platform.md +40 -0
- package/src/types/.index.md +23 -17
- package/src/types/.marketing.md +32 -35
- package/src/types/.navigation.md +31 -19
- package/src/types/.os.types.md +30 -31
- package/src/types/.permissions.md +49 -35
- package/src/types/.platform.md +44 -28
- package/src/types/.product-release.md +59 -42
- package/src/types/.shell.types.md +46 -30
- package/src/types/.supabase.md +43 -29
- package/src/types/.tool.types.md +43 -23
- package/src/types/.video-processing.md +40 -31
- package/src/types/supabase.ts +80 -0
- package/src/types/video-processing.ts +1 -0
- package/src/utils/.announcement-storage.md +49 -17
- package/src/utils/.app-config.md +22 -18
- package/src/utils/.brand-marks.md +46 -0
- package/src/utils/.cn.md +40 -29
- package/src/utils/.color-analysis.md +34 -25
- package/src/utils/.common.md +43 -23
- package/src/utils/.content-href.md +64 -0
- package/src/utils/.content-ref-groups.md +51 -0
- package/src/utils/.date-utils.md +46 -35
- package/src/utils/.doc-path-utils.md +38 -0
- package/src/utils/.doc-tree-nav.md +51 -0
- package/src/utils/.embed-authed-fetch.md +48 -32
- package/src/utils/.embed-content-fetch.md +36 -0
- package/src/utils/.embed-url-converters.md +52 -0
- package/src/utils/.extract-items.md +49 -0
- package/src/utils/.faq-anchor.md +48 -0
- package/src/utils/.format.md +73 -55
- package/src/utils/.humanity-signals.md +59 -0
- package/src/utils/.index.md +73 -31
- package/src/utils/.list-url.md +43 -0
- package/src/utils/.markdown-section-extractor.md +57 -0
- package/src/utils/.markdown-to-plain.md +51 -0
- package/src/utils/.media-carousel-utils-stub.md +42 -31
- package/src/utils/.ods-color-utils.md +84 -43
- package/src/utils/.og-placeholder.md +45 -0
- package/src/utils/.page-header-constants.md +26 -0
- package/src/utils/.platform-config.md +34 -34
- package/src/utils/.release-badge.md +47 -0
- package/src/utils/.release-cover.md +45 -0
- package/src/utils/.same-page-hash-nav.md +45 -0
- package/src/utils/.scroll-into-view.md +32 -25
- package/src/utils/.seo-description.md +37 -0
- package/src/utils/.seo-title.md +25 -0
- package/src/utils/.social-embed-cache.md +37 -0
- package/src/utils/.source-icons.md +30 -34
- package/src/utils/.suggestion-url.md +46 -0
- package/src/utils/.tool-utils.md +39 -24
- package/src/utils/.tree-builder.md +64 -0
- package/src/utils/.video-bite-id.md +42 -0
- package/src/utils/announcement-storage.ts +9 -18
- package/src/utils/dev-sections/.dev-section-param-keys.md +51 -0
- package/src/utils/dev-sections/.openframe-dev-sections.md +40 -28
- package/src/utils/dismiss-cookie.ts +55 -0
- package/src/utils/dismissal-storage.ts +38 -0
- package/src/utils/index.ts +3 -0
- package/dist/chunk-BBUEY73L.js.map +0 -1
- package/dist/chunk-G3UN2DXU.cjs.map +0 -1
- package/dist/chunk-OWMLWJQY.cjs.map +0 -1
- package/dist/chunk-SASR7SK5.js.map +0 -1
- package/src/components/chat/utils/.onboarding-icons.md +0 -28
- package/src/hooks/.use-og-placeholder.md +0 -51
- /package/dist/{chunk-MGKCS6KS.js.map → chunk-3WCARCI4.js.map} +0 -0
- /package/dist/{chunk-Y3Y2DLNO.js.map → chunk-6UGYBCEN.js.map} +0 -0
- /package/dist/{chunk-PSPWT2Q5.js.map → chunk-7LWXWXEY.js.map} +0 -0
- /package/dist/{chunk-VTSRDC4W.js.map → chunk-CKC3EAYT.js.map} +0 -0
- /package/dist/{chunk-ZRANZNEA.js.map → chunk-JJE5TUZK.js.map} +0 -0
- /package/dist/{chunk-66BNAFO6.js.map → chunk-JQIUBFHL.js.map} +0 -0
- /package/dist/{chunk-2DIOV7BR.js.map → chunk-UPN6EFOM.js.map} +0 -0
- /package/dist/{chunk-4SMRQ4SN.js.map → chunk-WBL5Y4PS.js.map} +0 -0
- /package/dist/{chunk-FP4H6Y5O.js.map → chunk-WPYPSIY2.js.map} +0 -0
- /package/dist/{chunk-R5WJJL4V.js.map → chunk-X5X43HFV.js.map} +0 -0
- /package/dist/{chunk-DEHZ5CTC.js.map → chunk-XTWKDMCG.js.map} +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: 13917fe1e6b23215d3b8f20208831188 -->
|
|
2
|
+
Client-side React hook that manages invisible bot-protection signals — a honeypot field reference and a mount timestamp — for attachment to public form submissions.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `useHumanitySignals` | Hook | Returns honeypot input props, a signal getter, and a reset function |
|
|
9
|
+
| `honeypotInputProps` | `{ ref, name }` | Spread onto a hidden `<input>` to capture bot-filled values |
|
|
10
|
+
| `getSignals` | `() => HumanitySignals` | Produces the wire object (`HONEYPOT_FIELD` + `ELAPSED_MS_FIELD`) to merge into a POST body |
|
|
11
|
+
| `resetSignals` | `() => void` | Clears the honeypot value and resets the mount timestamp after a successful submit |
|
|
12
|
+
|
|
13
|
+
**Signal strategy:**
|
|
14
|
+
- `HONEYPOT_FIELD` — a hidden input that legitimate users never fill; non-empty value indicates a bot.
|
|
15
|
+
- `ELAPSED_MS_FIELD` — milliseconds since mount using `performance.now()` (monotonic, immune to wall-clock skew); suspiciously low values indicate automated submissions.
|
|
16
|
+
|
|
17
|
+
Both signals travel in the request body, so they remain functional behind reverse proxies or prefixed URLs.
|
|
18
|
+
|
|
19
|
+
## Usage Example
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { useHumanitySignals } from '@/hooks/use-humanity-signals'
|
|
23
|
+
import { HoneypotField } from '@/components/honeypot-field'
|
|
24
|
+
|
|
25
|
+
function ContactForm() {
|
|
26
|
+
const { honeypotInputProps, getSignals, resetSignals } = useHumanitySignals()
|
|
27
|
+
|
|
28
|
+
async function handleSubmit(formData: Record<string, string>) {
|
|
29
|
+
await fetch('/api/contact', {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
body: JSON.stringify({ ...formData, ...getSignals() }),
|
|
32
|
+
})
|
|
33
|
+
resetSignals()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<form onSubmit={...}>
|
|
38
|
+
<HoneypotField {...honeypotInputProps} />
|
|
39
|
+
{/* ...other fields */}
|
|
40
|
+
</form>
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
> This hook is SSR-safe: both `performance.now()` calls are guarded against server-side execution even though the hook is marked `'use client'`.
|
|
46
|
+
|
|
47
|
+
**Source:** [`use-humanity-signals.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-humanity-signals.ts)
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: c797174c623bbd0d74779f436ba36a2f -->
|
|
2
|
+
Provides a shared, module-level `IntersectionObserver` hook that efficiently detects when an element approaches the viewport, firing once and unobserving on first intersection.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
### Constants & Module-Level Singletons
|
|
7
|
+
|
|
8
|
+
- **`NEAR_VIEWPORT_ROOT_MARGIN`** — Default lookahead distance (`'500px'`); exported as SSOT for viewport-proximity logic across the codebase.
|
|
9
|
+
- **`observers`** — `Map<string, IntersectionObserver>` keyed by `rootMargin|threshold`; one IO per unique config, shared across all subscribers.
|
|
10
|
+
- **`subscribers`** — `WeakMap<Element, () => void>` mapping observed elements to their callbacks; avoids memory leaks on unmount.
|
|
11
|
+
- **`THRESHOLD_EPSILON`** — Float rounding slack (`0.01`) for sub-pixel `intersectionRatio` comparisons.
|
|
12
|
+
|
|
13
|
+
### Functions
|
|
14
|
+
|
|
15
|
+
- **`observerKey(rootMargin, threshold)`** — Generates a stable string key for the observer map.
|
|
16
|
+
- **`getObserverFor(rootMargin, threshold)`** — Returns an existing IO or creates and caches a new one for the given config.
|
|
17
|
+
|
|
18
|
+
### Hook
|
|
19
|
+
|
|
20
|
+
- **`useNearViewport<T>(rootMargin?, threshold?)`** — Returns `{ ref, isNear }`. Subscribes the attached element to the shared IO; flips `isNear` to `true` once the element meets the threshold, then unobserves. Safe under React StrictMode's double-mount via callback identity checks.
|
|
21
|
+
|
|
22
|
+
### Interface
|
|
23
|
+
|
|
24
|
+
- **`UseNearViewportResult<T>`** — `{ ref: (node: T | null) => void, isNear: boolean }`
|
|
13
25
|
|
|
14
26
|
## Usage Example
|
|
15
27
|
|
|
16
28
|
```typescript
|
|
17
29
|
import { useNearViewport } from './use-near-viewport';
|
|
18
30
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const { ref, isNear } = useNearViewport(
|
|
22
|
-
return
|
|
23
|
-
<div ref={ref}>
|
|
24
|
-
{isNear ? <HeavyMediaComponent /> : <Placeholder />}
|
|
25
|
-
</div>
|
|
26
|
-
);
|
|
31
|
+
function LazyCard() {
|
|
32
|
+
// Start loading 500px before scroll-in (default margin)
|
|
33
|
+
const { ref, isNear } = useNearViewport();
|
|
34
|
+
return <div ref={ref}>{isNear ? <HeavyChild /> : <Placeholder />}</div>;
|
|
27
35
|
}
|
|
28
36
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const { ref, isNear } = useNearViewport('0px');
|
|
32
|
-
|
|
33
|
-
if (isNear) trackImpression();
|
|
34
|
-
}, [isNear]);
|
|
35
|
-
return <div ref={ref} />;
|
|
37
|
+
function HalfVisibleCard() {
|
|
38
|
+
// Fire only when at least 50% of the element is on-screen
|
|
39
|
+
const { ref, isNear } = useNearViewport('0px', 0.5);
|
|
40
|
+
return <div ref={ref}>{isNear ? <Chart /> : null}</div>;
|
|
36
41
|
}
|
|
37
42
|
```
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
- **Fires once**: `isNear` flips to `true` on first intersection and never resets; the element is unobserved immediately after
|
|
42
|
-
- **Shared observers**: All components using the same `rootMargin` share a single `IntersectionObserver` — efficient for grid/list pages with many cards
|
|
43
|
-
- **StrictMode safe**: Cleanup uses callback identity checks to survive React's dev-mode double-mount cycle without dropping subscriptions
|
|
44
|
-
- **Race safe**: IO callback re-reads `subscribers` at fire time so late-firing callbacks after unmount cannot invoke stale state setters
|
|
44
|
+
> **Note:** `isNear` is fire-once and never resets. For two-way mount/unmount behavior, use a raw `IntersectionObserver` instead and share `NEAR_VIEWPORT_ROOT_MARGIN` for distance consistency.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!-- source-hash: 6a8b6b64036a92c403c29835e73faf22 -->
|
|
2
|
+
React hook that resolves a branded OG placeholder image URL by reading runtime endpoints from `ChatRuntime` context and delegating to `buildOgPlaceholderUrl`.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `UseOgPlaceholderUrlArgs`
|
|
7
|
+
Configuration interface for the hook:
|
|
8
|
+
|
|
9
|
+
| Property | Type | Default | Description |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| `title` | `string \| undefined \| null` | — | Text displayed on the placeholder image |
|
|
12
|
+
| `siteName` | `string` | `''` | Site name shown below the title |
|
|
13
|
+
| `aspect` | `'wide' \| 'square'` | `'wide'` | `'wide'` = 1200×630 social card; `'square'` = 1024×1024 for compact chat-inline slots |
|
|
14
|
+
| `enabled` | `boolean` | `true` | When `false`, returns `null` instead of a URL |
|
|
15
|
+
|
|
16
|
+
### `useOgPlaceholderUrl`
|
|
17
|
+
The single canonical hook for OG placeholder resolution. Reads `endpoints` from `ChatRuntime` context and passes them to `buildOgPlaceholderUrl`, which resolves the route base via:
|
|
18
|
+
|
|
19
|
+
1. Explicit `ogPlaceholderUrl` endpoint
|
|
20
|
+
2. Derived from `imageProxyUrlPrefix`
|
|
21
|
+
3. Same-origin fallback `/api/og-placeholder`
|
|
22
|
+
|
|
23
|
+
Returns a memoized `string | null`. Per-platform brand colors are resolved server-side by the route handler — nothing is baked into the URL.
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { useOgPlaceholderUrl } from './use-og-placeholder-url'
|
|
29
|
+
|
|
30
|
+
function LinkCard({ title, siteName }: { title: string; siteName: string }) {
|
|
31
|
+
// Wide social-card placeholder (default)
|
|
32
|
+
const placeholderUrl = useOgPlaceholderUrl({ title, siteName })
|
|
33
|
+
|
|
34
|
+
// Square variant for compact chat-inline slots
|
|
35
|
+
const squarePlaceholderUrl = useOgPlaceholderUrl({
|
|
36
|
+
title,
|
|
37
|
+
siteName,
|
|
38
|
+
aspect: 'square',
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
// Conditionally disabled — returns null when no title is available
|
|
42
|
+
const conditionalUrl = useOgPlaceholderUrl({
|
|
43
|
+
title,
|
|
44
|
+
enabled: Boolean(title),
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
return <img src={placeholderUrl ?? '/fallback.png'} alt={title} />
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Notes
|
|
52
|
+
|
|
53
|
+
- Replaces the older builder-injection pattern `useOgPlaceholder(buildUrl, …)` — callers no longer supply a URL builder.
|
|
54
|
+
- `useEntityCardPlaceholder` delegates here, ensuring all surfaces share one memo and one code path.
|
|
55
|
+
- Safe to call with a nullish `title`; returns `null` without throwing.
|
|
56
|
+
|
|
57
|
+
**Source:** [`use-og-placeholder-url.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-og-placeholder-url.ts)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- source-hash: 41cddbc1609de359a4385ad11867ade8 -->
|
|
2
|
+
Scrolls the page to `window.location.hash` after a dependency resolves, using a `requestAnimationFrame` polling loop to handle lazy-mounted elements like Radix accordion panels or SWR-fetched rows.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `useScrollToHash` | Hook | Main hook that drives hash-based scroll behavior |
|
|
9
|
+
| `UseScrollToHashOptions` | Interface | Configuration options for the hook |
|
|
10
|
+
| `MAX_POLL_FRAMES` | Constant | rAF poll budget (~1s at 60fps) before giving up |
|
|
11
|
+
|
|
12
|
+
### `UseScrollToHashOptions`
|
|
13
|
+
|
|
14
|
+
| Property | Type | Default | Description |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `headerOffset` | `number` | `0` | Pixels to subtract for sticky headers/chrome |
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// Basic — runs on mount for SSR-rendered anchors
|
|
22
|
+
useScrollToHash()
|
|
23
|
+
|
|
24
|
+
// Wait for async data before attempting scroll
|
|
25
|
+
const { data } = useSWR('/api/items')
|
|
26
|
+
useScrollToHash(data)
|
|
27
|
+
|
|
28
|
+
// With sticky header compensation
|
|
29
|
+
useScrollToHash(data, { headerOffset: 64 })
|
|
30
|
+
|
|
31
|
+
// Delay until accordion/drawer is fully open
|
|
32
|
+
const [isOpen, setIsOpen] = useState(false)
|
|
33
|
+
useScrollToHash(isOpen)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Behavior Notes
|
|
37
|
+
|
|
38
|
+
- **Polling:** Calls `requestAnimationFrame` up to `MAX_POLL_FRAMES` (60) times, giving lazy-mounted DOM nodes ~1 second to appear before aborting.
|
|
39
|
+
- **Skipped when** `readyDep` is `null` or `false` — safe to pass unresolved async state directly.
|
|
40
|
+
- **Re-runs on:** `hashchange` events (browser back/forward navigation) and the synthetic `navigateSamePageHash` event, in addition to `readyDep` reference changes.
|
|
41
|
+
- **Concurrent safety:** Cancels any in-flight rAF poll before starting a new one to prevent double-scroll races.
|
|
42
|
+
- **SSR safe:** Guards against `window` being undefined.
|
|
43
|
+
|
|
44
|
+
## Source
|
|
45
|
+
|
|
46
|
+
[`use-scroll-to-hash.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-scroll-to-hash.ts)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!-- source-hash: 884662ede8163c89d9ac2a0519142f27 -->
|
|
2
|
+
A lightweight React hook that fetches JSON data into component state using plain `fetch` + `useEffect`, intentionally avoiding any external data-fetching library (no react-query, no QueryClient required).
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `UseSelfFetchResult<T>`
|
|
7
|
+
Return type interface exposing:
|
|
8
|
+
- `data` — fetched payload or `null`
|
|
9
|
+
- `setData` — imperative state setter for optimistic updates
|
|
10
|
+
- `isLoading` — boolean loading indicator
|
|
11
|
+
- `error` — boolean error flag
|
|
12
|
+
- `reload()` — forces a re-fetch (error-retry affordance)
|
|
13
|
+
|
|
14
|
+
### `useSelfFetch<T>(url, options?)`
|
|
15
|
+
Core hook with two optional config values:
|
|
16
|
+
- `options.initialData` — seeds state from SSR-rendered data, skipping the initial fetch
|
|
17
|
+
- `options.revalidateOnVisibleAfterMs` — opt-in tab-visibility revalidation; re-fetches when the held data is older than the given threshold (replaces `setInterval` polling)
|
|
18
|
+
|
|
19
|
+
## Usage Example
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// Basic self-fetch
|
|
23
|
+
const { data, isLoading, error, reload } = useSelfFetch<Product[]>(
|
|
24
|
+
'/api/products?page=1'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
// SSR-hydrated: skips first fetch, re-fetches on url change
|
|
28
|
+
const { data, setData } = useSelfFetch<RoadmapItem[]>(
|
|
29
|
+
`/api/roadmap?section=${section}`,
|
|
30
|
+
{ initialData: serverData }
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
// With tab-visibility revalidation (5 minutes)
|
|
34
|
+
const { data } = useSelfFetch<Release[]>(
|
|
35
|
+
'/api/releases',
|
|
36
|
+
{ revalidateOnVisibleAfterMs: 5 * 60 * 1000 }
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
// Optimistic update (e.g. upvote)
|
|
40
|
+
setData((prev) => prev ? { ...prev, votes: prev.votes + 1 } : prev)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Behavior Notes
|
|
44
|
+
|
|
45
|
+
- **`url = null`** disables fetching entirely (controlled/SSR mode)
|
|
46
|
+
- **Stale-request guard** — an `AbortController` + `cancelled` flag prevents race conditions when `url` changes rapidly (e.g. pagination)
|
|
47
|
+
- **SSR hydration skip** — `dataUrlRef` tracks the URL whose data is currently held; the fetch effect is skipped when it matches, surviving React 18 StrictMode's double-mount in dev
|
|
48
|
+
- **`reload()`** nulls `dataUrlRef` so the same URL can be re-fetched after an error
|
|
49
|
+
|
|
50
|
+
## Source
|
|
51
|
+
|
|
52
|
+
[`use-self-fetch.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-self-fetch.ts)
|
|
@@ -1,43 +1,51 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: f6f23c54f1dcd6f13c1c04a935fe719d -->
|
|
2
|
+
Utilities for flattening nested GraphQL input type schemas into flat URL parameter mappings, enabling clean URL state management for GraphQL-powered views.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
- `flattenQueryVariables()` - Core function that flattens GraphQL variables using schema introspection
|
|
8
|
-
- `mergeDefaults()` - Merges default values into the flattened schema
|
|
9
|
-
- `validateSchema()` - Ensures no URL parameter name conflicts exist
|
|
10
|
-
- `getArrayParams()` - Identifies which parameters should use repeated URL values
|
|
11
|
-
- `getRequiredParams()` - Lists required parameters from the schema
|
|
12
|
-
- `shouldIncludeInUrl()` - Determines if a parameter value should be included in the URL
|
|
6
|
+
### Interfaces
|
|
13
7
|
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
- **`FlattenedParam`** — Describes a single URL parameter, including its `urlParamName`, `graphqlPath` (e.g., `filter.severity`), `type`, `defaultValue`, `required`, and `isArray` flags.
|
|
9
|
+
|
|
10
|
+
### Functions
|
|
11
|
+
|
|
12
|
+
| Function | Description |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `flattenQueryVariables` | Async. Converts nested GraphQL query variables into a flat `Record<string, FlattenedParam>`. Uses introspection to expand input object fields. |
|
|
15
|
+
| `mergeDefaults` | Merges a defaults map into an existing flattened schema, overriding or populating `defaultValue` per param. |
|
|
16
|
+
| `validateSchema` | Throws if any two params resolve to the same `urlParamName` (conflict detection). |
|
|
17
|
+
| `getArrayParams` | Returns keys of all array-typed params; useful for repeated URL value handling (e.g., `?severity=error&severity=warning`). |
|
|
18
|
+
| `getRequiredParams` | Returns keys of all required params. |
|
|
19
|
+
| `shouldIncludeInUrl` | Returns `false` for `null`/`undefined`, empty arrays, empty strings, or values matching `defaultValue`; keeps URLs clean. |
|
|
16
20
|
|
|
17
21
|
## Usage Example
|
|
18
22
|
|
|
19
23
|
```typescript
|
|
20
|
-
import { flattenQueryVariables, validateSchema } from './flatten-schema'
|
|
24
|
+
import { flattenQueryVariables, mergeDefaults, validateSchema, shouldIncludeInUrl } from './flatten-schema'
|
|
21
25
|
import { GraphQLIntrospector } from './introspection'
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
const introspector = new GraphQLIntrospector(/* ... */)
|
|
28
|
+
await introspector.load()
|
|
29
|
+
|
|
30
|
+
const queryVariables = {
|
|
31
|
+
search: { type: 'string', required: false, isArray: false },
|
|
32
|
+
filter: { type: 'object', graphqlTypeName: 'LogFilterInput', required: false, isArray: false },
|
|
28
33
|
}
|
|
29
34
|
|
|
30
|
-
// Flatten
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
// Flatten: { filter: { severity } } → ?severity=...
|
|
36
|
+
let schema = await flattenQueryVariables(queryVariables, introspector)
|
|
37
|
+
|
|
38
|
+
// Apply defaults
|
|
39
|
+
schema = mergeDefaults(schema, { severity: ['info'] })
|
|
40
|
+
|
|
41
|
+
// Validate no URL param name conflicts
|
|
42
|
+
validateSchema(schema)
|
|
43
|
+
|
|
44
|
+
// Check if a value should be written to the URL
|
|
45
|
+
const include = shouldIncludeInUrl(['critical'], schema.severity) // true
|
|
46
|
+
const skip = shouldIncludeInUrl([], schema.severity) // false
|
|
47
|
+
```
|
|
33
48
|
|
|
34
|
-
|
|
35
|
-
// flatSchema = {
|
|
36
|
-
// search: { urlParamName: 'search', graphqlPath: 'search', type: 'string' },
|
|
37
|
-
// severity: { urlParamName: 'severity', graphqlPath: 'filter.severity', type: 'array' },
|
|
38
|
-
// toolType: { urlParamName: 'toolType', graphqlPath: 'filter.toolType', type: 'array' }
|
|
39
|
-
// }
|
|
49
|
+
## Source
|
|
40
50
|
|
|
41
|
-
|
|
42
|
-
const arrayParams = getArrayParams(flatSchema) // ['severity', 'toolType']
|
|
43
|
-
```
|
|
51
|
+
[`flatten-schema.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/flatten-schema.ts)
|
package/src/hooks/ui/.index.md
CHANGED
|
@@ -1,41 +1,53 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Barrel export file
|
|
1
|
+
<!-- source-hash: f2ee6838846ee9d01b393ef923facc58 -->
|
|
2
|
+
Barrel export file for the UI hooks library, re-exporting all custom React hooks and the `usePreventScroll` utility from `@react-aria/overlays` under a single import path.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
|
7
|
-
|
|
8
|
-
| `
|
|
9
|
-
| `
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `useAutoLimitTags` | Limits visible tags based on container width |
|
|
9
|
+
| `useDebounce` | Delays value updates by a specified duration |
|
|
10
|
+
| `useDeferredError` | Defers error state for async workflows |
|
|
11
|
+
| `useFocusTrap` | Traps keyboard focus within a DOM subtree |
|
|
12
|
+
| `useHeaderHeight` | Tracks the application header's pixel height |
|
|
13
|
+
| `useHorizontalScrollbar` | Detects and manages horizontal scrollbar presence |
|
|
14
|
+
| `useImageEdgeColor` | Samples the edge color of an image element |
|
|
15
|
+
| `useLocalStorage` | Synced, typed `localStorage` state |
|
|
16
|
+
| `useMarqueeEngine` | Drives text marquee/ticker animations |
|
|
17
|
+
| `useMediaQuery` | Reactive CSS media query matching |
|
|
18
|
+
| `useMemoizedCallback` | Stable callback reference with deep-equality memoization |
|
|
19
|
+
| `useNotificationPermission` | Reads and requests browser notification permission |
|
|
20
|
+
| `useOnboardingState` | Manages multi-step onboarding flow state |
|
|
21
|
+
| `useResetOnPageHidden` | Resets state when the page visibility changes to hidden |
|
|
22
|
+
| `useSearch` | Controlled search input with filtering logic |
|
|
23
|
+
| `useSuppressCloneFocus` | Prevents focus events on cloned DOM nodes |
|
|
24
|
+
| `useTablePagination` | Pagination state and helpers for data tables |
|
|
25
|
+
| `useThrottle` | Throttles rapidly firing values or callbacks |
|
|
26
|
+
| `useWindowSize` | Reactive viewport width and height |
|
|
27
|
+
| `usePreventScroll` | Ref-counted, iOS-aware body scroll lock (`@react-aria/overlays`) |
|
|
20
28
|
|
|
21
29
|
## Usage Example
|
|
22
30
|
|
|
23
31
|
```typescript
|
|
32
|
+
// Single import path for all hooks
|
|
24
33
|
import {
|
|
25
34
|
useDebounce,
|
|
26
35
|
useLocalStorage,
|
|
27
36
|
useWindowSize,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
} from '@your-package/hooks'
|
|
37
|
+
usePreventScroll,
|
|
38
|
+
} from '@openframe-oss-lib/hooks'
|
|
31
39
|
|
|
32
|
-
|
|
33
|
-
const { width, height } = useWindowSize()
|
|
40
|
+
function SearchPanel() {
|
|
34
41
|
const [query, setQuery] = useLocalStorage('search-query', '')
|
|
35
42
|
const debouncedQuery = useDebounce(query, 300)
|
|
36
|
-
const {
|
|
37
|
-
const { page, pageSize, onPageChange } = useTablePagination()
|
|
43
|
+
const { width } = useWindowSize()
|
|
38
44
|
|
|
39
|
-
|
|
45
|
+
usePreventScroll({ isDisabled: width > 768 })
|
|
46
|
+
|
|
47
|
+
return <input value={query} onChange={e => setQuery(e.target.value)} />
|
|
40
48
|
}
|
|
41
|
-
```
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Source
|
|
52
|
+
|
|
53
|
+
[`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
|
|
@@ -1,54 +1,71 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Calculates how many
|
|
1
|
+
<!-- source-hash: 3512572c1b5ae0dfa77abc80ec31167a -->
|
|
2
|
+
Calculates how many tag chips fit in a single-line container using real DOM measurements, supporting both fixed and automatic (`"auto"`) limits with `ResizeObserver`-driven updates.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `useAutoLimitTags(options)`
|
|
7
|
-
Main hook that returns
|
|
7
|
+
Main hook that returns refs and a `visibleCount` to drive tag overflow rendering.
|
|
8
|
+
|
|
9
|
+
**Options (`UseAutoLimitTagsOptions`):**
|
|
8
10
|
|
|
9
|
-
**Options**
|
|
10
11
|
| Option | Type | Default | Description |
|
|
11
12
|
|---|---|---|---|
|
|
12
13
|
| `count` | `number` | — | Total number of tags |
|
|
13
|
-
| `limitTags` | `number \| "auto"` | `"auto"` | Fixed
|
|
14
|
-
| `placeholder` | `string` | `""` | Input placeholder used to reserve width |
|
|
14
|
+
| `limitTags` | `number \| "auto"` | `"auto"` | Fixed limit or DOM-based measurement |
|
|
15
|
+
| `placeholder` | `string` | `""` | Input placeholder used to reserve input width |
|
|
16
|
+
| `reserveInputWidth` | `boolean` | `true` | Reserve trailing space for a combobox input |
|
|
17
|
+
|
|
18
|
+
**Returns (`UseAutoLimitTagsReturn`):**
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
| Ref | Element | Purpose |
|
|
20
|
+
| Ref / Value | Attach to | Purpose |
|
|
18
21
|
|---|---|---|
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
22
|
+
| `visibleCount` | — | Number of tags to render visibly |
|
|
23
|
+
| `middleRef` | `<div>` (tag + input zone) | Source of CSS metrics (padding, gap, width) |
|
|
24
|
+
| `measureRef` | `<div>` (off-screen) | Holds hidden copies of all tags for width measurement |
|
|
25
|
+
| `textMeasureRef` | `<span>` (off-screen) | Measures placeholder text width |
|
|
26
|
+
| `badgeRef` | `<button>` (+N badge) | Measures overflow badge width |
|
|
27
|
+
| `inputRef` | `<input>` | Reads `min-width` for input reservation |
|
|
25
28
|
|
|
26
29
|
## Usage Example
|
|
27
30
|
|
|
28
31
|
```typescript
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
32
|
+
import { useAutoLimitTags } from "./use-auto-limit-tags"
|
|
33
|
+
|
|
34
|
+
function TagRow({ tags }: { tags: string[] }) {
|
|
35
|
+
const {
|
|
36
|
+
visibleCount,
|
|
37
|
+
middleRef,
|
|
38
|
+
measureRef,
|
|
39
|
+
textMeasureRef,
|
|
40
|
+
badgeRef,
|
|
41
|
+
inputRef,
|
|
42
|
+
} = useAutoLimitTags({ count: tags.length, placeholder: "Search..." })
|
|
43
|
+
|
|
44
|
+
const overflowCount = tags.length - visibleCount
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<>
|
|
48
|
+
{/* Visible tag zone */}
|
|
49
|
+
<div ref={middleRef} style={{ overflow: "hidden", display: "flex", gap: 8 }}>
|
|
50
|
+
{tags.slice(0, visibleCount).map((tag) => (
|
|
51
|
+
<span key={tag}>{tag}</span>
|
|
52
|
+
))}
|
|
53
|
+
{overflowCount > 0 && (
|
|
54
|
+
<button ref={badgeRef}>+{overflowCount}</button>
|
|
55
|
+
)}
|
|
56
|
+
<input ref={inputRef} placeholder="Search..." />
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
{/* Off-screen measurement elements */}
|
|
60
|
+
<div ref={measureRef} style={{ visibility: "hidden", position: "absolute" }}>
|
|
61
|
+
{tags.map((tag) => <span key={tag}>{tag}</span>)}
|
|
62
|
+
</div>
|
|
63
|
+
<span ref={textMeasureRef} style={{ visibility: "hidden", position: "absolute" }}>
|
|
64
|
+
Search...
|
|
65
|
+
</span>
|
|
66
|
+
</>
|
|
67
|
+
)
|
|
68
|
+
}
|
|
52
69
|
```
|
|
53
70
|
|
|
54
|
-
> **Note:** `
|
|
71
|
+
> **Note:** The `measureRef` container must render a hidden copy of **all** tags off-screen so the hook can measure each chip's true rendered width regardless of which tags are currently visible.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- source-hash: 470d7db06c3aaa133ca4e063375a0c98 -->
|
|
2
|
+
Manages the timing of when field-level validation error messages are displayed, deferring visibility until the user has stopped typing or left the field.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `UseDeferredErrorResult`
|
|
7
|
+
Interface describing the hook's return value:
|
|
8
|
+
- `error` — The validation message to render, or `undefined` when suppressed (user is still typing) or the field is valid
|
|
9
|
+
- `onBlur` — Callback to attach to the field's `onBlur` event; immediately reveals the error and keeps validation live going forward
|
|
10
|
+
|
|
11
|
+
### `useDeferredError(error, value, delay?)`
|
|
12
|
+
Hook that controls error reveal timing with two trigger paths:
|
|
13
|
+
- **Blur/touch** — Revealing immediately when the field loses focus (`onBlur`), and remaining live thereafter
|
|
14
|
+
- **Idle timer** — Revealing after `delay` ms (default `1500`) of no value changes; every keystroke resets the countdown
|
|
15
|
+
|
|
16
|
+
Once a field is touched, the error stays reactive. If the error clears (field becomes valid), it disappears immediately regardless of touch/pause state.
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { useDeferredError } from './use-deferred-error'
|
|
22
|
+
|
|
23
|
+
function EmailField({ value, onChange, validationError }) {
|
|
24
|
+
const { error, onBlur } = useDeferredError(validationError, value)
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<div>
|
|
28
|
+
<input
|
|
29
|
+
type="email"
|
|
30
|
+
value={value}
|
|
31
|
+
onChange={(e) => onChange(e.target.value)}
|
|
32
|
+
onBlur={onBlur}
|
|
33
|
+
/>
|
|
34
|
+
{error && <span className="error">{error}</span>}
|
|
35
|
+
</div>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
To use a custom delay (e.g. 800 ms for faster feedback):
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
const { error, onBlur } = useDeferredError(validationError, value, 800)
|
|
44
|
+
```
|