@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
|
@@ -1,43 +1,44 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A React component that renders an interactive card
|
|
1
|
+
<!-- source-hash: a586fc7eef91717f42e06b54e7cb5290 -->
|
|
2
|
+
A React client component that renders a single onboarding step as an interactive card, supporting completed, skipped, pending, and loading states with appropriate actions.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- **handleAction**: Async function that manages processing state during step actions
|
|
9
|
-
- **handleSkip**: Function for handling step skip actions with event propagation prevention
|
|
6
|
+
### `OnboardingStepCard`
|
|
7
|
+
The primary exported component. Renders a responsive card with a title/description column and a dynamic action column based on step state.
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
**Props (`OnboardingStepCardProps`):**
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
| Prop | Type | Description |
|
|
12
|
+
|------|------|-------------|
|
|
13
|
+
| `step` | `object` | Step metadata including title, description, icons, action text, and callbacks |
|
|
14
|
+
| `isCompleted` | `boolean` | Shows a success badge and re-run action button |
|
|
15
|
+
| `isSkipped` | `boolean` | Shows a neutral "SKIPPED" badge |
|
|
16
|
+
| `isCheckingCompletion` | `boolean` | Renders animated skeleton placeholders |
|
|
17
|
+
| `onAction` | `() => void \| Promise<void>` | Primary action handler (async-safe) |
|
|
18
|
+
| `onSkip` | `() => void` | Skip step handler |
|
|
19
|
+
| `className` | `string?` | Optional additional CSS classes |
|
|
20
|
+
|
|
21
|
+
**Internal state:**
|
|
22
|
+
- `isProcessing` — Tracks in-flight async action calls to disable the button and prevent double-submission.
|
|
16
23
|
|
|
17
|
-
|
|
18
|
-
id: 'connect-device',
|
|
19
|
-
title: 'Connect Your Device',
|
|
20
|
-
description: 'Link your OpenFrame device to get started',
|
|
21
|
-
actionIcon: (color?: string) => <CheckIcon color={color} />,
|
|
22
|
-
actionText: 'Connect Now',
|
|
23
|
-
completedText: 'Reconnect',
|
|
24
|
-
onAction: async () => {
|
|
25
|
-
// Device connection logic
|
|
26
|
-
},
|
|
27
|
-
onSkip: () => {
|
|
28
|
-
// Skip step logic
|
|
29
|
-
}
|
|
30
|
-
}
|
|
24
|
+
## Usage Example
|
|
31
25
|
|
|
26
|
+
```typescript
|
|
32
27
|
<OnboardingStepCard
|
|
33
|
-
step={
|
|
28
|
+
step={{
|
|
29
|
+
id: 'connect-psa',
|
|
30
|
+
title: 'Connect your PSA',
|
|
31
|
+
description: 'Link your ticketing system to get started',
|
|
32
|
+
actionIcon: (color) => <PlugIcon color={color} />,
|
|
33
|
+
actionText: 'Connect Now',
|
|
34
|
+
completedText: 'Reconnect',
|
|
35
|
+
onAction: () => router.push('/integrations/psa'),
|
|
36
|
+
onSkip: () => console.log('skipped'),
|
|
37
|
+
}}
|
|
34
38
|
isCompleted={false}
|
|
35
39
|
isSkipped={false}
|
|
36
40
|
isCheckingCompletion={false}
|
|
37
|
-
onAction={
|
|
38
|
-
onSkip={
|
|
39
|
-
className="max-w-md"
|
|
41
|
+
onAction={() => router.push('/integrations/psa')}
|
|
42
|
+
onSkip={() => markStepSkipped('connect-psa')}
|
|
40
43
|
/>
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
The component automatically handles different states: incomplete (showing Skip/Action buttons), completed (showing badge and reconnect option), skipped (showing skipped badge), and loading (showing skeleton UI).
|
|
44
|
+
```
|
|
@@ -1,51 +1,47 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 89208f0119005a51561aa80d8594f307 -->
|
|
2
|
+
Renders a multi-step onboarding walkthrough UI that syncs external completion status with local storage state, prevents race conditions via refs, and displays dismissible step cards.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
## Key Features
|
|
12
|
-
|
|
13
|
-
- **Auto-completion Sync**: Automatically marks steps as complete based on external `completionStatus` prop
|
|
14
|
-
- **Race Condition Prevention**: Uses refs to prevent duplicate actions and state conflicts
|
|
15
|
-
- **Responsive Design**: Mobile-first layout with stacked elements on small screens
|
|
16
|
-
- **Persistent State**: Stores progress in localStorage via configurable `storageKey`
|
|
17
|
-
- **Action Handling**: Executes step actions and validates completion asynchronously
|
|
6
|
+
- **`OnboardingWalkthrough`** — Main exported component that orchestrates step rendering, completion tracking, and dismissal
|
|
7
|
+
- **`OnboardingWalkthroughProps`** — Interface defining the component's props
|
|
8
|
+
- **`useOnboardingState`** — Hook managing persistent onboarding state (completed/skipped/dismissed) via `localStorage`
|
|
9
|
+
- **`OnboardingStepCard`** — Child component rendering individual step cards
|
|
10
|
+
- **Race condition guards** — Three refs (`hasAutoMarkedRef`, `autoMarkingInProgressRef`, `actionInProgressRef`) prevent duplicate or concurrent state mutations
|
|
18
11
|
|
|
19
12
|
## Usage Example
|
|
20
13
|
|
|
21
14
|
```typescript
|
|
22
15
|
import { OnboardingWalkthrough } from './onboarding-walkthrough'
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
16
|
+
import type { OnboardingStepConfig } from '../../../hooks/ui/use-onboarding-state'
|
|
17
|
+
|
|
18
|
+
const steps: OnboardingStepConfig[] = [
|
|
19
|
+
{
|
|
20
|
+
id: 'knowledge-base',
|
|
21
|
+
title: 'Set up Knowledge Base',
|
|
22
|
+
description: 'Upload your documentation.',
|
|
23
|
+
onAction: async () => { /* open modal or navigate */ },
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'connect-psa',
|
|
27
|
+
title: 'Connect your PSA',
|
|
28
|
+
description: 'Integrate your ticketing system.',
|
|
29
|
+
onAction: async () => { /* trigger integration flow */ },
|
|
30
|
+
checkComplete: async () => await checkPsaConnected(),
|
|
31
|
+
},
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
<OnboardingWalkthrough
|
|
35
|
+
steps={steps}
|
|
36
|
+
storageKey="my-app-onboarding"
|
|
37
|
+
completionStatus={{ 'connect-psa': true }}
|
|
38
|
+
isLoadingCompletion={false}
|
|
39
|
+
onDismiss={() => console.log('dismissed')}
|
|
40
|
+
/>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Behavior Notes
|
|
44
|
+
|
|
45
|
+
- **Auto-sync**: When `completionStatus` prop changes, steps flagged `true` are automatically marked complete via `markMultipleComplete`, guarded by a JSON-stringified status key to avoid re-processing identical data.
|
|
46
|
+
- **Action deduplication**: `actionInProgressRef` tracks in-flight step actions per `step.id`, silently skipping duplicate triggers.
|
|
47
|
+
- **All hooks called unconditionally** — the `state.dismissed` early return happens *after* all hooks and refs are initialized, satisfying React's Rules of Hooks.
|
|
@@ -1,40 +1,38 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: b0b73e639c7dda545193a2a31fafd1ca -->
|
|
2
|
+
Barrel export file for the **product release** UI component family, re-exporting all public components, skeletons, and related TypeScript types from the `product-release` feature directory.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ProductReleaseCard` | Component | Card UI for displaying a product release |
|
|
9
|
+
| `ProductReleaseCardSkeleton` | Component | Loading skeleton for `ProductReleaseCard` |
|
|
10
|
+
| `ReleaseDetailPage` | Component | Full release detail page layout |
|
|
11
|
+
| `ReleaseDetailSkeleton` | Component | Loading skeleton for `ReleaseDetailPage` |
|
|
12
|
+
| `DeliveryResponse` | Type | Canonical delivery response type (sourced from `types/delivery`) |
|
|
13
|
+
| `ProductReleaseCardProps` | Type | Props for `ProductReleaseCard` |
|
|
14
|
+
| `ReleaseDetailPageProps` | Type | Props for `ReleaseDetailPage` |
|
|
15
|
+
| `VideoDisplaySectionProps` | Type | Props for the video display section slot |
|
|
16
|
+
| `MarkdownRendererProps` | Type | Props for the markdown renderer slot |
|
|
17
|
+
| `RoadmapItem` | Type | Individual roadmap item type |
|
|
18
|
+
|
|
19
|
+
> **Note:** `RoadmapSectionProps` and `DeliverySectionProps` are intentionally **not** re-exported here to avoid TS2308 ambiguous re-export conflicts with the concrete `<RoadmapGrid>` / `<DeliverySection>` components. Import them directly from the `release-detail-page` module if needed.
|
|
11
20
|
|
|
12
21
|
## Usage Example
|
|
13
22
|
|
|
14
23
|
```typescript
|
|
15
|
-
import {
|
|
16
|
-
ProductReleaseCard,
|
|
17
|
-
ReleaseDetailPage,
|
|
24
|
+
import {
|
|
25
|
+
ProductReleaseCard,
|
|
18
26
|
ProductReleaseCardSkeleton,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
title="OpenFrame v2.1"
|
|
25
|
-
description="Enhanced AI automation features"
|
|
26
|
-
releaseDate="2024-03-15"
|
|
27
|
-
/>
|
|
28
|
-
|
|
29
|
-
// Show loading state
|
|
30
|
-
<ProductReleaseCardSkeleton />
|
|
27
|
+
ReleaseDetailPage,
|
|
28
|
+
ReleaseDetailSkeleton,
|
|
29
|
+
type ReleaseDetailPageProps,
|
|
30
|
+
type DeliveryResponse,
|
|
31
|
+
} from '@flamingo-stack/openframe-frontend-core/components/shared/product-release'
|
|
31
32
|
|
|
32
|
-
// Render
|
|
33
|
-
<
|
|
34
|
-
releaseId="v2.1"
|
|
35
|
-
markdownContent={content}
|
|
36
|
-
roadmapItems={roadmapData}
|
|
37
|
-
/>
|
|
38
|
-
```
|
|
33
|
+
// Render a release card
|
|
34
|
+
<ProductReleaseCard title="v2.1.0" date="2025-06-01" />
|
|
39
35
|
|
|
40
|
-
|
|
36
|
+
// Deep import for internal slot types
|
|
37
|
+
import type { RoadmapSectionProps } from '@flamingo-stack/openframe-frontend-core/components/shared/product-release/release-detail-page'
|
|
38
|
+
```
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 35eb2dca49e5c1311632535a7cffdf8b -->
|
|
2
|
+
Pixel-perfect loading skeleton for `ProductReleaseCard` that prevents layout shift by mirroring the loaded card's exact dimensions in both `lg` and `sm` variants.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
### `ProductReleaseCardSkeleton`
|
|
7
|
+
|
|
8
|
+
A client-side animated pulse skeleton component with two size branches:
|
|
9
|
+
|
|
10
|
+
| Branch | Matches | Structure |
|
|
11
|
+
|--------|---------|-----------|
|
|
12
|
+
| `lg` | `ProductReleaseCard size="lg"` | Hero image + version pill + title + summary + changelog strip + 4-cell metadata grid |
|
|
13
|
+
| `sm` | `ProductReleaseCard size="sm"` | Thumbnail + title row + date row + summary row |
|
|
14
|
+
|
|
15
|
+
### `ProductReleaseCardSkeletonProps`
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Default | Description |
|
|
18
|
+
|------|------|---------|-------------|
|
|
19
|
+
| `className` | `string` | — | Additional CSS classes |
|
|
20
|
+
| `size` | `'lg' \| 'sm'` | `'lg'` | Must match the target card's `size` prop to prevent layout shift on resolve |
|
|
9
21
|
|
|
10
22
|
## Usage Example
|
|
11
23
|
|
|
12
24
|
```typescript
|
|
13
25
|
import { ProductReleaseCardSkeleton } from './product-release-card-skeleton'
|
|
14
26
|
|
|
15
|
-
//
|
|
16
|
-
function
|
|
17
|
-
return <ProductReleaseCardSkeleton />
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// With custom styling
|
|
21
|
-
function CustomLoadingState() {
|
|
27
|
+
// Full release card placeholder (e.g. in ReleasesList grid)
|
|
28
|
+
function ReleasesListLoading() {
|
|
22
29
|
return (
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
<div className="grid grid-cols-1 gap-4">
|
|
31
|
+
{Array.from({ length: 5 }).map((_, i) => (
|
|
32
|
+
<ProductReleaseCardSkeleton key={i} size="lg" />
|
|
33
|
+
))}
|
|
34
|
+
</div>
|
|
26
35
|
)
|
|
27
36
|
}
|
|
28
37
|
|
|
29
|
-
//
|
|
30
|
-
function
|
|
31
|
-
|
|
32
|
-
return (
|
|
33
|
-
<div className="space-y-4">
|
|
34
|
-
{Array.from({ length: 3 }).map((_, index) => (
|
|
35
|
-
<ProductReleaseCardSkeleton key={index} />
|
|
36
|
-
))}
|
|
37
|
-
</div>
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
// ... render actual content
|
|
38
|
+
// Compact inline placeholder (e.g. inside a chat message)
|
|
39
|
+
function ChatReleaseLoading() {
|
|
40
|
+
return <ProductReleaseCardSkeleton size="sm" />
|
|
41
41
|
}
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
> **Important:** Always pass the same `size` value as the `ProductReleaseCard` it replaces. Mismatched sizes cause measurable layout shift when the loaded card resolves, since placeholder heights are calibrated to match each variant's exact rendered metrics.
|
|
@@ -1,38 +1,56 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 46c409eeb72da32ccf9384919a0c8ba0 -->
|
|
2
|
+
React card component for displaying product release information in two density variants (`lg` and `sm`), used across OpenFrame's releases catalog, Flamingo's DevCenter, and related-content rails.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
### Types & Interfaces
|
|
7
|
+
|
|
8
|
+
| Export | Description |
|
|
9
|
+
|--------|-------------|
|
|
10
|
+
| `ProductReleaseCardSize` | Union type `'lg' \| 'sm'` controlling card density |
|
|
11
|
+
| `ProductReleaseCardAnchorProps` | Structural `<a>` prop bundle for consumer-controlled routing (href, target, rel, onClick) |
|
|
12
|
+
| `ProductReleaseCardProps` | Full prop surface for the card component |
|
|
13
|
+
|
|
14
|
+
### `ProductReleaseCard`
|
|
15
|
+
|
|
16
|
+
The primary export. Renders in two layout modes:
|
|
17
|
+
|
|
18
|
+
- **`lg` (default):** Three-zone rich card — hero (16:9 cover + version pill + title + summary), changelog stats strip (features/fixes/improvements/breaking counts), and a 4-cell metadata grid (Type · Status · Released · Author). Author cell falls back to an `EMPTY_AUTHOR_PLACEHOLDER` shape to prevent skeleton reflow.
|
|
19
|
+
- **`sm`:** Compact horizontal layout (~80px tall) for chat messages and tight inline surfaces. Replaces `<h3>` with `<span>`, uses a `<span>`-anchored link wrapper, and renders: 56px icon + 1-line title + version/date meta.
|
|
10
20
|
|
|
11
21
|
## Usage Example
|
|
12
22
|
|
|
13
23
|
```typescript
|
|
14
24
|
import { ProductReleaseCard } from './product-release-card'
|
|
15
25
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
// Large catalog card with full metadata
|
|
27
|
+
<ProductReleaseCard
|
|
28
|
+
size="lg"
|
|
29
|
+
title="OpenFrame 2.1.0"
|
|
30
|
+
summary="Unified AI-driven interface improvements and new automation hooks."
|
|
31
|
+
version="2.1.0"
|
|
32
|
+
formattedDate="May 2026"
|
|
33
|
+
coverImage="https://cdn.flamingo.run/releases/2.1.0.jpg"
|
|
34
|
+
releaseType="minor"
|
|
35
|
+
releaseStatus="stable"
|
|
36
|
+
releaseTypeBadgeColor="success"
|
|
37
|
+
changelogCounts={{ features: 8, fixes: 5, improvements: 3, breaking: 0 }}
|
|
38
|
+
author={{ full_name: "Jane Doe", avatar_url: null, job_title: "Engineer" }}
|
|
39
|
+
anchorProps={{ href: "/releases/2.1.0", onClick: handleNav }}
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
// Compact inline card (e.g., inside a chat message)
|
|
43
|
+
<ProductReleaseCard
|
|
44
|
+
size="sm"
|
|
45
|
+
title="OpenFrame 2.1.0"
|
|
46
|
+
version="2.1.0"
|
|
47
|
+
formattedDate="May 2026"
|
|
48
|
+
anchorProps={{ href: "/releases/2.1.0" }}
|
|
49
|
+
/>
|
|
36
50
|
```
|
|
37
51
|
|
|
38
|
-
|
|
52
|
+
## Notes
|
|
53
|
+
|
|
54
|
+
- **Routing:** Prefer `anchorProps` (from the hub's `useNavLink`) over the legacy `onClick` prop. When both are provided, `anchorProps` wins.
|
|
55
|
+
- **Author cell:** Always rendered using `effectiveAuthor` (falls back to `{ full_name: '—', avatar_url: null, job_title: 'Unknown' }`) to maintain a fixed 4-column grid and prevent skeleton reflow.
|
|
56
|
+
- **Inline duplication policy:** The `lg` metadata grid intentionally duplicates the hub's `<EntityAuthorCard>` visuals — the OSS lib carries zero hub imports by design. Keep both in lockstep when cell padding, divider styles, or avatar sizes change.
|
|
@@ -1,42 +1,41 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A React component that renders a detailed
|
|
1
|
+
<!-- source-hash: bce89d098aaae5a0045e31b754508d2a -->
|
|
2
|
+
A client-side React page component that renders a detailed view of a product release, including metadata, changelog sections, linked roadmap/delivery tasks, media, and video content. It supports injectable components for app-specific rendering and pre-fetched data for admin preview.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
6
|
+
### Exported Types
|
|
7
|
+
- **`ReleaseDetailPageProps`** — Main props interface; accepts `slug`, optional `initialData`, a `useRelease` hook, and injectable section components
|
|
8
|
+
- **`UseReleaseResult`** — Shape returned by the injected `useRelease` hook
|
|
9
|
+
- **`MarkdownRendererProps`**, **`RoadmapSectionProps`**, **`DeliverySectionProps`**, **`VideoSectionProps`**, **`VideoDisplaySectionProps`** — Props interfaces for each injectable section component
|
|
10
|
+
- **`RoadmapItem`**, **`DeliveryResponse`** — Re-exported canonical types for source compatibility
|
|
11
|
+
|
|
12
|
+
### Main Export
|
|
13
|
+
- **`ReleaseDetailPage`** — Primary page component; orchestrates data fetching, linked task loading, gallery state, and layout rendering
|
|
14
|
+
|
|
15
|
+
### Internal Helpers
|
|
16
|
+
- **`DefaultMarkdownRenderer`** — Fallback renderer using `whitespace-pre-wrap` when no `MarkdownRenderer` is injected
|
|
11
17
|
|
|
12
18
|
## Usage Example
|
|
13
19
|
|
|
14
20
|
```typescript
|
|
15
21
|
import { ReleaseDetailPage } from './release-detail-page';
|
|
16
|
-
import { useRelease } from '
|
|
17
|
-
import {
|
|
22
|
+
import { useRelease } from '@/hooks/use-release';
|
|
23
|
+
import { MarkdownRenderer } from '@/components/markdown-renderer';
|
|
24
|
+
import { RoadmapSection } from '@/components/roadmap-section';
|
|
18
25
|
|
|
19
|
-
function ReleasePage({ params }: { params: { slug: string } }) {
|
|
26
|
+
export default function ReleasePage({ params }: { params: { slug: string } }) {
|
|
20
27
|
return (
|
|
21
28
|
<ReleaseDetailPage
|
|
22
29
|
slug={params.slug}
|
|
23
30
|
useRelease={useRelease}
|
|
24
|
-
MarkdownRenderer={
|
|
25
|
-
RoadmapSection={
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
MarkdownRenderer={MarkdownRenderer}
|
|
32
|
+
RoadmapSection={RoadmapSection}
|
|
33
|
+
roadmapApiEndpoint="/api/roadmap"
|
|
34
|
+
deliveryApiEndpoint="/api/delivery"
|
|
35
|
+
backButton={{ label: 'Back to releases', href: '/releases' }}
|
|
29
36
|
/>
|
|
30
37
|
);
|
|
31
38
|
}
|
|
32
|
-
|
|
33
|
-
// For admin preview with pre-fetched data
|
|
34
|
-
<ReleaseDetailPage
|
|
35
|
-
slug="v2.1.0"
|
|
36
|
-
initialData={preloadedReleaseData}
|
|
37
|
-
useRelease={useRelease}
|
|
38
|
-
MarkdownRenderer={RichMarkdownRenderer}
|
|
39
|
-
/>
|
|
40
39
|
```
|
|
41
40
|
|
|
42
|
-
The
|
|
41
|
+
> **Note:** The `useRelease` hook must be provided at the app level to ensure it uses the correct `QueryClient`. When `initialData` is supplied, the hook is bypassed entirely — enabling admin preview without a network fetch.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!-- source-hash: 499214f4840bb2650161d384a662b71b -->
|
|
2
|
+
Barrel export file for the shared roadmap surface, exposing grid components and voting hook while intentionally omitting `RoadmapItem` and `VoteType` to prevent TypeScript TS2308 ambiguous re-export errors.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `RoadmapGrid` | Component | Main grid layout for displaying roadmap items |
|
|
9
|
+
| `RoadmapGridProps` | Type | Props interface for `RoadmapGrid` |
|
|
10
|
+
| `RoadmapGridSkeleton` | Component | Loading skeleton for the roadmap grid |
|
|
11
|
+
| `RoadmapGridSkeletonProps` | Type | Props interface for `RoadmapGridSkeleton` |
|
|
12
|
+
| `useRoadmapVoting` | Hook | Hook encapsulating roadmap voting logic |
|
|
13
|
+
| `VoteState` | Type | State shape for a vote interaction |
|
|
14
|
+
| `UseRoadmapVotingOptions` | Type | Options interface for `useRoadmapVoting` |
|
|
15
|
+
|
|
16
|
+
## Intentionally Omitted Exports
|
|
17
|
+
|
|
18
|
+
| Omitted | Reason | Canonical Import Path |
|
|
19
|
+
|---------|--------|-----------------------|
|
|
20
|
+
| `RoadmapItem` | Already exported via two paths; a third triggers TS2308 | `@flamingo-stack/openframe-frontend-core/components/chat` |
|
|
21
|
+
| `VoteType` | Duplicate of the same type re-exported from `./chat` | `@flamingo-stack/openframe-frontend-core/components/chat` |
|
|
22
|
+
|
|
23
|
+
## Usage Example
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// ✅ Import roadmap surface components from this barrel
|
|
27
|
+
import {
|
|
28
|
+
RoadmapGrid,
|
|
29
|
+
RoadmapGridSkeleton,
|
|
30
|
+
useRoadmapVoting,
|
|
31
|
+
type VoteState,
|
|
32
|
+
type UseRoadmapVotingOptions,
|
|
33
|
+
} from '@flamingo-stack/openframe-frontend-core/components/shared/roadmap';
|
|
34
|
+
|
|
35
|
+
// ✅ Import omitted types from their canonical paths
|
|
36
|
+
import type { RoadmapItem, VoteType } from '@flamingo-stack/openframe-frontend-core/components/chat';
|
|
37
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- source-hash: 906f9090b003db906415d2c34987f68e -->
|
|
2
|
+
Loading skeleton for the `/roadmap` grid view, rendering animated placeholder cards while roadmap data is being fetched.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `RoadmapCardSkeleton` *(internal)*
|
|
7
|
+
A 340px animated placeholder card mimicking the full grid card layout. Renders pulsing skeletons for:
|
|
8
|
+
- Status badge (top-right)
|
|
9
|
+
- Icon + title + subtitle
|
|
10
|
+
- 3-line description block
|
|
11
|
+
- Bottom action area (button + badge)
|
|
12
|
+
|
|
13
|
+
> **Note:** Intentionally kept file-internal to avoid naming collision with `RoadmapCardSkeleton` from `lib/chat/entity-cards/roadmap-card.tsx`, which is a compact 56px chat-card variant.
|
|
14
|
+
|
|
15
|
+
### `RoadmapGridSkeleton` *(exported)*
|
|
16
|
+
Renders a responsive 1→2 column grid of `RoadmapCardSkeleton` instances.
|
|
17
|
+
|
|
18
|
+
### `RoadmapGridSkeletonProps`
|
|
19
|
+
|
|
20
|
+
| Prop | Type | Default | Description |
|
|
21
|
+
|------|------|---------|-------------|
|
|
22
|
+
| `count` | `number` | `4` | Number of skeleton cards to render |
|
|
23
|
+
| `showLeftMargin` | `boolean` | `true` | Applies `md:ml-[120px]` to align with the page hero title block. Pass `false` for narrower surfaces (e.g. release detail page) |
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
// Default: 4 cards with left margin (full roadmap page)
|
|
29
|
+
<RoadmapGridSkeleton />
|
|
30
|
+
|
|
31
|
+
// Custom count, no left margin (embedded in a narrower rail)
|
|
32
|
+
<RoadmapGridSkeleton count={6} showLeftMargin={false} />
|
|
33
|
+
|
|
34
|
+
// Typical Suspense / conditional pattern
|
|
35
|
+
{isLoading
|
|
36
|
+
? <RoadmapGridSkeleton count={4} />
|
|
37
|
+
: <RoadmapGrid items={roadmapItems} />
|
|
38
|
+
}
|
|
39
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<!-- source-hash: afe909dc035ab417a954948a391b890a -->
|
|
2
|
+
Full-page roadmap surface that renders a responsive 2-column grid of `RoadmapCard` components with integrated voting state and live count refresh.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `RoadmapGrid` | Component | Main grid component rendering all roadmap items |
|
|
9
|
+
| `RoadmapGridProps` | Interface | Component prop contract |
|
|
10
|
+
| `DEFAULT_BUILD_REFRESH_URL` | Constant | Default URL builder: `(taskId) => /api/roadmap/${taskId}` |
|
|
11
|
+
|
|
12
|
+
## Props
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Default | Description |
|
|
15
|
+
|------|------|---------|-------------|
|
|
16
|
+
| `items` | `RoadmapItem[]` | — | Roadmap entries to display |
|
|
17
|
+
| `onItemUpdate` | `(item: RoadmapItem) => void` | — | Callback fired after a successful vote refresh |
|
|
18
|
+
| `showLeftMargin` | `boolean` | `true` | Applies `md:ml-[120px]` for hero alignment; pass `false` for rails |
|
|
19
|
+
| `buildRefreshUrl` | `(taskId: string) => string` | `DEFAULT_BUILD_REFRESH_URL` | Path-based URL builder for per-task refresh after vote |
|
|
20
|
+
| `votingOptions` | `UseRoadmapVotingOptions` | — | Vote endpoint + storage key forwarded to `useRoadmapVoting` |
|
|
21
|
+
|
|
22
|
+
## Voting Flow
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
graph TD
|
|
26
|
+
A["User Clicks Vote"] --> B{"Task Already Voting?"}
|
|
27
|
+
B -->|Yes| C["Ignore / No-op"]
|
|
28
|
+
B -->|No| D["Lock Task ID in votingTasks"]
|
|
29
|
+
D --> E["toggleVote()"]
|
|
30
|
+
E --> F{"result.success?"}
|
|
31
|
+
F -->|No| G["Unlock Task ID"]
|
|
32
|
+
F -->|Yes| H["GET buildRefreshUrl(taskId)"]
|
|
33
|
+
H --> I{"response.ok?"}
|
|
34
|
+
I -->|Yes| J["onItemUpdate(data.item)"]
|
|
35
|
+
I -->|No| G
|
|
36
|
+
J --> G
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Usage Example
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import { RoadmapGrid } from './roadmap-grid';
|
|
43
|
+
import type { RoadmapItem } from '../../chat/types/entities/roadmap-item';
|
|
44
|
+
|
|
45
|
+
function RoadmapPage({ items }: { items: RoadmapItem[] }) {
|
|
46
|
+
const [roadmapItems, setRoadmapItems] = useState(items);
|
|
47
|
+
|
|
48
|
+
const handleItemUpdate = (updated: RoadmapItem) => {
|
|
49
|
+
setRoadmapItems(prev =>
|
|
50
|
+
prev.map(i => (i.id === updated.id ? updated : i))
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<RoadmapGrid
|
|
56
|
+
items={roadmapItems}
|
|
57
|
+
onItemUpdate={handleItemUpdate}
|
|
58
|
+
showLeftMargin={true}
|
|
59
|
+
buildRefreshUrl={(taskId) => `/api/roadmap/${taskId}`}
|
|
60
|
+
votingOptions={{ endpoint: '/api/votes', storageKey: 'roadmap-votes' }}
|
|
61
|
+
/>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
> **Note on `buildRefreshUrl`:** This prop is intentionally a function rather than a string template to safely support embedders whose by-id route shape differs (e.g. `/api/roadmap?id=…`). String concatenation would silently break non-standard routes.
|