@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
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!-- source-hash: eea14186773eb206e54d1ffb8e785935 -->
|
|
2
|
+
Storybook stories for the `TabSelector` UI component, showcasing all supported variants, states, and composition patterns.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Exported Stories
|
|
7
|
+
|
|
8
|
+
| Story | Description |
|
|
9
|
+
|-------|-------------|
|
|
10
|
+
| `Primary` | Accent background on active tab (default variant) |
|
|
11
|
+
| `Secondary` | Soft grey background on active tab |
|
|
12
|
+
| `FiveTabs` | Full 5-tab layout matching Figma spec |
|
|
13
|
+
| `WithIcons` | Tabs with Lucide icon prefixes |
|
|
14
|
+
| `WithLabel` | Optional label rendered above the selector |
|
|
15
|
+
| `WithDisabled` | Single tab disabled via `disabled` item property |
|
|
16
|
+
| `Disabled` | Entire selector disabled via top-level `disabled` prop |
|
|
17
|
+
| `TwoTabs` | Minimal two-tab configuration |
|
|
18
|
+
| `PlatformExample` | Real-world OS platform picker with icons and label |
|
|
19
|
+
| `VariantComparison` | Side-by-side `accent` vs `secondary` rendering |
|
|
20
|
+
| `WithBadges` | Tabs with badge slots (e.g., "Soon" pill on Enterprise) |
|
|
21
|
+
|
|
22
|
+
### `TabSelectorItem` Shape
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
interface TabSelectorItem {
|
|
26
|
+
id: string;
|
|
27
|
+
label: string;
|
|
28
|
+
icon?: React.ReactNode;
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
badge?: React.ReactNode;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Usage Example
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { TabSelector, type TabSelectorItem } from '../components/ui/tab-selector';
|
|
38
|
+
import { useState } from 'react';
|
|
39
|
+
|
|
40
|
+
const platforms: TabSelectorItem[] = [
|
|
41
|
+
{ id: 'windows', label: 'Windows', icon: <Monitor className="w-5 h-5" /> },
|
|
42
|
+
{ id: 'macos', label: 'macOS', icon: <Apple className="w-5 h-5" /> },
|
|
43
|
+
{ id: 'linux', label: 'Linux', icon: <Globe className="w-5 h-5" />, disabled: true },
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
export function PlatformPicker() {
|
|
47
|
+
const [platform, setPlatform] = useState('macos');
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<TabSelector
|
|
51
|
+
label="Select Platform"
|
|
52
|
+
variant="primary" // 'primary' | 'secondary'
|
|
53
|
+
value={platform}
|
|
54
|
+
onValueChange={setPlatform}
|
|
55
|
+
items={platforms}
|
|
56
|
+
/>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Notes
|
|
62
|
+
|
|
63
|
+
- All stories use a controlled `useState` render function to ensure interactive tab switching works correctly in Storybook.
|
|
64
|
+
- The decorator wraps every story in a `600px` wide container to match typical usage contexts.
|
|
65
|
+
- Badge content accepts any `React.ReactNode`, allowing custom pills, icons, or counters per tab.
|
|
@@ -1,56 +1,48 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: b88a597eb0e06d6c5293430c95a28ff3 -->
|
|
2
|
+
Storybook stories for the `Table` UI component, demonstrating all supported features including sorting, filtering, selection, responsive column visibility, loading/empty states, and row actions.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
- `
|
|
8
|
-
- `
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
- `
|
|
17
|
-
- `Sortable` - Column sorting capabilities
|
|
18
|
-
- `Clickable` - Interactive row click handling
|
|
19
|
-
- `MobileFirst` - Mobile-optimized progressive enhancement
|
|
20
|
-
- `TabletOptimized` - Tablet-specific column visibility for interactive elements
|
|
6
|
+
- **`Basic`** — Minimal table with static columns, no interactivity
|
|
7
|
+
- **`ResponsiveColumns`** — Progressive column disclosure using `hideAt` breakpoints (`sm`, `md`, `lg`, `xl`)
|
|
8
|
+
- **`MultipleBreakpoints`** — `hideAt` accepting an array of breakpoints for granular visibility control
|
|
9
|
+
- **`Loading`** — Skeleton row state via `loading: true` and `skeletonRows`
|
|
10
|
+
- **`Empty`** — Empty state with custom `emptyMessage`
|
|
11
|
+
- **`Selectable`** — Row selection with `selectable` and `selectedRows` props
|
|
12
|
+
- **`Sortable`** — Column sorting via `sortable`, `sortBy`, and `sortDirection` props
|
|
13
|
+
- **`Clickable`** / **`ClickableWithActions`** — Row click handlers with optional inline `rowActions`
|
|
14
|
+
- **`MobileFirst`** — Mobile-optimized layout with progressive column reveal
|
|
15
|
+
- **`TabletOptimized`** — Tablet-focused layout showing only sortable/filterable columns at 768–1024px
|
|
16
|
+
- **`WithFilters`** — Stateful story using `useState` to drive `filterable` columns with `filterOptions`
|
|
21
17
|
|
|
22
18
|
## Usage Example
|
|
23
19
|
|
|
24
20
|
```typescript
|
|
25
|
-
|
|
26
|
-
export const ResponsiveColumns: Story = {
|
|
27
|
-
args: {
|
|
28
|
-
data: sampleUsers,
|
|
29
|
-
columns: [
|
|
30
|
-
{ key: 'name', label: 'Name' },
|
|
31
|
-
{ key: 'email', label: 'Email' },
|
|
32
|
-
{ key: 'role', label: 'Role', hideAt: 'sm' },
|
|
33
|
-
{ key: 'status', label: 'Status', hideAt: 'md' }
|
|
34
|
-
] as TableColumn<User>[],
|
|
35
|
-
rowKey: 'id'
|
|
36
|
-
}
|
|
37
|
-
}
|
|
21
|
+
import { Table, type TableColumn, type TableFilters } from '../components/ui/table'
|
|
38
22
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
{ id: 'active', label: 'Active', value: 'active' }
|
|
50
|
-
]
|
|
51
|
-
}
|
|
23
|
+
const columns: TableColumn<User>[] = [
|
|
24
|
+
{ key: 'name', label: 'Name', sortable: true },
|
|
25
|
+
{ key: 'email', label: 'Email', hideAt: 'sm' },
|
|
26
|
+
{
|
|
27
|
+
key: 'status',
|
|
28
|
+
label: 'Status',
|
|
29
|
+
filterable: true,
|
|
30
|
+
filterOptions: [
|
|
31
|
+
{ id: 'active', label: 'Active', value: 'active' },
|
|
32
|
+
{ id: 'inactive', label: 'Inactive', value: 'inactive' },
|
|
52
33
|
],
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
34
|
+
},
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
<Table
|
|
38
|
+
data={users}
|
|
39
|
+
columns={columns}
|
|
40
|
+
rowKey="id"
|
|
41
|
+
sortBy="name"
|
|
42
|
+
sortDirection="asc"
|
|
43
|
+
selectable
|
|
44
|
+
selectedRows={[]}
|
|
45
|
+
onFilterChange={(filters: TableFilters) => console.log(filters)}
|
|
46
|
+
rowActions={[{ label: 'Edit', variant: 'outline', onClick: (item) => console.log(item) }]}
|
|
47
|
+
/>
|
|
56
48
|
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- source-hash: e750ae57313642f731dcbf7079870828 -->
|
|
2
|
+
Storybook stories for the `TableColumnFilterDropdown` component, demonstrating a compact filter icon button used in table column headers with checkbox-based filtering options.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`Default`** — Base state with no active filters; icon renders subtly
|
|
7
|
+
- **`WithActiveFilters`** — Pre-selected filters (`active`, `inactive`) causing the icon to highlight with accent color
|
|
8
|
+
- **`InTableHeaderContext`** — Decorates the story inside a styled table header row for visual context
|
|
9
|
+
- **`MultipleColumns`** — Side-by-side Status and Type filter dropdowns sharing a single `TableFilters` state via `useState`
|
|
10
|
+
- **`Interactive`** — Fully stateful story showing real-time filter selection feedback
|
|
11
|
+
|
|
12
|
+
## Usage Example
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { TableColumnFilterDropdown } from '../components/ui/table/table-column-filter-dropdown'
|
|
16
|
+
import type { FilterOption, TableFilters } from '../components/ui/table/types'
|
|
17
|
+
|
|
18
|
+
const statusOptions: FilterOption[] = [
|
|
19
|
+
{ id: 'active', label: 'Active', value: 'active' },
|
|
20
|
+
{ id: 'inactive', label: 'Inactive', value: 'inactive' },
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
function TableHeader() {
|
|
24
|
+
const [filters, setFilters] = useState<TableFilters>({})
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<div className="flex items-center gap-2">
|
|
28
|
+
<span>Status</span>
|
|
29
|
+
<TableColumnFilterDropdown
|
|
30
|
+
columnKey="status"
|
|
31
|
+
columnLabel="Status"
|
|
32
|
+
filterOptions={statusOptions}
|
|
33
|
+
filters={filters}
|
|
34
|
+
onFilterChange={setFilters}
|
|
35
|
+
placement="bottom-start"
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Notes
|
|
43
|
+
|
|
44
|
+
- `placement` prop accepts `bottom-start`, `bottom-end`, or `bottom` (controllable via Storybook select)
|
|
45
|
+
- The filter icon highlights automatically when `filters[columnKey]` contains active selections
|
|
46
|
+
- `onFilterChange` receives the full updated `TableFilters` object, making it suitable for shared multi-column filter state
|
|
@@ -1,41 +1,52 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Storybook
|
|
1
|
+
<!-- source-hash: 6142d73d82bfcb3ba377d2f80cb29999 -->
|
|
2
|
+
Storybook stories for the `Tag` UI component, covering all visual variants, icon/close button combinations, disabled states, and composite showcase renders.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|--------|-------------|
|
|
8
|
+
| `Primary` | Default primary variant |
|
|
9
|
+
| `Outline` | Outline/bordered variant |
|
|
10
|
+
| `Success` / `Warning` / `Error` / `Critical` / `Grey` | Semantic status variants |
|
|
11
|
+
| `WithIcon` | Tag with a leading icon |
|
|
12
|
+
| `WithCloseButton` | Tag with dismissible close handler |
|
|
13
|
+
| `WithIconAndClose` | Tag combining icon and close button |
|
|
14
|
+
| `Disabled` / `AllDisabled` | Disabled state across all variants |
|
|
15
|
+
| `AllVariants` | Showcase of every variant side-by-side |
|
|
16
|
+
| `AllWithIcons` | All variants with icons |
|
|
17
|
+
| `AllWithClose` | All variants with close buttons |
|
|
18
|
+
| `AllWithIconAndClose` | All variants with both icon and close |
|
|
19
|
+
| `DisabledWithIconAndClose` | Disabled state with full feature set |
|
|
10
20
|
|
|
11
21
|
## Usage Example
|
|
12
22
|
|
|
13
23
|
```typescript
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<Tag variant="outline">Outline</Tag>
|
|
35
|
-
{/* ... other variants */}
|
|
36
|
-
</div>
|
|
37
|
-
),
|
|
38
|
-
};
|
|
24
|
+
import { Tag } from '../components/ui/tag';
|
|
25
|
+
import { Smile } from 'lucide-react';
|
|
26
|
+
|
|
27
|
+
// Basic variant
|
|
28
|
+
<Tag variant="success" label="Active" />
|
|
29
|
+
|
|
30
|
+
// With icon
|
|
31
|
+
<Tag variant="primary" label="Category" icon={<Smile className="size-5" />} />
|
|
32
|
+
|
|
33
|
+
// Dismissible
|
|
34
|
+
<Tag variant="warning" label="Pending" onClose={() => handleRemove()} />
|
|
35
|
+
|
|
36
|
+
// Full featured
|
|
37
|
+
<Tag
|
|
38
|
+
variant="error"
|
|
39
|
+
label="Failed"
|
|
40
|
+
icon={<Smile className="size-5" />}
|
|
41
|
+
onClose={() => handleRemove()}
|
|
42
|
+
disabled={false}
|
|
43
|
+
/>
|
|
39
44
|
```
|
|
40
45
|
|
|
41
|
-
|
|
46
|
+
## Variants
|
|
47
|
+
|
|
48
|
+
The `Tag` component supports 7 variants controlled via the Storybook `select` control:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
primary | outline | success | warning | error | critical | grey
|
|
52
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- source-hash: 2efd92dbc250ad80e5820ff475ea0636 -->
|
|
2
|
+
Storybook stories for `TagKeyValueFilter` and related UI components, demonstrating tag-based filtering workflows across standalone, combined, and modal contexts.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `Standalone` | Basic `TagKeyValueFilter` with live selection display |
|
|
9
|
+
| `WithPreselected` | Filter initialized with pre-selected `key:value` tag strings |
|
|
10
|
+
| `WithTagSearchInput` | Combined `TagSearchInput` + `TagKeyValueFilter` for a full search-and-filter workflow |
|
|
11
|
+
| `InsideFilterModal` | `TagKeyValueFilter` embedded inside `FilterModal` alongside standard filter groups |
|
|
12
|
+
| `FilterModalTagsOnly` | `FilterModal` with only tag filters and no regular filter groups |
|
|
13
|
+
|
|
14
|
+
**Sample data shapes used across stories:**
|
|
15
|
+
- `sampleKeys` — `TagKeyConfig[]` covering `site`, `env`, `os`, and `role` dimensions with associated value counts
|
|
16
|
+
- `sampleFilterGroups` — `FilterGroup[]` for a standard `Status` filter group
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// Standalone controlled usage
|
|
22
|
+
const [tags, setTags] = useState<string[]>([]);
|
|
23
|
+
|
|
24
|
+
<TagKeyValueFilter
|
|
25
|
+
keys={sampleKeys} // TagKeyConfig[] — key/value tree
|
|
26
|
+
selectedTags={tags} // string[] in "key:value" format
|
|
27
|
+
onTagsChange={setTags}
|
|
28
|
+
/>
|
|
29
|
+
|
|
30
|
+
// Inside FilterModal with mixed filter groups
|
|
31
|
+
<FilterModal
|
|
32
|
+
isOpen={isOpen}
|
|
33
|
+
onClose={() => setIsOpen(false)}
|
|
34
|
+
filterGroups={sampleFilterGroups}
|
|
35
|
+
currentFilters={filters}
|
|
36
|
+
onFilterChange={setFilters}
|
|
37
|
+
tagFilterKeys={sampleKeys}
|
|
38
|
+
selectedTags={tags}
|
|
39
|
+
onTagsChange={setTags}
|
|
40
|
+
tagFilterTitle="Device Tags"
|
|
41
|
+
/>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> Tags follow the `"key:value"` string format (e.g., `"site:chicago"`, `"env:production"`). All stories use controlled state via React's `useState`.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!-- source-hash: 39e74029d3a13eedba8671d2a0c9a8f5 -->
|
|
2
|
+
Storybook stories for the `TagSearchInput` UI component, covering all interactive states and layout behaviors including overflow, tag limits, and disabled mode.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
**Exported Stories**
|
|
7
|
+
|
|
8
|
+
| Story | Description |
|
|
9
|
+
|---|---|
|
|
10
|
+
| `Empty` | No tags, bare search input |
|
|
11
|
+
| `WithTags` | A few tags fitting on one line |
|
|
12
|
+
| `OverflowWithBadge` | Many tags triggering the automatic `+N` overflow badge |
|
|
13
|
+
| `Resizable` | Drag-to-resize container demonstrating dynamic `+N` badge recalculation |
|
|
14
|
+
| `NarrowContainer` | Narrow container collapsing all tags into `+N` |
|
|
15
|
+
| `Disabled` | Non-interactive disabled state |
|
|
16
|
+
| `WithSubmit` | Press Enter to add typed values as tags |
|
|
17
|
+
| `LimitTags` | Hard cap of 2 visible tags via `limitTags` prop |
|
|
18
|
+
| `NoClearAll` | Hides the clear-all button via `showClearAll={false}` |
|
|
19
|
+
| `AllVariants` | All states rendered together for visual comparison |
|
|
20
|
+
|
|
21
|
+
**Sample Data**
|
|
22
|
+
|
|
23
|
+
- `sampleTags` — 3 tags (`site`, `env` prefixes)
|
|
24
|
+
- `manyTags` — 8 tags across multiple prefixes (`site`, `env`, `os`, `role`, `team`, `region`, `status`)
|
|
25
|
+
|
|
26
|
+
## Usage Example
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { TagSearchInput, TagSearchOption } from '../components/ui/tag-search-input';
|
|
30
|
+
import { useState } from 'react';
|
|
31
|
+
|
|
32
|
+
const tags: TagSearchOption[] = [
|
|
33
|
+
{ label: 'site:chicago', value: 'site:chicago' },
|
|
34
|
+
{ label: 'env:production', value: 'env:production' },
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
function Example() {
|
|
38
|
+
const [activeTags, setActiveTags] = useState(tags);
|
|
39
|
+
const [search, setSearch] = useState('');
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<TagSearchInput
|
|
43
|
+
tags={activeTags}
|
|
44
|
+
searchValue={search}
|
|
45
|
+
onSearchChange={setSearch}
|
|
46
|
+
onTagRemove={(val) =>
|
|
47
|
+
setActiveTags((t) => t.filter((x) => x.value !== val))
|
|
48
|
+
}
|
|
49
|
+
onClearAll={() => { setActiveTags([]); setSearch(''); }}
|
|
50
|
+
onSubmit={(val) => {
|
|
51
|
+
if (val.trim()) {
|
|
52
|
+
setActiveTags((t) => [...t, { label: val, value: val }]);
|
|
53
|
+
setSearch('');
|
|
54
|
+
}
|
|
55
|
+
}}
|
|
56
|
+
limitTags={3}
|
|
57
|
+
placeholder="Search devices..."
|
|
58
|
+
/>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
```
|
|
@@ -1,33 +1,56 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Storybook
|
|
1
|
+
<!-- source-hash: ab03748717bd50a809cf19a269adcb31 -->
|
|
2
|
+
Storybook stories for the `Textarea` UI component, covering all interactive states, variants, and compositional patterns used across the Flamingo/OpenFrame platform.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|--------|-------------|
|
|
8
|
+
| `Default` | Basic textarea with placeholder text |
|
|
9
|
+
| `WithValue` | Pre-filled textarea using `defaultValue` |
|
|
10
|
+
| `Disabled` / `DisabledWithValue` | Read-only disabled states |
|
|
11
|
+
| `CustomRows` | Textarea with a configurable `rows` count |
|
|
12
|
+
| `NoResize` | Fixed-height textarea via `!resize-none` class |
|
|
13
|
+
| `Invalid` | Error/invalid visual state |
|
|
14
|
+
| `WithLabel` | Textarea paired with a label |
|
|
15
|
+
| `WithLabelAndError` | Label + inline validation error message |
|
|
16
|
+
| `WithErrorOnly` | Validation error without a label |
|
|
17
|
+
| `AllVariants` | Side-by-side comparison of all variants |
|
|
18
|
+
|
|
19
|
+
## Configurable ArgTypes
|
|
20
|
+
|
|
21
|
+
| Arg | Type | Description |
|
|
22
|
+
|-----|------|-------------|
|
|
23
|
+
| `placeholder` | `text` | Hint text shown when empty |
|
|
24
|
+
| `disabled` | `boolean` | Prevents user interaction |
|
|
25
|
+
| `invalid` | `boolean` | Applies error styling |
|
|
26
|
+
| `rows` | `number` | Visible row height |
|
|
10
27
|
|
|
11
28
|
## Usage Example
|
|
12
29
|
|
|
13
30
|
```typescript
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
import { Textarea } from '@/components/ui/textarea'
|
|
32
|
+
|
|
33
|
+
// Basic usage
|
|
34
|
+
<Textarea placeholder="Enter description..." />
|
|
35
|
+
|
|
36
|
+
// With label and validation error
|
|
37
|
+
<Textarea
|
|
38
|
+
label="Description"
|
|
39
|
+
placeholder="Enter description..."
|
|
40
|
+
error="Description is required"
|
|
41
|
+
invalid
|
|
42
|
+
/>
|
|
43
|
+
|
|
44
|
+
// Disabled with pre-filled content
|
|
45
|
+
<Textarea
|
|
46
|
+
defaultValue="This content is read-only."
|
|
47
|
+
disabled
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
// Fixed height, no resize
|
|
51
|
+
<Textarea
|
|
52
|
+
placeholder="Fixed height..."
|
|
53
|
+
rows={8}
|
|
54
|
+
className="!resize-none"
|
|
55
|
+
/>
|
|
56
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- source-hash: a1cf673720fb7e195d055604da5c8efd -->
|
|
2
|
+
Storybook stories for the ODS (OpenFrame Design System) theme system, demonstrating light/dark theme switching, design token visualization, and component behavior across themes.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `Showcase` | Story | Full-page demo with theme toggle, color token grid, and all UI components |
|
|
9
|
+
| `ToggleOnly` | Story | Minimal copy-paste reference showing `ThemeProvider` + `useThemeToggle()` integration |
|
|
10
|
+
| `SideBySide` | Story | Forced side-by-side light/dark panels using `.theme-light`/`.theme-dark` class escapes |
|
|
11
|
+
| `ThemeToggleButton` | Helper | Toggle button built on `useThemeToggle()` with Sun/Moon icons |
|
|
12
|
+
| `ThemeStatusBar` | Helper | Status bar showing current theme with explicit `setTheme('light' | 'dark')` controls |
|
|
13
|
+
| `TokenGrid` | Helper | Visual swatches for all `--ods-*` surface, text, accent, status, and border tokens |
|
|
14
|
+
| `ComponentsShowcase` | Helper | Renders Buttons, Inputs, Badges, Cards, and Alerts against the active theme |
|
|
15
|
+
| `Swatch` | Helper | Single color swatch rendering a Tailwind token class with its label |
|
|
16
|
+
|
|
17
|
+
## Usage Example
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// Wrap once with ThemeProvider; consume useThemeToggle() anywhere inside
|
|
21
|
+
import { ThemeProvider, useThemeToggle } from '../components/providers/theme-provider'
|
|
22
|
+
|
|
23
|
+
function MyToggle() {
|
|
24
|
+
const { isDark, toggle, mounted } = useThemeToggle()
|
|
25
|
+
return (
|
|
26
|
+
<button onClick={toggle}>
|
|
27
|
+
{mounted ? (isDark ? 'Switch to light' : 'Switch to dark') : 'Toggle theme'}
|
|
28
|
+
</button>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default function App() {
|
|
33
|
+
return (
|
|
34
|
+
<ThemeProvider>
|
|
35
|
+
<MyToggle />
|
|
36
|
+
</ThemeProvider>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
> **How it works:** `ThemeProvider` (wrapping `next-themes`) sets `data-theme="light|dark"` on `<html>`. The `src/styles/ods-colors.css` file swaps all `--ods-*` primitive values accordingly — components only read tokens and are theme-unaware.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- source-hash: ddd9ad67dd51d76015bd6c722cee21e2 -->
|
|
2
|
+
Storybook stories for the `TicketAttachmentsList` component, covering view-only file attachment list rendering across multiple attachment states.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`Default`** — Three mixed-format attachments (PNG, SVG, MP4) with download handlers
|
|
7
|
+
- **`SingleFile`** — Minimal single PDF attachment scenario
|
|
8
|
+
- **`NoDownload`** — Read-only attachment without a download action callback
|
|
9
|
+
- **`Empty`** — Zero-attachment edge case rendering
|
|
10
|
+
|
|
11
|
+
## Usage Example
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { TicketAttachmentsList } from '../components/ui/ticket-attachments-list';
|
|
15
|
+
|
|
16
|
+
// Basic usage with download handlers
|
|
17
|
+
<TicketAttachmentsList
|
|
18
|
+
attachments={[
|
|
19
|
+
{ id: '1', fileName: 'report.pdf', fileSize: '2.3 MB', onDownload: () => handleDownload('1') },
|
|
20
|
+
{ id: '2', fileName: 'screenshot.png', fileSize: '512 KB', onDownload: () => handleDownload('2') },
|
|
21
|
+
]}
|
|
22
|
+
/>
|
|
23
|
+
|
|
24
|
+
// Read-only, no download action
|
|
25
|
+
<TicketAttachmentsList
|
|
26
|
+
attachments={[
|
|
27
|
+
{ id: '1', fileName: 'readonly-file.txt', fileSize: '128 KB' },
|
|
28
|
+
]}
|
|
29
|
+
/>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Attachment Item Shape
|
|
33
|
+
|
|
34
|
+
| Field | Type | Required | Description |
|
|
35
|
+
|-------|------|----------|-------------|
|
|
36
|
+
| `id` | `string` | ✅ | Unique attachment identifier |
|
|
37
|
+
| `fileName` | `string` | ✅ | Displayed file name with extension |
|
|
38
|
+
| `fileSize` | `string` | ✅ | Human-readable size label |
|
|
39
|
+
| `onDownload` | `() => void` | ❌ | Download action; omit for read-only |
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- source-hash: 70e0ec1bd6faabbc539fcfb3af28cb70 -->
|
|
2
|
+
Storybook stories for the `TicketDescriptionViewer` component, providing visual test cases for rendering ticket description content in various formats (plain text, HTML, code, and empty states).
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `meta` | `Meta` | Storybook metadata — mounts component at `Tickets/TicketDescriptionViewer` with a 600px wrapper |
|
|
9
|
+
| `PlainText` | `Story` | Plain text with line breaks |
|
|
10
|
+
| `HtmlContent` | `Story` | Rich HTML with headings, lists, blockquotes |
|
|
11
|
+
| `WithCode` | `Story` | Inline and block `<code>` / `<pre>` elements |
|
|
12
|
+
| `Empty` | `Story` | Empty string fallback rendering |
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { TicketDescriptionViewer } from '../components/ui/ticket-description-viewer';
|
|
18
|
+
|
|
19
|
+
// Plain text
|
|
20
|
+
<TicketDescriptionViewer content="Reduce onboarding from 4 weeks to 10 days." />
|
|
21
|
+
|
|
22
|
+
// HTML from RichTextEditor output
|
|
23
|
+
<TicketDescriptionViewer content="<h2>Steps</h2><ul><li>Setup</li></ul>" />
|
|
24
|
+
|
|
25
|
+
// Empty state
|
|
26
|
+
<TicketDescriptionViewer content="" />
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Story Overview
|
|
30
|
+
|
|
31
|
+
```mermaid
|
|
32
|
+
graph TD
|
|
33
|
+
meta["TicketDescriptionViewer Stories"] --> PlainText["PlainText\n(line-break text)"]
|
|
34
|
+
meta --> HtmlContent["HtmlContent\n(headings, lists, blockquote)"]
|
|
35
|
+
meta --> WithCode["WithCode\n(pre + code blocks)"]
|
|
36
|
+
meta --> Empty["Empty\n(empty string)"]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> All stories render inside a 600px-wide decorator div to simulate a realistic ticket detail panel width, matching the expected `RichTextEditor` output environment.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- source-hash: 82f8ca355b8119e08afe608bf0b4cf05 -->
|
|
2
|
+
Storybook stories for the `TicketInfoSection` component, covering collapsed, expanded, interactive, and minimal display states of the collapsible ticket info bar.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`Collapsed`** — Default header-only view showing organization, user, device, and status fields
|
|
7
|
+
- **`Expanded`** — Fully populated view with description, attachments, tags, knowledge base articles, and notes
|
|
8
|
+
- **`Interactive`** — Stateful story demonstrating expand/collapse toggle with `useState`, device click handler, and note CRUD callbacks
|
|
9
|
+
- **`Minimal`** — Expanded state with all fields set to "Unassigned", useful for empty-state validation
|
|
10
|
+
|
|
11
|
+
## Usage Example
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { TicketInfoSection } from '../components/ui/ticket-info-section';
|
|
15
|
+
|
|
16
|
+
// Basic collapsed header
|
|
17
|
+
<TicketInfoSection
|
|
18
|
+
organization={{ name: 'Acme Corp' }}
|
|
19
|
+
user="John Doe"
|
|
20
|
+
device={{ name: 'WIN-SERVER-01', icon: <Monitor className="size-4" /> }}
|
|
21
|
+
status="TECH_REQUIRED"
|
|
22
|
+
expanded={false}
|
|
23
|
+
/>
|
|
24
|
+
|
|
25
|
+
// Expanded with notes and attachments
|
|
26
|
+
<TicketInfoSection
|
|
27
|
+
organization={{ name: 'Acme Corp' }}
|
|
28
|
+
user="John Doe"
|
|
29
|
+
device={{ name: 'WIN-SERVER-01' }}
|
|
30
|
+
status="ACTIVE"
|
|
31
|
+
expanded={true}
|
|
32
|
+
notes={mockNotes}
|
|
33
|
+
attachments={mockAttachments}
|
|
34
|
+
knowledgeBaseArticles={mockArticles}
|
|
35
|
+
tags={['Client-onboarding']}
|
|
36
|
+
onAddNote={(text) => console.log('Add note:', text)}
|
|
37
|
+
onEditNote={(id) => console.log('Edit note:', id)}
|
|
38
|
+
onDeleteNote={(id) => console.log('Delete note:', id)}
|
|
39
|
+
/>
|
|
40
|
+
```
|