@flamingo-stack/openframe-frontend-core 0.0.212 → 0.0.213-snapshot.20260528174436
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-QKFBZLIR.js → chunk-5OWDOFKK.js} +2 -2
- package/dist/chunk-CZR7ARBA.js +698 -0
- package/dist/chunk-CZR7ARBA.js.map +1 -0
- package/dist/{chunk-UYQOPC57.js → chunk-HICZPTRR.js} +4 -351
- package/dist/chunk-HICZPTRR.js.map +1 -0
- package/dist/{chunk-5BNWGK6D.js → chunk-HWY35EAK.js} +3 -3
- package/dist/{chunk-VTUIMMHO.cjs → chunk-IZL2KEH6.cjs} +26 -26
- package/dist/{chunk-VTUIMMHO.cjs.map → chunk-IZL2KEH6.cjs.map} +1 -1
- package/dist/{chunk-ZFBLC5GV.cjs → chunk-KDNGUYZM.cjs} +17 -17
- package/dist/{chunk-ZFBLC5GV.cjs.map → chunk-KDNGUYZM.cjs.map} +1 -1
- package/dist/chunk-OZ3GH6OQ.cjs +698 -0
- package/dist/chunk-OZ3GH6OQ.cjs.map +1 -0
- package/dist/{chunk-3E5ANY55.js → chunk-UKND27XC.js} +410 -544
- package/dist/chunk-UKND27XC.js.map +1 -0
- package/dist/{chunk-EH3RWVF3.cjs → chunk-WT5JV2GS.cjs} +8 -355
- package/dist/chunk-WT5JV2GS.cjs.map +1 -0
- package/dist/{chunk-WI76ZUBE.cjs → chunk-YZUUFTIK.cjs} +545 -679
- package/dist/chunk-YZUUFTIK.cjs.map +1 -0
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-nats-dialog-subscription.d.ts +0 -9
- package/dist/components/chat/hooks/use-nats-dialog-subscription.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +5 -4
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.js +4 -3
- package/dist/components/contact/index.cjs +6 -5
- package/dist/components/contact/index.cjs.map +1 -1
- package/dist/components/contact/index.js +5 -4
- package/dist/components/features/index.cjs +5 -4
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.js +4 -3
- package/dist/components/features/notifications/index.d.ts +2 -2
- package/dist/components/features/notifications/index.d.ts.map +1 -1
- package/dist/components/features/notifications/notifications-context.d.ts +16 -1
- package/dist/components/features/notifications/notifications-context.d.ts.map +1 -1
- package/dist/components/features/notifications/types.d.ts +4 -0
- package/dist/components/features/notifications/types.d.ts.map +1 -1
- package/dist/components/index.cjs +55 -54
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +7 -6
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/app-header.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +5 -4
- package/dist/components/navigation/index.cjs.map +1 -1
- package/dist/components/navigation/index.js +4 -3
- package/dist/components/tickets/index.cjs +66 -65
- package/dist/components/tickets/index.cjs.map +1 -1
- package/dist/components/tickets/index.js +6 -5
- package/dist/components/tickets/index.js.map +1 -1
- package/dist/components/ui/index.cjs +5 -4
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +4 -3
- package/dist/embed-shims/index.cjs +3 -3
- package/dist/embed-shims/index.cjs.map +1 -1
- package/dist/embed-shims/index.js +4 -4
- package/dist/hooks/index.cjs +3 -2
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.js +2 -1
- package/dist/index.cjs +5 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -3
- package/dist/nats/index.cjs +28 -346
- package/dist/nats/index.cjs.map +1 -1
- package/dist/nats/index.d.ts +3 -0
- package/dist/nats/index.d.ts.map +1 -1
- package/dist/nats/index.js +30 -346
- package/dist/nats/index.js.map +1 -1
- package/dist/nats/nats-provider.d.ts +28 -0
- package/dist/nats/nats-provider.d.ts.map +1 -0
- package/dist/nats/nats.d.ts +1 -0
- package/dist/nats/nats.d.ts.map +1 -1
- package/dist/nats/shared-connection.d.ts +73 -0
- package/dist/nats/shared-connection.d.ts.map +1 -0
- package/dist/nats/use-nats-subscription.d.ts +18 -0
- package/dist/nats/use-nats-subscription.d.ts.map +1 -0
- 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/hooks/use-jetstream-dialog-subscription.ts +60 -207
- package/src/components/chat/hooks/use-nats-dialog-subscription.ts +71 -214
- 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/features/notifications/index.ts +2 -1
- package/src/components/features/notifications/notifications-context.tsx +104 -6
- package/src/components/features/notifications/types.ts +5 -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/navigation/app-header.tsx +7 -9
- 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/nats/index.ts +3 -0
- package/src/nats/nats-provider.tsx +146 -0
- package/src/nats/nats.ts +2 -0
- package/src/nats/shared-connection.ts +285 -0
- package/src/nats/use-nats-subscription.ts +99 -0
- 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-3E5ANY55.js.map +0 -1
- package/dist/chunk-EH3RWVF3.cjs.map +0 -1
- package/dist/chunk-UYQOPC57.js.map +0 -1
- package/dist/chunk-WI76ZUBE.cjs.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-QKFBZLIR.js.map → chunk-5OWDOFKK.js.map} +0 -0
- /package/dist/{chunk-5BNWGK6D.js.map → chunk-HWY35EAK.js.map} +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: 756619c21c965403499e06eb7fef94fa -->
|
|
2
|
+
Pure presentation component for rendering investor update cards in two density modes (`default` and `sm`), with no internal click logic — callers supply the resolved `href`.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `InvestorUpdateCard`
|
|
7
|
+
Main card component. Renders differently based on the `size` prop:
|
|
8
|
+
- **`default`** — delegates to `AdminContentCard` with image, title, summary, badges, and period meta
|
|
9
|
+
- **`sm`** — compact horizontal layout using shared `COMPACT_CARD_*` utility classes
|
|
10
|
+
|
|
11
|
+
### `InvestorUpdateCardSkeleton`
|
|
12
|
+
Loading placeholder matching the visual footprint of each density mode. Uses `animate-pulse` for the default size.
|
|
13
|
+
|
|
14
|
+
### `InvestorUpdateCardProps`
|
|
15
|
+
|
|
16
|
+
| Prop | Type | Description |
|
|
17
|
+
|------|------|-------------|
|
|
18
|
+
| `update` | `InvestorUpdate` | Entity data |
|
|
19
|
+
| `href` | `string` | Resolved detail URL (caller-supplied) |
|
|
20
|
+
| `target` | `'_blank'` | Optional new-tab behavior |
|
|
21
|
+
| `placeholderUrl` | `string \| null` | OG fallback when `featured_image` is absent |
|
|
22
|
+
| `size` | `'default' \| 'sm'` | Card density (defaults to `'default'`) |
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
// Default density — full card
|
|
28
|
+
<InvestorUpdateCard
|
|
29
|
+
update={investorUpdate}
|
|
30
|
+
href={`/investor-updates/${investorUpdate.slug}`}
|
|
31
|
+
placeholderUrl="/images/update-placeholder.png"
|
|
32
|
+
/>
|
|
33
|
+
|
|
34
|
+
// Compact horizontal — e.g. inside a chat dispatch or sidebar list
|
|
35
|
+
<InvestorUpdateCard
|
|
36
|
+
update={investorUpdate}
|
|
37
|
+
href={`/investor-updates/${investorUpdate.slug}`}
|
|
38
|
+
target="_blank"
|
|
39
|
+
rel="noopener noreferrer"
|
|
40
|
+
size="sm"
|
|
41
|
+
/>
|
|
42
|
+
|
|
43
|
+
// Skeleton while data loads
|
|
44
|
+
<InvestorUpdateCardSkeleton size="sm" />
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
> **Design note:** The component intentionally owns zero click/navigation logic. Tab behavior (`target="_blank"`) is resolved externally (e.g. via `computeIsNewTab`) and passed in, keeping the component fully declarative.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<!-- source-hash: ecac941a52e178236e11d54fe42337ec -->
|
|
2
|
+
Pure presentation component that renders an onboarding guide card in three layout variants — `catalog`, `default`, and `sm` — plus matching skeleton states for loading UI.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `OnboardingGuideCard`
|
|
7
|
+
Main card component. Stateless and click-logic-free; the caller wraps with navigation and provides the resolved `href`.
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Description |
|
|
10
|
+
|------|------|-------------|
|
|
11
|
+
| `guide` | `OnboardingGuide` | Guide entity data |
|
|
12
|
+
| `href` | `string` | Detail URL resolved by caller |
|
|
13
|
+
| `target` | `'_blank'` | Optional new-tab behavior |
|
|
14
|
+
| `size` | `'catalog' \| 'default' \| 'sm'` | Layout variant (default: `'default'`) |
|
|
15
|
+
| `placeholderUrl` | `string \| null` | OG fallback image for catalog/sm |
|
|
16
|
+
| `className` | `string` | Additional CSS classes |
|
|
17
|
+
|
|
18
|
+
### `OnboardingGuideCardSkeleton`
|
|
19
|
+
Loading placeholder that mirrors each layout variant's structure with animated pulse states.
|
|
20
|
+
|
|
21
|
+
### `HORIZONTAL_SIZE_TOKENS`
|
|
22
|
+
Internal token map for spacing/typography in the `default` variant.
|
|
23
|
+
|
|
24
|
+
## Variants
|
|
25
|
+
|
|
26
|
+
| Variant | Layout | Use Case |
|
|
27
|
+
|---------|--------|----------|
|
|
28
|
+
| `catalog` | Hero image + author grid | Public catalog page |
|
|
29
|
+
| `default` | Horizontal step-numbered | "More in section" rail |
|
|
30
|
+
| `sm` | Compact horizontal | Chat-inline rendering |
|
|
31
|
+
|
|
32
|
+
## Usage Example
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { OnboardingGuideCard, OnboardingGuideCardSkeleton } from './onboarding-guide-card'
|
|
36
|
+
|
|
37
|
+
// Loading state
|
|
38
|
+
if (isLoading) {
|
|
39
|
+
return <OnboardingGuideCardSkeleton size="catalog" />
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Catalog variant (public listing)
|
|
43
|
+
<OnboardingGuideCard
|
|
44
|
+
guide={guide}
|
|
45
|
+
href={`/guides/${guide.slug}`}
|
|
46
|
+
size="catalog"
|
|
47
|
+
placeholderUrl={ogImageUrl}
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
// Chat inline (sm variant, new tab)
|
|
51
|
+
<OnboardingGuideCard
|
|
52
|
+
guide={guide}
|
|
53
|
+
href={`/guides/${guide.slug}`}
|
|
54
|
+
size="sm"
|
|
55
|
+
target="_blank"
|
|
56
|
+
rel="noopener noreferrer"
|
|
57
|
+
/>
|
|
58
|
+
```
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!-- source-hash: 192500e77aad1a0a4024a9e7d8dfcfec -->
|
|
2
|
+
Provides the lib-side default implementation of `buildProductReleaseCardProps` for chat dispatch, satisfying the three fields required by the compact (`size='sm'`) `<ProductReleaseCard>` variant without requiring hub-side extras.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
- **`ReleaseLike`** — Loosely typed shape for raw API row data, covering image URLs, video URLs, and release date fields
|
|
8
|
+
- **`DerivedSmProps`** — Output shape containing only the three sm-relevant props: `coverImage`, `hasVideoCover`, and `formattedDate`
|
|
9
|
+
|
|
10
|
+
### Functions
|
|
11
|
+
- **`pickCover(item)`** — Resolves the best cover image URL by mirroring the hub's `resolveReleaseCover` precedence: video thumbnails take priority when a video is set, falling back to `featured_image` then `og_image_url`
|
|
12
|
+
- **`defaultBuildProductReleaseCardProps(item)`** — Main export; builds the `DerivedSmProps` bundle from an unknown API row, using `formatReleaseDate` for TZ-safe date formatting
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { defaultBuildProductReleaseCardProps } from './product-release-card-defaults'
|
|
18
|
+
|
|
19
|
+
// Used as fallback when opts.extras.buildProductReleaseCardProps is not supplied
|
|
20
|
+
const props = defaultBuildProductReleaseCardProps(apiRow)
|
|
21
|
+
// → { coverImage: 'https://...', hasVideoCover: true, formattedDate: 'Jan 15, 2025' }
|
|
22
|
+
|
|
23
|
+
// Hub-side embedders override with their richer builder via extras:
|
|
24
|
+
const cardProps = (opts.extras?.buildProductReleaseCardProps ?? defaultBuildProductReleaseCardProps)(row)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Notes
|
|
28
|
+
|
|
29
|
+
- Uses `formatReleaseDate` (not `new Date().toLocaleDateString`) to avoid UTC off-by-one day shifts on date-only `YYYY-MM-DD` strings
|
|
30
|
+
- Produces an empty string for `formattedDate` when `release_date` is absent, rather than throwing
|
|
31
|
+
- lg-only fields (`changelogCounts`, badge color, view count) are intentionally omitted — hub embedders supply those via `extras`
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!-- source-hash: d44532c82b6ead050537a1a73696aeb3 -->
|
|
2
|
+
Re-export shim that surfaces the canonical `ProductReleaseCard` component and its related types/skeleton under the `entity-cards/` namespace for unified chat barrel imports.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Source | Description |
|
|
7
|
+
|--------|--------|-------------|
|
|
8
|
+
| `ProductReleaseCard` | `shared/product-release/product-release-card` | Main card component (lg + sm variants) |
|
|
9
|
+
| `ProductReleaseCardProps` | `shared/product-release/product-release-card` | Component props type |
|
|
10
|
+
| `ProductReleaseCardSize` | `shared/product-release/product-release-card` | Size variant union type |
|
|
11
|
+
| `ProductReleaseCardAnchorProps` | `shared/product-release/product-release-card` | Anchor/link props type |
|
|
12
|
+
| `ProductReleaseCardSkeleton` | `shared/product-release/product-release-card-skeleton` | Loading skeleton component |
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// Via the chat barrel (preferred)
|
|
18
|
+
import {
|
|
19
|
+
ProductReleaseCard,
|
|
20
|
+
ProductReleaseCardSkeleton,
|
|
21
|
+
type ProductReleaseCardProps,
|
|
22
|
+
type ProductReleaseCardSize,
|
|
23
|
+
} from '@/components/chat'
|
|
24
|
+
|
|
25
|
+
// Direct import (bypasses indirection)
|
|
26
|
+
import { ProductReleaseCard } from '@/components/shared/product-release/product-release-card'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
> **Source of Truth:** All component logic and variants live in `src/components/shared/product-release/`. This file is purely a re-export — do not add logic here.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- source-hash: b76130e377c5c19a3a90e82e946098da -->
|
|
2
|
+
Provides fallback `ProgramConfig` defaults for the chat dispatch layer, ensuring `<ProgramCard size='sm'>` renders correctly without requiring embedders to supply hub-side catalog configuration.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `makeDefault<T>`
|
|
7
|
+
Generic factory function that constructs a minimal `ProgramConfig<T>` for a given program type. Populates only the fields the compact chat card actually reads (`type`, `labels.singular`) plus safe placeholder values for catalog-page fields (`dateField`, `table`, `apiEndpoint`, `icon`, `detailRoute`, `externalLinkLabel`) so TypeScript type-checking passes without binding embedders to hub-internal imports.
|
|
8
|
+
|
|
9
|
+
### `DEFAULT_PROGRAM_CONFIGS`
|
|
10
|
+
Exported `const` map of ready-to-use defaults for all three program types:
|
|
11
|
+
|
|
12
|
+
| Key | `type` | `labels.singular` | `labels.plural` |
|
|
13
|
+
|--------|---------|-------------------|-----------------|
|
|
14
|
+
| `podcast` | `"podcast"` | `"Episode"` | `"Episodes"` |
|
|
15
|
+
| `webinar` | `"webinar"` | `"Webinar"` | `"Webinars"` |
|
|
16
|
+
| `event` | `"event"` | `"Event"` | `"Events"` |
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
The chat dispatch reads `extras.programConfigs.X ?? DEFAULT_PROGRAM_CONFIGS.X`, so overriding is opt-in:
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { DEFAULT_PROGRAM_CONFIGS } from './program-card-defaults'
|
|
24
|
+
|
|
25
|
+
// Use defaults — no hub-side config required
|
|
26
|
+
const config = DEFAULT_PROGRAM_CONFIGS.podcast
|
|
27
|
+
// config.labels.singular → "Episode"
|
|
28
|
+
// config.type → "podcast"
|
|
29
|
+
|
|
30
|
+
// Override only what you need; fallback handles the rest
|
|
31
|
+
const customConfigs = {
|
|
32
|
+
podcast: {
|
|
33
|
+
...DEFAULT_PROGRAM_CONFIGS.podcast,
|
|
34
|
+
icon: MyPodcastIcon,
|
|
35
|
+
externalLinkLabel: 'Listen Now',
|
|
36
|
+
detailRoute: '/podcasts',
|
|
37
|
+
},
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
> **Why this exists:** Previously, missing `extras.programConfigs` caused the dispatch to return `null`, falling back to a bare text chip. These defaults decouple non-hub embedders (e.g. the validation app) from `currentPlatform()` and `buildContentURL` — hub-internal dependencies they cannot safely import.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<!-- source-hash: 882a2c614fa33ecfd7b3ef948ea40a94 -->
|
|
2
|
+
Brief overview of the `program-card.tsx` component — a pure presentational card for displaying podcasts, webinars, and events with two density modes.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Exports
|
|
7
|
+
|
|
8
|
+
| Export | Type | Description |
|
|
9
|
+
|--------|------|-------------|
|
|
10
|
+
| `ProgramCardSkeleton` | Component | Loading placeholder supporting `default` and `sm` sizes |
|
|
11
|
+
| `ProgramCard<T>` | Generic Component | Main card component, typed against `BaseProgramItem` |
|
|
12
|
+
| `ProgramCardProps<T>` | Interface | Props contract for `ProgramCard` |
|
|
13
|
+
|
|
14
|
+
### Internal Helpers
|
|
15
|
+
|
|
16
|
+
- **`getHosts()`** — Normalizes host data from either a typed array or a JSON string
|
|
17
|
+
- **`MediaGallery`** — Scrollable thumbnail strip with `ImageGalleryModal` lightbox integration
|
|
18
|
+
|
|
19
|
+
### Card Sizes (`CardSize`)
|
|
20
|
+
|
|
21
|
+
| Size | Layout | Use Case |
|
|
22
|
+
|------|--------|----------|
|
|
23
|
+
| `default` | Vertical, full detail | Standalone page/feed cards |
|
|
24
|
+
| `sm` | Compact horizontal | Chat-inline embeds |
|
|
25
|
+
|
|
26
|
+
### Type-Aware Metadata
|
|
27
|
+
|
|
28
|
+
The card adapts displayed metadata based on `config.type`:
|
|
29
|
+
|
|
30
|
+
- **`podcast`** → Duration via `formatDurationCompact`
|
|
31
|
+
- **`event`** → Location name
|
|
32
|
+
- **`webinar`** → Start time + duration via `formatTimeWithTimezone` / `formatDurationFromRange`
|
|
33
|
+
|
|
34
|
+
## Usage Example
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { ProgramCard } from './program-card'
|
|
38
|
+
|
|
39
|
+
// Default (vertical) layout
|
|
40
|
+
<ProgramCard
|
|
41
|
+
config={{ type: 'podcast', labels: { singular: 'Episode' } }}
|
|
42
|
+
item={episode}
|
|
43
|
+
href="/podcasts/ep-42"
|
|
44
|
+
size="default"
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
// Compact inline variant (e.g., inside chat)
|
|
48
|
+
<ProgramCard
|
|
49
|
+
config={{ type: 'webinar', labels: { singular: 'Webinar' } }}
|
|
50
|
+
item={webinarItem}
|
|
51
|
+
href="https://external.com/webinar"
|
|
52
|
+
target="_blank"
|
|
53
|
+
rel="noopener noreferrer"
|
|
54
|
+
size="sm"
|
|
55
|
+
placeholderUrl="https://cdn.example.com/og-fallback.png"
|
|
56
|
+
/>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
> **Note:** `ProgramCard` is purely presentational — it owns no navigation logic. Callers are responsible for computing and passing `href` and `target`.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- source-hash: 853672c07dc2c32f2542a936a393a3ad -->
|
|
2
|
+
Pure presentation component for roadmap items with two density modes — a rich default card (vote buttons, Figma/screenshot controls) and a compact horizontal variant for inline chat display.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|--------|-------------|
|
|
8
|
+
| `RoadmapCard` | Main card component, renders either `default` or `sm` layout |
|
|
9
|
+
| `RoadmapCardSkeleton` | Loading placeholder matching both card densities |
|
|
10
|
+
| `VoteType` | Union type `'up' \| 'down' \| null` for vote state |
|
|
11
|
+
| `RoadmapCardProps` | Full props interface for the card |
|
|
12
|
+
|
|
13
|
+
## Usage Example
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
// Default (full roadmap page card with vote controls)
|
|
17
|
+
<RoadmapCard
|
|
18
|
+
item={roadmapItem}
|
|
19
|
+
userVote={currentVote}
|
|
20
|
+
onVote={(type) => handleVote(item.id, type)}
|
|
21
|
+
isVoting={isPending}
|
|
22
|
+
/>
|
|
23
|
+
|
|
24
|
+
// Compact inline variant (chat/sidebar)
|
|
25
|
+
<a href={`/roadmap/${item.id}`}>
|
|
26
|
+
<RoadmapCard
|
|
27
|
+
item={roadmapItem}
|
|
28
|
+
size="sm"
|
|
29
|
+
href={`/roadmap/${item.id}`}
|
|
30
|
+
cardType="delivery_item"
|
|
31
|
+
target="_blank"
|
|
32
|
+
rel="noopener noreferrer"
|
|
33
|
+
/>
|
|
34
|
+
</a>
|
|
35
|
+
|
|
36
|
+
// Skeleton loader
|
|
37
|
+
<RoadmapCardSkeleton size="sm" />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Key Behaviors
|
|
41
|
+
|
|
42
|
+
- **Icon resolution**: prefers `item.icon` (proxied), falls back to `TaskTypeIcon` for internal tasks, then initials
|
|
43
|
+
- **`sm` branch**: wraps content in `<a>` when `href` is valid; renders a static `<span>` when no href is available
|
|
44
|
+
- **Vote UI** (`default` only): rendered only when `onVote` is provided; buttons disabled during `isVoting`
|
|
45
|
+
- **Screenshot gallery**: controlled via local `showScreenshots` state; Figma link and screenshot count displayed as metadata badges in the compact branch
|
|
46
|
+
- **Responsive status badge**: shown inline on `md+` screens, moves below the header row on mobile
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!-- source-hash: 69f5a0ba80b7e510b67573e50f546e85 -->
|
|
2
|
+
A pure-presentational thumbs-up / thumbs-down vote button used within `RoadmapCard`'s default variant. Renders an icon with an optional vote count; all interaction logic is delegated to the parent via `onClick`.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `RoadmapVoteButtonProps` | `interface` | Prop contract for the button |
|
|
9
|
+
| `RoadmapVoteButton` | `function` | Styled outline button with thumb icon and count |
|
|
10
|
+
|
|
11
|
+
### Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Default | Description |
|
|
14
|
+
|------|------|---------|-------------|
|
|
15
|
+
| `voteType` | `'up' \| 'down'` | — | Selects `ThumbsUpIcon` or `ThumbsDownIcon` |
|
|
16
|
+
| `count` | `number` | — | Vote tally displayed next to the icon |
|
|
17
|
+
| `isActive` | `boolean` | — | Applies active background when the user has voted |
|
|
18
|
+
| `onClick` | `() => void` | — | Click handler supplied by parent (e.g. `useRoadmapVoting`) |
|
|
19
|
+
| `disabled` | `boolean` | `false` | Disables interaction and applies reduced opacity |
|
|
20
|
+
| `showCount` | `boolean` | `true` | Toggles count label visibility |
|
|
21
|
+
| `color` | `string` | — | Forwarded to the icon as a fill/stroke color |
|
|
22
|
+
| `className` | `string` | — | Additional CSS classes merged via `cn()` |
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { RoadmapVoteButton } from './roadmap-vote-button'
|
|
28
|
+
|
|
29
|
+
function RoadmapCard() {
|
|
30
|
+
const { upvotes, hasVotedUp, handleVote } = useRoadmapVoting(itemId)
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div className="flex gap-2">
|
|
34
|
+
<RoadmapVoteButton
|
|
35
|
+
voteType="up"
|
|
36
|
+
count={upvotes}
|
|
37
|
+
isActive={hasVotedUp}
|
|
38
|
+
onClick={() => handleVote('up')}
|
|
39
|
+
color="#FFC008"
|
|
40
|
+
/>
|
|
41
|
+
<RoadmapVoteButton
|
|
42
|
+
voteType="down"
|
|
43
|
+
count={0}
|
|
44
|
+
isActive={false}
|
|
45
|
+
onClick={() => handleVote('down')}
|
|
46
|
+
showCount={false}
|
|
47
|
+
disabled
|
|
48
|
+
/>
|
|
49
|
+
</div>
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: 82997feaf6df9370cc3057cd02b01be6 -->
|
|
2
|
+
Renders a visual card component for Slack message markers, supporting both `compact` and `row` display variants with optional anchor navigation and a loading skeleton state.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `SlackMessageCard`
|
|
7
|
+
Main card component that displays a Slack message entry with icon, title, preview text, channel name, and date. Rendering behavior varies by nav context:
|
|
8
|
+
- Wraps in a caller-provided `<a>` via `anchorProps` if supplied
|
|
9
|
+
- Falls back to a direct external `<a href>` if `item.url` is valid
|
|
10
|
+
- Renders a static `<span>` when no link is available
|
|
11
|
+
|
|
12
|
+
### `SlackMessageCardSkeleton`
|
|
13
|
+
Animated placeholder matching the card layout for loading states. Accepts `variant` and `className` props.
|
|
14
|
+
|
|
15
|
+
### `parseChannelFromUrl` *(internal)*
|
|
16
|
+
Extracts the Slack channel ID from a Slack archive URL (`*.slack.com/archives/<channelId>/...`) as a fallback when `item.channel` is not set.
|
|
17
|
+
|
|
18
|
+
### Interfaces
|
|
19
|
+
|
|
20
|
+
| Interface | Purpose |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `SlackMessageCardProps` | `item`, `variant`, `className`, `anchorProps` |
|
|
23
|
+
| `SlackMessageCardAnchorProps` | Typed `<a>` prop bundle composed by the caller |
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { SlackMessageCard, SlackMessageCardSkeleton } from './slack-message-card'
|
|
29
|
+
|
|
30
|
+
// Compact card with caller-controlled navigation
|
|
31
|
+
<SlackMessageCard
|
|
32
|
+
item={slackMessageItem}
|
|
33
|
+
variant="compact"
|
|
34
|
+
anchorProps={{
|
|
35
|
+
href: '/messages/123',
|
|
36
|
+
onClick: (e) => handleNavigate(e),
|
|
37
|
+
}}
|
|
38
|
+
/>
|
|
39
|
+
|
|
40
|
+
// Inline row variant (e.g. inside a list or table)
|
|
41
|
+
<SlackMessageCard
|
|
42
|
+
item={slackMessageItem}
|
|
43
|
+
variant="row"
|
|
44
|
+
/>
|
|
45
|
+
|
|
46
|
+
// Skeleton while loading
|
|
47
|
+
<SlackMessageCardSkeleton variant="compact" />
|
|
48
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: 3003c61a214e3bd7c976af0a59119cb4 -->
|
|
2
|
+
Renders a Lucide icon corresponding to a ClickUp task type, resolved from `custom_item_id` via the `CUSTOM_ITEM_ID` map.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
**`iconFor(customItemId)`** — Internal function that maps a `custom_item_id` integer to a Lucide icon component. Falls back to `CheckSquare` for unknown or `null`/`undefined` values.
|
|
7
|
+
|
|
8
|
+
**`TaskTypeIcon`** — Client component that renders the resolved icon with configurable sizing via `className`.
|
|
9
|
+
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
|------|------|---------|-------------|
|
|
12
|
+
| `customItemId` | `number \| null \| undefined` | — | ClickUp `custom_item_id` to resolve |
|
|
13
|
+
| `className` | `string` | `'h-5 w-5'` | Tailwind classes applied to the icon |
|
|
14
|
+
|
|
15
|
+
**Type → Icon mapping:**
|
|
16
|
+
|
|
17
|
+
| Task Type | Icon |
|
|
18
|
+
|-----------|------|
|
|
19
|
+
| `BUG` | `Bug` |
|
|
20
|
+
| `REQUEST` | `Inbox` |
|
|
21
|
+
| `FEATURE` | `Sparkles` |
|
|
22
|
+
| `STORY` | `BookOpen` |
|
|
23
|
+
| `EPIC` | `Trophy` |
|
|
24
|
+
| `COMPONENT` | `Component` |
|
|
25
|
+
| `INITIATIVE` | `Flag` |
|
|
26
|
+
| `MILESTONE` | `Goal` |
|
|
27
|
+
| `SUBTASK` | `ListTodo` |
|
|
28
|
+
| `FORM` | `FileText` |
|
|
29
|
+
| `RECURRING` | `Repeat` |
|
|
30
|
+
| `PLAN` / `STRATEGY` | `Compass` |
|
|
31
|
+
| `TASK` / default | `CheckSquare` |
|
|
32
|
+
|
|
33
|
+
## Usage Example
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { TaskTypeIcon } from './task-type-icon'
|
|
37
|
+
import { CUSTOM_ITEM_ID } from '../utils/clickup-task-type-utils'
|
|
38
|
+
|
|
39
|
+
// Render a bug icon
|
|
40
|
+
<TaskTypeIcon customItemId={CUSTOM_ITEM_ID.BUG} />
|
|
41
|
+
|
|
42
|
+
// Custom size via className
|
|
43
|
+
<TaskTypeIcon customItemId={CUSTOM_ITEM_ID.EPIC} className="h-4 w-4 text-yellow-400" />
|
|
44
|
+
|
|
45
|
+
// Safely handles null/undefined — renders CheckSquare fallback
|
|
46
|
+
<TaskTypeIcon customItemId={task.custom_item_id} />
|
|
47
|
+
```
|
|
@@ -1,31 +1,46 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: d1cebe46eff04115f214c16b75a69467 -->
|
|
2
|
+
Barrel export file for the chat hooks module, re-exporting all public hooks from their individual files into a single `'use client'` entry point.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
| Export Group | Hooks |
|
|
7
|
+
|---|---|
|
|
8
|
+
| **Realtime / Streaming** | `useChunkCatchup`, `useRealtimeChunkProcessor`, `useJetstreamDialogSubscription`, `useNatsDialogSubscription` |
|
|
9
|
+
| **UI Utilities** | `useCollapsible`, `useCloseOnNavigation`, `useChatCardItem` |
|
|
10
|
+
| **Chat Core** | `useChat`, `useSSE`, `useChatIdentity`, `useChatAttachments`, `useChatAttachmentImageGallery`, `useSlashCommands` |
|
|
11
|
+
| **Transport Adapters** | `useSSEChatAdapter`, `useNatsChatAdapter` |
|
|
12
|
+
| **Unified Surface** | `useUnifiedChat` (primary), `useEmbeddedChat` (legacy SSE alias) |
|
|
13
|
+
| **Image Proxy** | `useProxiedImageUrl` |
|
|
10
14
|
|
|
11
15
|
## Usage Example
|
|
12
16
|
|
|
13
17
|
```typescript
|
|
14
|
-
//
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
// Typical consumer — import directly from the module index
|
|
19
|
+
import {
|
|
20
|
+
useUnifiedChat,
|
|
21
|
+
useChatAttachments,
|
|
22
|
+
useSlashCommands,
|
|
23
|
+
} from '@flamingo/chat-hooks'
|
|
24
|
+
|
|
25
|
+
function ChatPanel({ modes, activeMode }) {
|
|
26
|
+
const chat = useUnifiedChat({ modes, activeMode })
|
|
27
|
+
const attachments = useChatAttachments()
|
|
28
|
+
const slashCommands = useSlashCommands()
|
|
29
|
+
|
|
30
|
+
// ...
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Advanced: direct transport access
|
|
34
|
+
import { useNatsChatAdapter } from '@flamingo/chat-hooks'
|
|
35
|
+
|
|
36
|
+
function CustomTransportPanel() {
|
|
37
|
+
const nats = useNatsChatAdapter({ /* config */ })
|
|
38
|
+
// ...
|
|
28
39
|
}
|
|
29
40
|
```
|
|
30
41
|
|
|
31
|
-
|
|
42
|
+
## Notes
|
|
43
|
+
|
|
44
|
+
- Marked `'use client'` — safe for React Server Component trees; hooks run only on the client.
|
|
45
|
+
- `useUnifiedChat` is the recommended entry point for new consumers; `useEmbeddedChat` is the legacy SSE alias kept for backward compatibility.
|
|
46
|
+
- `useProxiedImageUrl` reads proxy config from `ChatRuntime.endpoints`, keeping image-proxy resolution consistent between hub and embedder environments.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- source-hash: 129697fa517b38437fd6fa76813ba652 -->
|
|
2
|
+
Provides a React hook that enables click-to-expand image gallery functionality for chat attachment images within a chat thread panel.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `useChatAttachmentImageGallery()`
|
|
7
|
+
Primary export. Returns `{ panelRef, modal }`:
|
|
8
|
+
- **`panelRef`** — `RefObject<HTMLDivElement>` to attach to the chat content wrapper; installs a delegated `click` listener
|
|
9
|
+
- **`modal`** — JSX element (`ImageGalleryModal`) rendered when open, or `null` when closed (enabling React garbage collection of blob URLs)
|
|
10
|
+
|
|
11
|
+
### `GalleryState` (interface)
|
|
12
|
+
Internal state shape: `{ isOpen: boolean, images: string[], initialIndex: number }`
|
|
13
|
+
|
|
14
|
+
### `absolutize(prefix: string)` (internal)
|
|
15
|
+
Normalizes relative URL prefixes (e.g. `/api/storage/view/`) to absolute URLs for reliable comparison against browser-resolved `<img>.src` values.
|
|
16
|
+
|
|
17
|
+
## Usage Example
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// In a chat panel host component
|
|
21
|
+
export function ChatPanel() {
|
|
22
|
+
const { panelRef, modal } = useChatAttachmentImageGallery()
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<>
|
|
26
|
+
{/* panelRef wraps the scrollable message list */}
|
|
27
|
+
<div ref={panelRef} className="chat-thread-wrapper">
|
|
28
|
+
{/* ...message bubbles rendered here... */}
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
{/* modal renders outside overflow-hidden bubbles */}
|
|
32
|
+
{modal}
|
|
33
|
+
</>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Click Delegation Flow
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
graph TD
|
|
42
|
+
Click["Click Event"] --> ImgCheck{"img src starts\nwith viewUrlPrefix?"}
|
|
43
|
+
ImgCheck -->|No| Ignore["Ignore click"]
|
|
44
|
+
ImgCheck -->|Yes| BubbleWalk["Walk up to\n[data-message-role]"]
|
|
45
|
+
BubbleWalk --> NoBubble{"Bubble found?"}
|
|
46
|
+
NoBubble -->|No| SingleImg["Open modal with\nsingle image"]
|
|
47
|
+
NoBubble -->|Yes| Collect["Collect all matching\nimgs in bubble (DOM order)"]
|
|
48
|
+
Collect --> OpenModal["Open ImageGalleryModal\nwith computed initialIndex"]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
> **Note:** The hook filters `<img>` elements by `attachmentViewUrlPrefix` from the chat runtime context, ensuring avatar and UI images are never intercepted.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: aa7997b65102b2c65fd293fc9f3faa3d -->
|
|
2
|
+
Manages the upload state machine for chat file attachments, handling multi-file staging, magic-byte MIME validation, progress tracking, and per-file abort control before sending messages.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `StagedAttachment`
|
|
7
|
+
Internal state shape for each file in the upload pipeline. Tracks `id`, `file`, `status` (`sniffing | uploading | ready | error`), `progress` (0–100), `storagePath`, `viewToken`, and `errorMessage`.
|
|
8
|
+
|
|
9
|
+
### `uploadWithProgress(url, file, token, onProgress?, signal?)`
|
|
10
|
+
Inline XHR helper that PUTs file bytes to a Supabase signed URL. Maps raw network progress to the 10–95 range, supports `AbortSignal` cancellation, and handles timeout/error/abort events with proper cleanup.
|
|
11
|
+
|
|
12
|
+
### `useChatAttachments()`
|
|
13
|
+
Primary hook exposing `UseChatAttachmentsApi`:
|
|
14
|
+
|
|
15
|
+
| Member | Description |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `attachments` | Full staged array with state-machine metadata |
|
|
18
|
+
| `readyAttachments` | Wire-format `ChatAttachment[]` for `sendMessage` |
|
|
19
|
+
| `hasInflightUploads` | `true` while any upload is in-progress (disables Send) |
|
|
20
|
+
| `addFiles(files)` | Stages and begins uploading files; deduplicates by `(name, size, lastModified)` |
|
|
21
|
+
| `removeAttachment(id)` | Aborts in-flight XHR and removes the file |
|
|
22
|
+
| `clear()` | Aborts all controllers and resets state |
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
const {
|
|
28
|
+
attachments,
|
|
29
|
+
readyAttachments,
|
|
30
|
+
hasInflightUploads,
|
|
31
|
+
addFiles,
|
|
32
|
+
removeAttachment,
|
|
33
|
+
clear,
|
|
34
|
+
} = useChatAttachments()
|
|
35
|
+
|
|
36
|
+
// Stage files from an input element
|
|
37
|
+
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
38
|
+
if (e.target.files) addFiles(e.target.files)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Pass ready attachments when sending
|
|
42
|
+
await sendMessage(text, { pendingAttachments: readyAttachments })
|
|
43
|
+
|
|
44
|
+
// Abort a specific upload mid-flight
|
|
45
|
+
removeAttachment(attachmentId)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
> **Security note:** Files are validated via magic-byte sniffing (`file-type`) before upload, rejecting extension spoofs (e.g. `evil.exe` renamed `screenshot.png`). The sniffed MIME — not `file.type` — is sent to the server for URL minting.
|