@flamingo-stack/openframe-frontend-core 0.0.213 → 0.0.214
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3JWIJJ44.js → chunk-5OWDOFKK.js} +2 -2
- package/dist/{chunk-IK2X5YJU.js → chunk-HWY35EAK.js} +2 -2
- package/dist/{chunk-OTKJASSX.cjs → chunk-IZL2KEH6.cjs} +24 -24
- package/dist/{chunk-OTKJASSX.cjs.map → chunk-IZL2KEH6.cjs.map} +1 -1
- package/dist/{chunk-35XIT2CF.cjs → chunk-KDNGUYZM.cjs} +17 -17
- package/dist/{chunk-35XIT2CF.cjs.map → chunk-KDNGUYZM.cjs.map} +1 -1
- package/dist/{chunk-ZTJVRSN5.js → chunk-UKND27XC.js} +2 -2
- package/dist/chunk-UKND27XC.js.map +1 -0
- package/dist/{chunk-ZDF6F7ED.cjs → chunk-YZUUFTIK.cjs} +2 -2
- package/dist/chunk-YZUUFTIK.cjs.map +1 -0
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/index.cjs +49 -49
- package/dist/components/index.js +2 -2
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/tickets/index.cjs +61 -61
- package/dist/components/tickets/index.js +3 -3
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/.index.md +36 -34
- package/src/components/.alert-dialog.md +27 -23
- package/src/components/.announcement-bar.md +26 -21
- package/src/components/.breadcrumb.md +19 -15
- package/src/components/.calendar.md +24 -19
- package/src/components/.categories-cart.md +29 -24
- package/src/components/.checkbox.md +23 -25
- package/src/components/.chevron-button.md +37 -32
- package/src/components/.comment-card.md +32 -62
- package/src/components/.dialog.md +26 -26
- package/src/components/.dynamic-skeleton.md +54 -57
- package/src/components/.empty-state.md +42 -51
- package/src/components/.faq-accordion.md +27 -21
- package/src/components/.filter-chip.md +41 -24
- package/src/components/.flamingo-logo.md +20 -23
- package/src/components/.footer-waitlist-button.md +29 -22
- package/src/components/.footer.md +32 -32
- package/src/components/.icons-block.md +27 -17
- package/src/components/.image-cropper.md +41 -32
- package/src/components/.index.md +33 -39
- package/src/components/.input.md +31 -35
- package/src/components/.logs-list.md +31 -20
- package/src/components/.media-carousel.md +35 -36
- package/src/components/.open-source-features.md +33 -16
- package/src/components/.pagination.md +52 -51
- package/src/components/.provider-button.md +21 -23
- package/src/components/.select.md +31 -20
- package/src/components/.sidebar.md +34 -24
- package/src/components/.smooth-accordion.md +29 -24
- package/src/components/.social-icon-row.md +36 -32
- package/src/components/.textarea.md +25 -31
- package/src/components/.tool-icon.md +24 -26
- package/src/components/.unified-filter-logic.md +37 -30
- package/src/components/.unified-pagination.md +23 -22
- package/src/components/.user-summary-stub.md +38 -22
- package/src/components/.vendor-display-button.md +25 -25
- package/src/components/.vendor-icon.md +33 -25
- package/src/components/.why-it-matters.md +28 -25
- package/src/components/chat/.approval-batch-message.md +51 -0
- package/src/components/chat/.approval-request-message.md +35 -34
- package/src/components/chat/.chat-attachment-bar.md +64 -0
- package/src/components/chat/.chat-container.md +36 -18
- package/src/components/chat/.chat-input.md +37 -20
- package/src/components/chat/.chat-message-enhanced.md +30 -49
- package/src/components/chat/.chat-message-list.md +45 -32
- package/src/components/chat/.chat-message-skeleton.md +26 -22
- package/src/components/chat/.chat-panel-context.md +52 -0
- package/src/components/chat/.chat-ref.types.md +42 -0
- package/src/components/chat/.chat-sidebar-skeleton.md +34 -25
- package/src/components/chat/.chat-sidebar.md +31 -26
- package/src/components/chat/.chat-ticket-list.md +39 -0
- package/src/components/chat/.context-compaction-display.md +36 -0
- package/src/components/chat/.cycling-phrase.md +52 -0
- package/src/components/chat/.embeddable-chat.md +48 -0
- package/src/components/chat/.expand-chevron.md +24 -0
- package/src/components/chat/.index.md +31 -35
- package/src/components/chat/.mingo-onboarding-card-skeleton.md +44 -0
- package/src/components/chat/.mingo-onboarding-card.md +62 -0
- package/src/components/chat/.model-display.md +32 -30
- package/src/components/chat/.nav-link-anchor-via-runtime.md +40 -0
- package/src/components/chat/.remark-card-links.md +38 -0
- package/src/components/chat/.slash-command-suggestions.md +47 -0
- package/src/components/chat/.source-action-button.md +48 -0
- package/src/components/chat/.thinking-display.md +42 -0
- package/src/components/chat/.tool-call-blocks.md +45 -0
- package/src/components/chat/.tool-execution-display.md +44 -36
- package/src/components/chat/chat-container.tsx +1 -1
- package/src/components/chat/entity-cards/.admin-content-card.md +43 -0
- package/src/components/chat/entity-cards/.block-card.md +47 -0
- package/src/components/chat/entity-cards/.blog-card.md +52 -0
- package/src/components/chat/entity-cards/.blog-image-placeholder.md +39 -0
- package/src/components/chat/entity-cards/.campaign-card-admin.md +47 -0
- package/src/components/chat/entity-cards/.case-study-card.md +58 -0
- package/src/components/chat/entity-cards/.chat-ticket-item.md +40 -0
- package/src/components/chat/entity-cards/.chat-video-entity-card.md +43 -0
- package/src/components/chat/entity-cards/.customer-interview-card.md +53 -0
- package/src/components/chat/entity-cards/.data-room-doc-card.md +47 -0
- package/src/components/chat/entity-cards/.dispatch.md +39 -0
- package/src/components/chat/entity-cards/.entity-author-card.md +51 -0
- package/src/components/chat/entity-cards/.generic-entity-card.md +62 -0
- package/src/components/chat/entity-cards/.github-activity-card.md +61 -0
- package/src/components/chat/entity-cards/.hubspot-ticket-card.md +53 -0
- package/src/components/chat/entity-cards/.index.md +66 -0
- package/src/components/chat/entity-cards/.investor-update-card.md +47 -0
- package/src/components/chat/entity-cards/.onboarding-guide-card.md +58 -0
- package/src/components/chat/entity-cards/.product-release-card-defaults.md +31 -0
- package/src/components/chat/entity-cards/.product-release-card.md +29 -0
- package/src/components/chat/entity-cards/.program-card-defaults.md +41 -0
- package/src/components/chat/entity-cards/.program-card.md +59 -0
- package/src/components/chat/entity-cards/.roadmap-card.md +46 -0
- package/src/components/chat/entity-cards/.roadmap-vote-button.md +52 -0
- package/src/components/chat/entity-cards/.slack-message-card.md +48 -0
- package/src/components/chat/entity-cards/.task-type-icon.md +47 -0
- package/src/components/chat/hooks/.index.md +36 -21
- package/src/components/chat/hooks/.use-chat-attachment-image-gallery.md +51 -0
- package/src/components/chat/hooks/.use-chat-attachments.md +48 -0
- package/src/components/chat/hooks/.use-chat-card-item.md +39 -0
- package/src/components/chat/hooks/.use-chat-identity.md +45 -0
- package/src/components/chat/hooks/.use-chat.md +58 -0
- package/src/components/chat/hooks/.use-chunk-catchup.md +46 -48
- package/src/components/chat/hooks/.use-close-on-navigation.md +44 -0
- package/src/components/chat/hooks/.use-collapsible.md +48 -0
- package/src/components/chat/hooks/.use-embedded-chat.md +32 -0
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +40 -0
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +52 -0
- package/src/components/chat/hooks/.use-nats-dialog-subscription.md +49 -30
- package/src/components/chat/hooks/.use-proxied-image-url.md +40 -0
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +43 -40
- package/src/components/chat/hooks/.use-slash-commands.md +46 -0
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +34 -0
- package/src/components/chat/hooks/.use-sse.md +60 -0
- package/src/components/chat/hooks/.use-unified-chat.md +57 -0
- package/src/components/chat/types/.api.types.md +52 -38
- package/src/components/chat/types/.chat.types.md +43 -34
- package/src/components/chat/types/.component.types.md +47 -48
- package/src/components/chat/types/.index.md +20 -27
- package/src/components/chat/types/.message.types.md +58 -48
- package/src/components/chat/types/.network.types.md +57 -31
- package/src/components/chat/types/.processing.types.md +49 -31
- package/src/components/chat/types/.unified-chat-state.types.md +41 -0
- package/src/components/chat/types/entities/.blog.md +43 -0
- package/src/components/chat/types/entities/.case-study.md +26 -0
- package/src/components/chat/types/entities/.content-ref.md +41 -0
- package/src/components/chat/types/entities/.customer-interview.md +28 -0
- package/src/components/chat/types/entities/.data-room-doc.md +36 -0
- package/src/components/chat/types/entities/.github-activity.md +43 -0
- package/src/components/chat/types/entities/.hubspot-ticket.md +53 -0
- package/src/components/chat/types/entities/.index.md +42 -0
- package/src/components/chat/types/entities/.investor-update.md +45 -0
- package/src/components/chat/types/entities/.onboarding-guide.md +50 -0
- package/src/components/chat/types/entities/.program-types.md +57 -0
- package/src/components/chat/types/entities/.roadmap-item.md +58 -0
- package/src/components/chat/types/entities/.slack-message.md +35 -0
- package/src/components/chat/utils/.agent-status-message.md +45 -0
- package/src/components/chat/utils/.auto-continuation-directive.md +58 -0
- package/src/components/chat/utils/.chat-attachment-markdown.md +54 -0
- package/src/components/chat/utils/.chat-authed-fetch.md +25 -0
- package/src/components/chat/utils/.chat-nav-resolution.md +46 -0
- package/src/components/chat/utils/.chat-proxy-auth-storage.md +38 -0
- package/src/components/chat/utils/.chip-action-class.md +34 -0
- package/src/components/chat/utils/.chip-styles.md +46 -0
- package/src/components/chat/utils/.chunk-parser.md +38 -28
- package/src/components/chat/utils/.clickup-task-type-utils.md +48 -0
- package/src/components/chat/utils/.compact-card-classes.md +62 -0
- package/src/components/chat/utils/.decide-new-tab.md +51 -0
- package/src/components/chat/utils/.external-app-urls.md +29 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +25 -29
- package/src/components/chat/utils/.flatten-assistant-content.md +34 -0
- package/src/components/chat/utils/.icon-registry.md +46 -0
- package/src/components/chat/utils/.index.md +37 -32
- package/src/components/chat/utils/.is-cross-origin-url.md +35 -0
- package/src/components/chat/utils/.message-segment-accumulator.md +25 -34
- package/src/components/chat/utils/.nav-anchor-props.md +44 -0
- package/src/components/chat/utils/.nav-click-handler.md +47 -0
- package/src/components/chat/utils/.onboarding-icons.md +28 -0
- package/src/components/chat/utils/.process-historical-messages.md +46 -35
- package/src/components/chat/utils/.scroll-anchor.md +40 -0
- package/src/components/chat/utils/.slash-dispatch-utils.md +44 -0
- package/src/components/chat/utils/.source-icons.md +35 -0
- package/src/components/chat/utils/.source-row-cta.md +54 -0
- package/src/components/chat/utils/.tool-call-helpers.md +42 -0
- package/src/components/contact/.contact-form.md +43 -0
- package/src/components/contact/.index.md +27 -0
- package/src/components/features/.array-entry-manager.md +36 -45
- package/src/components/features/.changelog-manager.md +47 -21
- package/src/components/features/.changelog-sections-manager.md +21 -26
- package/src/components/features/.command-box.md +31 -28
- package/src/components/features/.entity-summary-editor.md +46 -0
- package/src/components/features/.entity-video-section.md +51 -0
- package/src/components/features/.figma-prototype-viewer.md +48 -29
- package/src/components/features/.filters-dropdown.md +33 -46
- package/src/components/features/.highlight-config-section.md +42 -0
- package/src/components/features/.highlight-generation-section.md +46 -0
- package/src/components/features/.highlight-video-combined-section.md +47 -0
- package/src/components/features/.highlight-video-preview.md +44 -0
- package/src/components/features/.highlight-video-section.md +47 -0
- package/src/components/features/.index.md +40 -66
- package/src/components/features/.media-gallery-manager.md +48 -38
- package/src/components/features/.more-about-button.md +22 -19
- package/src/components/features/.og-editor-preview.md +40 -36
- package/src/components/features/.parallax-image-showcase.md +33 -26
- package/src/components/features/.paths-display.md +42 -43
- package/src/components/features/.platform-badge.md +37 -36
- package/src/components/features/.platform-filter.md +23 -16
- package/src/components/features/.policy-configuration-panel.md +48 -56
- package/src/components/features/.provider-button.md +33 -36
- package/src/components/features/.push-button-selector.md +40 -29
- package/src/components/features/.release-media-manager.md +46 -31
- package/src/components/features/.section-selector.md +26 -31
- package/src/components/features/.select-button.md +35 -25
- package/src/components/features/.seo-editor-preview.md +41 -44
- package/src/components/features/.social-links-manager.md +25 -19
- package/src/components/features/.start-with-openframe-button.md +37 -29
- package/src/components/features/.status-filter-component.md +36 -20
- package/src/components/features/.tags-selector.md +40 -24
- package/src/components/features/.transcribe-and-summarize-combined-section.md +45 -0
- package/src/components/features/.transcribe-summarize-section.md +48 -0
- package/src/components/features/.transcript-summary-editor.md +53 -0
- package/src/components/features/.video-bites-display.md +46 -0
- package/src/components/features/.video-clips-section.md +41 -0
- package/src/components/features/.video-ratio-tabs.md +56 -0
- package/src/components/features/.video-source-selector.md +60 -0
- package/src/components/features/.video.md +44 -0
- package/src/components/features/.waitlist-form.md +60 -0
- package/src/components/features/ai-enrich/.AIEnrichButton.md +30 -27
- package/src/components/features/ai-enrich/.AIEnrichSection.md +46 -42
- package/src/components/features/board/.board-column-header.md +38 -0
- package/src/components/features/board/.board-column.md +43 -0
- package/src/components/features/board/.board.md +51 -0
- package/src/components/features/board/.color-utils.md +26 -0
- package/src/components/features/board/.index.md +56 -0
- package/src/components/features/board/.ticket-card-skeleton.md +38 -0
- package/src/components/features/board/.ticket-card.md +47 -0
- package/src/components/features/board/.types.md +45 -0
- package/src/components/features/board/.use-board-collapse.md +34 -0
- package/src/components/features/notifications/.index.md +57 -0
- package/src/components/features/notifications/.notification-drawer.md +34 -0
- package/src/components/features/notifications/.notification-tile.md +39 -0
- package/src/components/features/notifications/.notifications-context.md +73 -0
- package/src/components/features/notifications/.types.md +45 -0
- package/src/components/icons/.about-icon.md +20 -28
- package/src/components/icons/.ai-robot-icon.md +15 -17
- package/src/components/icons/.bash-icon.md +16 -23
- package/src/components/icons/.buildings-icon.md +10 -24
- package/src/components/icons/.capterra-icon.md +30 -26
- package/src/components/icons/.carta-icon.md +29 -0
- package/src/components/icons/.clickup-icon.md +26 -0
- package/src/components/icons/.cmd-icon.md +15 -22
- package/src/components/icons/.coins-icon.md +17 -25
- package/src/components/icons/.community-hub-icon.md +19 -25
- package/src/components/icons/.community-icon.md +24 -21
- package/src/components/icons/.compare-icon.md +32 -19
- package/src/components/icons/.copy-icon.md +29 -15
- package/src/components/icons/.custom-external-link-icon.md +19 -17
- package/src/components/icons/.custom-fork-icon.md +32 -21
- package/src/components/icons/.custom-license-icon.md +29 -25
- package/src/components/icons/.custom-star-icon.md +20 -28
- package/src/components/icons/.custom-time-icon.md +21 -22
- package/src/components/icons/.cut-vendor-costs-icon.md +6 -19
- package/src/components/icons/.dashboard-icon.md +13 -18
- package/src/components/icons/.deno-icon.md +16 -23
- package/src/components/icons/.donut-icon.md +12 -23
- package/src/components/icons/.double-chevron-icon.md +28 -36
- package/src/components/icons/.elestio-logo.md +13 -23
- package/src/components/icons/.empty-vendor-icon.md +16 -18
- package/src/components/icons/.explore-categories-icon.md +18 -29
- package/src/components/icons/.eye-icon.md +16 -26
- package/src/components/icons/.facebook-icon.md +9 -20
- package/src/components/icons/.figma-icon.md +8 -17
- package/src/components/icons/.filter-icon.md +15 -17
- package/src/components/icons/.flamingo-logo.md +28 -27
- package/src/components/icons/.folder-shield-icon.md +28 -19
- package/src/components/icons/.g2-icon.md +22 -21
- package/src/components/icons/.getapp-icon.md +25 -21
- package/src/components/icons/.github-icon.md +13 -25
- package/src/components/icons/.globe-icon.md +14 -19
- package/src/components/icons/.google-gemini-icon.md +16 -19
- package/src/components/icons/.google-logo.md +15 -21
- package/src/components/icons/.grid-view-icon.md +30 -19
- package/src/components/icons/.hamburger-icon.md +22 -20
- package/src/components/icons/.hand-dollar-icon.md +24 -34
- package/src/components/icons/.hotel-icon.md +27 -21
- package/src/components/icons/.icon-utils.md +28 -29
- package/src/components/icons/.image-icon.md +15 -22
- package/src/components/icons/.index.md +25 -28
- package/src/components/icons/.info-circle-icon.md +29 -30
- package/src/components/icons/.instagram-icon.md +10 -24
- package/src/components/icons/.jump-in-icon.md +18 -18
- package/src/components/icons/.linux-icon.md +18 -18
- package/src/components/icons/.log-out-icon.md +15 -23
- package/src/components/icons/.logs-icon.md +14 -23
- package/src/components/icons/.margin-crisis-icon.md +21 -20
- package/src/components/icons/.menu-icon.md +18 -19
- package/src/components/icons/.miami-cyber-gang-logo-face-only.md +18 -21
- package/src/components/icons/.miami-cyber-gang-logo.md +22 -14
- package/src/components/icons/.mlg-logo.md +18 -16
- package/src/components/icons/.moon-icon.md +32 -22
- package/src/components/icons/.ms-icon.md +30 -19
- package/src/components/icons/.nushell-icon.md +7 -21
- package/src/components/icons/.open-source-icon.md +19 -23
- package/src/components/icons/.openai-icon.md +9 -24
- package/src/components/icons/.openframe-ai-icons.md +25 -26
- package/src/components/icons/.openframe-logo.md +28 -22
- package/src/components/icons/.openframe-text.md +24 -27
- package/src/components/icons/.openmsp-logo.md +26 -23
- package/src/components/icons/.pilot-icon.md +23 -0
- package/src/components/icons/.powershell-icon.md +17 -22
- package/src/components/icons/.python-icon.md +16 -23
- package/src/components/icons/.queries-icon.md +13 -21
- package/src/components/icons/.reddit-icon.md +28 -24
- package/src/components/icons/.remote-control-icon.md +13 -17
- package/src/components/icons/.script-icon.md +27 -19
- package/src/components/icons/.search-icon.md +21 -21
- package/src/components/icons/.send-icon.md +14 -16
- package/src/components/icons/.settings-icon.md +30 -19
- package/src/components/icons/.shape-circle-dash-icon.md +16 -21
- package/src/components/icons/.shell-icon.md +15 -19
- package/src/components/icons/.shield-check-icon.md +18 -31
- package/src/components/icons/.shield-key-icon.md +25 -25
- package/src/components/icons/.shield-lock-icon.md +8 -18
- package/src/components/icons/.slack-icon.md +28 -32
- package/src/components/icons/.sparkles-icon.md +18 -23
- package/src/components/icons/.sso-configuration-icon.md +29 -16
- package/src/components/icons/.sun-icon.md +20 -18
- package/src/components/icons/.table-view-icon.md +17 -19
- package/src/components/icons/.telegram-icon.md +8 -22
- package/src/components/icons/.thumbs-down-icon.md +10 -19
- package/src/components/icons/.thumbs-up-icon.md +8 -17
- package/src/components/icons/.tool-directory-icons.md +24 -28
- package/src/components/icons/.trustpilot-icon.md +25 -22
- package/src/components/icons/.user-icon.md +26 -28
- package/src/components/icons/.users-group-icon.md +28 -24
- package/src/components/icons/.vendor-showcase-icons.md +21 -29
- package/src/components/icons/.vendors-icon.md +18 -22
- package/src/components/icons/.whatsapp-icon.md +30 -14
- package/src/components/icons/.x-icon.md +18 -23
- package/src/components/icons/.x-logo.md +13 -38
- package/src/components/icons/.youtube-icon.md +8 -19
- package/src/components/icons/device-type-icons/.get-device-type-icon.md +26 -34
- package/src/components/icons-v2-generated/.index.md +52 -0
- package/src/components/icons-v2-generated/alphabet/.index.md +33 -0
- package/src/components/icons-v2-generated/arrows/.index.md +39 -0
- package/src/components/icons-v2-generated/audio-and-visual/.index.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.elestio-logo-icon.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.gemini-logo-icon.md +37 -0
- package/src/components/icons-v2-generated/brand-logos/.google-gemini-logo-icon.md +33 -0
- package/src/components/icons-v2-generated/brand-logos/.index.md +38 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-grey-icon.md +35 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-icon.md +36 -0
- package/src/components/icons-v2-generated/buildings/.index.md +48 -0
- package/src/components/icons-v2-generated/charts/.index.md +40 -0
- package/src/components/icons-v2-generated/clothes/.index.md +48 -0
- package/src/components/icons-v2-generated/coding/.index.md +42 -0
- package/src/components/icons-v2-generated/communication/.index.md +39 -0
- package/src/components/icons-v2-generated/date-and-time/.index.md +29 -0
- package/src/components/icons-v2-generated/design/.index.md +39 -0
- package/src/components/icons-v2-generated/devices/.index.md +38 -0
- package/src/components/icons-v2-generated/documents/.index.md +38 -0
- package/src/components/icons-v2-generated/finance/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.leafy-green-icon.md +36 -0
- package/src/components/icons-v2-generated/food-and-drinks/.strawberry-icon.md +39 -0
- package/src/components/icons-v2-generated/health/.index.md +40 -0
- package/src/components/icons-v2-generated/household/.index.md +45 -0
- package/src/components/icons-v2-generated/interface/.index.md +36 -0
- package/src/components/icons-v2-generated/map-and-travel/.index.md +41 -0
- package/src/components/icons-v2-generated/media-playback/.index.md +51 -0
- package/src/components/icons-v2-generated/number/.index.md +41 -0
- package/src/components/icons-v2-generated/school/.index.md +37 -0
- package/src/components/icons-v2-generated/security/.fingerprint-icon.md +38 -0
- package/src/components/icons-v2-generated/security/.index.md +39 -0
- package/src/components/icons-v2-generated/shopping/.index.md +42 -0
- package/src/components/icons-v2-generated/signs-and-symbols/.index.md +32 -0
- package/src/components/icons-v2-generated/sort-and-filter/.index.md +35 -0
- package/src/components/icons-v2-generated/sport/.index.md +41 -0
- package/src/components/icons-v2-generated/text-editor/.index.md +44 -0
- package/src/components/icons-v2-generated/users/.index.md +45 -0
- package/src/components/icons-v2-generated/vehicles-and-delivery/.index.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.flower-sakura-icon.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.index.md +34 -0
- package/src/components/layout/.article-detail-layout.md +43 -0
- package/src/components/layout/.back-button.md +40 -0
- package/src/components/layout/.list-page-layout.md +35 -26
- package/src/components/layout/.page-container.md +27 -38
- package/src/components/layout/.page-layout.md +50 -0
- package/src/components/layout/.title-block.md +42 -0
- package/src/components/loading/.card-skeleton.md +38 -29
- package/src/components/loading/.device-card-skeleton.md +29 -25
- package/src/components/loading/.index.md +39 -46
- package/src/components/loading/.margin-report-skeleton.md +45 -34
- package/src/components/loading/.organization-card-skeleton.md +39 -44
- package/src/components/loading/.page-layout-skeleton.md +34 -45
- package/src/components/loading/.unified-skeleton.md +62 -36
- package/src/components/navigation/.app-header.md +40 -29
- package/src/components/navigation/.app-layout.md +25 -26
- package/src/components/navigation/.header-global-search.md +34 -37
- package/src/components/navigation/.header-organization-filter.md +23 -22
- package/src/components/navigation/.header.md +31 -35
- package/src/components/navigation/.mobile-burger-menu.md +39 -47
- package/src/components/navigation/.mobile-nav-panel.md +51 -32
- package/src/components/navigation/.navigation-sidebar-header.md +36 -0
- package/src/components/navigation/.navigation-sidebar-item.md +45 -0
- package/src/components/navigation/.navigation-sidebar-toggle.md +38 -0
- package/src/components/navigation/.navigation-sidebar.md +33 -34
- package/src/components/navigation/.sliding-sidebar.md +52 -41
- package/src/components/navigation/.sticky-section-nav.md +56 -48
- package/src/components/platform/.ScriptArguments.md +39 -25
- package/src/components/platform/.ScriptInfoSection.md +30 -26
- package/src/components/platform/.ShellTypeBadge.md +18 -13
- package/src/components/platform/.SoftwareInfo.md +23 -27
- package/src/components/platform/.SoftwareSourceBadge.md +28 -19
- package/src/components/platform/.ToolBadge.md +25 -26
- package/src/components/providers/.theme-provider.md +52 -0
- package/src/components/shared/delivery/.delivery-lists.md +39 -0
- package/src/components/shared/delivery/.delivery-row.md +41 -0
- package/src/components/shared/delivery/.delivery-table.md +41 -0
- package/src/components/shared/delivery/.index.md +38 -0
- package/src/components/shared/dev-section/.dev-card-row.md +60 -0
- package/src/components/shared/dev-section/.dev-section-page.md +48 -0
- package/src/components/shared/dev-section/.dev-section-view.md +43 -0
- package/src/components/shared/dev-section/.index.md +38 -0
- package/src/components/shared/legal-document/.index.md +40 -0
- package/src/components/shared/legal-document/.legal-document-page.md +50 -0
- package/src/components/shared/legal-document/.use-legal-docs.md +42 -0
- package/src/components/shared/onboarding/.onboarding-step-card.md +32 -31
- package/src/components/shared/onboarding/.onboarding-walkthrough.md +39 -43
- package/src/components/shared/product-release/.index.md +28 -30
- package/src/components/shared/product-release/.product-release-card-skeleton.md +28 -28
- package/src/components/shared/product-release/.product-release-card.md +45 -27
- package/src/components/shared/product-release/.release-detail-page.md +23 -24
- package/src/components/shared/roadmap/.index.md +37 -0
- package/src/components/shared/roadmap/.roadmap-grid-skeleton.md +39 -0
- package/src/components/shared/roadmap/.roadmap-grid.md +66 -0
- package/src/components/shared/roadmap/.use-roadmap-voting.md +68 -0
- package/src/components/tickets/.help-center-card.md +51 -0
- package/src/components/tickets/.help-center-create-form.md +38 -0
- package/src/components/tickets/.help-center-list.md +40 -0
- package/src/components/tickets/.index.md +65 -0
- package/src/components/tickets/.ticket-center.md +51 -0
- package/src/components/tickets/.ticket-detail-drawer.md +48 -0
- package/src/components/tickets/.ticket-linked-delivery-card.md +36 -0
- package/src/components/tickets/.ticket-open-form.md +50 -0
- package/src/components/tickets/.ticket-row.md +30 -0
- package/src/components/tickets/.types.md +57 -0
- package/src/components/tickets/hooks/.use-ticket-actions.md +77 -0
- package/src/components/tickets/hooks/.use-ticket-engagements.md +42 -0
- package/src/components/tickets/hooks/.use-tickets-list.md +54 -0
- package/src/components/ui/.actions-menu.md +66 -41
- package/src/components/ui/.alert-dialog.md +29 -26
- package/src/components/ui/.allowed-domains-input.md +29 -21
- package/src/components/ui/.assignee-dropdown.md +45 -0
- package/src/components/ui/.autocomplete.md +47 -41
- package/src/components/ui/.benefit-card.md +51 -36
- package/src/components/ui/.brand-association-card.md +30 -27
- package/src/components/ui/.breadcrumb.md +17 -15
- package/src/components/ui/.checkbox-block.md +39 -35
- package/src/components/ui/.checkbox-with-description.md +23 -16
- package/src/components/ui/.checkbox.md +31 -23
- package/src/components/ui/.circular-progress.md +49 -19
- package/src/components/ui/.content-loader.md +32 -20
- package/src/components/ui/.cursor-pagination.md +41 -52
- package/src/components/ui/.dashboard-info-card.md +33 -26
- package/src/components/ui/.date-picker.md +27 -25
- package/src/components/ui/.device-card-compact.md +28 -29
- package/src/components/ui/.device-card.md +27 -27
- package/src/components/ui/.dialog.md +25 -16
- package/src/components/ui/.drawer.md +86 -0
- package/src/components/ui/.dropdown-button.md +45 -0
- package/src/components/ui/.entity-image.md +46 -0
- package/src/components/ui/.error-state.md +41 -28
- package/src/components/ui/.feature-card.md +35 -31
- package/src/components/ui/.feature-list.md +48 -0
- package/src/components/ui/.field-wrapper.md +47 -0
- package/src/components/ui/.file-upload.md +42 -0
- package/src/components/ui/.filter-checkbox-item.md +43 -0
- package/src/components/ui/.filter-list.md +57 -0
- package/src/components/ui/.filter-modal.md +59 -0
- package/src/components/ui/.floating-tooltip.md +43 -26
- package/src/components/ui/.hidden-tags-popup.md +49 -0
- package/src/components/ui/.hover-dropdown.md +54 -0
- package/src/components/ui/.image-gallery-modal.md +41 -34
- package/src/components/ui/.image-uploader.md +53 -0
- package/src/components/ui/.index.md +40 -34
- package/src/components/ui/.info-card.md +31 -31
- package/src/components/ui/.info-row.md +31 -27
- package/src/components/ui/.input-trigger.md +44 -0
- package/src/components/ui/.input.md +37 -31
- package/src/components/ui/.markdown-editor.md +57 -0
- package/src/components/ui/.modal-v2.md +51 -0
- package/src/components/ui/.modal.md +32 -31
- package/src/components/ui/.more-actions-menu.md +45 -38
- package/src/components/ui/.organization-card.md +31 -37
- package/src/components/ui/.page-actions.md +44 -54
- package/src/components/ui/.phone-input.md +54 -0
- package/src/components/ui/.progress-bar.md +35 -27
- package/src/components/ui/.radio-group.md +39 -27
- package/src/components/ui/.release-changelog-section.md +34 -34
- package/src/components/ui/.search-input.md +48 -0
- package/src/components/ui/.select.md +54 -34
- package/src/components/ui/.service-card.md +42 -40
- package/src/components/ui/.sheet.md +27 -18
- package/src/components/ui/.simple-markdown-renderer.md +29 -31
- package/src/components/ui/.sort-column-item.md +42 -0
- package/src/components/ui/.square-avatar.md +34 -24
- package/src/components/ui/.status-badge.md +26 -38
- package/src/components/ui/.switch.md +22 -35
- package/src/components/ui/.tab-navigation.md +56 -53
- package/src/components/ui/.tab-selector.md +40 -0
- package/src/components/ui/.tag-key-value-filter.md +56 -0
- package/src/components/ui/.tag-search-input.md +53 -0
- package/src/components/ui/.tag.md +49 -31
- package/src/components/ui/.tags-manager.md +60 -0
- package/src/components/ui/.textarea.md +44 -34
- package/src/components/ui/.ticket-attachments-list.md +45 -0
- package/src/components/ui/.ticket-detail-section.md +29 -0
- package/src/components/ui/.ticket-info-section.md +56 -0
- package/src/components/ui/.ticket-note-card.md +53 -0
- package/src/components/ui/.ticket-notes-section.md +54 -0
- package/src/components/ui/.ticket-status-tag.md +49 -0
- package/src/components/ui/.title-content-block.md +25 -26
- package/src/components/ui/.toaster.md +40 -28
- package/src/components/ui/.tooltip.md +22 -11
- package/src/components/ui/.truncate-text.md +39 -0
- package/src/components/ui/button/.button-styles.md +35 -0
- package/src/components/ui/button/.button.md +53 -0
- package/src/components/ui/button/.split-button.md +48 -0
- package/src/components/ui/data-table/.data-table-body.md +48 -0
- package/src/components/ui/data-table/.data-table-column-filter.md +45 -0
- package/src/components/ui/data-table/.data-table-cursor-footer.md +45 -0
- package/src/components/ui/data-table/.data-table-empty.md +43 -0
- package/src/components/ui/data-table/.data-table-header.md +55 -0
- package/src/components/ui/data-table/.data-table-infinite-footer.md +44 -0
- package/src/components/ui/data-table/.data-table-row-count.md +43 -0
- package/src/components/ui/data-table/.data-table-row.md +47 -0
- package/src/components/ui/data-table/.data-table-skeleton.md +42 -0
- package/src/components/ui/data-table/.data-table.md +47 -0
- package/src/components/ui/data-table/.index.md +55 -0
- package/src/components/ui/data-table/.types.md +54 -0
- package/src/components/ui/data-table/.use-data-table.md +45 -0
- package/src/components/ui/data-table/.utils.md +38 -0
- package/src/components/ui/file-manager/.file-manager-action-bar.md +39 -30
- package/src/components/ui/file-manager/.file-manager-breadcrumb.md +29 -27
- package/src/components/ui/file-manager/.file-manager-context-menu.md +38 -42
- package/src/components/ui/file-manager/.file-manager-empty.md +26 -39
- package/src/components/ui/file-manager/.file-manager-table-row.md +33 -41
- package/src/components/ui/file-manager/.file-manager.md +35 -31
- package/src/components/ui/query-report-table/.index.md +43 -0
- package/src/components/ui/query-report-table/.query-report-table-header.md +36 -0
- package/src/components/ui/query-report-table/.query-report-table-row.md +40 -0
- package/src/components/ui/query-report-table/.query-report-table-skeleton.md +44 -0
- package/src/components/ui/query-report-table/.query-report-table.md +47 -0
- package/src/components/ui/query-report-table/.types.md +41 -0
- package/src/components/ui/query-report-table/.utils.md +35 -0
- package/src/components/ui/table/.index.md +27 -48
- package/src/components/ui/table/.table-cell.md +18 -27
- package/src/components/ui/table/.table-column-filter-dropdown.md +40 -0
- package/src/components/ui/table/.table-description-cell.md +24 -14
- package/src/components/ui/table/.table-empty-state.md +21 -22
- package/src/components/ui/table/.table-header.md +25 -40
- package/src/components/ui/table/.table-row.md +22 -40
- package/src/components/ui/table/.table-skeleton.md +33 -26
- package/src/components/ui/table/.table-timestamp-cell.md +26 -16
- package/src/components/ui/table/.table.md +39 -59
- package/src/components/ui/table/.types.md +44 -36
- package/src/components/ui/table/.utils.md +18 -20
- package/src/contexts/.chat-runtime-context.md +54 -0
- package/src/contexts/.endpoints-runtime-context.md +58 -0
- package/src/contexts/.index.md +53 -0
- package/src/contexts/.use-outer-or-default.md +36 -0
- package/src/embed-shims/.index.md +45 -0
- package/src/embed-shims/.next-dynamic.md +43 -0
- package/src/embed-shims/.next-image.md +45 -0
- package/src/embed-shims/.next-link.md +59 -0
- package/src/embed-shims/.next-navigation.md +59 -0
- package/src/hooks/.index.md +34 -29
- package/src/hooks/.use-access-code-integration.md +49 -0
- package/src/hooks/.use-contact-submission.md +37 -26
- package/src/hooks/.use-copy-to-clipboard.md +42 -0
- package/src/hooks/.use-near-viewport.md +44 -0
- package/src/hooks/.use-og-placeholder.md +51 -0
- package/src/hooks/.use-toast.md +36 -35
- package/src/hooks/state/.use-api-params.md +29 -46
- package/src/hooks/state/.use-query-params.md +37 -33
- package/src/hooks/ui/.index.md +33 -32
- package/src/hooks/ui/.use-auto-limit-tags.md +54 -0
- package/src/hooks/ui/.use-horizontal-scrollbar.md +74 -0
- package/src/hooks/ui/.use-image-edge-color.md +42 -0
- package/src/hooks/ui/.use-media-query.md +33 -25
- package/src/hooks/ui/.use-search.md +51 -0
- package/src/nats/.nats.md +49 -28
- package/src/schemas/.contact-schema.md +45 -0
- package/src/stories/.AnnouncementBar.stories.md +45 -0
- package/src/stories/.AppLayout.stories.md +20 -21
- package/src/stories/.Autocomplete.stories.md +48 -34
- package/src/stories/.Board.stories.md +35 -0
- package/src/stories/.Button.stories.md +36 -33
- package/src/stories/.ChatTicketList.stories.md +33 -0
- package/src/stories/.CheckboxBlock.stories.md +40 -28
- package/src/stories/.ContentLoader.stories.md +47 -0
- package/src/stories/.DashboardInfoCard.stories.md +57 -0
- package/src/stories/.DataTable.stories.md +41 -0
- package/src/stories/.DatePicker.stories.md +66 -52
- package/src/stories/.DeviceCard.stories.md +41 -40
- package/src/stories/.DeviceCardCompact.stories.md +41 -0
- package/src/stories/.DotsLoaderIcon.stories.md +36 -0
- package/src/stories/.Drawer.stories.md +58 -0
- package/src/stories/.EmbeddableChat.stories.md +41 -0
- package/src/stories/.FileManager.stories.md +41 -0
- package/src/stories/.FileManagerActionBar.stories.md +38 -0
- package/src/stories/.FileUpload.stories.md +53 -0
- package/src/stories/.FilterList.stories.md +54 -0
- package/src/stories/.FilterModal.stories.md +72 -0
- package/src/stories/.FiltersDropdown.stories.md +57 -0
- package/src/stories/.Header.stories.md +48 -0
- package/src/stories/.ImageUploader.stories.md +49 -0
- package/src/stories/.InfoCard.stories.md +54 -0
- package/src/stories/.Input.stories.md +48 -30
- package/src/stories/.ListPageLayout.stories.md +56 -43
- package/src/stories/.MingoOnboardingCard.stories.md +42 -0
- package/src/stories/.MingoOnboardingCardSkeleton.stories.md +35 -0
- package/src/stories/.Modal.stories.md +40 -31
- package/src/stories/.NotificationDrawer.stories.md +55 -0
- package/src/stories/.OnboardingStepCard.stories.md +41 -0
- package/src/stories/.OrganizationCard.stories.md +61 -0
- package/src/stories/.PageActions.stories.md +52 -49
- package/src/stories/.PageContainer.stories.md +41 -35
- package/src/stories/.PageLayout.stories.md +60 -0
- package/src/stories/.ParallaxImageShowcase.stories.md +49 -0
- package/src/stories/.PhoneInput.stories.md +53 -0
- package/src/stories/.QueryReportTable.stories.md +44 -0
- package/src/stories/.RadioGroup.stories.md +46 -0
- package/src/stories/.RadioGroupBlock.stories.md +45 -0
- package/src/stories/.Select.stories.md +29 -15
- package/src/stories/.SlashCommandSuggestions.stories.md +41 -0
- package/src/stories/.SplitButton.stories.md +62 -0
- package/src/stories/.TabNavigation.stories.md +47 -38
- package/src/stories/.TabSelector.stories.md +65 -0
- package/src/stories/.Table.stories.md +38 -46
- package/src/stories/.TableColumnFilterDropdown.stories.md +46 -0
- package/src/stories/.Tag.stories.md +43 -32
- package/src/stories/.TagKeyValueFilter.stories.md +44 -0
- package/src/stories/.TagSearchInput.stories.md +61 -0
- package/src/stories/.Textarea.stories.md +49 -26
- package/src/stories/.Theme.stories.md +41 -0
- package/src/stories/.TicketAttachmentsList.stories.md +39 -0
- package/src/stories/.TicketDescriptionViewer.stories.md +39 -0
- package/src/stories/.TicketInfoSection.stories.md +40 -0
- package/src/stories/.TicketKnowledgeBaseList.stories.md +36 -0
- package/src/stories/.TicketNotesSection.stories.md +50 -0
- package/src/stories/.Toaster.stories.md +40 -0
- package/src/stories/.ToolExecutionDisplay.stories.md +41 -0
- package/src/stories/.Tooltip.stories.md +41 -0
- package/src/stories/.UserSummary.stories.md +41 -0
- package/src/stories/.WaitlistForm.stories.md +42 -0
- package/src/stories/BlogCard.stories.tsx +61 -0
- package/src/stories/CampaignCardAdmin.stories.tsx +52 -0
- package/src/stories/CaseStudyCard.stories.tsx +42 -0
- package/src/stories/ChatContainer.stories.tsx +186 -0
- package/src/stories/ChatInlineVideoPill.stories.tsx +63 -0
- package/src/stories/CustomerInterviewCard.stories.tsx +42 -0
- package/src/stories/DataRoomDocCard.stories.tsx +52 -0
- package/src/stories/GenericEntityCard.stories.tsx +66 -0
- package/src/stories/GitHubActivityCard.stories.tsx +61 -0
- package/src/stories/HubspotTicketCard.stories.tsx +98 -0
- package/src/stories/InvestorUpdateCard.stories.tsx +42 -0
- package/src/stories/OnboardingGuideCard.stories.tsx +52 -0
- package/src/stories/ProductReleaseCard.stories.tsx +61 -0
- package/src/stories/ProgramCard.stories.tsx +79 -0
- package/src/stories/RoadmapCard.stories.tsx +75 -0
- package/src/stories/SlackMessageCard.stories.tsx +41 -0
- package/src/stories/__fixtures__/chat-cards.ts +604 -0
- package/src/types/.blog.md +53 -29
- package/src/types/.case-study.md +44 -27
- package/src/types/.customer-interview.md +66 -44
- package/src/types/.delivery.md +40 -0
- package/src/types/.employee.md +24 -30
- package/src/types/.index.md +33 -47
- package/src/types/.marketing.md +49 -44
- package/src/types/.navigation.md +33 -25
- package/src/types/.os.types.md +32 -27
- package/src/types/.platform.md +31 -28
- package/src/types/.product-release.md +65 -38
- package/src/types/.supabase.md +37 -29
- package/src/types/.team.md +41 -33
- package/src/types/.video-processing.md +54 -0
- package/src/types/.waitlist.md +40 -36
- package/src/utils/.access-code-client.md +37 -36
- package/src/utils/.cn.md +31 -23
- package/src/utils/.color-analysis.md +35 -0
- package/src/utils/.country-phone-utils.md +39 -0
- package/src/utils/.date-formatters.md +19 -18
- package/src/utils/.embed-authed-fetch.md +39 -0
- package/src/utils/.embed-proxy-auth-storage.md +38 -0
- package/src/utils/.fetch-priority.md +41 -0
- package/src/utils/.format.md +74 -25
- package/src/utils/.generic-domain-utils.md +42 -0
- package/src/utils/.image-proxy.md +59 -23
- package/src/utils/.index.md +42 -49
- package/src/utils/.local-storage-adapter.md +50 -0
- package/src/utils/.ods-color-utils.md +55 -38
- package/src/utils/.platform-config.md +45 -25
- package/src/utils/.scroll-into-view.md +40 -0
- package/src/utils/.source-icons.md +53 -0
- package/src/utils/.sse-decision-frame.md +46 -0
- package/src/utils/dev-sections/.index.md +34 -0
- package/src/utils/dev-sections/.openframe-dev-sections.md +49 -0
- package/dist/chunk-ZDF6F7ED.cjs.map +0 -1
- package/dist/chunk-ZTJVRSN5.js.map +0 -1
- package/src/components/.card.md +0 -42
- package/src/components/.contact-button.md +0 -30
- package/src/components/.drawer.md +0 -46
- package/src/components/.fixed-layout-container.md +0 -47
- package/src/components/.footer-waitlist-card.md +0 -29
- package/src/components/.join-waitlist-cta.md +0 -29
- package/src/components/.sheet.md +0 -47
- package/src/components/.sliding-panel.md +0 -48
- package/src/components/.tooltip.md +0 -48
- package/src/components/.use-mobile.md +0 -42
- package/src/components/.vendor-compact-card.md +0 -66
- package/src/components/.x-button.md +0 -42
- package/src/components/features/.github-repo-button.md +0 -40
- package/src/components/features/.organization-icon.md +0 -47
- package/src/components/features/.organization-selector.md +0 -45
- package/src/components/icons/.fleet-icon.md +0 -39
- package/src/components/icons/.meshcentral-icon.md +0 -35
- package/src/components/icons/.refresh-icon.md +0 -34
- package/src/components/icons/.tactical-icon.md +0 -35
- package/src/components/ui/.button.md +0 -69
- package/src/components/ui/.log-table-row.md +0 -47
- package/src/components/ui/.selectable-device-card.md +0 -46
- package/src/hooks/.api-hooks-stub.md +0 -45
- package/src/hooks/api/.use-product-releases.md +0 -53
- package/src/stories/.OrganizationSelector.stories.md +0 -42
- package/src/stories/.SelectableDeviceCard.stories.md +0 -30
- package/src/utils/.lite-youtube-embed-stub.md +0 -37
- package/src/utils/.lite-youtube-embed.md +0 -33
- /package/dist/{chunk-3JWIJJ44.js.map → chunk-5OWDOFKK.js.map} +0 -0
- /package/dist/{chunk-IK2X5YJU.js.map → chunk-HWY35EAK.js.map} +0 -0
|
@@ -1,49 +1,37 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: 03e68088323281da2f3ddac5a1dabf62 -->
|
|
2
|
+
A client-side React component that renders styled status/label badges with configurable size variants and color schemes using `class-variance-authority`.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- `card` - Larger badges (px-3 py-1.5, text-sm) for card displays
|
|
12
|
-
- `button` - Compact badges (px-2 py-0.5, text-[10px]) with multi-line text support
|
|
13
|
-
|
|
14
|
-
Color schemes include Flamingo brand colors (cyan, pink, yellow, green, purple), semantic states (success, error, warning), and border-only variants for task type indicators.
|
|
6
|
+
- **`statusBadgeVariants`** — CVA variant config defining two axes:
|
|
7
|
+
- `variant`: `"card"` (default, larger) or `"button"` (compact, stamp-like)
|
|
8
|
+
- `colorScheme`: `cyan`, `pink`, `yellow`, `green`, `purple`, `success`, `error`, `warning`, `default`, `accentBorder`, `errorBorder`, `whiteBorder`
|
|
9
|
+
- **`StatusBadge`** — Main exported `<span>`-based component
|
|
10
|
+
- **`singleLine`** prop — Opt-out flag for the `button` variant's multi-word vertical stacking behavior
|
|
15
11
|
|
|
16
12
|
## Usage Example
|
|
17
13
|
|
|
18
14
|
```typescript
|
|
19
15
|
import { StatusBadge } from './status-badge';
|
|
20
16
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
colorScheme="error"
|
|
36
|
-
/>
|
|
37
|
-
|
|
38
|
-
{/* Border-only variant for task types */}
|
|
39
|
-
<StatusBadge
|
|
40
|
-
text="API TASK"
|
|
41
|
-
variant="card"
|
|
42
|
-
colorScheme="accentBorder"
|
|
43
|
-
/>
|
|
44
|
-
</div>
|
|
45
|
-
);
|
|
46
|
-
}
|
|
17
|
+
// Default card badge
|
|
18
|
+
<StatusBadge text="Active" colorScheme="success" />
|
|
19
|
+
|
|
20
|
+
// Compact button badge with stacked multi-word text
|
|
21
|
+
<StatusBadge text="TO DO" variant="button" colorScheme="warning" />
|
|
22
|
+
|
|
23
|
+
// Compact button badge, single line (inline chat context)
|
|
24
|
+
<StatusBadge text="IN PROGRESS" variant="button" colorScheme="cyan" singleLine />
|
|
25
|
+
|
|
26
|
+
// Border-only accent badge (task type)
|
|
27
|
+
<StatusBadge text="BUG" colorScheme="errorBorder" />
|
|
28
|
+
|
|
29
|
+
// Custom class override
|
|
30
|
+
<StatusBadge text="Custom" colorScheme="purple" className="rounded-full" />
|
|
47
31
|
```
|
|
48
32
|
|
|
49
|
-
|
|
33
|
+
## Notes
|
|
34
|
+
|
|
35
|
+
- Renders as `<span>` (not `<div>`) to remain HTML-valid inside inline contexts such as `<p>`, `<a>`, or markdown-rendered content
|
|
36
|
+
- `variant="button"` with multi-word text auto-stacks each word vertically (stamp effect); pass `singleLine` to disable
|
|
37
|
+
- Extends `React.HTMLAttributes<HTMLSpanElement>`, so all standard span props (`id`, `onClick`, `aria-*`, etc.) are forwarded
|
|
@@ -1,44 +1,31 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: 9e0e6c7a40dc325660ad4e61baf2efdb -->
|
|
2
|
+
A accessible toggle switch component built on Radix UI primitives, supporting both controlled and uncontrolled usage patterns with Flamingo ODS design tokens.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
-
|
|
7
|
-
- Supports both controlled (`checked` prop) and uncontrolled usage modes
|
|
8
|
-
- Built-in state synchronization between internal and external state
|
|
9
|
-
- Accessible focus management and keyboard navigation
|
|
6
|
+
- **`Switch`** — A `forwardRef` wrapper around `@radix-ui/react-switch` that manages internal state while staying in sync with optional controlled props (`checked`, `onCheckedChange`).
|
|
10
7
|
|
|
11
8
|
## Usage Example
|
|
12
9
|
|
|
13
10
|
```typescript
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
checked={enabled}
|
|
28
|
-
onCheckedChange={setEnabled}
|
|
29
|
-
/>
|
|
30
|
-
)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// With custom styling
|
|
34
|
-
function CustomSwitch() {
|
|
35
|
-
return (
|
|
36
|
-
<Switch
|
|
37
|
-
className="scale-150"
|
|
38
|
-
onCheckedChange={(checked) => console.log('Toggle:', checked)}
|
|
39
|
-
/>
|
|
40
|
-
)
|
|
41
|
-
}
|
|
11
|
+
// Uncontrolled
|
|
12
|
+
<Switch />
|
|
13
|
+
|
|
14
|
+
// Controlled
|
|
15
|
+
const [enabled, setEnabled] = React.useState(false);
|
|
16
|
+
|
|
17
|
+
<Switch
|
|
18
|
+
checked={enabled}
|
|
19
|
+
onCheckedChange={(val) => setEnabled(val)}
|
|
20
|
+
/>
|
|
21
|
+
|
|
22
|
+
// Disabled state
|
|
23
|
+
<Switch disabled checked={true} />
|
|
42
24
|
```
|
|
43
25
|
|
|
44
|
-
|
|
26
|
+
## Key Behaviors
|
|
27
|
+
|
|
28
|
+
- **Hybrid state management** — Maintains local `isChecked` state via `useState`, synced with the `checked` prop via `useEffect`, allowing both controlled and uncontrolled usage.
|
|
29
|
+
- **Thumb animation** — The inner thumb translates `8px` on toggle using inline `transform` with a `duration-200` transition.
|
|
30
|
+
- **ODS token styling** — Uses design tokens (`ods-accent`, `ods-text-secondary`, `ods-card`, `ods-bg-hover`, `ods-bg-active`, `ods-focus`) for consistent theming across states: default, hover, active, focus-visible, and disabled.
|
|
31
|
+
- **Accessibility** — Inherits Radix UI's keyboard navigation, ARIA roles, and focus ring support out of the box.
|
|
@@ -1,70 +1,73 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 98a7f0660803887b4fe8c81807718051 -->
|
|
2
|
+
Accessible, scrollable tab navigation component with optional URL synchronization and render prop support for content rendering.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
### `TabNavigation`
|
|
7
|
+
Main component that renders a horizontal tab bar with scroll overflow handling, fade gradients, and flexible state management modes.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
- `TabItem` - Defines tab structure with id, label, icon, optional component, and status indicator
|
|
11
|
-
- `TabNavigationUrlSyncOptions` - Configuration options for URL parameter synchronization
|
|
9
|
+
### Interfaces
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
| Export | Description |
|
|
12
|
+
|--------|-------------|
|
|
13
|
+
| `TabItem` | Tab definition — `id`, `label`, `icon`, optional `component` and status `indicator` |
|
|
14
|
+
| `TabNavigationUrlSyncOptions` | URL sync config — `paramName` (default: `'tab'`) and `replaceState` (default: `true`) |
|
|
15
|
+
|
|
16
|
+
### Utility Functions
|
|
17
|
+
|
|
18
|
+
| Function | Description |
|
|
19
|
+
|----------|-------------|
|
|
20
|
+
| `getTabById` | Finds a `TabItem` by `id` from a tabs array |
|
|
21
|
+
| `getTabComponent` | Returns the `component` for a given tab id, or `null` |
|
|
16
22
|
|
|
17
23
|
## Usage Example
|
|
18
24
|
|
|
25
|
+
**Controlled mode (no URL sync):**
|
|
26
|
+
|
|
19
27
|
```typescript
|
|
20
28
|
import { TabNavigation, TabItem } from './tab-navigation'
|
|
21
29
|
import { HomeIcon, SettingsIcon } from 'lucide-react'
|
|
22
30
|
|
|
23
31
|
const tabs: TabItem[] = [
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
label: 'Home',
|
|
27
|
-
icon: HomeIcon,
|
|
28
|
-
component: HomeComponent,
|
|
29
|
-
indicator: 'success'
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
id: 'settings',
|
|
33
|
-
label: 'Settings',
|
|
34
|
-
icon: SettingsIcon,
|
|
35
|
-
component: SettingsComponent,
|
|
36
|
-
indicator: 'warning'
|
|
37
|
-
}
|
|
32
|
+
{ id: 'home', label: 'Home', icon: HomeIcon },
|
|
33
|
+
{ id: 'settings', label: 'Settings', icon: SettingsIcon, indicator: 'warning' },
|
|
38
34
|
]
|
|
39
35
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
36
|
+
<TabNavigation
|
|
37
|
+
tabs={tabs}
|
|
38
|
+
activeTab={activeTab}
|
|
39
|
+
onTabChange={setActiveTab}
|
|
40
|
+
>
|
|
41
|
+
{(tab) => <div>Content for: {tab}</div>}
|
|
42
|
+
</TabNavigation>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**URL sync mode (persists active tab in query string):**
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
<TabNavigation
|
|
49
|
+
tabs={tabs}
|
|
50
|
+
urlSync={{ paramName: 'section', replaceState: true }}
|
|
51
|
+
defaultTab="home"
|
|
52
|
+
>
|
|
53
|
+
{(activeTab) => <ActiveTabContent tabId={activeTab} />}
|
|
54
|
+
</TabNavigation>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Forced scroll gradients with custom shadow color:**
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
<TabNavigation
|
|
61
|
+
tabs={tabs}
|
|
62
|
+
showRightGradient
|
|
63
|
+
shadowClassName="from-black"
|
|
64
|
+
urlSync
|
|
65
|
+
/>
|
|
68
66
|
```
|
|
69
67
|
|
|
70
|
-
|
|
68
|
+
## Behavior Notes
|
|
69
|
+
|
|
70
|
+
- Scroll overflow is detected via `ResizeObserver` and `scroll` events — fade gradients appear automatically on overflowing edges
|
|
71
|
+
- The bottom border line fades to transparent on edges with active scroll shadows
|
|
72
|
+
- URL sync mode reacts to browser back/forward navigation via `searchParams` changes
|
|
73
|
+
- `indicator` dots render as color-coded badges (`error` → red, `warning` → accent yellow, `success` → green) over the tab icon
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- source-hash: 0e28e1e106dbf76027ae86587226825d -->
|
|
2
|
+
A accessible, styled tab selector component that renders a group of toggle buttons for switching between views or options, supporting icons, badges, disabled states, and two visual variants.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
- **`TabSelectorItem`** — Defines individual tab configuration: `id`, optional `label`, `ariaLabel` (required for icon-only tabs), `icon`, `disabled`, and `badge`
|
|
8
|
+
- **`TabSelectorProps`** — Component props including `value`, `onValueChange`, `items`, `variant`, `label`, `disabled`, and `className`
|
|
9
|
+
|
|
10
|
+
### Component
|
|
11
|
+
- **`TabSelector`** — Controlled tab button group that maps `items` to styled `<button>` elements, applying active/disabled/hover styles based on state and variant
|
|
12
|
+
|
|
13
|
+
## Usage Example
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { TabSelector } from './tab-selector'
|
|
17
|
+
import { LayoutGrid, List } from 'lucide-react'
|
|
18
|
+
|
|
19
|
+
const [view, setView] = React.useState('grid')
|
|
20
|
+
|
|
21
|
+
<TabSelector
|
|
22
|
+
value={view}
|
|
23
|
+
onValueChange={setView}
|
|
24
|
+
label="View Mode"
|
|
25
|
+
variant="primary"
|
|
26
|
+
items={[
|
|
27
|
+
{ id: 'grid', label: 'Grid', icon: <LayoutGrid /> },
|
|
28
|
+
{ id: 'list', label: 'List', icon: <List /> },
|
|
29
|
+
{ id: 'map', label: 'Map', disabled: true },
|
|
30
|
+
]}
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Notes
|
|
35
|
+
|
|
36
|
+
| Prop | Default | Description |
|
|
37
|
+
|------|---------|-------------|
|
|
38
|
+
| `variant` | `primary` | `primary` uses accent background; `secondary` uses surface grey |
|
|
39
|
+
| `disabled` | `undefined` | Disables all tabs when set; overrides per-item `disabled` |
|
|
40
|
+
| `ariaLabel` | — | Required on items where `label` is omitted (icon-only) |
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!-- source-hash: fecbf4975a9d0b0bedd4c57c8ae9a440 -->
|
|
2
|
+
A two-level filter UI component that renders tag key/value selections as grouped checkbox lists, using a `"key:value"` string format to represent selected tags.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `TagKeyValueFilter` | Component | Main filter component rendering key checkboxes and dynamic value sections |
|
|
9
|
+
| `TagKeyConfig` | Interface | Defines a tag key with its `key`, `label`, and available `values` |
|
|
10
|
+
| `TagValueOption` | Interface | Defines a single selectable value with `id`, `label`, and optional `count` |
|
|
11
|
+
| `TagKeyValueFilterProps` | Interface | Props for the main component |
|
|
12
|
+
|
|
13
|
+
**Internal logic:**
|
|
14
|
+
- `selectedMap` — parses `selectedTags` strings into `Map<key, Set<values>>` for O(1) lookups
|
|
15
|
+
- `handleKeyToggle` — enables/disables an entire key group; uses an empty marker (`"key:"`) to keep value sections visible
|
|
16
|
+
- `handleValueToggle` — toggles individual values; preserves the empty marker when the last value is unchecked
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { TagKeyValueFilter } from "./tag-key-value-filter"
|
|
22
|
+
|
|
23
|
+
const keys = [
|
|
24
|
+
{
|
|
25
|
+
key: "site",
|
|
26
|
+
label: "Site",
|
|
27
|
+
values: [
|
|
28
|
+
{ id: "chicago", label: "Chicago", count: 12 },
|
|
29
|
+
{ id: "dallas", label: "Dallas", count: 8 },
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
key: "env",
|
|
34
|
+
label: "Environment",
|
|
35
|
+
values: [
|
|
36
|
+
{ id: "production", label: "Production" },
|
|
37
|
+
{ id: "staging", label: "Staging" },
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
function MyFilters() {
|
|
43
|
+
const [selectedTags, setSelectedTags] = useState<string[]>([])
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<TagKeyValueFilter
|
|
47
|
+
keys={keys}
|
|
48
|
+
selectedTags={selectedTags} // e.g. ["site:chicago", "env:production"]
|
|
49
|
+
onTagsChange={setSelectedTags}
|
|
50
|
+
keysTitle="Filter by Tag"
|
|
51
|
+
/>
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
> **Note:** Selected tags use the `"key:value"` format (e.g. `"site:chicago"`). An empty marker `"site:"` is used internally to keep a key's value section rendered even when no values are checked yet.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- source-hash: 96e461088a5374855c0977550d1322c9 -->
|
|
2
|
+
A controlled search input component that combines inline tag chips with a text input, supporting automatic or fixed tag overflow with a popup for hidden tags.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `TagSearchOption<T>`
|
|
7
|
+
Generic interface representing a selectable tag with a `label` string and typed `value`.
|
|
8
|
+
|
|
9
|
+
### `TagSearchInputProps<T>`
|
|
10
|
+
Full props interface for the component, including:
|
|
11
|
+
- `tags` / `searchValue` — controlled state inputs
|
|
12
|
+
- `onSearchChange` / `onTagRemove` / `onClearAll` — mutation callbacks
|
|
13
|
+
- `limitTags` — `number | "auto"` (default `"auto"`) controls visible tag count
|
|
14
|
+
- `renderTag` / `getLimitTagsText` — render customization slots
|
|
15
|
+
- `onSubmit` / `onKeyDown` — keyboard event hooks
|
|
16
|
+
|
|
17
|
+
### `TagSearchInput<T>`
|
|
18
|
+
The main generic component. Renders a styled input container with:
|
|
19
|
+
- **Visible tags** — rendered as `<Tag>` chips up to `visibleCount`
|
|
20
|
+
- **Overflow badge** — a `+N` button that toggles a `HiddenTagsPopup`
|
|
21
|
+
- **Text input** — flex-grows into remaining space
|
|
22
|
+
- **Clear all button** — pinned right, appears when input or tags have values
|
|
23
|
+
- **Off-screen measurement divs** — used by `useAutoLimitTags` to compute available width
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { TagSearchInput, TagSearchOption } from "./tag-search-input"
|
|
29
|
+
|
|
30
|
+
const options: TagSearchOption<number>[] = [
|
|
31
|
+
{ label: "Windows", value: 1 },
|
|
32
|
+
{ label: "macOS", value: 2 },
|
|
33
|
+
{ label: "Linux", value: 3 },
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
function FilterBar() {
|
|
37
|
+
const [tags, setTags] = useState(options)
|
|
38
|
+
const [search, setSearch] = useState("")
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<TagSearchInput<number>
|
|
42
|
+
tags={tags}
|
|
43
|
+
searchValue={search}
|
|
44
|
+
onSearchChange={setSearch}
|
|
45
|
+
onTagRemove={(val) => setTags((prev) => prev.filter((t) => t.value !== val))}
|
|
46
|
+
onClearAll={() => { setTags([]); setSearch("") }}
|
|
47
|
+
onSubmit={(val) => console.log("submitted:", val)}
|
|
48
|
+
limitTags="auto"
|
|
49
|
+
placeholder="Filter devices..."
|
|
50
|
+
/>
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
```
|
|
@@ -1,40 +1,58 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: af3df5d03b971509e29cd6ef6c4c1640 -->
|
|
2
|
+
A client-side Tag component for displaying labeled badges with optional icons and dismissal functionality, built on `class-variance-authority` for variant-based styling.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
- **`Tag`**
|
|
7
|
-
- **`tagVariants`**
|
|
8
|
-
- **`TagProps`**
|
|
6
|
+
- **`Tag`** — Main component rendering a styled badge with support for icons, labels, and a close button
|
|
7
|
+
- **`tagVariants`** — CVA variant config exported for external reuse; supports 7 visual styles
|
|
8
|
+
- **`TagProps`** — Interface extending `HTMLAttributes<HTMLDivElement>` with tag-specific props
|
|
9
|
+
|
|
10
|
+
### Variants
|
|
11
|
+
|
|
12
|
+
| Variant | Use Case |
|
|
13
|
+
|---------|----------|
|
|
14
|
+
| `primary` | Default yellow highlight |
|
|
15
|
+
| `outline` | Dark background with border |
|
|
16
|
+
| `success` | Green success state |
|
|
17
|
+
| `warning` | Yellow warning state |
|
|
18
|
+
| `error` | Red soft error state |
|
|
19
|
+
| `critical` | Solid red critical alert |
|
|
20
|
+
| `grey` | Neutral/muted state |
|
|
21
|
+
|
|
22
|
+
### Props
|
|
23
|
+
|
|
24
|
+
| Prop | Type | Description |
|
|
25
|
+
|------|------|-------------|
|
|
26
|
+
| `label` | `React.ReactNode` | Required tag text or content |
|
|
27
|
+
| `variant` | `TagVariant` | Visual style (default: `primary`) |
|
|
28
|
+
| `icon` | `React.ReactNode` | Optional leading icon |
|
|
29
|
+
| `onClose` | `() => void` | Renders dismiss button when provided |
|
|
30
|
+
| `disabled` | `boolean` | Applies disabled styling and prevents interaction |
|
|
31
|
+
| `labelClassName` | `string` | Additional classes for the label span |
|
|
9
32
|
|
|
10
33
|
## Usage Example
|
|
11
34
|
|
|
12
35
|
```typescript
|
|
13
|
-
import { Tag } from './tag'
|
|
14
|
-
import { AlertCircle } from 'lucide-react'
|
|
15
|
-
|
|
16
36
|
// Basic tag
|
|
17
|
-
<Tag
|
|
18
|
-
|
|
19
|
-
//
|
|
20
|
-
<Tag
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// Custom styling
|
|
32
|
-
<Tag
|
|
37
|
+
<Tag label="Active" variant="success" />
|
|
38
|
+
|
|
39
|
+
// With icon and close button
|
|
40
|
+
<Tag
|
|
41
|
+
label="Urgent"
|
|
42
|
+
variant="critical"
|
|
43
|
+
icon={<AlertIcon />}
|
|
44
|
+
onClose={() => removeTag("urgent")}
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
// Disabled state
|
|
48
|
+
<Tag
|
|
49
|
+
label="Unavailable"
|
|
33
50
|
variant="outline"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
51
|
+
disabled
|
|
52
|
+
/>
|
|
53
|
+
|
|
54
|
+
// Using tagVariants externally
|
|
55
|
+
<div className={cn(tagVariants({ variant: "warning" }), "custom-class")}>
|
|
56
|
+
Custom element
|
|
57
|
+
</div>
|
|
58
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<!-- source-hash: 4570f165151567924d10e97102adf2d3 -->
|
|
2
|
+
A full-featured tag management component that provides a searchable, multi-select tag picker with inline create, edit, and delete capabilities via a popover dropdown.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
- **`TagItem`** — Shape of a tag object: `{ id, name, color? }`
|
|
8
|
+
- **`TagsManagerProps`** — Full prop contract for the component, including async CRUD callbacks and loading states
|
|
9
|
+
|
|
10
|
+
### Component
|
|
11
|
+
- **`TagsManager`** — The primary exported component; renders a label-anchored popover with a chip-style multi-select input and a scrollable tag list
|
|
12
|
+
|
|
13
|
+
### Internal Behaviors
|
|
14
|
+
- `toggleTag` — Adds or removes a tag ID from the selection
|
|
15
|
+
- `handleCreate` — Calls `onCreateTag`, auto-selects the result, and clears search
|
|
16
|
+
- `startEdit` / `confirmEdit` / `cancelEdit` — Inline row-level edit flow
|
|
17
|
+
- `handleDelete` — Calls `onDeleteTag` and removes the ID from selection if present
|
|
18
|
+
- `handleClearAll` — Resets all selected IDs and clears the search input
|
|
19
|
+
|
|
20
|
+
## Usage Example
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { TagsManager, TagItem } from "@/components/ui/tags-manager";
|
|
24
|
+
|
|
25
|
+
const allTags: TagItem[] = [
|
|
26
|
+
{ id: "1", name: "Bug" },
|
|
27
|
+
{ id: "2", name: "Feature" },
|
|
28
|
+
{ id: "3", name: "Urgent" },
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
function TicketForm() {
|
|
32
|
+
const [selectedIds, setSelectedIds] = React.useState<string[]>(["1"]);
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<TagsManager
|
|
36
|
+
tags={allTags}
|
|
37
|
+
selectedIds={selectedIds}
|
|
38
|
+
onChange={setSelectedIds}
|
|
39
|
+
onCreateTag={async (name) => {
|
|
40
|
+
const created = await api.tags.create({ name });
|
|
41
|
+
return created; // must return TagItem
|
|
42
|
+
}}
|
|
43
|
+
onUpdateTag={async (id, name) => {
|
|
44
|
+
await api.tags.update(id, { name });
|
|
45
|
+
}}
|
|
46
|
+
onDeleteTag={async (id) => {
|
|
47
|
+
await api.tags.delete(id);
|
|
48
|
+
}}
|
|
49
|
+
label="Ticket Tags"
|
|
50
|
+
searchPlaceholder="Search tags..."
|
|
51
|
+
/>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Key behaviours to note:**
|
|
57
|
+
- Pressing `Backspace` on an empty search removes the last selected tag
|
|
58
|
+
- Pressing `Enter` while typing a new (non-existing) name triggers `onCreateTag`
|
|
59
|
+
- Edit/delete action buttons appear on row hover and are hidden otherwise
|
|
60
|
+
- The popover stays open while interacting inside the anchor container
|