@flamingo-stack/openframe-frontend-core 0.0.213 → 0.0.214
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3JWIJJ44.js → chunk-5OWDOFKK.js} +2 -2
- package/dist/{chunk-IK2X5YJU.js → chunk-HWY35EAK.js} +2 -2
- package/dist/{chunk-OTKJASSX.cjs → chunk-IZL2KEH6.cjs} +24 -24
- package/dist/{chunk-OTKJASSX.cjs.map → chunk-IZL2KEH6.cjs.map} +1 -1
- package/dist/{chunk-35XIT2CF.cjs → chunk-KDNGUYZM.cjs} +17 -17
- package/dist/{chunk-35XIT2CF.cjs.map → chunk-KDNGUYZM.cjs.map} +1 -1
- package/dist/{chunk-ZTJVRSN5.js → chunk-UKND27XC.js} +2 -2
- package/dist/chunk-UKND27XC.js.map +1 -0
- package/dist/{chunk-ZDF6F7ED.cjs → chunk-YZUUFTIK.cjs} +2 -2
- package/dist/chunk-YZUUFTIK.cjs.map +1 -0
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/index.cjs +49 -49
- package/dist/components/index.js +2 -2
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/tickets/index.cjs +61 -61
- package/dist/components/tickets/index.js +3 -3
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/.index.md +36 -34
- package/src/components/.alert-dialog.md +27 -23
- package/src/components/.announcement-bar.md +26 -21
- package/src/components/.breadcrumb.md +19 -15
- package/src/components/.calendar.md +24 -19
- package/src/components/.categories-cart.md +29 -24
- package/src/components/.checkbox.md +23 -25
- package/src/components/.chevron-button.md +37 -32
- package/src/components/.comment-card.md +32 -62
- package/src/components/.dialog.md +26 -26
- package/src/components/.dynamic-skeleton.md +54 -57
- package/src/components/.empty-state.md +42 -51
- package/src/components/.faq-accordion.md +27 -21
- package/src/components/.filter-chip.md +41 -24
- package/src/components/.flamingo-logo.md +20 -23
- package/src/components/.footer-waitlist-button.md +29 -22
- package/src/components/.footer.md +32 -32
- package/src/components/.icons-block.md +27 -17
- package/src/components/.image-cropper.md +41 -32
- package/src/components/.index.md +33 -39
- package/src/components/.input.md +31 -35
- package/src/components/.logs-list.md +31 -20
- package/src/components/.media-carousel.md +35 -36
- package/src/components/.open-source-features.md +33 -16
- package/src/components/.pagination.md +52 -51
- package/src/components/.provider-button.md +21 -23
- package/src/components/.select.md +31 -20
- package/src/components/.sidebar.md +34 -24
- package/src/components/.smooth-accordion.md +29 -24
- package/src/components/.social-icon-row.md +36 -32
- package/src/components/.textarea.md +25 -31
- package/src/components/.tool-icon.md +24 -26
- package/src/components/.unified-filter-logic.md +37 -30
- package/src/components/.unified-pagination.md +23 -22
- package/src/components/.user-summary-stub.md +38 -22
- package/src/components/.vendor-display-button.md +25 -25
- package/src/components/.vendor-icon.md +33 -25
- package/src/components/.why-it-matters.md +28 -25
- package/src/components/chat/.approval-batch-message.md +51 -0
- package/src/components/chat/.approval-request-message.md +35 -34
- package/src/components/chat/.chat-attachment-bar.md +64 -0
- package/src/components/chat/.chat-container.md +36 -18
- package/src/components/chat/.chat-input.md +37 -20
- package/src/components/chat/.chat-message-enhanced.md +30 -49
- package/src/components/chat/.chat-message-list.md +45 -32
- package/src/components/chat/.chat-message-skeleton.md +26 -22
- package/src/components/chat/.chat-panel-context.md +52 -0
- package/src/components/chat/.chat-ref.types.md +42 -0
- package/src/components/chat/.chat-sidebar-skeleton.md +34 -25
- package/src/components/chat/.chat-sidebar.md +31 -26
- package/src/components/chat/.chat-ticket-list.md +39 -0
- package/src/components/chat/.context-compaction-display.md +36 -0
- package/src/components/chat/.cycling-phrase.md +52 -0
- package/src/components/chat/.embeddable-chat.md +48 -0
- package/src/components/chat/.expand-chevron.md +24 -0
- package/src/components/chat/.index.md +31 -35
- package/src/components/chat/.mingo-onboarding-card-skeleton.md +44 -0
- package/src/components/chat/.mingo-onboarding-card.md +62 -0
- package/src/components/chat/.model-display.md +32 -30
- package/src/components/chat/.nav-link-anchor-via-runtime.md +40 -0
- package/src/components/chat/.remark-card-links.md +38 -0
- package/src/components/chat/.slash-command-suggestions.md +47 -0
- package/src/components/chat/.source-action-button.md +48 -0
- package/src/components/chat/.thinking-display.md +42 -0
- package/src/components/chat/.tool-call-blocks.md +45 -0
- package/src/components/chat/.tool-execution-display.md +44 -36
- package/src/components/chat/chat-container.tsx +1 -1
- package/src/components/chat/entity-cards/.admin-content-card.md +43 -0
- package/src/components/chat/entity-cards/.block-card.md +47 -0
- package/src/components/chat/entity-cards/.blog-card.md +52 -0
- package/src/components/chat/entity-cards/.blog-image-placeholder.md +39 -0
- package/src/components/chat/entity-cards/.campaign-card-admin.md +47 -0
- package/src/components/chat/entity-cards/.case-study-card.md +58 -0
- package/src/components/chat/entity-cards/.chat-ticket-item.md +40 -0
- package/src/components/chat/entity-cards/.chat-video-entity-card.md +43 -0
- package/src/components/chat/entity-cards/.customer-interview-card.md +53 -0
- package/src/components/chat/entity-cards/.data-room-doc-card.md +47 -0
- package/src/components/chat/entity-cards/.dispatch.md +39 -0
- package/src/components/chat/entity-cards/.entity-author-card.md +51 -0
- package/src/components/chat/entity-cards/.generic-entity-card.md +62 -0
- package/src/components/chat/entity-cards/.github-activity-card.md +61 -0
- package/src/components/chat/entity-cards/.hubspot-ticket-card.md +53 -0
- package/src/components/chat/entity-cards/.index.md +66 -0
- package/src/components/chat/entity-cards/.investor-update-card.md +47 -0
- package/src/components/chat/entity-cards/.onboarding-guide-card.md +58 -0
- package/src/components/chat/entity-cards/.product-release-card-defaults.md +31 -0
- package/src/components/chat/entity-cards/.product-release-card.md +29 -0
- package/src/components/chat/entity-cards/.program-card-defaults.md +41 -0
- package/src/components/chat/entity-cards/.program-card.md +59 -0
- package/src/components/chat/entity-cards/.roadmap-card.md +46 -0
- package/src/components/chat/entity-cards/.roadmap-vote-button.md +52 -0
- package/src/components/chat/entity-cards/.slack-message-card.md +48 -0
- package/src/components/chat/entity-cards/.task-type-icon.md +47 -0
- package/src/components/chat/hooks/.index.md +36 -21
- package/src/components/chat/hooks/.use-chat-attachment-image-gallery.md +51 -0
- package/src/components/chat/hooks/.use-chat-attachments.md +48 -0
- package/src/components/chat/hooks/.use-chat-card-item.md +39 -0
- package/src/components/chat/hooks/.use-chat-identity.md +45 -0
- package/src/components/chat/hooks/.use-chat.md +58 -0
- package/src/components/chat/hooks/.use-chunk-catchup.md +46 -48
- package/src/components/chat/hooks/.use-close-on-navigation.md +44 -0
- package/src/components/chat/hooks/.use-collapsible.md +48 -0
- package/src/components/chat/hooks/.use-embedded-chat.md +32 -0
- package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +40 -0
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +52 -0
- package/src/components/chat/hooks/.use-nats-dialog-subscription.md +49 -30
- package/src/components/chat/hooks/.use-proxied-image-url.md +40 -0
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +43 -40
- package/src/components/chat/hooks/.use-slash-commands.md +46 -0
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +34 -0
- package/src/components/chat/hooks/.use-sse.md +60 -0
- package/src/components/chat/hooks/.use-unified-chat.md +57 -0
- package/src/components/chat/types/.api.types.md +52 -38
- package/src/components/chat/types/.chat.types.md +43 -34
- package/src/components/chat/types/.component.types.md +47 -48
- package/src/components/chat/types/.index.md +20 -27
- package/src/components/chat/types/.message.types.md +58 -48
- package/src/components/chat/types/.network.types.md +57 -31
- package/src/components/chat/types/.processing.types.md +49 -31
- package/src/components/chat/types/.unified-chat-state.types.md +41 -0
- package/src/components/chat/types/entities/.blog.md +43 -0
- package/src/components/chat/types/entities/.case-study.md +26 -0
- package/src/components/chat/types/entities/.content-ref.md +41 -0
- package/src/components/chat/types/entities/.customer-interview.md +28 -0
- package/src/components/chat/types/entities/.data-room-doc.md +36 -0
- package/src/components/chat/types/entities/.github-activity.md +43 -0
- package/src/components/chat/types/entities/.hubspot-ticket.md +53 -0
- package/src/components/chat/types/entities/.index.md +42 -0
- package/src/components/chat/types/entities/.investor-update.md +45 -0
- package/src/components/chat/types/entities/.onboarding-guide.md +50 -0
- package/src/components/chat/types/entities/.program-types.md +57 -0
- package/src/components/chat/types/entities/.roadmap-item.md +58 -0
- package/src/components/chat/types/entities/.slack-message.md +35 -0
- package/src/components/chat/utils/.agent-status-message.md +45 -0
- package/src/components/chat/utils/.auto-continuation-directive.md +58 -0
- package/src/components/chat/utils/.chat-attachment-markdown.md +54 -0
- package/src/components/chat/utils/.chat-authed-fetch.md +25 -0
- package/src/components/chat/utils/.chat-nav-resolution.md +46 -0
- package/src/components/chat/utils/.chat-proxy-auth-storage.md +38 -0
- package/src/components/chat/utils/.chip-action-class.md +34 -0
- package/src/components/chat/utils/.chip-styles.md +46 -0
- package/src/components/chat/utils/.chunk-parser.md +38 -28
- package/src/components/chat/utils/.clickup-task-type-utils.md +48 -0
- package/src/components/chat/utils/.compact-card-classes.md +62 -0
- package/src/components/chat/utils/.decide-new-tab.md +51 -0
- package/src/components/chat/utils/.external-app-urls.md +29 -0
- package/src/components/chat/utils/.extract-incomplete-message-state.md +25 -29
- package/src/components/chat/utils/.flatten-assistant-content.md +34 -0
- package/src/components/chat/utils/.icon-registry.md +46 -0
- package/src/components/chat/utils/.index.md +37 -32
- package/src/components/chat/utils/.is-cross-origin-url.md +35 -0
- package/src/components/chat/utils/.message-segment-accumulator.md +25 -34
- package/src/components/chat/utils/.nav-anchor-props.md +44 -0
- package/src/components/chat/utils/.nav-click-handler.md +47 -0
- package/src/components/chat/utils/.onboarding-icons.md +28 -0
- package/src/components/chat/utils/.process-historical-messages.md +46 -35
- package/src/components/chat/utils/.scroll-anchor.md +40 -0
- package/src/components/chat/utils/.slash-dispatch-utils.md +44 -0
- package/src/components/chat/utils/.source-icons.md +35 -0
- package/src/components/chat/utils/.source-row-cta.md +54 -0
- package/src/components/chat/utils/.tool-call-helpers.md +42 -0
- package/src/components/contact/.contact-form.md +43 -0
- package/src/components/contact/.index.md +27 -0
- package/src/components/features/.array-entry-manager.md +36 -45
- package/src/components/features/.changelog-manager.md +47 -21
- package/src/components/features/.changelog-sections-manager.md +21 -26
- package/src/components/features/.command-box.md +31 -28
- package/src/components/features/.entity-summary-editor.md +46 -0
- package/src/components/features/.entity-video-section.md +51 -0
- package/src/components/features/.figma-prototype-viewer.md +48 -29
- package/src/components/features/.filters-dropdown.md +33 -46
- package/src/components/features/.highlight-config-section.md +42 -0
- package/src/components/features/.highlight-generation-section.md +46 -0
- package/src/components/features/.highlight-video-combined-section.md +47 -0
- package/src/components/features/.highlight-video-preview.md +44 -0
- package/src/components/features/.highlight-video-section.md +47 -0
- package/src/components/features/.index.md +40 -66
- package/src/components/features/.media-gallery-manager.md +48 -38
- package/src/components/features/.more-about-button.md +22 -19
- package/src/components/features/.og-editor-preview.md +40 -36
- package/src/components/features/.parallax-image-showcase.md +33 -26
- package/src/components/features/.paths-display.md +42 -43
- package/src/components/features/.platform-badge.md +37 -36
- package/src/components/features/.platform-filter.md +23 -16
- package/src/components/features/.policy-configuration-panel.md +48 -56
- package/src/components/features/.provider-button.md +33 -36
- package/src/components/features/.push-button-selector.md +40 -29
- package/src/components/features/.release-media-manager.md +46 -31
- package/src/components/features/.section-selector.md +26 -31
- package/src/components/features/.select-button.md +35 -25
- package/src/components/features/.seo-editor-preview.md +41 -44
- package/src/components/features/.social-links-manager.md +25 -19
- package/src/components/features/.start-with-openframe-button.md +37 -29
- package/src/components/features/.status-filter-component.md +36 -20
- package/src/components/features/.tags-selector.md +40 -24
- package/src/components/features/.transcribe-and-summarize-combined-section.md +45 -0
- package/src/components/features/.transcribe-summarize-section.md +48 -0
- package/src/components/features/.transcript-summary-editor.md +53 -0
- package/src/components/features/.video-bites-display.md +46 -0
- package/src/components/features/.video-clips-section.md +41 -0
- package/src/components/features/.video-ratio-tabs.md +56 -0
- package/src/components/features/.video-source-selector.md +60 -0
- package/src/components/features/.video.md +44 -0
- package/src/components/features/.waitlist-form.md +60 -0
- package/src/components/features/ai-enrich/.AIEnrichButton.md +30 -27
- package/src/components/features/ai-enrich/.AIEnrichSection.md +46 -42
- package/src/components/features/board/.board-column-header.md +38 -0
- package/src/components/features/board/.board-column.md +43 -0
- package/src/components/features/board/.board.md +51 -0
- package/src/components/features/board/.color-utils.md +26 -0
- package/src/components/features/board/.index.md +56 -0
- package/src/components/features/board/.ticket-card-skeleton.md +38 -0
- package/src/components/features/board/.ticket-card.md +47 -0
- package/src/components/features/board/.types.md +45 -0
- package/src/components/features/board/.use-board-collapse.md +34 -0
- package/src/components/features/notifications/.index.md +57 -0
- package/src/components/features/notifications/.notification-drawer.md +34 -0
- package/src/components/features/notifications/.notification-tile.md +39 -0
- package/src/components/features/notifications/.notifications-context.md +73 -0
- package/src/components/features/notifications/.types.md +45 -0
- package/src/components/icons/.about-icon.md +20 -28
- package/src/components/icons/.ai-robot-icon.md +15 -17
- package/src/components/icons/.bash-icon.md +16 -23
- package/src/components/icons/.buildings-icon.md +10 -24
- package/src/components/icons/.capterra-icon.md +30 -26
- package/src/components/icons/.carta-icon.md +29 -0
- package/src/components/icons/.clickup-icon.md +26 -0
- package/src/components/icons/.cmd-icon.md +15 -22
- package/src/components/icons/.coins-icon.md +17 -25
- package/src/components/icons/.community-hub-icon.md +19 -25
- package/src/components/icons/.community-icon.md +24 -21
- package/src/components/icons/.compare-icon.md +32 -19
- package/src/components/icons/.copy-icon.md +29 -15
- package/src/components/icons/.custom-external-link-icon.md +19 -17
- package/src/components/icons/.custom-fork-icon.md +32 -21
- package/src/components/icons/.custom-license-icon.md +29 -25
- package/src/components/icons/.custom-star-icon.md +20 -28
- package/src/components/icons/.custom-time-icon.md +21 -22
- package/src/components/icons/.cut-vendor-costs-icon.md +6 -19
- package/src/components/icons/.dashboard-icon.md +13 -18
- package/src/components/icons/.deno-icon.md +16 -23
- package/src/components/icons/.donut-icon.md +12 -23
- package/src/components/icons/.double-chevron-icon.md +28 -36
- package/src/components/icons/.elestio-logo.md +13 -23
- package/src/components/icons/.empty-vendor-icon.md +16 -18
- package/src/components/icons/.explore-categories-icon.md +18 -29
- package/src/components/icons/.eye-icon.md +16 -26
- package/src/components/icons/.facebook-icon.md +9 -20
- package/src/components/icons/.figma-icon.md +8 -17
- package/src/components/icons/.filter-icon.md +15 -17
- package/src/components/icons/.flamingo-logo.md +28 -27
- package/src/components/icons/.folder-shield-icon.md +28 -19
- package/src/components/icons/.g2-icon.md +22 -21
- package/src/components/icons/.getapp-icon.md +25 -21
- package/src/components/icons/.github-icon.md +13 -25
- package/src/components/icons/.globe-icon.md +14 -19
- package/src/components/icons/.google-gemini-icon.md +16 -19
- package/src/components/icons/.google-logo.md +15 -21
- package/src/components/icons/.grid-view-icon.md +30 -19
- package/src/components/icons/.hamburger-icon.md +22 -20
- package/src/components/icons/.hand-dollar-icon.md +24 -34
- package/src/components/icons/.hotel-icon.md +27 -21
- package/src/components/icons/.icon-utils.md +28 -29
- package/src/components/icons/.image-icon.md +15 -22
- package/src/components/icons/.index.md +25 -28
- package/src/components/icons/.info-circle-icon.md +29 -30
- package/src/components/icons/.instagram-icon.md +10 -24
- package/src/components/icons/.jump-in-icon.md +18 -18
- package/src/components/icons/.linux-icon.md +18 -18
- package/src/components/icons/.log-out-icon.md +15 -23
- package/src/components/icons/.logs-icon.md +14 -23
- package/src/components/icons/.margin-crisis-icon.md +21 -20
- package/src/components/icons/.menu-icon.md +18 -19
- package/src/components/icons/.miami-cyber-gang-logo-face-only.md +18 -21
- package/src/components/icons/.miami-cyber-gang-logo.md +22 -14
- package/src/components/icons/.mlg-logo.md +18 -16
- package/src/components/icons/.moon-icon.md +32 -22
- package/src/components/icons/.ms-icon.md +30 -19
- package/src/components/icons/.nushell-icon.md +7 -21
- package/src/components/icons/.open-source-icon.md +19 -23
- package/src/components/icons/.openai-icon.md +9 -24
- package/src/components/icons/.openframe-ai-icons.md +25 -26
- package/src/components/icons/.openframe-logo.md +28 -22
- package/src/components/icons/.openframe-text.md +24 -27
- package/src/components/icons/.openmsp-logo.md +26 -23
- package/src/components/icons/.pilot-icon.md +23 -0
- package/src/components/icons/.powershell-icon.md +17 -22
- package/src/components/icons/.python-icon.md +16 -23
- package/src/components/icons/.queries-icon.md +13 -21
- package/src/components/icons/.reddit-icon.md +28 -24
- package/src/components/icons/.remote-control-icon.md +13 -17
- package/src/components/icons/.script-icon.md +27 -19
- package/src/components/icons/.search-icon.md +21 -21
- package/src/components/icons/.send-icon.md +14 -16
- package/src/components/icons/.settings-icon.md +30 -19
- package/src/components/icons/.shape-circle-dash-icon.md +16 -21
- package/src/components/icons/.shell-icon.md +15 -19
- package/src/components/icons/.shield-check-icon.md +18 -31
- package/src/components/icons/.shield-key-icon.md +25 -25
- package/src/components/icons/.shield-lock-icon.md +8 -18
- package/src/components/icons/.slack-icon.md +28 -32
- package/src/components/icons/.sparkles-icon.md +18 -23
- package/src/components/icons/.sso-configuration-icon.md +29 -16
- package/src/components/icons/.sun-icon.md +20 -18
- package/src/components/icons/.table-view-icon.md +17 -19
- package/src/components/icons/.telegram-icon.md +8 -22
- package/src/components/icons/.thumbs-down-icon.md +10 -19
- package/src/components/icons/.thumbs-up-icon.md +8 -17
- package/src/components/icons/.tool-directory-icons.md +24 -28
- package/src/components/icons/.trustpilot-icon.md +25 -22
- package/src/components/icons/.user-icon.md +26 -28
- package/src/components/icons/.users-group-icon.md +28 -24
- package/src/components/icons/.vendor-showcase-icons.md +21 -29
- package/src/components/icons/.vendors-icon.md +18 -22
- package/src/components/icons/.whatsapp-icon.md +30 -14
- package/src/components/icons/.x-icon.md +18 -23
- package/src/components/icons/.x-logo.md +13 -38
- package/src/components/icons/.youtube-icon.md +8 -19
- package/src/components/icons/device-type-icons/.get-device-type-icon.md +26 -34
- package/src/components/icons-v2-generated/.index.md +52 -0
- package/src/components/icons-v2-generated/alphabet/.index.md +33 -0
- package/src/components/icons-v2-generated/arrows/.index.md +39 -0
- package/src/components/icons-v2-generated/audio-and-visual/.index.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.elestio-logo-icon.md +40 -0
- package/src/components/icons-v2-generated/brand-logos/.gemini-logo-icon.md +37 -0
- package/src/components/icons-v2-generated/brand-logos/.google-gemini-logo-icon.md +33 -0
- package/src/components/icons-v2-generated/brand-logos/.index.md +38 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-grey-icon.md +35 -0
- package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-icon.md +36 -0
- package/src/components/icons-v2-generated/buildings/.index.md +48 -0
- package/src/components/icons-v2-generated/charts/.index.md +40 -0
- package/src/components/icons-v2-generated/clothes/.index.md +48 -0
- package/src/components/icons-v2-generated/coding/.index.md +42 -0
- package/src/components/icons-v2-generated/communication/.index.md +39 -0
- package/src/components/icons-v2-generated/date-and-time/.index.md +29 -0
- package/src/components/icons-v2-generated/design/.index.md +39 -0
- package/src/components/icons-v2-generated/devices/.index.md +38 -0
- package/src/components/icons-v2-generated/documents/.index.md +38 -0
- package/src/components/icons-v2-generated/finance/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.index.md +34 -0
- package/src/components/icons-v2-generated/food-and-drinks/.leafy-green-icon.md +36 -0
- package/src/components/icons-v2-generated/food-and-drinks/.strawberry-icon.md +39 -0
- package/src/components/icons-v2-generated/health/.index.md +40 -0
- package/src/components/icons-v2-generated/household/.index.md +45 -0
- package/src/components/icons-v2-generated/interface/.index.md +36 -0
- package/src/components/icons-v2-generated/map-and-travel/.index.md +41 -0
- package/src/components/icons-v2-generated/media-playback/.index.md +51 -0
- package/src/components/icons-v2-generated/number/.index.md +41 -0
- package/src/components/icons-v2-generated/school/.index.md +37 -0
- package/src/components/icons-v2-generated/security/.fingerprint-icon.md +38 -0
- package/src/components/icons-v2-generated/security/.index.md +39 -0
- package/src/components/icons-v2-generated/shopping/.index.md +42 -0
- package/src/components/icons-v2-generated/signs-and-symbols/.index.md +32 -0
- package/src/components/icons-v2-generated/sort-and-filter/.index.md +35 -0
- package/src/components/icons-v2-generated/sport/.index.md +41 -0
- package/src/components/icons-v2-generated/text-editor/.index.md +44 -0
- package/src/components/icons-v2-generated/users/.index.md +45 -0
- package/src/components/icons-v2-generated/vehicles-and-delivery/.index.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.flower-sakura-icon.md +36 -0
- package/src/components/icons-v2-generated/weather-and-nature/.index.md +34 -0
- package/src/components/layout/.article-detail-layout.md +43 -0
- package/src/components/layout/.back-button.md +40 -0
- package/src/components/layout/.list-page-layout.md +35 -26
- package/src/components/layout/.page-container.md +27 -38
- package/src/components/layout/.page-layout.md +50 -0
- package/src/components/layout/.title-block.md +42 -0
- package/src/components/loading/.card-skeleton.md +38 -29
- package/src/components/loading/.device-card-skeleton.md +29 -25
- package/src/components/loading/.index.md +39 -46
- package/src/components/loading/.margin-report-skeleton.md +45 -34
- package/src/components/loading/.organization-card-skeleton.md +39 -44
- package/src/components/loading/.page-layout-skeleton.md +34 -45
- package/src/components/loading/.unified-skeleton.md +62 -36
- package/src/components/navigation/.app-header.md +40 -29
- package/src/components/navigation/.app-layout.md +25 -26
- package/src/components/navigation/.header-global-search.md +34 -37
- package/src/components/navigation/.header-organization-filter.md +23 -22
- package/src/components/navigation/.header.md +31 -35
- package/src/components/navigation/.mobile-burger-menu.md +39 -47
- package/src/components/navigation/.mobile-nav-panel.md +51 -32
- package/src/components/navigation/.navigation-sidebar-header.md +36 -0
- package/src/components/navigation/.navigation-sidebar-item.md +45 -0
- package/src/components/navigation/.navigation-sidebar-toggle.md +38 -0
- package/src/components/navigation/.navigation-sidebar.md +33 -34
- package/src/components/navigation/.sliding-sidebar.md +52 -41
- package/src/components/navigation/.sticky-section-nav.md +56 -48
- package/src/components/platform/.ScriptArguments.md +39 -25
- package/src/components/platform/.ScriptInfoSection.md +30 -26
- package/src/components/platform/.ShellTypeBadge.md +18 -13
- package/src/components/platform/.SoftwareInfo.md +23 -27
- package/src/components/platform/.SoftwareSourceBadge.md +28 -19
- package/src/components/platform/.ToolBadge.md +25 -26
- package/src/components/providers/.theme-provider.md +52 -0
- package/src/components/shared/delivery/.delivery-lists.md +39 -0
- package/src/components/shared/delivery/.delivery-row.md +41 -0
- package/src/components/shared/delivery/.delivery-table.md +41 -0
- package/src/components/shared/delivery/.index.md +38 -0
- package/src/components/shared/dev-section/.dev-card-row.md +60 -0
- package/src/components/shared/dev-section/.dev-section-page.md +48 -0
- package/src/components/shared/dev-section/.dev-section-view.md +43 -0
- package/src/components/shared/dev-section/.index.md +38 -0
- package/src/components/shared/legal-document/.index.md +40 -0
- package/src/components/shared/legal-document/.legal-document-page.md +50 -0
- package/src/components/shared/legal-document/.use-legal-docs.md +42 -0
- package/src/components/shared/onboarding/.onboarding-step-card.md +32 -31
- package/src/components/shared/onboarding/.onboarding-walkthrough.md +39 -43
- package/src/components/shared/product-release/.index.md +28 -30
- package/src/components/shared/product-release/.product-release-card-skeleton.md +28 -28
- package/src/components/shared/product-release/.product-release-card.md +45 -27
- package/src/components/shared/product-release/.release-detail-page.md +23 -24
- package/src/components/shared/roadmap/.index.md +37 -0
- package/src/components/shared/roadmap/.roadmap-grid-skeleton.md +39 -0
- package/src/components/shared/roadmap/.roadmap-grid.md +66 -0
- package/src/components/shared/roadmap/.use-roadmap-voting.md +68 -0
- package/src/components/tickets/.help-center-card.md +51 -0
- package/src/components/tickets/.help-center-create-form.md +38 -0
- package/src/components/tickets/.help-center-list.md +40 -0
- package/src/components/tickets/.index.md +65 -0
- package/src/components/tickets/.ticket-center.md +51 -0
- package/src/components/tickets/.ticket-detail-drawer.md +48 -0
- package/src/components/tickets/.ticket-linked-delivery-card.md +36 -0
- package/src/components/tickets/.ticket-open-form.md +50 -0
- package/src/components/tickets/.ticket-row.md +30 -0
- package/src/components/tickets/.types.md +57 -0
- package/src/components/tickets/hooks/.use-ticket-actions.md +77 -0
- package/src/components/tickets/hooks/.use-ticket-engagements.md +42 -0
- package/src/components/tickets/hooks/.use-tickets-list.md +54 -0
- package/src/components/ui/.actions-menu.md +66 -41
- package/src/components/ui/.alert-dialog.md +29 -26
- package/src/components/ui/.allowed-domains-input.md +29 -21
- package/src/components/ui/.assignee-dropdown.md +45 -0
- package/src/components/ui/.autocomplete.md +47 -41
- package/src/components/ui/.benefit-card.md +51 -36
- package/src/components/ui/.brand-association-card.md +30 -27
- package/src/components/ui/.breadcrumb.md +17 -15
- package/src/components/ui/.checkbox-block.md +39 -35
- package/src/components/ui/.checkbox-with-description.md +23 -16
- package/src/components/ui/.checkbox.md +31 -23
- package/src/components/ui/.circular-progress.md +49 -19
- package/src/components/ui/.content-loader.md +32 -20
- package/src/components/ui/.cursor-pagination.md +41 -52
- package/src/components/ui/.dashboard-info-card.md +33 -26
- package/src/components/ui/.date-picker.md +27 -25
- package/src/components/ui/.device-card-compact.md +28 -29
- package/src/components/ui/.device-card.md +27 -27
- package/src/components/ui/.dialog.md +25 -16
- package/src/components/ui/.drawer.md +86 -0
- package/src/components/ui/.dropdown-button.md +45 -0
- package/src/components/ui/.entity-image.md +46 -0
- package/src/components/ui/.error-state.md +41 -28
- package/src/components/ui/.feature-card.md +35 -31
- package/src/components/ui/.feature-list.md +48 -0
- package/src/components/ui/.field-wrapper.md +47 -0
- package/src/components/ui/.file-upload.md +42 -0
- package/src/components/ui/.filter-checkbox-item.md +43 -0
- package/src/components/ui/.filter-list.md +57 -0
- package/src/components/ui/.filter-modal.md +59 -0
- package/src/components/ui/.floating-tooltip.md +43 -26
- package/src/components/ui/.hidden-tags-popup.md +49 -0
- package/src/components/ui/.hover-dropdown.md +54 -0
- package/src/components/ui/.image-gallery-modal.md +41 -34
- package/src/components/ui/.image-uploader.md +53 -0
- package/src/components/ui/.index.md +40 -34
- package/src/components/ui/.info-card.md +31 -31
- package/src/components/ui/.info-row.md +31 -27
- package/src/components/ui/.input-trigger.md +44 -0
- package/src/components/ui/.input.md +37 -31
- package/src/components/ui/.markdown-editor.md +57 -0
- package/src/components/ui/.modal-v2.md +51 -0
- package/src/components/ui/.modal.md +32 -31
- package/src/components/ui/.more-actions-menu.md +45 -38
- package/src/components/ui/.organization-card.md +31 -37
- package/src/components/ui/.page-actions.md +44 -54
- package/src/components/ui/.phone-input.md +54 -0
- package/src/components/ui/.progress-bar.md +35 -27
- package/src/components/ui/.radio-group.md +39 -27
- package/src/components/ui/.release-changelog-section.md +34 -34
- package/src/components/ui/.search-input.md +48 -0
- package/src/components/ui/.select.md +54 -34
- package/src/components/ui/.service-card.md +42 -40
- package/src/components/ui/.sheet.md +27 -18
- package/src/components/ui/.simple-markdown-renderer.md +29 -31
- package/src/components/ui/.sort-column-item.md +42 -0
- package/src/components/ui/.square-avatar.md +34 -24
- package/src/components/ui/.status-badge.md +26 -38
- package/src/components/ui/.switch.md +22 -35
- package/src/components/ui/.tab-navigation.md +56 -53
- package/src/components/ui/.tab-selector.md +40 -0
- package/src/components/ui/.tag-key-value-filter.md +56 -0
- package/src/components/ui/.tag-search-input.md +53 -0
- package/src/components/ui/.tag.md +49 -31
- package/src/components/ui/.tags-manager.md +60 -0
- package/src/components/ui/.textarea.md +44 -34
- package/src/components/ui/.ticket-attachments-list.md +45 -0
- package/src/components/ui/.ticket-detail-section.md +29 -0
- package/src/components/ui/.ticket-info-section.md +56 -0
- package/src/components/ui/.ticket-note-card.md +53 -0
- package/src/components/ui/.ticket-notes-section.md +54 -0
- package/src/components/ui/.ticket-status-tag.md +49 -0
- package/src/components/ui/.title-content-block.md +25 -26
- package/src/components/ui/.toaster.md +40 -28
- package/src/components/ui/.tooltip.md +22 -11
- package/src/components/ui/.truncate-text.md +39 -0
- package/src/components/ui/button/.button-styles.md +35 -0
- package/src/components/ui/button/.button.md +53 -0
- package/src/components/ui/button/.split-button.md +48 -0
- package/src/components/ui/data-table/.data-table-body.md +48 -0
- package/src/components/ui/data-table/.data-table-column-filter.md +45 -0
- package/src/components/ui/data-table/.data-table-cursor-footer.md +45 -0
- package/src/components/ui/data-table/.data-table-empty.md +43 -0
- package/src/components/ui/data-table/.data-table-header.md +55 -0
- package/src/components/ui/data-table/.data-table-infinite-footer.md +44 -0
- package/src/components/ui/data-table/.data-table-row-count.md +43 -0
- package/src/components/ui/data-table/.data-table-row.md +47 -0
- package/src/components/ui/data-table/.data-table-skeleton.md +42 -0
- package/src/components/ui/data-table/.data-table.md +47 -0
- package/src/components/ui/data-table/.index.md +55 -0
- package/src/components/ui/data-table/.types.md +54 -0
- package/src/components/ui/data-table/.use-data-table.md +45 -0
- package/src/components/ui/data-table/.utils.md +38 -0
- package/src/components/ui/file-manager/.file-manager-action-bar.md +39 -30
- package/src/components/ui/file-manager/.file-manager-breadcrumb.md +29 -27
- package/src/components/ui/file-manager/.file-manager-context-menu.md +38 -42
- package/src/components/ui/file-manager/.file-manager-empty.md +26 -39
- package/src/components/ui/file-manager/.file-manager-table-row.md +33 -41
- package/src/components/ui/file-manager/.file-manager.md +35 -31
- package/src/components/ui/query-report-table/.index.md +43 -0
- package/src/components/ui/query-report-table/.query-report-table-header.md +36 -0
- package/src/components/ui/query-report-table/.query-report-table-row.md +40 -0
- package/src/components/ui/query-report-table/.query-report-table-skeleton.md +44 -0
- package/src/components/ui/query-report-table/.query-report-table.md +47 -0
- package/src/components/ui/query-report-table/.types.md +41 -0
- package/src/components/ui/query-report-table/.utils.md +35 -0
- package/src/components/ui/table/.index.md +27 -48
- package/src/components/ui/table/.table-cell.md +18 -27
- package/src/components/ui/table/.table-column-filter-dropdown.md +40 -0
- package/src/components/ui/table/.table-description-cell.md +24 -14
- package/src/components/ui/table/.table-empty-state.md +21 -22
- package/src/components/ui/table/.table-header.md +25 -40
- package/src/components/ui/table/.table-row.md +22 -40
- package/src/components/ui/table/.table-skeleton.md +33 -26
- package/src/components/ui/table/.table-timestamp-cell.md +26 -16
- package/src/components/ui/table/.table.md +39 -59
- package/src/components/ui/table/.types.md +44 -36
- package/src/components/ui/table/.utils.md +18 -20
- package/src/contexts/.chat-runtime-context.md +54 -0
- package/src/contexts/.endpoints-runtime-context.md +58 -0
- package/src/contexts/.index.md +53 -0
- package/src/contexts/.use-outer-or-default.md +36 -0
- package/src/embed-shims/.index.md +45 -0
- package/src/embed-shims/.next-dynamic.md +43 -0
- package/src/embed-shims/.next-image.md +45 -0
- package/src/embed-shims/.next-link.md +59 -0
- package/src/embed-shims/.next-navigation.md +59 -0
- package/src/hooks/.index.md +34 -29
- package/src/hooks/.use-access-code-integration.md +49 -0
- package/src/hooks/.use-contact-submission.md +37 -26
- package/src/hooks/.use-copy-to-clipboard.md +42 -0
- package/src/hooks/.use-near-viewport.md +44 -0
- package/src/hooks/.use-og-placeholder.md +51 -0
- package/src/hooks/.use-toast.md +36 -35
- package/src/hooks/state/.use-api-params.md +29 -46
- package/src/hooks/state/.use-query-params.md +37 -33
- package/src/hooks/ui/.index.md +33 -32
- package/src/hooks/ui/.use-auto-limit-tags.md +54 -0
- package/src/hooks/ui/.use-horizontal-scrollbar.md +74 -0
- package/src/hooks/ui/.use-image-edge-color.md +42 -0
- package/src/hooks/ui/.use-media-query.md +33 -25
- package/src/hooks/ui/.use-search.md +51 -0
- package/src/nats/.nats.md +49 -28
- package/src/schemas/.contact-schema.md +45 -0
- package/src/stories/.AnnouncementBar.stories.md +45 -0
- package/src/stories/.AppLayout.stories.md +20 -21
- package/src/stories/.Autocomplete.stories.md +48 -34
- package/src/stories/.Board.stories.md +35 -0
- package/src/stories/.Button.stories.md +36 -33
- package/src/stories/.ChatTicketList.stories.md +33 -0
- package/src/stories/.CheckboxBlock.stories.md +40 -28
- package/src/stories/.ContentLoader.stories.md +47 -0
- package/src/stories/.DashboardInfoCard.stories.md +57 -0
- package/src/stories/.DataTable.stories.md +41 -0
- package/src/stories/.DatePicker.stories.md +66 -52
- package/src/stories/.DeviceCard.stories.md +41 -40
- package/src/stories/.DeviceCardCompact.stories.md +41 -0
- package/src/stories/.DotsLoaderIcon.stories.md +36 -0
- package/src/stories/.Drawer.stories.md +58 -0
- package/src/stories/.EmbeddableChat.stories.md +41 -0
- package/src/stories/.FileManager.stories.md +41 -0
- package/src/stories/.FileManagerActionBar.stories.md +38 -0
- package/src/stories/.FileUpload.stories.md +53 -0
- package/src/stories/.FilterList.stories.md +54 -0
- package/src/stories/.FilterModal.stories.md +72 -0
- package/src/stories/.FiltersDropdown.stories.md +57 -0
- package/src/stories/.Header.stories.md +48 -0
- package/src/stories/.ImageUploader.stories.md +49 -0
- package/src/stories/.InfoCard.stories.md +54 -0
- package/src/stories/.Input.stories.md +48 -30
- package/src/stories/.ListPageLayout.stories.md +56 -43
- package/src/stories/.MingoOnboardingCard.stories.md +42 -0
- package/src/stories/.MingoOnboardingCardSkeleton.stories.md +35 -0
- package/src/stories/.Modal.stories.md +40 -31
- package/src/stories/.NotificationDrawer.stories.md +55 -0
- package/src/stories/.OnboardingStepCard.stories.md +41 -0
- package/src/stories/.OrganizationCard.stories.md +61 -0
- package/src/stories/.PageActions.stories.md +52 -49
- package/src/stories/.PageContainer.stories.md +41 -35
- package/src/stories/.PageLayout.stories.md +60 -0
- package/src/stories/.ParallaxImageShowcase.stories.md +49 -0
- package/src/stories/.PhoneInput.stories.md +53 -0
- package/src/stories/.QueryReportTable.stories.md +44 -0
- package/src/stories/.RadioGroup.stories.md +46 -0
- package/src/stories/.RadioGroupBlock.stories.md +45 -0
- package/src/stories/.Select.stories.md +29 -15
- package/src/stories/.SlashCommandSuggestions.stories.md +41 -0
- package/src/stories/.SplitButton.stories.md +62 -0
- package/src/stories/.TabNavigation.stories.md +47 -38
- package/src/stories/.TabSelector.stories.md +65 -0
- package/src/stories/.Table.stories.md +38 -46
- package/src/stories/.TableColumnFilterDropdown.stories.md +46 -0
- package/src/stories/.Tag.stories.md +43 -32
- package/src/stories/.TagKeyValueFilter.stories.md +44 -0
- package/src/stories/.TagSearchInput.stories.md +61 -0
- package/src/stories/.Textarea.stories.md +49 -26
- package/src/stories/.Theme.stories.md +41 -0
- package/src/stories/.TicketAttachmentsList.stories.md +39 -0
- package/src/stories/.TicketDescriptionViewer.stories.md +39 -0
- package/src/stories/.TicketInfoSection.stories.md +40 -0
- package/src/stories/.TicketKnowledgeBaseList.stories.md +36 -0
- package/src/stories/.TicketNotesSection.stories.md +50 -0
- package/src/stories/.Toaster.stories.md +40 -0
- package/src/stories/.ToolExecutionDisplay.stories.md +41 -0
- package/src/stories/.Tooltip.stories.md +41 -0
- package/src/stories/.UserSummary.stories.md +41 -0
- package/src/stories/.WaitlistForm.stories.md +42 -0
- package/src/stories/BlogCard.stories.tsx +61 -0
- package/src/stories/CampaignCardAdmin.stories.tsx +52 -0
- package/src/stories/CaseStudyCard.stories.tsx +42 -0
- package/src/stories/ChatContainer.stories.tsx +186 -0
- package/src/stories/ChatInlineVideoPill.stories.tsx +63 -0
- package/src/stories/CustomerInterviewCard.stories.tsx +42 -0
- package/src/stories/DataRoomDocCard.stories.tsx +52 -0
- package/src/stories/GenericEntityCard.stories.tsx +66 -0
- package/src/stories/GitHubActivityCard.stories.tsx +61 -0
- package/src/stories/HubspotTicketCard.stories.tsx +98 -0
- package/src/stories/InvestorUpdateCard.stories.tsx +42 -0
- package/src/stories/OnboardingGuideCard.stories.tsx +52 -0
- package/src/stories/ProductReleaseCard.stories.tsx +61 -0
- package/src/stories/ProgramCard.stories.tsx +79 -0
- package/src/stories/RoadmapCard.stories.tsx +75 -0
- package/src/stories/SlackMessageCard.stories.tsx +41 -0
- package/src/stories/__fixtures__/chat-cards.ts +604 -0
- package/src/types/.blog.md +53 -29
- package/src/types/.case-study.md +44 -27
- package/src/types/.customer-interview.md +66 -44
- package/src/types/.delivery.md +40 -0
- package/src/types/.employee.md +24 -30
- package/src/types/.index.md +33 -47
- package/src/types/.marketing.md +49 -44
- package/src/types/.navigation.md +33 -25
- package/src/types/.os.types.md +32 -27
- package/src/types/.platform.md +31 -28
- package/src/types/.product-release.md +65 -38
- package/src/types/.supabase.md +37 -29
- package/src/types/.team.md +41 -33
- package/src/types/.video-processing.md +54 -0
- package/src/types/.waitlist.md +40 -36
- package/src/utils/.access-code-client.md +37 -36
- package/src/utils/.cn.md +31 -23
- package/src/utils/.color-analysis.md +35 -0
- package/src/utils/.country-phone-utils.md +39 -0
- package/src/utils/.date-formatters.md +19 -18
- package/src/utils/.embed-authed-fetch.md +39 -0
- package/src/utils/.embed-proxy-auth-storage.md +38 -0
- package/src/utils/.fetch-priority.md +41 -0
- package/src/utils/.format.md +74 -25
- package/src/utils/.generic-domain-utils.md +42 -0
- package/src/utils/.image-proxy.md +59 -23
- package/src/utils/.index.md +42 -49
- package/src/utils/.local-storage-adapter.md +50 -0
- package/src/utils/.ods-color-utils.md +55 -38
- package/src/utils/.platform-config.md +45 -25
- package/src/utils/.scroll-into-view.md +40 -0
- package/src/utils/.source-icons.md +53 -0
- package/src/utils/.sse-decision-frame.md +46 -0
- package/src/utils/dev-sections/.index.md +34 -0
- package/src/utils/dev-sections/.openframe-dev-sections.md +49 -0
- package/dist/chunk-ZDF6F7ED.cjs.map +0 -1
- package/dist/chunk-ZTJVRSN5.js.map +0 -1
- package/src/components/.card.md +0 -42
- package/src/components/.contact-button.md +0 -30
- package/src/components/.drawer.md +0 -46
- package/src/components/.fixed-layout-container.md +0 -47
- package/src/components/.footer-waitlist-card.md +0 -29
- package/src/components/.join-waitlist-cta.md +0 -29
- package/src/components/.sheet.md +0 -47
- package/src/components/.sliding-panel.md +0 -48
- package/src/components/.tooltip.md +0 -48
- package/src/components/.use-mobile.md +0 -42
- package/src/components/.vendor-compact-card.md +0 -66
- package/src/components/.x-button.md +0 -42
- package/src/components/features/.github-repo-button.md +0 -40
- package/src/components/features/.organization-icon.md +0 -47
- package/src/components/features/.organization-selector.md +0 -45
- package/src/components/icons/.fleet-icon.md +0 -39
- package/src/components/icons/.meshcentral-icon.md +0 -35
- package/src/components/icons/.refresh-icon.md +0 -34
- package/src/components/icons/.tactical-icon.md +0 -35
- package/src/components/ui/.button.md +0 -69
- package/src/components/ui/.log-table-row.md +0 -47
- package/src/components/ui/.selectable-device-card.md +0 -46
- package/src/hooks/.api-hooks-stub.md +0 -45
- package/src/hooks/api/.use-product-releases.md +0 -53
- package/src/stories/.OrganizationSelector.stories.md +0 -42
- package/src/stories/.SelectableDeviceCard.stories.md +0 -30
- package/src/utils/.lite-youtube-embed-stub.md +0 -37
- package/src/utils/.lite-youtube-embed.md +0 -33
- /package/dist/{chunk-3JWIJJ44.js.map → chunk-5OWDOFKK.js.map} +0 -0
- /package/dist/{chunk-IK2X5YJU.js.map → chunk-HWY35EAK.js.map} +0 -0
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
A React component that
|
|
1
|
+
<!-- source-hash: 5668aa064d8c050beff751a96d6469be -->
|
|
2
|
+
A React component that renders a visual badge combining a tool icon and label for OpenFrame-integrated MSP tools (e.g., Tactical RMM, Fleet MDM, MeshCentral).
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ToolBadge` | `React.FC<ToolBadgeProps>` | Main badge component |
|
|
9
|
+
| `ToolBadgeProps` | `interface` | Props: `toolType`, `className`, `iconClassName` |
|
|
10
|
+
| `ToolType` | `type` (re-export) | Enum/union of supported tool types |
|
|
9
11
|
|
|
10
12
|
## Usage Example
|
|
11
13
|
|
|
12
14
|
```typescript
|
|
13
15
|
import { ToolBadge } from './components/ToolBadge'
|
|
14
16
|
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// In a table cell
|
|
28
|
-
function DeviceTable() {
|
|
29
|
-
return (
|
|
30
|
-
<td>
|
|
31
|
-
<ToolBadge toolType="TACTICAL" />
|
|
32
|
-
</td>
|
|
33
|
-
)
|
|
34
|
-
}
|
|
17
|
+
// Basic usage in a table cell
|
|
18
|
+
<ToolBadge toolType="TACTICAL" />
|
|
19
|
+
|
|
20
|
+
// With custom styling
|
|
21
|
+
<ToolBadge
|
|
22
|
+
toolType="FLEET"
|
|
23
|
+
className="my-2"
|
|
24
|
+
iconClassName="opacity-80"
|
|
25
|
+
/>
|
|
26
|
+
|
|
27
|
+
// MeshCentral badge
|
|
28
|
+
<ToolBadge toolType="MESHCENTRAL" />
|
|
35
29
|
```
|
|
36
30
|
|
|
37
|
-
|
|
31
|
+
## Notes
|
|
32
|
+
|
|
33
|
+
- Resolves the human-readable label via `getToolLabel()` from `tool-utils`
|
|
34
|
+
- Renders a 16px `ToolIcon` alongside the label text
|
|
35
|
+
- Supports `className` for the wrapper `div` and `iconClassName` for the icon independently
|
|
36
|
+
- Uses `cn()` utility for conditional class merging (Tailwind-compatible)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!-- source-hash: 5f19dc4d30a044a74524129e66197508 -->
|
|
2
|
+
Thin wrapper around `next-themes` that implements the ODS design system's light/dark theme model: manual toggle only, defaulting to dark, persisted to `localStorage`, applied via `data-theme` attribute on `<html>`.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `ThemeProvider` | Component | Pre-configured `next-themes` provider with ODS defaults; wrap the app root once |
|
|
9
|
+
| `useTheme` | Hook | Direct re-export of `next-themes` `useTheme`; returns full theme context |
|
|
10
|
+
| `useThemeToggle` | Hook | Headless convenience hook for building toggle UIs with hydration-safe mount gating |
|
|
11
|
+
| `THEME_STORAGE_KEY` | Constant | `"ods-theme"` — localStorage key |
|
|
12
|
+
| `THEME_ATTRIBUTE` | Constant | `"data-theme"` — HTML attribute toggled on `<html>` |
|
|
13
|
+
| `DEFAULT_THEME` | Constant | `"dark"` |
|
|
14
|
+
|
|
15
|
+
## Usage Example
|
|
16
|
+
|
|
17
|
+
**Wrap your app root (Next.js App Router):**
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// app/layout.tsx
|
|
21
|
+
import { ThemeProvider } from "@/components/theme-provider";
|
|
22
|
+
|
|
23
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
24
|
+
return (
|
|
25
|
+
<html suppressHydrationWarning>
|
|
26
|
+
<body>
|
|
27
|
+
<ThemeProvider>{children}</ThemeProvider>
|
|
28
|
+
</body>
|
|
29
|
+
</html>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Build a toggle button using `useThemeToggle`:**
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { useThemeToggle } from "@/components/theme-provider";
|
|
38
|
+
import { Button } from "@ods/ui";
|
|
39
|
+
import { Sun01Icon, MoonIcon } from "@ods/icons";
|
|
40
|
+
|
|
41
|
+
export function ThemeToggle() {
|
|
42
|
+
const { isDark, toggle, mounted } = useThemeToggle();
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<Button size="icon" variant="transparent" onClick={toggle} aria-label="Toggle theme">
|
|
46
|
+
{mounted && (isDark ? <Sun01Icon /> : <MoonIcon />)}
|
|
47
|
+
</Button>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
> **SSR note:** `mounted` is `false` during server render and flips to `true` after hydration. Gate any theme-dependent UI behind `mounted` to avoid hydration mismatches.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- source-hash: a856dcd91dfe86722b63f8f7f40c9eea -->
|
|
2
|
+
Renders the delivery section body with two filterable data tables — "Recently Completed" and "Active Tasks" — fetched from configurable API endpoints and driven by URL search parameters.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `DeliveryLists` (default export)
|
|
7
|
+
Main component that orchestrates dual parallel fetches and renders both `DeliveryTable` instances.
|
|
8
|
+
|
|
9
|
+
### `DeliveryListsProps`
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
|------|------|---------|-------------|
|
|
12
|
+
| `completedApiEndpoint` | `string` | `/api/delivery/completed` | GET endpoint for completed tasks |
|
|
13
|
+
| `inProgressApiEndpoint` | `string` | `/api/delivery/in-progress` | GET endpoint for active tasks |
|
|
14
|
+
| `searchParamKey` | `string` | `'search'` | URL + API query param key for search input |
|
|
15
|
+
| `taskTypeParamKey` | `string` | `'task_type'` | URL + API query param key for task-type filter |
|
|
16
|
+
|
|
17
|
+
> **Coupling constraint:** `searchParamKey` and `taskTypeParamKey` must match the consuming chrome's `section.search.paramKey` / `section.filter.paramKey`. These keys are used for both URL reads and outbound API query params — override both ends consistently.
|
|
18
|
+
|
|
19
|
+
## Usage Example
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// Zero-config (OpenFrame defaults)
|
|
23
|
+
<DeliveryLists />
|
|
24
|
+
|
|
25
|
+
// Custom endpoints with matching chrome param keys
|
|
26
|
+
<DeliveryLists
|
|
27
|
+
completedApiEndpoint="/api/v2/tasks/done"
|
|
28
|
+
inProgressApiEndpoint="/api/v2/tasks/active"
|
|
29
|
+
searchParamKey="q"
|
|
30
|
+
taskTypeParamKey="type"
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Behavior
|
|
35
|
+
|
|
36
|
+
- **Parallel fetches** via `Promise.all` on both endpoints, re-triggered when URL params or endpoint props change
|
|
37
|
+
- **Empty states**: shows a "Reset Filters" CTA when active filters return no results; shows a generic message when no tasks exist
|
|
38
|
+
- **Error state**: renders `<LoadError>` with a page-reload retry on fetch failure
|
|
39
|
+
- **Loading**: passes `isLoading` to each `<DeliveryTable>` for skeleton rendering
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- source-hash: 48827d34bfec0bd0e5c771a4967c8775 -->
|
|
2
|
+
Single-row presentational component for a ClickUp delivery item, serving as the shared rendering primitive for both the public delivery list table and the HubSpot ticket linked-delivery card.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `DeliveryRow` (exported component)
|
|
7
|
+
Renders a responsive row layout with title, subtitle, description, and status/type badges. Conditionally wraps content in a navigable `<Link>` (via env-aware Next.js shim) or a plain `<div>` depending on whether `href` is provided.
|
|
8
|
+
|
|
9
|
+
### `DeliveryRowProps` (exported interface)
|
|
10
|
+
| Prop | Type | Description |
|
|
11
|
+
|------|------|-------------|
|
|
12
|
+
| `item` | `DeliveryItem` | ClickUp task data (title, status, type, dates, etc.) |
|
|
13
|
+
| `href` | `string?` | When set, makes the entire row a clickable deep-link anchor |
|
|
14
|
+
| `caption` | `string?` | Small uppercase label above the title (e.g. `"LINKED DELIVERY"`) |
|
|
15
|
+
| `className` | `string?` | Additional Tailwind classes for the outer element |
|
|
16
|
+
|
|
17
|
+
### `getRelativeTime` (internal helper)
|
|
18
|
+
Converts a Unix timestamp to human-readable relative time (`"yesterday"`, `"3 weeks ago"`, etc.). Inlined so the component owns its full rendering contract independently of `DeliveryTable`.
|
|
19
|
+
|
|
20
|
+
## Usage Example
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// Standard list row (no interactivity)
|
|
24
|
+
<DeliveryRow item={deliveryItem} />
|
|
25
|
+
|
|
26
|
+
// Clickable deep-link variant (ticket card surface)
|
|
27
|
+
<DeliveryRow
|
|
28
|
+
item={deliveryItem}
|
|
29
|
+
href={buildDevSectionUrl('delivery', deliveryItem.id)}
|
|
30
|
+
caption="LINKED DELIVERY"
|
|
31
|
+
/>
|
|
32
|
+
|
|
33
|
+
// With focus highlight (after ?focus=<id> scroll)
|
|
34
|
+
<DeliveryRow
|
|
35
|
+
item={deliveryItem}
|
|
36
|
+
id={deliveryItem.id}
|
|
37
|
+
className="animate-flash-focus"
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The `href` prop uses the embed-aware `next/link` shim — preserving TanStack Query state on back-navigation in Next.js hosts while gracefully degrading to a plain `<a>` elsewhere.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- source-hash: d5d3a5d0e430ad78e58c1dc249ed1e27 -->
|
|
2
|
+
A bordered card component that renders a list of `DeliveryItem` entries, one `DeliveryRow` per item, with loading skeleton and empty-state handling.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `DeliveryTable` | Named export | Main table container rendering delivery items |
|
|
9
|
+
| `SkeletonRow` | Internal | Animated placeholder row shown during loading |
|
|
10
|
+
| `DeliveryTableProps` | Interface | `items: DeliveryItem[]`, `isLoading?: boolean` |
|
|
11
|
+
|
|
12
|
+
## Rendering States
|
|
13
|
+
|
|
14
|
+
| State | Trigger | Output |
|
|
15
|
+
|-------|---------|--------|
|
|
16
|
+
| Loading | `isLoading={true}` | 5 animated `SkeletonRow` placeholders |
|
|
17
|
+
| Empty | `items.length === 0` | "No tasks available" message |
|
|
18
|
+
| Default | Items present | One `<DeliveryRow>` per item, separated by borders |
|
|
19
|
+
|
|
20
|
+
## Usage Example
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { DeliveryTable } from './delivery-table';
|
|
24
|
+
import type { DeliveryItem } from '../../../types/delivery';
|
|
25
|
+
|
|
26
|
+
// Normal render with data
|
|
27
|
+
<DeliveryTable items={deliveryItems} />
|
|
28
|
+
|
|
29
|
+
// Loading state (e.g. while fetching)
|
|
30
|
+
<DeliveryTable items={[]} isLoading={true} />
|
|
31
|
+
|
|
32
|
+
// Typically consumed by DeliveryLists — split into two tables:
|
|
33
|
+
<DeliveryTable items={completedItems} />
|
|
34
|
+
<DeliveryTable items={inProgressItems} />
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Notes
|
|
38
|
+
|
|
39
|
+
- Each item row is wrapped in a `div` with `border-b` and `last:border-b-0` to avoid a trailing border on the final row.
|
|
40
|
+
- `DeliveryRow` handles all visual logic per row — `DeliveryTable` is purely a layout/state shell.
|
|
41
|
+
- Designed to be instantiated twice by the parent `DeliveryLists` component: once for completed items and once for in-progress items.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!-- source-hash: 14c7ec8068a157d0e8708c75e2af23b0 -->
|
|
2
|
+
Barrel export for the delivery UI component suite, exposing three composable components for displaying and listing delivery items.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `DeliveryLists` | Component | URL-filter-driven list view; use `ignoreUrlFilters` prop instead of building a standalone unfiltered variant |
|
|
9
|
+
| `DeliveryListsProps` | Type | Props interface for `DeliveryLists` |
|
|
10
|
+
| `DeliveryTable` | Component | Raw table renderer, used directly in release-detail views |
|
|
11
|
+
| `DeliveryRow` | Component | Individual row renderer for delivery entries |
|
|
12
|
+
| `DeliveryRowProps` | Type | Props interface for `DeliveryRow` |
|
|
13
|
+
|
|
14
|
+
## Usage Example
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import {
|
|
18
|
+
DeliveryLists,
|
|
19
|
+
DeliveryTable,
|
|
20
|
+
DeliveryRow,
|
|
21
|
+
type DeliveryListsProps,
|
|
22
|
+
type DeliveryRowProps,
|
|
23
|
+
} from './components/delivery';
|
|
24
|
+
|
|
25
|
+
// URL-filter-driven list (public bug-fixes-and-enhancements page)
|
|
26
|
+
<DeliveryLists />
|
|
27
|
+
|
|
28
|
+
// No-filter variant — use ignoreUrlFilters instead of a separate component
|
|
29
|
+
<DeliveryLists ignoreUrlFilters />
|
|
30
|
+
|
|
31
|
+
// Direct table embed (e.g. hub release-detail page)
|
|
32
|
+
<DeliveryTable />
|
|
33
|
+
|
|
34
|
+
// Manual row composition
|
|
35
|
+
<DeliveryRow />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
> **Note:** `DeliverySection` was intentionally removed — it had no consumers and duplicated the fetch/loading state machine. Do not revive it; use `<DeliveryLists ignoreUrlFilters />` for unfiltered use cases.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<!-- source-hash: 8d3da3a7c730a952779ad08cf7640368 -->
|
|
2
|
+
Shared row chrome components for `DevSectionPage` list surfaces (delivery, tickets, etc.), providing a consistent two-column layout with fixed min-height blocks for vertical alignment across grid rows, plus a thread-style conversation variant for ticket detail drawers.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `DevCardRowContent` | Component | Two-column card row: left (title/subtitle/description) + right (caller-supplied badges) |
|
|
9
|
+
| `DevCardRowSkeleton` | Component | Loading skeleton mirroring `DevCardRowContent` min-heights |
|
|
10
|
+
| `ConversationCardRow` | Component | Thread-style message row with avatar, author header, body, and attachments |
|
|
11
|
+
| `ConversationCardRowSkeleton` | Component | Loading skeleton for a single `ConversationCardRow` |
|
|
12
|
+
| `ConversationCardRowSkeletonList` | Component | Multi-row skeleton list (default: 2 rows) for conversation timeline loading state |
|
|
13
|
+
| `DevCardRowContentProps` | Interface | Props for `DevCardRowContent` |
|
|
14
|
+
| `ConversationCardRowProps` | Interface | Props for `ConversationCardRow` |
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// Static delivery card row (wrapped in a div)
|
|
20
|
+
<div className="border-b border-ods-border p-[12px] md:p-[16px]">
|
|
21
|
+
<DevCardRowContent
|
|
22
|
+
title="Deploy v2.4.1 to production"
|
|
23
|
+
subtitle="UPDATED today, #4271, Code review"
|
|
24
|
+
description="Bumps the API gateway to support new webhook endpoints."
|
|
25
|
+
rightBadges={
|
|
26
|
+
<>
|
|
27
|
+
<StatusBadge status="in-progress" />
|
|
28
|
+
<PriorityBadge priority="high" />
|
|
29
|
+
</>
|
|
30
|
+
}
|
|
31
|
+
/>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
// Clickable ticket card row (wrapped in a button)
|
|
35
|
+
<button onClick={openTicket}>
|
|
36
|
+
<DevCardRowContent
|
|
37
|
+
title="Login page throws 502 on Safari"
|
|
38
|
+
subtitle="OPEN · #1042 · Bug"
|
|
39
|
+
description=""
|
|
40
|
+
emptyDescription="No description provided for this ticket."
|
|
41
|
+
rightBadges={<SeverityBadge level="critical" />}
|
|
42
|
+
/>
|
|
43
|
+
</button>
|
|
44
|
+
|
|
45
|
+
// Conversation thread row
|
|
46
|
+
<ConversationCardRow
|
|
47
|
+
author="Jane Smith"
|
|
48
|
+
role="Resolution"
|
|
49
|
+
avatarSrc="https://cdn.example.com/avatars/jane.png"
|
|
50
|
+
timestamp="2026-01-15T14:32:00Z"
|
|
51
|
+
body="The issue has been resolved by restarting the gateway service."
|
|
52
|
+
attachments={[{ name: "fix-log.txt", url: "/files/fix-log.txt" }]}
|
|
53
|
+
variant="support"
|
|
54
|
+
/>
|
|
55
|
+
|
|
56
|
+
// Loading state
|
|
57
|
+
<ConversationCardRowSkeletonList rows={3} />
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
> **Design note:** `DevCardRowContent` is layout-only — no click behavior is baked in. Wrap in `<div>` for static rows or `<button>` for interactive ones. `rightBadges` accepts any `ReactNode`, keeping badge composition flexible per surface.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- source-hash: 0de96ea9df1ea6a28df1ff674cfc5e14 -->
|
|
2
|
+
Full-page wrapper component for dev-center sections (`/roadmap`, `/bug-fixes-and-enhancements`, `/releases`) in the OpenFrame platform. It composes `PageShell → PageLayout → DevSectionView` to deliver a consistent hero icon, search, and filter pill layout across all dev sections.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `DevSectionPage` | Component | Main page wrapper factory for any `OpenframeDevSectionKey` section |
|
|
9
|
+
| `DevSectionPageProps` | Interface | Props contract for `sectionKey`, `children`, `preControls`, and `backButton` |
|
|
10
|
+
| `SECTION_HERO_ICON_CLASS` | Constant | Tailwind class applied uniformly to all section hero icons |
|
|
11
|
+
|
|
12
|
+
### Props
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Description |
|
|
15
|
+
|------|------|-------------|
|
|
16
|
+
| `sectionKey` | `OpenframeDevSectionKey` | Looks up section metadata from `OPENFRAME_DEV_SECTIONS` |
|
|
17
|
+
| `children` | `ReactNode` | Page-specific list body (e.g. `<RoadmapList />`) |
|
|
18
|
+
| `preControls` | `ReactNode` (optional) | Slot rendered between the hero and search/filter controls |
|
|
19
|
+
| `backButton` | `{ label?, href? } \| false` (optional) | Configures or hides the back button; defaults to `Back to home → /` |
|
|
20
|
+
|
|
21
|
+
## Usage Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Adding a new section page is a single mount:
|
|
25
|
+
import { DevSectionPage } from '@/components/dev-center/dev-section-page';
|
|
26
|
+
|
|
27
|
+
export default function RoadmapPage() {
|
|
28
|
+
return (
|
|
29
|
+
<DevSectionPage
|
|
30
|
+
sectionKey="roadmap"
|
|
31
|
+
backButton={{ label: 'Back to home', href: '/' }}
|
|
32
|
+
>
|
|
33
|
+
<RoadmapList />
|
|
34
|
+
</DevSectionPage>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// With a preControls slot (e.g. Help Center ticket form above filters):
|
|
39
|
+
<DevSectionPage
|
|
40
|
+
sectionKey="help-center"
|
|
41
|
+
preControls={<OpenTicketForm />}
|
|
42
|
+
backButton={false} // hide back button
|
|
43
|
+
>
|
|
44
|
+
<TicketList />
|
|
45
|
+
</DevSectionPage>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
> **Extensibility:** Adding a new dev-center section requires only one entry in `OPENFRAME_DEV_SECTIONS` plus a single page file mounting `DevSectionPage` with the new key. Design system changes to `BackButton` or `TitleBlock` propagate automatically via the shared `PageLayout`.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- source-hash: 508a1c69dd2d082f4bed6cb98c63998b -->
|
|
2
|
+
Canonical chrome wrapper for dev-center sections (Roadmap, Delivery, Releases), handling title rendering, inline search, filter pills, and URL-param wiring in both tabbed and full-page layout modes.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `DevSectionView`
|
|
7
|
+
The single shared layout shell consumed by every dev-center section page. Supports two display modes:
|
|
8
|
+
- **Hero mode** — full-page layout with icon, `<h1>`, and description (pass `hero` prop)
|
|
9
|
+
- **Compact mode** — tab-context `<h2>` heading only (omit `hero`)
|
|
10
|
+
|
|
11
|
+
### `DevSectionViewProps`
|
|
12
|
+
| Prop | Type | Description |
|
|
13
|
+
|------|------|-------------|
|
|
14
|
+
| `sectionKey` | `OpenframeDevSectionKey` | Registry key driving title, search, and filter config |
|
|
15
|
+
| `hero` | `{ icon: ReactNode, description: string }` | Enables full-page hero rendering |
|
|
16
|
+
| `preControls` | `ReactNode` | Optional slot between hero and search/filter controls |
|
|
17
|
+
| `children` | `ReactNode` | Section-specific list body; reads URL params set by this component |
|
|
18
|
+
|
|
19
|
+
### URL Contract
|
|
20
|
+
- Search commits to `?<paramKey>=...` on **Enter only** (not every keystroke)
|
|
21
|
+
- Filter changes are applied immediately via `router.replace` with `scroll: false`
|
|
22
|
+
- Default filter values are omitted from the URL (cleaned via `params.delete`)
|
|
23
|
+
- `searchValue` is lazy-initialized from URL params to prevent stale flash on tab switch
|
|
24
|
+
|
|
25
|
+
## Usage Example
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
// Hero (full-page) mode
|
|
29
|
+
<DevSectionView
|
|
30
|
+
sectionKey="roadmap"
|
|
31
|
+
hero={{ icon: <RoadmapIcon />, description: "Track upcoming features." }}
|
|
32
|
+
preControls={<NewTicketForm />}
|
|
33
|
+
>
|
|
34
|
+
<RoadmapList />
|
|
35
|
+
</DevSectionView>
|
|
36
|
+
|
|
37
|
+
// Compact (tabbed) mode
|
|
38
|
+
<DevSectionView sectionKey="releases">
|
|
39
|
+
<ReleasesList />
|
|
40
|
+
</DevSectionView>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Children read filter/search state directly from URL params via `useSearchParams()` — no prop drilling required.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!-- source-hash: cf867242675a788a6cd1107870be83de -->
|
|
2
|
+
Barrel export file for the developer section UI components, re-exporting views, pages, and card row components from their respective modules.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `DevSectionView` | Component | View component for displaying a developer section |
|
|
9
|
+
| `DevSectionViewProps` | Type | Props interface for `DevSectionView` |
|
|
10
|
+
| `DevSectionPage` | Component | Page-level component for the developer section |
|
|
11
|
+
| `DevSectionPageProps` | Type | Props interface for `DevSectionPage` |
|
|
12
|
+
| `DevCardRowContent` | Component | Renders content within a developer card row |
|
|
13
|
+
| `DevCardRowSkeleton` | Component | Skeleton loader for a single developer card row |
|
|
14
|
+
| `DevCardRowSkeletonList` | Component | Skeleton loader list for multiple developer card rows |
|
|
15
|
+
| `DevCardRowContentProps` | Type | Props interface for `DevCardRowContent` |
|
|
16
|
+
|
|
17
|
+
## Usage Example
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import {
|
|
21
|
+
DevSectionPage,
|
|
22
|
+
DevSectionView,
|
|
23
|
+
DevCardRowContent,
|
|
24
|
+
DevCardRowSkeleton,
|
|
25
|
+
DevCardRowSkeletonList,
|
|
26
|
+
} from './index';
|
|
27
|
+
|
|
28
|
+
// Render the full page
|
|
29
|
+
<DevSectionPage />
|
|
30
|
+
|
|
31
|
+
// Or use the view with card rows
|
|
32
|
+
<DevSectionView>
|
|
33
|
+
<DevCardRowContent {...props} />
|
|
34
|
+
</DevSectionView>
|
|
35
|
+
|
|
36
|
+
// Show skeleton while loading
|
|
37
|
+
<DevCardRowSkeletonList />
|
|
38
|
+
```
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- source-hash: 30ce64f08f17859a1a4da9781ecb7e5e -->
|
|
2
|
+
Barrel export file for the shared legal-document UI surface, consolidating a reusable `<LegalDocumentPage>` component and its data-fetching hook into a single import point.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
| Export | Type | Description |
|
|
7
|
+
|--------|------|-------------|
|
|
8
|
+
| `LegalDocumentPage` | Component | Parameterized page component replacing duplicated `PrivacyPolicyPage` and `TermsOfServicePage` |
|
|
9
|
+
| `LegalDocumentPageProps` | Type | Props interface for `LegalDocumentPage` |
|
|
10
|
+
| `LegalDocumentMarkdownRendererProps` | Type | Props interface for the internal markdown renderer |
|
|
11
|
+
| `useLegalDocs` | Hook | Data-fetching hook for retrieving legal document content |
|
|
12
|
+
| `LegalDocument` | Type | Shape of a single legal document entity |
|
|
13
|
+
| `UseLegalDocsOptions` | Type | Configuration options for `useLegalDocs` |
|
|
14
|
+
| `UseLegalDocsReturn` | Type | Return value shape of `useLegalDocs` |
|
|
15
|
+
|
|
16
|
+
## Usage Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import {
|
|
20
|
+
LegalDocumentPage,
|
|
21
|
+
type LegalDocumentPageProps,
|
|
22
|
+
useLegalDocs,
|
|
23
|
+
type LegalDocument,
|
|
24
|
+
} from '@/features/legal';
|
|
25
|
+
|
|
26
|
+
// Render a Privacy Policy page
|
|
27
|
+
const privacyConfig: LegalDocumentPageProps = {
|
|
28
|
+
title: 'Privacy Policy',
|
|
29
|
+
slug: 'privacy-policy',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const PrivacyPolicyPage = () => (
|
|
33
|
+
<LegalDocumentPage {...privacyConfig} />
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
// Or fetch the document data directly
|
|
37
|
+
const { document, isLoading } = useLegalDocs({ slug: 'terms-of-service' });
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> **Design note:** This barrel consolidates what were previously two ~95% identical page components into a single parameterized surface, reducing duplication while keeping import paths clean for consumers.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!-- source-hash: 3706922a9df0493d5342fee857818e2a -->
|
|
2
|
+
Unified page component for rendering markdown-backed legal documents (privacy policy, terms of service, etc.), replacing duplicate per-document hub components with a single configurable abstraction.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `LegalDocumentPage`
|
|
7
|
+
Main exported component that handles the full page lifecycle — loading skeleton, error state, empty state, and rendered markdown content — driven entirely by props.
|
|
8
|
+
|
|
9
|
+
### `LegalDocumentPageProps`
|
|
10
|
+
Configuration interface covering:
|
|
11
|
+
- **`docType`** — drives the default `/api/legal/<docType>` endpoint and error-log prefix
|
|
12
|
+
- **`title` / `fallbackDescription`** — heading and subtitle text
|
|
13
|
+
- **`contactEmail` / `errorContactPrompt` / `errorTitle` / `emptyStateMessage`** — per-document copy strings
|
|
14
|
+
- **`initialData` / `initialLastUpdatedLabel`** — SSR hydration-safe pre-fetched data
|
|
15
|
+
- **`apiEndpoint`** — optional override for reverse-proxy or alternate API paths
|
|
16
|
+
- **`MarkdownRenderer`** — injectable renderer (defaults to `SimpleMarkdownRenderer`); pass a richer renderer for embeds/video/OG previews
|
|
17
|
+
- **`backButton`** — configurable back-nav; pass `false` to hide in embed mode
|
|
18
|
+
|
|
19
|
+
### `LegalDocumentMarkdownRendererProps`
|
|
20
|
+
Renderer contract interface with `content`, `sectionIds`, and `demoteMarkdownH1ToH2`.
|
|
21
|
+
|
|
22
|
+
## Usage Example
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// Privacy Policy page
|
|
26
|
+
<LegalDocumentPage
|
|
27
|
+
docType="privacy"
|
|
28
|
+
title="Privacy Policy"
|
|
29
|
+
fallbackDescription="Our privacy policy and data protection practices."
|
|
30
|
+
contactEmail="privacy@openframe.io"
|
|
31
|
+
errorContactPrompt="For privacy-related questions, please contact:"
|
|
32
|
+
errorTitle="Unable to load privacy policy"
|
|
33
|
+
emptyStateMessage="Privacy policy content is not available at this time."
|
|
34
|
+
initialData={ssrDocument}
|
|
35
|
+
initialLastUpdatedLabel="January 15, 2025"
|
|
36
|
+
/>
|
|
37
|
+
|
|
38
|
+
// Embed mode with custom renderer and no back button
|
|
39
|
+
<LegalDocumentPage
|
|
40
|
+
docType="terms"
|
|
41
|
+
title="Terms of Service"
|
|
42
|
+
fallbackDescription="Terms governing use of our platform."
|
|
43
|
+
contactEmail="legal@openframe.io"
|
|
44
|
+
errorContactPrompt="For legal questions, please contact:"
|
|
45
|
+
errorTitle="Unable to load terms of service"
|
|
46
|
+
emptyStateMessage="Terms of service content is not available at this time."
|
|
47
|
+
MarkdownRenderer={RichMarkdownRenderer}
|
|
48
|
+
backButton={false}
|
|
49
|
+
/>
|
|
50
|
+
```
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- source-hash: 8cc6f0cadfbca233ed799a57d6b4388c -->
|
|
2
|
+
A React hook that fetches markdown-backed legal documents (privacy policy, terms of service, etc.) from a hub API endpoint, with support for SSR/RSC pre-fetched data and manual refetching.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### Interfaces
|
|
7
|
+
|
|
8
|
+
| Interface | Description |
|
|
9
|
+
|-----------|-------------|
|
|
10
|
+
| `LegalDocument` | Shape of the fetched document — includes title, markdown content, GitHub sync metadata, and parsed section headings |
|
|
11
|
+
| `UseLegalDocsOptions` | Hook configuration — optional `initialData` for SSR hydration and `apiEndpoint` override for reverse-proxy embedders |
|
|
12
|
+
| `UseLegalDocsReturn` | Hook return value — `data`, `isLoading`, `error`, and `refetch` |
|
|
13
|
+
|
|
14
|
+
### `useLegalDocs(docType, options?)`
|
|
15
|
+
|
|
16
|
+
Core hook that manages fetch lifecycle for a legal document. Key behaviors:
|
|
17
|
+
|
|
18
|
+
- **Default endpoint:** `/api/legal/<docType>` — overridable via `apiEndpoint`
|
|
19
|
+
- **SSR-safe:** When `initialData` is provided, the initial client fetch is skipped entirely
|
|
20
|
+
- **`docType` reset guard:** When `docType` changes, stale data is cleared immediately before the new fetch resolves — prevents flash of wrong content in embedders cycling through document types
|
|
21
|
+
- **Error handling:** Propagates HTTP errors and empty-content responses as human-readable strings via the `error` state
|
|
22
|
+
|
|
23
|
+
## Usage Example
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// Basic client-side fetch
|
|
27
|
+
const { data, isLoading, error, refetch } = useLegalDocs('privacy');
|
|
28
|
+
|
|
29
|
+
// SSR hydration — skip initial client fetch
|
|
30
|
+
const { data } = useLegalDocs('terms', {
|
|
31
|
+
initialData: serverFetchedDoc,
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Reverse-proxy embedder overriding the endpoint
|
|
35
|
+
const { data, isLoading } = useLegalDocs('privacy', {
|
|
36
|
+
apiEndpoint: '/proxy/legal/privacy',
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
if (isLoading) return <Spinner />;
|
|
40
|
+
if (error) return <ErrorBanner message={error} onRetry={refetch} />;
|
|
41
|
+
return <MarkdownRenderer content={data?.content} />;
|
|
42
|
+
```
|