@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,36 @@
|
|
|
1
|
+
<!-- source-hash: 735975f25b78a4907321d619b6aaa5d8 -->
|
|
2
|
+
Storybook stories for the `DotsLoaderIcon` component, covering size variants, ODS color token usage, color inheritance, and in-context card placement.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Story | Description |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `Default` | 24px icon inheriting text color via `currentColor` |
|
|
9
|
+
| `Large` | 64px icon for full-page or blocking loading states |
|
|
10
|
+
| `InheritsTextColor` | Demonstrates `currentColor` inheriting from a parent ODS text class |
|
|
11
|
+
| `OdsColors` | Showcases explicit ODS token colors (`--ods-text-primary`, `--ods-accent`, `--ods-error`, etc.) |
|
|
12
|
+
| `Sizes` | Full size scale from 16px to 96px |
|
|
13
|
+
| `InCard` | Icon centered inside an ODS-styled card for inline loading context |
|
|
14
|
+
|
|
15
|
+
## Usage Example
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { DotsLoaderIcon } from '../components/icons-v2-generated/loaders/dots-loader-icon';
|
|
19
|
+
|
|
20
|
+
// Default — inherits surrounding text color
|
|
21
|
+
<DotsLoaderIcon size={24} />
|
|
22
|
+
|
|
23
|
+
// Explicit ODS color token — never hardcode hex values
|
|
24
|
+
<DotsLoaderIcon size={40} color="var(--ods-accent)" />
|
|
25
|
+
|
|
26
|
+
// Inherit from parent text color class
|
|
27
|
+
<div className="text-ods-accent">
|
|
28
|
+
<DotsLoaderIcon size={40} />
|
|
29
|
+
</div>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Notes
|
|
33
|
+
|
|
34
|
+
- Animation is driven by an infinite SMIL chain on the three dots — no CSS keyframes required.
|
|
35
|
+
- Always prefer ODS design tokens (e.g. `var(--ods-accent)`) over hardcoded hex values for the `color` prop.
|
|
36
|
+
- The `size` prop accepts numbers between `12` and `128` (step `4`).
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<!-- source-hash: df41a32c852e3d01e5a937d8567445ad -->
|
|
2
|
+
Storybook stories for the `Drawer` UI component, demonstrating all supported slide-in directions, footer usage, and scrollable content scenarios.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Story | Description |
|
|
7
|
+
|-------|-------------|
|
|
8
|
+
| `Right` | Drawer sliding in from the right edge |
|
|
9
|
+
| `Left` | Drawer sliding in from the left edge |
|
|
10
|
+
| `Top` | Drawer sliding in from the top edge |
|
|
11
|
+
| `Bottom` | Drawer sliding in from the bottom edge |
|
|
12
|
+
| `AllSides` | Interactive demo toggling all four `DrawerSide` directions from a single view |
|
|
13
|
+
| `WithFooter` | Drawer with `DrawerFooter` containing Cancel/Confirm actions |
|
|
14
|
+
| `LongContent` | Drawer with 20 scrollable items to validate overflow/scroll behavior |
|
|
15
|
+
|
|
16
|
+
**Drawer sub-components used:** `DrawerContent`, `DrawerHeader`, `DrawerTitle`, `DrawerDescription`, `DrawerBody`, `DrawerFooter`
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { useState } from 'react'
|
|
22
|
+
import { Button } from '../components/ui/button'
|
|
23
|
+
import {
|
|
24
|
+
Drawer,
|
|
25
|
+
DrawerBody,
|
|
26
|
+
DrawerContent,
|
|
27
|
+
DrawerFooter,
|
|
28
|
+
DrawerHeader,
|
|
29
|
+
DrawerTitle,
|
|
30
|
+
DrawerDescription,
|
|
31
|
+
} from '../components/ui/drawer'
|
|
32
|
+
|
|
33
|
+
function MyDrawer() {
|
|
34
|
+
const [open, setOpen] = useState(false)
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<Drawer open={open} onOpenChange={setOpen}>
|
|
38
|
+
<Button variant="outline" onClick={() => setOpen(true)}>
|
|
39
|
+
Open
|
|
40
|
+
</Button>
|
|
41
|
+
<DrawerContent side="right">
|
|
42
|
+
<DrawerHeader>
|
|
43
|
+
<DrawerTitle>Settings</DrawerTitle>
|
|
44
|
+
<DrawerDescription>Manage your preferences.</DrawerDescription>
|
|
45
|
+
</DrawerHeader>
|
|
46
|
+
<DrawerBody>
|
|
47
|
+
<p>Content here.</p>
|
|
48
|
+
</DrawerBody>
|
|
49
|
+
<DrawerFooter>
|
|
50
|
+
<Button variant="accent" onClick={() => setOpen(false)}>Save</Button>
|
|
51
|
+
</DrawerFooter>
|
|
52
|
+
</DrawerContent>
|
|
53
|
+
</Drawer>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The `side` prop on `DrawerContent` accepts `"right" | "left" | "top" | "bottom"`, defaulting to `"right"` when omitted.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- source-hash: 928a4aa8278d9b5dca88c4e94782c25c -->
|
|
2
|
+
Storybook stories for the `EmbeddableChat` component, covering three chat surface configurations: Guide-only, Mingo-only, and dual-mode (both transports enabled with a toggle).
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `GuideOnly` | `Story` | Legacy single-mode Guide consumer matching `multi-platform-hub` mount pattern |
|
|
9
|
+
| `MingoOnly` | `Story` | NATS agent transport surface with no mode toggle |
|
|
10
|
+
| `BothModes` | `Story` | Dual-mode consumer with segmented Guide/Mingo header toggle |
|
|
11
|
+
| `StoryShell` | Decorator | Wraps stories with `QueryClientProvider` + `ChatRuntimeContext` + canvas background |
|
|
12
|
+
| `createMockRuntime()` | Helper | Returns a `ChatRuntime` with stub endpoints (all `/__story__/*`) |
|
|
13
|
+
| `createMockMingoConfig()` | Helper | Returns a `UseNatsChatAdapterConfig` with `getNatsWsUrl: () => null` (no WS handshake) |
|
|
14
|
+
| `SAMPLE_SLASH_COMMANDS` | Constant | 13 mock slash commands used to populate the empty-state chip grid |
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// Minimal dual-mode story using the same pattern as BothModes
|
|
20
|
+
export const MyStory: Story = {
|
|
21
|
+
render: (args) => (
|
|
22
|
+
<EmbeddableChat
|
|
23
|
+
{...args}
|
|
24
|
+
modes={{
|
|
25
|
+
guide: {},
|
|
26
|
+
mingo: createMockMingoConfig(),
|
|
27
|
+
}}
|
|
28
|
+
defaultActiveMode="mingo"
|
|
29
|
+
defaultOpen
|
|
30
|
+
showInternalTrigger={false}
|
|
31
|
+
/>
|
|
32
|
+
),
|
|
33
|
+
args: {},
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Notes
|
|
38
|
+
|
|
39
|
+
- The `window.fetch` shim is installed **at module level** (not inside an effect) so the mock is in place before `EmbeddableChat`'s `useEffect` fires. A `__embeddableChatStoriesMockInstalled__` flag prevents double-patching across hot reloads.
|
|
40
|
+
- All story endpoints resolve to `/__story__/*` — accidental real fetches return 404, not real server data.
|
|
41
|
+
- `getNatsWsUrl: () => null` keeps the NATS dialog subscription idle in all stories.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- source-hash: 5c554e5f85ea796af4b31616f108e4eb -->
|
|
2
|
+
Storybook stories for the `FileManager` UI component, covering rendering states, navigation paths, selection, search, and UI configuration variants.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
- **`meta`** — Storybook metadata registering the component under `UI/FileManager` with default args (sample files, mock handlers via `fn()`) and argType controls for boolean/text props
|
|
7
|
+
- **`sampleFiles`** — Shared fixture array of `FileItem` objects (folders + files) used across stories
|
|
8
|
+
- **Story exports** — Individual named story objects, each overriding specific args to isolate a scenario
|
|
9
|
+
|
|
10
|
+
## Stories
|
|
11
|
+
|
|
12
|
+
| Story | Description |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `Default` | Root path with mixed files and folders |
|
|
15
|
+
| `NestedPath` | Deep breadcrumb path (`/Documents/Projects/my-app`) |
|
|
16
|
+
| `WithSelection` | Two files selected, enabling copy/cut actions |
|
|
17
|
+
| `WithPasteAvailable` | Clipboard paste action enabled |
|
|
18
|
+
| `Loading` | Skeleton/spinner state while fetching contents |
|
|
19
|
+
| `Searching` | Active search query with filtered results |
|
|
20
|
+
| `SearchInProgress` | Search spinner while results load |
|
|
21
|
+
| `EmptyDirectory` | No files present in current path |
|
|
22
|
+
| `MinimalUI` | No search bar, action bar, or checkboxes |
|
|
23
|
+
| `WindowsPath` | Windows-style `C:\Users\...` path handling |
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { FileManager } from '../components/ui/file-manager/file-manager';
|
|
29
|
+
|
|
30
|
+
<FileManager
|
|
31
|
+
files={sampleFiles}
|
|
32
|
+
currentPath="/"
|
|
33
|
+
selectedFiles={[]}
|
|
34
|
+
onNavigate={(path) => console.log('navigate', path)}
|
|
35
|
+
onSelectFile={(id) => console.log('select', id)}
|
|
36
|
+
onFolderOpen={(item) => console.log('open', item)}
|
|
37
|
+
showSearch
|
|
38
|
+
showActions
|
|
39
|
+
showCheckboxes
|
|
40
|
+
/>
|
|
41
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!-- source-hash: aef805784aca574d32a20c120db03cdb -->
|
|
2
|
+
Storybook stories for the `FileManagerActionBar` component, covering default, selection, clipboard, and fully-enabled interaction states.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `meta` | `Meta` | Storybook metadata — registers component under `UI/FileManagerActionBar` with mocked action handlers |
|
|
9
|
+
| `Default` | `Story` | No selection, no clipboard content; Copy, Cut, and Paste disabled |
|
|
10
|
+
| `WithSelection` | `Story` | `hasSelection: true` — Copy and Cut buttons become active |
|
|
11
|
+
| `WithPasteAvailable` | `Story` | `canPaste: true` — Paste button becomes active |
|
|
12
|
+
| `AllEnabled` | `Story` | Both `hasSelection` and `canPaste` set — all action buttons enabled |
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// Render the AllEnabled story in a test or custom harness
|
|
18
|
+
import { AllEnabled } from './FileManagerActionBar.stories';
|
|
19
|
+
|
|
20
|
+
<AllEnabled.component
|
|
21
|
+
{...AllEnabled.args}
|
|
22
|
+
onCopy={() => console.log('copy')}
|
|
23
|
+
onCut={() => console.log('cut')}
|
|
24
|
+
onPaste={() => console.log('paste')}
|
|
25
|
+
onNewFolder={() => console.log('new folder')}
|
|
26
|
+
onUpload={() => console.log('upload')}
|
|
27
|
+
onSelectAll={() => console.log('select all')}
|
|
28
|
+
/>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Controlled Props
|
|
32
|
+
|
|
33
|
+
| Prop | Control | Effect |
|
|
34
|
+
|------|---------|--------|
|
|
35
|
+
| `hasSelection` | `boolean` | Enables Copy and Cut actions |
|
|
36
|
+
| `canPaste` | `boolean` | Enables Paste action |
|
|
37
|
+
|
|
38
|
+
All handler props (`onNewFolder`, `onCopy`, `onCut`, `onPaste`, `onUpload`, `onSelectAll`) are wired to Storybook `fn()` spies, making interaction events visible in the **Actions** panel during development.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- source-hash: bbf76fcab5ddf0e39246fdc2d4fe5d17 -->
|
|
2
|
+
Storybook stories for the `FileUpload` UI component, showcasing drag-and-drop file upload variants including label, multi-file, image-only, interactive state management, and disabled states.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Story | Description |
|
|
7
|
+
|-------|-------------|
|
|
8
|
+
| `Default` | Basic dropzone with no additional configuration |
|
|
9
|
+
| `WithLabel` | Dropzone with a field label (`Attachments`) |
|
|
10
|
+
| `Multiple` | Multi-file upload with custom label and description |
|
|
11
|
+
| `ImagesOnly` | Restricted to `image/*` MIME types |
|
|
12
|
+
| `Interactive` | Stateful render with live file count display |
|
|
13
|
+
| `Disabled` | Non-interactive disabled dropzone |
|
|
14
|
+
|
|
15
|
+
## Usage Example
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// Basic usage
|
|
19
|
+
<FileUpload onChange={(files) => console.log(files)} />
|
|
20
|
+
|
|
21
|
+
// Multi-file with label
|
|
22
|
+
<FileUpload
|
|
23
|
+
multiple
|
|
24
|
+
fieldLabel="Attachments"
|
|
25
|
+
label="Upload Files"
|
|
26
|
+
description="(Click Here or Drag and Drop)"
|
|
27
|
+
onChange={(files) => handleFiles(files)}
|
|
28
|
+
/>
|
|
29
|
+
|
|
30
|
+
// Images only
|
|
31
|
+
<FileUpload
|
|
32
|
+
accept="image/*"
|
|
33
|
+
label="Upload Images"
|
|
34
|
+
description="PNG, JPEG, WebP only"
|
|
35
|
+
onChange={(files) => handleImages(files)}
|
|
36
|
+
/>
|
|
37
|
+
|
|
38
|
+
// Controlled (stateful)
|
|
39
|
+
const [files, setFiles] = useState<File[]>([]);
|
|
40
|
+
<FileUpload
|
|
41
|
+
value={files}
|
|
42
|
+
onChange={(f) => setFiles(f as File[] || [])}
|
|
43
|
+
multiple
|
|
44
|
+
fieldLabel="Upload Files"
|
|
45
|
+
/>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Notes
|
|
49
|
+
|
|
50
|
+
- All stories are wrapped in a `500px` container via a shared decorator for consistent layout.
|
|
51
|
+
- The `Interactive` story demonstrates controlled usage with `useState`, reflecting selected file count below the dropzone.
|
|
52
|
+
- `accept` prop follows standard MIME type syntax (e.g. `"image/*"`).
|
|
53
|
+
- `autodocs` tag enables automatic Storybook documentation generation.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<!-- source-hash: 488942b1b8a347ad8c23f81bddec013a -->
|
|
2
|
+
Storybook stories for the `FilterList` UI component, covering multi-select, single-select, disabled items, item states, and long title truncation behaviors.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `Default` | `Story` | Multi-select list with pre-selected item |
|
|
9
|
+
| `SingleSelect` | `Story` | Single-selection mode (`multiple: false`) |
|
|
10
|
+
| `NoMeta` | `Story` | Items rendered with title only, no meta values |
|
|
11
|
+
| `WithDisabledItem` | `Story` | List with one individually disabled row |
|
|
12
|
+
| `ItemStates` | `StoryObj` | Side-by-side `FilterListItem` in default and selected states |
|
|
13
|
+
| `LongTitles` | `Story` | Validates ellipsis truncation on long titles |
|
|
14
|
+
|
|
15
|
+
## Usage Example
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { FilterList } from '../components/ui/filter-list';
|
|
19
|
+
import { useState } from 'react';
|
|
20
|
+
|
|
21
|
+
const items = [
|
|
22
|
+
{ id: '1', title: 'Acme Corporation', meta: ['Technology', '100 devices'] },
|
|
23
|
+
{ id: '2', title: 'Globex Inc.', meta: ['Finance', '245 devices'] },
|
|
24
|
+
{ id: '3', title: 'Initech', meta: ['Consulting', '58 devices'], disabled: true },
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
export function OrgFilter() {
|
|
28
|
+
const [selected, setSelected] = useState<string[]>(['1']);
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<FilterList
|
|
32
|
+
items={items}
|
|
33
|
+
selectedIds={selected}
|
|
34
|
+
onChange={setSelected}
|
|
35
|
+
multiple={false} // omit for multi-select (default)
|
|
36
|
+
/>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Story Variants
|
|
42
|
+
|
|
43
|
+
```mermaid
|
|
44
|
+
graph TD
|
|
45
|
+
FilterList["FilterList Stories"]
|
|
46
|
+
FilterList --> Default["Default (multi-select)"]
|
|
47
|
+
FilterList --> SingleSelect["SingleSelect (one active)"]
|
|
48
|
+
FilterList --> NoMeta["NoMeta (title only)"]
|
|
49
|
+
FilterList --> WithDisabledItem["WithDisabledItem"]
|
|
50
|
+
FilterList --> ItemStates["ItemStates (FilterListItem)"]
|
|
51
|
+
FilterList --> LongTitles["LongTitles (truncation)"]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Selected rows render with a yellow-secondary background and accent-colored meta text. Each story wraps `useState` internally so selection state is interactive inside Storybook.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<!-- source-hash: 997a920fba0072bc3666a97dfbeeae72 -->
|
|
2
|
+
Storybook stories for the `FilterModal` component, covering all major prop combinations including filter groups, sorting, tag key:value filters, loading states, and interactive stateful examples.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Exported Stories
|
|
7
|
+
|
|
8
|
+
| Story | Description |
|
|
9
|
+
|-------|-------------|
|
|
10
|
+
| `Default` | Basic modal with status filter group and pre-selected filters |
|
|
11
|
+
| `Interactive` | Stateful example with open/close toggle and live filter count |
|
|
12
|
+
| `MultipleGroups` | Modal with several filter groups (statuses, types, OS) |
|
|
13
|
+
| `WithoutCounts` | Filter options rendered without item counts |
|
|
14
|
+
| `WithSorting` | Combined sort columns + filter groups |
|
|
15
|
+
| `SortingOnly` | Sort configuration with no filter groups |
|
|
16
|
+
| `InteractiveWithSorting` | Stateful sort + filter with live sort display |
|
|
17
|
+
| `EmptyFilters` | Filter groups present but nothing selected |
|
|
18
|
+
| `NoFiltersAvailable` / `FullyEmpty` | Edge cases with no options or config |
|
|
19
|
+
| `Loading` | Skeleton placeholder state during data fetch |
|
|
20
|
+
| `WithTagFilter` | Tag key:value filter section alongside regular filters |
|
|
21
|
+
| `TagFilterOnly` | Tag filters with no regular filter groups |
|
|
22
|
+
| `FullFeatured` | All features combined: sort + filters + tags |
|
|
23
|
+
| `InteractiveWithTags` | Fully interactive with tags, sort, and filters |
|
|
24
|
+
|
|
25
|
+
### Key Types Used
|
|
26
|
+
|
|
27
|
+
- `FilterGroup` — group id, title, and options array (with optional counts)
|
|
28
|
+
- `SortConfig` — column definitions, active sort key, and direction
|
|
29
|
+
- `TagKeyConfig` — tag key with label and selectable values
|
|
30
|
+
- `TableFilters` — record mapping filter group ids to selected option ids
|
|
31
|
+
|
|
32
|
+
## Usage Example
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { FilterModal, type FilterGroup, type SortConfig } from '../components/ui/filter-modal'
|
|
36
|
+
import type { TableFilters } from '../components/ui/table/types'
|
|
37
|
+
|
|
38
|
+
const filterGroups: FilterGroup[] = [
|
|
39
|
+
{
|
|
40
|
+
id: 'statuses',
|
|
41
|
+
title: 'Statuses',
|
|
42
|
+
options: [
|
|
43
|
+
{ id: 'active', label: 'Active', count: 2975 },
|
|
44
|
+
{ id: 'inactive', label: 'Inactive', count: 245 },
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
const sortConfig: SortConfig = {
|
|
50
|
+
columns: [{ key: 'name', label: 'Name' }, { key: 'date', label: 'Date' }],
|
|
51
|
+
sortBy: 'name',
|
|
52
|
+
sortDirection: 'asc',
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function MyPage() {
|
|
56
|
+
const [isOpen, setIsOpen] = useState(false)
|
|
57
|
+
const [filters, setFilters] = useState<TableFilters>({})
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<FilterModal
|
|
61
|
+
isOpen={isOpen}
|
|
62
|
+
onClose={() => setIsOpen(false)}
|
|
63
|
+
title="Sort and Filter"
|
|
64
|
+
filterGroups={filterGroups}
|
|
65
|
+
currentFilters={filters}
|
|
66
|
+
onFilterChange={setFilters}
|
|
67
|
+
sortConfig={sortConfig}
|
|
68
|
+
onSort={(col, dir) => console.log(col, dir)}
|
|
69
|
+
/>
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!-- source-hash: 194f540562ec706068c7dde122366c19 -->
|
|
2
|
+
Storybook stories for the `FiltersDropdown` component, covering checkbox/radio sections, custom triggers, placement variants, and interactive state management.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `Default` | `Story` | Single checkbox section with pre-selected filters |
|
|
9
|
+
| `MultipleSections` | `Story` | Two checkbox sections (Status + Device Type) |
|
|
10
|
+
| `RadioSection` | `Story` | Single-select radio group for sort ordering |
|
|
11
|
+
| `WithSeparator` | `Story` | Checkbox section with a visual separator between option groups |
|
|
12
|
+
| `CustomTrigger` | `Story` | Replaces default text button with a custom `Button` element |
|
|
13
|
+
| `PlacementBottomEnd` | `Story` | Dropdown aligned to the right via `bottom-end` placement |
|
|
14
|
+
| `NoActiveFilters` | `Story` | Empty `currentFilters` state |
|
|
15
|
+
| `ManyOptions` | `Story` | Three large sections demonstrating scrollable overflow |
|
|
16
|
+
| `Interactive` | `Story` | Live stateful example showing applied filter feedback |
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// Basic checkbox filter dropdown
|
|
22
|
+
<FiltersDropdown
|
|
23
|
+
triggerLabel="STATUS"
|
|
24
|
+
sections={[
|
|
25
|
+
{
|
|
26
|
+
id: 'status',
|
|
27
|
+
title: 'Status',
|
|
28
|
+
type: 'checkbox',
|
|
29
|
+
options: [
|
|
30
|
+
{ id: 'active', label: 'Active', value: 'active', count: 2975 },
|
|
31
|
+
{ id: 'inactive', label: 'Inactive', value: 'inactive', count: 245 },
|
|
32
|
+
],
|
|
33
|
+
allowSelectAll: true,
|
|
34
|
+
},
|
|
35
|
+
]}
|
|
36
|
+
currentFilters={{ status: ['active'] }}
|
|
37
|
+
onApply={(filters) => console.log(filters)}
|
|
38
|
+
onReset={() => console.log('reset')}
|
|
39
|
+
/>
|
|
40
|
+
|
|
41
|
+
// Custom trigger with bottom-end placement
|
|
42
|
+
<FiltersDropdown
|
|
43
|
+
triggerElement={<Button variant="outline">Open Filters</Button>}
|
|
44
|
+
sections={sections}
|
|
45
|
+
placement="bottom-end"
|
|
46
|
+
onApply={handleApply}
|
|
47
|
+
onReset={handleReset}
|
|
48
|
+
/>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Configurable Args
|
|
52
|
+
|
|
53
|
+
| Arg | Control | Description |
|
|
54
|
+
|-----|---------|-------------|
|
|
55
|
+
| `triggerLabel` | `text` | Label rendered on the default trigger button |
|
|
56
|
+
| `placement` | `select` | `bottom-start` \| `bottom-end` \| `bottom` |
|
|
57
|
+
| `responsive` | `boolean` | Enables mobile-responsive behavior |
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: 5344552d615a3d0d05eef4235e82937c -->
|
|
2
|
+
Storybook stories for the `Header` navigation component, covering dropdown behavior, SEO link visibility, and scroll auto-hide functionality.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `Default` | `Story` | Standard header with dropdown navigation and auto-hide enabled |
|
|
9
|
+
| `DropdownOpen` | `Story` | Programmatically opens the first dropdown on mount for visual regression snapshots |
|
|
10
|
+
| `SeoLinksAlwaysInDom` | `Story` | Live DOM inspector that counts `<a href>` anchors in the header, proving SEO crawler visibility regardless of dropdown state |
|
|
11
|
+
| `FixedHeader` | `Story` | Header with `autoHide: false` — remains fixed during scroll |
|
|
12
|
+
|
|
13
|
+
**Shared fixtures:**
|
|
14
|
+
- `flamingoLogo` — branded logo element using `FlamingoLogo` icon + DM Sans wordmark
|
|
15
|
+
- `baseNavigation` — three-item nav config (`OpenFrame`, `OpenMSP`, `Company`) with nested dropdown children
|
|
16
|
+
- `rightActions` — accent CTA button linking to `/signup`
|
|
17
|
+
|
|
18
|
+
## Usage Example
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { Header } from '../components/navigation/header';
|
|
22
|
+
import type { HeaderConfig } from '../types/navigation';
|
|
23
|
+
|
|
24
|
+
const config: HeaderConfig = {
|
|
25
|
+
logo: { element: <FlamingoLogo />, href: '/' },
|
|
26
|
+
navigation: {
|
|
27
|
+
position: 'center',
|
|
28
|
+
items: [
|
|
29
|
+
{
|
|
30
|
+
id: 'docs',
|
|
31
|
+
label: 'Docs',
|
|
32
|
+
children: [
|
|
33
|
+
{ id: 'getting-started', label: 'Getting Started', href: '/docs/getting-started' },
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
actions: {
|
|
39
|
+
right: [<Button key="cta" variant="accent" href="/signup">Start Free Trial</Button>],
|
|
40
|
+
},
|
|
41
|
+
autoHide: true,
|
|
42
|
+
mobile: { enabled: true, onToggle: () => {} },
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
<Header config={config} />
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
> **SEO note:** Dropdown children are always rendered in the DOM and hidden via CSS `visibility: hidden` + `aria-hidden`, keeping all `<a href>` links crawlable without JavaScript execution.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- source-hash: 3916654dd739ee2e8657ff84693270c8 -->
|
|
2
|
+
Storybook stories for the `ImageUploader` UI component, covering all visual states, prop variants, and an interactive upload simulation.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Description |
|
|
7
|
+
|--------|-------------|
|
|
8
|
+
| `Default` | Bare uploader with no initial value |
|
|
9
|
+
| `AllStates` | Side-by-side grid of all four Figma states: default, hover, action, uploaded |
|
|
10
|
+
| `WithFieldLabel` | Uploader with an accessible label above the dropzone |
|
|
11
|
+
| `WithPreview` | Pre-populated image preview with remove action |
|
|
12
|
+
| `PreviewWithoutRemove` | Preview state with `onRemove` omitted |
|
|
13
|
+
| `SquareAspectRatio` | Custom `1 / 1` aspect ratio at 320px width |
|
|
14
|
+
| `ObjectFitContain` | Image preview using `contain` fit instead of the default `cover` |
|
|
15
|
+
| `Loading` | Spinner overlay on an existing preview |
|
|
16
|
+
| `LoadingEmpty` | Spinner overlay on the empty dropzone |
|
|
17
|
+
| `Disabled` / `DisabledWithPreview` | Non-interactive states |
|
|
18
|
+
| `WithError` | Field-level validation error message |
|
|
19
|
+
| `CustomCopy` | Custom label, description, accepted MIME types, and max file size |
|
|
20
|
+
| `Interactive` | Fully wired story using `useState` + `FileReader` to simulate real upload flow |
|
|
21
|
+
|
|
22
|
+
## Usage Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// Interactive story pattern — wire up local state to preview uploads
|
|
26
|
+
import { useState } from 'react';
|
|
27
|
+
import { ImageUploader } from '../components/ui/image-uploader';
|
|
28
|
+
|
|
29
|
+
function Demo() {
|
|
30
|
+
const [preview, setPreview] = useState<string | undefined>();
|
|
31
|
+
|
|
32
|
+
const handleChange = (file: File) => {
|
|
33
|
+
const reader = new FileReader();
|
|
34
|
+
reader.onload = () => setPreview(reader.result as string);
|
|
35
|
+
reader.readAsDataURL(file);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<ImageUploader
|
|
40
|
+
value={preview}
|
|
41
|
+
onChange={handleChange}
|
|
42
|
+
onRemove={() => setPreview(undefined)}
|
|
43
|
+
fieldLabel="Cover image"
|
|
44
|
+
/>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
> `ImageUploader` is intentionally decoupled from upload logic — it calls `onChange(file)` and the consumer owns the upload, preview URL management, and remove behaviour.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<!-- source-hash: 5b42d2668b0cbc76ddb288a5b0d0cf2b -->
|
|
2
|
+
Storybook stories for the `InfoCard` UI component, demonstrating various configurations including disk usage, RAM stats, copyable network values, and a multi-card grid layout.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Story | Description |
|
|
7
|
+
|-------|-------------|
|
|
8
|
+
| `DiskC` | SSD drive card with usage percentage and capacity, default progress bar |
|
|
9
|
+
| `DiskD` | HDD drive card with warning/critical thresholds on the progress bar |
|
|
10
|
+
| `PhysicalRAM` | RAM card showing DDR4 memory usage and capacity |
|
|
11
|
+
| `WithCopyableValues` | Network info card with copyable hostname, IPv4, and MAC fields |
|
|
12
|
+
| `Grid` | Three-column grid layout showcasing multiple `InfoCard` instances side by side |
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { InfoCard } from '../components'
|
|
18
|
+
|
|
19
|
+
// Basic disk card with progress bar
|
|
20
|
+
<InfoCard
|
|
21
|
+
data={{
|
|
22
|
+
title: 'C:',
|
|
23
|
+
subtitle: 'SSD Drive',
|
|
24
|
+
items: [
|
|
25
|
+
{ label: 'Current Usage', value: '42.6%' },
|
|
26
|
+
{ label: 'Capacity', value: '931 GB' },
|
|
27
|
+
],
|
|
28
|
+
progress: { value: 42.6 },
|
|
29
|
+
}}
|
|
30
|
+
/>
|
|
31
|
+
|
|
32
|
+
// With warning/critical thresholds
|
|
33
|
+
<InfoCard
|
|
34
|
+
data={{
|
|
35
|
+
title: 'D:',
|
|
36
|
+
progress: {
|
|
37
|
+
value: 62.3,
|
|
38
|
+
warningThreshold: 60,
|
|
39
|
+
criticalThreshold: 85,
|
|
40
|
+
},
|
|
41
|
+
items: [{ label: 'Current Usage', value: '62.3%' }],
|
|
42
|
+
}}
|
|
43
|
+
/>
|
|
44
|
+
|
|
45
|
+
// With copyable values
|
|
46
|
+
<InfoCard
|
|
47
|
+
data={{
|
|
48
|
+
title: 'Network',
|
|
49
|
+
items: [
|
|
50
|
+
{ label: 'IPv4', value: '192.168.1.100', copyable: true },
|
|
51
|
+
],
|
|
52
|
+
}}
|
|
53
|
+
/>
|
|
54
|
+
```
|