@flamingo-stack/openframe-frontend-core 0.0.213 → 0.0.214-snapshot.20260528192313
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-35XIT2CF.cjs → chunk-2G3NXF6J.cjs} +17 -17
- package/dist/{chunk-35XIT2CF.cjs.map → chunk-2G3NXF6J.cjs.map} +1 -1
- package/dist/{chunk-IK2X5YJU.js → chunk-7PCP7YQR.js} +2 -2
- package/dist/{chunk-ZDF6F7ED.cjs → chunk-D4MNFY67.cjs} +4 -3
- package/dist/chunk-D4MNFY67.cjs.map +1 -0
- package/dist/{chunk-OTKJASSX.cjs → chunk-NGFP4RVL.cjs} +24 -24
- package/dist/{chunk-OTKJASSX.cjs.map → chunk-NGFP4RVL.cjs.map} +1 -1
- package/dist/{chunk-3JWIJJ44.js → chunk-R6MLPU4A.js} +2 -2
- package/dist/{chunk-ZTJVRSN5.js → chunk-WQZP3JIZ.js} +4 -3
- package/dist/chunk-WQZP3JIZ.js.map +1 -0
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/index.cjs +49 -49
- package/dist/components/index.js +2 -2
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/tickets/index.cjs +61 -61
- package/dist/components/tickets/index.js +3 -3
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/.index.md +36 -34
- package/src/components/.alert-dialog.md +27 -23
- package/src/components/.announcement-bar.md +26 -21
- package/src/components/.breadcrumb.md +19 -15
- package/src/components/.calendar.md +24 -19
- package/src/components/.categories-cart.md +29 -24
- package/src/components/.checkbox.md +23 -25
- package/src/components/.chevron-button.md +37 -32
- package/src/components/.comment-card.md +32 -62
- package/src/components/.dialog.md +26 -26
- package/src/components/.dynamic-skeleton.md +54 -57
- package/src/components/.empty-state.md +42 -51
- package/src/components/.faq-accordion.md +27 -21
- package/src/components/.filter-chip.md +41 -24
- package/src/components/.flamingo-logo.md +20 -23
- package/src/components/.footer-waitlist-button.md +29 -22
- package/src/components/.footer.md +32 -32
- package/src/components/.icons-block.md +27 -17
- package/src/components/.image-cropper.md +41 -32
- package/src/components/.index.md +33 -39
- package/src/components/.input.md +31 -35
- package/src/components/.logs-list.md +31 -20
- package/src/components/.media-carousel.md +35 -36
- package/src/components/.open-source-features.md +33 -16
- package/src/components/.pagination.md +52 -51
- package/src/components/.provider-button.md +21 -23
- package/src/components/.select.md +31 -20
- package/src/components/.sidebar.md +34 -24
- package/src/components/.smooth-accordion.md +29 -24
- package/src/components/.social-icon-row.md +36 -32
- package/src/components/.textarea.md +25 -31
- package/src/components/.tool-icon.md +24 -26
- package/src/components/.unified-filter-logic.md +37 -30
- package/src/components/.unified-pagination.md +23 -22
- package/src/components/.user-summary-stub.md +38 -22
- package/src/components/.vendor-display-button.md +25 -25
- package/src/components/.vendor-icon.md +33 -25
- package/src/components/.why-it-matters.md +28 -25
- package/src/components/chat/.approval-batch-message.md +51 -0
- package/src/components/chat/.approval-request-message.md +35 -34
- package/src/components/chat/.chat-attachment-bar.md +64 -0
- package/src/components/chat/.chat-container.md +36 -18
- package/src/components/chat/.chat-input.md +37 -20
- package/src/components/chat/.chat-message-enhanced.md +30 -49
- package/src/components/chat/.chat-message-list.md +45 -32
- package/src/components/chat/.chat-message-skeleton.md +26 -22
- package/src/components/chat/.chat-panel-context.md +52 -0
- package/src/components/chat/.chat-ref.types.md +42 -0
- package/src/components/chat/.chat-sidebar-skeleton.md +34 -25
- package/src/components/chat/.chat-sidebar.md +31 -26
- package/src/components/chat/.chat-ticket-list.md +39 -0
- package/src/components/chat/.context-compaction-display.md +36 -0
- package/src/components/chat/.cycling-phrase.md +52 -0
- package/src/components/chat/.embeddable-chat.md +48 -0
- package/src/components/chat/.expand-chevron.md +24 -0
- package/src/components/chat/.index.md +31 -35
- package/src/components/chat/.mingo-onboarding-card-skeleton.md +44 -0
- package/src/components/chat/.mingo-onboarding-card.md +62 -0
- package/src/components/chat/.model-display.md +32 -30
- package/src/components/chat/.nav-link-anchor-via-runtime.md +40 -0
- package/src/components/chat/.remark-card-links.md +38 -0
- package/src/components/chat/.slash-command-suggestions.md +47 -0
- package/src/components/chat/.source-action-button.md +48 -0
- package/src/components/chat/.thinking-display.md +42 -0
- package/src/components/chat/.tool-call-blocks.md +45 -0
- package/src/components/chat/.tool-execution-display.md +44 -36
- package/src/components/chat/chat-container.tsx +1 -1
- package/src/components/chat/entity-cards/.admin-content-card.md +43 -0
- package/src/components/chat/entity-cards/.block-card.md +47 -0
- package/src/components/chat/entity-cards/.blog-card.md +52 -0
- package/src/components/chat/entity-cards/.blog-image-placeholder.md +39 -0
- package/src/components/chat/entity-cards/.campaign-card-admin.md +47 -0
- package/src/components/chat/entity-cards/.case-study-card.md +58 -0
- package/src/components/chat/entity-cards/.chat-ticket-item.md +40 -0
- package/src/components/chat/entity-cards/.chat-video-entity-card.md +43 -0
- package/src/components/chat/entity-cards/.customer-interview-card.md +53 -0
- package/src/components/chat/entity-cards/.data-room-doc-card.md +47 -0
- package/src/components/chat/entity-cards/.dispatch.md +39 -0
- package/src/components/chat/entity-cards/.entity-author-card.md +51 -0
- package/src/components/chat/entity-cards/.generic-entity-card.md +62 -0
- package/src/components/chat/entity-cards/.github-activity-card.md +61 -0
- package/src/components/chat/entity-cards/.hubspot-ticket-card.md +53 -0
- package/src/components/chat/entity-cards/.index.md +66 -0
- package/src/components/chat/entity-cards/.investor-update-card.md +47 -0
- package/src/components/chat/entity-cards/.onboarding-guide-card.md +58 -0
- package/src/components/chat/entity-cards/.product-release-card-defaults.md +31 -0
- package/src/components/chat/entity-cards/.product-release-card.md +29 -0
- package/src/components/chat/entity-cards/.program-card-defaults.md +41 -0
- package/src/components/chat/entity-cards/.program-card.md +59 -0
- package/src/components/chat/entity-cards/.roadmap-card.md +46 -0
- package/src/components/chat/entity-cards/.roadmap-vote-button.md +52 -0
- package/src/components/chat/entity-cards/.slack-message-card.md +48 -0
- package/src/components/chat/entity-cards/.task-type-icon.md +47 -0
- package/src/components/chat/hooks/.index.md +36 -21
- package/src/components/chat/hooks/.use-chat-attachment-image-gallery.md +51 -0
- package/src/components/chat/hooks/.use-chat-attachments.md +48 -0
- package/src/components/chat/hooks/.use-chat-card-item.md +39 -0
- package/src/components/chat/hooks/.use-chat-identity.md +45 -0
- package/src/components/chat/hooks/.use-chat.md +58 -0
- package/src/components/chat/hooks/.use-chunk-catchup.md +46 -48
- package/src/components/chat/hooks/.use-close-on-navigation.md +44 -0
- package/src/components/chat/hooks/.use-collapsible.md +48 -0
- package/src/components/chat/hooks/.use-embedded-chat.md +32 -0
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +40 -0
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +52 -0
- package/src/components/chat/hooks/.use-nats-dialog-subscription.md +49 -30
- package/src/components/chat/hooks/.use-proxied-image-url.md +40 -0
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +43 -40
- package/src/components/chat/hooks/.use-slash-commands.md +46 -0
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +34 -0
- package/src/components/chat/hooks/.use-sse.md +60 -0
- package/src/components/chat/hooks/.use-unified-chat.md +57 -0
- package/src/components/chat/types/.api.types.md +52 -38
- package/src/components/chat/types/.chat.types.md +43 -34
- package/src/components/chat/types/.component.types.md +47 -48
- package/src/components/chat/types/.index.md +20 -27
- package/src/components/chat/types/.message.types.md +58 -48
- package/src/components/chat/types/.network.types.md +57 -31
- package/src/components/chat/types/.processing.types.md +49 -31
- package/src/components/chat/types/.unified-chat-state.types.md +41 -0
- package/src/components/chat/types/entities/.blog.md +43 -0
- package/src/components/chat/types/entities/.case-study.md +26 -0
- package/src/components/chat/types/entities/.content-ref.md +41 -0
- package/src/components/chat/types/entities/.customer-interview.md +28 -0
- package/src/components/chat/types/entities/.data-room-doc.md +36 -0
- package/src/components/chat/types/entities/.github-activity.md +43 -0
- package/src/components/chat/types/entities/.hubspot-ticket.md +53 -0
- package/src/components/chat/types/entities/.index.md +42 -0
- package/src/components/chat/types/entities/.investor-update.md +45 -0
- package/src/components/chat/types/entities/.onboarding-guide.md +50 -0
- package/src/components/chat/types/entities/.program-types.md +57 -0
- package/src/components/chat/types/entities/.roadmap-item.md +58 -0
- package/src/components/chat/types/entities/.slack-message.md +35 -0
- package/src/components/chat/utils/.agent-status-message.md +45 -0
- package/src/components/chat/utils/.auto-continuation-directive.md +58 -0
- package/src/components/chat/utils/.chat-attachment-markdown.md +54 -0
- package/src/components/chat/utils/.chat-authed-fetch.md +25 -0
- package/src/components/chat/utils/.chat-nav-resolution.md +46 -0
- package/src/components/chat/utils/.chat-proxy-auth-storage.md +38 -0
- package/src/components/chat/utils/.chip-action-class.md +34 -0
- package/src/components/chat/utils/.chip-styles.md +46 -0
- package/src/components/chat/utils/.chunk-parser.md +38 -28
- package/src/components/chat/utils/.clickup-task-type-utils.md +48 -0
- package/src/components/chat/utils/.compact-card-classes.md +62 -0
- package/src/components/chat/utils/.decide-new-tab.md +51 -0
- package/src/components/chat/utils/.external-app-urls.md +29 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +25 -29
- package/src/components/chat/utils/.flatten-assistant-content.md +34 -0
- package/src/components/chat/utils/.icon-registry.md +46 -0
- package/src/components/chat/utils/.index.md +37 -32
- package/src/components/chat/utils/.is-cross-origin-url.md +35 -0
- package/src/components/chat/utils/.message-segment-accumulator.md +25 -34
- package/src/components/chat/utils/.nav-anchor-props.md +44 -0
- package/src/components/chat/utils/.nav-click-handler.md +47 -0
- package/src/components/chat/utils/.onboarding-icons.md +28 -0
- package/src/components/chat/utils/.process-historical-messages.md +46 -35
- package/src/components/chat/utils/.scroll-anchor.md +40 -0
- package/src/components/chat/utils/.slash-dispatch-utils.md +44 -0
- package/src/components/chat/utils/.source-icons.md +35 -0
- package/src/components/chat/utils/.source-row-cta.md +54 -0
- package/src/components/chat/utils/.tool-call-helpers.md +42 -0
- package/src/components/contact/.contact-form.md +43 -0
- package/src/components/contact/.index.md +27 -0
- package/src/components/features/.array-entry-manager.md +36 -45
- package/src/components/features/.changelog-manager.md +47 -21
- package/src/components/features/.changelog-sections-manager.md +21 -26
- package/src/components/features/.command-box.md +31 -28
- package/src/components/features/.entity-summary-editor.md +46 -0
- package/src/components/features/.entity-video-section.md +51 -0
- package/src/components/features/.figma-prototype-viewer.md +48 -29
- package/src/components/features/.filters-dropdown.md +33 -46
- package/src/components/features/.highlight-config-section.md +42 -0
- package/src/components/features/.highlight-generation-section.md +46 -0
- package/src/components/features/.highlight-video-combined-section.md +47 -0
- package/src/components/features/.highlight-video-preview.md +44 -0
- package/src/components/features/.highlight-video-section.md +47 -0
- package/src/components/features/.index.md +40 -66
- package/src/components/features/.media-gallery-manager.md +48 -38
- package/src/components/features/.more-about-button.md +22 -19
- package/src/components/features/.og-editor-preview.md +40 -36
- package/src/components/features/.parallax-image-showcase.md +33 -26
- package/src/components/features/.paths-display.md +42 -43
- package/src/components/features/.platform-badge.md +37 -36
- package/src/components/features/.platform-filter.md +23 -16
- package/src/components/features/.policy-configuration-panel.md +48 -56
- package/src/components/features/.provider-button.md +33 -36
- package/src/components/features/.push-button-selector.md +40 -29
- package/src/components/features/.release-media-manager.md +46 -31
- package/src/components/features/.section-selector.md +26 -31
- package/src/components/features/.select-button.md +35 -25
- package/src/components/features/.seo-editor-preview.md +41 -44
- package/src/components/features/.social-links-manager.md +25 -19
- package/src/components/features/.start-with-openframe-button.md +37 -29
- package/src/components/features/.status-filter-component.md +36 -20
- package/src/components/features/.tags-selector.md +40 -24
- package/src/components/features/.transcribe-and-summarize-combined-section.md +45 -0
- package/src/components/features/.transcribe-summarize-section.md +48 -0
- package/src/components/features/.transcript-summary-editor.md +53 -0
- package/src/components/features/.video-bites-display.md +46 -0
- package/src/components/features/.video-clips-section.md +41 -0
- package/src/components/features/.video-ratio-tabs.md +56 -0
- package/src/components/features/.video-source-selector.md +60 -0
- package/src/components/features/.video.md +44 -0
- package/src/components/features/.waitlist-form.md +60 -0
- package/src/components/features/ai-enrich/.AIEnrichButton.md +30 -27
- package/src/components/features/ai-enrich/.AIEnrichSection.md +46 -42
- package/src/components/features/board/.board-column-header.md +38 -0
- package/src/components/features/board/.board-column.md +43 -0
- package/src/components/features/board/.board.md +51 -0
- package/src/components/features/board/.color-utils.md +26 -0
- package/src/components/features/board/.index.md +56 -0
- package/src/components/features/board/.ticket-card-skeleton.md +38 -0
- package/src/components/features/board/.ticket-card.md +47 -0
- package/src/components/features/board/.types.md +45 -0
- package/src/components/features/board/.use-board-collapse.md +34 -0
- package/src/components/features/notifications/.index.md +57 -0
- package/src/components/features/notifications/.notification-drawer.md +34 -0
- package/src/components/features/notifications/.notification-tile.md +39 -0
- package/src/components/features/notifications/.notifications-context.md +73 -0
- package/src/components/features/notifications/.types.md +45 -0
- package/src/components/icons/.about-icon.md +20 -28
- package/src/components/icons/.ai-robot-icon.md +15 -17
- package/src/components/icons/.bash-icon.md +16 -23
- package/src/components/icons/.buildings-icon.md +10 -24
- package/src/components/icons/.capterra-icon.md +30 -26
- package/src/components/icons/.carta-icon.md +29 -0
- package/src/components/icons/.clickup-icon.md +26 -0
- package/src/components/icons/.cmd-icon.md +15 -22
- package/src/components/icons/.coins-icon.md +17 -25
- package/src/components/icons/.community-hub-icon.md +19 -25
- package/src/components/icons/.community-icon.md +24 -21
- package/src/components/icons/.compare-icon.md +32 -19
- package/src/components/icons/.copy-icon.md +29 -15
- package/src/components/icons/.custom-external-link-icon.md +19 -17
- package/src/components/icons/.custom-fork-icon.md +32 -21
- package/src/components/icons/.custom-license-icon.md +29 -25
- package/src/components/icons/.custom-star-icon.md +20 -28
- package/src/components/icons/.custom-time-icon.md +21 -22
- package/src/components/icons/.cut-vendor-costs-icon.md +6 -19
- package/src/components/icons/.dashboard-icon.md +13 -18
- package/src/components/icons/.deno-icon.md +16 -23
- package/src/components/icons/.donut-icon.md +12 -23
- package/src/components/icons/.double-chevron-icon.md +28 -36
- package/src/components/icons/.elestio-logo.md +13 -23
- package/src/components/icons/.empty-vendor-icon.md +16 -18
- package/src/components/icons/.explore-categories-icon.md +18 -29
- package/src/components/icons/.eye-icon.md +16 -26
- package/src/components/icons/.facebook-icon.md +9 -20
- package/src/components/icons/.figma-icon.md +8 -17
- package/src/components/icons/.filter-icon.md +15 -17
- package/src/components/icons/.flamingo-logo.md +28 -27
- package/src/components/icons/.folder-shield-icon.md +28 -19
- package/src/components/icons/.g2-icon.md +22 -21
- package/src/components/icons/.getapp-icon.md +25 -21
- package/src/components/icons/.github-icon.md +13 -25
- package/src/components/icons/.globe-icon.md +14 -19
- package/src/components/icons/.google-gemini-icon.md +16 -19
- package/src/components/icons/.google-logo.md +15 -21
- package/src/components/icons/.grid-view-icon.md +30 -19
- package/src/components/icons/.hamburger-icon.md +22 -20
- package/src/components/icons/.hand-dollar-icon.md +24 -34
- package/src/components/icons/.hotel-icon.md +27 -21
- package/src/components/icons/.icon-utils.md +28 -29
- package/src/components/icons/.image-icon.md +15 -22
- package/src/components/icons/.index.md +25 -28
- package/src/components/icons/.info-circle-icon.md +29 -30
- package/src/components/icons/.instagram-icon.md +10 -24
- package/src/components/icons/.jump-in-icon.md +18 -18
- package/src/components/icons/.linux-icon.md +18 -18
- package/src/components/icons/.log-out-icon.md +15 -23
- package/src/components/icons/.logs-icon.md +14 -23
- package/src/components/icons/.margin-crisis-icon.md +21 -20
- package/src/components/icons/.menu-icon.md +18 -19
- package/src/components/icons/.miami-cyber-gang-logo-face-only.md +18 -21
- package/src/components/icons/.miami-cyber-gang-logo.md +22 -14
- package/src/components/icons/.mlg-logo.md +18 -16
- package/src/components/icons/.moon-icon.md +32 -22
- package/src/components/icons/.ms-icon.md +30 -19
- package/src/components/icons/.nushell-icon.md +7 -21
- package/src/components/icons/.open-source-icon.md +19 -23
- package/src/components/icons/.openai-icon.md +9 -24
- package/src/components/icons/.openframe-ai-icons.md +25 -26
- package/src/components/icons/.openframe-logo.md +28 -22
- package/src/components/icons/.openframe-text.md +24 -27
- package/src/components/icons/.openmsp-logo.md +26 -23
- package/src/components/icons/.pilot-icon.md +23 -0
- package/src/components/icons/.powershell-icon.md +17 -22
- package/src/components/icons/.python-icon.md +16 -23
- package/src/components/icons/.queries-icon.md +13 -21
- package/src/components/icons/.reddit-icon.md +28 -24
- package/src/components/icons/.remote-control-icon.md +13 -17
- package/src/components/icons/.script-icon.md +27 -19
- package/src/components/icons/.search-icon.md +21 -21
- package/src/components/icons/.send-icon.md +14 -16
- package/src/components/icons/.settings-icon.md +30 -19
- package/src/components/icons/.shape-circle-dash-icon.md +16 -21
- package/src/components/icons/.shell-icon.md +15 -19
- package/src/components/icons/.shield-check-icon.md +18 -31
- package/src/components/icons/.shield-key-icon.md +25 -25
- package/src/components/icons/.shield-lock-icon.md +8 -18
- package/src/components/icons/.slack-icon.md +28 -32
- package/src/components/icons/.sparkles-icon.md +18 -23
- package/src/components/icons/.sso-configuration-icon.md +29 -16
- package/src/components/icons/.sun-icon.md +20 -18
- package/src/components/icons/.table-view-icon.md +17 -19
- package/src/components/icons/.telegram-icon.md +8 -22
- package/src/components/icons/.thumbs-down-icon.md +10 -19
- package/src/components/icons/.thumbs-up-icon.md +8 -17
- package/src/components/icons/.tool-directory-icons.md +24 -28
- package/src/components/icons/.trustpilot-icon.md +25 -22
- package/src/components/icons/.user-icon.md +26 -28
- package/src/components/icons/.users-group-icon.md +28 -24
- package/src/components/icons/.vendor-showcase-icons.md +21 -29
- package/src/components/icons/.vendors-icon.md +18 -22
- package/src/components/icons/.whatsapp-icon.md +30 -14
- package/src/components/icons/.x-icon.md +18 -23
- package/src/components/icons/.x-logo.md +13 -38
- package/src/components/icons/.youtube-icon.md +8 -19
- package/src/components/icons/device-type-icons/.get-device-type-icon.md +26 -34
- package/src/components/icons-v2-generated/.index.md +52 -0
- package/src/components/icons-v2-generated/alphabet/.index.md +33 -0
- package/src/components/icons-v2-generated/arrows/.index.md +39 -0
- package/src/components/icons-v2-generated/audio-and-visual/.index.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.elestio-logo-icon.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.gemini-logo-icon.md +37 -0
- package/src/components/icons-v2-generated/brand-logos/.google-gemini-logo-icon.md +33 -0
- package/src/components/icons-v2-generated/brand-logos/.index.md +38 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-grey-icon.md +35 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-icon.md +36 -0
- package/src/components/icons-v2-generated/buildings/.index.md +48 -0
- package/src/components/icons-v2-generated/charts/.index.md +40 -0
- package/src/components/icons-v2-generated/clothes/.index.md +48 -0
- package/src/components/icons-v2-generated/coding/.index.md +42 -0
- package/src/components/icons-v2-generated/communication/.index.md +39 -0
- package/src/components/icons-v2-generated/date-and-time/.index.md +29 -0
- package/src/components/icons-v2-generated/design/.index.md +39 -0
- package/src/components/icons-v2-generated/devices/.index.md +38 -0
- package/src/components/icons-v2-generated/documents/.index.md +38 -0
- package/src/components/icons-v2-generated/finance/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.leafy-green-icon.md +36 -0
- package/src/components/icons-v2-generated/food-and-drinks/.strawberry-icon.md +39 -0
- package/src/components/icons-v2-generated/health/.index.md +40 -0
- package/src/components/icons-v2-generated/household/.index.md +45 -0
- package/src/components/icons-v2-generated/interface/.index.md +36 -0
- package/src/components/icons-v2-generated/map-and-travel/.index.md +41 -0
- package/src/components/icons-v2-generated/media-playback/.index.md +51 -0
- package/src/components/icons-v2-generated/number/.index.md +41 -0
- package/src/components/icons-v2-generated/school/.index.md +37 -0
- package/src/components/icons-v2-generated/security/.fingerprint-icon.md +38 -0
- package/src/components/icons-v2-generated/security/.index.md +39 -0
- package/src/components/icons-v2-generated/shopping/.index.md +42 -0
- package/src/components/icons-v2-generated/signs-and-symbols/.index.md +32 -0
- package/src/components/icons-v2-generated/sort-and-filter/.index.md +35 -0
- package/src/components/icons-v2-generated/sport/.index.md +41 -0
- package/src/components/icons-v2-generated/text-editor/.index.md +44 -0
- package/src/components/icons-v2-generated/users/.index.md +45 -0
- package/src/components/icons-v2-generated/vehicles-and-delivery/.index.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.flower-sakura-icon.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.index.md +34 -0
- package/src/components/layout/.article-detail-layout.md +43 -0
- package/src/components/layout/.back-button.md +40 -0
- package/src/components/layout/.list-page-layout.md +35 -26
- package/src/components/layout/.page-container.md +27 -38
- package/src/components/layout/.page-layout.md +50 -0
- package/src/components/layout/.title-block.md +42 -0
- package/src/components/loading/.card-skeleton.md +38 -29
- package/src/components/loading/.device-card-skeleton.md +29 -25
- package/src/components/loading/.index.md +39 -46
- package/src/components/loading/.margin-report-skeleton.md +45 -34
- package/src/components/loading/.organization-card-skeleton.md +39 -44
- package/src/components/loading/.page-layout-skeleton.md +34 -45
- package/src/components/loading/.unified-skeleton.md +62 -36
- package/src/components/navigation/.app-header.md +40 -29
- package/src/components/navigation/.app-layout.md +25 -26
- package/src/components/navigation/.header-global-search.md +34 -37
- package/src/components/navigation/.header-organization-filter.md +23 -22
- package/src/components/navigation/.header.md +31 -35
- package/src/components/navigation/.mobile-burger-menu.md +39 -47
- package/src/components/navigation/.mobile-nav-panel.md +51 -32
- package/src/components/navigation/.navigation-sidebar-header.md +36 -0
- package/src/components/navigation/.navigation-sidebar-item.md +45 -0
- package/src/components/navigation/.navigation-sidebar-toggle.md +38 -0
- package/src/components/navigation/.navigation-sidebar.md +33 -34
- package/src/components/navigation/.sliding-sidebar.md +52 -41
- package/src/components/navigation/.sticky-section-nav.md +56 -48
- package/src/components/platform/.ScriptArguments.md +39 -25
- package/src/components/platform/.ScriptInfoSection.md +30 -26
- package/src/components/platform/.ShellTypeBadge.md +18 -13
- package/src/components/platform/.SoftwareInfo.md +23 -27
- package/src/components/platform/.SoftwareSourceBadge.md +28 -19
- package/src/components/platform/.ToolBadge.md +25 -26
- package/src/components/platform/ShellTypeBadge.tsx +2 -2
- package/src/components/providers/.theme-provider.md +52 -0
- package/src/components/shared/delivery/.delivery-lists.md +39 -0
- package/src/components/shared/delivery/.delivery-row.md +41 -0
- package/src/components/shared/delivery/.delivery-table.md +41 -0
- package/src/components/shared/delivery/.index.md +38 -0
- package/src/components/shared/dev-section/.dev-card-row.md +60 -0
- package/src/components/shared/dev-section/.dev-section-page.md +48 -0
- package/src/components/shared/dev-section/.dev-section-view.md +43 -0
- package/src/components/shared/dev-section/.index.md +38 -0
- package/src/components/shared/legal-document/.index.md +40 -0
- package/src/components/shared/legal-document/.legal-document-page.md +50 -0
- package/src/components/shared/legal-document/.use-legal-docs.md +42 -0
- package/src/components/shared/onboarding/.onboarding-step-card.md +32 -31
- package/src/components/shared/onboarding/.onboarding-walkthrough.md +39 -43
- package/src/components/shared/product-release/.index.md +28 -30
- package/src/components/shared/product-release/.product-release-card-skeleton.md +28 -28
- package/src/components/shared/product-release/.product-release-card.md +45 -27
- package/src/components/shared/product-release/.release-detail-page.md +23 -24
- package/src/components/shared/roadmap/.index.md +37 -0
- package/src/components/shared/roadmap/.roadmap-grid-skeleton.md +39 -0
- package/src/components/shared/roadmap/.roadmap-grid.md +66 -0
- package/src/components/shared/roadmap/.use-roadmap-voting.md +68 -0
- package/src/components/tickets/.help-center-card.md +51 -0
- package/src/components/tickets/.help-center-create-form.md +38 -0
- package/src/components/tickets/.help-center-list.md +40 -0
- package/src/components/tickets/.index.md +65 -0
- package/src/components/tickets/.ticket-center.md +51 -0
- package/src/components/tickets/.ticket-detail-drawer.md +48 -0
- package/src/components/tickets/.ticket-linked-delivery-card.md +36 -0
- package/src/components/tickets/.ticket-open-form.md +50 -0
- package/src/components/tickets/.ticket-row.md +30 -0
- package/src/components/tickets/.types.md +57 -0
- package/src/components/tickets/hooks/.use-ticket-actions.md +77 -0
- package/src/components/tickets/hooks/.use-ticket-engagements.md +42 -0
- package/src/components/tickets/hooks/.use-tickets-list.md +54 -0
- package/src/components/ui/.actions-menu.md +66 -41
- package/src/components/ui/.alert-dialog.md +29 -26
- package/src/components/ui/.allowed-domains-input.md +29 -21
- package/src/components/ui/.assignee-dropdown.md +45 -0
- package/src/components/ui/.autocomplete.md +47 -41
- package/src/components/ui/.benefit-card.md +51 -36
- package/src/components/ui/.brand-association-card.md +30 -27
- package/src/components/ui/.breadcrumb.md +17 -15
- package/src/components/ui/.checkbox-block.md +39 -35
- package/src/components/ui/.checkbox-with-description.md +23 -16
- package/src/components/ui/.checkbox.md +31 -23
- package/src/components/ui/.circular-progress.md +49 -19
- package/src/components/ui/.content-loader.md +32 -20
- package/src/components/ui/.cursor-pagination.md +41 -52
- package/src/components/ui/.dashboard-info-card.md +33 -26
- package/src/components/ui/.date-picker.md +27 -25
- package/src/components/ui/.device-card-compact.md +28 -29
- package/src/components/ui/.device-card.md +27 -27
- package/src/components/ui/.dialog.md +25 -16
- package/src/components/ui/.drawer.md +86 -0
- package/src/components/ui/.dropdown-button.md +45 -0
- package/src/components/ui/.entity-image.md +46 -0
- package/src/components/ui/.error-state.md +41 -28
- package/src/components/ui/.feature-card.md +35 -31
- package/src/components/ui/.feature-list.md +48 -0
- package/src/components/ui/.field-wrapper.md +47 -0
- package/src/components/ui/.file-upload.md +42 -0
- package/src/components/ui/.filter-checkbox-item.md +43 -0
- package/src/components/ui/.filter-list.md +57 -0
- package/src/components/ui/.filter-modal.md +59 -0
- package/src/components/ui/.floating-tooltip.md +43 -26
- package/src/components/ui/.hidden-tags-popup.md +49 -0
- package/src/components/ui/.hover-dropdown.md +54 -0
- package/src/components/ui/.image-gallery-modal.md +41 -34
- package/src/components/ui/.image-uploader.md +53 -0
- package/src/components/ui/.index.md +40 -34
- package/src/components/ui/.info-card.md +31 -31
- package/src/components/ui/.info-row.md +31 -27
- package/src/components/ui/.input-trigger.md +44 -0
- package/src/components/ui/.input.md +37 -31
- package/src/components/ui/.markdown-editor.md +57 -0
- package/src/components/ui/.modal-v2.md +51 -0
- package/src/components/ui/.modal.md +32 -31
- package/src/components/ui/.more-actions-menu.md +45 -38
- package/src/components/ui/.organization-card.md +31 -37
- package/src/components/ui/.page-actions.md +44 -54
- package/src/components/ui/.phone-input.md +54 -0
- package/src/components/ui/.progress-bar.md +35 -27
- package/src/components/ui/.radio-group.md +39 -27
- package/src/components/ui/.release-changelog-section.md +34 -34
- package/src/components/ui/.search-input.md +48 -0
- package/src/components/ui/.select.md +54 -34
- package/src/components/ui/.service-card.md +42 -40
- package/src/components/ui/.sheet.md +27 -18
- package/src/components/ui/.simple-markdown-renderer.md +29 -31
- package/src/components/ui/.sort-column-item.md +42 -0
- package/src/components/ui/.square-avatar.md +34 -24
- package/src/components/ui/.status-badge.md +26 -38
- package/src/components/ui/.switch.md +22 -35
- package/src/components/ui/.tab-navigation.md +56 -53
- package/src/components/ui/.tab-selector.md +40 -0
- package/src/components/ui/.tag-key-value-filter.md +56 -0
- package/src/components/ui/.tag-search-input.md +53 -0
- package/src/components/ui/.tag.md +49 -31
- package/src/components/ui/.tags-manager.md +60 -0
- package/src/components/ui/.textarea.md +44 -34
- package/src/components/ui/.ticket-attachments-list.md +45 -0
- package/src/components/ui/.ticket-detail-section.md +29 -0
- package/src/components/ui/.ticket-info-section.md +56 -0
- package/src/components/ui/.ticket-note-card.md +53 -0
- package/src/components/ui/.ticket-notes-section.md +54 -0
- package/src/components/ui/.ticket-status-tag.md +49 -0
- package/src/components/ui/.title-content-block.md +25 -26
- package/src/components/ui/.toaster.md +40 -28
- package/src/components/ui/.tooltip.md +22 -11
- package/src/components/ui/.truncate-text.md +39 -0
- package/src/components/ui/button/.button-styles.md +35 -0
- package/src/components/ui/button/.button.md +53 -0
- package/src/components/ui/button/.split-button.md +48 -0
- package/src/components/ui/data-table/.data-table-body.md +48 -0
- package/src/components/ui/data-table/.data-table-column-filter.md +45 -0
- package/src/components/ui/data-table/.data-table-cursor-footer.md +45 -0
- package/src/components/ui/data-table/.data-table-empty.md +43 -0
- package/src/components/ui/data-table/.data-table-header.md +55 -0
- package/src/components/ui/data-table/.data-table-infinite-footer.md +44 -0
- package/src/components/ui/data-table/.data-table-row-count.md +43 -0
- package/src/components/ui/data-table/.data-table-row.md +47 -0
- package/src/components/ui/data-table/.data-table-skeleton.md +42 -0
- package/src/components/ui/data-table/.data-table.md +47 -0
- package/src/components/ui/data-table/.index.md +55 -0
- package/src/components/ui/data-table/.types.md +54 -0
- package/src/components/ui/data-table/.use-data-table.md +45 -0
- package/src/components/ui/data-table/.utils.md +38 -0
- package/src/components/ui/file-manager/.file-manager-action-bar.md +39 -30
- package/src/components/ui/file-manager/.file-manager-breadcrumb.md +29 -27
- package/src/components/ui/file-manager/.file-manager-context-menu.md +38 -42
- package/src/components/ui/file-manager/.file-manager-empty.md +26 -39
- package/src/components/ui/file-manager/.file-manager-table-row.md +33 -41
- package/src/components/ui/file-manager/.file-manager.md +35 -31
- package/src/components/ui/query-report-table/.index.md +43 -0
- package/src/components/ui/query-report-table/.query-report-table-header.md +36 -0
- package/src/components/ui/query-report-table/.query-report-table-row.md +40 -0
- package/src/components/ui/query-report-table/.query-report-table-skeleton.md +44 -0
- package/src/components/ui/query-report-table/.query-report-table.md +47 -0
- package/src/components/ui/query-report-table/.types.md +41 -0
- package/src/components/ui/query-report-table/.utils.md +35 -0
- package/src/components/ui/table/.index.md +27 -48
- package/src/components/ui/table/.table-cell.md +18 -27
- package/src/components/ui/table/.table-column-filter-dropdown.md +40 -0
- package/src/components/ui/table/.table-description-cell.md +24 -14
- package/src/components/ui/table/.table-empty-state.md +21 -22
- package/src/components/ui/table/.table-header.md +25 -40
- package/src/components/ui/table/.table-row.md +22 -40
- package/src/components/ui/table/.table-skeleton.md +33 -26
- package/src/components/ui/table/.table-timestamp-cell.md +26 -16
- package/src/components/ui/table/.table.md +39 -59
- package/src/components/ui/table/.types.md +44 -36
- package/src/components/ui/table/.utils.md +18 -20
- package/src/contexts/.chat-runtime-context.md +54 -0
- package/src/contexts/.endpoints-runtime-context.md +58 -0
- package/src/contexts/.index.md +53 -0
- package/src/contexts/.use-outer-or-default.md +36 -0
- package/src/embed-shims/.index.md +45 -0
- package/src/embed-shims/.next-dynamic.md +43 -0
- package/src/embed-shims/.next-image.md +45 -0
- package/src/embed-shims/.next-link.md +59 -0
- package/src/embed-shims/.next-navigation.md +59 -0
- package/src/hooks/.index.md +34 -29
- package/src/hooks/.use-access-code-integration.md +49 -0
- package/src/hooks/.use-contact-submission.md +37 -26
- package/src/hooks/.use-copy-to-clipboard.md +42 -0
- package/src/hooks/.use-near-viewport.md +44 -0
- package/src/hooks/.use-og-placeholder.md +51 -0
- package/src/hooks/.use-toast.md +36 -35
- package/src/hooks/state/.use-api-params.md +29 -46
- package/src/hooks/state/.use-query-params.md +37 -33
- package/src/hooks/ui/.index.md +33 -32
- package/src/hooks/ui/.use-auto-limit-tags.md +54 -0
- package/src/hooks/ui/.use-horizontal-scrollbar.md +74 -0
- package/src/hooks/ui/.use-image-edge-color.md +42 -0
- package/src/hooks/ui/.use-media-query.md +33 -25
- package/src/hooks/ui/.use-search.md +51 -0
- package/src/nats/.nats.md +49 -28
- package/src/schemas/.contact-schema.md +45 -0
- package/src/stories/.AnnouncementBar.stories.md +45 -0
- package/src/stories/.AppLayout.stories.md +20 -21
- package/src/stories/.Autocomplete.stories.md +48 -34
- package/src/stories/.Board.stories.md +35 -0
- package/src/stories/.Button.stories.md +36 -33
- package/src/stories/.ChatTicketList.stories.md +33 -0
- package/src/stories/.CheckboxBlock.stories.md +40 -28
- package/src/stories/.ContentLoader.stories.md +47 -0
- package/src/stories/.DashboardInfoCard.stories.md +57 -0
- package/src/stories/.DataTable.stories.md +41 -0
- package/src/stories/.DatePicker.stories.md +66 -52
- package/src/stories/.DeviceCard.stories.md +41 -40
- package/src/stories/.DeviceCardCompact.stories.md +41 -0
- package/src/stories/.DotsLoaderIcon.stories.md +36 -0
- package/src/stories/.Drawer.stories.md +58 -0
- package/src/stories/.EmbeddableChat.stories.md +41 -0
- package/src/stories/.FileManager.stories.md +41 -0
- package/src/stories/.FileManagerActionBar.stories.md +38 -0
- package/src/stories/.FileUpload.stories.md +53 -0
- package/src/stories/.FilterList.stories.md +54 -0
- package/src/stories/.FilterModal.stories.md +72 -0
- package/src/stories/.FiltersDropdown.stories.md +57 -0
- package/src/stories/.Header.stories.md +48 -0
- package/src/stories/.ImageUploader.stories.md +49 -0
- package/src/stories/.InfoCard.stories.md +54 -0
- package/src/stories/.Input.stories.md +48 -30
- package/src/stories/.ListPageLayout.stories.md +56 -43
- package/src/stories/.MingoOnboardingCard.stories.md +42 -0
- package/src/stories/.MingoOnboardingCardSkeleton.stories.md +35 -0
- package/src/stories/.Modal.stories.md +40 -31
- package/src/stories/.NotificationDrawer.stories.md +55 -0
- package/src/stories/.OnboardingStepCard.stories.md +41 -0
- package/src/stories/.OrganizationCard.stories.md +61 -0
- package/src/stories/.PageActions.stories.md +52 -49
- package/src/stories/.PageContainer.stories.md +41 -35
- package/src/stories/.PageLayout.stories.md +60 -0
- package/src/stories/.ParallaxImageShowcase.stories.md +49 -0
- package/src/stories/.PhoneInput.stories.md +53 -0
- package/src/stories/.QueryReportTable.stories.md +44 -0
- package/src/stories/.RadioGroup.stories.md +46 -0
- package/src/stories/.RadioGroupBlock.stories.md +45 -0
- package/src/stories/.Select.stories.md +29 -15
- package/src/stories/.SlashCommandSuggestions.stories.md +41 -0
- package/src/stories/.SplitButton.stories.md +62 -0
- package/src/stories/.TabNavigation.stories.md +47 -38
- package/src/stories/.TabSelector.stories.md +65 -0
- package/src/stories/.Table.stories.md +38 -46
- package/src/stories/.TableColumnFilterDropdown.stories.md +46 -0
- package/src/stories/.Tag.stories.md +43 -32
- package/src/stories/.TagKeyValueFilter.stories.md +44 -0
- package/src/stories/.TagSearchInput.stories.md +61 -0
- package/src/stories/.Textarea.stories.md +49 -26
- package/src/stories/.Theme.stories.md +41 -0
- package/src/stories/.TicketAttachmentsList.stories.md +39 -0
- package/src/stories/.TicketDescriptionViewer.stories.md +39 -0
- package/src/stories/.TicketInfoSection.stories.md +40 -0
- package/src/stories/.TicketKnowledgeBaseList.stories.md +36 -0
- package/src/stories/.TicketNotesSection.stories.md +50 -0
- package/src/stories/.Toaster.stories.md +40 -0
- package/src/stories/.ToolExecutionDisplay.stories.md +41 -0
- package/src/stories/.Tooltip.stories.md +41 -0
- package/src/stories/.UserSummary.stories.md +41 -0
- package/src/stories/.WaitlistForm.stories.md +42 -0
- package/src/stories/BlogCard.stories.tsx +61 -0
- package/src/stories/CampaignCardAdmin.stories.tsx +52 -0
- package/src/stories/CaseStudyCard.stories.tsx +42 -0
- package/src/stories/ChatContainer.stories.tsx +186 -0
- package/src/stories/ChatInlineVideoPill.stories.tsx +63 -0
- package/src/stories/CustomerInterviewCard.stories.tsx +42 -0
- package/src/stories/DataRoomDocCard.stories.tsx +52 -0
- package/src/stories/GenericEntityCard.stories.tsx +66 -0
- package/src/stories/GitHubActivityCard.stories.tsx +61 -0
- package/src/stories/HubspotTicketCard.stories.tsx +98 -0
- package/src/stories/InvestorUpdateCard.stories.tsx +42 -0
- package/src/stories/OnboardingGuideCard.stories.tsx +52 -0
- package/src/stories/ProductReleaseCard.stories.tsx +61 -0
- package/src/stories/ProgramCard.stories.tsx +79 -0
- package/src/stories/RoadmapCard.stories.tsx +75 -0
- package/src/stories/SlackMessageCard.stories.tsx +41 -0
- package/src/stories/__fixtures__/chat-cards.ts +604 -0
- package/src/types/.blog.md +53 -29
- package/src/types/.case-study.md +44 -27
- package/src/types/.customer-interview.md +66 -44
- package/src/types/.delivery.md +40 -0
- package/src/types/.employee.md +24 -30
- package/src/types/.index.md +33 -47
- package/src/types/.marketing.md +49 -44
- package/src/types/.navigation.md +33 -25
- package/src/types/.os.types.md +32 -27
- package/src/types/.platform.md +31 -28
- package/src/types/.product-release.md +65 -38
- package/src/types/.supabase.md +37 -29
- package/src/types/.team.md +41 -33
- package/src/types/.video-processing.md +54 -0
- package/src/types/.waitlist.md +40 -36
- package/src/utils/.access-code-client.md +37 -36
- package/src/utils/.cn.md +31 -23
- package/src/utils/.color-analysis.md +35 -0
- package/src/utils/.country-phone-utils.md +39 -0
- package/src/utils/.date-formatters.md +19 -18
- package/src/utils/.embed-authed-fetch.md +39 -0
- package/src/utils/.embed-proxy-auth-storage.md +38 -0
- package/src/utils/.fetch-priority.md +41 -0
- package/src/utils/.format.md +74 -25
- package/src/utils/.generic-domain-utils.md +42 -0
- package/src/utils/.image-proxy.md +59 -23
- package/src/utils/.index.md +42 -49
- package/src/utils/.local-storage-adapter.md +50 -0
- package/src/utils/.ods-color-utils.md +55 -38
- package/src/utils/.platform-config.md +45 -25
- package/src/utils/.scroll-into-view.md +40 -0
- package/src/utils/.source-icons.md +53 -0
- package/src/utils/.sse-decision-frame.md +46 -0
- package/src/utils/dev-sections/.index.md +34 -0
- package/src/utils/dev-sections/.openframe-dev-sections.md +49 -0
- package/dist/chunk-ZDF6F7ED.cjs.map +0 -1
- package/dist/chunk-ZTJVRSN5.js.map +0 -1
- package/src/components/.card.md +0 -42
- package/src/components/.contact-button.md +0 -30
- package/src/components/.drawer.md +0 -46
- package/src/components/.fixed-layout-container.md +0 -47
- package/src/components/.footer-waitlist-card.md +0 -29
- package/src/components/.join-waitlist-cta.md +0 -29
- package/src/components/.sheet.md +0 -47
- package/src/components/.sliding-panel.md +0 -48
- package/src/components/.tooltip.md +0 -48
- package/src/components/.use-mobile.md +0 -42
- package/src/components/.vendor-compact-card.md +0 -66
- package/src/components/.x-button.md +0 -42
- package/src/components/features/.github-repo-button.md +0 -40
- package/src/components/features/.organization-icon.md +0 -47
- package/src/components/features/.organization-selector.md +0 -45
- package/src/components/icons/.fleet-icon.md +0 -39
- package/src/components/icons/.meshcentral-icon.md +0 -35
- package/src/components/icons/.refresh-icon.md +0 -34
- package/src/components/icons/.tactical-icon.md +0 -35
- package/src/components/ui/.button.md +0 -69
- package/src/components/ui/.log-table-row.md +0 -47
- package/src/components/ui/.selectable-device-card.md +0 -46
- package/src/hooks/.api-hooks-stub.md +0 -45
- package/src/hooks/api/.use-product-releases.md +0 -53
- package/src/stories/.OrganizationSelector.stories.md +0 -42
- package/src/stories/.SelectableDeviceCard.stories.md +0 -30
- package/src/utils/.lite-youtube-embed-stub.md +0 -37
- package/src/utils/.lite-youtube-embed.md +0 -33
- /package/dist/{chunk-IK2X5YJU.js.map → chunk-7PCP7YQR.js.map} +0 -0
- /package/dist/{chunk-3JWIJJ44.js.map → chunk-R6MLPU4A.js.map} +0 -0
|
@@ -1,44 +1,39 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 4a7aa4db8bec1fcce07d28f27fea4092 -->
|
|
2
|
+
Orchestrates the top-level application shell, combining the sidebar, header, mobile menu, and notification drawer into a single full-screen layout with managed mobile menu state.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `AppLayout` | Component | Root layout wrapper rendering all chrome elements and the main content area |
|
|
9
|
+
| `AppLayoutProps` | Interface | Configuration interface for the layout component |
|
|
10
|
+
|
|
11
|
+
**Key props:**
|
|
12
|
+
- `sidebarConfig` — Navigation structure passed to both `NavigationSidebar` and `MobileBurgerMenu`
|
|
13
|
+
- `headerProps` — Forwarded to `AppHeader` (mobile menu state/toggle are managed internally)
|
|
14
|
+
- `mobileBurgerMenuProps` — Forwarded to `MobileBurgerMenu` (open/close/config are managed internally)
|
|
15
|
+
- `disabled` — Freezes header and sidebar interactions without affecting `children`
|
|
16
|
+
- `loadingFallback` — Custom `Suspense` fallback for the main content area
|
|
11
17
|
|
|
12
18
|
## Usage Example
|
|
13
19
|
|
|
14
20
|
```typescript
|
|
15
21
|
import { AppLayout } from './app-layout'
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
const sidebarConfig: NavigationSidebarConfig = {
|
|
19
|
-
sections: [
|
|
20
|
-
{
|
|
21
|
-
title: 'Dashboard',
|
|
22
|
-
items: [
|
|
23
|
-
{ label: 'Overview', href: '/dashboard', icon: 'dashboard' }
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
|
-
]
|
|
27
|
-
}
|
|
22
|
+
import { sidebarConfig } from '../config/navigation'
|
|
28
23
|
|
|
29
|
-
function
|
|
24
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
30
25
|
return (
|
|
31
26
|
<AppLayout
|
|
32
27
|
sidebarConfig={sidebarConfig}
|
|
33
28
|
headerProps={{
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
logo: <Logo />,
|
|
30
|
+
actions: <UserMenu />,
|
|
36
31
|
}}
|
|
37
32
|
mobileBurgerMenuProps={{
|
|
38
|
-
|
|
33
|
+
footerContent: <SupportLink />,
|
|
39
34
|
}}
|
|
40
|
-
loadingFallback={<
|
|
41
|
-
mainClassName="
|
|
35
|
+
loadingFallback={<PageSkeleton />}
|
|
36
|
+
mainClassName="p-6"
|
|
42
37
|
>
|
|
43
38
|
{children}
|
|
44
39
|
</AppLayout>
|
|
@@ -46,4 +41,8 @@ function MyApp({ children }: { children: React.ReactNode }) {
|
|
|
46
41
|
}
|
|
47
42
|
```
|
|
48
43
|
|
|
49
|
-
|
|
44
|
+
## Notes
|
|
45
|
+
|
|
46
|
+
- Mobile menu open/close state is fully self-contained — consumers only provide content-level props via `mobileBurgerMenuProps`
|
|
47
|
+
- `children` are wrapped in `Suspense`, enabling async page transitions out of the box
|
|
48
|
+
- `disabled` is intended for loading or onboarding states where navigation should be temporarily locked
|
|
@@ -1,46 +1,43 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: d02572a5b408584db5dc8403984b5d76 -->
|
|
2
|
+
A controlled/uncontrolled global search input component for the OpenFrame header, supporting both controlled (via `onChange`) and uncontrolled usage patterns.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
|
|
6
|
+
### `HeaderGlobalSearch`
|
|
7
|
+
A form-based search input that renders a search icon alongside a text field. Automatically toggles between controlled and uncontrolled modes based on whether `onChange` is provided.
|
|
8
|
+
|
|
9
|
+
### `HeaderGlobalSearchProps`
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
|------|------|---------|-------------|
|
|
12
|
+
| `value` | `string` | `''` | Current search value |
|
|
13
|
+
| `onChange` | `(value: string) => void` | — | Enables controlled mode |
|
|
14
|
+
| `onSubmit` | `(value: string) => void` | — | Fires on form submit or Enter key |
|
|
15
|
+
| `placeholder` | `string` | `'Global Search'` | Input placeholder text |
|
|
16
|
+
| `className` | `string` | — | Additional CSS classes |
|
|
9
17
|
|
|
10
18
|
## Usage Example
|
|
11
19
|
|
|
20
|
+
**Controlled:**
|
|
12
21
|
```typescript
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// Perform search logic
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return (
|
|
25
|
-
<HeaderGlobalSearch
|
|
26
|
-
value={searchQuery}
|
|
27
|
-
onChange={setSearchQuery}
|
|
28
|
-
onSubmit={handleSearch}
|
|
29
|
-
placeholder="Search across all modules..."
|
|
30
|
-
className="max-w-md"
|
|
31
|
-
/>
|
|
32
|
-
)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Uncontrolled mode with internal state
|
|
36
|
-
function SimpleSearch() {
|
|
37
|
-
return (
|
|
38
|
-
<HeaderGlobalSearch
|
|
39
|
-
onSubmit={(query) => performSearch(query)}
|
|
40
|
-
placeholder="Quick search..."
|
|
41
|
-
/>
|
|
42
|
-
)
|
|
43
|
-
}
|
|
22
|
+
const [query, setQuery] = React.useState('')
|
|
23
|
+
|
|
24
|
+
<HeaderGlobalSearch
|
|
25
|
+
value={query}
|
|
26
|
+
onChange={setQuery}
|
|
27
|
+
onSubmit={(val) => console.log('Search:', val)}
|
|
28
|
+
placeholder="Search tickets, clients..."
|
|
29
|
+
/>
|
|
44
30
|
```
|
|
45
31
|
|
|
46
|
-
|
|
32
|
+
**Uncontrolled:**
|
|
33
|
+
```typescript
|
|
34
|
+
<HeaderGlobalSearch
|
|
35
|
+
onSubmit={(val) => console.log('Search:', val)}
|
|
36
|
+
/>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Notes
|
|
40
|
+
|
|
41
|
+
- Submission triggers on both **form submit** and **Enter keydown**
|
|
42
|
+
- Without `onChange`, component manages its own internal state
|
|
43
|
+
- Styled with ODS design tokens (`ods-card`, `ods-text-primary`, `ods-text-secondary`) for consistent theming across OpenFrame
|
|
@@ -1,35 +1,36 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A
|
|
1
|
+
<!-- source-hash: dec1eb29c513b449612c49f5b36f6f9d -->
|
|
2
|
+
A client-side dropdown filter component for switching between organizations in the OpenFrame header, displaying the selected organization's name and device count.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
- **`
|
|
8
|
-
- **`
|
|
6
|
+
### Interfaces
|
|
7
|
+
- **`HeaderOrganizationFilterOrganization`** — Shape for each organization entry (`id`, `name`, `deviceCount?`)
|
|
8
|
+
- **`HeaderOrganizationFilterProps`** — Component props including `organizations`, `selectedOrgId`, `onOrgChange`, `totalDeviceCount`, and `className`
|
|
9
|
+
|
|
10
|
+
### Component
|
|
11
|
+
- **`HeaderOrganizationFilter`** — Renders a styled trigger button with a filter icon, organization name, and device count, wired to a dropdown menu listing all organizations plus an "All Organizations" reset option
|
|
9
12
|
|
|
10
13
|
## Usage Example
|
|
11
14
|
|
|
12
15
|
```typescript
|
|
13
16
|
import { HeaderOrganizationFilter } from './header-organization-filter'
|
|
14
17
|
|
|
15
|
-
const
|
|
16
|
-
{ id: '
|
|
17
|
-
{ id: '
|
|
18
|
+
const orgs = [
|
|
19
|
+
{ id: 'org-1', name: 'Acme Corp', deviceCount: 42 },
|
|
20
|
+
{ id: 'org-2', name: 'Globex Inc', deviceCount: 17 },
|
|
18
21
|
]
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
selectedOrgId={selectedOrgId}
|
|
27
|
-
onOrgChange={setSelectedOrgId}
|
|
28
|
-
totalDeviceCount={225}
|
|
29
|
-
className="border-r"
|
|
30
|
-
/>
|
|
31
|
-
)
|
|
32
|
-
}
|
|
23
|
+
<HeaderOrganizationFilter
|
|
24
|
+
organizations={orgs}
|
|
25
|
+
selectedOrgId="org-1"
|
|
26
|
+
totalDeviceCount={59}
|
|
27
|
+
onOrgChange={(id) => console.log('Selected org:', id)}
|
|
28
|
+
/>
|
|
33
29
|
```
|
|
34
30
|
|
|
35
|
-
|
|
31
|
+
## Behavior Notes
|
|
32
|
+
|
|
33
|
+
- When no `selectedOrgId` matches, defaults to **"All Organizations"** and shows `totalDeviceCount`
|
|
34
|
+
- Selecting "All Organizations" from the dropdown calls `onOrgChange('')`
|
|
35
|
+
- Device count is formatted with `toLocaleString()` (e.g., `1,234 Devices`)
|
|
36
|
+
- Fixed width of `240px` with `border-l` separator, designed for header toolbar placement
|
|
@@ -1,66 +1,62 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A responsive header component
|
|
1
|
+
<!-- source-hash: 1a8c2c67117a2cb265b878e7d99e1a25 -->
|
|
2
|
+
A responsive, sticky navigation header component with auto-hide on scroll, dropdown menus, and configurable layout zones (logo, navigation, actions).
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
- `
|
|
8
|
-
- `HeaderProps` - Interface for component props
|
|
9
|
-
- `HeaderConfig` - Re-exported type for header configuration
|
|
6
|
+
### `Header`
|
|
7
|
+
The primary exported component that renders a full-width sticky header. Accepts a `HeaderConfig` object to control all visual and behavioral aspects.
|
|
10
8
|
|
|
11
|
-
**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- Active state management for navigation items
|
|
9
|
+
**Props:**
|
|
10
|
+
| Prop | Type | Description |
|
|
11
|
+
|------|------|-------------|
|
|
12
|
+
| `config` | `HeaderConfig` | Full layout/behavior configuration |
|
|
13
|
+
| `platform` | `string` | Optional platform identifier |
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
- Dropdown
|
|
15
|
+
### Behaviors
|
|
16
|
+
|
|
17
|
+
- **Auto-hide on scroll** — Hides when scrolling down past 50px, reappears on scroll up. Controlled via `config.autoHide`.
|
|
18
|
+
- **Dropdown menus** — Custom-built dropdowns using `inert` (not `aria-hidden`) for proper a11y/focus management. Closes on outside click or `Escape`.
|
|
19
|
+
- **Mobile menu toggle** — Shows a hamburger icon button on small screens, hidden on `md+` breakpoints.
|
|
20
|
+
|
|
21
|
+
### Layout Zones
|
|
22
|
+
| Zone | Description |
|
|
23
|
+
|------|-------------|
|
|
24
|
+
| Left | Logo link + optional `config.actions.left` slot |
|
|
25
|
+
| Center/Right | Navigation items (positioned via `config.navigation.position`) |
|
|
26
|
+
| Right | Desktop action slot + mobile menu toggle |
|
|
22
27
|
|
|
23
28
|
## Usage Example
|
|
24
29
|
|
|
25
30
|
```typescript
|
|
26
|
-
import { Header, HeaderConfig } from './
|
|
27
|
-
import { Logo } from './components/logo'
|
|
28
|
-
import { Button } from './components/ui/button'
|
|
31
|
+
import { Header, HeaderConfig } from './header'
|
|
29
32
|
|
|
30
|
-
const
|
|
33
|
+
const config: HeaderConfig = {
|
|
31
34
|
logo: {
|
|
32
35
|
href: '/',
|
|
33
|
-
element: <
|
|
36
|
+
element: <img src="/logo.svg" alt="Flamingo" />,
|
|
34
37
|
},
|
|
35
38
|
navigation: {
|
|
36
39
|
position: 'center',
|
|
37
40
|
items: [
|
|
41
|
+
{ id: 'docs', label: 'Docs', href: '/docs' },
|
|
38
42
|
{
|
|
39
43
|
id: 'products',
|
|
40
44
|
label: 'Products',
|
|
41
45
|
children: [
|
|
42
46
|
{ id: 'openframe', label: 'OpenFrame', href: '/openframe' },
|
|
43
|
-
{ id: '
|
|
44
|
-
]
|
|
47
|
+
{ id: 'mingo', label: 'Mingo AI', href: '/mingo' },
|
|
48
|
+
],
|
|
45
49
|
},
|
|
46
|
-
|
|
47
|
-
id: 'docs',
|
|
48
|
-
label: 'Documentation',
|
|
49
|
-
href: '/docs'
|
|
50
|
-
}
|
|
51
|
-
]
|
|
50
|
+
],
|
|
52
51
|
},
|
|
53
52
|
actions: {
|
|
54
|
-
right: <Button
|
|
53
|
+
right: <Button href="/login">Sign In</Button>,
|
|
55
54
|
},
|
|
56
55
|
autoHide: true,
|
|
57
|
-
mobile: {
|
|
58
|
-
enabled: true,
|
|
59
|
-
onToggle: () => setMobileMenuOpen(!mobileMenuOpen)
|
|
60
|
-
}
|
|
56
|
+
mobile: { enabled: true, onToggle: () => setMenuOpen(v => !v) },
|
|
61
57
|
}
|
|
62
58
|
|
|
63
59
|
export default function Layout() {
|
|
64
|
-
return <Header config={
|
|
60
|
+
return <Header config={config} />
|
|
65
61
|
}
|
|
66
62
|
```
|
|
@@ -1,58 +1,50 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A mobile
|
|
1
|
+
<!-- source-hash: 5b93029e90f2707d4d17ae7b8abe09dc -->
|
|
2
|
+
A mobile slide-down navigation menu component that renders a full-screen overlay panel with user profile card, primary/secondary navigation items in a responsive grid layout, and optional action buttons (logout, edit profile, search user).
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
6
|
+
**`MobileBurgerMenu`** — Memoized React component (`React.memo`) with the following behavior:
|
|
7
|
+
- Locks body scroll and traps `Escape` key while open
|
|
8
|
+
- Renders a blur backdrop and animated slide-down panel below the fixed header (`48px` offset)
|
|
9
|
+
- Splits `config.items` into **primary** (2-column grid) and **secondary** (full-width list) sections
|
|
10
|
+
- Supports a `disabled` prop that freezes all interactive items while keeping close/backdrop functional
|
|
11
|
+
|
|
12
|
+
**`MobileBurgerMenuProps`** — Exported interface defining all props:
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Description |
|
|
15
|
+
|------|------|-------------|
|
|
16
|
+
| `isOpen` | `boolean` | Controls visibility and animation |
|
|
17
|
+
| `onClose` | `() => void` | Close handler (backdrop click, Escape key) |
|
|
18
|
+
| `config` | `NavigationSidebarConfig` | Nav items and `onNavigate` callback |
|
|
19
|
+
| `user` | `object` | Optional user card data (name, email, avatar, role) |
|
|
20
|
+
| `onSearchUser` | `() => void` | Optional search user action button |
|
|
21
|
+
| `onEditProfile` | `() => void` | Optional edit profile action button |
|
|
22
|
+
| `onLogout` | `() => void` | Optional logout button at bottom |
|
|
23
|
+
| `disabled` | `boolean` | Disables all interactive items |
|
|
11
24
|
|
|
12
25
|
## Usage Example
|
|
13
26
|
|
|
14
27
|
```typescript
|
|
15
28
|
import { MobileBurgerMenu } from './mobile-burger-menu'
|
|
16
|
-
import { HomeIcon, SettingsIcon } from '../icons'
|
|
17
29
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
30
|
+
const [menuOpen, setMenuOpen] = useState(false)
|
|
31
|
+
|
|
32
|
+
<MobileBurgerMenu
|
|
33
|
+
isOpen={menuOpen}
|
|
34
|
+
onClose={() => setMenuOpen(false)}
|
|
35
|
+
config={{
|
|
22
36
|
items: [
|
|
23
|
-
{
|
|
24
|
-
|
|
25
|
-
label: 'Dashboard',
|
|
26
|
-
icon: <HomeIcon />,
|
|
27
|
-
path: '/dashboard',
|
|
28
|
-
isActive: true
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
id: 'settings',
|
|
32
|
-
label: 'Settings',
|
|
33
|
-
icon: <SettingsIcon />,
|
|
34
|
-
path: '/settings',
|
|
35
|
-
section: 'secondary'
|
|
36
|
-
}
|
|
37
|
+
{ id: 'dashboard', label: 'Dashboard', path: '/dashboard', isActive: true },
|
|
38
|
+
{ id: 'settings', label: 'Settings', section: 'secondary', path: '/settings' },
|
|
37
39
|
],
|
|
38
|
-
onNavigate: (path
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
userRole: "admin"
|
|
50
|
-
}}
|
|
51
|
-
onLogout={() => signOut()}
|
|
52
|
-
onEditProfile={() => router.push('/profile')}
|
|
53
|
-
/>
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
The component automatically positions itself below the header (48px), provides smooth slide-down animations, and includes accessibility features like keyboard navigation and ARIA labels.
|
|
40
|
+
onNavigate: (path) => router.push(path),
|
|
41
|
+
}}
|
|
42
|
+
user={{
|
|
43
|
+
userName: 'Jane Smith',
|
|
44
|
+
userEmail: 'jane@example.com',
|
|
45
|
+
userRole: 'Admin',
|
|
46
|
+
}}
|
|
47
|
+
onLogout={() => signOut()}
|
|
48
|
+
onEditProfile={() => router.push('/profile')}
|
|
49
|
+
/>
|
|
50
|
+
```
|
|
@@ -1,45 +1,64 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A React component that renders a
|
|
1
|
+
<!-- source-hash: 22dc571f86ff6412c173e898a5bebb85 -->
|
|
2
|
+
A client-side React component that renders a full-featured mobile navigation panel with backdrop overlay, keyboard support, and scroll locking.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
### `MobileNavPanel`
|
|
7
|
+
The primary export — a modal-style slide-in navigation panel controlled by `isOpen`.
|
|
8
|
+
|
|
9
|
+
**Props (`MobileNavPanelProps`):**
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Description |
|
|
12
|
+
|------|------|-------------|
|
|
13
|
+
| `isOpen` | `boolean` | Controls panel visibility |
|
|
14
|
+
| `config` | `MobileNavConfig` | Navigation structure and callbacks |
|
|
15
|
+
|
|
16
|
+
**Behaviors:**
|
|
17
|
+
- Locks `document.body` scroll while open
|
|
18
|
+
- Closes on `Escape` key press (via `config.onClose`)
|
|
19
|
+
- Closes on backdrop click; prevents propagation inside panel
|
|
20
|
+
- Renders `null` when closed (no DOM presence)
|
|
21
|
+
|
|
22
|
+
**Layout structure:**
|
|
23
|
+
- **Backdrop** — full-screen overlay (`z-[9998]`) that closes the panel on click
|
|
24
|
+
- **Panel** — floating card (`z-[9999]`), full-width on mobile / `400px` on `md+`, anchored top-right with scroll-locked content area
|
|
25
|
+
- **Header** — fixed close (`X`) button
|
|
26
|
+
- **Body** — scrollable section list with optional section titles and nav items
|
|
27
|
+
- **Footer** — optional sticky footer from `config.footer`
|
|
28
|
+
|
|
29
|
+
### `renderNavigationItem` (internal)
|
|
30
|
+
Handles three `NavigationItem` render modes:
|
|
31
|
+
1. **Custom element** — renders `item.element` directly
|
|
32
|
+
2. **Link** — `<Button href=...>` with icon, badge, and active state
|
|
33
|
+
3. **Action** — `<Button onClick=...>` with inline badge support
|
|
11
34
|
|
|
12
35
|
## Usage Example
|
|
13
36
|
|
|
14
37
|
```typescript
|
|
15
38
|
import { MobileNavPanel } from './mobile-nav-panel'
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const navConfig: MobileNavConfig = {
|
|
22
|
-
onClose: () => setIsNavOpen(false),
|
|
23
|
-
sections: [
|
|
24
|
-
{
|
|
25
|
-
title: "Main Navigation",
|
|
26
|
-
items: [
|
|
27
|
-
{ id: '1', label: 'Home', href: '/', icon: <HomeIcon /> },
|
|
28
|
-
{ id: '2', label: 'About', href: '/about' },
|
|
29
|
-
{ id: '3', label: 'Contact', onClick: () => openContact() }
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
],
|
|
33
|
-
footer: <Button>Sign Out</Button>
|
|
34
|
-
}
|
|
39
|
+
import { useState } from 'react'
|
|
40
|
+
import { Home, Settings } from 'lucide-react'
|
|
41
|
+
|
|
42
|
+
export function AppShell() {
|
|
43
|
+
const [menuOpen, setMenuOpen] = useState(false)
|
|
35
44
|
|
|
36
45
|
return (
|
|
37
|
-
<MobileNavPanel
|
|
38
|
-
isOpen={
|
|
39
|
-
config={
|
|
46
|
+
<MobileNavPanel
|
|
47
|
+
isOpen={menuOpen}
|
|
48
|
+
config={{
|
|
49
|
+
onClose: () => setMenuOpen(false),
|
|
50
|
+
sections: [
|
|
51
|
+
{
|
|
52
|
+
title: 'Main',
|
|
53
|
+
items: [
|
|
54
|
+
{ id: 'home', label: 'Home', href: '/', icon: <Home />, isActive: true },
|
|
55
|
+
{ id: 'settings', label: 'Settings', href: '/settings', icon: <Settings /> },
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
footer: <button onClick={() => setMenuOpen(false)}>Sign Out</button>,
|
|
60
|
+
}}
|
|
40
61
|
/>
|
|
41
62
|
)
|
|
42
63
|
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
The component automatically handles body scroll prevention, escape key closing, and renders different navigation item types including links, buttons, and custom React elements.
|
|
64
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!-- source-hash: e8725ed939f32a658cd8720c67e49da2 -->
|
|
2
|
+
Header component for the navigation sidebar displaying the OpenFrame logo and text, with animated show/hide behavior based on the sidebar's minimized state.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `NavigationSidebarHeaderProps`
|
|
7
|
+
| Prop | Type | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| `minimized` | `boolean` | Controls whether the sidebar is in collapsed state |
|
|
10
|
+
|
|
11
|
+
### `NavigationSidebarHeader`
|
|
12
|
+
Renders a fixed-height (`h-14`) header containing:
|
|
13
|
+
- **`OpenFrameLogo`** — Always visible; uses CSS design tokens for primary text and accent colors
|
|
14
|
+
- **`OpenFrameText`** — Fades in/out with a smooth `opacity` + `margin-left` CSS transition (300ms); hidden from accessibility tree via `aria-hidden` when minimized
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { NavigationSidebarHeader } from './navigation-sidebar-header'
|
|
20
|
+
|
|
21
|
+
function Sidebar() {
|
|
22
|
+
const [minimized, setMinimized] = useState(false)
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<aside>
|
|
26
|
+
<NavigationSidebarHeader minimized={minimized} />
|
|
27
|
+
{/* rest of sidebar content */}
|
|
28
|
+
</aside>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Notes
|
|
34
|
+
- Uses `cn()` utility for conditional class merging
|
|
35
|
+
- Relies on CSS design tokens (`--color-text-primary`, `--color-accent-primary`, `--spacing-system-m`, `--spacing-system-xs`) for theming — ensure these variables are defined in the global stylesheet
|
|
36
|
+
- The text element uses `overflow-hidden` + `min-w-0` to prevent layout shift during the collapse transition
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- source-hash: c8f7676bd726a51b4cf502a4fd6cee17 -->
|
|
2
|
+
Renders an individual navigation sidebar button with support for active state, disabled state, icon rendering, collapsible label visibility, and optional badge display.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `NavigationSidebarItemButtonProps`
|
|
7
|
+
| Prop | Type | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| `item` | `NavigationSidebarItem` | Navigation item data (label, icon, badge, isActive) |
|
|
10
|
+
| `showLabel` | `boolean` | Controls label and badge visibility (collapsed/expanded sidebar) |
|
|
11
|
+
| `disabled` | `boolean` | Disables interaction and applies reduced-opacity styling |
|
|
12
|
+
| `onClick` | `(item, event?) => void` | Click handler receiving the item and optional mouse event |
|
|
13
|
+
|
|
14
|
+
### `NavigationSidebarItemButton`
|
|
15
|
+
The primary exported component. Applies four distinct visual states via `cn()`:
|
|
16
|
+
|
|
17
|
+
| State | Appearance |
|
|
18
|
+
|-------|-----------|
|
|
19
|
+
| Default | Primary text, secondary icon fill |
|
|
20
|
+
| Hover (not active) | `ods-bg-hover` background |
|
|
21
|
+
| Active | Yellow-light background, accent text/icon, left accent border |
|
|
22
|
+
| Disabled | 50% opacity, `not-allowed` cursor |
|
|
23
|
+
|
|
24
|
+
## Usage Example
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { NavigationSidebarItemButton } from './navigation-sidebar-item'
|
|
28
|
+
import { HomeIcon } from '../icons'
|
|
29
|
+
|
|
30
|
+
const item = {
|
|
31
|
+
label: 'Dashboard',
|
|
32
|
+
icon: <HomeIcon />,
|
|
33
|
+
isActive: true,
|
|
34
|
+
badge: '3',
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
<NavigationSidebarItemButton
|
|
38
|
+
item={item}
|
|
39
|
+
showLabel={true}
|
|
40
|
+
disabled={false}
|
|
41
|
+
onClick={(item, event) => console.log('Navigating to', item.label)}
|
|
42
|
+
/>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
> **Note:** The icon is rendered via `cloneElement` to inject the appropriate `color` prop based on active/disabled state. Ensure icons accept an `IconProps`-compatible interface (`color`, `className`).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!-- source-hash: 239b864e6e86694ea92908db743917ff -->
|
|
2
|
+
A client-side toggle button component for collapsing/expanding the navigation sidebar, with animated chevron icon and a fade-in/out label.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `NavigationSidebarToggleProps`
|
|
7
|
+
| Prop | Type | Description |
|
|
8
|
+
|------|------|-------------|
|
|
9
|
+
| `minimized` | `boolean` | Whether the sidebar is currently collapsed; rotates the chevron 180° |
|
|
10
|
+
| `showLabel` | `boolean` | Controls opacity/margin animation of the "Hide Menu" label |
|
|
11
|
+
| `onToggle` | `() => void` | Callback fired when the button is clicked |
|
|
12
|
+
|
|
13
|
+
### `NavigationSidebarToggle`
|
|
14
|
+
A full-width button rendered inside a top-bordered container. Uses `Chevrons03LeftIcon` with a CSS rotation transform when minimized, and a `<span>` label that transitions opacity and margin-left based on `showLabel`.
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { NavigationSidebarToggle } from './navigation-sidebar-toggle'
|
|
20
|
+
import { useState } from 'react'
|
|
21
|
+
|
|
22
|
+
export function Sidebar() {
|
|
23
|
+
const [minimized, setMinimized] = useState(false)
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<nav className={minimized ? 'w-16' : 'w-64'}>
|
|
27
|
+
{/* sidebar content */}
|
|
28
|
+
<NavigationSidebarToggle
|
|
29
|
+
minimized={minimized}
|
|
30
|
+
showLabel={!minimized}
|
|
31
|
+
onToggle={() => setMinimized(prev => !prev)}
|
|
32
|
+
/>
|
|
33
|
+
</nav>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
> **Note:** `showLabel` and `minimized` are intentionally separate props — this allows the label fade-out animation to complete before the sidebar fully collapses, decoupling visual transitions from layout state.
|