@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
|
@@ -1,47 +1,51 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A client-side React component that renders a responsive grid of feature cards with
|
|
1
|
+
<!-- source-hash: 6c49039417df243ab2c6d3b41c998928 -->
|
|
2
|
+
A client-side React component that renders a responsive grid of feature cards with configurable layouts, borders, backgrounds, icons, and status badges.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
###
|
|
7
|
-
- **`FeatureCardItem`**
|
|
8
|
-
- **`FeatureCardGridProps`** -
|
|
6
|
+
### Interfaces
|
|
7
|
+
- **`FeatureCardItem`** — Defines individual card data: icon, title, badge, content, and per-card style overrides (`removeAllBorders`, `noBackground`, `customBackground`)
|
|
8
|
+
- **`FeatureCardGridProps`** — Grid-level configuration: items array, column count, class overrides, border/background/gap controls
|
|
9
9
|
|
|
10
|
-
###
|
|
11
|
-
- **`FeatureCardGrid`**
|
|
10
|
+
### Exports
|
|
11
|
+
- **`FeatureCardGrid`** — Main component rendering a `Card` wrapper with a responsive CSS grid, dynamically computing row/column borders and applying per-item style overrides
|
|
12
12
|
|
|
13
13
|
## Usage Example
|
|
14
14
|
|
|
15
15
|
```typescript
|
|
16
|
-
import { FeatureCardGrid } from './feature-card';
|
|
17
|
-
import {
|
|
16
|
+
import { FeatureCardGrid, FeatureCardItem } from './feature-card';
|
|
17
|
+
import { ShieldIcon } from 'lucide-react';
|
|
18
18
|
|
|
19
|
-
const
|
|
19
|
+
const items: FeatureCardItem[] = [
|
|
20
20
|
{
|
|
21
|
-
icon:
|
|
22
|
-
iconColor: '#
|
|
23
|
-
title: '
|
|
24
|
-
badge: {
|
|
25
|
-
|
|
26
|
-
variant: 'card' as const,
|
|
27
|
-
colorScheme: 'cyan' as const
|
|
28
|
-
},
|
|
29
|
-
content: <p>Real-time data insights and reporting</p>
|
|
21
|
+
icon: ShieldIcon,
|
|
22
|
+
iconColor: '#FFC008',
|
|
23
|
+
title: 'Automated Patching',
|
|
24
|
+
badge: { text: 'New', colorScheme: 'green' },
|
|
25
|
+
content: <p>Keep endpoints secure with zero-touch patch management.</p>,
|
|
30
26
|
},
|
|
31
27
|
{
|
|
32
|
-
title: '
|
|
33
|
-
content: <
|
|
34
|
-
noBackground: true
|
|
35
|
-
}
|
|
28
|
+
title: 'AI Triage',
|
|
29
|
+
content: <p>Mingo AI resolves tickets before a technician is needed.</p>,
|
|
30
|
+
noBackground: true,
|
|
31
|
+
},
|
|
36
32
|
];
|
|
37
33
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
34
|
+
export default function Page() {
|
|
35
|
+
return (
|
|
36
|
+
<FeatureCardGrid
|
|
37
|
+
items={items}
|
|
38
|
+
columns={2}
|
|
39
|
+
cardGap="gap-6"
|
|
40
|
+
showBorders={true}
|
|
41
|
+
roundedCorners={true}
|
|
42
|
+
/>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
## Notes
|
|
48
|
+
|
|
49
|
+
- Border logic is **responsive-aware**: right borders are hidden on mobile (single column) and shown on desktop only where appropriate
|
|
50
|
+
- When **all items** share `noBackground` or `removeAllBorders`, the outer `Card` container is also updated to match, avoiding visual inconsistencies
|
|
51
|
+
- `content` accepts any `React.ReactNode`, making cards fully composable for marketing pages, feature showcases, or dashboard layouts
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: de46e328067be52e6b8316046dcf529b -->
|
|
2
|
+
A client-side React component that renders a styled vertical list of feature items, each with an icon, title, and description.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
- **`FeatureListItemData`** — Shape of each list item: `icon` (ReactNode), `title` (string), `description` (string)
|
|
8
|
+
- **`FeatureListProps`** — Component props: `items` array, optional `className`, optional `iconBoxSize` (default: `72`)
|
|
9
|
+
|
|
10
|
+
### Component
|
|
11
|
+
- **`FeatureList`** — Renders a bordered card list where each row displays a square icon box alongside a title and description. Dividers are automatically added between items.
|
|
12
|
+
|
|
13
|
+
## Usage Example
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { FeatureList, FeatureListItemData } from './feature-list';
|
|
17
|
+
import { ShieldIcon, ZapIcon, CloudIcon } from 'lucide-react';
|
|
18
|
+
|
|
19
|
+
const features: FeatureListItemData[] = [
|
|
20
|
+
{
|
|
21
|
+
icon: <ShieldIcon size={32} />,
|
|
22
|
+
title: 'Secure by Default',
|
|
23
|
+
description: 'All connections are encrypted end-to-end.',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
icon: <ZapIcon size={32} />,
|
|
27
|
+
title: 'Lightning Fast',
|
|
28
|
+
description: 'Sub-100ms response times across all regions.',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
icon: <CloudIcon size={32} />,
|
|
32
|
+
title: 'Cloud Native',
|
|
33
|
+
description: 'Built for scalable, distributed infrastructure.',
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
export default function Page() {
|
|
38
|
+
return (
|
|
39
|
+
<FeatureList
|
|
40
|
+
items={features}
|
|
41
|
+
iconBoxSize={64}
|
|
42
|
+
className="max-w-xl"
|
|
43
|
+
/>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
> **Note:** The `iconBoxSize` prop controls both width and height of the icon container in pixels. Icon content is not automatically sized — size your icon element to fit within the box.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- source-hash: 0d873ee81fa30b5916e604a92d4925d2 -->
|
|
2
|
+
A layout wrapper component that provides consistent label and error message chrome for form fields, with reserved space to prevent layout shifts.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `FieldWrapper`
|
|
7
|
+
A `forwardRef` component that wraps form field children with optional label and error/warning message display.
|
|
8
|
+
|
|
9
|
+
### `FieldWrapperProps`
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
|------|------|---------|-------------|
|
|
12
|
+
| `label` | `string` | — | Label text rendered above the field |
|
|
13
|
+
| `error` | `string` | — | Error message rendered below the field |
|
|
14
|
+
| `errorVariant` | `"error" \| "warning"` | `"error"` | Controls error text color (red vs yellow) |
|
|
15
|
+
| `className` | `string` | — | Additional classes for the outer wrapper |
|
|
16
|
+
| `children` | `React.ReactNode` | — | The form field element(s) |
|
|
17
|
+
|
|
18
|
+
### Behavior Notes
|
|
19
|
+
- When neither `label` nor `error` is provided, the wrapper renders as `contents` (no extra DOM box).
|
|
20
|
+
- The error message is absolutely positioned (`translate-y-full`) below the field, preventing layout shifts in the surrounding form.
|
|
21
|
+
- Long error messages are `truncate`d with the full text accessible via the `title` attribute.
|
|
22
|
+
|
|
23
|
+
## Usage Example
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { FieldWrapper } from "./field-wrapper"
|
|
27
|
+
import { TextInput } from "./text-input"
|
|
28
|
+
|
|
29
|
+
// Standard field with label and error
|
|
30
|
+
<FieldWrapper label="Email address" error="Invalid email format">
|
|
31
|
+
<TextInput type="email" value={email} onChange={handleChange} />
|
|
32
|
+
</FieldWrapper>
|
|
33
|
+
|
|
34
|
+
// Warning variant
|
|
35
|
+
<FieldWrapper
|
|
36
|
+
label="Username"
|
|
37
|
+
error="Username is already taken"
|
|
38
|
+
errorVariant="warning"
|
|
39
|
+
>
|
|
40
|
+
<TextInput value={username} onChange={handleChange} />
|
|
41
|
+
</FieldWrapper>
|
|
42
|
+
|
|
43
|
+
// No chrome — wrapper renders as contents
|
|
44
|
+
<FieldWrapper>
|
|
45
|
+
<TextInput placeholder="Search..." />
|
|
46
|
+
</FieldWrapper>
|
|
47
|
+
```
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- source-hash: cf353b09cad830f836030fb8046e62bc -->
|
|
2
|
+
A flexible React dropzone component supporting both simple file selection and async managed upload workflows, with drag-and-drop, validation, and file list rendering.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
- **`ManagedFileEntry`** — Represents an async-uploaded file with `id`, `fileName`, `fileSize`, `status` (`uploading` | `uploaded` | `error`), and optional `error` message
|
|
8
|
+
- **`FileUploadProps`** — Full prop interface supporting both simple (`value`/`onChange`) and managed (`managedFiles`/`onRemoveManagedFile`) modes
|
|
9
|
+
|
|
10
|
+
### Helpers
|
|
11
|
+
- **`formatFileSize(bytes)`** — Converts bytes to human-readable string (B, KB, MB, GB)
|
|
12
|
+
- **`matchesAccept(file, accept)`** — Validates a file against an accept string (MIME types, extensions, wildcards)
|
|
13
|
+
- **`dragHasFiles(e)`** — Detects if a native drag event carries file data
|
|
14
|
+
|
|
15
|
+
### Component
|
|
16
|
+
- **`FileUpload`** — Main export; renders a dropzone button (when empty) or file list (when files exist), with optional window-level drop capture via `acceptWindowDrops`
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// Simple single-file mode
|
|
22
|
+
<FileUpload
|
|
23
|
+
value={file}
|
|
24
|
+
onChange={(f) => setFile(f as File)}
|
|
25
|
+
accept="image/*"
|
|
26
|
+
maxSize={5 * 1024 * 1024}
|
|
27
|
+
fieldLabel="Profile Photo"
|
|
28
|
+
/>
|
|
29
|
+
|
|
30
|
+
// Async managed upload mode
|
|
31
|
+
<FileUpload
|
|
32
|
+
onChange={(files) => uploadToS3(files as File[])}
|
|
33
|
+
managedFiles={managedFiles}
|
|
34
|
+
onRemoveManagedFile={(id) => removeManagedFile(id)}
|
|
35
|
+
multiple
|
|
36
|
+
maxFiles={5}
|
|
37
|
+
acceptWindowDrops
|
|
38
|
+
label="Drop attachments here"
|
|
39
|
+
/>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> **Tip:** Use `managedFiles` + `onRemoveManagedFile` for presigned URL or background upload flows where upload status (`uploading` | `uploaded` | `error`) needs to be reflected in the UI. Use plain `value`/`onChange` for synchronous or form-controlled scenarios.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- source-hash: 80c3e1ef5a8303ea358c8f94bbacb69d -->
|
|
2
|
+
A client-side checkbox item component for filter lists, built on Radix UI's Checkbox primitive with optional count display and ODS design tokens.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `FilterCheckboxItemProps`
|
|
7
|
+
| Prop | Type | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| `label` | `string` | Display text for the checkbox item |
|
|
10
|
+
| `checked` | `boolean` | Controlled checked state |
|
|
11
|
+
| `onChange` | `(checked: boolean) => void` | Callback fired on toggle |
|
|
12
|
+
| `count` | `number` (optional) | Item count displayed on the right |
|
|
13
|
+
| `className` | `string` (optional) | Additional CSS classes |
|
|
14
|
+
|
|
15
|
+
### `FilterCheckboxItem`
|
|
16
|
+
A styled, accessible checkbox row that supports full-row click toggling. When `count` is provided, padding adjusts and the count renders as secondary text on the trailing edge.
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { FilterCheckboxItem } from "./filter-checkbox-item"
|
|
22
|
+
import { useState } from "react"
|
|
23
|
+
|
|
24
|
+
function FilterPanel() {
|
|
25
|
+
const [active, setActive] = useState(false)
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<FilterCheckboxItem
|
|
29
|
+
label="Active Tickets"
|
|
30
|
+
checked={active}
|
|
31
|
+
onChange={setActive}
|
|
32
|
+
count={42}
|
|
33
|
+
/>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Notes
|
|
39
|
+
|
|
40
|
+
- Clicking anywhere on the row toggles the checkbox; the Radix `Root` has `stopPropagation` to avoid double-firing.
|
|
41
|
+
- The checkmark icon renders only when `checked` is `true` via Radix's `Indicator`.
|
|
42
|
+
- Count values are formatted with `toLocaleString()` for locale-aware number display.
|
|
43
|
+
- Styled with ODS design tokens (`ods-accent`, `ods-card`, `ods-border`, etc.) for consistency across the Flamingo UI.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!-- source-hash: 266230e3eb0a6c70e91f5bde060a9529 -->
|
|
2
|
+
A accessible, interactive filter list UI component built with Radix UI checkboxes, supporting both single and multi-select modes with keyboard navigation.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `FilterListItem`
|
|
7
|
+
A single selectable row with a title, optional metadata badges, and a Radix UI checkbox. Supports keyboard interaction (`Enter`/`Space`), disabled state, and selected highlighting using ODS design tokens.
|
|
8
|
+
|
|
9
|
+
**Props (`FilterListItemProps`):**
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Description |
|
|
12
|
+
|------|------|-------------|
|
|
13
|
+
| `title` | `string` | Display label for the item |
|
|
14
|
+
| `meta` | `Array<string \| number>` | Optional bullet-separated metadata |
|
|
15
|
+
| `selected` | `boolean` | Whether the item is checked |
|
|
16
|
+
| `onToggle` | `(selected: boolean) => void` | Callback on selection change |
|
|
17
|
+
| `disabled` | `boolean` | Disables interaction |
|
|
18
|
+
| `className` | `string` | Additional CSS classes |
|
|
19
|
+
|
|
20
|
+
### `FilterList<T>`
|
|
21
|
+
A container that manages a collection of `FilterListItem` entries with controlled selection state. Supports generic item `data` typing for strongly-typed payloads.
|
|
22
|
+
|
|
23
|
+
**Props (`FilterListProps<T>`):**
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Description |
|
|
26
|
+
|------|------|-------------|
|
|
27
|
+
| `items` | `Array<{ id, title, meta?, disabled?, data? }>` | List of items to render |
|
|
28
|
+
| `selectedIds` | `string[]` | Currently selected item IDs |
|
|
29
|
+
| `onChange` | `(selectedIds: string[]) => void` | Fires when selection changes |
|
|
30
|
+
| `multiple` | `boolean` | Enables multi-select (default: `true`) |
|
|
31
|
+
|
|
32
|
+
## Usage Example
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { FilterList } from "@/components/filter-list"
|
|
36
|
+
|
|
37
|
+
const items = [
|
|
38
|
+
{ id: "win", title: "Windows", meta: ["Workstation", 42] },
|
|
39
|
+
{ id: "mac", title: "macOS", meta: ["Laptop", 18] },
|
|
40
|
+
{ id: "linux", title: "Linux", meta: ["Server", 7], disabled: true },
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
function DeviceFilter() {
|
|
44
|
+
const [selected, setSelected] = React.useState<string[]>(["win"])
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<FilterList
|
|
48
|
+
items={items}
|
|
49
|
+
selectedIds={selected}
|
|
50
|
+
onChange={setSelected}
|
|
51
|
+
multiple={true}
|
|
52
|
+
/>
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> For single-select mode (e.g. priority filters), set `multiple={false}` — selecting a new item automatically deselects the previous one.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<!-- source-hash: 0a032d083c46e509f8e9dcfa0550baef -->
|
|
2
|
+
A modal dialog component for sorting and filtering table data, combining checkbox filter groups, column sorting, and tag key-value filters into a unified UI with loading and empty states.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `FilterModal`
|
|
7
|
+
Main exported component that renders a `ModalV2`-based dialog with three content sections and footer action buttons.
|
|
8
|
+
|
|
9
|
+
### Exported Types
|
|
10
|
+
|
|
11
|
+
| Type | Description |
|
|
12
|
+
|------|-------------|
|
|
13
|
+
| `FilterModalOption` | Single filter option with `id`, `label`, and optional `count` |
|
|
14
|
+
| `FilterGroup` | Named group of `FilterModalOption` items |
|
|
15
|
+
| `FilterModalProps` | Full props interface for `FilterModal` |
|
|
16
|
+
| `SortConfig`, `SortDirection`, `SortableColumn` | Re-exported from `sort-column-item` |
|
|
17
|
+
| `TagKeyConfig`, `TagValueOption` | Re-exported from `tag-key-value-filter` |
|
|
18
|
+
|
|
19
|
+
### Internal Behavior
|
|
20
|
+
- **Local state** (`selectedFilters`, `pendingTags`) buffers user selections until **Apply** is clicked
|
|
21
|
+
- **Reset** clears all filters and tags immediately via `onFilterChange({})` and `onTagsChange?.([])`
|
|
22
|
+
- **Sync on open** — `useEffect` resets local state to `currentFilters`/`selectedTags` whenever the modal opens
|
|
23
|
+
- **Empty state** renders when no sort columns, filter groups, or tag filters are present
|
|
24
|
+
- **Loading state** renders skeleton placeholders when `isLoading` is `true`
|
|
25
|
+
|
|
26
|
+
## Usage Example
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
const [filters, setFilters] = useState<TableFilters>({})
|
|
30
|
+
const [tags, setTags] = useState<string[]>([])
|
|
31
|
+
|
|
32
|
+
<FilterModal
|
|
33
|
+
isOpen={isModalOpen}
|
|
34
|
+
onClose={() => setIsModalOpen(false)}
|
|
35
|
+
filterGroups={[
|
|
36
|
+
{
|
|
37
|
+
id: 'status',
|
|
38
|
+
title: 'Status',
|
|
39
|
+
options: [
|
|
40
|
+
{ id: 'active', label: 'Active', count: 12 },
|
|
41
|
+
{ id: 'inactive', label: 'Inactive', count: 4 },
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
]}
|
|
45
|
+
sortConfig={{
|
|
46
|
+
title: 'Sort By',
|
|
47
|
+
sortBy: 'name',
|
|
48
|
+
sortDirection: 'asc',
|
|
49
|
+
columns: [{ key: 'name', label: 'Name' }],
|
|
50
|
+
}}
|
|
51
|
+
onSort={(column, direction) => console.log(column, direction)}
|
|
52
|
+
onFilterChange={setFilters}
|
|
53
|
+
currentFilters={filters}
|
|
54
|
+
tagFilterKeys={[{ key: 'env', label: 'Environment', values: [] }]}
|
|
55
|
+
selectedTags={tags}
|
|
56
|
+
onTagsChange={setTags}
|
|
57
|
+
isLoading={false}
|
|
58
|
+
/>
|
|
59
|
+
```
|
|
@@ -1,41 +1,58 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A floating tooltip component built with
|
|
1
|
+
<!-- source-hash: c7355b336531eeee83c49994040e5cbf -->
|
|
2
|
+
A floating tooltip component built with `@floating-ui/react` that supports smart positioning, directional arrows, and inline color markup parsing.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- **
|
|
6
|
+
### `FloatingTooltip`
|
|
7
|
+
The main exported component. Renders a portal-based tooltip with:
|
|
8
|
+
- **Auto-positioning** via `flip`, `shift`, and `offset` middleware — avoids viewport clipping
|
|
9
|
+
- **Arrow indicator** that dynamically repositions based on the resolved placement
|
|
10
|
+
- **Hover interaction** with configurable open delay and safe polygon close detection
|
|
11
|
+
- **`disabled` prop** — suppresses tooltip without unmounting the trigger wrapper
|
|
12
|
+
|
|
13
|
+
### `parseColoredText` (internal)
|
|
14
|
+
Parses `[COLOR]text[/COLOR]` markup within string content and maps it to ODS CSS classes:
|
|
15
|
+
|
|
16
|
+
| Tag | Tailwind Class |
|
|
17
|
+
|-----|----------------|
|
|
18
|
+
| `[YELLOW]` | `text-ods-accent` |
|
|
19
|
+
| `[GREEN]` | `text-ods-success` |
|
|
20
|
+
| `[RED]` | `text-ods-error` |
|
|
21
|
+
| `[BLUE]` / `[CYAN]` | `text-ods-info` |
|
|
22
|
+
| `[PINK]` | `text-ods-accent` |
|
|
23
|
+
|
|
24
|
+
### `FloatingTooltipProps`
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Default | Description |
|
|
27
|
+
|------|------|---------|-------------|
|
|
28
|
+
| `content` | `React.ReactNode` | — | Tooltip body; strings support color markup |
|
|
29
|
+
| `children` | `React.ReactNode` | — | Trigger element |
|
|
30
|
+
| `side` | `"top" \| "right" \| "bottom" \| "left"` | `"right"` | Preferred placement |
|
|
31
|
+
| `delayDuration` | `number` | `0` | Open delay in ms |
|
|
32
|
+
| `disabled` | `boolean` | `false` | Suppresses tooltip |
|
|
33
|
+
| `className` | `string` | — | Extra classes on the tooltip panel |
|
|
9
34
|
|
|
10
35
|
## Usage Example
|
|
11
36
|
|
|
12
37
|
```typescript
|
|
13
|
-
import { FloatingTooltip } from
|
|
38
|
+
import { FloatingTooltip } from "./floating-tooltip"
|
|
14
39
|
|
|
15
|
-
// Basic
|
|
16
|
-
<FloatingTooltip content="
|
|
17
|
-
<button>
|
|
40
|
+
// Basic usage
|
|
41
|
+
<FloatingTooltip content="Save changes">
|
|
42
|
+
<button>Save</button>
|
|
18
43
|
</FloatingTooltip>
|
|
19
44
|
|
|
20
|
-
//
|
|
21
|
-
<FloatingTooltip
|
|
22
|
-
content="Status: [GREEN]
|
|
23
|
-
side="
|
|
45
|
+
// With color markup and delay
|
|
46
|
+
<FloatingTooltip
|
|
47
|
+
content="Status: [GREEN]Online[/GREEN] — [YELLOW]1 warning[/YELLOW]"
|
|
48
|
+
side="top"
|
|
24
49
|
delayDuration={300}
|
|
25
50
|
>
|
|
26
|
-
<
|
|
27
|
-
Status Icon
|
|
28
|
-
</div>
|
|
51
|
+
<span>Hover me</span>
|
|
29
52
|
</FloatingTooltip>
|
|
30
53
|
|
|
31
|
-
//
|
|
32
|
-
<FloatingTooltip
|
|
33
|
-
|
|
34
|
-
className="bg-red-100 border-red-300"
|
|
35
|
-
side="bottom"
|
|
36
|
-
>
|
|
37
|
-
<span>Custom Element</span>
|
|
54
|
+
// Disabled (wrapper renders, tooltip suppressed)
|
|
55
|
+
<FloatingTooltip content="Hidden tip" disabled>
|
|
56
|
+
<button>No tooltip</button>
|
|
38
57
|
</FloatingTooltip>
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
The component supports color markup (`[YELLOW]`, `[GREEN]`, `[RED]`, `[BLUE]`, `[PINK]`, `[CYAN]`) that maps to ODS design system color classes, includes an arrow pointer, and handles positioning automatically with collision detection and fallback positioning.
|
|
58
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- source-hash: cc1ede727d1bab8a8e8ff3b969595614 -->
|
|
2
|
+
A floating popup component that displays a list of hidden tag items with optional remove functionality, typically used in multi-select inputs when tags overflow the visible area.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
| Interface | Description |
|
|
9
|
+
|-----------|-------------|
|
|
10
|
+
| `HiddenTagItem` | Defines a tag item with a `label` (ReactNode) and `value` (unknown) |
|
|
11
|
+
| `HiddenTagsPopupProps` | Props for the popup including `items`, `onRemove`, `disabled`, `className`, and `style` |
|
|
12
|
+
|
|
13
|
+
### Exports
|
|
14
|
+
|
|
15
|
+
- **`HiddenTagsPopup`** — A `forwardRef` component rendering an absolutely-positioned dropdown card listing overflow tags. Each item shows a truncated uppercase label and an optional remove button (`XmarkCircleIcon`) when `onRemove` is provided and `disabled` is false.
|
|
16
|
+
|
|
17
|
+
## Usage Example
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import { HiddenTagsPopup, HiddenTagItem } from "./hidden-tags-popup"
|
|
21
|
+
|
|
22
|
+
const overflowTags: HiddenTagItem[] = [
|
|
23
|
+
{ label: "Engineering", value: "engineering" },
|
|
24
|
+
{ label: "Design", value: "design" },
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
function TagSelector() {
|
|
28
|
+
const handleRemove = (value: unknown) => {
|
|
29
|
+
console.log("Remove tag:", value)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div style={{ position: "relative" }}>
|
|
34
|
+
<HiddenTagsPopup
|
|
35
|
+
items={overflowTags}
|
|
36
|
+
onRemove={handleRemove}
|
|
37
|
+
disabled={false}
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
|
|
46
|
+
- Renders with `z-50` and `top-full` positioning — expects a relatively-positioned parent container.
|
|
47
|
+
- Includes entrance animation via `animate-in fade-in-0 zoom-in-95`.
|
|
48
|
+
- Remove button uses `e.stopPropagation()` to prevent unintended parent click events.
|
|
49
|
+
- Accessible via `aria-label` on each remove button.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<!-- source-hash: eee1f55a6c5cf2349c0897b18c2dfcf1 -->
|
|
2
|
+
A reusable hover-triggered dropdown component that displays a list of clickable items. Uses fixed positioning via `getBoundingClientRect` to render correctly inside overflow-hidden containers like modals and sheets.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
| Export | Description |
|
|
9
|
+
|--------|-------------|
|
|
10
|
+
| `HoverDropdownItem` | Defines each row: `label`, optional `icon`, `href`, `onClick`, `targetPlatform`, `path`, and an independent `secondaryAction` button |
|
|
11
|
+
| `HoverDropdownRenderAnchorArgs` | Arguments passed to the `renderAnchor` slot for custom link routing |
|
|
12
|
+
| `HoverDropdownProps` | Component props: `items`, `side`, `hideDelay`, `className`, `renderAnchor` |
|
|
13
|
+
|
|
14
|
+
### Component
|
|
15
|
+
|
|
16
|
+
**`HoverDropdown`** — Main export. Wraps any trigger element and shows a positioned dropdown on hover (or tap). Each row supports three render modes:
|
|
17
|
+
- **Link row** — rendered via `renderAnchor` (defaults to plain `<a>`)
|
|
18
|
+
- **Button row** — rendered as `<button>` when `onClick` is provided
|
|
19
|
+
- **Non-interactive row** — rendered as `<span>` when neither `href` nor `onClick` is present (useful when only a `secondaryAction` applies)
|
|
20
|
+
|
|
21
|
+
The dropdown auto-positions right → left → above/below based on available viewport space.
|
|
22
|
+
|
|
23
|
+
## Usage Example
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// Basic usage
|
|
27
|
+
<HoverDropdown items={[{ label: 'Blog Post', href: '/blog/1' }]}>
|
|
28
|
+
<span>Blog Posts (3)</span>
|
|
29
|
+
</HoverDropdown>
|
|
30
|
+
|
|
31
|
+
// With custom anchor renderer (e.g., chat runtime routing)
|
|
32
|
+
<HoverDropdown
|
|
33
|
+
items={[
|
|
34
|
+
{
|
|
35
|
+
label: 'Design Doc',
|
|
36
|
+
href: '/docs/design',
|
|
37
|
+
path: 'docs/design',
|
|
38
|
+
targetPlatform: 'markdown',
|
|
39
|
+
secondaryAction: {
|
|
40
|
+
icon: <AskIcon />,
|
|
41
|
+
label: 'Ask about this',
|
|
42
|
+
onClick: () => handleAsk('design'),
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
]}
|
|
46
|
+
renderAnchor={({ href, className, children }) => (
|
|
47
|
+
<NavLinkAnchorViaRuntime href={href} className={className}>
|
|
48
|
+
{children}
|
|
49
|
+
</NavLinkAnchorViaRuntime>
|
|
50
|
+
)}
|
|
51
|
+
>
|
|
52
|
+
<Chip>Documents</Chip>
|
|
53
|
+
</HoverDropdown>
|
|
54
|
+
```
|