@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,11 +1,11 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A React component that
|
|
1
|
+
<!-- source-hash: 25788d62c9b251ff8382443ab8b6fcff -->
|
|
2
|
+
A client-side React component that renders all four standard changelog sections (Features Added, Bugs Fixed, Improvements, Breaking Changes) as a unified, styled panel by composing multiple `ChangelogManager` instances.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
6
|
+
- **`ChangelogSectionsManager`** — Main exported component that groups and renders all changelog sections in a single card layout
|
|
7
|
+
- **`ChangelogSectionsManagerProps`** — Interface defining per-section entry arrays, change handlers, optional `className`, and `expandAll` flag
|
|
8
|
+
- **`expandAll`** — Boolean prop that expands all entries across all sections simultaneously, intended for use after AI enrichment populates fields
|
|
9
9
|
|
|
10
10
|
## Usage Example
|
|
11
11
|
|
|
@@ -13,27 +13,22 @@ A React component that organizes and manages changelog entries across four disti
|
|
|
13
13
|
import { ChangelogSectionsManager } from './changelog-sections-manager';
|
|
14
14
|
import type { ChangelogEntry } from '../../types/product-release';
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const [breaking, setBreaking] = useState<ChangelogEntry[]>([]);
|
|
16
|
+
const [featuresAdded, setFeaturesAdded] = useState<ChangelogEntry[]>([]);
|
|
17
|
+
const [bugsFixed, setBugsFixed] = useState<ChangelogEntry[]>([]);
|
|
18
|
+
const [improvements, setImprovements] = useState<ChangelogEntry[]>([]);
|
|
19
|
+
const [breakingChanges, setBreakingChanges] = useState<ChangelogEntry[]>([]);
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
className="my-4"
|
|
34
|
-
/>
|
|
35
|
-
);
|
|
36
|
-
}
|
|
21
|
+
<ChangelogSectionsManager
|
|
22
|
+
featuresAdded={featuresAdded}
|
|
23
|
+
bugsFixed={bugsFixed}
|
|
24
|
+
improvements={improvements}
|
|
25
|
+
breakingChanges={breakingChanges}
|
|
26
|
+
onFeaturesAddedChange={setFeaturesAdded}
|
|
27
|
+
onBugsFixedChange={setBugsFixed}
|
|
28
|
+
onImprovementsChange={setImprovements}
|
|
29
|
+
onBreakingChangesChange={setBreakingChanges}
|
|
30
|
+
expandAll={aiEnrichmentComplete}
|
|
31
|
+
/>
|
|
37
32
|
```
|
|
38
33
|
|
|
39
|
-
|
|
34
|
+
Each section delegates entry management (add, edit, remove) to its own `ChangelogManager` instance while sharing the `expandAll` state, keeping the parent component's state management straightforward with one array and one setter per section.
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: b7d1c615d3d37a540958daff7feed5f3 -->
|
|
2
|
+
A reusable React component for displaying command strings in a styled monospace box with optional title and configurable action buttons.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
| Interface | Description |
|
|
9
|
+
|-----------|-------------|
|
|
10
|
+
| `CommandBoxAction` | Defines a button with `label`, `onClick`, optional `variant`, `icon`, `disabled`, and `loading` states |
|
|
11
|
+
| `CommandBoxProps` | Component props including `command` (required), `title`, `primaryAction`, `secondaryAction`, layout classes, and `maxLines` |
|
|
12
|
+
|
|
13
|
+
### Exports
|
|
14
|
+
|
|
15
|
+
- **`CommandBox`** — Main component rendering the command display box
|
|
16
|
+
- **`CommandBoxAction`** — Interface for action button configuration
|
|
17
|
+
- **`CommandBoxProps`** — Interface for component props
|
|
10
18
|
|
|
11
19
|
## Usage Example
|
|
12
20
|
|
|
@@ -14,34 +22,29 @@ A unified React component for displaying commands with optional title and config
|
|
|
14
22
|
import { CommandBox } from '@flamingo/ui-kit/components/features'
|
|
15
23
|
import { Copy, Play } from 'lucide-react'
|
|
16
24
|
|
|
17
|
-
// Basic command display with copy action
|
|
18
25
|
<CommandBox
|
|
19
|
-
title="
|
|
20
|
-
command="
|
|
21
|
-
|
|
22
|
-
label: 'Copy',
|
|
23
|
-
onClick: () => navigator.clipboard.writeText(command),
|
|
24
|
-
icon: <Copy className="w-4 h-4" />,
|
|
25
|
-
variant: 'primary'
|
|
26
|
-
}}
|
|
27
|
-
/>
|
|
28
|
-
|
|
29
|
-
// Multi-line command with line limiting
|
|
30
|
-
<CommandBox
|
|
31
|
-
command="curl -L https://example.com/install.sh | bash -s -- --config production"
|
|
32
|
-
maxLines={2}
|
|
26
|
+
title="Device Add Command"
|
|
27
|
+
command="curl -L https://example.com/install.sh | bash"
|
|
28
|
+
maxLines={3}
|
|
33
29
|
primaryAction={{
|
|
34
30
|
label: 'Copy Command',
|
|
35
|
-
onClick:
|
|
36
|
-
|
|
31
|
+
onClick: () => navigator.clipboard.writeText(command),
|
|
32
|
+
icon: <Copy className="w-5 h-5" />,
|
|
33
|
+
variant: 'accent'
|
|
37
34
|
}}
|
|
38
35
|
secondaryAction={{
|
|
39
|
-
label: '
|
|
40
|
-
onClick:
|
|
41
|
-
icon: <Play className="w-
|
|
42
|
-
|
|
36
|
+
label: 'Run on Machine',
|
|
37
|
+
onClick: handleRun,
|
|
38
|
+
icon: <Play className="w-5 h-5" />,
|
|
39
|
+
variant: 'outline',
|
|
40
|
+
loading: isRunning
|
|
43
41
|
}}
|
|
44
42
|
/>
|
|
45
43
|
```
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
## Notes
|
|
46
|
+
|
|
47
|
+
- **Line clamping** uses a static `lineClampClasses` map (`1–6`) to ensure Tailwind generates the correct `line-clamp-*` classes at build time. Set `maxLines={0}` (default) for unlimited display.
|
|
48
|
+
- **Button layout** stacks vertically on mobile and aligns right horizontally on `md+` screens.
|
|
49
|
+
- Secondary action renders before the primary action visually, consistent with standard UI conventions.
|
|
50
|
+
- `variant` defaults to `'accent'` for primary and `'outline'` for secondary if not specified.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- source-hash: 87dfd7f5b94bff0f44ed579685785b88 -->
|
|
2
|
+
Reusable editor component for entity summary fields with AI generation badges and confidence score display.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
**`EntitySummaryEditor`** — Default export. A controlled textarea editor with optional AI metadata indicators.
|
|
7
|
+
|
|
8
|
+
**`EntitySummaryEditorProps`** — TypeScript interface defining all configurable props:
|
|
9
|
+
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
|------|------|---------|-------------|
|
|
12
|
+
| `summary` | `string` | `''` | Controlled text value |
|
|
13
|
+
| `onSummaryChange` | `(value: string) => void` | required | Change handler |
|
|
14
|
+
| `isAIGenerated` | `boolean` | `false` | Shows AI Generated badge |
|
|
15
|
+
| `summaryConfidence` | `number \| null` | — | Confidence score (0–100) |
|
|
16
|
+
| `label` | `string` | `'Summary (Markdown supported)'` | Field label |
|
|
17
|
+
| `helperText` | `string` | `'Entity summary...'` | Subtext below label |
|
|
18
|
+
| `placeholder` | `string` | `'Brief summary...'` | Textarea placeholder |
|
|
19
|
+
| `minHeight` | `number` | `200` | Minimum height in px |
|
|
20
|
+
| `disabled` | `boolean` | `false` | Disables the textarea |
|
|
21
|
+
| `className` | `string` | `''` | Container class override |
|
|
22
|
+
|
|
23
|
+
## Usage Example
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { EntitySummaryEditor } from './entity-summary-editor';
|
|
27
|
+
|
|
28
|
+
function ReleaseForm() {
|
|
29
|
+
const [summary, setSummary] = React.useState('');
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<EntitySummaryEditor
|
|
33
|
+
summary={summary}
|
|
34
|
+
onSummaryChange={setSummary}
|
|
35
|
+
isAIGenerated={true}
|
|
36
|
+
summaryConfidence={87}
|
|
37
|
+
label="Release Summary (Markdown supported)"
|
|
38
|
+
helperText="Displayed on release cards and detail page."
|
|
39
|
+
placeholder="Describe this release..."
|
|
40
|
+
minHeight={240}
|
|
41
|
+
/>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
When `isAIGenerated` is `true`, a `Sparkles` icon badge renders next to the label. When `summaryConfidence` is provided, `ConfidenceBadge` renders inline showing the AI confidence percentage.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- source-hash: e2ba951ef60128447d27416a00b1a586 -->
|
|
2
|
+
Renders the video block for entity detail pages, combining full video, highlight video, AI-generated summary, and video bites into a unified tabbed layout.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `EntityVideoSection` (default export)
|
|
7
|
+
Main component that orchestrates the video display logic:
|
|
8
|
+
- **Tab UI** — renders "Full Video" / "Highlights" tabs when both a full video and highlight video are present; falls back to a single `<Video>` when only one exists
|
|
9
|
+
- **YouTube precedence** — resolves `youtubeUrl` vs `mainVideoUrl` priority at this level, keeping `<Video>` as a single-source-per-render primitive
|
|
10
|
+
- **Video summary** — renders an AI-generated markdown summary via injected `MarkdownRenderer`
|
|
11
|
+
- **Video bites grid** — delegates to `<VideoBitesDisplay>` when `videoBites` are provided
|
|
12
|
+
- **Null guard** — returns `null` when no video, summary, or bites are present
|
|
13
|
+
|
|
14
|
+
### `EntityVideoSectionProps`
|
|
15
|
+
Full interface for controlling content and behavior:
|
|
16
|
+
|
|
17
|
+
| Prop | Type | Description |
|
|
18
|
+
|------|------|-------------|
|
|
19
|
+
| `youtubeUrl` | `string \| null` | YouTube URL (takes priority over `mainVideoUrl`) |
|
|
20
|
+
| `mainVideoUrl` | `string \| null` | Uploaded video URL |
|
|
21
|
+
| `highlightVideoUrl` | `string \| null` | AI-generated highlight clip |
|
|
22
|
+
| `captionsUrl` | `string \| null` | HTTPS URL to a VTT captions file |
|
|
23
|
+
| `MarkdownRenderer` | `ComponentType` | Injected renderer for summary markdown |
|
|
24
|
+
| `priority` | `boolean` | LCP hint for eager poster loading |
|
|
25
|
+
| `srtContent` | `string \| null` | Deprecated — use `captionsUrl` |
|
|
26
|
+
|
|
27
|
+
## Usage Example
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { EntityVideoSection } from './entity-video-section';
|
|
31
|
+
import { MarkdownRenderer } from '@/components/markdown-renderer';
|
|
32
|
+
|
|
33
|
+
export function TalkDetailPage({ talk }) {
|
|
34
|
+
return (
|
|
35
|
+
<EntityVideoSection
|
|
36
|
+
youtubeUrl={talk.youtubeUrl}
|
|
37
|
+
mainVideoUrl={talk.videoUrl}
|
|
38
|
+
highlightVideoUrl={talk.highlightUrl}
|
|
39
|
+
highlightVideoThumbnail={talk.highlightThumb}
|
|
40
|
+
mainVideoPoster={talk.posterUrl}
|
|
41
|
+
title={talk.title}
|
|
42
|
+
videoSummary={talk.aiSummary}
|
|
43
|
+
videoBites={talk.bites}
|
|
44
|
+
bitesTitle="Key Moments"
|
|
45
|
+
captionsUrl={talk.captionsUrl}
|
|
46
|
+
MarkdownRenderer={MarkdownRenderer}
|
|
47
|
+
priority
|
|
48
|
+
/>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
@@ -1,45 +1,64 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: d8463fe41098681892c9956a4d6c77ce -->
|
|
2
|
+
Renders an interactive Figma prototype viewer component with responsive layout, automatic device detection, section navigation, and scaled iframe embedding for both desktop and mobile viewports.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
6
|
+
### Interfaces & Types
|
|
7
|
+
- **`FigmaPrototypeViewerConfig`** — Main configuration object; accepts file keys (per-device or legacy single), sections, dimensions, starting points, and UI class overrides
|
|
8
|
+
- **`FigmaPrototypeSection`** — Defines a navigable prototype section with separate desktop/mobile node IDs
|
|
9
|
+
- **`UnifiedState`** — Consolidated state shape covering view mode, iframe lifecycle, scaling, UI visibility flags, and navigation
|
|
10
|
+
- **`ViewMode`** — `'DESKTOP' | 'MOBILE' | 'MOBILE_TOUCH'`
|
|
11
|
+
- **`IframeState`** — `'INITIAL' | 'LOADING' | 'READY' | 'RELOADING' | 'SLEEP_RECOVERY'`
|
|
12
|
+
|
|
13
|
+
### Core Functions
|
|
14
|
+
- **`getViewMode(screenWidth, isTouchDevice)`** — Derives current `ViewMode` from screen width against the 768px breakpoint
|
|
15
|
+
- **`calculateScaling(viewMode, containerDimensions, config?)`** — Computes `scale`, `marginX/Y`, and `scaledDimensions` to fit content without upscaling
|
|
16
|
+
- **`resolveFileKey(config, viewMode)`** — Picks the correct Figma file key via env vars → per-device config → legacy `fileKey`
|
|
17
|
+
- **`resolveStartingPoint(config, viewMode, section?)`** — Resolves the initial prototype node via env vars → config → first section fallback
|
|
18
|
+
- **`generateEmbedUrl(...)`** — Builds the `embed.figma.com/proto` URL with all required query parameters
|
|
19
|
+
- **`renderUnifiedUI(state, handlers, config, iframeRef)`** — Pure render function producing the full component JSX from state
|
|
20
|
+
|
|
21
|
+
### Environment Variable Overrides
|
|
22
|
+
Content dimensions and file keys can be set at the environment level:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
NEXT_PUBLIC_FIGMA_MOBILE_FILE_KEY
|
|
26
|
+
NEXT_PUBLIC_FIGMA_DESKTOP_FILE_KEY
|
|
27
|
+
NEXT_PUBLIC_FIGMA_MOBILE_STARTING_POINT
|
|
28
|
+
NEXT_PUBLIC_FIGMA_DESKTOP_STARTING_POINT
|
|
29
|
+
NEXT_PUBLIC_FIGMA_MOBILE_WIDTH / _HEIGHT
|
|
30
|
+
NEXT_PUBLIC_FIGMA_DESKTOP_WIDTH / _HEIGHT
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Priority order: **env vars → config props → defaults**
|
|
12
34
|
|
|
13
35
|
## Usage Example
|
|
14
36
|
|
|
15
37
|
```typescript
|
|
16
38
|
import { FigmaPrototypeViewer } from './figma-prototype-viewer'
|
|
39
|
+
import type { FigmaPrototypeViewerConfig } from './figma-prototype-viewer'
|
|
17
40
|
|
|
18
|
-
const config = {
|
|
19
|
-
title:
|
|
20
|
-
desktopFileKey:
|
|
21
|
-
mobileFileKey:
|
|
41
|
+
const config: FigmaPrototypeViewerConfig = {
|
|
42
|
+
title: 'Onboarding Flow',
|
|
43
|
+
desktopFileKey: 'abc123XYZ',
|
|
44
|
+
mobileFileKey: 'xyz789ABC',
|
|
45
|
+
desktopStartingPoint: '1:23',
|
|
46
|
+
mobileStartingPoint: '4:56',
|
|
22
47
|
sections: [
|
|
23
48
|
{
|
|
24
|
-
id:
|
|
25
|
-
number:
|
|
26
|
-
title:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
49
|
+
id: 'sign-up',
|
|
50
|
+
number: '01',
|
|
51
|
+
title: 'Sign Up',
|
|
52
|
+
description: 'New user registration flow',
|
|
53
|
+
startingNodeId: '1:23',
|
|
54
|
+
mobileStartingNodeId: '4:56',
|
|
55
|
+
},
|
|
30
56
|
],
|
|
57
|
+
mobileContentDimensions: { width: 343, height: 600 },
|
|
31
58
|
desktopContentDimensions: { width: 944, height: 600 },
|
|
32
|
-
mobileContentDimensions: { width: 343, height: 600 }
|
|
33
59
|
}
|
|
34
60
|
|
|
35
|
-
function PrototypePage() {
|
|
36
|
-
return
|
|
37
|
-
<FigmaPrototypeViewer
|
|
38
|
-
config={config}
|
|
39
|
-
onSectionClick={(sectionId) => console.log('Section changed:', sectionId)}
|
|
40
|
-
/>
|
|
41
|
-
)
|
|
61
|
+
export default function PrototypePage() {
|
|
62
|
+
return <FigmaPrototypeViewer config={config} />
|
|
42
63
|
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
The component automatically detects device capabilities, manages iframe states (loading, ready, reloading), and provides smooth transitions between sections. Environment variables can override config settings for deployment flexibility.
|
|
64
|
+
```
|
|
@@ -1,61 +1,48 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: a3c5543a6675d1ff7a726459eb736d56 -->
|
|
2
|
+
Animated filter dropdown component for selecting, applying, and resetting multi-section filter configurations with support for checkbox, radio, and select modes.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
6
|
+
### Interfaces
|
|
7
|
+
- **`FilterOption`** — Individual filter item with `id`, `label`, `value`, optional `count`, and `type`
|
|
8
|
+
- **`FilterSection`** — Grouping of options with a selection `type` (`"checkbox"` | `"radio"` | `"select"`), optional `allowSelectAll`, and `defaultSelected`
|
|
9
|
+
- **`FiltersDropdownProps`** — Full component props including `sections`, `onApply`, `onReset`, `currentFilters`, and `placement`
|
|
10
|
+
|
|
11
|
+
### Internal Components
|
|
12
|
+
- **`FilterCheckbox`** — Styled checkbox with accent fill and checkmark icon when selected
|
|
13
|
+
|
|
14
|
+
### Main Export
|
|
15
|
+
- **`FiltersDropdown`** — Dropdown panel with animated open/close (mount/unmount + CSS transitions), smart viewport-aware placement, mobile-responsive layout, outside-click and Escape key dismissal, and active filter count indicator
|
|
10
16
|
|
|
11
17
|
## Usage Example
|
|
12
18
|
|
|
13
19
|
```typescript
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const filterSections: FilterSection[] = [
|
|
20
|
+
const sections: FilterSection[] = [
|
|
17
21
|
{
|
|
18
|
-
id:
|
|
19
|
-
title:
|
|
20
|
-
type:
|
|
22
|
+
id: "status",
|
|
23
|
+
title: "Status",
|
|
24
|
+
type: "checkbox",
|
|
21
25
|
allowSelectAll: true,
|
|
22
26
|
options: [
|
|
23
|
-
{ id:
|
|
24
|
-
{ id:
|
|
25
|
-
|
|
26
|
-
]
|
|
27
|
+
{ id: "open", label: "Open", value: "open", count: 12 },
|
|
28
|
+
{ id: "closed", label: "Closed", value: "closed", count: 4 },
|
|
29
|
+
],
|
|
27
30
|
},
|
|
28
|
-
{
|
|
29
|
-
id: 'priority',
|
|
30
|
-
title: 'Priority',
|
|
31
|
-
type: 'radio',
|
|
32
|
-
options: [
|
|
33
|
-
{ id: 'high', label: 'High', value: 'high' },
|
|
34
|
-
{ id: 'medium', label: 'Medium', value: 'medium' },
|
|
35
|
-
{ id: 'low', label: 'Low', value: 'low' }
|
|
36
|
-
]
|
|
37
|
-
}
|
|
38
31
|
]
|
|
39
32
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
triggerLabel="Filter Items"
|
|
51
|
-
sections={filterSections}
|
|
52
|
-
onApply={handleApplyFilters}
|
|
53
|
-
currentFilters={appliedFilters}
|
|
54
|
-
placement="bottom-start"
|
|
55
|
-
responsive={true}
|
|
56
|
-
/>
|
|
57
|
-
)
|
|
58
|
-
}
|
|
33
|
+
const [appliedFilters, setAppliedFilters] = useState<Record<string, string[]>>({})
|
|
34
|
+
|
|
35
|
+
<FiltersDropdown
|
|
36
|
+
sections={sections}
|
|
37
|
+
triggerLabel="STATUS"
|
|
38
|
+
placement="bottom-start"
|
|
39
|
+
currentFilters={appliedFilters}
|
|
40
|
+
onApply={(filters) => setAppliedFilters(filters)}
|
|
41
|
+
onReset={() => setAppliedFilters({})}
|
|
42
|
+
/>
|
|
59
43
|
```
|
|
60
44
|
|
|
61
|
-
|
|
45
|
+
### Key Behaviors
|
|
46
|
+
- `currentFilters` syncs external state back into the dropdown when reopened
|
|
47
|
+
- Placement auto-adjusts (`bottom-start` ↔ `bottom-end`) based on available viewport space
|
|
48
|
+
- On mobile (`< 640px`), the panel switches to a fixed, full-width overlay mode
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- source-hash: d7af9befa8736257f5fa1a7169b8bc9d -->
|
|
2
|
+
Reusable configuration section component for highlight video generation settings, providing duration selection and subtitle burning controls in a unified horizontal layout.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `HighlightConfigSection`
|
|
7
|
+
A client-side React component used across `CustomerInterview` and `ProductRelease` entity workflows to configure highlight video output options.
|
|
8
|
+
|
|
9
|
+
### `HighlightConfigSectionProps`
|
|
10
|
+
| Prop | Type | Description |
|
|
11
|
+
|------|------|-------------|
|
|
12
|
+
| `targetDurationSeconds` | `number` | Current selected duration in seconds |
|
|
13
|
+
| `onTargetDurationChange` | `(seconds: number) => void` | Callback fired on duration change |
|
|
14
|
+
| `skipSubtitleBurning` | `boolean` | Whether subtitle burning is skipped |
|
|
15
|
+
| `onSkipSubtitleBurningChange` | `(skip: boolean) => void` | Callback fired on subtitle toggle |
|
|
16
|
+
| `disabled` | `boolean?` | Disables all controls (default: `false`) |
|
|
17
|
+
| `className` | `string?` | Additional CSS class override |
|
|
18
|
+
|
|
19
|
+
**Duration options:** 60s, 120s, 180s *(recommended)*, 240s, 300s
|
|
20
|
+
|
|
21
|
+
## Usage Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { HighlightConfigSection } from './highlight-config-section';
|
|
25
|
+
|
|
26
|
+
function VideoEditor() {
|
|
27
|
+
const [duration, setDuration] = useState(180);
|
|
28
|
+
const [skipSubs, setSkipSubs] = useState(false);
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<HighlightConfigSection
|
|
32
|
+
targetDurationSeconds={duration}
|
|
33
|
+
onTargetDurationChange={setDuration}
|
|
34
|
+
skipSubtitleBurning={skipSubs}
|
|
35
|
+
onSkipSubtitleBurningChange={setSkipSubs}
|
|
36
|
+
disabled={false}
|
|
37
|
+
/>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> **Note:** Renders as a dark-themed panel (`bg-[#1a1a1a]`) with a `Select` dropdown for duration and a checkbox for subtitle burning, laid out horizontally via flexbox.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- source-hash: 9a48f5db58e0fc209ed8daeba5dd9324 -->
|
|
2
|
+
A reusable React wrapper around `AIEnrichSection` that provides a standardized UI for triggering AI-powered highlight video generation for `CustomerInterview` and `ProductRelease` entities.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `HighlightGenerationSection`
|
|
7
|
+
The primary export — a thin, opinionated wrapper that pre-configures `AIEnrichSection` with highlight-specific defaults:
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Default |
|
|
10
|
+
|------|------|---------|
|
|
11
|
+
| `onGenerateHighlight` | `() => void` | — |
|
|
12
|
+
| `isProcessing` | `boolean` | — |
|
|
13
|
+
| `canEnrich` | `boolean` | — |
|
|
14
|
+
| `requiredFields` | `AIRequiredField[]` | — |
|
|
15
|
+
| `targetDurationSeconds` | `number` | `180` |
|
|
16
|
+
| `hasResult` | `boolean` | `false` |
|
|
17
|
+
| `disabledMessage` | `string` | `"Upload a video and run transcription first"` |
|
|
18
|
+
| `showCancel` | `boolean` | `true` |
|
|
19
|
+
| `loadingLabel` | `string` | `"Generating highlight..."` |
|
|
20
|
+
|
|
21
|
+
### `HighlightGenerationSectionProps`
|
|
22
|
+
The exported interface describing all configurable props, including optional overrides for `title`, `description`, `buttonLabel`, and cancellation controls.
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { HighlightGenerationSection } from './highlight-generation-section';
|
|
28
|
+
|
|
29
|
+
<HighlightGenerationSection
|
|
30
|
+
onGenerateHighlight={handleGenerate}
|
|
31
|
+
isProcessing={isGenerating}
|
|
32
|
+
canEnrich={hasTranscription}
|
|
33
|
+
requiredFields={[
|
|
34
|
+
{ label: 'Video Upload', satisfied: hasVideo },
|
|
35
|
+
{ label: 'Transcription', satisfied: hasTranscription },
|
|
36
|
+
]}
|
|
37
|
+
hasResult={!!highlightUrl}
|
|
38
|
+
targetDurationSeconds={120}
|
|
39
|
+
onCancel={handleCancel}
|
|
40
|
+
isCancelling={isCancelling}
|
|
41
|
+
status={status}
|
|
42
|
+
statusMessage={statusMessage}
|
|
43
|
+
/>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> **Note:** Pair this component with `HighlightConfigSection` for the full highlight generation experience. The button label automatically switches between `"Generate Highlight"` and `"Regenerate Highlight"` based on the `hasResult` prop.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: 396284dd8be1b09a6ecb781dd4fed0ce -->
|
|
2
|
+
Unified React component that combines highlight video configuration, AI-powered generation, and video preview/upload into a single composable section used across multiple modal contexts.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `HighlightVideoCombinedSection`
|
|
7
|
+
The primary export. Renders three sequential sub-sections:
|
|
8
|
+
1. **`HighlightConfigSection`** — Duration and subtitle burning settings
|
|
9
|
+
2. **`AIEnrichSection`** — AI generation trigger with status feedback and cancel support
|
|
10
|
+
3. **Preview + Upload** — Inline video preview with manual upload fallback
|
|
11
|
+
|
|
12
|
+
### `HighlightVideoCombinedSectionProps`
|
|
13
|
+
Full interface grouping props into four logical namespaces:
|
|
14
|
+
- **Config** — `targetDurationSeconds`, `skipSubtitleBurning`, `configDisabled`
|
|
15
|
+
- **Generation** — `onGenerateHighlight`, `isProcessing`, `canEnrich`, `requiredFields`, `status`
|
|
16
|
+
- **Preview** — `highlightVideoUrl`, `highlightVideoThumbnail`, `renderVideoPreview`, `onUpload`, `onDelete`
|
|
17
|
+
- **Common** — `className`, `title`, `description`, `buttonLabel`
|
|
18
|
+
|
|
19
|
+
## Usage Example
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
<HighlightVideoCombinedSection
|
|
23
|
+
// Config
|
|
24
|
+
targetDurationSeconds={120}
|
|
25
|
+
onTargetDurationChange={(s) => setDuration(s)}
|
|
26
|
+
skipSubtitleBurning={false}
|
|
27
|
+
onSkipSubtitleBurningChange={(v) => setSkipSubs(v)}
|
|
28
|
+
// Generation
|
|
29
|
+
onGenerateHighlight={handleGenerate}
|
|
30
|
+
isProcessing={isGenerating}
|
|
31
|
+
canEnrich={hasTranscript}
|
|
32
|
+
requiredFields={[{ key: 'transcript', label: 'Transcription' }]}
|
|
33
|
+
status={jobStatus}
|
|
34
|
+
statusMessage={jobMessage}
|
|
35
|
+
onCancel={handleCancel}
|
|
36
|
+
hasResult={!!highlightUrl}
|
|
37
|
+
// Preview
|
|
38
|
+
highlightVideoUrl={highlightUrl}
|
|
39
|
+
onUpload={async (file) => await uploadFile(file)}
|
|
40
|
+
onDelete={async () => await deleteHighlight()}
|
|
41
|
+
renderVideoPreview={({ videoUrl, title, thumbnailUrl, onDelete }) => (
|
|
42
|
+
<VideoPlayer url={videoUrl} thumbnail={thumbnailUrl} onDelete={onDelete} />
|
|
43
|
+
)}
|
|
44
|
+
/>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
> **Note:** `renderVideoPreview` uses a render-prop pattern, keeping the component decoupled from any specific video player implementation. The manual upload uses a hidden `<input type="file">` created programmatically to avoid controlled input complexity.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- source-hash: 9c2fe27cb025dab5e630418cc7b208a0 -->
|
|
2
|
+
Reusable React component for displaying and managing highlight video previews with support for manual upload, AI-generated badges, and duration display.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `HighlightVideoPreviewProps`
|
|
7
|
+
| Prop | Type | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| `highlightVideoUrl` | `string \| null` | URL of the highlight video |
|
|
10
|
+
| `highlightVideoThumbnail` | `string \| null` | Thumbnail image URL |
|
|
11
|
+
| `highlightVideoDurationMs` | `number \| null` | Duration in milliseconds |
|
|
12
|
+
| `highlightVideoSource` | `'manual' \| 'ai_generated' \| null` | Video origin, shows AI badge if `ai_generated` |
|
|
13
|
+
| `onUpload` | `(file: File) => Promise<string>` | File upload handler |
|
|
14
|
+
| `onDelete` | `() => Promise<void>` | Delete handler |
|
|
15
|
+
| `renderVideoPreview` | `(props) => ReactNode` | Render prop for custom video player |
|
|
16
|
+
| `uploadProgressComponent` | `ReactNode` | Optional upload progress UI |
|
|
17
|
+
|
|
18
|
+
### `HighlightVideoPreview`
|
|
19
|
+
Main exported component rendering the label row, badges, upload button, and delegating video display to the `renderVideoPreview` render prop.
|
|
20
|
+
|
|
21
|
+
## Usage Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { HighlightVideoPreview } from './highlight-video-preview';
|
|
25
|
+
|
|
26
|
+
<HighlightVideoPreview
|
|
27
|
+
highlightVideoUrl="https://cdn.example.com/video.mp4"
|
|
28
|
+
highlightVideoThumbnail="https://cdn.example.com/thumb.jpg"
|
|
29
|
+
highlightVideoDurationMs={125000}
|
|
30
|
+
highlightVideoSource="ai_generated"
|
|
31
|
+
onUpload={async (file) => {
|
|
32
|
+
const url = await uploadToStorage(file);
|
|
33
|
+
return url;
|
|
34
|
+
}}
|
|
35
|
+
onDelete={async () => {
|
|
36
|
+
await deleteVideo();
|
|
37
|
+
}}
|
|
38
|
+
renderVideoPreview={({ videoUrl, thumbnailUrl, onDelete }) => (
|
|
39
|
+
<VideoPlayer src={videoUrl} poster={thumbnailUrl} onDelete={onDelete} />
|
|
40
|
+
)}
|
|
41
|
+
/>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> **Note:** This component is designed for both `CustomerInterview` and `ProductRelease` entities, providing a consistent highlight video UI across the platform. The `renderVideoPreview` render prop keeps the video player implementation decoupled.
|