@flamingo-stack/openframe-frontend-core 0.0.213 → 0.0.214-snapshot.20260528192313
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-35XIT2CF.cjs → chunk-2G3NXF6J.cjs} +17 -17
- package/dist/{chunk-35XIT2CF.cjs.map → chunk-2G3NXF6J.cjs.map} +1 -1
- package/dist/{chunk-IK2X5YJU.js → chunk-7PCP7YQR.js} +2 -2
- package/dist/{chunk-ZDF6F7ED.cjs → chunk-D4MNFY67.cjs} +4 -3
- package/dist/chunk-D4MNFY67.cjs.map +1 -0
- package/dist/{chunk-OTKJASSX.cjs → chunk-NGFP4RVL.cjs} +24 -24
- package/dist/{chunk-OTKJASSX.cjs.map → chunk-NGFP4RVL.cjs.map} +1 -1
- package/dist/{chunk-3JWIJJ44.js → chunk-R6MLPU4A.js} +2 -2
- package/dist/{chunk-ZTJVRSN5.js → chunk-WQZP3JIZ.js} +4 -3
- package/dist/chunk-WQZP3JIZ.js.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/platform/ShellTypeBadge.tsx +2 -2
- 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-IK2X5YJU.js.map → chunk-7PCP7YQR.js.map} +0 -0
- /package/dist/{chunk-3JWIJJ44.js.map → chunk-R6MLPU4A.js.map} +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- source-hash: 32750bb1be67e7dcd8caa8e94a4aab6b -->
|
|
2
|
+
Resolves backend `SlashCommandSummary.iconName` strings to React icon components for empty-state onboarding cards, with a `FileIcon` fallback for unknown keys.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`OnboardingIconComponent`** — Exported type describing the shared prop interface (`size`, `className`, `color`) for all registered icons.
|
|
7
|
+
- **`LogoOpenframeIcon`** — Internal wrapper around `OpenFrameLogo` that overrides size via `style` (bypasses hardcoded `width`/`height` attributes) and pins both path colors to `currentColor` for correct rendering on card surfaces.
|
|
8
|
+
- **`ONBOARDING_ICONS`** — Static registry mapping `iconName` strings to React components, organized into three tiers:
|
|
9
|
+
- **Production keys** — short identifiers matching the `/api/docs/commands` contract (e.g., `clickup`, `slack`, `github`, `openframe`).
|
|
10
|
+
- **Figma-canonical aliases** — long-form names (e.g., `clickup-logo-grey`, `rocket-02`) kept for Storybook fixtures and legacy feed entries.
|
|
11
|
+
- **Generic v2 fall-throughs** — brand-agnostic glyphs (e.g., `search`, `ticket`, `bug`) for slash commands without a dedicated brand icon.
|
|
12
|
+
- **`resolveOnboardingIcon(iconName)`** — Exported lookup function; returns the matched component or `FileIcon` when the key is unknown or `null`/`undefined`.
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { resolveOnboardingIcon } from './onboarding-icons'
|
|
18
|
+
|
|
19
|
+
function OnboardingCard({ iconName }: { iconName: string | null }) {
|
|
20
|
+
const Icon = resolveOnboardingIcon(iconName)
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<div className="onboarding-card">
|
|
24
|
+
<Icon size={24} className="text-ods-text-secondary" />
|
|
25
|
+
</div>
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
```
|
|
@@ -1,46 +1,57 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: abb044a6e8d133979dfd31cca4044960 -->
|
|
2
|
+
Transforms raw `HistoricalMessage` arrays from GraphQL/API responses into display-ready `ProcessedMessage` objects, handling message grouping, approval state resolution, and tool call rendering.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
###
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- **`processMessageData()`** - Processes individual message data items into segments
|
|
6
|
+
### `processHistoricalMessages(messages, options)`
|
|
7
|
+
Main export. Iterates over historical messages, groups consecutive assistant turns into single display messages, and returns a `ProcessHistoricalMessagesResult` containing:
|
|
8
|
+
- `messages` — fully rendered `ProcessedMessage[]` ready for UI consumption
|
|
9
|
+
- `escalatedApprovals` — approvals filtered out by `displayApprovalTypes` that the consumer handles separately (e.g., admin-side approvals in a client-facing view)
|
|
11
10
|
|
|
12
|
-
###
|
|
13
|
-
|
|
14
|
-
- **`MessageProcessingOptions`** - Configuration options for message processing behavior
|
|
11
|
+
### `processMessageData(data, accumulator, approvalStatuses, options, escalatedApprovals)`
|
|
12
|
+
Internal dispatcher. Routes each `MessageData` item by `MESSAGE_TYPE` to the correct accumulator method:
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
| Type | Action |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `TEXT` | `appendText` |
|
|
17
|
+
| `THINKING` | `appendThinking` |
|
|
18
|
+
| `EXECUTING_TOOL` / `EXECUTED_TOOL` | `addToolExecution` |
|
|
19
|
+
| `APPROVAL_REQUEST` | Batch or legacy approval card, or escalate |
|
|
20
|
+
| `APPROVAL_RESULT` | Resolves pending/escalated approvals |
|
|
21
|
+
|
|
22
|
+
### `flushAssistantMessage()` *(internal closure)*
|
|
23
|
+
Drains the segment accumulator into a single assistant `ProcessedMessage`. Uses the **last** message ID in the group as the React key for stable pagination behavior.
|
|
24
|
+
|
|
25
|
+
### `ProcessHistoricalMessagesResult`
|
|
26
|
+
```typescript
|
|
27
|
+
export interface ProcessHistoricalMessagesResult {
|
|
28
|
+
messages: ProcessedMessage[]
|
|
29
|
+
escalatedApprovals: Map<
|
|
30
|
+
string,
|
|
31
|
+
{ command: string; explanation?: string; approvalType: string; toolCalls?: PendingToolCallData[] }
|
|
32
|
+
>
|
|
33
|
+
}
|
|
34
|
+
```
|
|
22
35
|
|
|
23
36
|
## Usage Example
|
|
24
37
|
|
|
25
38
|
```typescript
|
|
26
39
|
import { processHistoricalMessages } from './process-historical-messages'
|
|
27
40
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
console.log(result.escalatedApprovals) // Map of escalated approval requests
|
|
46
|
-
```
|
|
41
|
+
const { messages, escalatedApprovals } = processHistoricalMessages(
|
|
42
|
+
rawMessages,
|
|
43
|
+
{
|
|
44
|
+
assistantName: 'Fae',
|
|
45
|
+
assistantType: 'fae',
|
|
46
|
+
approvalStatuses: { 'req-123': 'approved' },
|
|
47
|
+
displayApprovalTypes: ['CLIENT'],
|
|
48
|
+
batchApprovalsEnabled: true,
|
|
49
|
+
onApprove: (id) => handleApprove(id),
|
|
50
|
+
onReject: (id) => handleReject(id),
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
// escalatedApprovals contains ADMIN-type approvals for separate rendering
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> **Note on `batchApprovalsEnabled`:** Defaults to `true`. Pass `false` to unfold batch approval requests into individual legacy approval cards — useful when the consuming UI has not yet adopted the batch approval component.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- source-hash: 39c5170915f66dc4b8399abe15eb750e -->
|
|
2
|
+
Provides wire-layer glue for the per-message `scrollAnchor` render hint, re-exporting the canonical constant and type alongside a wire-frame key and a validation parser so server and client code share a single source of truth.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Kind | Description |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| `SCROLL_ANCHOR` | Re-export (const) | Canonical registry of valid scroll anchor values (`TOP`, `BOTTOM`) |
|
|
9
|
+
| `ScrollAnchor` | Re-export (type) | TypeScript type derived from `SCROLL_ANCHOR` |
|
|
10
|
+
| `SCROLL_ANCHOR_WIRE_KEY` | `const string` | Literal key `"scrollAnchor"` used on the metadata leading frame wire format |
|
|
11
|
+
| `parseScrollAnchor` | `function` | Narrows an unknown wire value to `ScrollAnchor \| null` |
|
|
12
|
+
|
|
13
|
+
## Usage Example
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import {
|
|
17
|
+
SCROLL_ANCHOR,
|
|
18
|
+
SCROLL_ANCHOR_WIRE_KEY,
|
|
19
|
+
parseScrollAnchor,
|
|
20
|
+
} from './scroll-anchor'
|
|
21
|
+
|
|
22
|
+
// SERVER — emit into the metadata leading frame
|
|
23
|
+
const metadataFrame = {
|
|
24
|
+
...(scrollAnchor ? { [SCROLL_ANCHOR_WIRE_KEY]: scrollAnchor } : {}),
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// CLIENT — parse and validate incoming wire frame
|
|
28
|
+
const parsed = parseScrollAnchor(frame[SCROLL_ANCHOR_WIRE_KEY])
|
|
29
|
+
|
|
30
|
+
if (parsed !== null) {
|
|
31
|
+
// Safe to use: parsed is narrowed to ScrollAnchor
|
|
32
|
+
applyScrollAnchor(parsed) // e.g. SCROLL_ANCHOR.TOP | SCROLL_ANCHOR.BOTTOM
|
|
33
|
+
}
|
|
34
|
+
// null is silently dropped by metadata-merge logic
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Notes
|
|
38
|
+
|
|
39
|
+
- Malformed or unrecognised wire values return `null` and are filtered out by metadata-merge logic — they never overwrite a previously valid anchor value.
|
|
40
|
+
- Centralising `SCROLL_ANCHOR_WIRE_KEY` here means renaming the wire field requires a change in exactly one place.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- source-hash: 445fe5d7652052e5502c2026ce010a3c -->
|
|
2
|
+
Portable wire-contract utilities and text helpers for slash-command dispatch, shared between the lib layer and hub UI chat surfaces.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `WireCommandOverride` | Interface | Client-safe wire shape for chat request bodies; excludes `systemPromptAddendum` to prevent Rule-5b injection |
|
|
9
|
+
| `CommandOverride` | Interface | Server-built dispatch result passed to `buildChatContext`; includes entity lookup, ID filter, browse scope, and presentation hint |
|
|
10
|
+
| `parseWireCommandOverride` | Function | Validates and parses raw wire input; enforces regex + length constraints on `entityIdFilter` and `retrievalQueryOverride` |
|
|
11
|
+
| `extractEntityIdFilter` | Function | Safely resolves `entityIdFilter` from a `CommandOverride`, with optional `tableId` narrowing |
|
|
12
|
+
| `sanitizeTitleForChat` | Function | Collapses control characters (`\r`, `\n`, `\t`) in free-text titles to single spaces |
|
|
13
|
+
| `formatSingularLookupInvocation` | Function | Builds a `/cmd "value"` string with two-pass backslash/quote escaping for safe re-parsing |
|
|
14
|
+
| `buildDiscussAddendum` | Function | Composes a server-trusted system-prompt addendum for the inline object-card "Discuss" action |
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import {
|
|
20
|
+
parseWireCommandOverride,
|
|
21
|
+
extractEntityIdFilter,
|
|
22
|
+
formatSingularLookupInvocation,
|
|
23
|
+
buildDiscussAddendum,
|
|
24
|
+
} from './slash-dispatch-utils'
|
|
25
|
+
|
|
26
|
+
// Validate incoming wire payload
|
|
27
|
+
const override = parseWireCommandOverride(req.body.commandOverride)
|
|
28
|
+
// override is null if malformed; typed WireCommandOverride if valid
|
|
29
|
+
|
|
30
|
+
// Narrow to a specific table
|
|
31
|
+
const filter = extractEntityIdFilter(override, 'tickets')
|
|
32
|
+
if (filter) {
|
|
33
|
+
const { tableId, id } = filter // safe, both non-empty and tableId === 'tickets'
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Build a user-visible slash invocation
|
|
37
|
+
const msg = formatSingularLookupInvocation('ticket', 'Fix "login" bug\\path')
|
|
38
|
+
// → /ticket "Fix \"login\" bug\\path"
|
|
39
|
+
|
|
40
|
+
// Compose a Discuss addendum server-side (never from wire input)
|
|
41
|
+
const addendum = buildDiscussAddendum({ tableId: 'tickets', id: 'tkt-001' })
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> **Security note:** `systemPromptAddendum` is intentionally absent from `WireCommandOverride`. Addendum text is always composed server-side via `buildDiscussAddendum` from trusted values, preventing arbitrary prompt injection from the client.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!-- source-hash: d57dc21ab260007a759f5621c538fd6e -->
|
|
2
|
+
Client-side re-export shim that proxies source-icons utilities from the server-safe implementation at `src/utils/source-icons.ts`, allowing chat-side consumers to import from the chat-utils barrel path without duplication.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|--------|-------------|
|
|
8
|
+
| `SOURCE_ICON_NAMES` | Static map of source names to their icon identifiers |
|
|
9
|
+
| `getSourceIconName` | Helper to resolve an icon name for a given source |
|
|
10
|
+
| `SOURCE_LABELS_BY_TABLE` | Map of table IDs to human-readable source labels |
|
|
11
|
+
| `getSourceLabel` | Helper to resolve a display label for a given table |
|
|
12
|
+
| `DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID` | Static map of document types to their default table IDs |
|
|
13
|
+
| `defaultTableIdForDocumentType` | Helper to resolve the default table ID for a document type |
|
|
14
|
+
|
|
15
|
+
## Usage Example
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// Chat-side consumers import via the chat-utils barrel
|
|
19
|
+
import {
|
|
20
|
+
getSourceIconName,
|
|
21
|
+
getSourceLabel,
|
|
22
|
+
defaultTableIdForDocumentType,
|
|
23
|
+
} from '@/chat-utils'
|
|
24
|
+
|
|
25
|
+
// Resolve a source icon for rendering
|
|
26
|
+
const iconName = getSourceIconName('zendesk') // e.g. "ZendeskIcon"
|
|
27
|
+
|
|
28
|
+
// Get a human-readable label for a table
|
|
29
|
+
const label = getSourceLabel('tickets') // e.g. "Zendesk Tickets"
|
|
30
|
+
|
|
31
|
+
// Resolve the default table for a document type
|
|
32
|
+
const tableId = defaultTableIdForDocumentType('article') // e.g. "kb_articles"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
> **Note:** The actual logic lives in `src/utils/source-icons.ts`, which carries no `'use client'` directive, keeping it safe for server-side hub code. This shim exists purely to preserve the chat-utils barrel import path.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<!-- source-hash: e259d6e958fa331a13973e9d2749ffbc -->
|
|
2
|
+
Resolves the "what does clicking this row do?" CTA contract for source rows across chat-adjacent surfaces (chips, inline cards, search results). Pure function — no DOM, no fetch, no side effects.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
| Interface | Purpose |
|
|
9
|
+
|---|---|
|
|
10
|
+
| `SourceRowInput` | Row data — `sourceRepo`, `documentType`, `id`, `title`, `externalUrl`, `path` |
|
|
11
|
+
| `SourceRowContext` | Host-injected context — `baseRoute`, `chipBasePlatform`, `currentPlatform`, `tableIdForDocumentType` |
|
|
12
|
+
| `SourceRowCTA` | Resolved contract — `icon`, `iconLabel`, `href`, `targetPlatform`, `askable`, `chatRef` |
|
|
13
|
+
|
|
14
|
+
### Exports
|
|
15
|
+
|
|
16
|
+
- **`resolveSourceRowCTA(row, ctx)`** — Primary resolver. Returns the full CTA contract for a row. Handles icon resolution, URL safety (`safeHref`), path sanitization, and Ask drill-in viability.
|
|
17
|
+
- **`resolveSourceIcon(input, ctx)`** — Lightweight helper for surfaces that only need the icon + label (inline cards, search dropdown). Accepts `{ sourceRepo, documentType }` or a bare `string` (treated as `documentType`) for backward compatibility.
|
|
18
|
+
|
|
19
|
+
### Internal Helpers
|
|
20
|
+
|
|
21
|
+
- **`sanitizePath(path)`** — Strips non-alphanumeric characters except `/`, `-`, `.`, `_` to prevent path traversal or query injection.
|
|
22
|
+
- **`shouldFallbackToPathNav(row)`** — Limits in-app path fallback to `markdown` and `data_room_doc` document types only.
|
|
23
|
+
- **`pickSourceIcon(sourceRepo, documentType)`** — Maps `sourceRepo` → icon name → React component via `SOURCE_ICON_NAMES` + `ICON_REGISTRY`; falls back to `FileText`.
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { resolveSourceRowCTA, resolveSourceIcon } from './source-row-cta'
|
|
29
|
+
|
|
30
|
+
// Full CTA resolution for a chip or search result
|
|
31
|
+
const cta = resolveSourceRowCTA(
|
|
32
|
+
{
|
|
33
|
+
sourceRepo: 'blog-posts',
|
|
34
|
+
documentType: 'blog_post',
|
|
35
|
+
id: 'post-42',
|
|
36
|
+
title: 'Series A Playbook',
|
|
37
|
+
externalUrl: 'https://example.com/posts/42',
|
|
38
|
+
targetPlatform: 'hub',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
baseRoute: '/knowledge-base',
|
|
42
|
+
currentPlatform: 'hub',
|
|
43
|
+
tableIdForDocumentType: (type) => type === 'blog_post' ? 'blog-posts' : null,
|
|
44
|
+
},
|
|
45
|
+
)
|
|
46
|
+
// cta.href → 'https://example.com/posts/42' (safeHref-validated)
|
|
47
|
+
// cta.askable → true
|
|
48
|
+
// cta.chatRef → { type: 'blog_post', sourceRepo: 'blog-posts', id: 'post-42', ... }
|
|
49
|
+
|
|
50
|
+
// Icon-only resolution for an inline card tracking strip
|
|
51
|
+
const { Icon, label } = resolveSourceIcon({ documentType: 'cap_table' }, { tableIdForDocumentType })
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
> `href` is always `safeHref()`-sanitized — a hostile RAG row cannot inject `javascript:` or `data:` URIs into the DOM. Ask drill-in (`askable`) requires both a non-empty `id` and a `documentType`.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- source-hash: 6aecca2e05a8c612241168939fffcf70 -->
|
|
2
|
+
Utility helpers for resolving, formatting, and rendering tool call data — titles, argument values, and execution results — used across approval and execution UI cards.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Constants
|
|
7
|
+
- **`COMMAND_BODY_ARG_KEYS`** — Ordered list of argument keys (`command`, `query`, `script`, `scriptContent`, `code`) checked when resolving a tool call's display title.
|
|
8
|
+
|
|
9
|
+
### Functions
|
|
10
|
+
|
|
11
|
+
| Function | Description |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `getToolCallTitle(opts)` | Resolves a human-readable title from args, title, or name — shape-agnostic for both approval and execution cards. |
|
|
14
|
+
| `getCommandText(call)` | Thin adapter over `getToolCallTitle` for `PendingToolCallData`. |
|
|
15
|
+
| `expandedJsonStringify(value)` | Pretty-prints JSON with real newlines for multi-line strings instead of escaped `\n` sequences. |
|
|
16
|
+
| `formatToolArgValue(value)` | Determines inline vs. block rendering for a single tool argument value. |
|
|
17
|
+
| `formatToolResult(value)` | Determines inline vs. block rendering for a tool execution result, stripping markdown code fences if present. |
|
|
18
|
+
|
|
19
|
+
### Types
|
|
20
|
+
- **`FormattedArgValue`** — Discriminated union: `{ kind: 'inline'; text: string }` or `{ kind: 'block'; text: string; language: 'json' | 'text' }`.
|
|
21
|
+
|
|
22
|
+
## Usage Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import {
|
|
26
|
+
getCommandText,
|
|
27
|
+
formatToolArgValue,
|
|
28
|
+
formatToolResult,
|
|
29
|
+
} from './tool-call-helpers'
|
|
30
|
+
|
|
31
|
+
// Resolve display title from a pending tool call
|
|
32
|
+
const title = getCommandText(pendingCall)
|
|
33
|
+
// → e.g. "Get-Process | Where-Object CPU -gt 50"
|
|
34
|
+
|
|
35
|
+
// Render an argument value
|
|
36
|
+
const rendered = formatToolArgValue({ host: 'server-01', port: 22 })
|
|
37
|
+
// → { kind: 'block', text: '{\n "host": "server-01",\n "port": 22\n}', language: 'json' }
|
|
38
|
+
|
|
39
|
+
// Render a tool execution result (strips fences, detects JSON)
|
|
40
|
+
const result = formatToolResult('```json\n{"status":"ok"}\n```')
|
|
41
|
+
// → { kind: 'block', text: '{\n "status": "ok"\n}', language: 'json' }
|
|
42
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- source-hash: e6e63274e2215026ef420402aa7a9e8f -->
|
|
2
|
+
A self-contained, reusable contact form component that supports both standard contact submission and custom ticket-creation flows via configurable props. It handles field visibility toggling, attachment staging, Zod validation, and dual submit paths (built-in API vs. caller-provided handler).
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
**Exported Types**
|
|
7
|
+
- `ContactFormHideableField` — Union type of the six fields that can be suppressed from the UI (`name`, `email`, `companySize`, `referralSource`, `helpCategory`, `message`)
|
|
8
|
+
- `ContactFormProps` — Full prop interface covering attribution, pre-fill, layout, submission, and slot customization
|
|
9
|
+
|
|
10
|
+
**Main Export**
|
|
11
|
+
- `ContactForm` — The primary form component
|
|
12
|
+
|
|
13
|
+
**Internal Hooks Used**
|
|
14
|
+
- `useForm` (react-hook-form) + `zodResolver` against `ContactSchema`
|
|
15
|
+
- `useContactSubmission` — built-in `/api/contact` submit path with toast + redirect
|
|
16
|
+
- `useChatAttachments` — file staging shared with the chat composer
|
|
17
|
+
- `useState` — tracks in-flight state for the custom submit path
|
|
18
|
+
|
|
19
|
+
## Usage Example
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// Standard contact page — built-in submit flow
|
|
23
|
+
<ContactForm
|
|
24
|
+
userId={user?.id}
|
|
25
|
+
helpCategoryOptions={appConfig.contact.contactReasons}
|
|
26
|
+
rdtCid={getStoredRedditClickId()}
|
|
27
|
+
onSubmitSuccess={clearStoredRedditClickId}
|
|
28
|
+
/>
|
|
29
|
+
|
|
30
|
+
// Ticket creation — custom submit, hidden fields, extra Subject input
|
|
31
|
+
<ContactForm
|
|
32
|
+
hideFields={['name', 'email', 'companySize', 'referralSource', 'helpCategory']}
|
|
33
|
+
defaultValues={{ name: user.name, email: user.email, helpCategory: 'Support' }}
|
|
34
|
+
attachmentsEnabled
|
|
35
|
+
extraTopField={<SubjectInput value={subject} onChange={setSubject} />}
|
|
36
|
+
submitLabel="Open ticket"
|
|
37
|
+
onCustomSubmit={async (data, attachments) => {
|
|
38
|
+
await actions.submitTicket({ ...data, subject, attachments })
|
|
39
|
+
}}
|
|
40
|
+
/>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
> **Note:** When hiding `name`, `email`, or `helpCategory`, you **must** supply their values via `defaultValues` — Zod still validates them even when the fields are not rendered. Hidden `<input type="hidden">` elements ensure react-hook-form includes them in the submit payload.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!-- source-hash: 29826720baf088c1409fbd30046713a4 -->
|
|
2
|
+
Re-exports the `ContactForm` component along with its associated TypeScript types from the `contact-form` module.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ContactForm` | Component | The main contact form component |
|
|
9
|
+
| `ContactFormProps` | Type | Props interface for the `ContactForm` component |
|
|
10
|
+
| `ContactFormHideableField` | Type | Type representing fields that can be hidden in the form |
|
|
11
|
+
|
|
12
|
+
## Usage Example
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import {
|
|
16
|
+
ContactForm,
|
|
17
|
+
type ContactFormProps,
|
|
18
|
+
type ContactFormHideableField,
|
|
19
|
+
} from '@/components/contact-form'
|
|
20
|
+
|
|
21
|
+
const hiddenFields: ContactFormHideableField[] = ['phone', 'company']
|
|
22
|
+
|
|
23
|
+
const props: ContactFormProps = {
|
|
24
|
+
onSubmit: (data) => console.log(data),
|
|
25
|
+
hideFields: hiddenFields,
|
|
26
|
+
}
|
|
27
|
+
```
|
|
@@ -1,53 +1,44 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A React component for managing arrays of
|
|
1
|
+
<!-- source-hash: 9a66a790bb4e14efee7ac5e9ffc0cfb8 -->
|
|
2
|
+
A generic, reusable React component for managing arrays of objects with inline add, edit, remove, and multi-line paste support. Supports both immediate and deferred (save-gated) change modes.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- **State Management** - Handles both immediate updates and draft mode with dirty state tracking
|
|
9
|
-
- **Paste Handling** - Smart multi-line paste support for bulk entry addition
|
|
6
|
+
### `ArrayEntryManager<T>`
|
|
7
|
+
A generic client component that renders a labeled list of editable input entries backed by a typed array.
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
import { ArrayEntryManager } from './array-entry-manager';
|
|
15
|
-
import { Github } from 'lucide-react';
|
|
9
|
+
**Props:**
|
|
16
10
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
| Prop | Type | Description |
|
|
12
|
+
|------|------|-------------|
|
|
13
|
+
| `title` | `ReactNode` | Section label; supports strings or badge components |
|
|
14
|
+
| `items` | `T[]` | Array of objects to manage |
|
|
15
|
+
| `onChange` | `(items: T[]) => void` | Called on change (immediate) or save (deferred) |
|
|
16
|
+
| `fieldKey` | `keyof T` | Object key to bind each input to |
|
|
17
|
+
| `requireSave` | `boolean` | When `true`, buffers edits locally until "Save" is clicked |
|
|
18
|
+
| `onDirtyChange` | `(isDirty: boolean) => void` | Notifies parent of unsaved changes |
|
|
19
|
+
| `renderLabel` | `(item: T, index: number) => ReactNode` | Custom renderer above each input |
|
|
20
|
+
| `isSaving` | `boolean` | Shows spinner on the save button during async operations |
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
**Behaviors:**
|
|
23
|
+
- **Draft mode** (`requireSave=true`): edits are buffered in local state; `onChange` fires only on explicit save
|
|
24
|
+
- **Immediate mode** (`requireSave=false`): every edit calls `onChange` directly
|
|
25
|
+
- **Multi-line paste**: pasting newline-separated values auto-creates multiple entries
|
|
26
|
+
- **Add at top**: new items are prepended for better UX
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
setIsSaving(true);
|
|
28
|
-
// Save to API
|
|
29
|
-
await saveReleases(items);
|
|
30
|
-
setIsSaving(false);
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
return (
|
|
34
|
-
<ArrayEntryManager
|
|
35
|
-
title="GitHub Releases"
|
|
36
|
-
items={releases}
|
|
37
|
-
onChange={handleSave}
|
|
38
|
-
fieldKey="github_release_url"
|
|
39
|
-
placeholder="https://github.com/owner/repo/releases/tag/v1.0.0"
|
|
40
|
-
emptyMessage="No releases configured"
|
|
41
|
-
addButtonText="Add Release"
|
|
42
|
-
icon={<Github className="h-5 w-5" />}
|
|
43
|
-
requireSave={true}
|
|
44
|
-
isSaving={isSaving}
|
|
45
|
-
renderLabel={(item, index) =>
|
|
46
|
-
item.version && <span className="badge">{item.version}</span>
|
|
47
|
-
}
|
|
48
|
-
/>
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
```
|
|
28
|
+
## Usage Example
|
|
52
29
|
|
|
53
|
-
|
|
30
|
+
```typescript
|
|
31
|
+
<ArrayEntryManager<{ github_release_url: string }>
|
|
32
|
+
title="Release URLs"
|
|
33
|
+
items={releaseUrls}
|
|
34
|
+
onChange={setReleaseUrls}
|
|
35
|
+
fieldKey="github_release_url"
|
|
36
|
+
placeholder="https://github.com/org/repo/releases/tag/v1.0.0"
|
|
37
|
+
emptyMessage="No release URLs configured."
|
|
38
|
+
addButtonText="Add URL"
|
|
39
|
+
saveButtonText="Save URLs"
|
|
40
|
+
requireSave={true}
|
|
41
|
+
onDirtyChange={(dirty) => setHasUnsavedChanges(dirty)}
|
|
42
|
+
isSaving={isSaving}
|
|
43
|
+
/>
|
|
44
|
+
```
|
|
@@ -1,12 +1,35 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: 2cb028936365715865c9571d3df0261e -->
|
|
2
|
+
A reusable React component for managing a dynamic list of changelog entries, supporting add, remove, expand/collapse, and optional per-entry visibility toggling.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
### `ChangelogManager` (default export)
|
|
7
|
+
|
|
8
|
+
A controlled list manager rendered as a collapsible accordion of `ChangelogEntry` items.
|
|
9
|
+
|
|
10
|
+
**Props (`ChangelogManagerProps`):**
|
|
11
|
+
|
|
12
|
+
| Prop | Type | Description |
|
|
13
|
+
|------|------|-------------|
|
|
14
|
+
| `title` | `string` | Section label displayed above the entry list |
|
|
15
|
+
| `entries` | `ChangelogEntry[]` | Controlled array of changelog entries |
|
|
16
|
+
| `onChange` | `(entries: ChangelogEntry[]) => void` | Callback fired on any mutation |
|
|
17
|
+
| `className` | `string?` | Optional wrapper class override |
|
|
18
|
+
| `expandAll` | `boolean?` | When `true`, expands all items (e.g. post-AI enrichment) |
|
|
19
|
+
| `showVisibilityToggle` | `boolean?` | Renders a per-entry `Eye`/`EyeOff` toggle; used by investor updates |
|
|
20
|
+
|
|
21
|
+
**Internal state:**
|
|
22
|
+
- `expandedIndices` — `Set<number>` tracking which accordion items are open
|
|
23
|
+
|
|
24
|
+
**Key functions:**
|
|
25
|
+
|
|
26
|
+
| Function | Behavior |
|
|
27
|
+
|----------|----------|
|
|
28
|
+
| `addEntry()` | Appends a blank entry and auto-expands it |
|
|
29
|
+
| `removeEntry(index)` | Removes entry and adjusts the expanded indices set |
|
|
30
|
+
| `updateEntry(index, field, value)` | Immutably updates a single field on an entry |
|
|
31
|
+
| `toggleExpanded(index)` | Toggles accordion open/close state |
|
|
32
|
+
| `toggleVisibility(index)` | Flips `visibility` between `'public'` and `'internal'` |
|
|
10
33
|
|
|
11
34
|
## Usage Example
|
|
12
35
|
|
|
@@ -14,20 +37,23 @@ A client-side React component for managing changelog entries with expandable/col
|
|
|
14
37
|
import { ChangelogManager } from './changelog-manager';
|
|
15
38
|
import type { ChangelogEntry } from '../../types/product-release';
|
|
16
39
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
40
|
+
const [entries, setEntries] = useState<ChangelogEntry[]>([]);
|
|
41
|
+
|
|
42
|
+
// Basic product release changelog
|
|
43
|
+
<ChangelogManager
|
|
44
|
+
title="What's New"
|
|
45
|
+
entries={entries}
|
|
46
|
+
onChange={setEntries}
|
|
47
|
+
/>
|
|
48
|
+
|
|
49
|
+
// Investor update with visibility control + auto-expand after AI fill
|
|
50
|
+
<ChangelogManager
|
|
51
|
+
title="Highlights"
|
|
52
|
+
entries={entries}
|
|
53
|
+
onChange={setEntries}
|
|
54
|
+
showVisibilityToggle
|
|
55
|
+
expandAll={aiEnrichmentComplete}
|
|
56
|
+
/>
|
|
31
57
|
```
|
|
32
58
|
|
|
33
|
-
|
|
59
|
+
> **Note:** `showVisibilityToggle` is intended for investor update flows. Leave it unset for standard product release changelogs to preserve their default UX. New entries default to `visibility: 'public'` when the toggle is enabled.
|