@flamingo-stack/openframe-frontend-core 0.0.213 → 0.0.214
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-3JWIJJ44.js → chunk-5OWDOFKK.js} +2 -2
- package/dist/{chunk-IK2X5YJU.js → chunk-HWY35EAK.js} +2 -2
- package/dist/{chunk-OTKJASSX.cjs → chunk-IZL2KEH6.cjs} +24 -24
- package/dist/{chunk-OTKJASSX.cjs.map → chunk-IZL2KEH6.cjs.map} +1 -1
- package/dist/{chunk-35XIT2CF.cjs → chunk-KDNGUYZM.cjs} +17 -17
- package/dist/{chunk-35XIT2CF.cjs.map → chunk-KDNGUYZM.cjs.map} +1 -1
- package/dist/{chunk-ZTJVRSN5.js → chunk-UKND27XC.js} +2 -2
- package/dist/chunk-UKND27XC.js.map +1 -0
- package/dist/{chunk-ZDF6F7ED.cjs → chunk-YZUUFTIK.cjs} +2 -2
- package/dist/chunk-YZUUFTIK.cjs.map +1 -0
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/index.cjs +49 -49
- package/dist/components/index.js +2 -2
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/tickets/index.cjs +61 -61
- package/dist/components/tickets/index.js +3 -3
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/.index.md +36 -34
- package/src/components/.alert-dialog.md +27 -23
- package/src/components/.announcement-bar.md +26 -21
- package/src/components/.breadcrumb.md +19 -15
- package/src/components/.calendar.md +24 -19
- package/src/components/.categories-cart.md +29 -24
- package/src/components/.checkbox.md +23 -25
- package/src/components/.chevron-button.md +37 -32
- package/src/components/.comment-card.md +32 -62
- package/src/components/.dialog.md +26 -26
- package/src/components/.dynamic-skeleton.md +54 -57
- package/src/components/.empty-state.md +42 -51
- package/src/components/.faq-accordion.md +27 -21
- package/src/components/.filter-chip.md +41 -24
- package/src/components/.flamingo-logo.md +20 -23
- package/src/components/.footer-waitlist-button.md +29 -22
- package/src/components/.footer.md +32 -32
- package/src/components/.icons-block.md +27 -17
- package/src/components/.image-cropper.md +41 -32
- package/src/components/.index.md +33 -39
- package/src/components/.input.md +31 -35
- package/src/components/.logs-list.md +31 -20
- package/src/components/.media-carousel.md +35 -36
- package/src/components/.open-source-features.md +33 -16
- package/src/components/.pagination.md +52 -51
- package/src/components/.provider-button.md +21 -23
- package/src/components/.select.md +31 -20
- package/src/components/.sidebar.md +34 -24
- package/src/components/.smooth-accordion.md +29 -24
- package/src/components/.social-icon-row.md +36 -32
- package/src/components/.textarea.md +25 -31
- package/src/components/.tool-icon.md +24 -26
- package/src/components/.unified-filter-logic.md +37 -30
- package/src/components/.unified-pagination.md +23 -22
- package/src/components/.user-summary-stub.md +38 -22
- package/src/components/.vendor-display-button.md +25 -25
- package/src/components/.vendor-icon.md +33 -25
- package/src/components/.why-it-matters.md +28 -25
- package/src/components/chat/.approval-batch-message.md +51 -0
- package/src/components/chat/.approval-request-message.md +35 -34
- package/src/components/chat/.chat-attachment-bar.md +64 -0
- package/src/components/chat/.chat-container.md +36 -18
- package/src/components/chat/.chat-input.md +37 -20
- package/src/components/chat/.chat-message-enhanced.md +30 -49
- package/src/components/chat/.chat-message-list.md +45 -32
- package/src/components/chat/.chat-message-skeleton.md +26 -22
- package/src/components/chat/.chat-panel-context.md +52 -0
- package/src/components/chat/.chat-ref.types.md +42 -0
- package/src/components/chat/.chat-sidebar-skeleton.md +34 -25
- package/src/components/chat/.chat-sidebar.md +31 -26
- package/src/components/chat/.chat-ticket-list.md +39 -0
- package/src/components/chat/.context-compaction-display.md +36 -0
- package/src/components/chat/.cycling-phrase.md +52 -0
- package/src/components/chat/.embeddable-chat.md +48 -0
- package/src/components/chat/.expand-chevron.md +24 -0
- package/src/components/chat/.index.md +31 -35
- package/src/components/chat/.mingo-onboarding-card-skeleton.md +44 -0
- package/src/components/chat/.mingo-onboarding-card.md +62 -0
- package/src/components/chat/.model-display.md +32 -30
- package/src/components/chat/.nav-link-anchor-via-runtime.md +40 -0
- package/src/components/chat/.remark-card-links.md +38 -0
- package/src/components/chat/.slash-command-suggestions.md +47 -0
- package/src/components/chat/.source-action-button.md +48 -0
- package/src/components/chat/.thinking-display.md +42 -0
- package/src/components/chat/.tool-call-blocks.md +45 -0
- package/src/components/chat/.tool-execution-display.md +44 -36
- package/src/components/chat/chat-container.tsx +1 -1
- package/src/components/chat/entity-cards/.admin-content-card.md +43 -0
- package/src/components/chat/entity-cards/.block-card.md +47 -0
- package/src/components/chat/entity-cards/.blog-card.md +52 -0
- package/src/components/chat/entity-cards/.blog-image-placeholder.md +39 -0
- package/src/components/chat/entity-cards/.campaign-card-admin.md +47 -0
- package/src/components/chat/entity-cards/.case-study-card.md +58 -0
- package/src/components/chat/entity-cards/.chat-ticket-item.md +40 -0
- package/src/components/chat/entity-cards/.chat-video-entity-card.md +43 -0
- package/src/components/chat/entity-cards/.customer-interview-card.md +53 -0
- package/src/components/chat/entity-cards/.data-room-doc-card.md +47 -0
- package/src/components/chat/entity-cards/.dispatch.md +39 -0
- package/src/components/chat/entity-cards/.entity-author-card.md +51 -0
- package/src/components/chat/entity-cards/.generic-entity-card.md +62 -0
- package/src/components/chat/entity-cards/.github-activity-card.md +61 -0
- package/src/components/chat/entity-cards/.hubspot-ticket-card.md +53 -0
- package/src/components/chat/entity-cards/.index.md +66 -0
- package/src/components/chat/entity-cards/.investor-update-card.md +47 -0
- package/src/components/chat/entity-cards/.onboarding-guide-card.md +58 -0
- package/src/components/chat/entity-cards/.product-release-card-defaults.md +31 -0
- package/src/components/chat/entity-cards/.product-release-card.md +29 -0
- package/src/components/chat/entity-cards/.program-card-defaults.md +41 -0
- package/src/components/chat/entity-cards/.program-card.md +59 -0
- package/src/components/chat/entity-cards/.roadmap-card.md +46 -0
- package/src/components/chat/entity-cards/.roadmap-vote-button.md +52 -0
- package/src/components/chat/entity-cards/.slack-message-card.md +48 -0
- package/src/components/chat/entity-cards/.task-type-icon.md +47 -0
- package/src/components/chat/hooks/.index.md +36 -21
- package/src/components/chat/hooks/.use-chat-attachment-image-gallery.md +51 -0
- package/src/components/chat/hooks/.use-chat-attachments.md +48 -0
- package/src/components/chat/hooks/.use-chat-card-item.md +39 -0
- package/src/components/chat/hooks/.use-chat-identity.md +45 -0
- package/src/components/chat/hooks/.use-chat.md +58 -0
- package/src/components/chat/hooks/.use-chunk-catchup.md +46 -48
- package/src/components/chat/hooks/.use-close-on-navigation.md +44 -0
- package/src/components/chat/hooks/.use-collapsible.md +48 -0
- package/src/components/chat/hooks/.use-embedded-chat.md +32 -0
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +40 -0
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +52 -0
- package/src/components/chat/hooks/.use-nats-dialog-subscription.md +49 -30
- package/src/components/chat/hooks/.use-proxied-image-url.md +40 -0
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +43 -40
- package/src/components/chat/hooks/.use-slash-commands.md +46 -0
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +34 -0
- package/src/components/chat/hooks/.use-sse.md +60 -0
- package/src/components/chat/hooks/.use-unified-chat.md +57 -0
- package/src/components/chat/types/.api.types.md +52 -38
- package/src/components/chat/types/.chat.types.md +43 -34
- package/src/components/chat/types/.component.types.md +47 -48
- package/src/components/chat/types/.index.md +20 -27
- package/src/components/chat/types/.message.types.md +58 -48
- package/src/components/chat/types/.network.types.md +57 -31
- package/src/components/chat/types/.processing.types.md +49 -31
- package/src/components/chat/types/.unified-chat-state.types.md +41 -0
- package/src/components/chat/types/entities/.blog.md +43 -0
- package/src/components/chat/types/entities/.case-study.md +26 -0
- package/src/components/chat/types/entities/.content-ref.md +41 -0
- package/src/components/chat/types/entities/.customer-interview.md +28 -0
- package/src/components/chat/types/entities/.data-room-doc.md +36 -0
- package/src/components/chat/types/entities/.github-activity.md +43 -0
- package/src/components/chat/types/entities/.hubspot-ticket.md +53 -0
- package/src/components/chat/types/entities/.index.md +42 -0
- package/src/components/chat/types/entities/.investor-update.md +45 -0
- package/src/components/chat/types/entities/.onboarding-guide.md +50 -0
- package/src/components/chat/types/entities/.program-types.md +57 -0
- package/src/components/chat/types/entities/.roadmap-item.md +58 -0
- package/src/components/chat/types/entities/.slack-message.md +35 -0
- package/src/components/chat/utils/.agent-status-message.md +45 -0
- package/src/components/chat/utils/.auto-continuation-directive.md +58 -0
- package/src/components/chat/utils/.chat-attachment-markdown.md +54 -0
- package/src/components/chat/utils/.chat-authed-fetch.md +25 -0
- package/src/components/chat/utils/.chat-nav-resolution.md +46 -0
- package/src/components/chat/utils/.chat-proxy-auth-storage.md +38 -0
- package/src/components/chat/utils/.chip-action-class.md +34 -0
- package/src/components/chat/utils/.chip-styles.md +46 -0
- package/src/components/chat/utils/.chunk-parser.md +38 -28
- package/src/components/chat/utils/.clickup-task-type-utils.md +48 -0
- package/src/components/chat/utils/.compact-card-classes.md +62 -0
- package/src/components/chat/utils/.decide-new-tab.md +51 -0
- package/src/components/chat/utils/.external-app-urls.md +29 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +25 -29
- package/src/components/chat/utils/.flatten-assistant-content.md +34 -0
- package/src/components/chat/utils/.icon-registry.md +46 -0
- package/src/components/chat/utils/.index.md +37 -32
- package/src/components/chat/utils/.is-cross-origin-url.md +35 -0
- package/src/components/chat/utils/.message-segment-accumulator.md +25 -34
- package/src/components/chat/utils/.nav-anchor-props.md +44 -0
- package/src/components/chat/utils/.nav-click-handler.md +47 -0
- package/src/components/chat/utils/.onboarding-icons.md +28 -0
- package/src/components/chat/utils/.process-historical-messages.md +46 -35
- package/src/components/chat/utils/.scroll-anchor.md +40 -0
- package/src/components/chat/utils/.slash-dispatch-utils.md +44 -0
- package/src/components/chat/utils/.source-icons.md +35 -0
- package/src/components/chat/utils/.source-row-cta.md +54 -0
- package/src/components/chat/utils/.tool-call-helpers.md +42 -0
- package/src/components/contact/.contact-form.md +43 -0
- package/src/components/contact/.index.md +27 -0
- package/src/components/features/.array-entry-manager.md +36 -45
- package/src/components/features/.changelog-manager.md +47 -21
- package/src/components/features/.changelog-sections-manager.md +21 -26
- package/src/components/features/.command-box.md +31 -28
- package/src/components/features/.entity-summary-editor.md +46 -0
- package/src/components/features/.entity-video-section.md +51 -0
- package/src/components/features/.figma-prototype-viewer.md +48 -29
- package/src/components/features/.filters-dropdown.md +33 -46
- package/src/components/features/.highlight-config-section.md +42 -0
- package/src/components/features/.highlight-generation-section.md +46 -0
- package/src/components/features/.highlight-video-combined-section.md +47 -0
- package/src/components/features/.highlight-video-preview.md +44 -0
- package/src/components/features/.highlight-video-section.md +47 -0
- package/src/components/features/.index.md +40 -66
- package/src/components/features/.media-gallery-manager.md +48 -38
- package/src/components/features/.more-about-button.md +22 -19
- package/src/components/features/.og-editor-preview.md +40 -36
- package/src/components/features/.parallax-image-showcase.md +33 -26
- package/src/components/features/.paths-display.md +42 -43
- package/src/components/features/.platform-badge.md +37 -36
- package/src/components/features/.platform-filter.md +23 -16
- package/src/components/features/.policy-configuration-panel.md +48 -56
- package/src/components/features/.provider-button.md +33 -36
- package/src/components/features/.push-button-selector.md +40 -29
- package/src/components/features/.release-media-manager.md +46 -31
- package/src/components/features/.section-selector.md +26 -31
- package/src/components/features/.select-button.md +35 -25
- package/src/components/features/.seo-editor-preview.md +41 -44
- package/src/components/features/.social-links-manager.md +25 -19
- package/src/components/features/.start-with-openframe-button.md +37 -29
- package/src/components/features/.status-filter-component.md +36 -20
- package/src/components/features/.tags-selector.md +40 -24
- package/src/components/features/.transcribe-and-summarize-combined-section.md +45 -0
- package/src/components/features/.transcribe-summarize-section.md +48 -0
- package/src/components/features/.transcript-summary-editor.md +53 -0
- package/src/components/features/.video-bites-display.md +46 -0
- package/src/components/features/.video-clips-section.md +41 -0
- package/src/components/features/.video-ratio-tabs.md +56 -0
- package/src/components/features/.video-source-selector.md +60 -0
- package/src/components/features/.video.md +44 -0
- package/src/components/features/.waitlist-form.md +60 -0
- package/src/components/features/ai-enrich/.AIEnrichButton.md +30 -27
- package/src/components/features/ai-enrich/.AIEnrichSection.md +46 -42
- package/src/components/features/board/.board-column-header.md +38 -0
- package/src/components/features/board/.board-column.md +43 -0
- package/src/components/features/board/.board.md +51 -0
- package/src/components/features/board/.color-utils.md +26 -0
- package/src/components/features/board/.index.md +56 -0
- package/src/components/features/board/.ticket-card-skeleton.md +38 -0
- package/src/components/features/board/.ticket-card.md +47 -0
- package/src/components/features/board/.types.md +45 -0
- package/src/components/features/board/.use-board-collapse.md +34 -0
- package/src/components/features/notifications/.index.md +57 -0
- package/src/components/features/notifications/.notification-drawer.md +34 -0
- package/src/components/features/notifications/.notification-tile.md +39 -0
- package/src/components/features/notifications/.notifications-context.md +73 -0
- package/src/components/features/notifications/.types.md +45 -0
- package/src/components/icons/.about-icon.md +20 -28
- package/src/components/icons/.ai-robot-icon.md +15 -17
- package/src/components/icons/.bash-icon.md +16 -23
- package/src/components/icons/.buildings-icon.md +10 -24
- package/src/components/icons/.capterra-icon.md +30 -26
- package/src/components/icons/.carta-icon.md +29 -0
- package/src/components/icons/.clickup-icon.md +26 -0
- package/src/components/icons/.cmd-icon.md +15 -22
- package/src/components/icons/.coins-icon.md +17 -25
- package/src/components/icons/.community-hub-icon.md +19 -25
- package/src/components/icons/.community-icon.md +24 -21
- package/src/components/icons/.compare-icon.md +32 -19
- package/src/components/icons/.copy-icon.md +29 -15
- package/src/components/icons/.custom-external-link-icon.md +19 -17
- package/src/components/icons/.custom-fork-icon.md +32 -21
- package/src/components/icons/.custom-license-icon.md +29 -25
- package/src/components/icons/.custom-star-icon.md +20 -28
- package/src/components/icons/.custom-time-icon.md +21 -22
- package/src/components/icons/.cut-vendor-costs-icon.md +6 -19
- package/src/components/icons/.dashboard-icon.md +13 -18
- package/src/components/icons/.deno-icon.md +16 -23
- package/src/components/icons/.donut-icon.md +12 -23
- package/src/components/icons/.double-chevron-icon.md +28 -36
- package/src/components/icons/.elestio-logo.md +13 -23
- package/src/components/icons/.empty-vendor-icon.md +16 -18
- package/src/components/icons/.explore-categories-icon.md +18 -29
- package/src/components/icons/.eye-icon.md +16 -26
- package/src/components/icons/.facebook-icon.md +9 -20
- package/src/components/icons/.figma-icon.md +8 -17
- package/src/components/icons/.filter-icon.md +15 -17
- package/src/components/icons/.flamingo-logo.md +28 -27
- package/src/components/icons/.folder-shield-icon.md +28 -19
- package/src/components/icons/.g2-icon.md +22 -21
- package/src/components/icons/.getapp-icon.md +25 -21
- package/src/components/icons/.github-icon.md +13 -25
- package/src/components/icons/.globe-icon.md +14 -19
- package/src/components/icons/.google-gemini-icon.md +16 -19
- package/src/components/icons/.google-logo.md +15 -21
- package/src/components/icons/.grid-view-icon.md +30 -19
- package/src/components/icons/.hamburger-icon.md +22 -20
- package/src/components/icons/.hand-dollar-icon.md +24 -34
- package/src/components/icons/.hotel-icon.md +27 -21
- package/src/components/icons/.icon-utils.md +28 -29
- package/src/components/icons/.image-icon.md +15 -22
- package/src/components/icons/.index.md +25 -28
- package/src/components/icons/.info-circle-icon.md +29 -30
- package/src/components/icons/.instagram-icon.md +10 -24
- package/src/components/icons/.jump-in-icon.md +18 -18
- package/src/components/icons/.linux-icon.md +18 -18
- package/src/components/icons/.log-out-icon.md +15 -23
- package/src/components/icons/.logs-icon.md +14 -23
- package/src/components/icons/.margin-crisis-icon.md +21 -20
- package/src/components/icons/.menu-icon.md +18 -19
- package/src/components/icons/.miami-cyber-gang-logo-face-only.md +18 -21
- package/src/components/icons/.miami-cyber-gang-logo.md +22 -14
- package/src/components/icons/.mlg-logo.md +18 -16
- package/src/components/icons/.moon-icon.md +32 -22
- package/src/components/icons/.ms-icon.md +30 -19
- package/src/components/icons/.nushell-icon.md +7 -21
- package/src/components/icons/.open-source-icon.md +19 -23
- package/src/components/icons/.openai-icon.md +9 -24
- package/src/components/icons/.openframe-ai-icons.md +25 -26
- package/src/components/icons/.openframe-logo.md +28 -22
- package/src/components/icons/.openframe-text.md +24 -27
- package/src/components/icons/.openmsp-logo.md +26 -23
- package/src/components/icons/.pilot-icon.md +23 -0
- package/src/components/icons/.powershell-icon.md +17 -22
- package/src/components/icons/.python-icon.md +16 -23
- package/src/components/icons/.queries-icon.md +13 -21
- package/src/components/icons/.reddit-icon.md +28 -24
- package/src/components/icons/.remote-control-icon.md +13 -17
- package/src/components/icons/.script-icon.md +27 -19
- package/src/components/icons/.search-icon.md +21 -21
- package/src/components/icons/.send-icon.md +14 -16
- package/src/components/icons/.settings-icon.md +30 -19
- package/src/components/icons/.shape-circle-dash-icon.md +16 -21
- package/src/components/icons/.shell-icon.md +15 -19
- package/src/components/icons/.shield-check-icon.md +18 -31
- package/src/components/icons/.shield-key-icon.md +25 -25
- package/src/components/icons/.shield-lock-icon.md +8 -18
- package/src/components/icons/.slack-icon.md +28 -32
- package/src/components/icons/.sparkles-icon.md +18 -23
- package/src/components/icons/.sso-configuration-icon.md +29 -16
- package/src/components/icons/.sun-icon.md +20 -18
- package/src/components/icons/.table-view-icon.md +17 -19
- package/src/components/icons/.telegram-icon.md +8 -22
- package/src/components/icons/.thumbs-down-icon.md +10 -19
- package/src/components/icons/.thumbs-up-icon.md +8 -17
- package/src/components/icons/.tool-directory-icons.md +24 -28
- package/src/components/icons/.trustpilot-icon.md +25 -22
- package/src/components/icons/.user-icon.md +26 -28
- package/src/components/icons/.users-group-icon.md +28 -24
- package/src/components/icons/.vendor-showcase-icons.md +21 -29
- package/src/components/icons/.vendors-icon.md +18 -22
- package/src/components/icons/.whatsapp-icon.md +30 -14
- package/src/components/icons/.x-icon.md +18 -23
- package/src/components/icons/.x-logo.md +13 -38
- package/src/components/icons/.youtube-icon.md +8 -19
- package/src/components/icons/device-type-icons/.get-device-type-icon.md +26 -34
- package/src/components/icons-v2-generated/.index.md +52 -0
- package/src/components/icons-v2-generated/alphabet/.index.md +33 -0
- package/src/components/icons-v2-generated/arrows/.index.md +39 -0
- package/src/components/icons-v2-generated/audio-and-visual/.index.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.elestio-logo-icon.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.gemini-logo-icon.md +37 -0
- package/src/components/icons-v2-generated/brand-logos/.google-gemini-logo-icon.md +33 -0
- package/src/components/icons-v2-generated/brand-logos/.index.md +38 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-grey-icon.md +35 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-icon.md +36 -0
- package/src/components/icons-v2-generated/buildings/.index.md +48 -0
- package/src/components/icons-v2-generated/charts/.index.md +40 -0
- package/src/components/icons-v2-generated/clothes/.index.md +48 -0
- package/src/components/icons-v2-generated/coding/.index.md +42 -0
- package/src/components/icons-v2-generated/communication/.index.md +39 -0
- package/src/components/icons-v2-generated/date-and-time/.index.md +29 -0
- package/src/components/icons-v2-generated/design/.index.md +39 -0
- package/src/components/icons-v2-generated/devices/.index.md +38 -0
- package/src/components/icons-v2-generated/documents/.index.md +38 -0
- package/src/components/icons-v2-generated/finance/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.leafy-green-icon.md +36 -0
- package/src/components/icons-v2-generated/food-and-drinks/.strawberry-icon.md +39 -0
- package/src/components/icons-v2-generated/health/.index.md +40 -0
- package/src/components/icons-v2-generated/household/.index.md +45 -0
- package/src/components/icons-v2-generated/interface/.index.md +36 -0
- package/src/components/icons-v2-generated/map-and-travel/.index.md +41 -0
- package/src/components/icons-v2-generated/media-playback/.index.md +51 -0
- package/src/components/icons-v2-generated/number/.index.md +41 -0
- package/src/components/icons-v2-generated/school/.index.md +37 -0
- package/src/components/icons-v2-generated/security/.fingerprint-icon.md +38 -0
- package/src/components/icons-v2-generated/security/.index.md +39 -0
- package/src/components/icons-v2-generated/shopping/.index.md +42 -0
- package/src/components/icons-v2-generated/signs-and-symbols/.index.md +32 -0
- package/src/components/icons-v2-generated/sort-and-filter/.index.md +35 -0
- package/src/components/icons-v2-generated/sport/.index.md +41 -0
- package/src/components/icons-v2-generated/text-editor/.index.md +44 -0
- package/src/components/icons-v2-generated/users/.index.md +45 -0
- package/src/components/icons-v2-generated/vehicles-and-delivery/.index.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.flower-sakura-icon.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.index.md +34 -0
- package/src/components/layout/.article-detail-layout.md +43 -0
- package/src/components/layout/.back-button.md +40 -0
- package/src/components/layout/.list-page-layout.md +35 -26
- package/src/components/layout/.page-container.md +27 -38
- package/src/components/layout/.page-layout.md +50 -0
- package/src/components/layout/.title-block.md +42 -0
- package/src/components/loading/.card-skeleton.md +38 -29
- package/src/components/loading/.device-card-skeleton.md +29 -25
- package/src/components/loading/.index.md +39 -46
- package/src/components/loading/.margin-report-skeleton.md +45 -34
- package/src/components/loading/.organization-card-skeleton.md +39 -44
- package/src/components/loading/.page-layout-skeleton.md +34 -45
- package/src/components/loading/.unified-skeleton.md +62 -36
- package/src/components/navigation/.app-header.md +40 -29
- package/src/components/navigation/.app-layout.md +25 -26
- package/src/components/navigation/.header-global-search.md +34 -37
- package/src/components/navigation/.header-organization-filter.md +23 -22
- package/src/components/navigation/.header.md +31 -35
- package/src/components/navigation/.mobile-burger-menu.md +39 -47
- package/src/components/navigation/.mobile-nav-panel.md +51 -32
- package/src/components/navigation/.navigation-sidebar-header.md +36 -0
- package/src/components/navigation/.navigation-sidebar-item.md +45 -0
- package/src/components/navigation/.navigation-sidebar-toggle.md +38 -0
- package/src/components/navigation/.navigation-sidebar.md +33 -34
- package/src/components/navigation/.sliding-sidebar.md +52 -41
- package/src/components/navigation/.sticky-section-nav.md +56 -48
- package/src/components/platform/.ScriptArguments.md +39 -25
- package/src/components/platform/.ScriptInfoSection.md +30 -26
- package/src/components/platform/.ShellTypeBadge.md +18 -13
- package/src/components/platform/.SoftwareInfo.md +23 -27
- package/src/components/platform/.SoftwareSourceBadge.md +28 -19
- package/src/components/platform/.ToolBadge.md +25 -26
- package/src/components/providers/.theme-provider.md +52 -0
- package/src/components/shared/delivery/.delivery-lists.md +39 -0
- package/src/components/shared/delivery/.delivery-row.md +41 -0
- package/src/components/shared/delivery/.delivery-table.md +41 -0
- package/src/components/shared/delivery/.index.md +38 -0
- package/src/components/shared/dev-section/.dev-card-row.md +60 -0
- package/src/components/shared/dev-section/.dev-section-page.md +48 -0
- package/src/components/shared/dev-section/.dev-section-view.md +43 -0
- package/src/components/shared/dev-section/.index.md +38 -0
- package/src/components/shared/legal-document/.index.md +40 -0
- package/src/components/shared/legal-document/.legal-document-page.md +50 -0
- package/src/components/shared/legal-document/.use-legal-docs.md +42 -0
- package/src/components/shared/onboarding/.onboarding-step-card.md +32 -31
- package/src/components/shared/onboarding/.onboarding-walkthrough.md +39 -43
- package/src/components/shared/product-release/.index.md +28 -30
- package/src/components/shared/product-release/.product-release-card-skeleton.md +28 -28
- package/src/components/shared/product-release/.product-release-card.md +45 -27
- package/src/components/shared/product-release/.release-detail-page.md +23 -24
- package/src/components/shared/roadmap/.index.md +37 -0
- package/src/components/shared/roadmap/.roadmap-grid-skeleton.md +39 -0
- package/src/components/shared/roadmap/.roadmap-grid.md +66 -0
- package/src/components/shared/roadmap/.use-roadmap-voting.md +68 -0
- package/src/components/tickets/.help-center-card.md +51 -0
- package/src/components/tickets/.help-center-create-form.md +38 -0
- package/src/components/tickets/.help-center-list.md +40 -0
- package/src/components/tickets/.index.md +65 -0
- package/src/components/tickets/.ticket-center.md +51 -0
- package/src/components/tickets/.ticket-detail-drawer.md +48 -0
- package/src/components/tickets/.ticket-linked-delivery-card.md +36 -0
- package/src/components/tickets/.ticket-open-form.md +50 -0
- package/src/components/tickets/.ticket-row.md +30 -0
- package/src/components/tickets/.types.md +57 -0
- package/src/components/tickets/hooks/.use-ticket-actions.md +77 -0
- package/src/components/tickets/hooks/.use-ticket-engagements.md +42 -0
- package/src/components/tickets/hooks/.use-tickets-list.md +54 -0
- package/src/components/ui/.actions-menu.md +66 -41
- package/src/components/ui/.alert-dialog.md +29 -26
- package/src/components/ui/.allowed-domains-input.md +29 -21
- package/src/components/ui/.assignee-dropdown.md +45 -0
- package/src/components/ui/.autocomplete.md +47 -41
- package/src/components/ui/.benefit-card.md +51 -36
- package/src/components/ui/.brand-association-card.md +30 -27
- package/src/components/ui/.breadcrumb.md +17 -15
- package/src/components/ui/.checkbox-block.md +39 -35
- package/src/components/ui/.checkbox-with-description.md +23 -16
- package/src/components/ui/.checkbox.md +31 -23
- package/src/components/ui/.circular-progress.md +49 -19
- package/src/components/ui/.content-loader.md +32 -20
- package/src/components/ui/.cursor-pagination.md +41 -52
- package/src/components/ui/.dashboard-info-card.md +33 -26
- package/src/components/ui/.date-picker.md +27 -25
- package/src/components/ui/.device-card-compact.md +28 -29
- package/src/components/ui/.device-card.md +27 -27
- package/src/components/ui/.dialog.md +25 -16
- package/src/components/ui/.drawer.md +86 -0
- package/src/components/ui/.dropdown-button.md +45 -0
- package/src/components/ui/.entity-image.md +46 -0
- package/src/components/ui/.error-state.md +41 -28
- package/src/components/ui/.feature-card.md +35 -31
- package/src/components/ui/.feature-list.md +48 -0
- package/src/components/ui/.field-wrapper.md +47 -0
- package/src/components/ui/.file-upload.md +42 -0
- package/src/components/ui/.filter-checkbox-item.md +43 -0
- package/src/components/ui/.filter-list.md +57 -0
- package/src/components/ui/.filter-modal.md +59 -0
- package/src/components/ui/.floating-tooltip.md +43 -26
- package/src/components/ui/.hidden-tags-popup.md +49 -0
- package/src/components/ui/.hover-dropdown.md +54 -0
- package/src/components/ui/.image-gallery-modal.md +41 -34
- package/src/components/ui/.image-uploader.md +53 -0
- package/src/components/ui/.index.md +40 -34
- package/src/components/ui/.info-card.md +31 -31
- package/src/components/ui/.info-row.md +31 -27
- package/src/components/ui/.input-trigger.md +44 -0
- package/src/components/ui/.input.md +37 -31
- package/src/components/ui/.markdown-editor.md +57 -0
- package/src/components/ui/.modal-v2.md +51 -0
- package/src/components/ui/.modal.md +32 -31
- package/src/components/ui/.more-actions-menu.md +45 -38
- package/src/components/ui/.organization-card.md +31 -37
- package/src/components/ui/.page-actions.md +44 -54
- package/src/components/ui/.phone-input.md +54 -0
- package/src/components/ui/.progress-bar.md +35 -27
- package/src/components/ui/.radio-group.md +39 -27
- package/src/components/ui/.release-changelog-section.md +34 -34
- package/src/components/ui/.search-input.md +48 -0
- package/src/components/ui/.select.md +54 -34
- package/src/components/ui/.service-card.md +42 -40
- package/src/components/ui/.sheet.md +27 -18
- package/src/components/ui/.simple-markdown-renderer.md +29 -31
- package/src/components/ui/.sort-column-item.md +42 -0
- package/src/components/ui/.square-avatar.md +34 -24
- package/src/components/ui/.status-badge.md +26 -38
- package/src/components/ui/.switch.md +22 -35
- package/src/components/ui/.tab-navigation.md +56 -53
- package/src/components/ui/.tab-selector.md +40 -0
- package/src/components/ui/.tag-key-value-filter.md +56 -0
- package/src/components/ui/.tag-search-input.md +53 -0
- package/src/components/ui/.tag.md +49 -31
- package/src/components/ui/.tags-manager.md +60 -0
- package/src/components/ui/.textarea.md +44 -34
- package/src/components/ui/.ticket-attachments-list.md +45 -0
- package/src/components/ui/.ticket-detail-section.md +29 -0
- package/src/components/ui/.ticket-info-section.md +56 -0
- package/src/components/ui/.ticket-note-card.md +53 -0
- package/src/components/ui/.ticket-notes-section.md +54 -0
- package/src/components/ui/.ticket-status-tag.md +49 -0
- package/src/components/ui/.title-content-block.md +25 -26
- package/src/components/ui/.toaster.md +40 -28
- package/src/components/ui/.tooltip.md +22 -11
- package/src/components/ui/.truncate-text.md +39 -0
- package/src/components/ui/button/.button-styles.md +35 -0
- package/src/components/ui/button/.button.md +53 -0
- package/src/components/ui/button/.split-button.md +48 -0
- package/src/components/ui/data-table/.data-table-body.md +48 -0
- package/src/components/ui/data-table/.data-table-column-filter.md +45 -0
- package/src/components/ui/data-table/.data-table-cursor-footer.md +45 -0
- package/src/components/ui/data-table/.data-table-empty.md +43 -0
- package/src/components/ui/data-table/.data-table-header.md +55 -0
- package/src/components/ui/data-table/.data-table-infinite-footer.md +44 -0
- package/src/components/ui/data-table/.data-table-row-count.md +43 -0
- package/src/components/ui/data-table/.data-table-row.md +47 -0
- package/src/components/ui/data-table/.data-table-skeleton.md +42 -0
- package/src/components/ui/data-table/.data-table.md +47 -0
- package/src/components/ui/data-table/.index.md +55 -0
- package/src/components/ui/data-table/.types.md +54 -0
- package/src/components/ui/data-table/.use-data-table.md +45 -0
- package/src/components/ui/data-table/.utils.md +38 -0
- package/src/components/ui/file-manager/.file-manager-action-bar.md +39 -30
- package/src/components/ui/file-manager/.file-manager-breadcrumb.md +29 -27
- package/src/components/ui/file-manager/.file-manager-context-menu.md +38 -42
- package/src/components/ui/file-manager/.file-manager-empty.md +26 -39
- package/src/components/ui/file-manager/.file-manager-table-row.md +33 -41
- package/src/components/ui/file-manager/.file-manager.md +35 -31
- package/src/components/ui/query-report-table/.index.md +43 -0
- package/src/components/ui/query-report-table/.query-report-table-header.md +36 -0
- package/src/components/ui/query-report-table/.query-report-table-row.md +40 -0
- package/src/components/ui/query-report-table/.query-report-table-skeleton.md +44 -0
- package/src/components/ui/query-report-table/.query-report-table.md +47 -0
- package/src/components/ui/query-report-table/.types.md +41 -0
- package/src/components/ui/query-report-table/.utils.md +35 -0
- package/src/components/ui/table/.index.md +27 -48
- package/src/components/ui/table/.table-cell.md +18 -27
- package/src/components/ui/table/.table-column-filter-dropdown.md +40 -0
- package/src/components/ui/table/.table-description-cell.md +24 -14
- package/src/components/ui/table/.table-empty-state.md +21 -22
- package/src/components/ui/table/.table-header.md +25 -40
- package/src/components/ui/table/.table-row.md +22 -40
- package/src/components/ui/table/.table-skeleton.md +33 -26
- package/src/components/ui/table/.table-timestamp-cell.md +26 -16
- package/src/components/ui/table/.table.md +39 -59
- package/src/components/ui/table/.types.md +44 -36
- package/src/components/ui/table/.utils.md +18 -20
- package/src/contexts/.chat-runtime-context.md +54 -0
- package/src/contexts/.endpoints-runtime-context.md +58 -0
- package/src/contexts/.index.md +53 -0
- package/src/contexts/.use-outer-or-default.md +36 -0
- package/src/embed-shims/.index.md +45 -0
- package/src/embed-shims/.next-dynamic.md +43 -0
- package/src/embed-shims/.next-image.md +45 -0
- package/src/embed-shims/.next-link.md +59 -0
- package/src/embed-shims/.next-navigation.md +59 -0
- package/src/hooks/.index.md +34 -29
- package/src/hooks/.use-access-code-integration.md +49 -0
- package/src/hooks/.use-contact-submission.md +37 -26
- package/src/hooks/.use-copy-to-clipboard.md +42 -0
- package/src/hooks/.use-near-viewport.md +44 -0
- package/src/hooks/.use-og-placeholder.md +51 -0
- package/src/hooks/.use-toast.md +36 -35
- package/src/hooks/state/.use-api-params.md +29 -46
- package/src/hooks/state/.use-query-params.md +37 -33
- package/src/hooks/ui/.index.md +33 -32
- package/src/hooks/ui/.use-auto-limit-tags.md +54 -0
- package/src/hooks/ui/.use-horizontal-scrollbar.md +74 -0
- package/src/hooks/ui/.use-image-edge-color.md +42 -0
- package/src/hooks/ui/.use-media-query.md +33 -25
- package/src/hooks/ui/.use-search.md +51 -0
- package/src/nats/.nats.md +49 -28
- package/src/schemas/.contact-schema.md +45 -0
- package/src/stories/.AnnouncementBar.stories.md +45 -0
- package/src/stories/.AppLayout.stories.md +20 -21
- package/src/stories/.Autocomplete.stories.md +48 -34
- package/src/stories/.Board.stories.md +35 -0
- package/src/stories/.Button.stories.md +36 -33
- package/src/stories/.ChatTicketList.stories.md +33 -0
- package/src/stories/.CheckboxBlock.stories.md +40 -28
- package/src/stories/.ContentLoader.stories.md +47 -0
- package/src/stories/.DashboardInfoCard.stories.md +57 -0
- package/src/stories/.DataTable.stories.md +41 -0
- package/src/stories/.DatePicker.stories.md +66 -52
- package/src/stories/.DeviceCard.stories.md +41 -40
- package/src/stories/.DeviceCardCompact.stories.md +41 -0
- package/src/stories/.DotsLoaderIcon.stories.md +36 -0
- package/src/stories/.Drawer.stories.md +58 -0
- package/src/stories/.EmbeddableChat.stories.md +41 -0
- package/src/stories/.FileManager.stories.md +41 -0
- package/src/stories/.FileManagerActionBar.stories.md +38 -0
- package/src/stories/.FileUpload.stories.md +53 -0
- package/src/stories/.FilterList.stories.md +54 -0
- package/src/stories/.FilterModal.stories.md +72 -0
- package/src/stories/.FiltersDropdown.stories.md +57 -0
- package/src/stories/.Header.stories.md +48 -0
- package/src/stories/.ImageUploader.stories.md +49 -0
- package/src/stories/.InfoCard.stories.md +54 -0
- package/src/stories/.Input.stories.md +48 -30
- package/src/stories/.ListPageLayout.stories.md +56 -43
- package/src/stories/.MingoOnboardingCard.stories.md +42 -0
- package/src/stories/.MingoOnboardingCardSkeleton.stories.md +35 -0
- package/src/stories/.Modal.stories.md +40 -31
- package/src/stories/.NotificationDrawer.stories.md +55 -0
- package/src/stories/.OnboardingStepCard.stories.md +41 -0
- package/src/stories/.OrganizationCard.stories.md +61 -0
- package/src/stories/.PageActions.stories.md +52 -49
- package/src/stories/.PageContainer.stories.md +41 -35
- package/src/stories/.PageLayout.stories.md +60 -0
- package/src/stories/.ParallaxImageShowcase.stories.md +49 -0
- package/src/stories/.PhoneInput.stories.md +53 -0
- package/src/stories/.QueryReportTable.stories.md +44 -0
- package/src/stories/.RadioGroup.stories.md +46 -0
- package/src/stories/.RadioGroupBlock.stories.md +45 -0
- package/src/stories/.Select.stories.md +29 -15
- package/src/stories/.SlashCommandSuggestions.stories.md +41 -0
- package/src/stories/.SplitButton.stories.md +62 -0
- package/src/stories/.TabNavigation.stories.md +47 -38
- package/src/stories/.TabSelector.stories.md +65 -0
- package/src/stories/.Table.stories.md +38 -46
- package/src/stories/.TableColumnFilterDropdown.stories.md +46 -0
- package/src/stories/.Tag.stories.md +43 -32
- package/src/stories/.TagKeyValueFilter.stories.md +44 -0
- package/src/stories/.TagSearchInput.stories.md +61 -0
- package/src/stories/.Textarea.stories.md +49 -26
- package/src/stories/.Theme.stories.md +41 -0
- package/src/stories/.TicketAttachmentsList.stories.md +39 -0
- package/src/stories/.TicketDescriptionViewer.stories.md +39 -0
- package/src/stories/.TicketInfoSection.stories.md +40 -0
- package/src/stories/.TicketKnowledgeBaseList.stories.md +36 -0
- package/src/stories/.TicketNotesSection.stories.md +50 -0
- package/src/stories/.Toaster.stories.md +40 -0
- package/src/stories/.ToolExecutionDisplay.stories.md +41 -0
- package/src/stories/.Tooltip.stories.md +41 -0
- package/src/stories/.UserSummary.stories.md +41 -0
- package/src/stories/.WaitlistForm.stories.md +42 -0
- package/src/stories/BlogCard.stories.tsx +61 -0
- package/src/stories/CampaignCardAdmin.stories.tsx +52 -0
- package/src/stories/CaseStudyCard.stories.tsx +42 -0
- package/src/stories/ChatContainer.stories.tsx +186 -0
- package/src/stories/ChatInlineVideoPill.stories.tsx +63 -0
- package/src/stories/CustomerInterviewCard.stories.tsx +42 -0
- package/src/stories/DataRoomDocCard.stories.tsx +52 -0
- package/src/stories/GenericEntityCard.stories.tsx +66 -0
- package/src/stories/GitHubActivityCard.stories.tsx +61 -0
- package/src/stories/HubspotTicketCard.stories.tsx +98 -0
- package/src/stories/InvestorUpdateCard.stories.tsx +42 -0
- package/src/stories/OnboardingGuideCard.stories.tsx +52 -0
- package/src/stories/ProductReleaseCard.stories.tsx +61 -0
- package/src/stories/ProgramCard.stories.tsx +79 -0
- package/src/stories/RoadmapCard.stories.tsx +75 -0
- package/src/stories/SlackMessageCard.stories.tsx +41 -0
- package/src/stories/__fixtures__/chat-cards.ts +604 -0
- package/src/types/.blog.md +53 -29
- package/src/types/.case-study.md +44 -27
- package/src/types/.customer-interview.md +66 -44
- package/src/types/.delivery.md +40 -0
- package/src/types/.employee.md +24 -30
- package/src/types/.index.md +33 -47
- package/src/types/.marketing.md +49 -44
- package/src/types/.navigation.md +33 -25
- package/src/types/.os.types.md +32 -27
- package/src/types/.platform.md +31 -28
- package/src/types/.product-release.md +65 -38
- package/src/types/.supabase.md +37 -29
- package/src/types/.team.md +41 -33
- package/src/types/.video-processing.md +54 -0
- package/src/types/.waitlist.md +40 -36
- package/src/utils/.access-code-client.md +37 -36
- package/src/utils/.cn.md +31 -23
- package/src/utils/.color-analysis.md +35 -0
- package/src/utils/.country-phone-utils.md +39 -0
- package/src/utils/.date-formatters.md +19 -18
- package/src/utils/.embed-authed-fetch.md +39 -0
- package/src/utils/.embed-proxy-auth-storage.md +38 -0
- package/src/utils/.fetch-priority.md +41 -0
- package/src/utils/.format.md +74 -25
- package/src/utils/.generic-domain-utils.md +42 -0
- package/src/utils/.image-proxy.md +59 -23
- package/src/utils/.index.md +42 -49
- package/src/utils/.local-storage-adapter.md +50 -0
- package/src/utils/.ods-color-utils.md +55 -38
- package/src/utils/.platform-config.md +45 -25
- package/src/utils/.scroll-into-view.md +40 -0
- package/src/utils/.source-icons.md +53 -0
- package/src/utils/.sse-decision-frame.md +46 -0
- package/src/utils/dev-sections/.index.md +34 -0
- package/src/utils/dev-sections/.openframe-dev-sections.md +49 -0
- package/dist/chunk-ZDF6F7ED.cjs.map +0 -1
- package/dist/chunk-ZTJVRSN5.js.map +0 -1
- package/src/components/.card.md +0 -42
- package/src/components/.contact-button.md +0 -30
- package/src/components/.drawer.md +0 -46
- package/src/components/.fixed-layout-container.md +0 -47
- package/src/components/.footer-waitlist-card.md +0 -29
- package/src/components/.join-waitlist-cta.md +0 -29
- package/src/components/.sheet.md +0 -47
- package/src/components/.sliding-panel.md +0 -48
- package/src/components/.tooltip.md +0 -48
- package/src/components/.use-mobile.md +0 -42
- package/src/components/.vendor-compact-card.md +0 -66
- package/src/components/.x-button.md +0 -42
- package/src/components/features/.github-repo-button.md +0 -40
- package/src/components/features/.organization-icon.md +0 -47
- package/src/components/features/.organization-selector.md +0 -45
- package/src/components/icons/.fleet-icon.md +0 -39
- package/src/components/icons/.meshcentral-icon.md +0 -35
- package/src/components/icons/.refresh-icon.md +0 -34
- package/src/components/icons/.tactical-icon.md +0 -35
- package/src/components/ui/.button.md +0 -69
- package/src/components/ui/.log-table-row.md +0 -47
- package/src/components/ui/.selectable-device-card.md +0 -46
- package/src/hooks/.api-hooks-stub.md +0 -45
- package/src/hooks/api/.use-product-releases.md +0 -53
- package/src/stories/.OrganizationSelector.stories.md +0 -42
- package/src/stories/.SelectableDeviceCard.stories.md +0 -30
- package/src/utils/.lite-youtube-embed-stub.md +0 -37
- package/src/utils/.lite-youtube-embed.md +0 -33
- /package/dist/{chunk-3JWIJJ44.js.map → chunk-5OWDOFKK.js.map} +0 -0
- /package/dist/{chunk-IK2X5YJU.js.map → chunk-HWY35EAK.js.map} +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- source-hash: d4d35ff06ab39090293de947a43da21c -->
|
|
2
|
+
Utility module for detecting personal/consumer email providers, distinguishing them from business/corporate domains.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `GENERIC_EMAIL_DOMAINS` | `const` array | Readonly list of ~30 known generic email domains (Gmail, Yahoo, iCloud, ISPs, international providers) |
|
|
9
|
+
| `GenericEmailDomain` | `type` | Union type inferred from `GENERIC_EMAIL_DOMAINS` entries |
|
|
10
|
+
| `extractDomainFromEmail` | `function` | Parses the domain portion from an email address string |
|
|
11
|
+
| `normalizeDomain` | `function` | Strips protocol, `www.`, and paths from a domain or URL string |
|
|
12
|
+
| `isGenericDomain` | `function` | Returns `true` if a domain matches any entry in `GENERIC_EMAIL_DOMAINS` |
|
|
13
|
+
| `hasGenericEmailDomain` | `function` | Checks whether an email address belongs to a generic provider |
|
|
14
|
+
| `isGenericWebsiteDomain` | `function` | Checks whether a website URL resolves to a generic provider domain |
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import {
|
|
20
|
+
extractDomainFromEmail,
|
|
21
|
+
hasGenericEmailDomain,
|
|
22
|
+
isGenericDomain,
|
|
23
|
+
isGenericWebsiteDomain,
|
|
24
|
+
} from './generic-domain-utils'
|
|
25
|
+
|
|
26
|
+
// Extract domain from email
|
|
27
|
+
extractDomainFromEmail('user@gmail.com') // → 'gmail.com'
|
|
28
|
+
extractDomainFromEmail('invalid-email') // → null
|
|
29
|
+
|
|
30
|
+
// Check if an email uses a generic provider
|
|
31
|
+
hasGenericEmailDomain('user@gmail.com') // → true
|
|
32
|
+
hasGenericEmailDomain('user@acme.com') // → false
|
|
33
|
+
|
|
34
|
+
// Check a raw domain string
|
|
35
|
+
isGenericDomain('yahoo.com') // → true
|
|
36
|
+
|
|
37
|
+
// Check a website URL (strips protocol/www automatically)
|
|
38
|
+
isGenericWebsiteDomain('https://www.gmail.com/inbox') // → true
|
|
39
|
+
isGenericWebsiteDomain('https://acme.com') // → false
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> **Typical use case:** Gate B2B sign-up flows or lead enrichment pipelines by rejecting personal email addresses — ensuring only corporate domains are accepted for company-linked records.
|
|
@@ -1,32 +1,68 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 96c8aeb6b887afbf8566d95db7ee4847 -->
|
|
2
|
+
Pure utility module for building image proxy URLs and related image-loading helpers, with no side effects or environment dependencies.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `GetProxiedImageUrlOptions` | Type | Configuration shape for proxy prefix, skip domains, and direct-HTTPS bypass |
|
|
9
|
+
| `getProxiedImageUrl` | Function | Core URL resolver — routes an image URL through the proxy or returns it unchanged based on resolution rules |
|
|
10
|
+
| `urlPathLooksLikeSvg` | Function | Heuristic check for `.svg` file extension in a URL path |
|
|
11
|
+
| `shouldProxyImage` | Function | Boolean guard indicating whether a URL requires proxying |
|
|
12
|
+
| `generateImageSizes` | Function | Returns a standard responsive `sizes` attribute string for `<img>` tags |
|
|
13
|
+
|
|
14
|
+
## Resolution Order (`getProxiedImageUrl`)
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
graph TD
|
|
18
|
+
A["imageUrl input"] --> B{"Already contains proxyPrefix?"}
|
|
19
|
+
B -- Yes --> C["Return unchanged (self-skip)"]
|
|
20
|
+
B -- No --> D{"Relative / data: / blob:?"}
|
|
21
|
+
D -- Yes --> E["Return unchanged"]
|
|
22
|
+
D -- No --> F{"directHttps + starts with https://?"}
|
|
23
|
+
F -- Yes --> G["Return unchanged"]
|
|
24
|
+
F -- No --> H{"proxyPrefix unset?"}
|
|
25
|
+
H -- Yes --> I["Return unchanged"]
|
|
26
|
+
H -- No --> J{"Matches skipDomains?"}
|
|
27
|
+
J -- Yes --> K["Return unchanged"]
|
|
28
|
+
J -- No --> L["Return proxyPrefix?url=encoded"]
|
|
29
|
+
```
|
|
8
30
|
|
|
9
31
|
## Usage Example
|
|
10
32
|
|
|
11
33
|
```typescript
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
//
|
|
34
|
+
import {
|
|
35
|
+
getProxiedImageUrl,
|
|
36
|
+
urlPathLooksLikeSvg,
|
|
37
|
+
shouldProxyImage,
|
|
38
|
+
} from './image-proxy';
|
|
39
|
+
|
|
40
|
+
const proxyPrefix = '/api/image-proxy';
|
|
41
|
+
const skipDomains = ['cdn.mycompany.com'];
|
|
42
|
+
|
|
43
|
+
// Standard proxy wrap
|
|
44
|
+
getProxiedImageUrl('https://external.com/photo.jpg', { proxyPrefix, skipDomains });
|
|
45
|
+
// → '/api/image-proxy?url=https%3A%2F%2Fexternal.com%2Fphoto.jpg'
|
|
46
|
+
|
|
47
|
+
// Skip proxy for own CDN
|
|
48
|
+
getProxiedImageUrl('https://cdn.mycompany.com/logo.png', { proxyPrefix, skipDomains });
|
|
49
|
+
// → 'https://cdn.mycompany.com/logo.png'
|
|
50
|
+
|
|
51
|
+
// Bypass proxy for SVGs only
|
|
52
|
+
const url = 'https://external.com/icon.svg';
|
|
53
|
+
getProxiedImageUrl(url, {
|
|
54
|
+
proxyPrefix,
|
|
55
|
+
directHttps: urlPathLooksLikeSvg(url), // true → bypass
|
|
56
|
+
});
|
|
57
|
+
// → 'https://external.com/icon.svg'
|
|
58
|
+
|
|
59
|
+
// Guard before proxying
|
|
60
|
+
shouldProxyImage('https://external.com/img.png', proxyPrefix); // → true
|
|
61
|
+
shouldProxyImage('/relative/path.png', proxyPrefix); // → false
|
|
30
62
|
```
|
|
31
63
|
|
|
32
|
-
|
|
64
|
+
## Notes
|
|
65
|
+
|
|
66
|
+
- **Caller-owned config** — no env reads; proxy prefix and skip list are passed in at the call site, typically from `ChatRuntime.endpoints.imageProxyUrlPrefix`.
|
|
67
|
+
- **HTTP stays proxied** even when `directHttps: true` to avoid mixed-content issues.
|
|
68
|
+
- Relative URLs, `data:`, and `blob:` URIs always pass through unchanged.
|
package/src/utils/.index.md
CHANGED
|
@@ -1,56 +1,49 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: a199bfb2e9675c73161c9b56f81904f7 -->
|
|
2
|
+
Barrel export index for the `utils` package, re-exporting all utility functions, types, and constants from their canonical source files to provide a single stable import path for consumers across the frontend library and hub.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
### **Helper Functions**
|
|
19
|
-
- `delay` - Async delay utility
|
|
20
|
-
- `generateRandomString`, `truncateString` - String manipulation
|
|
21
|
-
- `deepClone` - Object cloning utility
|
|
22
|
-
- `getSlackCommunityJoinUrl` - Community integration helper
|
|
23
|
-
|
|
24
|
-
### **Specialized Modules**
|
|
25
|
-
- Access code client utilities
|
|
26
|
-
- Validation helpers
|
|
27
|
-
- AI confidence scoring
|
|
28
|
-
- Date/time formatting
|
|
29
|
-
- Dynamic icon registry
|
|
30
|
-
- Tool, shell, and OS type utilities
|
|
6
|
+
| Export Group | Source | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `cn`, `getAllPlatformBaseDomains`, `getBaseUrl`, `getPlatformProductionUrl` | `./cn` | CSS class merging and platform URL helpers |
|
|
9
|
+
| `formatDate`, `formatNumber`, `formatPrice`, `formatBytes`, `formatCurrency`, `formatPercent`, etc. | `./format` | Number, currency, byte, date, and metric formatters |
|
|
10
|
+
| `getPlatformAccentColor`, `getCurrentPlatform` | `./ods-color-utils` | Platform theming and color utilities |
|
|
11
|
+
| `getDynamicIcon`, `ICON_REGISTRY`, `getIconComponent` | `chat/utils/icon-registry` | Dynamic icon registry |
|
|
12
|
+
| `embedAuthedFetch`, `getEmbedProxyAuth`, `setEmbedProxyAuth` | `./embed-*` | Embed-surface authentication helpers |
|
|
13
|
+
| `formatRelativeTime`, `formatAbsoluteDate`, `isToday`, `createUTCTimestamp` | `./date-utils` | Date/time formatting and comparison |
|
|
14
|
+
| `escapeMarkdownInline`, `buildChatAttachmentViewUrl` | `chat/utils/chat-attachment-markdown` | Chat attachment markdown helpers |
|
|
15
|
+
| `scrollElementIntoView` | `./scroll-into-view` | Smooth scroll with sticky-chrome offset |
|
|
16
|
+
| `readLeadingDecisionFrame` | `./sse-decision-frame` | SSE frame reader for confirm-tool route |
|
|
17
|
+
| `isCrossOriginUrl` | `chat/utils/is-cross-origin-url` | Cross-origin URL detection (server-safe) |
|
|
31
18
|
|
|
32
19
|
## Usage Example
|
|
33
20
|
|
|
34
21
|
```typescript
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
22
|
+
// Import any utility directly from the utils barrel
|
|
23
|
+
import {
|
|
24
|
+
cn,
|
|
25
|
+
formatCurrency,
|
|
26
|
+
formatRelativeTime,
|
|
27
|
+
getDynamicIcon,
|
|
28
|
+
getEmbedProxyAuth,
|
|
29
|
+
scrollElementIntoView,
|
|
30
|
+
getCurrentPlatform,
|
|
31
|
+
} from '@flamingo-stack/openframe-frontend-core/utils'
|
|
32
|
+
|
|
33
|
+
// CSS class merging
|
|
34
|
+
const className = cn('base-class', isActive && 'active')
|
|
35
|
+
|
|
36
|
+
// Format a currency value
|
|
37
|
+
const price = formatCurrency(4999, 'USD') // "$49.99"
|
|
38
|
+
|
|
39
|
+
// Relative time display
|
|
40
|
+
const label = formatRelativeTime(new Date('2024-01-01')) // "6 months ago"
|
|
41
|
+
|
|
42
|
+
// Retrieve embed proxy auth for non-chat surfaces
|
|
43
|
+
const auth = getEmbedProxyAuth()
|
|
44
|
+
|
|
45
|
+
// Scroll an element into view respecting sticky chrome
|
|
46
|
+
scrollElementIntoView(targetElement, { offsetPx: 64 })
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
> **Note:** Several exports are intentionally re-routed through this barrel to keep server-safe utilities (e.g. `CUSTOM_ITEM_ID`, `getSourceLabel`, `isCrossOriginUrl`) accessible from SSR/server code without crossing `"use client"` boundaries.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!-- source-hash: 68d691e94558097753faed6dd1e6e15f -->
|
|
2
|
+
A typed Web Storage adapter factory that centralizes SSR-guarding, JSON serialization, quota-failure handling, and optional namespace partitioning for both `localStorage` and `sessionStorage`.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `WebStorageBackend` | Type | `'local' \| 'session'` — selects the storage backend |
|
|
9
|
+
| `LocalStorageAdapter<T>` | Interface | Runtime API: `load()`, `save()`, `clear()`, `resolveKey()` |
|
|
10
|
+
| `LocalStorageAdapterOptions<T>` | Interface | Configuration including `key`, `namespace`, `validate`, `logTag`, `backend` |
|
|
11
|
+
| `createLocalStorageAdapter<T>()` | Function | Factory that returns a typed adapter instance |
|
|
12
|
+
|
|
13
|
+
**Backend guidance:**
|
|
14
|
+
- `'local'` (default) — persists across sessions; use for UI state, chat history, feature flags
|
|
15
|
+
- `'session'` — clears on tab close; use for **any auth-adjacent value** (tokens, proxy credentials) to minimize XSS exfiltration window
|
|
16
|
+
|
|
17
|
+
## Usage Example
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import { createLocalStorageAdapter } from './local-storage-adapter'
|
|
21
|
+
|
|
22
|
+
interface ChatPrefs {
|
|
23
|
+
theme: 'light' | 'dark'
|
|
24
|
+
fontSize: number
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Basic persistent adapter
|
|
28
|
+
const prefsAdapter = createLocalStorageAdapter<ChatPrefs>({
|
|
29
|
+
key: 'chat-prefs',
|
|
30
|
+
validate: (v): v is ChatPrefs =>
|
|
31
|
+
typeof v === 'object' && v !== null && 'theme' in v,
|
|
32
|
+
logTag: '[chat-prefs]',
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
prefsAdapter.save({ theme: 'dark', fontSize: 14 })
|
|
36
|
+
const prefs = prefsAdapter.load() // ChatPrefs | null
|
|
37
|
+
|
|
38
|
+
// Auth-adjacent value with session backend + dynamic namespace
|
|
39
|
+
const tokenAdapter = createLocalStorageAdapter<string>({
|
|
40
|
+
key: 'bearer-token',
|
|
41
|
+
backend: 'session',
|
|
42
|
+
namespace: () => currentUser?.orgId ?? null,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
tokenAdapter.save('eyJ...')
|
|
46
|
+
tokenAdapter.resolveKey() // → "org-123.bearer-token"
|
|
47
|
+
tokenAdapter.clear()
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
> **SSR safe:** All storage access is guarded against `window === undefined` and sandboxed-context throws (e.g. Safari private mode), returning `null` silently instead of crashing.
|
|
@@ -1,54 +1,71 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 8d0a4e249109b10a270ca0755176abc6 -->
|
|
2
|
+
Runtime utility library for working with ODS (OpenFrame Design System) color tokens, providing platform-aware theming, token lookup, CSS generation, and React integration helpers.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `Platform` | Type | Union of `'openmsp' \| 'openframe' \| 'flamingo'` |
|
|
9
|
+
| `ColorCategory` | Type | Union of `'open' \| 'flamingo' \| 'system' \| 'attention'` |
|
|
10
|
+
| `ColorVariant` | Type | Union of `'base' \| 'hover' \| 'active' \| 'focus' \| 'disabled'` |
|
|
11
|
+
| `getODSToken` | Function | Looks up a raw token value by category, color name, and variant |
|
|
12
|
+
| `getPlatformAccentColor` | Function | Returns the CSS variable for the current or specified platform's accent color |
|
|
13
|
+
| `getCurrentPlatform` | Function | Resolves platform from DOM attribute or `NEXT_PUBLIC_APP_TYPE` env var |
|
|
14
|
+
| `switchPlatformTheme` | Function | Updates `data-app-type` on `<html>` and dispatches `platformThemeChanged` event |
|
|
15
|
+
| `getSemanticColor` | Function | Reads a computed `--color-*` CSS property for a given platform |
|
|
16
|
+
| `tokenToTailwindClass` | Function | Maps a semantic token key to its corresponding Tailwind utility class |
|
|
17
|
+
| `getTokensByCategory` | Function | Returns all tokens matching a given `ColorCategory` prefix |
|
|
18
|
+
| `isValidODSToken` | Function | Checks whether a token key exists in the ODS token map |
|
|
19
|
+
| `getPlatformConfig` | Function | Returns a config object with accent color, theme type, and brand name |
|
|
20
|
+
| `generatePlatformCSS` | Function | Builds a CSS block of custom property overrides for a platform |
|
|
21
|
+
| `applyColorToken` | Function | Directly sets a CSS custom property on an `HTMLElement` |
|
|
22
|
+
| `interpolateColors` | Function | Linearly interpolates between two hex ODS tokens by progress (0–1) |
|
|
23
|
+
| `usePlatformColors` | Function | React-friendly helper returning platform config and token accessors |
|
|
24
|
+
| `getReadableTextColor` | Function | Returns `#212121` or `#fafafa` based on Rec. 601 luminance of a hex color |
|
|
20
25
|
|
|
21
26
|
## Usage Example
|
|
22
27
|
|
|
23
28
|
```typescript
|
|
24
|
-
import {
|
|
25
|
-
getCurrentPlatform,
|
|
26
|
-
|
|
29
|
+
import {
|
|
30
|
+
getCurrentPlatform,
|
|
31
|
+
getPlatformConfig,
|
|
27
32
|
getODSToken,
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
tokenToTailwindClass,
|
|
34
|
+
interpolateColors,
|
|
35
|
+
getReadableTextColor,
|
|
36
|
+
usePlatformColors,
|
|
37
|
+
switchPlatformTheme
|
|
30
38
|
} from './ods-color-utils';
|
|
31
39
|
|
|
32
|
-
//
|
|
33
|
-
const platform = getCurrentPlatform(); // '
|
|
34
|
-
|
|
40
|
+
// Resolve the active platform (SSR + CSR safe)
|
|
41
|
+
const platform = getCurrentPlatform(); // 'openframe'
|
|
42
|
+
|
|
43
|
+
// Get full platform configuration
|
|
44
|
+
const config = getPlatformConfig(platform);
|
|
45
|
+
// { platform: 'openframe', accentColor: 'var(--ods-open-yellow-base)',
|
|
46
|
+
// isDarkTheme: true, isLightTheme: false, brandName: 'OpenFrame' }
|
|
47
|
+
|
|
48
|
+
// Look up a raw design token
|
|
49
|
+
const tokenValue = getODSToken('system', 'greys-background', 'base');
|
|
35
50
|
|
|
36
|
-
//
|
|
37
|
-
const
|
|
51
|
+
// Map a semantic token to a Tailwind class
|
|
52
|
+
const twClass = tokenToTailwindClass('text-primary', 'text');
|
|
53
|
+
// → 'text-ods-text-primary'
|
|
38
54
|
|
|
39
|
-
//
|
|
55
|
+
// Interpolate between two hex tokens (e.g. for animations)
|
|
56
|
+
const midColor = interpolateColors('open-yellow-base', 'flamingo-pink-base', 0.5);
|
|
57
|
+
|
|
58
|
+
// Ensure readable text on a dynamic background
|
|
59
|
+
const textColor = getReadableTextColor('#FFC008'); // → '#212121'
|
|
60
|
+
|
|
61
|
+
// Switch platform at runtime (updates <html data-app-type> + fires event)
|
|
40
62
|
switchPlatformTheme('flamingo');
|
|
41
63
|
|
|
42
64
|
// React component usage
|
|
43
|
-
function
|
|
44
|
-
const { accentColor, isDarkTheme, switchTheme } = usePlatformColors();
|
|
45
|
-
|
|
46
|
-
return (
|
|
47
|
-
<div style={{ backgroundColor: accentColor }}>
|
|
48
|
-
<button onClick={() => switchTheme('openframe')}>
|
|
49
|
-
Switch to OpenFrame Theme
|
|
50
|
-
</button>
|
|
51
|
-
</div>
|
|
52
|
-
);
|
|
65
|
+
function MyComponent() {
|
|
66
|
+
const { accentColor, isDarkTheme, getToken, switchTheme } = usePlatformColors();
|
|
67
|
+
return <div style={{ color: accentColor }}>{isDarkTheme ? 'Dark' : 'Light'}</div>;
|
|
53
68
|
}
|
|
54
|
-
```
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
> **Note:** `getSemanticColor` and `applyColorToken` are browser-only — they return `undefined` or no-op on the server. `switchPlatformTheme` cannot persist `process.env` changes in production; use it for UI-layer toggling only.
|
|
@@ -1,37 +1,57 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 744818572300c7f98b30a728467179eb -->
|
|
2
|
+
Centralized configuration module for all platform branding assets and metadata across the Flamingo/OpenFrame ecosystem, providing icons, colors, display names, descriptions, and utility functions for consistent platform presentation.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
### Lookup Maps (exported constants)
|
|
7
|
+
|
|
8
|
+
| Export | Purpose |
|
|
9
|
+
|--------|---------|
|
|
10
|
+
| `platformIcons` | React icon components keyed by platform name |
|
|
11
|
+
| `platformColors` | Tailwind `bg-*` class strings per platform |
|
|
12
|
+
| `platformDisplayNames` | Human-readable names (e.g., `"Flamingo Marketing Hub"`) |
|
|
13
|
+
| `platformDescriptions` | Full marketing copy per platform |
|
|
14
|
+
| `platformSlogans` | Short taglines for branding use |
|
|
15
|
+
| `platformHexColors` | Raw hex values for non-Tailwind contexts |
|
|
16
|
+
| `platformIconNames` | String icon identifiers for config serialization |
|
|
17
|
+
|
|
18
|
+
Supported platform keys: `openframe`, `openmsp`, `flamingo`, `flamingo-teaser`, `marketing-hub`, `product-hub`, `revenue-hub`, `people-hub`, `company-hub`, `tmcg`, `universal`
|
|
19
|
+
|
|
20
|
+
### Utility Functions
|
|
21
|
+
|
|
22
|
+
| Function | Returns | Notes |
|
|
23
|
+
|----------|---------|-------|
|
|
24
|
+
| `getPlatformIcon(name)` | `React.ReactNode` | Falls back to `universal` Globe icon |
|
|
25
|
+
| `getPlatformColor(name)` | `string` | Tailwind `bg-*` class |
|
|
26
|
+
| `getPlatformDisplayName(name)` | `string` | Falls back to raw name |
|
|
27
|
+
| `getPlatformDescription(name)` | `string` | Falls back to raw name |
|
|
28
|
+
| `getPlatformSlogan(name)` | `string` | Falls back to raw name |
|
|
29
|
+
| `getDefaultColorForPlatform(name)` | `string` | Hex value, falls back to `universal` |
|
|
30
|
+
| `getDefaultIconForPlatform(name)` | `string` | Icon name string, falls back to `universal` |
|
|
31
|
+
| `getSmallPlatformIcon(name)` | `React.ReactNode` | 4×4 (`h-4 w-4`), uses CSS variables for hub variants |
|
|
32
|
+
| `getPlatformIconComponent(name, className?)` | `React.ReactNode` | 6×6 default, accepts custom `className` |
|
|
33
|
+
| `transformPlatformConfigsToOptions(configs)` | `SelectableOption[]` | Maps `PlatformConfig[]` to UI-selectable options with icon and color |
|
|
10
34
|
|
|
11
35
|
## Usage Example
|
|
12
36
|
|
|
13
37
|
```typescript
|
|
14
|
-
import {
|
|
15
|
-
getPlatformIcon,
|
|
16
|
-
getPlatformColor,
|
|
38
|
+
import {
|
|
17
39
|
getPlatformDisplayName,
|
|
18
|
-
|
|
40
|
+
getPlatformColor,
|
|
41
|
+
getSmallPlatformIcon,
|
|
42
|
+
transformPlatformConfigsToOptions
|
|
19
43
|
} from './platform-config';
|
|
20
44
|
|
|
21
|
-
//
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
<span>{getPlatformDisplayName(platformName)}</span>
|
|
32
|
-
</div>
|
|
33
|
-
);
|
|
34
|
-
}
|
|
45
|
+
// Render a platform badge
|
|
46
|
+
const PlatformBadge = ({ name }: { name: string }) => (
|
|
47
|
+
<span className={`px-2 py-1 rounded ${getPlatformColor(name)}`}>
|
|
48
|
+
{getSmallPlatformIcon(name)}
|
|
49
|
+
{getPlatformDisplayName(name)}
|
|
50
|
+
</span>
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
// Populate a platform selector dropdown
|
|
54
|
+
const options = transformPlatformConfigsToOptions(platformConfigs);
|
|
35
55
|
```
|
|
36
56
|
|
|
37
|
-
|
|
57
|
+
> All lookup functions fall back gracefully to the `universal` platform or the raw input string, so unknown platform keys never produce `undefined` in UI renders.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- source-hash: ec93c3a6544d7f572c8219bc65ceaf67 -->
|
|
2
|
+
Smooth-scroll utility that positions an element at the top of the viewport with support for sticky header offsets and pre-computed layout-shift adjustments.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `ScrollElementIntoViewOptions`
|
|
7
|
+
|
|
8
|
+
| Option | Type | Default | Description |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
| `headerOffset` | `number` | `0` | Pixels to subtract for sticky chrome (e.g., `96` for `scroll-mt-24`) |
|
|
11
|
+
| `behavior` | `ScrollBehavior` | `'smooth'` | `'smooth'` for animated scrolls, `'instant'` for deep-link jumps |
|
|
12
|
+
| `adjustTargetY` | `(raw: number) => number` | — | Callback to correct the pixel target before animation starts |
|
|
13
|
+
|
|
14
|
+
### `scrollElementIntoView(target, options?)`
|
|
15
|
+
|
|
16
|
+
Computes a fixed pixel target via `getBoundingClientRect().top + scrollY - headerOffset`, then calls `window.scrollTo()` directly. This avoids the jitter caused by `element.scrollIntoView()`, which re-targets continuously during layout shifts. Handles `null`/`undefined` refs as a no-op and short-circuits in SSR environments.
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { scrollElementIntoView } from './scroll-into-view'
|
|
22
|
+
|
|
23
|
+
// Basic — scroll a ref to top, accounting for a 96px sticky header
|
|
24
|
+
scrollElementIntoView(cardRef.current, { headerOffset: 96 })
|
|
25
|
+
|
|
26
|
+
// Instant jump on deep-link land
|
|
27
|
+
scrollElementIntoView(anchorRef.current, {
|
|
28
|
+
headerOffset: 96,
|
|
29
|
+
behavior: 'instant',
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
// Pre-computed layout-shift adjustment (e.g. HelpCenterCard accordion)
|
|
33
|
+
// Row A (above target) collapses simultaneously — shift target up by A's height
|
|
34
|
+
scrollElementIntoView(rowBRef.current, {
|
|
35
|
+
headerOffset: 96,
|
|
36
|
+
adjustTargetY: (raw) => raw - getAboveDrawerHeight(),
|
|
37
|
+
})
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> **Why not `element.scrollIntoView()`?** That API re-targets continuously as the page reflows during the animation, causing visible jitter when sibling content is also moving. Pre-computing a fixed pixel value lets the browser commit to a clean, uninterrupted animation.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- source-hash: 4129d05ad3798983504dba26d6153a8c -->
|
|
2
|
+
Maps RAG table IDs to their display icons, human-readable labels, and document type lookups for the OpenFrame chat source chip system. Server-safe with no client-only imports.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `SOURCE_ICON_NAMES` | `Record<string, string>` | Maps `RagTableConfig.id` → icon name string (resolved to React components via `icon-registry.ts`) |
|
|
9
|
+
| `SOURCE_LABELS_BY_TABLE` | `Record<string, string>` | Maps `RagTableConfig.id` → human-readable display label used in chat source chips |
|
|
10
|
+
| `DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID` | `Record<string, string>` | Reverse maps LLM-emitted `documentType` strings → `RagTableConfig.id` |
|
|
11
|
+
| `getSourceIconName()` | Function | Safe lookup returning `undefined` for unknown table IDs |
|
|
12
|
+
| `getSourceLabel()` | Function | Lookup with fallback to raw table slug when no label is registered |
|
|
13
|
+
| `defaultTableIdForDocumentType()` | Function | Default resolver for `useEmbeddedChat` when no custom callback is provided; returns `null` for unknown types |
|
|
14
|
+
|
|
15
|
+
## Usage Example
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import {
|
|
19
|
+
getSourceIconName,
|
|
20
|
+
getSourceLabel,
|
|
21
|
+
defaultTableIdForDocumentType,
|
|
22
|
+
} from '@/utils/source-icons'
|
|
23
|
+
|
|
24
|
+
// Resolve icon name for a known RAG table
|
|
25
|
+
const iconName = getSourceIconName('github-commits')
|
|
26
|
+
// → 'github'
|
|
27
|
+
|
|
28
|
+
// Get display label for a chip strip
|
|
29
|
+
const label = getSourceLabel('hubspot-tickets-anon')
|
|
30
|
+
// → 'Known Issues'
|
|
31
|
+
|
|
32
|
+
// Map a documentType emitted by the LLM to its table ID
|
|
33
|
+
const tableId = defaultTableIdForDocumentType('slack_message')
|
|
34
|
+
// → 'slack-messages'
|
|
35
|
+
|
|
36
|
+
// Graceful handling of unknown types
|
|
37
|
+
const unknown = defaultTableIdForDocumentType('custom_type')
|
|
38
|
+
// → null
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Supported Source Categories
|
|
42
|
+
|
|
43
|
+
| Category | Tables Covered |
|
|
44
|
+
|----------|---------------|
|
|
45
|
+
| **Docs** | `openframe-docs`, `data-room-docs` |
|
|
46
|
+
| **CMS / Programs** | Blog posts, releases, case studies, webinars, events, podcasts, interviews |
|
|
47
|
+
| **Financials** | KPIs, cap table, P&L, balance sheet, cash flow, investor updates |
|
|
48
|
+
| **ClickUp** | Roadmap, delivery, internal tasks |
|
|
49
|
+
| **GitHub** | Commits, PRs, PR reviews (public + internal variants) |
|
|
50
|
+
| **HubSpot** | Tickets (full, anon, self) |
|
|
51
|
+
| **Communications** | Slack messages |
|
|
52
|
+
|
|
53
|
+
> **Design note:** Icon names are intentionally decoupled from React components — the resolver (`icon-registry.ts`) stays client-only while this file remains server-safe, allowing hub-side RAG mappers and chat route handlers to call these utilities directly.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- source-hash: ca8aad98b81a1dbccc525ac143c34ff1 -->
|
|
2
|
+
Shared decoder for the `decision_resolved` leading frame emitted by the `confirm-tool` SSE route. Parses the first NUL-delimited JSON chunk from the stream, drains remaining bytes to avoid half-closed socket hangs, and returns a typed `DecisionResolvedFrame`.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `DecisionResolvedFrame` (interface)
|
|
7
|
+
Typed shape of the leading SSE frame returned by `confirm-tool/route.ts`. Key fields:
|
|
8
|
+
|
|
9
|
+
| Field | Type | Description |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `kind` | `'decision_resolved'` | Frame discriminator |
|
|
12
|
+
| `ok` | `boolean` | Whether the operation succeeded |
|
|
13
|
+
| `action` | `'approved' \| 'rejected'` | Tool confirmation outcome |
|
|
14
|
+
| `willAutoContinue` | `boolean?` | Auto-continue flag post-approval |
|
|
15
|
+
| `result` | `object?` | Approve-path envelope; `mirror_synced: false` means HubSpot succeeded but local mirror lagged — callers should optimistic-render and schedule a delayed refetch |
|
|
16
|
+
| `card` | `object?` | UI card metadata |
|
|
17
|
+
| `receiptText` | `string?` | Human-readable receipt |
|
|
18
|
+
|
|
19
|
+
### `readLeadingDecisionFrame(response)` (async function)
|
|
20
|
+
Reads and decodes the first `decision_resolved` frame from a `confirm-tool` SSE `Response`. Drains the full stream before resolving. Throws if the body is empty, the first frame is not `decision_resolved`, or the leading JSON is malformed.
|
|
21
|
+
|
|
22
|
+
### `normalizeDecisionFrame(obj)` (internal)
|
|
23
|
+
Safely casts a raw parsed object into a `DecisionResolvedFrame`, applying defaults and conditional spreads for optional fields.
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
const response = await fetch('/api/confirm-tool', {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
body: JSON.stringify({ proposalId: 'prop_123' }),
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
const frame = await readLeadingDecisionFrame(response)
|
|
34
|
+
|
|
35
|
+
if (!frame.ok || frame.action === 'rejected') {
|
|
36
|
+
console.warn('Tool rejected:', frame.receiptText)
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (frame.result?.mirror_synced === false) {
|
|
41
|
+
// HubSpot succeeded but mirror lagged — optimistic render + refetch
|
|
42
|
+
scheduleDelayedRefetch(frame.result.ticket_id)
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> **Protocol note:** The tickets-UI path sends `messages: []`, making the stream a single `decision_resolved` frame followed by EOF. The `\x1E` record-separator sentinel (phase-2 text body) is structurally unreachable in this path — its presence before `\0` is treated as a protocol violation and throws.
|