@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
package/src/utils/.cn.md
CHANGED
|
@@ -1,44 +1,55 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Utility module providing class name
|
|
1
|
+
<!-- source-hash: 700d6c65ebfb65630e665b437acf4e83 -->
|
|
2
|
+
Utility module providing two core helpers: a Tailwind-aware class name merger (`cn`) that correctly handles custom ODS typography utilities, and an environment-aware base URL resolver (`getBaseUrl`) that delegates platform canonical URLs to the SSOT in `platform-domains.ts`.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
| Export | Type | Description |
|
|
7
7
|
|--------|------|-------------|
|
|
8
|
-
| `cn` |
|
|
9
|
-
| `
|
|
10
|
-
| `
|
|
11
|
-
|
|
8
|
+
| `cn` | `function` | Combines class names using `clsx` + a custom `tailwind-merge` instance |
|
|
9
|
+
| `getBaseUrl` | `function` | Returns the application base URL for the current environment |
|
|
10
|
+
| `twMerge` | internal | Extended `tailwind-merge` instance with the `ods-typography` class group |
|
|
11
|
+
|
|
12
|
+
### `ods-typography` Class Group
|
|
13
|
+
|
|
14
|
+
Custom Tailwind text-size utilities registered to prevent silent conflicts with `text-color` utilities:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
text-h1 · text-h2 · text-h3 · text-h4 · text-h5 · text-h6 · text-code · text-badge
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Without this registration, `cn('text-badge', 'text-ods-text-on-accent')` would drop `text-badge` — only the colour survives.
|
|
12
21
|
|
|
13
22
|
## Usage Example
|
|
14
23
|
|
|
15
24
|
```typescript
|
|
16
|
-
import { cn, getBaseUrl
|
|
17
|
-
|
|
18
|
-
// Merge Tailwind classes (including custom ODS typography)
|
|
19
|
-
const className = cn('text-h1 font-bold', isActive && 'text-yellow-400')
|
|
25
|
+
import { cn, getBaseUrl } from '@/lib/cn'
|
|
20
26
|
|
|
21
|
-
//
|
|
22
|
-
const
|
|
23
|
-
|
|
27
|
+
// Merge conditional classes safely — typography and colour both survive
|
|
28
|
+
const className = cn(
|
|
29
|
+
'text-badge',
|
|
30
|
+
'text-ods-text-on-accent',
|
|
31
|
+
isActive && 'bg-accent',
|
|
32
|
+
)
|
|
24
33
|
|
|
25
|
-
//
|
|
26
|
-
const
|
|
27
|
-
const openframeUrl = getPlatformProductionUrl('openframe') // https://openframe.ai
|
|
34
|
+
// Current deployment URL (dev → localhost, prod → Vercel/canonical domain)
|
|
35
|
+
const currentUrl = getBaseUrl()
|
|
28
36
|
|
|
29
|
-
//
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
// Vercel preview: ['.vercel.app', 'vercel.app']
|
|
33
|
-
// Localhost: []
|
|
37
|
+
// Specific platform URL (respects env override, falls back to canonical)
|
|
38
|
+
const flamingoUrl = getBaseUrl('flamingo') // https://www.flamingo.run
|
|
39
|
+
const openMspUrl = getBaseUrl('openmsp') // https://www.openmsp.ai
|
|
34
40
|
```
|
|
35
41
|
|
|
36
|
-
##
|
|
42
|
+
## `getBaseUrl` Resolution Order
|
|
43
|
+
|
|
44
|
+
```mermaid
|
|
45
|
+
graph TD
|
|
46
|
+
A[getBaseUrl called] --> B{NODE_ENV !== production?}
|
|
47
|
+
B -->|Yes| C[NEXT_PUBLIC_DEV_URL or localhost:3000]
|
|
48
|
+
B -->|No| D{platform arg provided?}
|
|
49
|
+
D -->|Yes| E[getPlatformProductionUrl from SSOT]
|
|
50
|
+
D -->|No| F{VERCEL_PROJECT_PRODUCTION_URL set?}
|
|
51
|
+
F -->|Yes| G[https://vercel-domain]
|
|
52
|
+
F -->|No| H[getPlatformProductionUrl via NEXT_PUBLIC_APP_TYPE]
|
|
53
|
+
```
|
|
37
54
|
|
|
38
|
-
|
|
39
|
-
|----------|----------|---------|
|
|
40
|
-
| `NEXT_PUBLIC_FLAMINGO_URL` | `flamingo`, `universal` | `https://www.flamingo.run` |
|
|
41
|
-
| `NEXT_PUBLIC_OPENMSP_URL` | `openmsp` | `https://www.openmsp.ai` |
|
|
42
|
-
| `NEXT_PUBLIC_OPENFRAME_URL` | `openframe` | `https://openframe.ai` |
|
|
43
|
-
| `NEXT_PUBLIC_MARKETING_HUB_URL` | `marketing-hub` | `https://marketing-hub.flamingo.so` |
|
|
44
|
-
| `NEXT_PUBLIC_DEV_URL` | all (dev only) | `http://localhost:3000` |
|
|
55
|
+
> Platform canonical URLs and their `NEXT_PUBLIC_*_URL` environment overrides are defined exclusively in [`src/platform-domains.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/platform-domains.ts).
|
|
@@ -1,35 +1,44 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 49fcc1fc36872594f424bdbdc5b66d78 -->
|
|
2
|
+
Client-side color analysis utilities for extracting dominant colors from images and selecting accessible badge/background colors based on WCAG contrast ratios.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|--------|------|-------------|
|
|
8
|
-
| `ColorPalette` | Interface | Color descriptor with `name`, `hex`, and `rgb` tuple |
|
|
9
|
-
| `DESIGN_PALETTE` | Constant | Three-color palette: yellow `#FFC008`, black `#161616`, gray `#888888` |
|
|
10
|
-
| `hexToRgb` | Function | Converts a hex string to an RGB tuple |
|
|
11
|
-
| `getContrastRatio` | Function | Returns WCAG contrast ratio between two RGB colors |
|
|
12
|
-
| `extractDominantColor` | Function | Samples a canvas to find the most frequent bucketed color |
|
|
13
|
-
| `getBestContrastColor` | Function | Picks the palette color with highest contrast (≥ 3:1 minimum) |
|
|
14
|
-
| `analyzeImageColor` | Function | Loads an image URL, extracts dominant color, returns best palette match |
|
|
15
|
-
| `extractImageEdgeColorAsync` | Function | Samples edge pixels of an image and returns the dominant hex color for background fills |
|
|
6
|
+
### Types & Constants
|
|
16
7
|
|
|
17
|
-
|
|
8
|
+
- **`ColorPalette`** — Interface representing a named color with `hex` and `rgb` tuple fields.
|
|
9
|
+
- **`DESIGN_PALETTE`** — Three-entry design system palette: `yellow`, `black`, and `gray`.
|
|
18
10
|
|
|
19
|
-
|
|
20
|
-
import { analyzeImageColor, extractImageEdgeColorAsync, getContrastRatio, hexToRgb } from './color-analysis';
|
|
11
|
+
### Functions
|
|
21
12
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
13
|
+
| Function | Description |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `hexToRgb(hex)` | Converts a hex color string (with shorthand support) to an RGB tuple. |
|
|
16
|
+
| `getContrastRatio(color1, color2)` | Returns the WCAG contrast ratio between two RGB colors. |
|
|
17
|
+
| `pickReadableTextColor(bgHex)` | Returns `'dark'` or `'light'` based on which foreground has better contrast against the given background hex. |
|
|
18
|
+
| `extractDominantColor(canvas)` | Samples ~1000 pixels in a grid pattern and bucket-quantizes (step 32) to find the most frequent color. |
|
|
19
|
+
| `getBestContrastColor(imageColor)` | Picks the `DESIGN_PALETTE` entry with the highest contrast against a given RGB color; falls back to `black` if no entry meets 3:1. |
|
|
20
|
+
| `analyzeImageColor(imageSrc)` | Loads an image via canvas (scaled to max 100px), extracts its dominant color, and resolves with the best-contrast palette entry. |
|
|
21
|
+
| `extractImageEdgeColorAsync(imageUrl)` | Samples a 15% edge band of an image (scaled to max 50px) and returns the average dominant edge color as a hex string. Used for email/card background fills. |
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
const bgColor = await extractImageEdgeColorAsync('https://example.com/hero.jpg');
|
|
28
|
-
console.log(bgColor); // '#1a2b3c'
|
|
23
|
+
## Usage Example
|
|
29
24
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
```typescript
|
|
26
|
+
import {
|
|
27
|
+
pickReadableTextColor,
|
|
28
|
+
analyzeImageColor,
|
|
29
|
+
extractImageEdgeColorAsync,
|
|
30
|
+
} from './color-analysis';
|
|
31
|
+
|
|
32
|
+
// Choose a text theme for a dynamic banner background
|
|
33
|
+
const theme = pickReadableTextColor('#FFC008'); // → 'dark'
|
|
34
|
+
|
|
35
|
+
// Resolve a badge color from a product image
|
|
36
|
+
const paletteColor = await analyzeImageColor('https://cdn.example.com/product.png');
|
|
37
|
+
console.log(paletteColor.name); // e.g. 'yellow'
|
|
38
|
+
|
|
39
|
+
// Fill background color behind an image in an email template
|
|
40
|
+
const edgeHex = await extractImageEdgeColorAsync('https://cdn.example.com/hero.jpg');
|
|
41
|
+
console.log(edgeHex); // e.g. '#1a1a1a'
|
|
33
42
|
```
|
|
34
43
|
|
|
35
|
-
> **Note:** `
|
|
44
|
+
> **Note:** `analyzeImageColor` and `extractImageEdgeColorAsync` are browser-only (they depend on `HTMLCanvasElement` and `document`). `extractImageEdgeColorAsync` returns `#000000` in SSR/Node environments.
|
package/src/utils/.common.md
CHANGED
|
@@ -1,36 +1,56 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: dd0dfcce5e3006e1d50e924c7a9379a7 -->
|
|
2
|
+
General-purpose utility functions for class name merging, async delays, string manipulation, JSON-LD serialization, object cloning, and environment-based Slack URL resolution.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
| Export | Signature | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `cn` | `(...inputs: ClassValue[]) => string` | Merges Tailwind CSS class names using `clsx` + `tailwind-merge` |
|
|
9
|
+
| `delay` | `(ms: number) => Promise<void>` | Async sleep helper |
|
|
10
|
+
| `generateRandomString` | `(length?: number) => string` | Alphanumeric random string generator (default length: 8) |
|
|
11
|
+
| `truncateString` | `(str, maxLength, suffix?) => string` | Truncates with configurable suffix (default: `"..."`) |
|
|
12
|
+
| `serializeJsonLd` | `(schema: unknown) => string` | XSS-safe JSON-LD serializer — escapes `<` as `\u003c` |
|
|
13
|
+
| `deepClone` | `<T>(obj: T) => T` | Structural clone via JSON round-trip |
|
|
14
|
+
| `getSlackCommunityJoinUrl` | `() => string` | Reads `NEXT_PUBLIC_SLACK_COMMUNITY_JOIN_URL` with fallback to OpenMSP invite |
|
|
12
15
|
|
|
13
16
|
## Usage Example
|
|
14
17
|
|
|
15
18
|
```typescript
|
|
16
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
cn,
|
|
21
|
+
delay,
|
|
22
|
+
generateRandomString,
|
|
23
|
+
truncateString,
|
|
24
|
+
serializeJsonLd,
|
|
25
|
+
deepClone,
|
|
26
|
+
getSlackCommunityJoinUrl,
|
|
27
|
+
} from "@/lib/utils/common"
|
|
17
28
|
|
|
18
|
-
// Merge Tailwind classes (
|
|
19
|
-
const
|
|
29
|
+
// Merge Tailwind classes (handles conflicts)
|
|
30
|
+
const cls = cn("px-4 py-2", isActive && "bg-blue-500", "px-6") // "py-2 bg-blue-500 px-6"
|
|
20
31
|
|
|
21
|
-
// Async delay
|
|
22
|
-
await delay(
|
|
32
|
+
// Async delay in an async function
|
|
33
|
+
await delay(1500) // waits 1.5 seconds
|
|
23
34
|
|
|
24
|
-
//
|
|
25
|
-
const
|
|
35
|
+
// Random token generation
|
|
36
|
+
const token = generateRandomString(16) // e.g. "aZ3kR8mQpL2nWx7T"
|
|
26
37
|
|
|
27
|
-
//
|
|
28
|
-
|
|
38
|
+
// Safe truncation
|
|
39
|
+
truncateString("OpenFrame AI Platform", 14) // "OpenFrame AI..."
|
|
29
40
|
|
|
30
|
-
//
|
|
31
|
-
const
|
|
32
|
-
|
|
41
|
+
// Safe JSON-LD for <script type="application/ld+json">
|
|
42
|
+
const jsonLd = serializeJsonLd({ "@type": "WebSite", name: "</script>attack" })
|
|
43
|
+
// → '{"@type":"WebSite","name":"\\u003c/script>attack"}'
|
|
33
44
|
|
|
34
|
-
//
|
|
35
|
-
const
|
|
36
|
-
|
|
45
|
+
// Deep clone without reference sharing
|
|
46
|
+
const copy = deepClone({ nested: { value: 42 } })
|
|
47
|
+
|
|
48
|
+
// Slack community URL (set via env or uses OpenMSP fallback)
|
|
49
|
+
const slackUrl = getSlackCommunityJoinUrl()
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
> **Security note:** `serializeJsonLd` must be used for all `<script type="application/ld+json">` blocks. Raw `JSON.stringify` does not HTML-escape `<`, leaving stored XSS vectors open if user-entered data reaches the schema object.
|
|
53
|
+
|
|
54
|
+
## Source
|
|
55
|
+
|
|
56
|
+
[`common.ts` on GitHub](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/common.ts)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<!-- source-hash: 235fea62f64e91dc73029934b22d60cc -->
|
|
2
|
+
Unified content-href authority for all embeddable surfaces — resolves content links consistently across both page views and chat surfaces using a single configurable seam.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Constants
|
|
7
|
+
|
|
8
|
+
- **`DEFAULT_CONTENT_SUFFIXES`** — Maps content `documentType` strings (e.g. `'product_release'`, `'blog_post'`) to their URL path segments. Mirrors the hub's `PUBLIC_URL_PATHS`; kept in sync manually across the cross-repo boundary.
|
|
9
|
+
|
|
10
|
+
### Types
|
|
11
|
+
|
|
12
|
+
- **`ComposeContentUrlInput`** — Unified input for both page views (slug-based) and chat rows (ID + `externalUrl`-based).
|
|
13
|
+
- **`ContentHrefOptions`** — Configuration for `makeComposeContentUrl`: hosted types set, hub origin fallback, optional suffix/override maps.
|
|
14
|
+
- **`ComposeContentUrl`** — The seam function signature on `ChatRuntime`; always returns `{ href, targetPlatform }`, never null.
|
|
15
|
+
|
|
16
|
+
### Functions
|
|
17
|
+
|
|
18
|
+
- **`makeComposeContentUrl(opts)`** — Factory that builds the embedder's `composeContentUrl`. Resolution order: explicit `overrides` → hosted in-app route → verbatim `externalUrl` → hub-origin fallback.
|
|
19
|
+
- **`buildDefaultHref(basePath, slug)`** — Fallback href when no `composeContentUrl` is wired (single-platform embedders).
|
|
20
|
+
- **`resolveContentHref(composeContentUrl, args)`** — Ternary helper used by catalog/detail views: delegates to `composeContentUrl` when wired, otherwise calls `buildDefaultHref`.
|
|
21
|
+
|
|
22
|
+
## Usage Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import {
|
|
26
|
+
makeComposeContentUrl,
|
|
27
|
+
resolveContentHref,
|
|
28
|
+
} from './content-href'
|
|
29
|
+
|
|
30
|
+
// Build the embedder's composer
|
|
31
|
+
const composeContentUrl = makeComposeContentUrl({
|
|
32
|
+
hostedTypes: new Set(['onboarding_guide', 'product_release']),
|
|
33
|
+
contentOrigin: 'https://openframe.app',
|
|
34
|
+
overrides: {
|
|
35
|
+
author: (id) => ({ href: `/team/${id}`, targetPlatform: null }),
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
// Page view — slug passed directly as identifier
|
|
40
|
+
composeContentUrl({ type: 'product_release', identifier: 'my-release-v2' })
|
|
41
|
+
// → { href: '/releases/my-release-v2', targetPlatform: null }
|
|
42
|
+
|
|
43
|
+
// Chat row — id as identifier, slug recovered from externalUrl
|
|
44
|
+
composeContentUrl({
|
|
45
|
+
type: 'product_release',
|
|
46
|
+
identifier: 'abc123',
|
|
47
|
+
externalUrl: 'https://openframe.app/releases/my-release-v2',
|
|
48
|
+
})
|
|
49
|
+
// → { href: '/releases/my-release-v2', targetPlatform: null }
|
|
50
|
+
|
|
51
|
+
// Non-hosted type — opens out to hub
|
|
52
|
+
composeContentUrl({ type: 'blog_post', identifier: 'my-post' })
|
|
53
|
+
// → { href: 'https://openframe.app/blog/my-post', targetPlatform: null }
|
|
54
|
+
|
|
55
|
+
// Catalog/detail view helper
|
|
56
|
+
resolveContentHref(composeContentUrl, {
|
|
57
|
+
type: 'onboarding_guide',
|
|
58
|
+
slug: 'getting-started',
|
|
59
|
+
basePath: '/onboarding-guides',
|
|
60
|
+
})
|
|
61
|
+
// → { href: '/onboarding-guides/getting-started', targetPlatform: null }
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Source:** [`content-href.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/content-href.ts)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- source-hash: 0fe0f3b3b32e9874a82e09c286bf0512 -->
|
|
2
|
+
Single source of truth for grouping `content_ref` types with display metadata (label, render order, layout, and card size). Consumed by the `RelatedContentSection` component and the hub's investor email builder to ensure consistent rendering and ordering across surfaces.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Types
|
|
7
|
+
|
|
8
|
+
- **`ContentRefLayout`** — `'list' | 'grid'`; controls whether a group renders as full-width cards or a responsive column grid.
|
|
9
|
+
- **`ContentRefGridSize`** — `'lg' | 'default' | 'sm'`; card size variant forwarded to the entity-card dispatch. Kept in lockstep with `EntityCardSize` to avoid a config→component import cycle.
|
|
10
|
+
- **`ContentRefGroupConfig`** — shape of each entry: `label`, `order`, `layout`, `gridSize`.
|
|
11
|
+
|
|
12
|
+
### Constants
|
|
13
|
+
|
|
14
|
+
- **`CONTENT_REF_GROUPS`** — registry of all known `content_ref` types (`investor_update`, `product_release`, `podcast`, `webinar`, `case_study`, `event`, `blog_post_existing`, `customer_interview`, `onboarding_guide`, `what_i_shipped`). Adding one entry here auto-registers the type in `RelatedContentSection` and makes it a hub suggestion candidate (if resolvable via `TYPE_TO_ENTITY` → RAG config).
|
|
15
|
+
|
|
16
|
+
### Functions
|
|
17
|
+
|
|
18
|
+
| Function | Description |
|
|
19
|
+
|---|---|
|
|
20
|
+
| `getContentRefLabel(type)` | Returns the registered label or `null` for unknown types. |
|
|
21
|
+
| `getContentRefLabelOrTitleCase(type)` | Returns the registered label or a title-cased fallback (e.g. `"podcast_guest"` → `"Podcast Guest"`). |
|
|
22
|
+
| `orderContentRefTypes(present)` | Sorts a set of present types into canonical `order` sequence; unregistered types are appended in insertion order. |
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import {
|
|
28
|
+
CONTENT_REF_GROUPS,
|
|
29
|
+
getContentRefLabelOrTitleCase,
|
|
30
|
+
orderContentRefTypes,
|
|
31
|
+
} from '@openframe-oss-lib/utils/content-ref-groups'
|
|
32
|
+
|
|
33
|
+
// Render groups in canonical order
|
|
34
|
+
const types = ['blog_post_existing', 'podcast', 'custom_type']
|
|
35
|
+
const sorted = orderContentRefTypes(types)
|
|
36
|
+
// → ['podcast', 'blog_post_existing', 'custom_type']
|
|
37
|
+
|
|
38
|
+
for (const type of sorted) {
|
|
39
|
+
const config = CONTENT_REF_GROUPS[type]
|
|
40
|
+
const label = getContentRefLabelOrTitleCase(type)
|
|
41
|
+
// config?.layout === 'list' | 'grid' | undefined for unregistered
|
|
42
|
+
console.log(label, config?.layout)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Adding a new content type — one entry is all that's needed:
|
|
46
|
+
// CONTENT_REF_GROUPS['press_release'] = {
|
|
47
|
+
// label: 'Press Releases', order: 11, layout: 'list', gridSize: 'lg'
|
|
48
|
+
// }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
> **Extending:** Add new content types directly to `CONTENT_REF_GROUPS`. Prefer `gridSize: 'lg'` for types whose card component has a large variant. No other file needs updating for `RelatedContentSection` to pick up the new group.
|
package/src/utils/.date-utils.md
CHANGED
|
@@ -1,45 +1,56 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Unified date formatting utilities
|
|
1
|
+
<!-- source-hash: c0ca2308274869b5506bb1e4854c772e -->
|
|
2
|
+
Unified date formatting utilities for the OpenMSP platform, providing consistent timestamp display across all components with built-in SSR/hydration safety (React #418) via UTC-pinned date operations.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
| Function | Description |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `formatTicketRelativeTime(iso)` | Ticket-specific relative label: "Just now" / "X min ago" / "X hour(s) ago" / "MM/DD/YYYY" |
|
|
9
|
+
| `formatTicketFullTimestamp(iso)` | Full tooltip timestamp in `MM/DD/YYYY, H:MM AM/PM` format |
|
|
10
|
+
| `formatRelativeTime(timestamp)` | General-purpose relative time: "Just now" → "Xm/h/d/w ago" → localized date (source of truth) |
|
|
11
|
+
| `formatAbsoluteDate(timestamp, options?)` | Localized absolute date via `Intl.DateTimeFormatOptions`, UTC-pinned |
|
|
12
|
+
| `formatDateTime(timestamp, options?)` | Localized date + time via `Intl.DateTimeFormatOptions`, UTC-pinned |
|
|
13
|
+
| `getDetailedTimeDifference(timestamp)` | Verbose elapsed time: "X seconds/minutes/hours/days/months/years ago" |
|
|
14
|
+
| `isToday(timestamp)` | Returns `true` if the timestamp falls on today's local date |
|
|
15
|
+
| `isWithinMinutes(timestamp, minutes)` | Returns `true` if the timestamp is within the last N minutes |
|
|
16
|
+
| `createUTCTimestamp()` | Returns current UTC time as an ISO string for database insertion |
|
|
13
17
|
|
|
14
18
|
## Usage Example
|
|
15
19
|
|
|
16
20
|
```typescript
|
|
17
|
-
import {
|
|
18
|
-
formatRelativeTime,
|
|
19
|
-
formatAbsoluteDate,
|
|
21
|
+
import {
|
|
22
|
+
formatRelativeTime,
|
|
23
|
+
formatAbsoluteDate,
|
|
20
24
|
formatDateTime,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
25
|
+
formatTicketRelativeTime,
|
|
26
|
+
formatTicketFullTimestamp,
|
|
27
|
+
getDetailedTimeDifference,
|
|
28
|
+
isToday,
|
|
29
|
+
isWithinMinutes,
|
|
30
|
+
createUTCTimestamp,
|
|
31
|
+
} from './date-utils'
|
|
32
|
+
|
|
33
|
+
// Relative time (general use)
|
|
34
|
+
formatRelativeTime('2024-01-01T12:00:00Z') // 'Jan 1, 2024'
|
|
35
|
+
formatRelativeTime(new Date()) // 'Just now'
|
|
36
|
+
formatRelativeTime('2024-06-15T10:30:00Z') // '3h ago'
|
|
37
|
+
|
|
38
|
+
// Ticket timestamps (UI list / tooltip)
|
|
39
|
+
formatTicketRelativeTime('2024-06-15T10:30:00Z') // '3 hours ago' or '06/15/2024'
|
|
40
|
+
formatTicketFullTimestamp('2024-06-15T10:30:00Z') // '06/15/2024, 10:30 AM'
|
|
41
|
+
|
|
42
|
+
// Absolute and datetime formatting
|
|
43
|
+
formatAbsoluteDate('2024-06-15T10:30:00Z') // 'Jun 15, 2024'
|
|
44
|
+
formatAbsoluteDate('2024-06-15T10:30:00Z', { month: 'long' }) // 'June 15, 2024'
|
|
45
|
+
formatDateTime('2024-06-15T10:30:00Z') // 'Jun 15, 2024, 10:30 AM'
|
|
46
|
+
|
|
47
|
+
// Verbose elapsed time
|
|
48
|
+
getDetailedTimeDifference('2024-06-14T08:00:00Z') // '2 days ago'
|
|
49
|
+
|
|
50
|
+
// Guards and utilities
|
|
51
|
+
isToday(new Date()) // true
|
|
52
|
+
isWithinMinutes('2024-06-15T10:29:00Z', 5) // true (if within 5 min)
|
|
53
|
+
createUTCTimestamp() // '2024-06-15T10:30:00.000Z'
|
|
43
54
|
```
|
|
44
55
|
|
|
45
|
-
|
|
56
|
+
> **SSR Safety:** All functions use UTC getters or `timeZone: 'UTC'` to ensure server-rendered output matches client hydration and avoids React hydration mismatch [#418](https://github.com/flamingo-stack/openframe-oss-lib/issues/418).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!-- source-hash: 522b22b251e1243bc131056859525baa -->
|
|
2
|
+
Shared utility module providing path and slug operations for document source viewers (knowledge base, data room, etc.), serving as the single source of truth for path normalization across route handlers.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Signature | Purpose |
|
|
7
|
+
|--------|-----------|---------|
|
|
8
|
+
| `toDocSlug` | `(name: string) => string` | Converts a display name to a URL-safe slug |
|
|
9
|
+
| `pathToNodeId` | `(path: string) => string` | Converts a file path to a DOM-safe node ID |
|
|
10
|
+
| `normalizeDocPath` | `(segments: string[], folderIndexFile?: string) => string` | Normalizes URL path segments, stripping folder-index suffixes |
|
|
11
|
+
|
|
12
|
+
## Usage Example
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { toDocSlug, pathToNodeId, normalizeDocPath } from './doc-path-utils'
|
|
16
|
+
|
|
17
|
+
// Convert document name to URL slug
|
|
18
|
+
toDocSlug('Investor Thesis') // → "investor-thesis"
|
|
19
|
+
toDocSlug(' Cap Table ') // → "cap-table"
|
|
20
|
+
|
|
21
|
+
// Convert file path to a DOM-safe tree node ID
|
|
22
|
+
pathToNodeId('legal/cap-table/safe.md') // → "legal-cap-table-safe.md"
|
|
23
|
+
|
|
24
|
+
// Normalize route segments, stripping README.md index suffixes
|
|
25
|
+
normalizeDocPath(['legal', 'cap-table']) // → "legal/cap-table"
|
|
26
|
+
normalizeDocPath(['legal', 'cap-table', 'README.md']) // → "legal/cap-table"
|
|
27
|
+
normalizeDocPath(['README.md']) // → ""
|
|
28
|
+
|
|
29
|
+
// Override the default folder-index filename
|
|
30
|
+
normalizeDocPath(['docs', 'index.md'], 'index.md') // → "docs"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Notes
|
|
34
|
+
|
|
35
|
+
- `normalizeDocPath` lowercases **both** the input segments and the `folderIndexFile` constant before comparison, ensuring URLs like `readme.md` and `README.md` strip uniformly.
|
|
36
|
+
- `DEFAULT_FOLDER_INDEX_FILE` is imported from `doc-tree-nav` and used as the default `folderIndexFile` argument.
|
|
37
|
+
|
|
38
|
+
**Source:** [`doc-path-utils.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/doc-path-utils.ts)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- source-hash: 8886b4928afb072c5436308281384b36 -->
|
|
2
|
+
Pure navigation helpers for traversing and resolving paths within a `DocNode` tree — shared between client-side hooks and server-side RSC rendering.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `DEFAULT_FOLDER_INDEX_FILE` | `const` | Canonical folder-index filename (`'README.md'`); single source of truth across navigation, SEO, and fetch logic |
|
|
9
|
+
| `stripFolderIndexFromPath` | function | Normalizes a file path by removing the trailing folder-index filename, returning the logical folder path |
|
|
10
|
+
| `findDocNodeByPath` | function | Recursively searches a `DocNode[]` tree for a node matching the given path |
|
|
11
|
+
| `getDocAncestorNodeIds` | function | Converts a slash-delimited node path into DOM-style IDs for each ancestor segment (used to pre-open accordion sidebar) |
|
|
12
|
+
| `resolveContentFetchPath` | function | Determines the actual storage path to fetch for a selected node, handling folder README resolution and no-content folders |
|
|
13
|
+
| `getInitialExpandedNodeIds` | function | Derives the set of accordion node IDs that should be expanded on initial load for a given path |
|
|
14
|
+
| `getDocSourceDefaultPath` | function | Finds the first root-level folder with a README when the tree root itself has no index file |
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import {
|
|
20
|
+
stripFolderIndexFromPath,
|
|
21
|
+
findDocNodeByPath,
|
|
22
|
+
resolveContentFetchPath,
|
|
23
|
+
getInitialExpandedNodeIds,
|
|
24
|
+
getDocSourceDefaultPath,
|
|
25
|
+
} from './doc-tree-nav'
|
|
26
|
+
|
|
27
|
+
// Normalize a path for display or URL routing
|
|
28
|
+
stripFolderIndexFromPath('guides/README.md') // → 'guides'
|
|
29
|
+
stripFolderIndexFromPath('README.md') // → ''
|
|
30
|
+
|
|
31
|
+
// Find a node in the tree
|
|
32
|
+
const node = findDocNodeByPath('guides/quickstart', docStructure)
|
|
33
|
+
|
|
34
|
+
// Resolve what to actually fetch from storage
|
|
35
|
+
const fetchPath = resolveContentFetchPath('guides', docStructure)
|
|
36
|
+
// → 'guides/README.md' if the folder has hasReadme: true
|
|
37
|
+
|
|
38
|
+
// Expand ancestor accordions for a deep initial path
|
|
39
|
+
const openIds = getInitialExpandedNodeIds('guides/setup/install.md')
|
|
40
|
+
// → ['guides', 'guides-setup']
|
|
41
|
+
|
|
42
|
+
// Jump to the first meaningful default when root has no README
|
|
43
|
+
const defaultPath = getDocSourceDefaultPath(docStructure)
|
|
44
|
+
// → 'guides' (first folder with hasReadme: true)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Notes
|
|
48
|
+
|
|
49
|
+
- All functions accept an optional `folderIndexFile` parameter (defaults to `DEFAULT_FOLDER_INDEX_FILE`) to support non-standard folder-index conventions.
|
|
50
|
+
- `DEFAULT_FOLDER_INDEX` is exported as a deprecated alias — migrate consumers to `DEFAULT_FOLDER_INDEX_FILE`.
|
|
51
|
+
- `resolveContentFetchPath` returns `null` for folders with no README, signaling the UI to suppress a fetch attempt.
|