@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,44 +1,54 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: e190543dcb8ddd78af0a45f332d3eefe -->
|
|
2
|
+
A selectable button component that supports icons, images, tags, and selected/disabled states, designed for use in option-selection UIs such as lists or grids.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
### `SelectButtonProps`
|
|
7
|
+
| Prop | Type | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| `title` | `string` | Primary label text (required) |
|
|
10
|
+
| `description` | `string` | Optional subtitle, visible on `md+` screens |
|
|
11
|
+
| `selected` | `boolean` | Highlights the button with accent styling and shows a check icon |
|
|
12
|
+
| `disabled` | `boolean` | Disables interaction and reduces opacity |
|
|
13
|
+
| `icon` | `React.ReactNode` | Optional leading icon |
|
|
14
|
+
| `image` | `{ src, alt }` | Optional thumbnail image |
|
|
15
|
+
| `tag` | `string` | Optional badge label rendered via `Tag` |
|
|
16
|
+
| `tagVariant` | `TagProps['variant']` | Controls tag style, defaults to `"outline"` |
|
|
17
|
+
| `onClick` | `() => void` | Click handler |
|
|
18
|
+
| `className` | `string` | Additional CSS classes |
|
|
19
|
+
|
|
20
|
+
### `SelectButton`
|
|
21
|
+
A `forwardRef` button with `role="option"` and `aria-selected`, suitable for accessible listbox patterns. Applies ODS design tokens for color, spacing, and focus states.
|
|
9
22
|
|
|
10
23
|
## Usage Example
|
|
11
24
|
|
|
12
25
|
```typescript
|
|
13
26
|
import { SelectButton } from './select-button'
|
|
14
|
-
import {
|
|
27
|
+
import { ServerIcon } from '../icons-v2-generated/...'
|
|
15
28
|
|
|
16
|
-
// Basic
|
|
29
|
+
// Basic selectable option
|
|
17
30
|
<SelectButton
|
|
18
|
-
title="
|
|
19
|
-
description="
|
|
20
|
-
selected={selectedPlan === '
|
|
21
|
-
onClick={() => setSelectedPlan('
|
|
31
|
+
title="Standard Plan"
|
|
32
|
+
description="Up to 10 devices"
|
|
33
|
+
selected={selectedPlan === 'standard'}
|
|
34
|
+
onClick={() => setSelectedPlan('standard')}
|
|
22
35
|
/>
|
|
23
36
|
|
|
24
37
|
// With icon and tag
|
|
25
38
|
<SelectButton
|
|
26
|
-
title="
|
|
27
|
-
description="
|
|
28
|
-
icon={<
|
|
39
|
+
title="Enterprise Plan"
|
|
40
|
+
description="Unlimited devices"
|
|
41
|
+
icon={<ServerIcon />}
|
|
29
42
|
tag="Popular"
|
|
30
|
-
tagVariant="
|
|
31
|
-
selected={
|
|
32
|
-
onClick={() =>
|
|
43
|
+
tagVariant="solid"
|
|
44
|
+
selected={selectedPlan === 'enterprise'}
|
|
45
|
+
onClick={() => setSelectedPlan('enterprise')}
|
|
33
46
|
/>
|
|
34
47
|
|
|
35
|
-
// With image
|
|
48
|
+
// With thumbnail image
|
|
36
49
|
<SelectButton
|
|
37
|
-
title="
|
|
38
|
-
image={{ src:
|
|
39
|
-
|
|
40
|
-
onClick={handleThemeSelect}
|
|
50
|
+
title="Acme Corp"
|
|
51
|
+
image={{ src: '/logos/acme.png', alt: 'Acme Corp logo' }}
|
|
52
|
+
selected={true}
|
|
41
53
|
/>
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
The component includes responsive design with different sizing for mobile/desktop, accessibility support with ARIA attributes, and visual states for hover, active, and selected interactions.
|
|
54
|
+
```
|
|
@@ -1,54 +1,51 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: e691658139dcf0e352222348aeae0a32 -->
|
|
2
|
+
Self-contained React component that combines SEO metadata editing fields with a live social media (Open Graph) card preview, used across blog posts, case studies, and product releases in the Flamingo/OpenFrame platform.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- **
|
|
9
|
-
- **Live
|
|
10
|
-
|
|
6
|
+
### `SEOEditorPreview` (default export)
|
|
7
|
+
The main component rendering a two-panel layout:
|
|
8
|
+
- **Editor fields** — SEO title, description, keywords, and OG image upload
|
|
9
|
+
- **Live OG card preview** — real-time social media card simulation
|
|
10
|
+
|
|
11
|
+
### `SEOEditorPreviewProps` interface
|
|
12
|
+
| Prop | Type | Description |
|
|
13
|
+
|------|------|-------------|
|
|
14
|
+
| `seoTitle` / `seoDescription` / `seoKeywords` / `ogImageUrl` | `string` | Controlled SEO field values |
|
|
15
|
+
| `title` / `summary` / `featuredImage` | `string` | Auto-populate fallback sources |
|
|
16
|
+
| `onSeo*Change` / `onOgImageUrlChange` | `(value: string) => void` | Change handlers per field |
|
|
17
|
+
| `onOgImageUpload` | `(file: File) => Promise<string>` | Optional parent-provided upload handler |
|
|
18
|
+
| `aiConfidenceSeo*` | `number` (optional) | AI confidence scores shown via `ConfidenceBadge` |
|
|
19
|
+
| `domain` | `string` | Preview domain label (default: `'openmsp.ai'`) |
|
|
20
|
+
| `disabled` | `boolean` | Disables all inputs |
|
|
21
|
+
|
|
22
|
+
### Internal State
|
|
23
|
+
- `imageError` — falls back to placeholder when OG image fails to load
|
|
24
|
+
- `isUploading` — shows `Loader2` spinner during file upload
|
|
25
|
+
- `fileInputRef` — ref to hidden `<input type="file">` for programmatic click
|
|
11
26
|
|
|
12
27
|
## Usage Example
|
|
13
28
|
|
|
14
29
|
```typescript
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
const { url } = await response.json();
|
|
30
|
+
<SEOEditorPreview
|
|
31
|
+
seoTitle={post.seoTitle}
|
|
32
|
+
seoDescription={post.seoDescription}
|
|
33
|
+
seoKeywords={post.seoKeywords}
|
|
34
|
+
ogImageUrl={post.ogImageUrl}
|
|
35
|
+
title={post.title}
|
|
36
|
+
summary={post.summary}
|
|
37
|
+
featuredImage={post.featuredImage}
|
|
38
|
+
onSeoTitleChange={(v) => updatePost({ seoTitle: v })}
|
|
39
|
+
onSeoDescriptionChange={(v) => updatePost({ seoDescription: v })}
|
|
40
|
+
onSeoKeywordsChange={(v) => updatePost({ seoKeywords: v })}
|
|
41
|
+
onOgImageUrlChange={(v) => updatePost({ ogImageUrl: v })}
|
|
42
|
+
onOgImageUpload={async (file) => {
|
|
43
|
+
const { url } = await uploadAsset(file);
|
|
30
44
|
return url;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
seoTitle={seoData.seoTitle}
|
|
36
|
-
seoDescription={seoData.seoDescription}
|
|
37
|
-
seoKeywords={seoData.seoKeywords}
|
|
38
|
-
ogImageUrl={seoData.ogImageUrl}
|
|
39
|
-
title="Blog Post Title"
|
|
40
|
-
summary="Blog post summary"
|
|
41
|
-
featuredImage="/featured.jpg"
|
|
42
|
-
onSeoTitleChange={(value) => setSeoData(prev => ({ ...prev, seoTitle: value }))}
|
|
43
|
-
onSeoDescriptionChange={(value) => setSeoData(prev => ({ ...prev, seoDescription: value }))}
|
|
44
|
-
onSeoKeywordsChange={(value) => setSeoData(prev => ({ ...prev, seoKeywords: value }))}
|
|
45
|
-
onOgImageUrlChange={(value) => setSeoData(prev => ({ ...prev, ogImageUrl: value }))}
|
|
46
|
-
onOgImageUpload={handleImageUpload}
|
|
47
|
-
aiConfidenceSeoTitle={0.85}
|
|
48
|
-
domain="example.com"
|
|
49
|
-
/>
|
|
50
|
-
);
|
|
51
|
-
}
|
|
45
|
+
}}
|
|
46
|
+
aiConfidenceSeoTitle={0.92}
|
|
47
|
+
domain="flamingo.run"
|
|
48
|
+
/>
|
|
52
49
|
```
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
> All SEO fields accept empty strings (never `undefined`). When a field is empty, the component automatically falls back to `title`, `summary`, or `featuredImage` props, showing an "Auto-populated" hint label beneath the input.
|
|
@@ -1,12 +1,25 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A React component for managing social media links
|
|
1
|
+
<!-- source-hash: d38fe303fe5fb74d67b5d888ec7ca267 -->
|
|
2
|
+
A client-side React component for managing a dynamic list of social media profile links, supporting add, update, and remove operations with platform-aware icons.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
| Interface | Description |
|
|
9
|
+
|---|---|
|
|
10
|
+
| `SocialLink` | Represents a single link entry with `platform`, `url`, and optional `username` |
|
|
11
|
+
| `SocialPlatform` | Describes a platform definition sourced from dynamic data (e.g., database), including `icon_name`, `url_pattern`, and `placeholder` |
|
|
12
|
+
| `SocialLinksManagerProps` | Component props: `links`, `onChange` callback, optional `platforms` array, and optional `className` |
|
|
13
|
+
|
|
14
|
+
### `SocialLinksManager`
|
|
15
|
+
|
|
16
|
+
The primary exported component. Renders a list of social link rows, each with:
|
|
17
|
+
- A platform icon (resolved via `iconMap` using `icon_name` from `SocialPlatform` or falls back to `platform` string)
|
|
18
|
+
- A `Select` dropdown for choosing the platform
|
|
19
|
+
- An `Input` for the profile URL
|
|
20
|
+
- A delete button (`Trash2`) to remove the entry
|
|
21
|
+
|
|
22
|
+
Supported icon keys in `iconMap`: `linkedin`, `github`, `twitter`, `reddit`, `slack`, `whatsapp`, `website`, `youtube`, `instagram`, `facebook`, `discord`, `telegram`, `tiktok`.
|
|
10
23
|
|
|
11
24
|
## Usage Example
|
|
12
25
|
|
|
@@ -14,28 +27,21 @@ A React component for managing social media links with platform selection, URL i
|
|
|
14
27
|
import { SocialLinksManager, SocialLink, SocialPlatform } from './social-links-manager';
|
|
15
28
|
|
|
16
29
|
const platforms: SocialPlatform[] = [
|
|
17
|
-
{
|
|
18
|
-
|
|
19
|
-
name: 'linkedin',
|
|
20
|
-
display_name: 'LinkedIn',
|
|
21
|
-
icon_name: 'linkedin',
|
|
22
|
-
placeholder: 'LinkedIn profile URL',
|
|
23
|
-
enabled: true
|
|
24
|
-
}
|
|
30
|
+
{ id: '1', name: 'linkedin', display_name: 'LinkedIn', icon_name: 'linkedin', enabled: true, placeholder: 'https://linkedin.com/in/...' },
|
|
31
|
+
{ id: '2', name: 'github', display_name: 'GitHub', icon_name: 'github', enabled: true, placeholder: 'https://github.com/...' },
|
|
25
32
|
];
|
|
26
33
|
|
|
27
34
|
function ProfileEditor() {
|
|
28
|
-
const [
|
|
35
|
+
const [links, setLinks] = useState<SocialLink[]>([]);
|
|
29
36
|
|
|
30
37
|
return (
|
|
31
38
|
<SocialLinksManager
|
|
32
|
-
links={
|
|
33
|
-
onChange={
|
|
39
|
+
links={links}
|
|
40
|
+
onChange={setLinks}
|
|
34
41
|
platforms={platforms}
|
|
35
|
-
className="max-w-2xl"
|
|
36
42
|
/>
|
|
37
43
|
);
|
|
38
44
|
}
|
|
39
45
|
```
|
|
40
46
|
|
|
41
|
-
|
|
47
|
+
> **Note:** `platforms` defaults to an empty array, so platform data should always be passed explicitly — typically fetched from your database to keep icon and URL patterns in sync.
|
|
@@ -1,14 +1,32 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: 12ec98968857443cbefad0230bd2d335 -->
|
|
2
|
+
A client-side React button component that renders a branded "Start with OpenFrame" CTA button, supporting five visual modes with the OpenFrame logo icon and a "Beta" status badge.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `StartWithOpenFrameButton` | `React.ForwardRefExoticComponent` | Main button component with OpenFrame branding |
|
|
9
|
+
| `StartWithOpenFrameButtonProps` | `interface` | Extends `ButtonProps`, omitting `variant`, `size`, and `leftIcon` |
|
|
10
|
+
|
|
11
|
+
### Props
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Default | Description |
|
|
14
|
+
|------|------|---------|-------------|
|
|
15
|
+
| `mode` | `'outline' \| 'yellow' \| 'pink' \| 'purple' \| 'cyan'` | `'outline'` | Visual color mode |
|
|
16
|
+
| `buttonSize` | `'sm' \| 'md' \| 'lg'` | — | Maps to internal Button size tokens |
|
|
17
|
+
| `loading` | `boolean` | `false` | Shows loading state, hides the OpenFrame icon |
|
|
18
|
+
| `buttonBackgroundColor` | `string` | — | Custom background override (cyan mode only) |
|
|
19
|
+
| `buttonTextColor` | `string` | — | Custom text color override (cyan mode only) |
|
|
20
|
+
| `children` | `React.ReactNode` | `'Start Free Trial'` | Button label |
|
|
21
|
+
|
|
22
|
+
### Mode Behavior
|
|
23
|
+
|
|
24
|
+
| Mode | Variant | Background Token |
|
|
25
|
+
|------|---------|-----------------|
|
|
26
|
+
| `outline` | `outline` | Default outline style |
|
|
27
|
+
| `yellow` | `accent` | `--ods-open-yellow-base` |
|
|
28
|
+
| `pink` / `purple` | `accent` | `--ods-flamingo-pink-base` |
|
|
29
|
+
| `cyan` | `accent` | `--ods-flamingo-cyan-base` |
|
|
12
30
|
|
|
13
31
|
## Usage Example
|
|
14
32
|
|
|
@@ -16,30 +34,20 @@ A customizable button component for promoting OpenFrame with multiple visual the
|
|
|
16
34
|
import { StartWithOpenFrameButton } from './start-with-openframe-button';
|
|
17
35
|
|
|
18
36
|
// Default outline mode
|
|
19
|
-
<StartWithOpenFrameButton
|
|
20
|
-
onClick={() => window.open('/openframe')}
|
|
21
|
-
>
|
|
22
|
-
Start Free Trial
|
|
23
|
-
</StartWithOpenFrameButton>
|
|
37
|
+
<StartWithOpenFrameButton onClick={() => router.push('/signup')} />
|
|
24
38
|
|
|
25
|
-
// Yellow
|
|
26
|
-
<StartWithOpenFrameButton
|
|
27
|
-
|
|
28
|
-
buttonSize="lg"
|
|
29
|
-
onClick={handleStartTrial}
|
|
30
|
-
>
|
|
31
|
-
Get Started Now
|
|
39
|
+
// Yellow accent, large size
|
|
40
|
+
<StartWithOpenFrameButton mode="yellow" buttonSize="lg">
|
|
41
|
+
Get Started
|
|
32
42
|
</StartWithOpenFrameButton>
|
|
33
43
|
|
|
34
|
-
// Cyan
|
|
35
|
-
<StartWithOpenFrameButton
|
|
44
|
+
// Cyan with custom brand colors
|
|
45
|
+
<StartWithOpenFrameButton
|
|
36
46
|
mode="cyan"
|
|
37
|
-
buttonBackgroundColor="#
|
|
47
|
+
buttonBackgroundColor="#00BCD4"
|
|
38
48
|
buttonTextColor="#000000"
|
|
39
|
-
|
|
40
|
-
>
|
|
41
|
-
Launch OpenFrame
|
|
42
|
-
</StartWithOpenFrameButton>
|
|
43
|
-
```
|
|
49
|
+
/>
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
// Loading state
|
|
52
|
+
<StartWithOpenFrameButton loading={isSubmitting} />
|
|
53
|
+
```
|
|
@@ -1,40 +1,56 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: f987a6879214f07a120da4bd03335b15 -->
|
|
2
|
+
Reusable client-side status filter component that renders a row of toggle buttons for filtering content by status, following the admin dashboard pattern used across the Flamingo/OpenFrame platform.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
- **StatusOption**: Interface defining the structure for filter options with value and label
|
|
8
|
-
- **StatusFilterComponentProps**: Props interface supporting status selection, change handlers, options, and optional count display
|
|
6
|
+
### Interfaces
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
| Interface | Description |
|
|
9
|
+
|-----------|-------------|
|
|
10
|
+
| `StatusOption` | Defines a filter option with `value` and `label` strings |
|
|
11
|
+
| `StatusFilterComponentProps` | Full props contract for the component |
|
|
12
|
+
|
|
13
|
+
### Props
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Default | Description |
|
|
16
|
+
|------|------|---------|-------------|
|
|
17
|
+
| `selectedStatus` | `string` | — | Currently active filter value |
|
|
18
|
+
| `onStatusChange` | `(status: string) => void` | — | Callback fired on filter selection |
|
|
19
|
+
| `statusOptions` | `StatusOption[]` | — | Array of filter options to render |
|
|
20
|
+
| `showCount` | `boolean` | `false` | Toggles item count display |
|
|
21
|
+
| `count` | `number` | `0` | Number shown when `showCount` is enabled |
|
|
22
|
+
| `className` | `string` | `''` | Additional CSS classes for the wrapper |
|
|
23
|
+
|
|
24
|
+
### Exported
|
|
25
|
+
|
|
26
|
+
- `StatusFilterComponent` — named export, main component
|
|
27
|
+
- `StatusOption` — exported interface
|
|
28
|
+
- `StatusFilterComponentProps` — exported interface
|
|
11
29
|
|
|
12
30
|
## Usage Example
|
|
13
31
|
|
|
14
32
|
```typescript
|
|
15
33
|
import { StatusFilterComponent, StatusOption } from './status-filter-component';
|
|
16
34
|
|
|
17
|
-
const
|
|
18
|
-
{ value: '
|
|
19
|
-
{ value: '
|
|
20
|
-
{ value: '
|
|
35
|
+
const ticketStatusOptions: StatusOption[] = [
|
|
36
|
+
{ value: 'open', label: 'Open' },
|
|
37
|
+
{ value: 'in_progress', label: 'In Progress' },
|
|
38
|
+
{ value: 'closed', label: 'Closed' },
|
|
21
39
|
];
|
|
22
40
|
|
|
23
|
-
function
|
|
24
|
-
const [
|
|
25
|
-
const [itemCount, setItemCount] = useState(42);
|
|
41
|
+
export function TicketDashboard() {
|
|
42
|
+
const [status, setStatus] = React.useState('all');
|
|
26
43
|
|
|
27
44
|
return (
|
|
28
45
|
<StatusFilterComponent
|
|
29
|
-
selectedStatus={
|
|
30
|
-
onStatusChange={
|
|
31
|
-
statusOptions={
|
|
32
|
-
showCount
|
|
33
|
-
count={
|
|
34
|
-
className="mb-6"
|
|
46
|
+
selectedStatus={status}
|
|
47
|
+
onStatusChange={setStatus}
|
|
48
|
+
statusOptions={ticketStatusOptions}
|
|
49
|
+
showCount
|
|
50
|
+
count={42}
|
|
35
51
|
/>
|
|
36
52
|
);
|
|
37
53
|
}
|
|
38
54
|
```
|
|
39
55
|
|
|
40
|
-
The
|
|
56
|
+
> **Note:** The `'all'` option is always rendered as a dedicated button — any `StatusOption` with `value: 'all'` in the input array is automatically excluded from the mapped list to prevent duplication.
|
|
@@ -1,45 +1,61 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: 0d6f9a8deca3671804c89abef2d0469f -->
|
|
2
|
+
A reusable React component for selecting and creating tags with search autocomplete, chip display, and tag limit enforcement.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- Selected tags displayed as removable chips inside the search input
|
|
9
|
-
- Configurable tag limits (default 10)
|
|
10
|
-
- Focus-triggered dropdown with all available tags
|
|
11
|
-
- Real-time filtering based on search query
|
|
12
|
-
- Disabled state support with visual feedback
|
|
6
|
+
### `TagsSelector`
|
|
7
|
+
Main exported component that renders a search input with inline tag chips, an autocomplete dropdown, and a tag counter.
|
|
13
8
|
|
|
14
|
-
**
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
**Props (`TagsSelectorProps`):**
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Default | Description |
|
|
12
|
+
|------|------|---------|-------------|
|
|
13
|
+
| `availableTags` | `Tag[]` | — | Pool of tags to search from |
|
|
14
|
+
| `selectedTagIds` | `number[]` | — | Currently selected tag IDs |
|
|
15
|
+
| `onTagsChange` | `(tagIds: number[]) => void` | — | Callback when selection changes |
|
|
16
|
+
| `onCreateTag` | `(name: string) => Promise<Tag \| null>` | — | Optional async tag creation handler |
|
|
17
|
+
| `maxTags` | `number` | `10` | Maximum selectable tags |
|
|
18
|
+
| `allowCreate` | `boolean` | `true` | Enables the "Create tag" option |
|
|
19
|
+
| `disabled` | `boolean` | `false` | Disables all interactions |
|
|
20
|
+
|
|
21
|
+
### Internal Helpers
|
|
22
|
+
|
|
23
|
+
- `handleTagAdd` — Adds a tag if not already selected and under the limit
|
|
24
|
+
- `handleTagRemove` — Removes a tag chip from selection
|
|
25
|
+
- `handleCreateTag` — Calls `onCreateTag`, auto-selects the result, manages loading state
|
|
26
|
+
- `getFilteredTagsForAutocomplete` — Filters available tags by search query, excluding already selected
|
|
27
|
+
- `tagExistsWithName` — Case-insensitive duplicate check before showing "Create" option
|
|
17
28
|
|
|
18
29
|
## Usage Example
|
|
19
30
|
|
|
20
31
|
```typescript
|
|
21
|
-
import { TagsSelector } from './
|
|
32
|
+
import { TagsSelector } from './tags-selector';
|
|
22
33
|
|
|
23
|
-
|
|
24
|
-
{ id: 1, name: 'React', slug: 'react' },
|
|
25
|
-
{ id: 2, name: 'TypeScript', slug: 'typescript' },
|
|
26
|
-
{ id: 3, name: 'Next.js', slug: 'nextjs' }
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
function BlogEditor() {
|
|
34
|
+
function BlogPostForm() {
|
|
30
35
|
const [selectedTagIds, setSelectedTagIds] = useState<number[]>([]);
|
|
31
36
|
|
|
37
|
+
const handleCreateTag = async (name: string) => {
|
|
38
|
+
const res = await fetch('/api/tags', {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
body: JSON.stringify({ name }),
|
|
41
|
+
});
|
|
42
|
+
return res.json(); // { id, name, slug }
|
|
43
|
+
};
|
|
44
|
+
|
|
32
45
|
return (
|
|
33
46
|
<TagsSelector
|
|
34
|
-
availableTags={
|
|
47
|
+
availableTags={[
|
|
48
|
+
{ id: 1, name: 'MSP', slug: 'msp' },
|
|
49
|
+
{ id: 2, name: 'AI', slug: 'ai' },
|
|
50
|
+
]}
|
|
35
51
|
selectedTagIds={selectedTagIds}
|
|
36
52
|
onTagsChange={setSelectedTagIds}
|
|
53
|
+
onCreateTag={handleCreateTag}
|
|
37
54
|
maxTags={5}
|
|
38
|
-
placeholder="Search
|
|
39
|
-
className="w-full"
|
|
55
|
+
placeholder="Search tags..."
|
|
40
56
|
/>
|
|
41
57
|
);
|
|
42
58
|
}
|
|
43
59
|
```
|
|
44
60
|
|
|
45
|
-
|
|
61
|
+
> **Note:** The dropdown auto-opens on focus and supports keyboard creation — pressing `Enter` while typing a new tag name triggers `handleCreateTag` when `allowCreate` is enabled.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- source-hash: a9ac065f3da523be3fea0a878f95156f -->
|
|
2
|
+
Unified React component that combines the `AIEnrichSection` (trigger button + status) and `TranscriptSummaryEditor` (editable output fields) into a single cohesive UI for video transcription and summarization workflows.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`TranscribeAndSummarizeCombinedSection`** — Default export; renders an `AIEnrichSection` followed by a `TranscriptSummaryEditor` in a vertical stack
|
|
7
|
+
- **`TranscribeAndSummarizeCombinedSectionProps`** — Full interface merging props from both child components, split into two logical groups via inline comments
|
|
8
|
+
- Automatically resolves `buttonLabel` to `"Generate"` or `"Regenerate"` based on the `hasResult` flag when no custom label is provided
|
|
9
|
+
|
|
10
|
+
## Usage Example
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import { TranscribeAndSummarizeCombinedSection } from './transcribe-and-summarize-combined-section';
|
|
14
|
+
|
|
15
|
+
<TranscribeAndSummarizeCombinedSection
|
|
16
|
+
// Trigger controls
|
|
17
|
+
onTranscribe={handleTranscribe}
|
|
18
|
+
isProcessing={isLoading}
|
|
19
|
+
canEnrich={!!videoFile}
|
|
20
|
+
requiredFields={[{ label: 'Video file', met: !!videoFile }]}
|
|
21
|
+
status={status}
|
|
22
|
+
statusMessage={statusMessage}
|
|
23
|
+
hasResult={!!transcript}
|
|
24
|
+
showCancel
|
|
25
|
+
onCancel={handleCancel}
|
|
26
|
+
|
|
27
|
+
// Editor content
|
|
28
|
+
videoSummary={summary}
|
|
29
|
+
onVideoSummaryChange={setSummary}
|
|
30
|
+
transcript={transcript}
|
|
31
|
+
onTranscriptChange={setTranscript}
|
|
32
|
+
isAIGenerated={isAIGenerated}
|
|
33
|
+
videoSummaryConfidence={0.92}
|
|
34
|
+
transcriptConfidence={0.88}
|
|
35
|
+
subtitles={srtContent}
|
|
36
|
+
onSubtitlesChange={setSrtContent}
|
|
37
|
+
hasSubtitles={hasSubtitles}
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
|
|
43
|
+
- Used by both `CustomerInterview` and `ProductRelease` modals
|
|
44
|
+
- All text labels (`title`, `description`, `videoSummaryLabel`, etc.) are fully customizable with sensible defaults
|
|
45
|
+
- The `disabled` prop propagates only to `TranscriptSummaryEditor`, not to the enrich trigger button
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: e9e7f82a90db0014d3b7c868be383461 -->
|
|
2
|
+
A reusable React wrapper around `AIEnrichSection` that provides a standardized UI for video transcription and summarization workflows across `CustomerInterview` and `ProductRelease` entities.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `TranscribeSummarizeSection`
|
|
7
|
+
The primary export — a client-side React component that delegates rendering to `AIEnrichSection` with transcription-specific defaults.
|
|
8
|
+
|
|
9
|
+
### `TranscribeSummarizeSectionProps`
|
|
10
|
+
Full TypeScript interface exposing all configurable props:
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Default | Description |
|
|
13
|
+
|------|------|---------|-------------|
|
|
14
|
+
| `onTranscribe` | `() => void` | — | Triggers transcription processing |
|
|
15
|
+
| `isProcessing` | `boolean` | — | Controls loading state |
|
|
16
|
+
| `canEnrich` | `boolean` | — | Enables/disables the action button |
|
|
17
|
+
| `requiredFields` | `AIRequiredField[]` | — | Fields displayed as prerequisites |
|
|
18
|
+
| `hasResult` | `boolean` | `false` | Switches button label to "Regenerate" |
|
|
19
|
+
| `disabledMessage` | `string` | `"Upload a video first"` | Shown when button is disabled |
|
|
20
|
+
| `title` | `string` | `"Transcribe & Summarize"` | Section heading |
|
|
21
|
+
| `description` | `string` | `"Generate transcript..."` | Section subtext |
|
|
22
|
+
| `loadingLabel` | `string` | `"Processing..."` | Label during active processing |
|
|
23
|
+
| `showCancel` | `boolean` | `true` | Toggles cancel button visibility |
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { TranscribeSummarizeSection } from './transcribe-summarize-section';
|
|
29
|
+
|
|
30
|
+
function CustomerInterviewPanel() {
|
|
31
|
+
const [isProcessing, setIsProcessing] = React.useState(false);
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<TranscribeSummarizeSection
|
|
35
|
+
onTranscribe={() => setIsProcessing(true)}
|
|
36
|
+
isProcessing={isProcessing}
|
|
37
|
+
canEnrich={true}
|
|
38
|
+
requiredFields={[{ key: 'videoUrl', label: 'Video URL' }]}
|
|
39
|
+
hasResult={false}
|
|
40
|
+
onCancel={() => setIsProcessing(false)}
|
|
41
|
+
status="loading"
|
|
42
|
+
statusMessage="Transcribing video..."
|
|
43
|
+
/>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The button label automatically toggles between `"Generate"` and `"Regenerate"` based on the `hasResult` prop, or can be fully overridden via `buttonLabel`.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- source-hash: 82679c7416bd1640d332a170504ba800 -->
|
|
2
|
+
A reusable React component that renders editable textarea fields for video summary, transcript, and optional SRT subtitles — with AI generation badges and confidence score indicators.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `TranscriptSummaryEditor`
|
|
7
|
+
The default export. Renders up to three labeled textarea sections:
|
|
8
|
+
|
|
9
|
+
| Section | Shown When |
|
|
10
|
+
|---|---|
|
|
11
|
+
| **Video Summary** | Always |
|
|
12
|
+
| **Transcript** | Always |
|
|
13
|
+
| **Subtitles (SRT)** | `subtitles` content exists OR `onSubtitlesChange` is provided |
|
|
14
|
+
|
|
15
|
+
Each section supports:
|
|
16
|
+
- Customizable label, helper text, and placeholder
|
|
17
|
+
- Configurable minimum height
|
|
18
|
+
- `isAIGenerated` badge (Sparkles icon / CC icon for subtitles)
|
|
19
|
+
- `ConfidenceBadge` for AI confidence scores (video summary and transcript only)
|
|
20
|
+
- `disabled` state propagated to all textareas
|
|
21
|
+
|
|
22
|
+
### `TranscriptSummaryEditorProps`
|
|
23
|
+
Full TypeScript interface with all configurable props — all optional except `onVideoSummaryChange` and `onTranscriptChange`.
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { TranscriptSummaryEditor } from './transcript-summary-editor';
|
|
29
|
+
|
|
30
|
+
function InterviewEditor() {
|
|
31
|
+
const [summary, setSummary] = useState('');
|
|
32
|
+
const [transcript, setTranscript] = useState('');
|
|
33
|
+
const [subtitles, setSubtitles] = useState('');
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<TranscriptSummaryEditor
|
|
37
|
+
videoSummary={summary}
|
|
38
|
+
onVideoSummaryChange={setSummary}
|
|
39
|
+
transcript={transcript}
|
|
40
|
+
onTranscriptChange={setTranscript}
|
|
41
|
+
isAIGenerated={true}
|
|
42
|
+
videoSummaryConfidence={87}
|
|
43
|
+
transcriptConfidence={92}
|
|
44
|
+
subtitles={subtitles}
|
|
45
|
+
onSubtitlesChange={setSubtitles}
|
|
46
|
+
videoSummaryMinHeight={250}
|
|
47
|
+
transcriptMinHeight={400}
|
|
48
|
+
/>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
> Designed for use with `CustomerInterview` and `ProductRelease` entities in the Flamingo/OpenFrame platform, providing a consistent editing UI across entity types.
|