@flamingo-stack/openframe-frontend-core 0.0.481 → 0.0.482-snapshot.20260726003127
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-FP4H6Y5O.js → chunk-3VMCJK7A.js} +3 -3
- package/dist/{chunk-OWMLWJQY.cjs → chunk-5YFXUXOV.cjs} +2432 -1502
- package/dist/chunk-5YFXUXOV.cjs.map +1 -0
- package/dist/{chunk-4SMRQ4SN.js → chunk-6U7HIZSW.js} +3 -3
- package/dist/{chunk-MMCBQJKE.cjs → chunk-AZZQLEKY.cjs} +11 -11
- package/dist/{chunk-MMCBQJKE.cjs.map → chunk-AZZQLEKY.cjs.map} +1 -1
- package/dist/{chunk-OZJN54R5.cjs → chunk-CG5OX6WF.cjs} +37 -37
- package/dist/{chunk-OZJN54R5.cjs.map → chunk-CG5OX6WF.cjs.map} +1 -1
- package/dist/{chunk-LK623WCC.cjs → chunk-DYLIBE6I.cjs} +9 -9
- package/dist/{chunk-LK623WCC.cjs.map → chunk-DYLIBE6I.cjs.map} +1 -1
- package/dist/{chunk-AN47EIIJ.cjs → chunk-FEQW64Q5.cjs} +59 -59
- package/dist/{chunk-AN47EIIJ.cjs.map → chunk-FEQW64Q5.cjs.map} +1 -1
- package/dist/{chunk-66BNAFO6.js → chunk-FIRIO2NB.js} +4 -4
- package/dist/{chunk-MGKCS6KS.js → chunk-GWJNTDXR.js} +2 -2
- package/dist/{chunk-SASR7SK5.js → chunk-GZK7FWJJ.js} +20 -4
- package/dist/chunk-GZK7FWJJ.js.map +1 -0
- package/dist/{chunk-DEHZ5CTC.js → chunk-HAJQWSSU.js} +2 -2
- package/dist/{chunk-JUJY3HQS.cjs → chunk-JBC5DAI5.cjs} +19 -19
- package/dist/{chunk-JUJY3HQS.cjs.map → chunk-JBC5DAI5.cjs.map} +1 -1
- package/dist/{chunk-VTSRDC4W.js → chunk-JKRX3JHT.js} +2 -2
- package/dist/{chunk-M7O74OWG.cjs → chunk-KDXEKD3K.cjs} +31 -31
- package/dist/{chunk-M7O74OWG.cjs.map → chunk-KDXEKD3K.cjs.map} +1 -1
- package/dist/{chunk-Y3Y2DLNO.js → chunk-LT2PU6SK.js} +3 -3
- package/dist/{chunk-R5WJJL4V.js → chunk-RDCAJDX7.js} +5 -5
- package/dist/{chunk-N2JZ33V7.cjs → chunk-RFMH6MLM.cjs} +26 -26
- package/dist/{chunk-N2JZ33V7.cjs.map → chunk-RFMH6MLM.cjs.map} +1 -1
- package/dist/{chunk-BBUEY73L.js → chunk-RJ4OJWT5.js} +6269 -5339
- package/dist/chunk-RJ4OJWT5.js.map +1 -0
- package/dist/{chunk-G3UN2DXU.cjs → chunk-STYA77PH.cjs} +20 -4
- package/dist/chunk-STYA77PH.cjs.map +1 -0
- package/dist/{chunk-PSPWT2Q5.js → chunk-T2S7A5IU.js} +4 -4
- package/dist/{chunk-INDFIVDV.cjs → chunk-UAFJX7YV.cjs} +12 -12
- package/dist/{chunk-INDFIVDV.cjs.map → chunk-UAFJX7YV.cjs.map} +1 -1
- package/dist/{chunk-H6DFCF44.cjs → chunk-UO7TF67V.cjs} +82 -82
- package/dist/{chunk-H6DFCF44.cjs.map → chunk-UO7TF67V.cjs.map} +1 -1
- package/dist/{chunk-LNKWY74S.cjs → chunk-UTIW7O7R.cjs} +5 -5
- package/dist/{chunk-LNKWY74S.cjs.map → chunk-UTIW7O7R.cjs.map} +1 -1
- package/dist/{chunk-2DIOV7BR.js → chunk-WIITTL5I.js} +4 -4
- package/dist/{chunk-ZRANZNEA.js → chunk-Y37XYIWA.js} +2 -2
- package/dist/{chunk-ZV6E3U3C.cjs → chunk-ZN56E4FX.cjs} +30 -30
- package/dist/{chunk-ZV6E3U3C.cjs.map → chunk-ZN56E4FX.cjs.map} +1 -1
- 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/marketing.d.ts +11 -1
- package/dist/types/marketing.d.ts.map +1 -1
- 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 +25 -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/marketing.ts +11 -0
- 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 +44 -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-FP4H6Y5O.js.map → chunk-3VMCJK7A.js.map} +0 -0
- /package/dist/{chunk-4SMRQ4SN.js.map → chunk-6U7HIZSW.js.map} +0 -0
- /package/dist/{chunk-66BNAFO6.js.map → chunk-FIRIO2NB.js.map} +0 -0
- /package/dist/{chunk-MGKCS6KS.js.map → chunk-GWJNTDXR.js.map} +0 -0
- /package/dist/{chunk-DEHZ5CTC.js.map → chunk-HAJQWSSU.js.map} +0 -0
- /package/dist/{chunk-VTSRDC4W.js.map → chunk-JKRX3JHT.js.map} +0 -0
- /package/dist/{chunk-Y3Y2DLNO.js.map → chunk-LT2PU6SK.js.map} +0 -0
- /package/dist/{chunk-R5WJJL4V.js.map → chunk-RDCAJDX7.js.map} +0 -0
- /package/dist/{chunk-PSPWT2Q5.js.map → chunk-T2S7A5IU.js.map} +0 -0
- /package/dist/{chunk-2DIOV7BR.js.map → chunk-WIITTL5I.js.map} +0 -0
- /package/dist/{chunk-ZRANZNEA.js.map → chunk-Y37XYIWA.js.map} +0 -0
|
@@ -1,46 +1,62 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 136c109b7bdd3302447f1c154892d2e4 -->
|
|
2
|
+
Shared `fetch` wrapper for embedded surfaces (chat, ticket center, widgets) that attaches bearer-act-as identity headers (`Authorization` + `X-Chat-Act-As`) from proxy auth storage, with support for host-supplied auth adapters, cross-origin defense, and 401 self-healing.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
###
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- `
|
|
18
|
-
- `refresh()` — `Promise<boolean>` 401 self-heal hook (see above). This lifts the openframe `apiClient`'s refresh-then-retry behaviour into the lib so embedded surfaces no longer need a host-side `window.fetch` monkey-patch to survive an expired token mid-session.
|
|
19
|
-
|
|
20
|
-
### `assertSameOrigin(url)` *(internal)*
|
|
21
|
-
Defense-in-depth guard that:
|
|
22
|
-
- Resolves all URL forms (relative, absolute, protocol-relative, whitespace-prefixed) against `window.location.href` via the WHATWG `URL` constructor — bypasses regex shortcuts vulnerable to `\t`/`\n` prefix tricks
|
|
23
|
-
- Blocks non-`http(s):` schemes explicitly (`javascript:`, `data:`, `blob:`, etc.)
|
|
24
|
-
- Throws on cross-origin destinations before any bearer token leaves the page
|
|
25
|
-
- Skips silently during SSR (`typeof window === 'undefined'`)
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
- **`EmbedAuthAdapter`** — Interface for host-supplied auth overrides. Supports `getHeaders()`, `credentials`, `refresh` (401 self-heal), and `allowedOrigins` (native-shell hatch for cross-origin allowlisting).
|
|
9
|
+
|
|
10
|
+
### Functions
|
|
11
|
+
|
|
12
|
+
| Function | Description |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `setEmbedAuthAdapter(adapter)` | Registers (or clears) a host-owned auth adapter at the `globalThis` slot `__embedAuthedFetchAdapter__`. Warns on overwrite in non-production. |
|
|
15
|
+
| `hasEmbedAuthAdapter()` | Returns `true` when an adapter is currently registered; used by sibling helpers to route through `embedAuthedFetch` only when embedded auth is active. |
|
|
16
|
+
| `needsBearerAssetFetch(url)` | Returns `true` when the URL's origin is in the adapter's `allowedOrigins` AND the adapter is supplying an `Authorization` header — signals that native asset loads (`<img src>`) must use fetch + blob object-URL instead. |
|
|
17
|
+
| `embedAuthedFetch(url, init?)` | Drop-in `fetch` replacement. Merges proxy auth headers, enforces same-origin (or `allowedOrigins`) guard synchronously, and performs a single 401 refresh + retry when `adapter.refresh` is registered. |
|
|
26
18
|
|
|
27
19
|
## Usage Example
|
|
28
20
|
|
|
29
21
|
```typescript
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
import {
|
|
23
|
+
setEmbedAuthAdapter,
|
|
24
|
+
embedAuthedFetch,
|
|
25
|
+
needsBearerAssetFetch,
|
|
26
|
+
} from './embed-authed-fetch'
|
|
27
|
+
|
|
28
|
+
// Register a host adapter on provider mount
|
|
29
|
+
setEmbedAuthAdapter({
|
|
30
|
+
getHeaders: () => ({
|
|
31
|
+
Authorization: token ? `Bearer ${token}` : undefined,
|
|
32
|
+
}),
|
|
33
|
+
credentials: 'include',
|
|
34
|
+
refresh: async () => {
|
|
35
|
+
const refreshed = await refreshAccessToken()
|
|
36
|
+
return refreshed
|
|
37
|
+
},
|
|
38
|
+
allowedOrigins: ['https://gateway.example.com'],
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
// Use as a drop-in fetch replacement for /api/chat/* routes
|
|
42
|
+
const response = await embedAuthedFetch('/api/chat/messages', {
|
|
32
43
|
method: 'POST',
|
|
33
44
|
body: JSON.stringify({ message: 'Hello' }),
|
|
34
45
|
})
|
|
35
46
|
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
// Route asset loads through fetch when bearer is required
|
|
48
|
+
if (needsBearerAssetFetch(imageUrl)) {
|
|
49
|
+
const res = await embedAuthedFetch(imageUrl)
|
|
50
|
+
const blob = await res.blob()
|
|
51
|
+
imgElement.src = URL.createObjectURL(blob)
|
|
52
|
+
}
|
|
41
53
|
|
|
42
|
-
//
|
|
43
|
-
|
|
54
|
+
// Clear adapter on provider unmount
|
|
55
|
+
setEmbedAuthAdapter(null)
|
|
44
56
|
```
|
|
45
57
|
|
|
46
|
-
>
|
|
58
|
+
> **Note:** The adapter is stored on `globalThis` (key `__embedAuthedFetchAdapter__`) rather than module scope to survive bundler code-splitting across multiple entry points. Routes that do not need bearer-act-as (e.g. `/api/profile/me`) should continue using vanilla `fetch`.
|
|
59
|
+
|
|
60
|
+
## Source
|
|
61
|
+
|
|
62
|
+
[`embed-authed-fetch.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/embed-authed-fetch.ts)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!-- source-hash: 62e7c52af0777cb746a6d452c7225669 -->
|
|
2
|
+
Thin routing shim that directs content-surface HTTP requests through the embed auth adapter when one is registered, or falls back to a plain `fetch` otherwise.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `contentFetch`
|
|
7
|
+
|
|
8
|
+
A `typeof fetch`-compatible function used by all self-fetching content surfaces (roadmap, delivery, product releases, onboarding guides, legal docs, release-detail injected sections). Routes requests based on adapter presence:
|
|
9
|
+
|
|
10
|
+
- **Adapter registered** → delegates to `embedAuthedFetch`, which attaches bearer tokens/cookies and handles 401 refresh — the same auth path used by the embedded chat.
|
|
11
|
+
- **No adapter** → returns a plain, unmodified `fetch` call.
|
|
12
|
+
|
|
13
|
+
Internally coerces the full `RequestInfo | URL` input shape down to a plain string URL, since `embedAuthedFetch` accepts only strings. Handles all three input variants (`string`, `URL`, `Request`) defensively, even though content surfaces always pass strings in practice.
|
|
14
|
+
|
|
15
|
+
## Usage Example
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// After wiring the embed auth adapter once for the chat surface,
|
|
19
|
+
// all content fetches automatically inherit the same auth:
|
|
20
|
+
|
|
21
|
+
import { contentFetch } from './embed-content-fetch'
|
|
22
|
+
|
|
23
|
+
// Used internally by content surfaces — no configuration needed
|
|
24
|
+
const response = await contentFetch('/api/roadmap/items', {
|
|
25
|
+
method: 'GET',
|
|
26
|
+
headers: { 'Content-Type': 'application/json' },
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const data = await response.json()
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
> Hosts register auth **once** via `EmbedAuthAdapter` for the chat surface; `contentFetch` inherits it automatically with no additional setup required.
|
|
33
|
+
|
|
34
|
+
## Source
|
|
35
|
+
|
|
36
|
+
[`embed-content-fetch.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/embed-content-fetch.ts)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!-- source-hash: 2e5892bd515faa4d91f2c3e44db6baa3 -->
|
|
2
|
+
Shared utilities for converting external service URLs (Google Sheets, Figma) into embeddable iframe-compatible formats. Used by embed components in the lib and the admin document editor in the hub.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `toGoogleSheetsEmbedUrl` | Converts a Google Sheets URL to the `htmlembed` format, preserving the `gid` (sheet tab) parameter |
|
|
9
|
+
| `toGoogleSheetsOriginalUrl` | Normalizes a Sheets URL back to the standard `/edit#gid=` format |
|
|
10
|
+
| `toFigmaEmbedUrl` | Converts any Figma URL (design, proto, slides/deck, board) to `embed.figma.com`, injecting `embed-host` and optional `client-id` params |
|
|
11
|
+
| `isFigmaSlidesUrl` | Returns `true` if the URL points to a Figma Slides or Deck resource |
|
|
12
|
+
| `toFigmaOriginalUrl` | Strips embed-specific domain and query string to recover the original Figma URL |
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import {
|
|
18
|
+
toGoogleSheetsEmbedUrl,
|
|
19
|
+
toFigmaEmbedUrl,
|
|
20
|
+
isFigmaSlidesUrl,
|
|
21
|
+
} from './embed-url-converters'
|
|
22
|
+
|
|
23
|
+
// Google Sheets — converts to htmlembed with tab preserved
|
|
24
|
+
const sheetsEmbed = toGoogleSheetsEmbedUrl(
|
|
25
|
+
'https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/edit#gid=0'
|
|
26
|
+
)
|
|
27
|
+
// → https://docs.google.com/spreadsheets/d/1Bxi.../htmlembed?widget=true&chrome=false&headers=false&gid=0
|
|
28
|
+
|
|
29
|
+
// Figma design
|
|
30
|
+
const figmaEmbed = toFigmaEmbedUrl(
|
|
31
|
+
'https://www.figma.com/design/ABC123/My-Component'
|
|
32
|
+
)
|
|
33
|
+
// → https://embed.figma.com/design/ABC123/My-Component?embed-host=flamingo
|
|
34
|
+
|
|
35
|
+
// Figma slides — browse mode
|
|
36
|
+
const slidesEmbed = toFigmaEmbedUrl(
|
|
37
|
+
'https://www.figma.com/slides/ABC123/Deck',
|
|
38
|
+
{ slidesView: 'browse' }
|
|
39
|
+
)
|
|
40
|
+
// → https://embed.figma.com/slides/ABC123/Deck?embed-host=flamingo
|
|
41
|
+
|
|
42
|
+
// Type guard
|
|
43
|
+
isFigmaSlidesUrl('https://www.figma.com/deck/ABC123/Q3-Review') // → true
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Notes
|
|
47
|
+
|
|
48
|
+
- `toFigmaEmbedUrl` reads `NEXT_PUBLIC_FIGMA_CLIENT_ID` from the environment and injects it as a `client-id` query param when present.
|
|
49
|
+
- Already-embedded URLs (containing `embed.figma.com` or `/htmlembed`) are returned unchanged — all converters are idempotent.
|
|
50
|
+
- Figma `slides` and `deck` URL types both map to the `deck` embed view by default; pass `{ slidesView: 'browse' }` to switch to the `slides` browse view.
|
|
51
|
+
|
|
52
|
+
**Source:** [`embed-url-converters.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/embed-url-converters.ts)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- source-hash: 5e010896207fab5f7b8fcce5af44e754 -->
|
|
2
|
+
Normalizes list-API response shapes into a consistent `unknown[]` array and extracts stable item identifiers across varying endpoint payload structures. Pure utility functions with no runtime dependencies — safe for server and client use.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Signature | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `extractItems` | `(data: unknown) => unknown[]` | Normalizes heterogeneous response shapes into a flat array |
|
|
9
|
+
| `extractItemId` | `(type: string, item: unknown) => string \| null` | Extracts a stable primary key from an item, handling `id` vs `external_id` variance |
|
|
10
|
+
|
|
11
|
+
### `extractItems` — Supported Response Shapes
|
|
12
|
+
|
|
13
|
+
| Property | Source |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `{ items }` | General list endpoints |
|
|
16
|
+
| `{ posts }` | Post/blog endpoints |
|
|
17
|
+
| `{ campaigns }` | Campaign endpoints |
|
|
18
|
+
| `{ completed, inProgress }` | Delivery endpoints (flattened) |
|
|
19
|
+
| `{ data }` | Generic data wrapper |
|
|
20
|
+
| Raw `Array` | Direct array responses |
|
|
21
|
+
|
|
22
|
+
### `extractItemId` — Key Resolution Strategy
|
|
23
|
+
|
|
24
|
+
For `roadmap_item`, `delivery_item`, and `internal_task` types, `external_id` is checked first (ClickUp-backed IDs). Falls back to `obj.id` as string or coerced number for all other types.
|
|
25
|
+
|
|
26
|
+
## Usage Example
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { extractItems, extractItemId } from './extract-items'
|
|
30
|
+
|
|
31
|
+
// Normalize any list endpoint response
|
|
32
|
+
const rawResponse = await fetchCampaigns()
|
|
33
|
+
const items = extractItems(rawResponse) // always returns Item[]
|
|
34
|
+
|
|
35
|
+
// Resolve a stable ID regardless of item type
|
|
36
|
+
for (const item of items) {
|
|
37
|
+
const id = extractItemId('roadmap_item', item)
|
|
38
|
+
if (id) console.log('Matched item:', id)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Delivery endpoint — flattens completed + inProgress automatically
|
|
42
|
+
const deliveryItems = extractItems({ completed: [...], inProgress: [...] })
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Notes
|
|
46
|
+
|
|
47
|
+
- **No external dependencies** — no `@tanstack/react-query` import, intentionally hoisted to keep this out of the chat hooks chunk
|
|
48
|
+
- **Re-exported** from `lib/utils/entity-list-api.ts` in the hub repo as the single normalization implementation across both repositories
|
|
49
|
+
- Source: [`src/lib/utils/extract-items.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/lib/utils/extract-items.ts)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: 86e3de31861d76eca010d803a819a536 -->
|
|
2
|
+
Single source of truth for FAQ deep-link anchor formatting and parsing on the `/faqs` page, covering both category-level and item-level hash targets.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `faqSectionSlug` | `function` | Generates a `faq-<slug>` anchor id for a category section |
|
|
9
|
+
| `faqItemAnchor` | `function` | Generates a `faq-item-<id>` anchor id for an individual FAQ row |
|
|
10
|
+
| `FaqHashTarget` | `type` | Discriminated union representing a parsed hash result (`item` or `section`) |
|
|
11
|
+
| `parseFaqHash` | `function` | Parses a `/faqs#…` hash string into a typed `FaqHashTarget` or `null` |
|
|
12
|
+
|
|
13
|
+
## Hash Format Contract
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
/faqs#faq-pricing → section anchor (jump-nav, scroll-spy)
|
|
17
|
+
/faqs#faq-item-42 → item anchor (chat citation, auto-expand + scroll)
|
|
18
|
+
/faqs#anything-else → null (unrecognised, callers early-out)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Usage Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { faqSectionSlug, faqItemAnchor, parseFaqHash } from './faq-anchor'
|
|
25
|
+
|
|
26
|
+
// Rendering anchors
|
|
27
|
+
const sectionId = faqSectionSlug('Pricing & Plans') // → 'faq-pricing-plans'
|
|
28
|
+
const itemId = faqItemAnchor(42) // → 'faq-item-42'
|
|
29
|
+
|
|
30
|
+
// Parsing on mount (e.g. FaqSection auto-open logic)
|
|
31
|
+
const target = parseFaqHash(window.location.hash)
|
|
32
|
+
|
|
33
|
+
if (target?.kind === 'item') {
|
|
34
|
+
const row = items.find(i => String(i.id) === target.rawId)
|
|
35
|
+
row?.expand()
|
|
36
|
+
} else if (target?.kind === 'section') {
|
|
37
|
+
document.getElementById(target.slug)?.scrollIntoView()
|
|
38
|
+
}
|
|
39
|
+
// target === null → no hash or unrecognised prefix, no-op
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Notes
|
|
43
|
+
|
|
44
|
+
- **Collision safety:** The `faq-item-<digits>` namespace is reserved exclusively for item anchors; `parseFaqHash` uses a digits-only regex so word-suffixed slugs like `faq-item-whatever` are correctly classified as sections.
|
|
45
|
+
- **`rawId` is a string** — coercion to compare against `item.id` is intentionally deferred to the call site.
|
|
46
|
+
- Centralising format helpers and the parser in one file prevents format drift across the page component, chat RAG mapper, and any future consumers.
|
|
47
|
+
|
|
48
|
+
**Source:** [`faq-anchor.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/faq-anchor.ts)
|
package/src/utils/.format.md
CHANGED
|
@@ -1,31 +1,25 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Utility functions for formatting
|
|
1
|
+
<!-- source-hash: 801f56963096c8525cf1e145bb056b0f -->
|
|
2
|
+
Utility functions for consistent formatting of dates, times, numbers, file sizes, durations, and name initials across server and client environments, with UTC-pinned rendering to prevent React hydration mismatches.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
|
6
|
+
| Export | Description |
|
|
7
7
|
|---|---|
|
|
8
|
-
| `formatDate` |
|
|
9
|
-
| `formatDateUTC` | UTC-anchored date formatter
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `formatDurationCompact` | Duration as `"Xh Xm"` or `"X min"` |
|
|
24
|
-
| `formatDurationFromRange` | Duration between two timestamps as compact string |
|
|
25
|
-
| `formatTimeWithTimezone` | Time string with optional timezone label |
|
|
26
|
-
| `formatCompactMetric` | Metric value with compact notation for KPI cards (partial) |
|
|
27
|
-
| `MetricFormat` | Type: `'number' \| 'currency' \| 'percentage' \| 'months'` |
|
|
28
|
-
| `TrendPolarity` | Type: `'positive' \| 'negative' \| 'neutral'` |
|
|
8
|
+
| `formatDate` | Formats a `Date` or ISO string to a localized date string; UTC-pinned by default to prevent SSR/client hydration drift |
|
|
9
|
+
| `formatDateUTC` | UTC-anchored date formatter for RAG mappers and audit consumers; handles epoch numbers, ISO strings, and numeric string timestamps with a configurable fallback |
|
|
10
|
+
| `formatNumber` | Formats a number with locale-aware thousands separators |
|
|
11
|
+
| `formatPrice` | Formats a number as a currency string using `Intl.NumberFormat` (defaults to USD) |
|
|
12
|
+
| `formatBytes` | Converts bytes to human-readable size with configurable decimal places (`Bytes` → `YB`) |
|
|
13
|
+
| `formatBytesShort` | Compact byte formatter using single-letter `B` unit (2 decimal places, caps at `TB`) for space-constrained UIs |
|
|
14
|
+
| `formatFileSize` | File-size formatter using 1 decimal place and `B` unit, capping at `GB`; canonical formatter for upload UIs and publication cards |
|
|
15
|
+
| `formatLargeNumber` | Abbreviates large numbers to `K`, `M`, `B` with no decimal places |
|
|
16
|
+
| `formatAbbreviatedNumber` | Similar abbreviation but preserves one decimal place when the value is not a whole number |
|
|
17
|
+
| `getFirstLastInitials` | Extracts two-letter initials from the first and last word of a name (e.g., `"John Michael Doe"` → `"JD"`) |
|
|
18
|
+
| `nameInitials` | Extracts up to two-letter initials from the first and second word; single source of truth for avatar fallbacks |
|
|
19
|
+
| `formatDurationMMSS` | Formats seconds as `MM:SS` or `HH:MM:SS` for media players |
|
|
20
|
+
| `formatDurationCompact` | Formats seconds as `Xh Xm` or `X min` for cards and headers |
|
|
21
|
+
| `formatDurationFromRange` | Calculates and formats duration between two timestamps as `1h 30m` or `45m` |
|
|
22
|
+
| `formatTimeWithTimezone` | Formats an event's wall-clock time in its own IANA timezone; falls back to UTC on invalid zone labels |
|
|
29
23
|
|
|
30
24
|
## Usage Example
|
|
31
25
|
|
|
@@ -33,55 +27,79 @@ Utility functions for formatting data across dates, numbers, currencies, bytes,
|
|
|
33
27
|
import {
|
|
34
28
|
formatDate,
|
|
35
29
|
formatDateUTC,
|
|
30
|
+
formatPrice,
|
|
36
31
|
formatBytes,
|
|
37
32
|
formatBytesShort,
|
|
33
|
+
formatFileSize,
|
|
38
34
|
formatLargeNumber,
|
|
39
35
|
formatAbbreviatedNumber,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
formatPercent,
|
|
36
|
+
nameInitials,
|
|
37
|
+
getFirstLastInitials,
|
|
43
38
|
formatDurationMMSS,
|
|
44
39
|
formatDurationCompact,
|
|
45
40
|
formatDurationFromRange,
|
|
46
41
|
formatTimeWithTimezone,
|
|
47
|
-
nameInitials,
|
|
48
|
-
getFirstLastInitials,
|
|
49
42
|
} from './format'
|
|
50
43
|
|
|
51
|
-
// Dates
|
|
44
|
+
// Dates — UTC-pinned to prevent SSR/client mismatch
|
|
52
45
|
formatDate('2024-08-15')
|
|
53
46
|
// → "August 15, 2024"
|
|
54
47
|
|
|
55
|
-
formatDateUTC('2024-08-15')
|
|
56
|
-
// → "Aug 15, 2024"
|
|
48
|
+
formatDateUTC('2024-08-15', { fallback: 'N/A' })
|
|
49
|
+
// → "Aug 15, 2024"
|
|
50
|
+
|
|
51
|
+
formatDateUTC(null)
|
|
52
|
+
// → "N/A"
|
|
53
|
+
|
|
54
|
+
// Numbers and currency
|
|
55
|
+
formatPrice(4999.99, 'EUR')
|
|
56
|
+
// → "€4,999.99"
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
// → "
|
|
58
|
+
formatLargeNumber(1_450_000)
|
|
59
|
+
// → "1M"
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
formatBytesShort(1536) // → "1.5 KB" (tight UI variant)
|
|
61
|
+
formatAbbreviatedNumber(1_200)
|
|
62
|
+
// → "1.2K"
|
|
64
63
|
|
|
65
|
-
//
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
// File sizes
|
|
65
|
+
formatBytes(1536)
|
|
66
|
+
// → "1.50 KB"
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
formatCurrency(1234567) // → "$1,234,567"
|
|
72
|
-
formatPercent(12.5) // → "12.50%"
|
|
68
|
+
formatBytesShort(1536)
|
|
69
|
+
// → "1.5 KB" (compact UI variant)
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
formatFileSize(1500)
|
|
72
|
+
// → "1.5 KB" (1 decimal, caps at GB)
|
|
73
|
+
|
|
74
|
+
// Avatar initials
|
|
75
|
+
nameInitials('John Doe')
|
|
76
|
+
// → "JD"
|
|
77
|
+
|
|
78
|
+
getFirstLastInitials('John Michael Doe')
|
|
79
|
+
// → "JD" (first + last word)
|
|
80
|
+
|
|
81
|
+
nameInitials(null, 'U')
|
|
82
|
+
// → "U"
|
|
83
|
+
|
|
84
|
+
// Durations
|
|
85
|
+
formatDurationMMSS(3725)
|
|
86
|
+
// → "1:02:05"
|
|
87
|
+
|
|
88
|
+
formatDurationCompact(3725)
|
|
89
|
+
// → "1h 2m"
|
|
90
|
+
|
|
91
|
+
formatDurationFromRange('2024-08-15T14:00:00Z', '2024-08-15T15:30:00Z')
|
|
78
92
|
// → "1h 30m"
|
|
79
93
|
|
|
80
|
-
|
|
81
|
-
|
|
94
|
+
// Event time in its own timezone (prevents React #418 hydration mismatch)
|
|
95
|
+
formatTimeWithTimezone('2024-08-15T20:00:00Z', 'America/New_York')
|
|
96
|
+
// → "4:00 PM"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Notes
|
|
100
|
+
|
|
101
|
+
- **Hydration safety**: `formatDate` and `formatTimeWithTimezone` pin to UTC by default so Vercel (UTC runtime) and browser clients always render identical strings, avoiding React hydration error #418.
|
|
102
|
+
- **Avatar fallback hierarchy**: Prefer `nameInitials` over `getFirstLastInitials` for new components — it is the designated single source of truth and accepts a configurable `fallback` character.
|
|
103
|
+
- **File size variants**: Three formatters exist for historical reasons. Use `formatFileSize` for publication cards and upload UIs, `formatBytesShort` for space-constrained progress indicators, and `formatBytes` for general-purpose display.
|
|
82
104
|
|
|
83
|
-
|
|
84
|
-
nameInitials('John Michael Doe') // → "JM"
|
|
85
|
-
getFirstLastInitials('John Michael Doe') // → "JD"
|
|
86
|
-
nameInitials(null) // → "E" (default fallback)
|
|
87
|
-
```
|
|
105
|
+
**Source:** [`format.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/format.ts)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<!-- source-hash: e5bd0dff73673a1dcedb4a72a3a18491 -->
|
|
2
|
+
Invisible bot-protection primitives for shared use between public forms (client) and the hub's per-route `verifyHuman` gate (server). Designed as a pure, React-free server entry so the hub can import it without triggering a client-reference boundary.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `HONEYPOT_FIELD` | `const string` | Hidden field name bots may fill; real users never interact with it |
|
|
9
|
+
| `ELAPSED_MS_FIELD` | `const string` | Field name carrying client-measured ms from form mount to submit |
|
|
10
|
+
| `DEFAULT_MIN_FILL_MS` | `const number` | Minimum acceptable fill time (`700` ms); faster submits are treated as bots |
|
|
11
|
+
| `HumanitySignals` | `type` | Wire object spread into the POST body by `useHumanitySignals().getSignals()` |
|
|
12
|
+
| `HumanityVerdict` | `type` | Union result — `{ ok: true }` or `{ ok: false; reason: 'honeypot' \| 'too_fast' }` |
|
|
13
|
+
| `extractHumanitySignals` | `function` | Tolerant reader that parses raw POST body; never throws, returns `null` for missing/garbage timing |
|
|
14
|
+
| `evaluateHumanitySignals` | `function` | Single source of truth for the block/allow decision — honeypot fill or sub-threshold timing → reject |
|
|
15
|
+
| `splitCsvEnv` | `function` | Utility to parse comma-separated env strings into trimmed, non-empty arrays |
|
|
16
|
+
|
|
17
|
+
## Usage Example
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import {
|
|
21
|
+
evaluateHumanitySignals,
|
|
22
|
+
DEFAULT_MIN_FILL_MS,
|
|
23
|
+
} from 'openframe-oss-lib/humanity-signals'
|
|
24
|
+
|
|
25
|
+
// Server-side route handler (hub's verifyHuman gate)
|
|
26
|
+
export async function POST(req: Request) {
|
|
27
|
+
const body = await req.json()
|
|
28
|
+
|
|
29
|
+
const verdict = evaluateHumanitySignals(body, {
|
|
30
|
+
minFillMs: DEFAULT_MIN_FILL_MS,
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
if (!verdict.ok) {
|
|
34
|
+
// 'honeypot' — hidden field was filled
|
|
35
|
+
// 'too_fast' — submission arrived before a human could type
|
|
36
|
+
return new Response(`Blocked: ${verdict.reason}`, { status: 400 })
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Proceed with legitimate submission...
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
// Client-side form — spread signals into the POST body
|
|
45
|
+
import { HONEYPOT_FIELD, ELAPSED_MS_FIELD } from 'openframe-oss-lib/humanity-signals'
|
|
46
|
+
|
|
47
|
+
const payload = {
|
|
48
|
+
email: formData.email,
|
|
49
|
+
message: formData.message,
|
|
50
|
+
[HONEYPOT_FIELD]: '', // always empty for real users
|
|
51
|
+
[ELAPSED_MS_FIELD]: elapsedMs, // measured since form mount
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
> **Note:** Missing timing values (`elapsedMs: null`) are always allowed — only a present sub-threshold value triggers a `too_fast` block, preventing false positives from clients that omit the field.
|
|
56
|
+
|
|
57
|
+
## Source
|
|
58
|
+
|
|
59
|
+
[`humanity-signals.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/humanity-signals.ts)
|
package/src/utils/.index.md
CHANGED
|
@@ -1,49 +1,91 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: d40f5b4bdeaf9f6f4c4960fabf86ab54 -->
|
|
2
|
+
Central barrel export for the `utils` package, aggregating and re-exporting all utility functions, constants, and types from across the library to provide a single stable import surface for consumers.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
### Formatting Utilities
|
|
7
|
+
- **`formatDate`, `formatNumber`, `formatPrice`, `formatBytes`** — Core number/currency/byte/date formatters (`./format`)
|
|
8
|
+
- **`formatLargeNumber`, `formatCurrency`, `formatPercent`, `formatDurationMMSS`**, and many more — Extended formatter suite covering metrics, trends, durations, and text
|
|
9
|
+
- **`formatRelativeTime`, `formatAbsoluteDate`, `formatDateTime`** — Date/time helpers from `./date-utils`
|
|
10
|
+
|
|
11
|
+
### Color & Styling
|
|
12
|
+
- **`getPlatformAccentColor`, `getCurrentPlatform`** — Platform-aware accent color resolution
|
|
13
|
+
- **`getReadableTextColor`, `hexToRgb`, `deriveHoverColor`, `deriveActiveColor`** — Design-system color math utilities
|
|
14
|
+
- **`cn`** — Class name utility (client-side only)
|
|
15
|
+
|
|
16
|
+
### Platform & Domain
|
|
17
|
+
- **`getPlatformProductionUrl`, `getAllPlatformBaseDomains`** — Platform domain SSOT re-exported from `../platform-domains`
|
|
18
|
+
- **`getPlatformLogo`** — Platform icon component resolver
|
|
19
|
+
|
|
20
|
+
### Navigation & Scroll
|
|
21
|
+
- **`scrollElementIntoView`** — Smooth scroll with sticky-chrome offset compensation
|
|
22
|
+
- **`navigateSamePageHash`, `normalizeHashFragment`** — Same-page hash navigation with `pushState` and synthetic `hashchange`
|
|
23
|
+
|
|
24
|
+
### Embed Auth
|
|
25
|
+
- **`embedAuthedFetch`, `setEmbedAuthAdapter`** — Generic embed surface authentication
|
|
26
|
+
- **`getEmbedProxyAuth`, `setEmbedProxyAuth`, `applyProxyAuth`** — Proxy auth storage (cookie SSOT)
|
|
27
|
+
|
|
28
|
+
### Chat Utilities (Server-Safe Re-exports)
|
|
29
|
+
- **`escapeMarkdownInline`, `buildChatAttachmentViewUrl`** — Chat attachment markdown helpers
|
|
30
|
+
- **`getSourceIconName`, `getSourceLabel`** — Source icons/labels, safe for server-side hub callers
|
|
31
|
+
- **`readLeadingDecisionFrame`** — SSE leading-frame reader for `confirm-tool` route
|
|
32
|
+
|
|
33
|
+
### Icon & Media
|
|
34
|
+
- **`getDynamicIcon`, `ICON_REGISTRY`, `getIconComponent`** — Dynamic icon registry
|
|
35
|
+
- **`PLAY_ICON_PATH`** — SVG path constant (server-safe)
|
|
36
|
+
|
|
37
|
+
### SEO & Content
|
|
38
|
+
- **`SEO_TITLE_MAX_LENGTH`, `SEO_DESCRIPTION_MAX_LENGTH`** — Character budget constants
|
|
39
|
+
- **`buildListUrl`, `canonicalContentRefType`** — List-API URL builder
|
|
40
|
+
- **`faqSectionSlug`, `faqItemAnchor`, `parseFaqHash`** — FAQ anchor SSOTs
|
|
41
|
+
|
|
42
|
+
### Miscellaneous
|
|
43
|
+
- **`delay`, `generateRandomString`, `truncateString`, `deepClone`** — Common utilities
|
|
44
|
+
- **`getProxiedImageUrl`, `shouldProxyImage`, `generateImageSizes`** — Image proxy builder
|
|
45
|
+
- **`DEV_SECTION_PARAM_KEYS`, `devSectionAnchorId`** — Dev-center URL param keys
|
|
46
|
+
- **`fetchPriorityProp`** — React 18/19 compatible `fetchpriority` prop builder
|
|
18
47
|
|
|
19
48
|
## Usage Example
|
|
20
49
|
|
|
21
50
|
```typescript
|
|
22
|
-
// Import
|
|
51
|
+
// Import from the unified utils barrel
|
|
23
52
|
import {
|
|
24
53
|
cn,
|
|
54
|
+
formatDate,
|
|
25
55
|
formatCurrency,
|
|
26
|
-
|
|
27
|
-
getDynamicIcon,
|
|
28
|
-
getEmbedProxyAuth,
|
|
56
|
+
getPlatformAccentColor,
|
|
29
57
|
scrollElementIntoView,
|
|
30
|
-
|
|
31
|
-
|
|
58
|
+
embedAuthedFetch,
|
|
59
|
+
SEO_TITLE_MAX_LENGTH,
|
|
60
|
+
buildListUrl,
|
|
61
|
+
} from '@flamingo-stack/openframe-oss-lib/utils'
|
|
62
|
+
|
|
63
|
+
// Formatting
|
|
64
|
+
const price = formatCurrency(1999, 'USD') // "$19.99"
|
|
65
|
+
const date = formatDate(new Date(), 'short')
|
|
32
66
|
|
|
33
|
-
//
|
|
34
|
-
const
|
|
67
|
+
// Color utilities
|
|
68
|
+
const accent = getPlatformAccentColor('flamingo')
|
|
35
69
|
|
|
36
|
-
//
|
|
37
|
-
|
|
70
|
+
// Scroll
|
|
71
|
+
scrollElementIntoView(document.getElementById('section'), { offset: 64 })
|
|
38
72
|
|
|
39
|
-
//
|
|
40
|
-
const
|
|
73
|
+
// Embed auth
|
|
74
|
+
const response = await embedAuthedFetch('/api/data')
|
|
41
75
|
|
|
42
|
-
//
|
|
43
|
-
|
|
76
|
+
// SEO guard
|
|
77
|
+
if (title.length > SEO_TITLE_MAX_LENGTH) {
|
|
78
|
+
console.warn('Title exceeds SEO budget')
|
|
79
|
+
}
|
|
44
80
|
|
|
45
|
-
//
|
|
46
|
-
|
|
81
|
+
// List URL builder
|
|
82
|
+
const url = buildListUrl('ticket', ['id-1', 'id-2'], '/content')
|
|
47
83
|
```
|
|
48
84
|
|
|
49
|
-
|
|
85
|
+
## Notes
|
|
86
|
+
|
|
87
|
+
- **Server-safe vs. client-only**: `cn` and canvas-based utilities (e.g., `color-analysis`) are client-only. Most other exports are isomorphic/server-safe.
|
|
88
|
+
- **SSOT pattern**: Several exports are re-exports from canonical locations (e.g., `../platform-domains`, `./format`) to preserve backward compatibility without duplicating logic.
|
|
89
|
+
- **Deprecated aliases**: Chat-prefixed auth symbols (`chat-authed-fetch`, `chat-proxy-auth-storage`) are kept as `@deprecated` re-exports in their original locations; use the `embed*` equivalents from this barrel going forward.
|
|
90
|
+
|
|
91
|
+
**Source:** [`src/utils/index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/utils/index.ts)
|