@flamingo-stack/openframe-frontend-core 0.0.218 → 0.0.219
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-LCLTCCXS.js → chunk-24Q2WLIU.js} +3 -3
- package/dist/{chunk-664KA5FI.cjs → chunk-2TBN53KY.cjs} +8 -1
- package/dist/chunk-2TBN53KY.cjs.map +1 -0
- package/dist/{chunk-RFONYT63.js → chunk-4YKGXZ7W.js} +1 -1
- package/dist/chunk-4YKGXZ7W.js.map +1 -0
- package/dist/{chunk-L5RSJE2I.cjs → chunk-7UZLRI7W.cjs} +3279 -2412
- package/dist/chunk-7UZLRI7W.cjs.map +1 -0
- package/dist/{chunk-V5JY5RSY.js → chunk-A3PL6ZCF.js} +5336 -4469
- package/dist/chunk-A3PL6ZCF.js.map +1 -0
- package/dist/{chunk-SWIR5EB2.js → chunk-DRPECAXO.js} +13 -5
- package/dist/chunk-DRPECAXO.js.map +1 -0
- package/dist/{chunk-FZZBCRID.cjs → chunk-F3FO2ZZZ.cjs} +18 -10
- package/dist/chunk-F3FO2ZZZ.cjs.map +1 -0
- package/dist/{chunk-HOHDXYPR.cjs → chunk-MEAR2WHS.cjs} +1 -1
- package/dist/chunk-MEAR2WHS.cjs.map +1 -0
- package/dist/{chunk-TCJ5B2ZD.cjs → chunk-MPHDM2VZ.cjs} +30 -30
- package/dist/{chunk-TCJ5B2ZD.cjs.map → chunk-MPHDM2VZ.cjs.map} +1 -1
- package/dist/{chunk-JJR27M56.cjs → chunk-MWW7LKDN.cjs} +8 -8
- package/dist/{chunk-JJR27M56.cjs.map → chunk-MWW7LKDN.cjs.map} +1 -1
- package/dist/{chunk-5V6MSE3B.cjs → chunk-SL3RGBPX.cjs} +38 -38
- package/dist/{chunk-5V6MSE3B.cjs.map → chunk-SL3RGBPX.cjs.map} +1 -1
- package/dist/{chunk-OHOUSDAY.js → chunk-SRA2QYK6.js} +4 -4
- package/dist/{chunk-XDPSSE4O.cjs → chunk-SZXKKEUH.cjs} +50 -50
- package/dist/{chunk-XDPSSE4O.cjs.map → chunk-SZXKKEUH.cjs.map} +1 -1
- package/dist/{chunk-EWA2NFUR.js → chunk-XG7DFRJL.js} +106 -5
- package/dist/chunk-XG7DFRJL.js.map +1 -0
- package/dist/{chunk-UEBM4PC4.js → chunk-Y3MXGCOW.js} +3 -3
- package/dist/chunk-Y3MXGCOW.js.map +1 -0
- package/dist/{chunk-KSOOKNBG.js → chunk-YICWWZ3Z.js} +8 -1
- package/dist/chunk-YICWWZ3Z.js.map +1 -0
- package/dist/{chunk-GE64T3JT.cjs → chunk-YX3YQNC4.cjs} +16 -16
- package/dist/{chunk-GE64T3JT.cjs.map → chunk-YX3YQNC4.cjs.map} +1 -1
- package/dist/{chunk-QY75VKAS.js → chunk-Z46NRJWW.js} +2 -2
- package/dist/{chunk-S4SVD5JI.cjs → chunk-ZGBXHK26.cjs} +123 -22
- package/dist/chunk-ZGBXHK26.cjs.map +1 -0
- package/dist/{chunk-EKBM4FHK.js → chunk-ZII7TNVA.js} +4 -4
- package/dist/components/about-icon.d.ts +2 -1
- package/dist/components/about-icon.d.ts.map +1 -1
- package/dist/components/alert-dialog.d.ts +2 -2
- package/dist/components/announcement-bar.d.ts +1 -1
- package/dist/components/announcement-bar.d.ts.map +1 -1
- package/dist/components/auth-stub.d.ts +1 -1
- package/dist/components/auth-stub.d.ts.map +1 -1
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/badge.d.ts.map +1 -1
- package/dist/components/breadcrumb.d.ts +2 -2
- package/dist/components/calendar.d.ts +1 -1
- package/dist/components/calendar.d.ts.map +1 -1
- package/dist/components/categories-cart.d.ts +2 -1
- package/dist/components/categories-cart.d.ts.map +1 -1
- package/dist/components/category-card.d.ts +1 -1
- package/dist/components/category-card.d.ts.map +1 -1
- package/dist/components/chart.d.ts +1 -1
- package/dist/components/chart.d.ts.map +1 -1
- package/dist/components/chat/chat-attachment-bar.d.ts +2 -2
- package/dist/components/chat/chat-attachment-bar.d.ts.map +1 -1
- package/dist/components/chat/chat-container.d.ts.map +1 -1
- package/dist/components/chat/chat-message-row.d.ts +2 -2
- package/dist/components/chat/chat-message-row.d.ts.map +1 -1
- package/dist/components/chat/chat-message-skeleton.d.ts +2 -2
- package/dist/components/chat/chat-message-skeleton.d.ts.map +1 -1
- package/dist/components/chat/cycling-phrase.d.ts +1 -1
- package/dist/components/chat/cycling-phrase.d.ts.map +1 -1
- package/dist/components/chat/embeddable-chat.d.ts +31 -1
- package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/admin-content-card.d.ts +1 -1
- package/dist/components/chat/entity-cards/admin-content-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/blog-card.d.ts +20 -2
- package/dist/components/chat/entity-cards/blog-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/blog-image-placeholder.d.ts +2 -1
- package/dist/components/chat/entity-cards/blog-image-placeholder.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/campaign-card-admin.d.ts +2 -2
- package/dist/components/chat/entity-cards/campaign-card-admin.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/case-study-card.d.ts +14 -2
- package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/chat-ticket-item.d.ts +4 -0
- package/dist/components/chat/entity-cards/chat-ticket-item.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/customer-interview-card.d.ts +10 -2
- package/dist/components/chat/entity-cards/customer-interview-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/data-room-doc-card.d.ts +2 -2
- package/dist/components/chat/entity-cards/data-room-doc-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/dispatch.d.ts +1 -1
- package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/entity-author-card.d.ts +3 -3
- package/dist/components/chat/entity-cards/entity-author-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/generic-entity-card.d.ts +2 -2
- package/dist/components/chat/entity-cards/generic-entity-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/github-activity-card.d.ts +2 -2
- package/dist/components/chat/entity-cards/github-activity-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts +2 -2
- package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/index.d.ts +1 -0
- package/dist/components/chat/entity-cards/index.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/investor-update-card.d.ts +10 -2
- package/dist/components/chat/entity-cards/investor-update-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts +18 -2
- package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/product-release-card-defaults.d.ts +31 -0
- package/dist/components/chat/entity-cards/product-release-card-defaults.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/program-card.d.ts +2 -2
- package/dist/components/chat/entity-cards/program-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/roadmap-card.d.ts +12 -2
- package/dist/components/chat/entity-cards/roadmap-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/roadmap-vote-button.d.ts +7 -1
- package/dist/components/chat/entity-cards/roadmap-vote-button.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/slack-message-card.d.ts +2 -2
- package/dist/components/chat/entity-cards/slack-message-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/task-type-icon.d.ts +10 -1
- package/dist/components/chat/entity-cards/task-type-icon.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/use-entity-card-link.d.ts.map +1 -1
- package/dist/components/chat/expand-chevron.d.ts +1 -1
- package/dist/components/chat/expand-chevron.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts +1 -1
- package/dist/components/chat/hooks/use-chat-identity.d.ts +60 -0
- package/dist/components/chat/hooks/use-chat-identity.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +2 -1
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +17 -7
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.js +16 -6
- package/dist/components/chat/mingo-onboarding-card-skeleton.d.ts +3 -2
- package/dist/components/chat/mingo-onboarding-card-skeleton.d.ts.map +1 -1
- package/dist/components/chat/mingo-onboarding-card.d.ts +1 -1
- package/dist/components/chat/mingo-onboarding-card.d.ts.map +1 -1
- package/dist/components/chat/nav-link-anchor-via-runtime.d.ts +1 -1
- package/dist/components/chat/nav-link-anchor-via-runtime.d.ts.map +1 -1
- package/dist/components/chat/slash-command-suggestions.d.ts +1 -1
- package/dist/components/chat/slash-command-suggestions.d.ts.map +1 -1
- package/dist/components/chat/tool-call-blocks.d.ts +2 -2
- package/dist/components/chat/tool-call-blocks.d.ts.map +1 -1
- package/dist/components/chat/types/component.types.d.ts +7 -1
- package/dist/components/chat/types/component.types.d.ts.map +1 -1
- package/dist/components/chat/utils/execute-navigation.d.ts +40 -0
- package/dist/components/chat/utils/execute-navigation.d.ts.map +1 -0
- package/dist/components/chat/utils/index.d.ts +1 -0
- package/dist/components/chat/utils/index.d.ts.map +1 -1
- package/dist/components/chat/utils/nav-click-handler.d.ts +14 -41
- package/dist/components/chat/utils/nav-click-handler.d.ts.map +1 -1
- package/dist/components/chat/utils/source-row-cta.d.ts +46 -0
- package/dist/components/chat/utils/source-row-cta.d.ts.map +1 -1
- package/dist/components/check-circle-icon.d.ts +1 -1
- package/dist/components/check-circle-icon.d.ts.map +1 -1
- package/dist/components/chevron-button.d.ts +1 -1
- package/dist/components/chevron-button.d.ts.map +1 -1
- package/dist/components/claude-icon.d.ts +1 -1
- package/dist/components/claude-icon.d.ts.map +1 -1
- package/dist/components/command.d.ts +2 -2
- package/dist/components/command.d.ts.map +1 -1
- package/dist/components/comment-card.d.ts +1 -1
- package/dist/components/comment-card.d.ts.map +1 -1
- package/dist/components/contact/contact-form.d.ts +1 -1
- package/dist/components/contact/contact-form.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +8 -8
- package/dist/components/contact/index.js +7 -7
- package/dist/components/content-loading-container.d.ts +1 -1
- package/dist/components/content-loading-container.d.ts.map +1 -1
- package/dist/components/context-menu.d.ts +1 -1
- package/dist/components/custom-external-link-icon.d.ts +1 -1
- package/dist/components/custom-external-link-icon.d.ts.map +1 -1
- package/dist/components/custom-fork-icon.d.ts +1 -1
- package/dist/components/custom-fork-icon.d.ts.map +1 -1
- package/dist/components/custom-icons.d.ts +3 -2
- package/dist/components/custom-icons.d.ts.map +1 -1
- package/dist/components/custom-license-icon.d.ts +1 -1
- package/dist/components/custom-license-icon.d.ts.map +1 -1
- package/dist/components/custom-star-icon.d.ts +1 -1
- package/dist/components/custom-star-icon.d.ts.map +1 -1
- package/dist/components/custom-time-icon.d.ts +1 -1
- package/dist/components/custom-time-icon.d.ts.map +1 -1
- package/dist/components/date-time-picker.d.ts +1 -1
- package/dist/components/date-time-picker.d.ts.map +1 -1
- package/dist/components/dialog.d.ts +2 -2
- package/dist/components/donut-icon.d.ts +1 -1
- package/dist/components/donut-icon.d.ts.map +1 -1
- package/dist/components/dropdown-menu.d.ts +1 -1
- package/dist/components/dynamic-skeleton.d.ts +9 -9
- package/dist/components/dynamic-skeleton.d.ts.map +1 -1
- package/dist/components/edit-profile-icon.d.ts +1 -1
- package/dist/components/edit-profile-icon.d.ts.map +1 -1
- package/dist/components/elestio-logo.d.ts +1 -1
- package/dist/components/elestio-logo.d.ts.map +1 -1
- package/dist/components/empty-state.d.ts +1 -1
- package/dist/components/empty-state.d.ts.map +1 -1
- package/dist/components/empty-vendor-icon.d.ts +2 -1
- package/dist/components/empty-vendor-icon.d.ts.map +1 -1
- package/dist/components/faq-accordion.d.ts +2 -1
- package/dist/components/faq-accordion.d.ts.map +1 -1
- package/dist/components/features/array-entry-manager.d.ts +1 -1
- package/dist/components/features/array-entry-manager.d.ts.map +1 -1
- package/dist/components/features/auth-providers-list.d.ts +1 -1
- package/dist/components/features/auth-providers-list.d.ts.map +1 -1
- package/dist/components/features/board/board-column-header.d.ts +1 -1
- package/dist/components/features/board/board-column-header.d.ts.map +1 -1
- package/dist/components/features/board/board-column.d.ts +1 -1
- package/dist/components/features/board/board-column.d.ts.map +1 -1
- package/dist/components/features/board/board.d.ts +1 -1
- package/dist/components/features/board/board.d.ts.map +1 -1
- package/dist/components/features/board/ticket-card.d.ts +1 -1
- package/dist/components/features/board/ticket-card.d.ts.map +1 -1
- package/dist/components/features/board/types.d.ts +7 -0
- package/dist/components/features/board/types.d.ts.map +1 -1
- package/dist/components/features/changelog-manager.d.ts +1 -1
- package/dist/components/features/changelog-manager.d.ts.map +1 -1
- package/dist/components/features/changelog-sections-manager.d.ts +1 -1
- package/dist/components/features/changelog-sections-manager.d.ts.map +1 -1
- package/dist/components/features/clickup-tasks-manager.d.ts +1 -1
- package/dist/components/features/clickup-tasks-manager.d.ts.map +1 -1
- package/dist/components/features/command-box.d.ts +1 -1
- package/dist/components/features/command-box.d.ts.map +1 -1
- package/dist/components/features/entity-summary-editor.d.ts +2 -1
- package/dist/components/features/entity-summary-editor.d.ts.map +1 -1
- package/dist/components/features/entity-video-section.d.ts +1 -1
- package/dist/components/features/entity-video-section.d.ts.map +1 -1
- package/dist/components/features/github-releases-manager.d.ts +1 -1
- package/dist/components/features/github-releases-manager.d.ts.map +1 -1
- package/dist/components/features/highlight-config-section.d.ts +2 -1
- package/dist/components/features/highlight-config-section.d.ts.map +1 -1
- package/dist/components/features/highlight-generation-section.d.ts +2 -1
- package/dist/components/features/highlight-generation-section.d.ts.map +1 -1
- package/dist/components/features/highlight-video-combined-section.d.ts +2 -2
- package/dist/components/features/highlight-video-combined-section.d.ts.map +1 -1
- package/dist/components/features/highlight-video-preview.d.ts +2 -2
- package/dist/components/features/highlight-video-preview.d.ts.map +1 -1
- package/dist/components/features/highlight-video-section.d.ts +1 -1
- package/dist/components/features/highlight-video-section.d.ts.map +1 -1
- package/dist/components/features/index.cjs +9 -7
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.d.ts +1 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +8 -6
- package/dist/components/features/knowledge-base-links-manager.d.ts +1 -1
- package/dist/components/features/knowledge-base-links-manager.d.ts.map +1 -1
- package/dist/components/features/loading-provider.d.ts +1 -1
- package/dist/components/features/loading-provider.d.ts.map +1 -1
- package/dist/components/features/media-gallery-manager.d.ts +2 -1
- package/dist/components/features/media-gallery-manager.d.ts.map +1 -1
- package/dist/components/features/notifications/notification-drawer.d.ts +1 -1
- package/dist/components/features/notifications/notification-drawer.d.ts.map +1 -1
- package/dist/components/features/notifications/notification-popups.d.ts +1 -1
- package/dist/components/features/notifications/notification-popups.d.ts.map +1 -1
- package/dist/components/features/notifications/notification-tile.d.ts +1 -1
- package/dist/components/features/notifications/notification-tile.d.ts.map +1 -1
- package/dist/components/features/notifications/notifications-context.d.ts +1 -1
- package/dist/components/features/notifications/notifications-context.d.ts.map +1 -1
- package/dist/components/features/og-editor-preview.d.ts +1 -1
- package/dist/components/features/og-editor-preview.d.ts.map +1 -1
- package/dist/components/features/os-type-badge-group.d.ts +8 -1
- package/dist/components/features/os-type-badge-group.d.ts.map +1 -1
- package/dist/components/features/paths-display.d.ts +2 -1
- package/dist/components/features/paths-display.d.ts.map +1 -1
- package/dist/components/features/platform-badge.d.ts +2 -1
- package/dist/components/features/platform-badge.d.ts.map +1 -1
- package/dist/components/features/platform-filter.d.ts +2 -1
- package/dist/components/features/platform-filter.d.ts.map +1 -1
- package/dist/components/features/provider-button.d.ts +1 -1
- package/dist/components/features/provider-button.d.ts.map +1 -1
- package/dist/components/features/push-button-selector.d.ts +1 -1
- package/dist/components/features/push-button-selector.d.ts.map +1 -1
- package/dist/components/features/release-media-manager.d.ts +1 -1
- package/dist/components/features/release-media-manager.d.ts.map +1 -1
- package/dist/components/features/seo-editor-preview.d.ts +1 -1
- package/dist/components/features/seo-editor-preview.d.ts.map +1 -1
- package/dist/components/features/social-links-manager.d.ts +1 -1
- package/dist/components/features/social-links-manager.d.ts.map +1 -1
- package/dist/components/features/status-filter-component.d.ts +2 -1
- package/dist/components/features/status-filter-component.d.ts.map +1 -1
- package/dist/components/features/tags-selector.d.ts +1 -1
- package/dist/components/features/tags-selector.d.ts.map +1 -1
- package/dist/components/features/ticket-status-config-list/index.d.ts +2 -0
- package/dist/components/features/ticket-status-config-list/index.d.ts.map +1 -0
- package/dist/components/features/ticket-status-config-list/ticket-status-config-list.d.ts +19 -0
- package/dist/components/features/ticket-status-config-list/ticket-status-config-list.d.ts.map +1 -0
- package/dist/components/features/transcribe-and-summarize-combined-section.d.ts +2 -1
- package/dist/components/features/transcribe-and-summarize-combined-section.d.ts.map +1 -1
- package/dist/components/features/transcribe-summarize-section.d.ts +2 -1
- package/dist/components/features/transcribe-summarize-section.d.ts.map +1 -1
- package/dist/components/features/transcript-summary-editor.d.ts +2 -1
- package/dist/components/features/transcript-summary-editor.d.ts.map +1 -1
- package/dist/components/features/video-bites-display.d.ts +3 -2
- package/dist/components/features/video-bites-display.d.ts.map +1 -1
- package/dist/components/features/video-clips-section.d.ts +2 -1
- package/dist/components/features/video-clips-section.d.ts.map +1 -1
- package/dist/components/features/video-ratio-tabs.d.ts +1 -1
- package/dist/components/features/video-ratio-tabs.d.ts.map +1 -1
- package/dist/components/features/video-source-selector.d.ts +1 -1
- package/dist/components/features/video-source-selector.d.ts.map +1 -1
- package/dist/components/features/view-toggle.d.ts +2 -1
- package/dist/components/features/view-toggle.d.ts.map +1 -1
- package/dist/components/features/waitlist-form.d.ts +1 -1
- package/dist/components/features/waitlist-form.d.ts.map +1 -1
- package/dist/components/filter-chip.d.ts +1 -1
- package/dist/components/filter-chip.d.ts.map +1 -1
- package/dist/components/flamingo-logo.d.ts +1 -1
- package/dist/components/flamingo-logo.d.ts.map +1 -1
- package/dist/components/footer-waitlist-button.d.ts +1 -1
- package/dist/components/footer-waitlist-button.d.ts.map +1 -1
- package/dist/components/footer.d.ts +1 -1
- package/dist/components/footer.d.ts.map +1 -1
- package/dist/components/form.d.ts +1 -1
- package/dist/components/form.d.ts.map +1 -1
- package/dist/components/google-logo.d.ts +1 -1
- package/dist/components/google-logo.d.ts.map +1 -1
- package/dist/components/hamburger-icon.d.ts +2 -1
- package/dist/components/hamburger-icon.d.ts.map +1 -1
- package/dist/components/hero-image-uploader.d.ts +1 -1
- package/dist/components/hero-image-uploader.d.ts.map +1 -1
- package/dist/components/hubspot-icon.d.ts +1 -1
- package/dist/components/hubspot-icon.d.ts.map +1 -1
- package/dist/components/icons/about-icon.d.ts +2 -1
- package/dist/components/icons/about-icon.d.ts.map +1 -1
- package/dist/components/icons/alert-triangle-icon.d.ts +1 -1
- package/dist/components/icons/alert-triangle-icon.d.ts.map +1 -1
- package/dist/components/icons/archive-icon.d.ts +1 -1
- package/dist/components/icons/archive-icon.d.ts.map +1 -1
- package/dist/components/icons/automate-everything-icon.d.ts +1 -1
- package/dist/components/icons/automate-everything-icon.d.ts.map +1 -1
- package/dist/components/icons/bot-icon.d.ts +1 -1
- package/dist/components/icons/bot-icon.d.ts.map +1 -1
- package/dist/components/icons/buildings-icon.d.ts +2 -1
- package/dist/components/icons/buildings-icon.d.ts.map +1 -1
- package/dist/components/icons/capterra-icon.d.ts +2 -1
- package/dist/components/icons/capterra-icon.d.ts.map +1 -1
- package/dist/components/icons/carta-icon.d.ts +1 -1
- package/dist/components/icons/carta-icon.d.ts.map +1 -1
- package/dist/components/icons/check-circle-icon.d.ts +1 -1
- package/dist/components/icons/check-circle-icon.d.ts.map +1 -1
- package/dist/components/icons/claude-icon.d.ts +1 -1
- package/dist/components/icons/claude-icon.d.ts.map +1 -1
- package/dist/components/icons/clickup-icon.d.ts +2 -1
- package/dist/components/icons/clickup-icon.d.ts.map +1 -1
- package/dist/components/icons/copy-icon.d.ts +2 -1
- package/dist/components/icons/copy-icon.d.ts.map +1 -1
- package/dist/components/icons/cpu-icon.d.ts +1 -1
- package/dist/components/icons/cpu-icon.d.ts.map +1 -1
- package/dist/components/icons/custom-external-link-icon.d.ts +1 -1
- package/dist/components/icons/custom-external-link-icon.d.ts.map +1 -1
- package/dist/components/icons/custom-fork-icon.d.ts +1 -1
- package/dist/components/icons/custom-fork-icon.d.ts.map +1 -1
- package/dist/components/icons/custom-license-icon.d.ts +1 -1
- package/dist/components/icons/custom-license-icon.d.ts.map +1 -1
- package/dist/components/icons/custom-star-icon.d.ts +1 -1
- package/dist/components/icons/custom-star-icon.d.ts.map +1 -1
- package/dist/components/icons/custom-time-icon.d.ts +1 -1
- package/dist/components/icons/custom-time-icon.d.ts.map +1 -1
- package/dist/components/icons/cut-vendor-costs-icon.d.ts +1 -1
- package/dist/components/icons/cut-vendor-costs-icon.d.ts.map +1 -1
- package/dist/components/icons/dashboard-icon.d.ts +2 -1
- package/dist/components/icons/dashboard-icon.d.ts.map +1 -1
- package/dist/components/icons/device-type-icons/desktop-icon.d.ts +1 -1
- package/dist/components/icons/device-type-icons/desktop-icon.d.ts.map +1 -1
- package/dist/components/icons/device-type-icons/laptop-icon.d.ts +1 -1
- package/dist/components/icons/device-type-icons/laptop-icon.d.ts.map +1 -1
- package/dist/components/icons/device-type-icons/server-icon.d.ts +1 -1
- package/dist/components/icons/device-type-icons/server-icon.d.ts.map +1 -1
- package/dist/components/icons/devices-icon.d.ts +1 -1
- package/dist/components/icons/devices-icon.d.ts.map +1 -1
- package/dist/components/icons/document-icon.d.ts +1 -1
- package/dist/components/icons/document-icon.d.ts.map +1 -1
- package/dist/components/icons/donut-icon.d.ts +1 -1
- package/dist/components/icons/donut-icon.d.ts.map +1 -1
- package/dist/components/icons/double-chevron-icon.d.ts +2 -1
- package/dist/components/icons/double-chevron-icon.d.ts.map +1 -1
- package/dist/components/icons/edit-profile-icon.d.ts +1 -1
- package/dist/components/icons/edit-profile-icon.d.ts.map +1 -1
- package/dist/components/icons/elestio-logo.d.ts +1 -1
- package/dist/components/icons/elestio-logo.d.ts.map +1 -1
- package/dist/components/icons/empty-vendor-icon.d.ts +2 -1
- package/dist/components/icons/empty-vendor-icon.d.ts.map +1 -1
- package/dist/components/icons/error-icon.d.ts +1 -1
- package/dist/components/icons/error-icon.d.ts.map +1 -1
- package/dist/components/icons/explore-categories-icon.d.ts +2 -1
- package/dist/components/icons/explore-categories-icon.d.ts.map +1 -1
- package/dist/components/icons/facebook-icon.d.ts +2 -1
- package/dist/components/icons/facebook-icon.d.ts.map +1 -1
- package/dist/components/icons/figma-icon.d.ts +1 -1
- package/dist/components/icons/figma-icon.d.ts.map +1 -1
- package/dist/components/icons/file-check-icon.d.ts +1 -1
- package/dist/components/icons/file-check-icon.d.ts.map +1 -1
- package/dist/components/icons/file-text-icon.d.ts +1 -1
- package/dist/components/icons/file-text-icon.d.ts.map +1 -1
- package/dist/components/icons/flamingo-logo.d.ts +1 -1
- package/dist/components/icons/flamingo-logo.d.ts.map +1 -1
- package/dist/components/icons/g2-icon.d.ts +2 -1
- package/dist/components/icons/g2-icon.d.ts.map +1 -1
- package/dist/components/icons/getapp-icon.d.ts +2 -1
- package/dist/components/icons/getapp-icon.d.ts.map +1 -1
- package/dist/components/icons/globe-icon.d.ts +2 -1
- package/dist/components/icons/globe-icon.d.ts.map +1 -1
- package/dist/components/icons/google-gemini-icon.d.ts +2 -1
- package/dist/components/icons/google-gemini-icon.d.ts.map +1 -1
- package/dist/components/icons/google-logo.d.ts +1 -1
- package/dist/components/icons/google-logo.d.ts.map +1 -1
- package/dist/components/icons/grid-view-icon.d.ts +2 -1
- package/dist/components/icons/grid-view-icon.d.ts.map +1 -1
- package/dist/components/icons/hamburger-icon.d.ts +2 -1
- package/dist/components/icons/hamburger-icon.d.ts.map +1 -1
- package/dist/components/icons/hotel-icon.d.ts +2 -1
- package/dist/components/icons/hotel-icon.d.ts.map +1 -1
- package/dist/components/icons/hubspot-icon.d.ts +1 -1
- package/dist/components/icons/hubspot-icon.d.ts.map +1 -1
- package/dist/components/icons/image-icon.d.ts +1 -1
- package/dist/components/icons/image-icon.d.ts.map +1 -1
- package/dist/components/icons/index.cjs +3 -3
- package/dist/components/icons/index.js +2 -2
- package/dist/components/icons/info-circle-icon.d.ts +2 -1
- package/dist/components/icons/info-circle-icon.d.ts.map +1 -1
- package/dist/components/icons/instagram-icon.d.ts +2 -1
- package/dist/components/icons/instagram-icon.d.ts.map +1 -1
- package/dist/components/icons/linkedin-icon.d.ts +1 -1
- package/dist/components/icons/linkedin-icon.d.ts.map +1 -1
- package/dist/components/icons/linux-icon.d.ts +1 -1
- package/dist/components/icons/linux-icon.d.ts.map +1 -1
- package/dist/components/icons/livestorm-icon.d.ts +1 -1
- package/dist/components/icons/livestorm-icon.d.ts.map +1 -1
- package/dist/components/icons/log-out-icon.d.ts +2 -1
- package/dist/components/icons/log-out-icon.d.ts.map +1 -1
- package/dist/components/icons/logs-icon.d.ts +2 -1
- package/dist/components/icons/logs-icon.d.ts.map +1 -1
- package/dist/components/icons/luma-icon.d.ts +1 -1
- package/dist/components/icons/luma-icon.d.ts.map +1 -1
- package/dist/components/icons/macos-icon.d.ts +1 -1
- package/dist/components/icons/macos-icon.d.ts.map +1 -1
- package/dist/components/icons/message-circle-icon.d.ts +1 -1
- package/dist/components/icons/message-circle-icon.d.ts.map +1 -1
- package/dist/components/icons/mingo-icon.d.ts +1 -1
- package/dist/components/icons/mingo-icon.d.ts.map +1 -1
- package/dist/components/icons/minus-circle-icon.d.ts +1 -1
- package/dist/components/icons/minus-circle-icon.d.ts.map +1 -1
- package/dist/components/icons/ms-icon.d.ts +2 -1
- package/dist/components/icons/ms-icon.d.ts.map +1 -1
- package/dist/components/icons/network-icon.d.ts +1 -1
- package/dist/components/icons/network-icon.d.ts.map +1 -1
- package/dist/components/icons/openai-icon.d.ts +2 -1
- package/dist/components/icons/openai-icon.d.ts.map +1 -1
- package/dist/components/icons/openframe-ai-icons.d.ts +8 -8
- package/dist/components/icons/openframe-ai-icons.d.ts.map +1 -1
- package/dist/components/icons/openframe-logo.d.ts +1 -1
- package/dist/components/icons/openframe-logo.d.ts.map +1 -1
- package/dist/components/icons/openframe-text.d.ts +1 -1
- package/dist/components/icons/openframe-text.d.ts.map +1 -1
- package/dist/components/icons/openmsp-logo.d.ts +1 -1
- package/dist/components/icons/openmsp-logo.d.ts.map +1 -1
- package/dist/components/icons/organizations-icon.d.ts +1 -1
- package/dist/components/icons/organizations-icon.d.ts.map +1 -1
- package/dist/components/icons/package-icon.d.ts +1 -1
- package/dist/components/icons/package-icon.d.ts.map +1 -1
- package/dist/components/icons/pilot-icon.d.ts +1 -1
- package/dist/components/icons/pilot-icon.d.ts.map +1 -1
- package/dist/components/icons/plus-circle-icon.d.ts +1 -1
- package/dist/components/icons/plus-circle-icon.d.ts.map +1 -1
- package/dist/components/icons/podbean-icon.d.ts +1 -1
- package/dist/components/icons/podbean-icon.d.ts.map +1 -1
- package/dist/components/icons/policies-icon.d.ts +1 -1
- package/dist/components/icons/policies-icon.d.ts.map +1 -1
- package/dist/components/icons/queries-icon.d.ts +1 -1
- package/dist/components/icons/queries-icon.d.ts.map +1 -1
- package/dist/components/icons/reclaim-profits-icon.d.ts +1 -1
- package/dist/components/icons/reclaim-profits-icon.d.ts.map +1 -1
- package/dist/components/icons/reddit-icon.d.ts +2 -1
- package/dist/components/icons/reddit-icon.d.ts.map +1 -1
- package/dist/components/icons/remote-control-icon.d.ts +2 -1
- package/dist/components/icons/remote-control-icon.d.ts.map +1 -1
- package/dist/components/icons/script-icon.d.ts +2 -1
- package/dist/components/icons/script-icon.d.ts.map +1 -1
- package/dist/components/icons/search-icon.d.ts +2 -1
- package/dist/components/icons/search-icon.d.ts.map +1 -1
- package/dist/components/icons/send-icon.d.ts +1 -1
- package/dist/components/icons/send-icon.d.ts.map +1 -1
- package/dist/components/icons/settings-icon.d.ts +2 -1
- package/dist/components/icons/settings-icon.d.ts.map +1 -1
- package/dist/components/icons/shape-circle-dash-icon.d.ts +2 -1
- package/dist/components/icons/shape-circle-dash-icon.d.ts.map +1 -1
- package/dist/components/icons/shell-icon.d.ts +2 -1
- package/dist/components/icons/shell-icon.d.ts.map +1 -1
- package/dist/components/icons/shield-check-icon.d.ts +2 -1
- package/dist/components/icons/shield-check-icon.d.ts.map +1 -1
- package/dist/components/icons/shield-icon.d.ts +1 -1
- package/dist/components/icons/shield-icon.d.ts.map +1 -1
- package/dist/components/icons/shield-key-icon.d.ts +2 -1
- package/dist/components/icons/shield-key-icon.d.ts.map +1 -1
- package/dist/components/icons/shield-lock-icon.d.ts +2 -1
- package/dist/components/icons/shield-lock-icon.d.ts.map +1 -1
- package/dist/components/icons/slack-icon.d.ts +2 -1
- package/dist/components/icons/slack-icon.d.ts.map +1 -1
- package/dist/components/icons/sliders-icon.d.ts +1 -1
- package/dist/components/icons/sliders-icon.d.ts.map +1 -1
- package/dist/components/icons/sso-configuration-icon.d.ts +2 -1
- package/dist/components/icons/sso-configuration-icon.d.ts.map +1 -1
- package/dist/components/icons/table-view-icon.d.ts +2 -1
- package/dist/components/icons/table-view-icon.d.ts.map +1 -1
- package/dist/components/icons/telegram-icon.d.ts +2 -1
- package/dist/components/icons/telegram-icon.d.ts.map +1 -1
- package/dist/components/icons/thumbs-down-icon.d.ts +1 -1
- package/dist/components/icons/thumbs-down-icon.d.ts.map +1 -1
- package/dist/components/icons/thumbs-up-icon.d.ts +1 -1
- package/dist/components/icons/thumbs-up-icon.d.ts.map +1 -1
- package/dist/components/icons/trustpilot-icon.d.ts +2 -1
- package/dist/components/icons/trustpilot-icon.d.ts.map +1 -1
- package/dist/components/icons/user-icon.d.ts +2 -1
- package/dist/components/icons/user-icon.d.ts.map +1 -1
- package/dist/components/icons/users-icon.d.ts +1 -1
- package/dist/components/icons/users-icon.d.ts.map +1 -1
- package/dist/components/icons/vendor-showcase-icons.d.ts +4 -4
- package/dist/components/icons/vendor-showcase-icons.d.ts.map +1 -1
- package/dist/components/icons/whatsapp-icon.d.ts +2 -1
- package/dist/components/icons/whatsapp-icon.d.ts.map +1 -1
- package/dist/components/icons/windows-icon.d.ts +1 -1
- package/dist/components/icons/windows-icon.d.ts.map +1 -1
- package/dist/components/icons/x-icon.d.ts +2 -1
- package/dist/components/icons/x-icon.d.ts.map +1 -1
- package/dist/components/icons/x-logo.d.ts +1 -1
- package/dist/components/icons/x-logo.d.ts.map +1 -1
- package/dist/components/icons/youtube-icon.d.ts +2 -1
- package/dist/components/icons/youtube-icon.d.ts.map +1 -1
- package/dist/components/icons-block.d.ts +2 -1
- package/dist/components/icons-block.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-a-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-a-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-a-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-a-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-a-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-a-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-b-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-b-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-b-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-b-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-b-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-b-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-c-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-c-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-c-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-c-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-c-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-c-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-d-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-d-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-d-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-d-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-d-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-d-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-e-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-e-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-e-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-e-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-e-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-e-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-f-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-f-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-f-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-f-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-f-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-f-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-g-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-g-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-g-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-g-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-g-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-g-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-h-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-h-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-h-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-h-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-h-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-h-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-i-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-i-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-i-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-i-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-i-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-i-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-j-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-j-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-j-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-j-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-j-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-j-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-k-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-k-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-k-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-k-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-k-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-k-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-l-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-l-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-l-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-l-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-l-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-l-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-m-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-m-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-m-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-m-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-m-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-m-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-n-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-n-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-n-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-n-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-n-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-n-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-o-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-o-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-o-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-o-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-o-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-o-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-p-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-p-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-p-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-p-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-p-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-p-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-q-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-q-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-q-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-q-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-q-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-q-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-r-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-r-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-r-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-r-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-r-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-r-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-s-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-s-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-s-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-s-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-s-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-s-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-t-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-t-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-t-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-t-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-t-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-t-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-u-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-u-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-u-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-u-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-u-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-u-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-v-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-v-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-v-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-v-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-v-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-v-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-w-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-w-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-w-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-w-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-w-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-w-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-x-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-x-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-x-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-x-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-x-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-x-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-y-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-y-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-y-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-y-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-y-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-y-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-z-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-z-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-z-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-z-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-z-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/alphabet/alphabet-z-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-01-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-01-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-01-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-01-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-01-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-01-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-01-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-01-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-02-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-02-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-02-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-02-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-02-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-02-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-02-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-02-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-03-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-03-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-03-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-03-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-03-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-03-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-03-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-03-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-04-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-04-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-04-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-04-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-04-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-04-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-04-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-04-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-circle-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-circle-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-circle-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-circle-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-circle-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-circle-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-circle-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-circle-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-corner-bl-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-corner-bl-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-corner-br-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-corner-br-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-corner-tl-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-corner-tl-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-corner-tr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-corner-tr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-right-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-right-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-square-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-square-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-square-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-square-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-square-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-square-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-square-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-square-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-turn-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-turn-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-turn-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-turn-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-turn-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-turn-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-turn-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrow-turn-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/arrows-spin-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/arrows-spin-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-01-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-01-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-01-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-01-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-01-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-01-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-01-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-01-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-02-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-02-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-02-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-02-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-02-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-02-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-02-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-02-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-circle-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-circle-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-circle-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-circle-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-circle-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-circle-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-circle-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-circle-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-square-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-square-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-square-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-square-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-square-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-square-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-square-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevron-square-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-03-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-03-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-03-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-03-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-03-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-03-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-03-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-03-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-04-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-04-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-04-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-04-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-05-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-05-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-05-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/chevrons-05-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/expand-arrow-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/expand-arrow-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/expand-arrow-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/expand-arrow-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/switch-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/switch-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/switch-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/switch-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-alt-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-alt-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-hr-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-hr-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-vr-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/arrows/transfer-vr-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/aperture-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/aperture-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/book-play-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/book-play-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/camera-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/camera-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/camera-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/camera-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/camera-retro-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/camera-retro-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/camera-retro-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/camera-retro-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/carousel-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/carousel-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/carousel-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/carousel-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/cassette-tape-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/cassette-tape-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/clapperboard-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/clapperboard-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/clapperboard-play-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/clapperboard-play-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-album-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-album-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-audio-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-audio-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-image-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-image-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-music-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-music-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-video-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/collection-video-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/color-palette-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/color-palette-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/colors-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/colors-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/contrast-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/contrast-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/contrast-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/contrast-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/disc-vinyl-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/disc-vinyl-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/film-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/film-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/film-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/film-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/flash-auto-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/flash-auto-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/flash-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/flash-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/flash-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/flash-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/gramophone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/gramophone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/hand-1-finger-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/hand-1-finger-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/hand-2-finger-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/hand-2-finger-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/head-headphone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/head-headphone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/headphone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/headphone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/headset-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/headset-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-ai-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-ai-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-arrow-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-arrow-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-arrow-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-arrow-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/image-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/lightning-fast-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/lightning-fast-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/lightning-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/lightning-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/lightning-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/lightning-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/microphone-stand-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/microphone-stand-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/movie-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/movie-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/music-note-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/music-note-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/music-note-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/music-note-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/photo-filter-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/photo-filter-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/playlist-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/playlist-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/playlist-music-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/playlist-music-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/podcast-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/podcast-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/radio-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/radio-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/sliders-square-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/sliders-square-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/sliders-square-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/sliders-square-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-3d-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-3d-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-4k-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-4k-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-ad-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-ad-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-ar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-ar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-cc-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-cc-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-hd-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-hd-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-sd-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-sd-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/standard-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/video-recorder-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/video-recorder-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/video-recorder-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/video-recorder-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/video-recorder-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/video-recorder-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/video-recorder-play-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/video-recorder-play-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/audio-and-visual/volume-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-ae-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-ae-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-ai-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-ai-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-id-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-id-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-pdf-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-pdf-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-pr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-pr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-ps-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-ps-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-xd-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/adobe-xd-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/android-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/android-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/anthropic-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/anthropic-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/anthropic-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/anthropic-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/app-store-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/app-store-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/apple-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/apple-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/apple-inc-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/apple-inc-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/apple-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/apple-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/authentik-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/authentik-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/authentik-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/authentik-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/azure-ad-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/azure-ad-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/azure-ad-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/azure-ad-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/behance-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/behance-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/behance-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/behance-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/chrome-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/chrome-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/clickup-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/clickup-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/clickup-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/clickup-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/discord-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/discord-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/djinni-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/djinni-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/dribbble-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/dribbble-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/facebook-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/facebook-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/facebook-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/facebook-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/figma-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/figma-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/fleet-mdm-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/fleet-mdm-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/fleet-mdm-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/fleet-mdm-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/framer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/framer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/gemini-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/gemini-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/gemini-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/gemini-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/github-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/github-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/github-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/github-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/github-logo-1-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/github-logo-1-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/github-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/github-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-drive-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-drive-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-gemini-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-gemini-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-logo-1-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-logo-1-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-play-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-play-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-sheets-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-sheets-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/hubspot-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/hubspot-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/hubspot-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/hubspot-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/instagram-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/instagram-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linkedin-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linkedin-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linkedin-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linkedin-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linkedin-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linkedin-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linkedin-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linkedin-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linux-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/linux-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/messenger-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/messenger-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/microsoft-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/microsoft-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/microsoft-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/microsoft-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/office-365-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/office-365-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/office-365-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/office-365-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/openai-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/openai-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/openai-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/openai-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/osquery-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/osquery-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/osquery-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/osquery-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/paypal-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/paypal-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/pinterest-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/pinterest-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/powershell-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/powershell-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/powershell-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/powershell-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/python-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/python-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/pyton-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/pyton-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/pyton-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/pyton-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/reddit-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/reddit-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/reddit-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/reddit-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/slack-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/slack-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/slack-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/slack-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/soundcloud-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/soundcloud-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/spotify-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/spotify-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/tactical-rmm-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/tactical-rmm-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/tiktok-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/tiktok-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/tiktok-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/tiktok-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/trello-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/trello-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/twitter-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/twitter-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/twitter-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/twitter-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/twitter-x-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/twitter-x-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/twitter-x-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/twitter-x-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/windows-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/windows-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/windows-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/windows-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/windows-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/windows-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/youtube-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/youtube-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/archway-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/archway-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/bridge-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/bridge-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/bridge-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/bridge-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/building-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/building-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/building-tree-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/building-tree-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/buildings-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/buildings-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/campground-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/campground-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/castle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/castle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/church-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/church-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/fence-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/fence-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/fort-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/fort-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/garage-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/garage-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/hospital-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/hospital-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/hotel-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/hotel-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/hotel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/hotel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/lighthouse-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/lighthouse-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/park-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/park-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/school-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/school-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/terrace-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/terrace-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/buildings/warehouse-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/buildings/warehouse-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/activity-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/activity-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/activity-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/activity-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/activity-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/activity-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/analysis-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/analysis-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-01-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-01-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-01-ver-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-01-ver-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-02-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-02-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-02-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-02-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-03-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-03-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-03-ver-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-03-ver-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-square-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-square-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-square-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-bar-square-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-donut-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-donut-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-line-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-line-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-line-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-line-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-line-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-line-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-line-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-line-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-pie-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-pie-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-pyramid-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-pyramid-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-radar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-radar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/chart-scatter-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/chart-scatter-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/graph-bar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/graph-bar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/graph-curve-arrow-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/graph-curve-arrow-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/graph-line-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/graph-line-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/graph-line-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/graph-line-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/graph-mix-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/graph-mix-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/graph-mixed-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/graph-mixed-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/hierarchy-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/hierarchy-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/hierarchy-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/hierarchy-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/network-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/network-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/presentation-bar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/presentation-bar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/presentation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/presentation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/presentation-line-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/presentation-line-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/progress-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/progress-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/trend-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/trend-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/trend-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/trend-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/charts/venn-diagram-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/charts/venn-diagram-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/apron-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/apron-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/bow-tie-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/bow-tie-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/chef-hat-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/chef-hat-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/footprints-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/footprints-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/glasses-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/glasses-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/glasses-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/glasses-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/glove-smitten-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/glove-smitten-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/hanger-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/hanger-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/hat-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/hat-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/heels-chunky-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/heels-chunky-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/heels-high-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/heels-high-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/life-vest-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/life-vest-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/mustache-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/mustache-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/pants-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/pants-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/shoes-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/shoes-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/shoes-run-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/shoes-run-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/skate-boots-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/skate-boots-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/socks-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/socks-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/stockings-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/stockings-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/t-shirt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/t-shirt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/tank-top-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/tank-top-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/tank-top-number-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/tank-top-number-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/tie-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/tie-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/clothes/underpants-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/clothes/underpants-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/anonymous-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/anonymous-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/binary-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/binary-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/blockchain-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/blockchain-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-ellipsis-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-ellipsis-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-ellipsis-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-ellipsis-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-curly-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-ellipsis-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-ellipsis-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-ellipsis-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-ellipsis-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-round-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-ellipsis-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-ellipsis-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-ellipsis-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-ellipsis-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bracket-square-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/browser-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/browser-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/browser-window-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/browser-window-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bug-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bug-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/bug-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/bug-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/code-ai-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/code-ai-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/code-browser-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/code-browser-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/code-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/code-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/code-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/code-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/code-laptop-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/code-laptop-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/code-monitor-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/code-monitor-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/code-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/code-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/coding-branch-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/coding-branch-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/coding-commit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/coding-commit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/coding-fork-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/coding-fork-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/coding-merge-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/coding-merge-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/coding-pull-request-closed-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/coding-pull-request-closed-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/coding-pull-request-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/coding-pull-request-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/database-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/database-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/database-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/database-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/package-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/package-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/package-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/package-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/package-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/package-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/package-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/package-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/package-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/package-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/package-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/package-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/package-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/package-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/package-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/package-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/puzzle-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/puzzle-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/puzzle-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/puzzle-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/sidebar-flip-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/sidebar-flip-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/sidebar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/sidebar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-browser-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-browser-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-laptop-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-laptop-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-monitor-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-monitor-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/terminal-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/coding/web-design-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/coding/web-design-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/at-sign-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/at-sign-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-hangup-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-hangup-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-inbound-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-inbound-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-missed-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-missed-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-missed-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-missed-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-outbound-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-outbound-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-pause-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-pause-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-ringing-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-ringing-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-signal-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-signal-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-unlock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-unlock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/call-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/call-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-blank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-blank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-ellipsis-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-ellipsis-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-face-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-face-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-indicator-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-indicator-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-language-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-language-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-question-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-question-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-quote-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-quote-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-text-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-text-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-voicemail-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-voicemail-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chat-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chat-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/chats-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/chats-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/delete-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/delete-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/dialpad-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/dialpad-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-arrow-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-arrow-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-arrow-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-arrow-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-banned-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-banned-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-open-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-open-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-reading-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-reading-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-reading-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-reading-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/email-shield-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/email-shield-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/emails-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/emails-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/inbox-arrow-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/inbox-arrow-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/inbox-arrow-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/inbox-arrow-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/inbox-content-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/inbox-content-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/inbox-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/inbox-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/mailbox-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/mailbox-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-blank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-blank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-ellipsis-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-ellipsis-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-face-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-face-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-indicator-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-indicator-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-language-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-language-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-question-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-question-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-quote-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-quote-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-robot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-robot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-text-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-text-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-voicemail-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-voicemail-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/message-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/message-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/messages-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/messages-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/send-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/send-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/send-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/send-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/send-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/send-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/story-add-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/story-add-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/telephone-retro-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/telephone-retro-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/communication/voicemail-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/communication/voicemail-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-blank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-blank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-snooze-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-snooze-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/alarm-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-arrow-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-arrow-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-arrow-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-arrow-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-bookmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-bookmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-day-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-day-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-days-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-days-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/calendar-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/clock-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/clock-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/clock-history-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/clock-history-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/clock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/clock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/clock-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/clock-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/hourglass-clock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/hourglass-clock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/hourglass-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/hourglass-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/stopwatch-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/stopwatch-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/timer-10s-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/timer-10s-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/date-and-time/timer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/date-and-time/timer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/align-bottom-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/align-bottom-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/align-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/align-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/align-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/align-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/align-top-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/align-top-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/angle-90-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/angle-90-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/angle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/angle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/arrange-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/arrange-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/book-font-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/book-font-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/brush-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/brush-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/crop-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/crop-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/distribute-horizontal-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/distribute-horizontal-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/distribute-vertical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/distribute-vertical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/divider-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/divider-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/dots-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/dots-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/dropper-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/dropper-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/eraser-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/eraser-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/fill-pour-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/fill-pour-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/grid-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/grid-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/grid-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/grid-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/grid-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/grid-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/grid-layout-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/grid-layout-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/grid-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/grid-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/grid-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/grid-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/grip-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/grip-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/grip-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/grip-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/layers-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/layers-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/layers-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/layers-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/layers-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/layers-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/layers-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/layers-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/layout-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/layout-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/magic-wand-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/magic-wand-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/marker-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/marker-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/move-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/move-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/paint-roller-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/paint-roller-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-brush-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-brush-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-edit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-edit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-line-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-line-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-nib-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pen-point-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pen-point-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/pencil-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/pencil-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/reflect-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/reflect-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/reflect-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/reflect-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/scaling-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/scaling-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/scissors-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/scissors-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/scribble-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/scribble-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/shape-circle-dash-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/shape-circle-dash-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/shape-square-dash-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/shape-square-dash-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/stamp-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/stamp-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/table-cell-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/table-cell-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/table-col-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/table-col-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/table-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/table-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/table-row-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/table-row-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/text-tool-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/text-tool-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/vector-bezier-curve-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/vector-bezier-curve-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/vector-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/vector-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/vector-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/vector-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/design/vector-triangle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/design/vector-triangle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/airdrop-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/airdrop-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/airplay-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/airplay-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/battery-charging-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/battery-charging-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/battery-empty-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/battery-empty-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/battery-full-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/battery-full-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/battery-low-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/battery-low-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/battery-medium-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/battery-medium-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/battery-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/battery-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-banned-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-banned-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-connecting-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-connecting-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/bluetooth-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/brightness-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/brightness-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/brightness-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/brightness-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cctv-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cctv-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cctv-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cctv-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/chromecast-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/chromecast-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-arrow-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-arrow-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-arrow-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-arrow-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-music-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-music-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/cloud-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/computer-mouse-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/computer-mouse-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/connection-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/connection-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/earphone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/earphone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/eject-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/eject-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/floppy-disc-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/floppy-disc-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/game-controller-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/game-controller-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/game-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/game-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/hard-drive-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/hard-drive-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/hard-drives-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/hard-drives-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/keyboard-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/keyboard-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/keyboard-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/keyboard-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/keyboard-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/keyboard-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/laptop-file-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/laptop-file-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/laptop-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/laptop-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/laptop-mobile-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/laptop-mobile-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/memory-card-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/memory-card-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/microchip-ai-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/microchip-ai-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/microchip-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/microchip-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-banned-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-banned-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-shield-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-shield-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-signal-in-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-signal-in-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-signal-out-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-signal-out-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-vibration-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/mobile-phone-vibration-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/modem-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/modem-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/monitor-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/monitor-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/monitor-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/monitor-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/monitor-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/monitor-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/office-phone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/office-phone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/pc-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/pc-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/power-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/power-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/power-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/power-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/printer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/printer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/printer-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/printer-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/projector-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/projector-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/rss-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/rss-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/scanner-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/scanner-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/signal-broadcast-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/signal-broadcast-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/signal-broadcast-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/signal-broadcast-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/signal-broadcast-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/signal-broadcast-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/signal-level-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/signal-level-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/sim-card-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/sim-card-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/speaker-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/speaker-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/tablet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/tablet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/tv-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/tv-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/tv-music-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/tv-music-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/usb-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/usb-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/vr-glasses-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/vr-glasses-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/watch-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/watch-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/watch-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/watch-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/watch-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/watch-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/webcam-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/webcam-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/webcam-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/webcam-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-shield-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-shield-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/devices/wifi-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/box-archive-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/box-archive-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-info-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-info-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-list-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-list-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-question-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-question-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/clipboard-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/copy-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/copy-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/copy-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/copy-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/copy-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/copy-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-activity-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-activity-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-attachment-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-attachment-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-audio-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-audio-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-banned-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-banned-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-bookmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-bookmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-chart-bar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-chart-bar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-chart-line-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-chart-line-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-code-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-code-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-content-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-content-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-edit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-edit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-image-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-image-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-info-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-info-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-music-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-music-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-play-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-play-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-question-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-question-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-shield-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-shield-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-user-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-user-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/file-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/file-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/files-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/files-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-banned-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-banned-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-bookmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-bookmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-edit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-edit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-image-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-image-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-info-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-info-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-open-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-open-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-shield-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-shield-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-user-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-user-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folder-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folder-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/folders-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/folders-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/memo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/memo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/newspaper-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/newspaper-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/page-blank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/page-blank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/paperclip-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/paperclip-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/paperclip-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/paperclip-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/paste-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/paste-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/paste-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/paste-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/paste-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/paste-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/pin-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/pin-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/pin-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/pin-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/sticker-dots-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/sticker-dots-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/sticker-emoji-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/sticker-emoji-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/sticker-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/sticker-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/documents/stickers-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/documents/stickers-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/atm-card-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/atm-card-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/atm-money-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/atm-money-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/bank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/bank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/bank-interest-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/bank-interest-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/coin-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/coin-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/coin-insert-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/coin-insert-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/coins-exchange-currency-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/coins-exchange-currency-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/coins-exchange-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/coins-exchange-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/coins-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/coins-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-arrow-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-arrow-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-arrow-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-arrow-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-edit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-edit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-shield-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-shield-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-card-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/credit-cards-exchange-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/credit-cards-exchange-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/hand-coin-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/hand-coin-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/hand-dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/hand-dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/money-bill-dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/money-bill-dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/money-bill-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/money-bill-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/money-bill-wavy-dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/money-bill-wavy-dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/money-bill-wavy-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/money-bill-wavy-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/money-cheque-dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/money-cheque-dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/money-cheque-edit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/money-cheque-edit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/piggy-bank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/piggy-bank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/pos-machine-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/pos-machine-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/sack-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/sack-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/wallet-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/wallet-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/finance/wallet-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/finance/wallet-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/acorn-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/acorn-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/apple-food-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/apple-food-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/avocado-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/avocado-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bagel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bagel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/banana-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/banana-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/beer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/beer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bowl-hot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bowl-hot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bowl-noodle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bowl-noodle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bread-long-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bread-long-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bread-short-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bread-short-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bread-slice-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/bread-slice-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cake-birthday-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cake-birthday-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cake-slice-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cake-slice-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/candy-cane-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/candy-cane-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/candy-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/candy-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/carrot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/carrot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cater-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cater-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cheese-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cheese-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cherries-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cherries-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/coffee-bean-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/coffee-bean-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/coffee-beans-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/coffee-beans-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cookie-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cookie-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cup-bubble-tea-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cup-bubble-tea-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cup-to-go-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cup-to-go-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cup-water-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cup-water-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cupcake-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/cupcake-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/egg-fried-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/egg-fried-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/egg-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/egg-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/eggplant-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/eggplant-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/fish-bone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/fish-bone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/fish-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/fish-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/garlic-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/garlic-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/glass-cocktail-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/glass-cocktail-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/glass-cocktail-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/glass-cocktail-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/glass-wine-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/glass-wine-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/glasses-wine-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/glasses-wine-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/grapes-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/grapes-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/hamburger-cheese-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/hamburger-cheese-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/hamburger-veggie-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/hamburger-veggie-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/honey-pot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/honey-pot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/hotdog-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/hotdog-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/ice-cream-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/ice-cream-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/jar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/jar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/kiwi-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/kiwi-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/leafy-green-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/leafy-green-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/lemon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/lemon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/lemon-slice-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/lemon-slice-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/meat-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/meat-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/milk-bottle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/milk-bottle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/milk-carton-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/milk-carton-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/mug-hot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/mug-hot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/mug-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/mug-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/mug-tea-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/mug-tea-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/mushroom-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/mushroom-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/peach-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/peach-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/pear-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/pear-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/pie-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/pie-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/pizza-slice-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/pizza-slice-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/sandwich-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/sandwich-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/sausage-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/sausage-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/shrimp-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/shrimp-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/soda-can-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/soda-can-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/steak-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/steak-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/strawberry-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/strawberry-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/water-bottle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/water-bottle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/watermelon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/food-and-drinks/watermelon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/bandage-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/bandage-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/bandages-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/bandages-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/blood-pressure-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/blood-pressure-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/bone-broken-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/bone-broken-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/bone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/bone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/book-medical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/book-medical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/brain-ai-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/brain-ai-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/brain-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/brain-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/briefcase-medical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/briefcase-medical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/capsule-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/capsule-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/capsule-tablet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/capsule-tablet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/clipboard-medical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/clipboard-medical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/dispenser-medical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/dispenser-medical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/dna-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/dna-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/ear-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/ear-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/face-mask-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/face-mask-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/hand-droplet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/hand-droplet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/hand-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/hand-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/hand-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/hand-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/hands-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/hands-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/hands-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/hands-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/head-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/head-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/head-medical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/head-medical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/heart-broken-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/heart-broken-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/heart-pulse-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/heart-pulse-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/medical-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/medical-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/medical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/medical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/medical-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/medical-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/mouth-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/mouth-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/nose-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/nose-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/pulse-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/pulse-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/pulse-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/pulse-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/skull-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/skull-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/stethoscope-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/stethoscope-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/stomach-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/stomach-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/syringe-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/syringe-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/thermometer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/thermometer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/tooth-broken-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/tooth-broken-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/tooth-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/tooth-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/tooth-shield-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/tooth-shield-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/virus-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/virus-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/virus-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/virus-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/watch-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/watch-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/watch-pulse-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/watch-pulse-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/health/wheelchair-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/health/wheelchair-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/air-conditioner-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/air-conditioner-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/axe-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/axe-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/baby-milk-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/baby-milk-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/bath-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/bath-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/bbq-grill-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/bbq-grill-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/bed-bunk-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/bed-bunk-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/bed-front-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/bed-front-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/bed-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/bed-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/bed-person-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/bed-person-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/blender-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/blender-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/chair-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/chair-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/chair-swivel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/chair-swivel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/cleaver-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/cleaver-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/couch-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/couch-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/curtain-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/curtain-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/dispenser-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/dispenser-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/dispenser-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/dispenser-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/door-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/door-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/door-open-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/door-open-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/dryer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/dryer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/electrical-plug-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/electrical-plug-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/fan-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/fan-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/fire-extinguisher-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/fire-extinguisher-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/flashlight-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/flashlight-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/fork-knife-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/fork-knife-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/fork-plate-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/fork-plate-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/fork-spoon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/fork-spoon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/hairdryer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/hairdryer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/hammer-auction-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/hammer-auction-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/hammer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/hammer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/hot-water-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/hot-water-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/house-door-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/house-door-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/house-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/house-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/house-medical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/house-medical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/house-window-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/house-window-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/kettle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/kettle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/lamp-desk-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/lamp-desk-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/lamp-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/lamp-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/lightbulb-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/lightbulb-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/lightbulb-on-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/lightbulb-on-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/lipstick-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/lipstick-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/magnet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/magnet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/microphone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/microphone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/microwave-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/microwave-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/mirror-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/mirror-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/mixer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/mixer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/oven-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/oven-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/pan-hot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/pan-hot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/pot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/pot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/refrigerator-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/refrigerator-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/scale-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/scale-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/scale-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/scale-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/shovel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/shovel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/siren-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/siren-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/siren-on-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/siren-on-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/socket-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/socket-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/solar-panel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/solar-panel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/spatula-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/spatula-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/stairs-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/stairs-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/storage-cabin-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/storage-cabin-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/storage-clothing-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/storage-clothing-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/toothbrush-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/toothbrush-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/tube-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/tube-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/tv-retro-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/tv-retro-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/umbrella-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/umbrella-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/vacuum-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/vacuum-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/washer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/washer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/window-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/window-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/wrench-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/wrench-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/household/wrench-screwdiver-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/household/wrench-screwdiver-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/alert-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/alert-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/alert-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/alert-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/alert-diamond-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/alert-diamond-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/alert-hexagon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/alert-hexagon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/alert-octagon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/alert-octagon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/alert-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/alert-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/alert-triangle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/alert-triangle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/alien-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/alien-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-indicator-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-indicator-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-ringing-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-ringing-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-ringing-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-ringing-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-ringing-snooze-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-ringing-snooze-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-snooze-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-snooze-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/bell-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/bell-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/dot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/dot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/download-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/download-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/download-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/download-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/dragger-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/dragger-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-01-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-01-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-01-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-01-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-01-stroke-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-01-stroke-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-02-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-02-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-02-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-02-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-02-stroke-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/ellipsis-02-stroke-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/external-link-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/external-link-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/eye-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/eye-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/eye-alt-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/eye-alt-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/eye-close-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/eye-close-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/eye-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/eye-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/eye-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/eye-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/home-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/home-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/home-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/home-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/home-door-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/home-door-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/home-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/home-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/home-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/home-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/home-line-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/home-line-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/home-smile-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/home-smile-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/home-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/home-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/life-buoy-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/life-buoy-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/link-01-break-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/link-01-break-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/link-01-horizontal-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/link-01-horizontal-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/link-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/link-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/link-02-horizontal-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/link-02-horizontal-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/link-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/link-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/loading-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/loading-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/loading-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/loading-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/loading-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/loading-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/login-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/login-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/login-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/login-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/logout-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/logout-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/logout-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/logout-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/menu-01-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/menu-01-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/menu-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/menu-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/menu-01-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/menu-01-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/menu-02-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/menu-02-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/menu-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/menu-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/menu-02-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/menu-02-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/party-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/party-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/plus-multiple-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/plus-multiple-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/radio-waves-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/radio-waves-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/retweet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/retweet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/robot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/robot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/search-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/search-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/settings-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/settings-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/settings-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/settings-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/settings-02-line-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/settings-02-line-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/share-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/share-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/share-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/share-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/translate-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/translate-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/translate-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/translate-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/trash-blank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/trash-blank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/trash-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/trash-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/trash-clock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/trash-clock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/trash-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/trash-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/trash-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/trash-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/trash-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/trash-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/upload-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/upload-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/upload-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/upload-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/zoom-in-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/zoom-in-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/zoom-out-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/zoom-out-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/loaders/dots-loader-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/loaders/dots-loader-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/arrow-location-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/arrow-location-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/arrow-location-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/arrow-location-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/arrow-location-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/arrow-location-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/beach-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/beach-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/briefcase-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/briefcase-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/briefcase-work-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/briefcase-work-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/compass-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/compass-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/crosshair-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/crosshair-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/crosshair-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/crosshair-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/crosshair-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/crosshair-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/flag-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/flag-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/flag-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/flag-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/flag-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/flag-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/helicopter-symbol-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/helicopter-symbol-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/island-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/island-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/location-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/map-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/map-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/map-location-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/map-location-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/map-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/map-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/map-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/map-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/passport-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/passport-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/pin-location-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/pin-location-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/pin-location-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/pin-location-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/plane-arrival-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/plane-arrival-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/plane-departure-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/plane-departure-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/pool-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/pool-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/post-sign-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/post-sign-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/post-signs-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/post-signs-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/radar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/radar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/route-arrow-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/route-arrow-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/route-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/route-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/route-location-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/route-location-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/route-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/route-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/spa-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/spa-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/street-view-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/street-view-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/suitcase-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/suitcase-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/ticket-airline-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/ticket-airline-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/trolley-case-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/map-and-travel/trolley-case-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/backward-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/backward-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-04-dots-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-04-dots-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-04-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/collapse-04-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-04-dots-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-04-dots-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-04-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-04-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/expand-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/fast-backward-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/fast-backward-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/fast-forward-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/fast-forward-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/flip-01-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/flip-01-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/flip-01-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/flip-01-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/flip-02-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/flip-02-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/flip-02-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/flip-02-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/forward-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/forward-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/mic-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/mic-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/mic-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/mic-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/mic-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/mic-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/next-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/next-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/pause-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/pause-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/pause-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/pause-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/play-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/play-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/play-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/play-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/previous-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/previous-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/recording-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/recording-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/recording-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/recording-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-01-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-01-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-01-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-01-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-02-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-02-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-02-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-02-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-02-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/refresh-02-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/repeat-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/repeat-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/repeat-one-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/repeat-one-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/rotate-360-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/rotate-360-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/shuffle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/shuffle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/stop-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/stop-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/stop-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/stop-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/subtitle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/subtitle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/media-playback/waveform-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/media-playback/waveform-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-0-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-0-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-10-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-10-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-12-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-12-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-13-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-13-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-16-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-16-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-17-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-17-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-18-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-18-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-21-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-21-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-3-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-3-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-6-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/age-limit-6-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/dice-1-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/dice-1-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/dice-2-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/dice-2-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/dice-3-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/dice-3-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/dice-4-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/dice-4-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/dice-5-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/dice-5-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/dice-6-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/dice-6-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-0-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-0-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-1-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-1-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-2-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-2-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-3-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-3-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-4-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-4-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-5-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-5-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-6-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-6-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-7-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-7-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-8-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-8-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/number-9-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/number-9-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-0-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-0-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-0-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-0-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-1-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-1-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-1-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-1-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-2-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-2-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-2-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-2-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-3-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-3-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-3-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-3-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-4-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-4-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-4-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-4-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-5-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-5-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-5-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-5-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-6-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-6-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-6-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-6-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-7-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-7-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-7-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-7-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-8-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-8-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-8-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-8-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-9-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-9-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/number/numer-9-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/number/numer-9-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/atom-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/atom-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/backpack-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/backpack-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/book-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/book-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/book-bookmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/book-bookmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/book-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/book-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/book-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/book-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/book-open-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/book-open-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/book-text-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/book-text-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/bookmark-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/bookmarks-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/bookmarks-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/books-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/books-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/calculator-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/calculator-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/calculator-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/calculator-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/drawing-compass-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/drawing-compass-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/flask-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/flask-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/flask-vial-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/flask-vial-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/globe-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/globe-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/globe-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/globe-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/globe-stand-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/globe-stand-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/graduation-cap-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/graduation-cap-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/honor-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/honor-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/honor-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/honor-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/microscope-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/microscope-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/notebook-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/notebook-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/notebook-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/notebook-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/piano-key-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/piano-key-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/planet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/planet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/point-100-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/point-100-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/quote-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/quote-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/quote-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/quote-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/quote-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/quote-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/ruler-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/ruler-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/ruler-triangle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/ruler-triangle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/shape-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/shape-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/shape-diamond-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/shape-diamond-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/shape-hexagon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/shape-hexagon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/shape-octagon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/shape-octagon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/shape-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/shape-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/shape-triangle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/shape-triangle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/shapes-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/shapes-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/stationery-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/stationery-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/telescope-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/telescope-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/school/vial-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/school/vial-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/audit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/audit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/banned-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/banned-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/fingerprint-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/fingerprint-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/key-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/key-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/key-skeleton-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/key-skeleton-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/keyhole-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/keyhole-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/keyhole-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/keyhole-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-keyhole-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-keyhole-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-keyhole-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-keyhole-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-open-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-open-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-open-keyhole-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-open-keyhole-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/lock-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/lock-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/passcode-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/passcode-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/scan-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/scan-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-keyhole-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-keyhole-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-lightning-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-lightning-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-user-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-user-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-wifi-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-wifi-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/shield-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/shield-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/signature-document-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/signature-document-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/signature-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/signature-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/unlock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/unlock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/security/unlock-keyhole-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/security/unlock-keyhole-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/badge-dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/badge-dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/badge-percent-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/badge-percent-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-arrow-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-arrow-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-arrow-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-arrow-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/bag-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-arrow-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-arrow-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-arrow-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-arrow-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-blank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-blank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/basket-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-arrow-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-arrow-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-arrow-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-arrow-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/cart-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/certified-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/certified-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/certified-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/certified-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/code-bar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/code-bar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/code-bar-scan-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/code-bar-scan-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/code-qr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/code-qr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/code-qr-scan-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/code-qr-scan-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/code-scan-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/code-scan-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/crown-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/crown-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/diamond-gem-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/diamond-gem-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/feedback-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/feedback-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/gift-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/gift-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/giftcard-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/giftcard-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/megaphone-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/megaphone-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/megaphone-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/megaphone-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/monitor-chart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/monitor-chart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/receipt-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/receipt-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/receipt-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/receipt-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/scale-balanced-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/scale-balanced-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/scale-unbalanced-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/scale-unbalanced-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/shop-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/shop-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/shop-location-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/shop-location-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/tag-dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/tag-dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/tag-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/tag-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/tag-percent-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/tag-percent-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/tags-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/tags-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/thumbs-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/thumbs-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/thumbs-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/thumbs-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/ticket-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/ticket-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/voucher-dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/voucher-dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/shopping/voucher-percent-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/shopping/voucher-percent-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/asterisk-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/asterisk-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/bitcoin-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/bitcoin-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/bitcoin-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/bitcoin-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-fill-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-fill-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/check-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/checkbox-checkmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/checkbox-checkmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/checks-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/checks-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/degree-celsius-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/degree-celsius-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/degree-fahrenheit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/degree-fahrenheit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/dollar-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/dollar-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/dollar-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/dollar-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/euro-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/euro-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/euro-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/euro-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/exclamation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/exclamation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/gender-female-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/gender-female-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/gender-male-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/gender-male-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/hash-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/hash-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/info-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/info-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/info-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/info-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/key-command-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/key-command-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/key-option-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/key-option-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/minus-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/minus-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/minus-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/minus-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/minus-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/minus-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/percent-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/percent-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/percent-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/percent-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/percent-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/percent-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/percent-stroke-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/percent-stroke-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/plus-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/plus-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/plus-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/plus-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/plus-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/plus-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/pound-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/pound-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/pound-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/pound-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/question-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/question-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/question-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/question-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/question-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/question-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/question-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/question-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/recycle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/recycle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/sign-female-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/sign-female-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/sign-male-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/sign-male-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/smoking-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/smoking-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/smoking-off-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/smoking-off-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/smoking-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/smoking-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/turn-left-sign-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/turn-left-sign-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/turn-right-sign-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/turn-right-sign-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/xmark-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/xmark-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/xmark-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/xmark-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/xmark-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/xmark-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/yin-yang-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/signs-and-symbols/yin-yang-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-01-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-01-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-01-clock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-01-clock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-01-list-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-01-list-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-03-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-03-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-03-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-03-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-04-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-04-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-04-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/filter-04-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/slider-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/slider-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sliders-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sliders-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-19-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-19-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-19-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-19-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-91-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-91-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-91-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-91-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-az-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-az-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-az-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-az-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-item-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-item-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-item-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-item-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-za-down-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-za-down-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-za-up-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/sort-za-up-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/toggle-alt-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/toggle-alt-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/toggle-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/toggle-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/toggles-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sort-and-filter/toggles-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/american-football-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/american-football-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/archery-arrow-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/archery-arrow-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/archery-bow-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/archery-bow-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/archery-target-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/archery-target-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/baseball-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/baseball-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/basketball-basket-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/basketball-basket-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/basketball-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/basketball-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/biking-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/biking-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/bowling-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/bowling-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/boxing-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/boxing-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/chess-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/chess-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/court-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/court-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/dumbell-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/dumbell-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/football-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/football-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/medal-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/medal-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/medal-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/medal-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/pingpong-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/pingpong-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/ranking-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/ranking-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/reward-badge-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/reward-badge-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/reward-badge-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/reward-badge-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/reward-badge-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/reward-badge-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/running-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/running-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/skipping-rope-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/skipping-rope-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/snorkel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/snorkel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/swimming-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/swimming-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/trophy-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/trophy-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/volleyball-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/volleyball-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/sport/whistle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/sport/whistle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/block-quote-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/block-quote-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/bold-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/bold-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/bold-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/bold-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/font-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/font-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/font-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/font-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-blank-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-blank-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-bottom-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-bottom-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-center-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-center-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-center-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-center-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-center-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-center-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-outer-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-outer-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-top-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/grid-dots-top-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h1-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h1-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h2-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h2-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h3-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h3-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h4-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h4-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h5-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h5-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h6-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-h6-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/heading-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/i-cursor-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/i-cursor-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/indent-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/indent-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/italic-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/italic-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/line-height-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/line-height-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/list-bullet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/list-bullet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/list-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/list-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/list-number-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/list-number-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/list-tree-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/list-tree-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/paragraph-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/paragraph-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/spacing-hr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/spacing-hr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/spacing-vr-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/spacing-vr-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/strike-through-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/strike-through-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-align-center-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-align-center-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-align-justify-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-align-justify-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-align-left-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-align-left-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-align-right-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-align-right-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-area-dragger-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/text-area-dragger-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/text-editor/underline-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/text-editor/underline-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/address-book-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/address-book-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/avatar-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/avatar-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/avatar-square-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/avatar-square-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/book-user-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/book-user-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-angry-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-angry-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-baby-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-baby-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-laugh-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-laugh-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-meh-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-meh-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-meh-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-meh-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-sad-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-sad-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-sad-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-sad-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-sleeping-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-sleeping-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-smile-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-smile-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-smile-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-smile-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-surprise-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-surprise-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-wink-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-wink-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/face-worry-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/face-worry-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/head-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/head-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/head-settings-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/head-settings-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/house-user-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/house-user-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/id-card-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/id-card-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-banned-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-banned-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-edit-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-edit-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-minus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-minus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-settings-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-settings-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/user-xmark-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/user-xmark-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/users-group-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/users-group-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/users-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/users-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/users/users-plus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/users/users-plus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/anchor-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/anchor-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/baby-carriage-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/baby-carriage-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/bike-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/bike-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/bus-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/bus-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/cable-car-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/cable-car-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-battery-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-battery-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-battery-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-battery-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-side-electric-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-side-electric-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-side-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-side-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-taxi-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/car-taxi-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/ferry-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/ferry-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/gauge-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/gauge-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/gauge-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/gauge-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/hand-parcel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/hand-parcel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/helicopter-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/helicopter-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/helmet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/helmet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/motorbike-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/motorbike-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-delay-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-delay-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-fast-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-fast-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-heart-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-heart-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-label-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-label-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-01-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-check-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-check-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-fast-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-fast-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-lock-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-lock-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-search-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-02-search-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-03-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcel-03-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcels-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/parcels-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-alt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-alt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-vertical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-vertical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-vertical-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/plane-vertical-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/pump-electric-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/pump-electric-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/pump-gas-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/pump-gas-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/road-barrier-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/road-barrier-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/road-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/road-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/rocket-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/rocket-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/rocket-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/rocket-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/rv-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/rv-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/sailboat-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/sailboat-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/speed-train-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/speed-train-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/steering-wheel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/steering-wheel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/traffic-cone-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/traffic-cone-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/traffic-signal-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/traffic-signal-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/train-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/train-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/train-tunnel-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/train-tunnel-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/tram-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/tram-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/trolley-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/trolley-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/truck-delay-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/truck-delay-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/truck-fast-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/truck-fast-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/truck-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/truck-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/truck-medical-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/vehicles-and-delivery/truck-medical-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/aquarium-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/aquarium-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-bolt-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-bolt-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-drizzle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-drizzle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-fog-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-fog-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-moon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-moon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-rain-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-rain-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-rain-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-rain-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-snow-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-snow-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-snow-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-snow-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-sun-bright-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-sun-bright-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-sun-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/cloud-weather-sun-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/dog-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/dog-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/dog-leash-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/dog-leash-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/drowning-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/drowning-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/explosion-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/explosion-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/fire-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/fire-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flood-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flood-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-plant-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-plant-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-sakura-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-sakura-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-tulip-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/flower-tulip-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/hand-seedling-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/hand-seedling-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/heat-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/heat-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/hill-avalanche-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/hill-avalanche-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/hill-rockslide-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/hill-rockslide-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/hurricane-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/hurricane-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/leaf-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/leaf-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/leaves-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/leaves-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/moon-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/moon-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/moon-star-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/moon-star-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/paw-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/paw-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/radiation-circle-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/radiation-circle-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/radiation-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/radiation-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/seedling-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/seedling-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/seedling-pot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/seedling-pot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/snowflake-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/snowflake-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sparkle-01-blink-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sparkle-01-blink-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sparkle-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sparkle-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sparkle-02-blink-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sparkle-02-blink-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sparkle-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sparkle-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/stars-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/stars-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sun-01-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sun-01-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sun-02-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sun-02-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sunrise-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sunrise-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sunrise-sea-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sunrise-sea-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sunset-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/sunset-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/temperature-cold-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/temperature-cold-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/temperature-hot-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/temperature-hot-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/temperature-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/temperature-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/tornado-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/tornado-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/tree-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/tree-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/trees-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/trees-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/ufo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/ufo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/water-droplet-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/water-droplet-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/water-droplet-off-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/water-droplet-off-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/water-wave-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/water-wave-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/wind-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/weather-and-nature/wind-icon.d.ts.map +1 -1
- package/dist/components/index.cjs +638 -297
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +491 -150
- package/dist/components/index.js.map +1 -1
- package/dist/components/layout/article-detail-layout.d.ts +2 -2
- package/dist/components/layout/article-detail-layout.d.ts.map +1 -1
- package/dist/components/layout/back-button.d.ts +1 -1
- package/dist/components/layout/back-button.d.ts.map +1 -1
- package/dist/components/layout/list-page-layout.d.ts +1 -1
- package/dist/components/layout/list-page-layout.d.ts.map +1 -1
- package/dist/components/layout/page-container.d.ts +5 -5
- package/dist/components/layout/page-container.d.ts.map +1 -1
- package/dist/components/layout/page-heading.d.ts +34 -0
- package/dist/components/layout/page-heading.d.ts.map +1 -0
- package/dist/components/layout/page-layout.d.ts +1 -1
- package/dist/components/layout/page-layout.d.ts.map +1 -1
- package/dist/components/layout/title-block.d.ts +1 -1
- package/dist/components/layout/title-block.d.ts.map +1 -1
- package/dist/components/loading/card-skeleton.d.ts +3 -2
- package/dist/components/loading/card-skeleton.d.ts.map +1 -1
- package/dist/components/loading/category-card-skeleton.d.ts +2 -1
- package/dist/components/loading/category-card-skeleton.d.ts.map +1 -1
- package/dist/components/loading/category-vendor-selector-skeleton.d.ts +2 -1
- package/dist/components/loading/category-vendor-selector-skeleton.d.ts.map +1 -1
- package/dist/components/loading/content-skeleton.d.ts +11 -10
- package/dist/components/loading/content-skeleton.d.ts.map +1 -1
- package/dist/components/loading/device-card-skeleton.d.ts +3 -2
- package/dist/components/loading/device-card-skeleton.d.ts.map +1 -1
- package/dist/components/loading/margin-report-skeleton.d.ts +1 -1
- package/dist/components/loading/margin-report-skeleton.d.ts.map +1 -1
- package/dist/components/loading/msp-profile-form-skeleton.d.ts +2 -1
- package/dist/components/loading/msp-profile-form-skeleton.d.ts.map +1 -1
- package/dist/components/loading/openmsp-heartbeat.d.ts +2 -1
- package/dist/components/loading/openmsp-heartbeat.d.ts.map +1 -1
- package/dist/components/loading/organization-card-skeleton.d.ts +3 -2
- package/dist/components/loading/organization-card-skeleton.d.ts.map +1 -1
- package/dist/components/loading/organization-icon-skeleton.d.ts +2 -1
- package/dist/components/loading/organization-icon-skeleton.d.ts.map +1 -1
- package/dist/components/loading/page-layout-skeleton.d.ts +14 -14
- package/dist/components/loading/page-layout-skeleton.d.ts.map +1 -1
- package/dist/components/loading/unified-skeleton.d.ts +11 -11
- package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
- package/dist/components/loading/users-grid-skeleton.d.ts +1 -1
- package/dist/components/loading/users-grid-skeleton.d.ts.map +1 -1
- package/dist/components/loading/wizard-layout-skeleton.d.ts +2 -1
- package/dist/components/loading/wizard-layout-skeleton.d.ts.map +1 -1
- package/dist/components/made-with-love.d.ts +2 -1
- package/dist/components/made-with-love.d.ts.map +1 -1
- package/dist/components/menubar.d.ts +2 -2
- package/dist/components/metric-value.d.ts +2 -1
- package/dist/components/metric-value.d.ts.map +1 -1
- package/dist/components/minus-circle-icon.d.ts +1 -1
- package/dist/components/minus-circle-icon.d.ts.map +1 -1
- package/dist/components/ms-icon.d.ts +2 -1
- package/dist/components/ms-icon.d.ts.map +1 -1
- package/dist/components/msp-display.d.ts +2 -1
- package/dist/components/msp-display.d.ts.map +1 -1
- package/dist/components/navigation/app-layout-drawer.d.ts +4 -4
- package/dist/components/navigation/app-layout.d.ts +1 -1
- package/dist/components/navigation/app-layout.d.ts.map +1 -1
- package/dist/components/navigation/client-only-header.d.ts +1 -1
- package/dist/components/navigation/client-only-header.d.ts.map +1 -1
- package/dist/components/navigation/header-button.d.ts +1 -1
- package/dist/components/navigation/header-button.d.ts.map +1 -1
- package/dist/components/navigation/header-global-search.d.ts +2 -1
- package/dist/components/navigation/header-global-search.d.ts.map +1 -1
- package/dist/components/navigation/header-mingo-button.d.ts +1 -1
- package/dist/components/navigation/header-mingo-button.d.ts.map +1 -1
- package/dist/components/navigation/header-organization-filter.d.ts +1 -1
- package/dist/components/navigation/header-organization-filter.d.ts.map +1 -1
- package/dist/components/navigation/header-skeleton.d.ts +1 -1
- package/dist/components/navigation/header-skeleton.d.ts.map +1 -1
- package/dist/components/navigation/header.d.ts +2 -1
- package/dist/components/navigation/header.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +7 -7
- package/dist/components/navigation/index.js +6 -6
- package/dist/components/navigation/mobile-nav-panel.d.ts +2 -1
- package/dist/components/navigation/mobile-nav-panel.d.ts.map +1 -1
- package/dist/components/navigation/navigation-sidebar-header.d.ts +1 -1
- package/dist/components/navigation/navigation-sidebar-header.d.ts.map +1 -1
- package/dist/components/navigation/navigation-sidebar-item.d.ts +1 -1
- package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
- package/dist/components/navigation/navigation-sidebar-toggle.d.ts +1 -1
- package/dist/components/navigation/navigation-sidebar-toggle.d.ts.map +1 -1
- package/dist/components/navigation/navigation-sidebar.d.ts +1 -1
- package/dist/components/navigation/navigation-sidebar.d.ts.map +1 -1
- package/dist/components/navigation/sliding-sidebar.d.ts +2 -1
- package/dist/components/navigation/sliding-sidebar.d.ts.map +1 -1
- package/dist/components/navigation/sticky-section-nav.d.ts +1 -1
- package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
- package/dist/components/onboarding-guides/index.cjs +131 -122
- package/dist/components/onboarding-guides/index.cjs.map +1 -1
- package/dist/components/onboarding-guides/index.js +129 -120
- package/dist/components/onboarding-guides/index.js.map +1 -1
- package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts +23 -32
- package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
- package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts +1 -1
- package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts.map +1 -1
- package/dist/components/onboarding-guides/onboarding-guides-catalog-view.d.ts +33 -31
- package/dist/components/onboarding-guides/onboarding-guides-catalog-view.d.ts.map +1 -1
- package/dist/components/openframe-logo.d.ts +1 -1
- package/dist/components/openframe-logo.d.ts.map +1 -1
- package/dist/components/openmsp-logo.d.ts +1 -1
- package/dist/components/openmsp-logo.d.ts.map +1 -1
- package/dist/components/pagination.d.ts +1 -1
- package/dist/components/pagination.d.ts.map +1 -1
- package/dist/components/persistent-filter-controls.d.ts +4 -4
- package/dist/components/persistent-filter-controls.d.ts.map +1 -1
- package/dist/components/persistent-pagination.d.ts +2 -2
- package/dist/components/persistent-pagination.d.ts.map +1 -1
- package/dist/components/plus-circle-icon.d.ts +1 -1
- package/dist/components/plus-circle-icon.d.ts.map +1 -1
- package/dist/components/pricing-display.d.ts +1 -1
- package/dist/components/pricing-display.d.ts.map +1 -1
- package/dist/components/profile/ProfileLoadingSkeleton.d.ts +2 -1
- package/dist/components/profile/ProfileLoadingSkeleton.d.ts.map +1 -1
- package/dist/components/providers/dynamic-theme-provider.d.ts +1 -1
- package/dist/components/providers/dynamic-theme-provider.d.ts.map +1 -1
- package/dist/components/providers/theme-provider.d.ts +2 -1
- package/dist/components/providers/theme-provider.d.ts.map +1 -1
- package/dist/components/reddit-icon.d.ts +2 -1
- package/dist/components/reddit-icon.d.ts.map +1 -1
- package/dist/components/resizable.d.ts +2 -2
- package/dist/components/resizable.d.ts.map +1 -1
- package/dist/components/results-count.d.ts +1 -1
- package/dist/components/results-count.d.ts.map +1 -1
- package/dist/components/selection-source-badge.d.ts +2 -1
- package/dist/components/selection-source-badge.d.ts.map +1 -1
- package/dist/components/send-icon.d.ts +1 -1
- package/dist/components/send-icon.d.ts.map +1 -1
- package/dist/components/shared/delivery/delivery-lists.d.ts +1 -1
- package/dist/components/shared/delivery/delivery-lists.d.ts.map +1 -1
- package/dist/components/shared/delivery/delivery-row.d.ts +25 -1
- package/dist/components/shared/delivery/delivery-row.d.ts.map +1 -1
- package/dist/components/shared/delivery/delivery-table.d.ts +1 -1
- package/dist/components/shared/delivery/delivery-table.d.ts.map +1 -1
- package/dist/components/shared/detail-page-skeleton.d.ts +1 -1
- package/dist/components/shared/detail-page-skeleton.d.ts.map +1 -1
- package/dist/components/shared/dev-section/dev-card-row.d.ts +3 -3
- package/dist/components/shared/dev-section/dev-card-row.d.ts.map +1 -1
- package/dist/components/shared/dev-section/dev-section-page.d.ts +11 -3
- package/dist/components/shared/dev-section/dev-section-page.d.ts.map +1 -1
- package/dist/components/shared/dev-section/dev-section-view.d.ts +5 -1
- package/dist/components/shared/dev-section/dev-section-view.d.ts.map +1 -1
- package/dist/components/shared/doc-search/doc-search-bar.d.ts +1 -1
- package/dist/components/shared/doc-search/doc-search-bar.d.ts.map +1 -1
- package/dist/components/shared/doc-search/doc-search-result-row.d.ts +1 -1
- package/dist/components/shared/doc-search/doc-search-result-row.d.ts.map +1 -1
- package/dist/components/shared/legal-document/legal-document-page.d.ts +1 -1
- package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
- package/dist/components/shared/onboarding/onboarding-step-card.d.ts +1 -1
- package/dist/components/shared/onboarding/onboarding-step-card.d.ts.map +1 -1
- package/dist/components/shared/onboarding/onboarding-walkthrough.d.ts +2 -1
- package/dist/components/shared/onboarding/onboarding-walkthrough.d.ts.map +1 -1
- package/dist/components/shared/product-release/index.d.ts +1 -0
- package/dist/components/shared/product-release/index.d.ts.map +1 -1
- package/dist/components/shared/product-release/product-release-card-skeleton.d.ts +2 -1
- package/dist/components/shared/product-release/product-release-card-skeleton.d.ts.map +1 -1
- package/dist/components/shared/product-release/product-release-card.d.ts +1 -1
- package/dist/components/shared/product-release/product-release-card.d.ts.map +1 -1
- package/dist/components/shared/product-release/product-releases-view.d.ts +50 -0
- package/dist/components/shared/product-release/product-releases-view.d.ts.map +1 -0
- package/dist/components/shared/product-release/release-detail-page.d.ts +1 -1
- package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
- package/dist/components/shared/product-release/release-detail-skeleton.d.ts +1 -1
- package/dist/components/shared/product-release/release-detail-skeleton.d.ts.map +1 -1
- package/dist/components/shared/roadmap/index.d.ts +1 -0
- package/dist/components/shared/roadmap/index.d.ts.map +1 -1
- package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts +1 -1
- package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts.map +1 -1
- package/dist/components/shared/roadmap/roadmap-grid.d.ts +16 -8
- package/dist/components/shared/roadmap/roadmap-grid.d.ts.map +1 -1
- package/dist/components/shared/roadmap/roadmap-view.d.ts +22 -0
- package/dist/components/shared/roadmap/roadmap-view.d.ts.map +1 -0
- package/dist/components/skeleton.d.ts +1 -1
- package/dist/components/skeleton.d.ts.map +1 -1
- package/dist/components/slack-icon.d.ts +2 -1
- package/dist/components/slack-icon.d.ts.map +1 -1
- package/dist/components/social-icon-row.d.ts +1 -1
- package/dist/components/social-icon-row.d.ts.map +1 -1
- package/dist/components/sonner.d.ts +1 -1
- package/dist/components/sonner.d.ts.map +1 -1
- package/dist/components/square-avatar.d.ts +2 -1
- package/dist/components/square-avatar.d.ts.map +1 -1
- package/dist/components/test/ods-current-test.d.ts +2 -1
- package/dist/components/test/ods-current-test.d.ts.map +1 -1
- package/dist/components/tickets/help-center-card.d.ts +1 -1
- package/dist/components/tickets/help-center-card.d.ts.map +1 -1
- package/dist/components/tickets/help-center-create-form.d.ts +2 -2
- package/dist/components/tickets/help-center-create-form.d.ts.map +1 -1
- package/dist/components/tickets/help-center-list.d.ts +1 -1
- package/dist/components/tickets/help-center-list.d.ts.map +1 -1
- package/dist/components/tickets/index.cjs +90 -90
- package/dist/components/tickets/index.js +9 -9
- package/dist/components/tickets/ticket-center.d.ts +1 -1
- package/dist/components/tickets/ticket-center.d.ts.map +1 -1
- package/dist/components/tickets/ticket-detail-drawer.d.ts +1 -1
- package/dist/components/tickets/ticket-detail-drawer.d.ts.map +1 -1
- package/dist/components/tickets/ticket-linked-delivery-card.d.ts +1 -1
- package/dist/components/tickets/ticket-linked-delivery-card.d.ts.map +1 -1
- package/dist/components/tickets/ticket-open-form.d.ts +1 -1
- package/dist/components/tickets/ticket-open-form.d.ts.map +1 -1
- package/dist/components/tickets/ticket-reply-composer.d.ts +1 -1
- package/dist/components/tickets/ticket-reply-composer.d.ts.map +1 -1
- package/dist/components/tickets/ticket-row.d.ts +1 -1
- package/dist/components/tickets/ticket-row.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts +2 -2
- package/dist/components/ui/assignee-dropdown.d.ts +2 -1
- package/dist/components/ui/assignee-dropdown.d.ts.map +1 -1
- package/dist/components/ui/badge.d.ts +1 -1
- package/dist/components/ui/badge.d.ts.map +1 -1
- package/dist/components/ui/brand-association-card.d.ts +1 -1
- package/dist/components/ui/brand-association-card.d.ts.map +1 -1
- package/dist/components/ui/brand-association-grid.d.ts +2 -1
- package/dist/components/ui/brand-association-grid.d.ts.map +1 -1
- package/dist/components/ui/breadcrumb.d.ts +2 -2
- package/dist/components/ui/bullet-list.d.ts +1 -1
- package/dist/components/ui/bullet-list.d.ts.map +1 -1
- package/dist/components/ui/card.d.ts +1 -1
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/circular-progress.d.ts +1 -1
- package/dist/components/ui/circular-progress.d.ts.map +1 -1
- package/dist/components/ui/color-preset-select.d.ts +29 -0
- package/dist/components/ui/color-preset-select.d.ts.map +1 -0
- package/dist/components/ui/content-loader.d.ts +5 -5
- package/dist/components/ui/content-loader.d.ts.map +1 -1
- package/dist/components/ui/cursor-pagination.d.ts +3 -2
- package/dist/components/ui/cursor-pagination.d.ts.map +1 -1
- package/dist/components/ui/custom-icons.d.ts +6 -5
- package/dist/components/ui/custom-icons.d.ts.map +1 -1
- package/dist/components/ui/dashboard-info-card.d.ts +1 -1
- package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-body.d.ts +1 -1
- package/dist/components/ui/data-table/data-table-body.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-column-filter.d.ts +1 -1
- package/dist/components/ui/data-table/data-table-column-filter.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-cursor-footer.d.ts +1 -1
- package/dist/components/ui/data-table/data-table-cursor-footer.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-empty.d.ts +1 -1
- package/dist/components/ui/data-table/data-table-empty.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-header.d.ts +1 -1
- package/dist/components/ui/data-table/data-table-header.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-infinite-footer.d.ts +1 -1
- package/dist/components/ui/data-table/data-table-infinite-footer.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-row-count.d.ts +1 -1
- package/dist/components/ui/data-table/data-table-row-count.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-row.d.ts +2 -1
- package/dist/components/ui/data-table/data-table-row.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-skeleton.d.ts +1 -1
- package/dist/components/ui/data-table/data-table-skeleton.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table.d.ts +1 -1
- package/dist/components/ui/data-table/data-table.d.ts.map +1 -1
- package/dist/components/ui/data-table/index.d.ts +1 -1
- package/dist/components/ui/date-picker.d.ts +4 -3
- package/dist/components/ui/date-picker.d.ts.map +1 -1
- package/dist/components/ui/device-card-compact.d.ts +1 -1
- package/dist/components/ui/device-card-compact.d.ts.map +1 -1
- package/dist/components/ui/device-card.d.ts +1 -1
- package/dist/components/ui/device-card.d.ts.map +1 -1
- package/dist/components/ui/dialog.d.ts +2 -2
- package/dist/components/ui/drawer.d.ts +3 -3
- package/dist/components/ui/dropdown-button.d.ts +1 -1
- package/dist/components/ui/dropdown-button.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.d.ts +1 -1
- package/dist/components/ui/entity-image.d.ts +2 -1
- package/dist/components/ui/entity-image.d.ts.map +1 -1
- package/dist/components/ui/error-state.d.ts +5 -4
- package/dist/components/ui/error-state.d.ts.map +1 -1
- package/dist/components/ui/feature-card.d.ts +1 -1
- package/dist/components/ui/feature-card.d.ts.map +1 -1
- package/dist/components/ui/feature-list.d.ts +1 -1
- package/dist/components/ui/feature-list.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-icon.d.ts +2 -1
- package/dist/components/ui/file-manager/file-icon.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager-action-bar.d.ts +2 -1
- package/dist/components/ui/file-manager/file-manager-action-bar.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager-breadcrumb.d.ts +2 -1
- package/dist/components/ui/file-manager/file-manager-breadcrumb.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager-context-menu.d.ts +2 -1
- package/dist/components/ui/file-manager/file-manager-context-menu.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager-empty.d.ts +2 -1
- package/dist/components/ui/file-manager/file-manager-empty.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager-skeleton.d.ts +2 -1
- package/dist/components/ui/file-manager/file-manager-skeleton.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager-table-row.d.ts +2 -1
- package/dist/components/ui/file-manager/file-manager-table-row.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager-table.d.ts +2 -1
- package/dist/components/ui/file-manager/file-manager-table.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager.d.ts +2 -1
- package/dist/components/ui/file-manager/file-manager.d.ts.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +69 -69
- package/dist/components/ui/file-manager/index.js +2 -2
- package/dist/components/ui/file-upload.d.ts +1 -1
- package/dist/components/ui/file-upload.d.ts.map +1 -1
- package/dist/components/ui/filter-checkbox-item.d.ts +1 -1
- package/dist/components/ui/filter-checkbox-item.d.ts.map +1 -1
- package/dist/components/ui/filter-list.d.ts +3 -2
- package/dist/components/ui/filter-list.d.ts.map +1 -1
- package/dist/components/ui/filter-modal.d.ts +1 -1
- package/dist/components/ui/filter-modal.d.ts.map +1 -1
- package/dist/components/ui/filter-pill-row.d.ts +1 -1
- package/dist/components/ui/filter-pill-row.d.ts.map +1 -1
- package/dist/components/ui/floating-tooltip.d.ts +1 -1
- package/dist/components/ui/floating-tooltip.d.ts.map +1 -1
- package/dist/components/ui/highlight-card.d.ts +3 -2
- package/dist/components/ui/highlight-card.d.ts.map +1 -1
- package/dist/components/ui/hover-dropdown.d.ts +1 -1
- package/dist/components/ui/hover-dropdown.d.ts.map +1 -1
- package/dist/components/ui/image-gallery-modal.d.ts +1 -1
- package/dist/components/ui/image-gallery-modal.d.ts.map +1 -1
- package/dist/components/ui/image-uploader.d.ts +1 -1
- package/dist/components/ui/image-uploader.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +39 -7
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.d.ts +3 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +40 -8
- package/dist/components/ui/info-card.d.ts +1 -1
- package/dist/components/ui/info-card.d.ts.map +1 -1
- package/dist/components/ui/info-row.d.ts +1 -1
- package/dist/components/ui/info-row.d.ts.map +1 -1
- package/dist/components/ui/markdown-editor.d.ts +1 -1
- package/dist/components/ui/markdown-editor.d.ts.map +1 -1
- package/dist/components/ui/media-type-selector.d.ts +2 -1
- package/dist/components/ui/media-type-selector.d.ts.map +1 -1
- package/dist/components/ui/menubar.d.ts +2 -2
- package/dist/components/ui/more-actions-menu.d.ts +1 -1
- package/dist/components/ui/more-actions-menu.d.ts.map +1 -1
- package/dist/components/ui/organization-card.d.ts +1 -1
- package/dist/components/ui/organization-card.d.ts.map +1 -1
- package/dist/components/ui/page-actions.d.ts +1 -1
- package/dist/components/ui/page-actions.d.ts.map +1 -1
- package/dist/components/ui/page-loader.d.ts +3 -2
- package/dist/components/ui/page-loader.d.ts.map +1 -1
- package/dist/components/ui/pagination-stub.d.ts +1 -1
- package/dist/components/ui/pagination-stub.d.ts.map +1 -1
- package/dist/components/ui/phone-input.d.ts +1 -1
- package/dist/components/ui/phone-input.d.ts.map +1 -1
- package/dist/components/ui/query-report-table/query-report-table-header.d.ts +1 -1
- package/dist/components/ui/query-report-table/query-report-table-header.d.ts.map +1 -1
- package/dist/components/ui/query-report-table/query-report-table-row.d.ts +1 -1
- package/dist/components/ui/query-report-table/query-report-table-row.d.ts.map +1 -1
- package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts +1 -1
- package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts.map +1 -1
- package/dist/components/ui/query-report-table/query-report-table.d.ts +1 -1
- package/dist/components/ui/query-report-table/query-report-table.d.ts.map +1 -1
- package/dist/components/ui/release-changelog-section.d.ts +1 -1
- package/dist/components/ui/release-changelog-section.d.ts.map +1 -1
- package/dist/components/ui/responsive-icons-block-stub.d.ts +1 -1
- package/dist/components/ui/responsive-icons-block-stub.d.ts.map +1 -1
- package/dist/components/ui/search-input.d.ts +1 -1
- package/dist/components/ui/search-input.d.ts.map +1 -1
- package/dist/components/ui/service-card.d.ts +1 -1
- package/dist/components/ui/service-card.d.ts.map +1 -1
- package/dist/components/ui/sheet.d.ts +2 -2
- package/dist/components/ui/sort-column-item.d.ts +1 -1
- package/dist/components/ui/sort-column-item.d.ts.map +1 -1
- package/dist/components/ui/status-badge.d.ts +1 -1
- package/dist/components/ui/status-badge.d.ts.map +1 -1
- package/dist/components/ui/status-indicator.d.ts +1 -1
- package/dist/components/ui/status-indicator.d.ts.map +1 -1
- package/dist/components/ui/tab-content.d.ts +1 -1
- package/dist/components/ui/tab-content.d.ts.map +1 -1
- package/dist/components/ui/tab-navigation.d.ts +1 -1
- package/dist/components/ui/tab-navigation.d.ts.map +1 -1
- package/dist/components/ui/tab-selector.d.ts +1 -1
- package/dist/components/ui/tab-selector.d.ts.map +1 -1
- package/dist/components/ui/table/table-cell.d.ts +2 -1
- package/dist/components/ui/table/table-cell.d.ts.map +1 -1
- package/dist/components/ui/table/table-column-filter-dropdown.d.ts +1 -1
- package/dist/components/ui/table/table-column-filter-dropdown.d.ts.map +1 -1
- package/dist/components/ui/table/table-description-cell.d.ts +2 -1
- package/dist/components/ui/table/table-description-cell.d.ts.map +1 -1
- package/dist/components/ui/table/table-empty-state.d.ts +2 -1
- package/dist/components/ui/table/table-empty-state.d.ts.map +1 -1
- package/dist/components/ui/table/table-header.d.ts +1 -1
- package/dist/components/ui/table/table-header.d.ts.map +1 -1
- package/dist/components/ui/table/table-row.d.ts +2 -1
- package/dist/components/ui/table/table-row.d.ts.map +1 -1
- package/dist/components/ui/table/table-skeleton.d.ts +2 -1
- package/dist/components/ui/table/table-skeleton.d.ts.map +1 -1
- package/dist/components/ui/table/table-timestamp-cell.d.ts +2 -1
- package/dist/components/ui/table/table-timestamp-cell.d.ts.map +1 -1
- package/dist/components/ui/table/table.d.ts +1 -1
- package/dist/components/ui/table/table.d.ts.map +1 -1
- package/dist/components/ui/tag-key-value-filter.d.ts +1 -1
- package/dist/components/ui/tag-key-value-filter.d.ts.map +1 -1
- package/dist/components/ui/tag-search-input.d.ts +1 -1
- package/dist/components/ui/tag-search-input.d.ts.map +1 -1
- package/dist/components/ui/tag.d.ts +1 -1
- package/dist/components/ui/tag.d.ts.map +1 -1
- package/dist/components/ui/tags-input.d.ts +2 -1
- package/dist/components/ui/tags-input.d.ts.map +1 -1
- package/dist/components/ui/tags-manager.d.ts +2 -1
- package/dist/components/ui/tags-manager.d.ts.map +1 -1
- package/dist/components/ui/ticket-attachments-list.d.ts +2 -1
- package/dist/components/ui/ticket-attachments-list.d.ts.map +1 -1
- package/dist/components/ui/ticket-detail-section.d.ts +1 -1
- package/dist/components/ui/ticket-detail-section.d.ts.map +1 -1
- package/dist/components/ui/ticket-info-section.d.ts +12 -1
- package/dist/components/ui/ticket-info-section.d.ts.map +1 -1
- package/dist/components/ui/ticket-note-card.d.ts +2 -1
- package/dist/components/ui/ticket-note-card.d.ts.map +1 -1
- package/dist/components/ui/ticket-notes-section.d.ts +2 -1
- package/dist/components/ui/ticket-notes-section.d.ts.map +1 -1
- package/dist/components/ui/ticket-status-config-row.d.ts +31 -0
- package/dist/components/ui/ticket-status-config-row.d.ts.map +1 -0
- package/dist/components/ui/ticket-status-tag.d.ts +50 -2
- package/dist/components/ui/ticket-status-tag.d.ts.map +1 -1
- package/dist/components/ui/title-content-block.d.ts +1 -1
- package/dist/components/ui/title-content-block.d.ts.map +1 -1
- package/dist/components/ui/toaster.d.ts +3 -3
- package/dist/components/ui/toaster.d.ts.map +1 -1
- package/dist/components/ui/truncate-text.d.ts +2 -2
- package/dist/components/ui/truncate-text.d.ts.map +1 -1
- package/dist/components/unified-pagination.d.ts +1 -1
- package/dist/components/unified-pagination.d.ts.map +1 -1
- package/dist/components/user-display.d.ts +2 -1
- package/dist/components/user-display.d.ts.map +1 -1
- package/dist/components/user-icon.d.ts +2 -1
- package/dist/components/user-icon.d.ts.map +1 -1
- package/dist/components/user-summary-stub.d.ts +1 -1
- package/dist/components/user-summary-stub.d.ts.map +1 -1
- package/dist/components/vendor-display-button.d.ts +1 -1
- package/dist/components/vendor-display-button.d.ts.map +1 -1
- package/dist/components/vendor-icon.d.ts +2 -1
- package/dist/components/vendor-icon.d.ts.map +1 -1
- package/dist/components/vendor-page-skeleton.d.ts +1 -1
- package/dist/components/vendor-page-skeleton.d.ts.map +1 -1
- package/dist/components/vendor-tag.d.ts +1 -1
- package/dist/components/vendor-tag.d.ts.map +1 -1
- package/dist/components/why-it-matters.d.ts +2 -1
- package/dist/components/why-it-matters.d.ts.map +1 -1
- package/dist/components/x-icon.d.ts +2 -1
- package/dist/components/x-icon.d.ts.map +1 -1
- package/dist/components/x-logo.d.ts +1 -1
- package/dist/components/x-logo.d.ts.map +1 -1
- package/dist/components/yes-no-display.d.ts +1 -1
- package/dist/components/yes-no-display.d.ts.map +1 -1
- package/dist/contexts/chat-runtime-context.d.ts +38 -19
- package/dist/contexts/chat-runtime-context.d.ts.map +1 -1
- package/dist/contexts/index.cjs +2 -2
- package/dist/contexts/index.js +1 -1
- package/dist/hooks/index.cjs +4 -4
- package/dist/hooks/index.js +3 -3
- package/dist/hooks/use-self-fetch.d.ts +36 -0
- package/dist/hooks/use-self-fetch.d.ts.map +1 -0
- package/dist/index.cjs +57 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +56 -6
- package/dist/nats/nats-provider.d.ts +1 -1
- package/dist/nats/nats-provider.d.ts.map +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/product-release.d.ts +2 -0
- package/dist/types/product-release.d.ts.map +1 -1
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.d.ts.map +1 -1
- package/dist/utils/content-href.d.ts +127 -0
- package/dist/utils/content-href.d.ts.map +1 -0
- package/dist/utils/dev-sections/dev-section-param-keys.d.ts +22 -0
- package/dist/utils/dev-sections/dev-section-param-keys.d.ts.map +1 -0
- package/dist/utils/dev-sections/openframe-dev-sections.d.ts.map +1 -1
- package/dist/utils/index.cjs +125 -8
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +6 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +118 -9
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/list-url.d.ts +46 -0
- package/dist/utils/list-url.d.ts.map +1 -0
- package/dist/utils/ods-color-utils.d.ts +19 -0
- package/dist/utils/ods-color-utils.d.ts.map +1 -1
- package/dist/utils/platform-config.d.ts +12 -12
- package/dist/utils/platform-config.d.ts.map +1 -1
- package/dist/utils/release-badge.d.ts +30 -0
- package/dist/utils/release-badge.d.ts.map +1 -0
- package/dist/utils/release-cover.d.ts +35 -0
- package/dist/utils/release-cover.d.ts.map +1 -0
- package/package.json +2 -1
- package/src/components/chat/chat-container.tsx +11 -2
- package/src/components/chat/embeddable-chat.tsx +15 -6
- package/src/components/chat/entity-cards/chat-ticket-item.tsx +13 -3
- package/src/components/chat/entity-cards/dispatch.tsx +5 -7
- package/src/components/chat/entity-cards/index.ts +8 -0
- package/src/components/chat/entity-cards/onboarding-guide-card.tsx +9 -6
- package/src/components/chat/entity-cards/product-release-card-defaults.ts +92 -3
- package/src/components/chat/entity-cards/use-entity-card-link.ts +9 -1
- package/src/components/chat/hooks/.use-sse-chat-adapter.md +1 -1
- package/src/components/chat/hooks/use-chat-identity.ts +71 -5
- package/src/components/chat/hooks/use-sse-chat-adapter.ts +18 -14
- package/src/components/chat/nav-link-anchor-via-runtime.tsx +3 -1
- package/src/components/chat/types/component.types.ts +7 -1
- package/src/components/chat/utils/__tests__/source-row-cta.test.ts +78 -0
- package/src/components/chat/utils/execute-navigation.ts +127 -0
- package/src/components/chat/utils/index.ts +10 -0
- package/src/components/chat/utils/nav-click-handler.ts +16 -63
- package/src/components/chat/utils/source-row-cta.ts +101 -18
- package/src/components/features/board/board-column-header.tsx +7 -4
- package/src/components/features/board/types.ts +10 -0
- package/src/components/features/index.ts +1 -0
- package/src/components/features/ticket-status-config-list/index.ts +1 -0
- package/src/components/features/ticket-status-config-list/ticket-status-config-list.tsx +97 -0
- package/src/components/footer-waitlist-button.tsx +4 -9
- package/src/components/layout/page-heading.tsx +54 -0
- package/src/components/layout/title-block.tsx +2 -1
- package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +57 -76
- package/src/components/onboarding-guides/onboarding-guides-catalog-view.tsx +103 -92
- package/src/components/shared/delivery/delivery-lists.tsx +5 -2
- package/src/components/shared/dev-section/dev-section-page.tsx +20 -4
- package/src/components/shared/dev-section/dev-section-view.tsx +5 -1
- package/src/components/shared/legal-document/legal-document-page.tsx +3 -3
- package/src/components/shared/product-release/index.ts +5 -0
- package/src/components/shared/product-release/product-releases-view.tsx +260 -0
- package/src/components/shared/roadmap/index.ts +2 -0
- package/src/components/shared/roadmap/roadmap-grid.tsx +246 -42
- package/src/components/shared/roadmap/roadmap-view.tsx +111 -0
- package/src/components/ui/color-preset-select.tsx +309 -0
- package/src/components/ui/index.ts +3 -0
- package/src/components/ui/input.tsx +1 -1
- package/src/components/ui/ticket-info-section.tsx +25 -3
- package/src/components/ui/ticket-status-config-row.tsx +172 -0
- package/src/components/ui/ticket-status-tag.tsx +157 -8
- package/src/contexts/chat-runtime-context.tsx +36 -18
- package/src/hooks/use-self-fetch.ts +114 -0
- package/src/types/product-release.ts +7 -0
- package/src/utils/__tests__/content-href.test.ts +137 -0
- package/src/utils/__tests__/list-url.test.ts +136 -0
- package/src/utils/cn.ts +9 -0
- package/src/utils/content-href.ts +180 -0
- package/src/utils/dev-sections/dev-section-param-keys.ts +21 -0
- package/src/utils/dev-sections/openframe-dev-sections.ts +9 -8
- package/src/utils/index.ts +27 -1
- package/src/utils/list-url.ts +94 -0
- package/src/utils/ods-color-utils.ts +86 -0
- package/src/utils/release-badge.ts +46 -0
- package/src/utils/release-cover.ts +46 -0
- package/dist/chunk-664KA5FI.cjs.map +0 -1
- package/dist/chunk-EWA2NFUR.js.map +0 -1
- package/dist/chunk-FZZBCRID.cjs.map +0 -1
- package/dist/chunk-HOHDXYPR.cjs.map +0 -1
- package/dist/chunk-KSOOKNBG.js.map +0 -1
- package/dist/chunk-L5RSJE2I.cjs.map +0 -1
- package/dist/chunk-RFONYT63.js.map +0 -1
- package/dist/chunk-S4SVD5JI.cjs.map +0 -1
- package/dist/chunk-SWIR5EB2.js.map +0 -1
- package/dist/chunk-UEBM4PC4.js.map +0 -1
- package/dist/chunk-V5JY5RSY.js.map +0 -1
- package/dist/components/onboarding-guides/build-default-href.d.ts +0 -15
- package/dist/components/onboarding-guides/build-default-href.d.ts.map +0 -1
- package/src/components/onboarding-guides/build-default-href.ts +0 -16
- /package/dist/{chunk-LCLTCCXS.js.map → chunk-24Q2WLIU.js.map} +0 -0
- /package/dist/{chunk-OHOUSDAY.js.map → chunk-SRA2QYK6.js.map} +0 -0
- /package/dist/{chunk-QY75VKAS.js.map → chunk-Z46NRJWW.js.map} +0 -0
- /package/dist/{chunk-EKBM4FHK.js.map → chunk-ZII7TNVA.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/announcement-bar.tsx","../../src/components/icon-utils.tsx","../../src/components/openframe-logo.tsx","../../src/utils/announcement-storage.ts","../../src/components/categories-cart.tsx","../../src/components/vendor-icon.tsx","../../src/utils/url-fix.ts","../../src/utils/vendor-media-stub.ts","../../src/utils/image-proxy-stub.ts","../../src/components/category-card.tsx","../../src/components/comment-card.tsx","../../src/components/vendor-display-button.tsx","../../src/components/auth-stub.tsx","../../src/components/user-summary-stub.tsx","../../src/components/content-loading-container.tsx","../../src/components/dynamic-skeleton.tsx","../../src/hooks/use-theme-aware.ts","../../src/components/faq-accordion.tsx","../../src/components/filter-chip.tsx","../../src/components/footer.tsx","../../src/components/social-icon-row.tsx","../../src/components/unified-filter-logic.tsx","../../src/utils/format-text-stub.ts","../../src/components/index.ts","../../src/components/footer-waitlist-button.tsx","../../src/components/hero-image-uploader.tsx","../../src/components/icons-block.tsx","../../src/components/icons-stub.tsx","../../src/components/image-cropper.tsx","../../src/components/media-carousel.tsx","../../src/components/metric-value.tsx","../../src/components/msp-display.tsx","../../src/components/square-avatar.tsx","../../src/components/open-source-features.tsx","../../src/components/persistent-filter-controls.tsx","../../src/components/persistent-pagination.tsx","../../src/components/pricing-display.tsx","../../src/components/results-count.tsx","../../src/components/vendor-tag.tsx","../../src/components/selection-source-badge.tsx","../../src/components/user-display.tsx","../../src/components/loading/page-layout-skeleton.tsx","../../src/components/loading/unified-skeleton.tsx","../../src/components/loading/card-skeleton.tsx","../../src/components/loading/content-skeleton.tsx","../../src/components/profile/ProfileLoadingSkeleton.tsx","../../src/components/loading/msp-profile-form-skeleton.tsx","../../src/components/loading/category-card-skeleton.tsx","../../src/components/loading/category-vendor-selector-skeleton.tsx","../../src/components/loading/wizard-layout-skeleton.tsx","../../src/components/loading/margin-report-skeleton.tsx","../../src/components/loading/users-grid-skeleton.tsx","../../src/components/loading/organization-icon-skeleton.tsx","../../src/components/loading/organization-card-skeleton.tsx","../../src/components/loading/device-card-skeleton.tsx","../../src/components/vendor-page-skeleton.tsx","../../src/components/why-it-matters.tsx","../../src/components/yes-no-display.tsx","../../src/components/made-with-love.tsx","../../src/components/date-time-picker.tsx","../../src/components/shared/product-release/release-detail-page.tsx","../../src/components/shared/detail-page-skeleton.tsx","../../src/components/shared/product-release/release-detail-skeleton.tsx","../../src/components/shared/roadmap/roadmap-grid.tsx","../../src/components/shared/roadmap/use-roadmap-voting.ts","../../src/components/shared/roadmap/roadmap-grid-skeleton.tsx","../../src/components/shared/delivery/delivery-lists.tsx","../../src/components/shared/delivery/delivery-table.tsx","../../src/components/shared/legal-document/legal-document-page.tsx","../../src/components/shared/legal-document/use-legal-docs.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect } from 'react';\nimport Image from '../embed-shims/next-image';\nimport { X } from 'lucide-react';\nimport { Button } from './ui/button';\nimport { renderSvgIcon } from './icon-utils';\nimport {\n setStoredAnnouncement,\n getStoredAnnouncement,\n clearStoredAnnouncement,\n} from '../utils/announcement-storage';\nimport { Announcement } from '../types/announcement';\nimport { getAppType } from '../utils/app-config';\nimport { useEndpointsRuntime } from '../contexts/endpoints-runtime-context';\n\n// Helper that defers to renderSvgIcon so we don't need local icon imports\nconst getSvgIcon = (\n name: string,\n size: 'main' | 'cta' = 'main',\n extra: Record<string, any> = {}\n) => {\n const cls =\n size === 'cta'\n ? 'relative shrink-0 w-3 h-3 md:w-4 md:h-4'\n : 'relative shrink-0 w-6 h-6 md:w-8 md:h-8';\n return renderSvgIcon(name, { className: cls, ...extra });\n};\n\nexport function AnnouncementBar() {\n const [announcement, setAnnouncement] = useState<Announcement | null>(null);\n const [isVisible, setIsVisible] = useState<boolean>(false);\n\n // Get the platform type for platform-specific localStorage keys\n const platform = getAppType();\n\n // Optional endpoint runtime: when no provider is mounted (e.g. on a\n // bare React-tree page that doesn't wrap with HubRuntimeProvider),\n // the bar silently skips its fetch instead of throwing. Apps that DO\n // mount the provider get the configured URL — typically\n // '/api/announcements/active' in the hub, or a proxied path in an\n // embedded host.\n const endpoints = useEndpointsRuntime();\n const announcementsUrl = endpoints?.announcementsUrl;\n\n // Helper to determine dismissal key for localStorage\n const getDismissKey = (id: string) => `${platform}-announcement-${id}-dismissed`;\n \n // Helper to get platform-specific cache key\n const getCacheKey = () => `${platform}-announcement-cache`;\n\n // Fetch active announcement from API and update state + LS\n const fetchActiveAnnouncement = async () => {\n // No provider mounted → no URL configured → skip fetch silently.\n // Cached announcement from previous sessions still renders if present.\n if (!announcementsUrl) return;\n try {\n // Server-side platform injection - no URL parameter needed\n const response = await fetch(announcementsUrl);\n \n if (response.ok) {\n const data = await response.json();\n if (data.announcement) {\n setAnnouncement(data.announcement);\n\n // persist latest announcement for quick future loads with platform-specific key\n setStoredAnnouncement(getCacheKey(), data.announcement);\n\n // Check if this specific announcement was dismissed\n const isDismissed = localStorage.getItem(getDismissKey(data.announcement.id));\n setIsVisible(!isDismissed);\n } else {\n // No announcement available - clean up localStorage and hide bar\n setAnnouncement(null);\n setIsVisible(false);\n \n // Use utility function to properly clear platform-specific announcement data\n clearStoredAnnouncement(getCacheKey());\n }\n } else {\n // Network or other error - hide announcement and clean up\n console.error(`❌ [${platform.toUpperCase()}] Error fetching announcement: ${response.status}`);\n setAnnouncement(null);\n setIsVisible(false);\n \n // Clear stale data on network errors too\n clearStoredAnnouncement(getCacheKey());\n }\n } catch (error) {\n console.error('Error fetching active announcement:', error);\n setAnnouncement(null);\n setIsVisible(false);\n \n // Clear stale data on exceptions too\n clearStoredAnnouncement(getCacheKey());\n }\n };\n\n // Initial load: use cached announcement synchronously for instant paint\n useEffect(() => {\n const cached = getStoredAnnouncement(getCacheKey());\n if (cached) {\n const isDismissed = localStorage.getItem(getDismissKey(cached.id));\n setAnnouncement(cached);\n setIsVisible(!isDismissed);\n }\n\n // No provider mounted → no URL → no fetch / no polling. Cached\n // announcement still painted above. Skip scheduling the 5-min\n // interval entirely to avoid an idle timer + repeated short-circuit\n // calls.\n if (!announcementsUrl) return;\n\n // Always fetch latest on mount\n fetchActiveAnnouncement();\n\n // Schedule refresh every 5 minutes. When announcementsUrl flips\n // (e.g. provider value swap), the effect re-runs and restarts the\n // interval against the new URL — no stale captured fetch.\n const interval = setInterval(fetchActiveAnnouncement, 300_000);\n return () => clearInterval(interval);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [announcementsUrl]);\n\n // helpers\n const handleDismiss = () => {\n if (!announcement) return;\n localStorage.setItem(getDismissKey(announcement.id), 'true');\n setIsVisible(false);\n };\n\n const handleCtaClick = () => {\n if (!announcement?.cta_url) return;\n announcement.cta_target === '_blank'\n ? window.open(announcement.cta_url, '_blank', 'noopener,noreferrer')\n : (window.location.href = announcement.cta_url);\n };\n\n const renderIcon = () => {\n if (!announcement) return null;\n\n if (announcement.icon_type === 'png' && announcement.icon_png_url) {\n return (\n <Image\n src={announcement.icon_png_url}\n alt=\"Announcement icon\"\n width={32}\n height={32}\n className=\"relative shrink-0\"\n aria-hidden\n />\n );\n }\n\n return getSvgIcon(\n announcement.icon_svg_name || 'openframe-logo',\n 'main',\n announcement.icon_svg_props ?? {}\n );\n };\n\n // If no announcement or dismissed => render nothing\n if (!announcement || !isVisible) return null;\n\n return (\n <div\n className=\"relative w-full z-50\"\n style={{ backgroundColor: announcement.background_color }}\n data-announcement-bar\n >\n <div className=\"flex items-center w-full max-w-full\">\n {/* Mobile: Clickable content area, Desktop: Regular content */}\n <div\n className={`flex flex-row gap-2 md:gap-4 items-center pl-4 md:pl-6 py-1.5 md:py-2 flex-1 min-w-0 ${\n announcement.cta_enabled && announcement.cta_url ? 'md:cursor-default cursor-pointer' : ''\n }`}\n onClick={(e) => {\n // Only handle click on mobile (< 768px) and if CTA is enabled\n if (window.innerWidth < 768 && announcement.cta_enabled && announcement.cta_url) {\n e.preventDefault();\n handleCtaClick();\n }\n }}\n >\n {renderIcon()}\n\n <div className=\"flex-1 min-w-0 max-w-full\">\n <p className=\"font-body font-bold text-[14px] md:text-[18px] leading-tight tracking-tight mb-0 text-[#1A1A1A] truncate\">\n {announcement.title}\n </p>\n <p className=\"font-body text-[12px] md:text-[18px] leading-tight hidden md:block text-[#1A1A1A] truncate\">\n {announcement.description}\n </p>\n </div>\n\n {/* CTA Button - Hidden on mobile, shown on desktop */}\n {announcement.cta_enabled && announcement.cta_text && announcement.cta_url && (\n <div className=\"hidden md:flex flex-shrink-0 ml-1 md:ml-2\">\n <Button\n onClick={handleCtaClick}\n variant=\"outline\"\n size=\"small-legacy\"\n leftIcon={\n announcement.cta_show_icon && announcement.cta_icon\n ? getSvgIcon(\n announcement.cta_icon,\n 'cta',\n announcement.cta_icon_props ?? {}\n )\n : undefined\n }\n className=\"transition-opacity hover:opacity-90 text-xs md:text-sm whitespace-nowrap\"\n style={{\n backgroundColor: announcement.cta_button_background_color || undefined,\n color: announcement.cta_button_text_color || undefined,\n borderColor: announcement.cta_button_background_color || undefined,\n }}\n >\n {announcement.cta_text}\n </Button>\n </div>\n )}\n </div>\n\n {/* Dismiss button - always visible */}\n <button\n onClick={(e) => {\n e.stopPropagation(); // Prevent triggering the mobile CTA click\n handleDismiss();\n }}\n className=\"flex-shrink-0 w-8 h-8 md:w-10 md:h-10 flex items-center justify-center hover:bg-[#1A1A1A]/10 focus:outline-none focus:ring-2 focus:ring-[#1A1A1A] mr-2 md:mr-4\"\n aria-label=\"Dismiss announcement\"\n type=\"button\"\n >\n <X className=\"w-4 h-4 text-[#1A1A1A]\" strokeWidth={2} />\n </button>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport {\n Megaphone,\n Bell,\n Info,\n Star,\n Rocket,\n Package,\n} from 'lucide-react';\nimport { OpenFrameLogo } from './openframe-logo';\nimport { OpenmspLogo } from './openmsp-logo';\nimport { FlamingoLogo } from './flamingo-logo';\n\n/**\n * Returns a JSX element for a known icon name, spreading any extra props.\n * Falls back to Megaphone if the name is not recognised.\n */\nexport function renderSvgIcon(\n name: string,\n props: React.SVGProps<SVGSVGElement | SVGElement> = {}\n): React.ReactElement {\n const map: Record<string, (p: any) => React.ReactElement> = {\n megaphone: (p) => <Megaphone {...p} />,\n bell: (p) => <Bell {...p} />,\n info: (p) => <Info {...p} />,\n star: (p) => <Star {...p} />,\n rocket: (p) => <Rocket {...p} />,\n package: (p) => <Package {...p} />,\n 'openframe-logo': (p) => <OpenFrameLogo {...p} />,\n 'openmsp-logo': (p) => <OpenmspLogo {...p} />,\n 'flamingo': (p)=> <FlamingoLogo {...p} />,\n };\n\n const renderer = map[name] || map['megaphone'];\n return renderer(props);\n} ","import React from 'react';\n\nexport const OpenFrameLogo = ({ className, lowerPathColor, upperPathColor, ...props }: { className?: string, lowerPathColor?: string, upperPathColor?: string } & React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n {...props}\n className={className}\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n '--fill-0': 'currentColor',\n ...props.style\n } as React.CSSProperties}\n >\n <g>\n <g>\n {/* White squares - top right, bottom left, bottom right, bottom center */}\n <path\n d=\"M21.3333 16.5333C21.3333 16.2388 21.5721 16 21.8667 16H26.1333C26.4279 16 26.6667 16.2388 26.6667 16.5333V20.8C26.6667 21.0946 26.4279 21.3333 26.1333 21.3333H21.8667C21.5721 21.3333 21.3333 21.0946 21.3333 20.8V16.5333Z\"\n fill={lowerPathColor ?? '#ffffff'}\n />\n <path\n d=\"M16 21.8667C16 21.5721 16.2388 21.3333 16.5333 21.3333H20.8C21.0946 21.3333 21.3333 21.5721 21.3333 21.8667V26.1333C21.3333 26.4279 21.0946 26.6667 20.8 26.6667H16.5333C16.2388 26.6667 16 26.4279 16 26.1333V21.8667Z\"\n fill={lowerPathColor ?? '#ffffff'}\n />\n <path\n d=\"M26.6667 21.8667C26.6667 21.5721 26.9054 21.3333 27.2 21.3333H31.4667C31.7612 21.3333 32 21.5721 32 21.8667V26.1333C32 26.4279 31.7612 26.6667 31.4667 26.6667H27.2C26.9054 26.6667 26.6667 26.4279 26.6667 26.1333V21.8667Z\"\n fill={lowerPathColor ?? '#ffffff'}\n />\n <path\n d=\"M21.3333 27.2C21.3333 26.9054 21.5721 26.6667 21.8667 26.6667H26.1333C26.4279 26.6667 26.6667 26.9054 26.6667 27.2V31.4667C26.6667 31.7612 26.4279 32 26.1333 32H21.8667C21.5721 32 21.3333 31.7612 21.3333 31.4667V27.2Z\"\n fill={lowerPathColor ?? '#ffffff'}\n />\n </g>\n {/* Black frame/border */}\n <path\n d=\"M30.9333 0H1.06667C0.477563 0 0 0.477564 0 1.06667V30.9333C0 31.5224 0.477563 32 1.06667 32H14.9333C15.5224 32 16 31.5224 16 30.9333V27.7333C16 27.1442 15.5224 26.6667 14.9333 26.6667H5.86667C5.57211 26.6667 5.33333 26.4279 5.33333 26.1333V5.86667C5.33333 5.57211 5.57211 5.33333 5.86667 5.33333H26.1333C26.4279 5.33333 26.6667 5.57212 26.6667 5.86667V14.9333C26.6667 15.5224 27.1442 16 27.7333 16H30.9333C31.5224 16 32 15.5224 32 14.9333V1.06667C32 0.477563 31.5224 0 30.9333 0Z\"\n fill={upperPathColor ?? '#1A1A1A'}\n />\n </g>\n </svg>\n );\n};","// Stub for announcement storage\nexport interface AnnouncementStorageOptions {\n key: string;\n defaultValue?: any;\n}\n\nexport function getStoredAnnouncement(key: string): any {\n if (typeof window !== 'undefined') {\n try {\n return JSON.parse(localStorage.getItem(key) || 'null');\n } catch {\n return null;\n }\n }\n return null;\n}\n\nexport function setStoredAnnouncement(key: string, value: any): void {\n if (typeof window !== 'undefined') {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // Ignore storage errors\n }\n }\n}\n\nexport function clearStoredAnnouncement(key: string = 'announcement'): void {\n if (typeof window !== 'undefined') {\n try {\n localStorage.removeItem(key);\n } catch {\n // Ignore storage errors\n }\n }\n}","\"use client\"\n\nimport React from 'react';\nimport Link from '../embed-shims/next-link';\nimport { ChevronRight } from 'lucide-react';\nimport { VendorIcon } from './vendor-icon';\nimport type { CategoryCardProps, RealCategoryCardProps } from '../types/category';\n\n\n// Component that receives vendor and subcategory data as props\nexport function CategoriesCart({ \n category, \n vendors = [], \n vendorCount = 0, \n subcategoryCount = 0, \n isLoading = false,\n className = '' \n}: RealCategoryCardProps) {\n return (\n <Link\n href={`/vendors?category=${category.slug}`}\n className={`block bg-ods-card border border-ods-border rounded-lg p-3 md:p-4 pb-4 md:pb-6 hover:border-[#FFC008] transition-colors group relative ${className}`}\n >\n <div className=\"flex flex-col gap-4 md:gap-6\">\n {/* Vendor Icons Grid */}\n <div className=\"relative w-full h-8 md:h-10 overflow-hidden\">\n <div className=\"flex gap-2 md:gap-3 w-full\">\n {isLoading ? (\n // Skeleton loading for vendor icons\n Array.from({ length: 20 }).map((_, index) => (\n <div\n key={index}\n className=\"w-8 h-8 md:w-10 md:h-10 bg-ods-border rounded animate-pulse flex-shrink-0\"\n />\n ))\n ) : vendors && vendors.length > 0 ? (\n vendors.map((vendor: any) => (\n <VendorIcon\n key={vendor.id}\n vendor={vendor}\n size=\"md\"\n className=\"rounded overflow-hidden filter grayscale opacity-60\"\n />\n ))\n ) : (\n // No vendors found - show placeholder icons\n Array.from({ length: 6 }).map((_, index) => (\n <div\n key={index}\n className=\"w-8 h-8 md:w-10 md:h-10 bg-ods-border rounded flex items-center justify-center opacity-30 flex-shrink-0\"\n >\n <div className=\"w-4 h-4 md:w-6 md:h-6 bg-[#888888] rounded-sm\" />\n </div>\n ))\n )}\n </div>\n\n {/* Gradient overlays for fade effect */}\n <div className=\"absolute inset-y-0 left-0 w-4 md:w-6 bg-gradient-to-r from-[#212121] to-transparent pointer-events-none\" />\n <div className=\"absolute inset-y-0 right-0 w-4 md:w-6 bg-gradient-to-l from-[#212121] to-transparent pointer-events-none\" />\n </div>\n\n {/* Category Information - Updated to use real data */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-col gap-1\">\n <h3 className=\"text-xl md:text-2xl font-bold text-ods-text-primary group-hover:text-ods-accent transition-colors leading-[1.33] font-body\">\n {category.name}\n </h3>\n <p className=\"text-sm md:text-base font-medium text-ods-text-secondary leading-[1.43] font-body\">\n {subcategoryCount || 0} Subcategories • {vendorCount || 0} Products\n </p>\n </div>\n\n <div className=\"flex items-start md:items-end justify-between gap-4 md:gap-6\">\n <p className=\"font-['DM_Sans'] font-medium text-lg leading-[1.33] text-ods-text-primary flex-1\">\n {category.description}\n </p>\n\n {/* Arrow Button */}\n <div\n className=\"flex items-center justify-center w-10 h-10 md:w-12 md:h-12 bg-transparent border border-ods-border rounded-md group-hover:bg-[#FFC008] transition-colors flex-shrink-0\"\n aria-label={`View ${category.name} category`}\n > \n <ChevronRight className=\"w-5 h-5 md:w-6 md:h-6 text-ods-text-primary group-hover:text-black transition-colors\" />\n </div>\n </div>\n </div>\n </div>\n </Link>\n );\n}\n\n","\"use client\"\n\nimport React from 'react'\nimport Image from '../embed-shims/next-image'\nimport { cn } from \"../utils/cn\"\nimport { getVendorLogo, VendorWithMedia } from '../utils/vendor-media-stub'\nimport { getProxiedImageUrl } from '../utils/image-proxy-stub'\n\ninterface VendorIconProps {\n vendor: VendorWithMedia & {\n id?: number\n title: string\n slug?: string\n logo?: string | null\n }\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'l' | 'xl'\n className?: string\n showBackground?: boolean\n backgroundStyle?: 'dark' | 'light' | 'white'\n}\n\nconst sizeClasses = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8', \n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n l: 'w-14 h-14',\n xl: 'w-16 h-16'\n}\n\nconst imageSizeMap = {\n xs: { width: 16, height: 16 },\n sm: { width: 20, height: 20 },\n md: { width: 32, height: 32 },\n lg: { width: 40, height: 40 },\n l: { width: 38, height: 38 },\n xl: { width: 40, height: 40 }\n}\n\nconst backgroundClasses = {\n dark: 'bg-[#161616] border border-ods-border',\n light: 'bg-ods-card border border-ods-border',\n white: 'bg-white border border-[#E5E5E5]'\n}\n\n/**\n * Common VendorIcon component for displaying vendor logos consistently across the platform\n * Extracted from vendor-card.tsx for reuse in comparison tables, dropdowns, etc.\n */\nexport function VendorIcon({ \n vendor, \n size = 'md', \n className = '',\n showBackground = true,\n backgroundStyle = 'dark'\n}: VendorIconProps) {\n const logoUrl = getVendorLogo(vendor)\n const { width, height } = imageSizeMap[size]\n \n const containerClasses = cn(\n sizeClasses[size],\n 'rounded-lg flex items-center justify-center flex-shrink-0',\n showBackground && backgroundClasses[backgroundStyle],\n !showBackground && 'overflow-hidden',\n className\n )\n\n return (\n <div className={containerClasses}>\n {logoUrl ? (\n <Image\n src={getProxiedImageUrl(logoUrl) || logoUrl}\n alt={`${vendor.title} logo`}\n width={width}\n height={height}\n className={cn(\n 'object-contain',\n showBackground ? 'p-1' : 'w-full h-full'\n )}\n />\n ) : (\n <div className={cn(\n 'flex items-center justify-center text-xs font-medium uppercase',\n backgroundStyle === 'white' ? 'text-[#333333]' : 'text-ods-text-secondary'\n )}>\n {vendor.title?.substring(0, 2) || '??'}\n </div>\n )}\n </div>\n )\n} ","/**\n * Utility functions for fixing URL construction issues\n */\n\n/**\n * Fix double slashes in URLs while preserving protocol slashes\n * @param url The URL to fix\n * @returns Fixed URL with single slashes in path\n */\nexport function fixUrlDoubleSlashes(url: string): string {\n if (!url) return url;\n \n // Split on protocol to preserve it\n const protocolMatch = url.match(/^(https?:\\/\\/)/);\n if (protocolMatch) {\n const protocol = protocolMatch[1];\n const rest = url.substring(protocol.length);\n // Replace multiple consecutive slashes with single slash in the path part\n const fixedRest = rest.replace(/\\/+/g, '/');\n return protocol + fixedRest;\n }\n \n // For relative URLs, just fix multiple slashes\n return url.replace(/\\/+/g, '/');\n}\n\n/**\n * Properly join URL path segments without creating double slashes\n * @param segments Path segments to join\n * @returns Properly joined path\n */\nexport function joinUrlPath(...segments: string[]): string {\n return segments\n .map((segment, index) => {\n // Remove leading slash from all but first segment\n if (index > 0 && segment.startsWith('/')) {\n segment = segment.substring(1);\n }\n // Remove trailing slash from all but last segment\n if (index < segments.length - 1 && segment.endsWith('/')) {\n segment = segment.substring(0, segment.length - 1);\n }\n return segment;\n })\n .filter(segment => segment.length > 0)\n .join('/');\n}\n\n/**\n * Fix Supabase storage URLs specifically\n * @param url Supabase storage URL\n * @returns Fixed URL\n */\nexport function fixSupabaseStorageUrl(url: string): string {\n // Early return if nothing to process\n if (!url) return url;\n\n /**\n * We previously restricted the fix to URLs that contained a specific Supabase\n * domain (\"supabase.co\"). However, we now serve assets from a custom domain\n * (e.g. app.openmsp.ai) that still uses the same `/storage/v1/object/public/`\n * path structure. The old guard clause prevented those URLs from being\n * cleaned which resulted in paths like:\n * https://app.openmsp.ai/storage/v1/object/public/logos///Ansible.png\n * Googlebot treats the triple-slash as a distinct resource and reports 404\n * errors which in turn causes the \"URL will be indexed only if certain\n * conditions are met\" warning in Search Console.\n *\n * Solution: detect the canonical Supabase storage path segment instead of\n * the host name. Whenever we see that path we safely collapse multiple\n * consecutive slashes to a single slash while preserving the protocol\n * (`https://`).\n */\n\n const SUPABASE_STORAGE_SEGMENT = '/storage/v1/object/public/';\n\n if (url.includes(SUPABASE_STORAGE_SEGMENT)) {\n return fixUrlDoubleSlashes(url);\n }\n\n // No known storage segment – return the original URL untouched\n return url;\n}","// Vendor media utilities for UI kit\n// Real implementation copied from main project\n\nimport { fixSupabaseStorageUrl } from './url-fix';\n\nexport interface VendorMedia {\n media_type: 'logo' | 'image' | 'video';\n media_url: string;\n}\n\nexport interface VendorWithMedia {\n id?: number;\n title: string;\n slug?: string;\n logo?: string | null;\n logo_url?: string; // Support direct logo_url field from lightweight API\n vendor_media?: VendorMedia[];\n}\n\n/**\n * Get the logo URL from vendor_media array or direct logo_url field\n */\nexport function getVendorLogo(vendor: VendorWithMedia): string | null {\n // First check for direct logo_url field (from lightweight API)\n if (vendor.logo_url) {\n return fixSupabaseStorageUrl(vendor.logo_url);\n }\n \n // Check for legacy logo field\n if (vendor.logo) {\n return fixSupabaseStorageUrl(vendor.logo);\n }\n \n // Fallback to vendor_media array (from detailed API)\n const logoMedia = vendor.vendor_media?.find(m => m.media_type === 'logo');\n if (logoMedia?.media_url) {\n return fixSupabaseStorageUrl(logoMedia.media_url);\n }\n \n return null;\n}\n\n/**\n * Get the main image URL from vendor_media array\n */\nexport function getVendorImage(vendor: VendorWithMedia): string | null {\n const imageMedia = vendor.vendor_media?.find(m => m.media_type === 'image');\n return imageMedia?.media_url ? fixSupabaseStorageUrl(imageMedia.media_url) : null;\n}\n\n/**\n * Get the video URL from vendor_media array\n */\nexport function getVendorVideo(vendor: VendorWithMedia): string | null {\n const videoMedia = vendor.vendor_media?.find(m => m.media_type === 'video');\n return videoMedia?.media_url ? fixSupabaseStorageUrl(videoMedia.media_url) : null;\n}\n\n/**\n * Get all media URLs of a specific type\n */\nexport function getVendorMediaByType(vendor: VendorWithMedia, type: 'logo' | 'image' | 'video'): string[] {\n return vendor.vendor_media?.filter(m => m.media_type === type).map(m => fixSupabaseStorageUrl(m.media_url)) || [];\n}\n\n/**\n * Get all media items grouped by type\n */\nexport function getVendorMediaGrouped(vendor: VendorWithMedia): {\n logos: string[];\n images: string[];\n videos: string[];\n} {\n const media = vendor.vendor_media || [];\n \n return {\n logos: media.filter(m => m.media_type === 'logo').map(m => fixSupabaseStorageUrl(m.media_url)),\n images: media.filter(m => m.media_type === 'image').map(m => fixSupabaseStorageUrl(m.media_url)),\n videos: media.filter(m => m.media_type === 'video').map(m => fixSupabaseStorageUrl(m.media_url))\n };\n}\n\n/**\n * Add new media to vendor_media array (useful for admin interfaces)\n */\nexport function addVendorMedia(vendor: VendorWithMedia, type: 'logo' | 'image' | 'video', url: string): VendorMedia[] {\n const existingMedia = vendor.vendor_media || [];\n const newMedia: VendorMedia = { media_type: type, media_url: url };\n return [...existingMedia, newMedia];\n}\n\n/**\n * Remove media from vendor_media array\n */\nexport function removeVendorMedia(vendor: VendorWithMedia, url: string): VendorMedia[] {\n return vendor.vendor_media?.filter(m => m.media_url !== url) || [];\n}\n\n/**\n * Check if vendor has media of a specific type\n */\nexport function hasVendorMedia(vendor: VendorWithMedia, type: 'logo' | 'image' | 'video'): boolean {\n return vendor.vendor_media?.some(m => m.media_type === type) || false;\n}\n\n/**\n * Get media count by type\n */\nexport function getVendorMediaCount(vendor: VendorWithMedia): {\n logos: number;\n images: number;\n videos: number;\n total: number;\n} {\n const media = vendor.vendor_media || [];\n \n const logos = media.filter(m => m.media_type === 'logo').length;\n const images = media.filter(m => m.media_type === 'image').length;\n const videos = media.filter(m => m.media_type === 'video').length;\n \n return {\n logos,\n images,\n videos,\n total: media.length\n };\n}","/**\n * Utility functions for handling image proxy URLs\n */\n\n/**\n * Get proxied image URL for external images\n * If it's an external HTTP/HTTPS URL, proxy it through our API\n * Otherwise, return the original URL\n */\nexport function getProxiedImageUrl(imageUrl: string | null): string | null {\n if (!imageUrl) return null;\n \n // If it's an external HTTP/HTTPS URL, determine if we should proxy it\n if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) {\n // Skip if it's already our own proxy URL\n if (imageUrl.includes('/api/image-proxy')) {\n return imageUrl;\n }\n \n // Skip proxying for OpenMSP-owned domains (e.g., app.openmsp.ai, cdn.openmsp.ai, etc.)\n if (imageUrl.includes('openmsp.ai')) {\n return imageUrl;\n }\n \n return `/api/image-proxy?url=${encodeURIComponent(imageUrl)}`;\n }\n \n // Return local/relative images as-is\n return imageUrl;\n}\n\n/**\n * Check if an image URL needs to be proxied\n */\nexport function shouldProxyImage(imageUrl: string | null): boolean {\n if (!imageUrl) return false;\n \n // Proxy external HTTP/HTTPS URLs that aren't already proxied\n return (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) && \n !imageUrl.includes('/api/image-proxy');\n}","\"use client\"\n\nimport React from \"react\";\n\ninterface CategoryCardProps {\n name: string;\n description: string;\n categoryCount: number;\n productCount: number;\n icons?: React.ReactNode[];\n}\n\nexport function CategoryCard({ name, description, categoryCount, productCount, icons = [] }: CategoryCardProps) {\n return (\n <article className=\"bg-[#1A1A1A] border border-[#424242] rounded-[12px] p-8 flex flex-col min-w-0 box-border\">\n <div className=\"flex gap-6 mb-8 justify-center items-center\">\n {(icons.length > 0 ? icons : Array(10).fill(null)).map((icon, i) => (\n <div key={i} className=\"w-10 h-10 bg-gray-700 rounded flex items-center justify-center\">\n {icon}\n </div>\n ))}\n </div>\n <div className=\"flex-1 flex flex-col\">\n <h2 className=\"text-[24px] font-bold text-ods-text-primary mb-2 text-left leading-tight\">{name}</h2>\n <div className=\"text-[16px] text-ods-text-secondary mb-4 text-left\">\n {categoryCount} Categories • {productCount} Products\n </div>\n <div className=\"flex flex-row items-start\">\n <p className=\"text-[16px] text-ods-text-primary text-left leading-snug flex-1\">{description}</p>\n <button\n className=\"w-12 h-12 flex items-center justify-center border border-ods-border rounded-[6px] bg-transparent hover:bg-[#FFC008] transition-colors ml-4\"\n style={{ minWidth: 48, minHeight: 48 }}\n aria-label={`View ${name}`}\n >\n <svg width=\"24\" height=\"24\" fill=\"none\" stroke=\"#FAFAFA\" strokeWidth=\"2\" viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"/></svg>\n </button>\n </div>\n </div>\n </article>\n );\n} ","\"use client\"\n\nimport { Button } from \"./ui/button\"\nimport { VendorDisplayButton } from \"./vendor-display-button\"\nimport { useAuth } from \"./auth-stub\"\nimport { formatRelativeTime } from \"../utils/date-utils\"\nimport { UserSummary } from \"./user-summary-stub\"\n\ninterface CommentCardProps {\n comment: {\n id: string\n content: string\n title?: string\n type?: 'pro' | 'con'\n importance?: 'Critical' | 'Important' | 'Nice-to-have'\n createdAt: string\n vendor?: {\n id: number\n title: string\n slug: string\n logo: string | null\n category?: string | null\n }\n user?: {\n id: string\n name: string\n profilePicture: string | null\n msp?: {\n id: string | number\n name?: string | null\n icon_url?: string | null\n }\n }\n canDelete?: boolean\n }\n onViewProduct?: (vendorSlug: string) => void\n onDeleteComment?: (commentId: string) => void\n showVendorInfo?: boolean\n compact?: boolean\n context: 'profile' | 'vendor'\n}\n\nexport function CommentCard({ \n comment, \n onViewProduct, \n onDeleteComment, \n showVendorInfo = true,\n compact = false,\n context = 'profile'\n}: CommentCardProps) {\n const { user: currentUser } = useAuth()\n \n // Use unified date formatting function\n const formatActivityTime = (timestamp: string) => {\n return formatRelativeTime(timestamp);\n }\n\n // Check if current user can delete this comment\n const canUserDeleteComment = () => {\n // If not authenticated, can't delete\n if (!currentUser) return false\n \n // For profile context, use the existing canDelete prop (since it's the user's own comments)\n if (context === 'profile') {\n return comment.canDelete !== false\n }\n \n // For vendor context, check if current user is the comment creator\n if (context === 'vendor' && comment.user) {\n return currentUser.id === comment.user.id\n }\n \n return false\n }\n\n const showDeleteButton = canUserDeleteComment()\n\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-lg p-4 hover:border-[#FFC008] transition-all group overflow-hidden w-full max-w-full box-border\" style={{ maxWidth: '100%', wordBreak: 'break-word' }}>\n {/* Comment Header */}\n <div className=\"flex flex-col gap-3 mb-3 min-[420px]:flex-row min-[420px]:items-center min-[420px]:justify-between min-[420px]:gap-2 w-full\">\n {/* Row 1: Info + Timestamp */}\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n {context === 'profile' && comment.vendor ? (\n <>\n {/* Vendor Button - Icon + Name */}\n <VendorDisplayButton\n vendor={comment.vendor}\n onClick={onViewProduct || (() => {})}\n />\n \n {/* Timestamp */}\n <span className=\"font-['DM_Sans'] font-medium text-[14px] leading-[1.43] text-ods-text-secondary whitespace-nowrap flex-shrink-0\">\n {formatActivityTime(comment.createdAt)}\n </span>\n </>\n ) : context === 'vendor' && comment.user ? (\n <UserSummary\n name={comment.user.name}\n email=\"\"\n compact\n avatarSize={48}\n subtitle={formatActivityTime(comment.createdAt)}\n avatarUrl={comment.user.profilePicture ?? null}\n mspPreview={comment.user.msp ? {\n name: comment.user.msp.name ?? null,\n logoUrl: comment.user.msp.icon_url ?? null,\n seatCount: null,\n technicianCount: null,\n annualRevenue: null,\n } : null}\n showEditButton={false}\n authProviders={[]}\n />\n ) : null}\n </div>\n \n {/* Row 2: Action Buttons */}\n <div className=\"flex gap-2 justify-start min-[420px]:justify-end\">\n {/* Delete Button - shown when user can delete the comment */}\n {showDeleteButton && onDeleteComment && (\n <Button\n onClick={() => onDeleteComment(comment.id)}\n variant=\"outline\"\n size=\"icon\"\n className=\"text-ods-text-primary\"\n >\n <svg width=\"22\" height=\"24\" viewBox=\"0 0 22 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"text-ods-text-primary\">\n <path d=\"M18.6025 4.37939C19.221 4.43597 19.6768 4.98399 19.6206 5.60254L18.5176 17.7358C18.4492 18.4886 18.3924 19.1183 18.3052 19.6299C18.2155 20.1552 18.0809 20.6447 17.8101 21.1021C17.4444 21.7195 16.9245 22.2292 16.3042 22.583L16.0317 22.7251C15.5519 22.9533 15.0526 23.0438 14.5215 23.0854C14.0042 23.126 13.3727 23.125 12.6172 23.125H9.38281C8.62726 23.125 7.9958 23.126 7.47852 23.0854C7.01357 23.049 6.57289 22.975 6.14844 22.8042L5.96826 22.7251C5.32037 22.4169 4.76543 21.9454 4.35693 21.3599L4.18994 21.1021C3.91912 20.6447 3.78445 20.1552 3.69482 19.6299C3.65123 19.3743 3.61556 19.0894 3.58203 18.7744L3.48242 17.7358L2.37939 5.60254L2.375 5.48682C2.38099 4.91684 2.81768 4.43244 3.39746 4.37939C3.97776 4.32664 4.496 4.72462 4.60449 5.28467L4.62061 5.39746L5.72363 17.5322C5.79528 18.3203 5.84358 18.8475 5.9126 19.252C5.97923 19.6424 6.05232 19.8298 6.12646 19.9551L6.28467 20.1836C6.45963 20.3987 6.68118 20.5732 6.93359 20.6934L7.04639 20.7388C7.17478 20.7822 7.35781 20.8195 7.6543 20.8428C8.06325 20.8749 8.59186 20.875 9.38281 20.875H12.6172C13.4081 20.875 13.9367 20.8749 14.3457 20.8428C14.7409 20.8117 14.9349 20.7559 15.0664 20.6934L15.3066 20.5557C15.5369 20.4008 15.7309 20.1958 15.8735 19.9551C15.9477 19.8298 16.0208 19.6424 16.0874 19.252C16.1564 18.8475 16.2047 18.3203 16.2764 17.5322L17.3794 5.39746C17.436 4.77903 17.984 4.32316 18.6025 4.37939Z\" fill=\"currentColor\"/>\n <path d=\"M7.37451 15.9995V11C7.37451 10.3788 7.87842 9.87526 8.49951 9.875C9.12083 9.875 9.62451 10.3787 9.62451 11V15.9995C9.62451 16.6208 9.12083 17.1245 8.49951 17.1245C7.87842 17.1242 7.37451 16.6207 7.37451 15.9995ZM12.3755 15.9995V11C12.3755 10.3787 12.8792 9.875 13.5005 9.875C14.1216 9.87526 14.6255 10.3788 14.6255 11V15.9995C14.6255 16.6207 14.1216 17.1242 13.5005 17.1245C12.8792 17.1245 12.3755 16.6208 12.3755 15.9995ZM12.585 0.875C13.0174 0.879157 13.425 0.903301 13.8096 1.02881L14.1157 1.14746C14.4155 1.28159 14.6931 1.46221 14.9375 1.68359L15.0811 1.82568C15.4034 2.16872 15.6379 2.59872 15.8984 3.05469L16.6528 4.37451H20L20.1157 4.38037C20.6825 4.43826 21.1248 4.91747 21.125 5.49951C21.125 6.08174 20.6827 6.5607 20.1157 6.61865L20 6.62451H2C1.37868 6.62451 0.875 6.12083 0.875 5.49951C0.875264 4.87842 1.37884 4.37451 2 4.37451H5.34717L6.32129 2.6709C6.53952 2.29735 6.76267 1.95525 7.0625 1.68359L7.31738 1.47705C7.58262 1.28327 7.87687 1.1312 8.19043 1.02881L8.38525 0.974609C8.71199 0.896341 9.05467 0.878464 9.41504 0.875H12.585ZM9.85742 3.125C9.29191 3.125 9.08123 3.13201 8.97266 3.14844L8.88916 3.16748C8.83075 3.18655 8.77503 3.21301 8.72217 3.24365L8.57275 3.35205C8.53704 3.38448 8.50137 3.42629 8.42773 3.54102L8.05566 4.1709L7.93848 4.37451H14.0615L13.9443 4.1709C13.6645 3.68114 13.554 3.50141 13.4858 3.41504L13.4272 3.35205C13.3815 3.31062 13.3309 3.27443 13.2778 3.24365L13.1108 3.16748C13.019 3.13753 12.8946 3.125 12.1426 3.125H9.85742Z\" fill=\"currentColor\"/>\n </svg>\n </Button>\n )}\n </div>\n </div>\n \n {/* Comment Content */}\n <div className=\"space-y-2 w-full max-w-full overflow-hidden\" style={{ maxWidth: '100%', wordBreak: 'break-word' }}>\n {comment.title && (\n <div className={compact ? \"h-[20px] flex items-center\" : \"h-[24px] flex items-center\"}>\n <h4 className=\"text-h3 tracking-[-0.02em] text-ods-text-primary group-hover:text-ods-accent transition-colors line-clamp-1\" style={{ \n wordBreak: 'break-word', \n overflowWrap: 'break-word', \n maxWidth: '100%',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: 1\n }}>\n {comment.title}\n </h4>\n </div>\n )}\n <div className={compact ? \"h-[60px] flex items-center\" : \"h-[72px] flex items-center\"}>\n <p className=\"text-h4 text-ods-text-primary line-clamp-3\" style={{ \n wordBreak: 'break-word', \n overflowWrap: 'break-word', \n maxWidth: '100%',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: 3\n }}>\n {comment.content}\n </p>\n </div>\n </div>\n </div>\n )\n}","\"use client\"\n\nimport { Button } from \"./ui/button\"\nimport { getVendorLogo, VendorWithMedia } from \"../utils/vendor-media-stub\"\nimport Image from \"../embed-shims/next-image\"\nimport { getProxiedImageUrl } from \"../utils/image-proxy-stub\"\n\ninterface VendorDisplayButtonProps {\n vendor: VendorWithMedia\n onClick?: (vendorSlug: string) => void\n variant?: 'default' | 'compact'\n externalUrl?: string\n}\n\nexport function VendorDisplayButton({ vendor, onClick, variant = 'default', externalUrl }: VendorDisplayButtonProps) {\n const handleClick = () => {\n if (externalUrl && vendor.slug) {\n // Use environment variable or fallback to provided URL\n const baseUrl = process.env.NEXT_PUBLIC_OPENMSP_URL || externalUrl\n window.open(`${baseUrl}/vendor/${vendor.slug}`, '_blank', 'noopener,noreferrer')\n } else if (onClick && vendor.slug) {\n onClick(vendor.slug)\n }\n }\n\n // Compact variant for flamingo-teaser\n if (variant === 'compact') {\n const logoUrl = getVendorLogo(vendor)\n \n return (\n <button \n onClick={handleClick}\n className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-[#1A1A1A] border border-[#2A2A2A] hover:border-[#FFC008]/50 transition-colors\"\n >\n {logoUrl ? (\n <div className=\"w-5 h-5 rounded overflow-hidden flex-shrink-0\">\n <Image\n src={getProxiedImageUrl(logoUrl) || logoUrl}\n alt={`${vendor.title} logo`}\n width={20}\n height={20}\n className=\"w-full h-full object-cover\"\n />\n </div>\n ) : (\n <div className=\"w-5 h-5 rounded bg-[#2A2A2A] flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#666666] text-[10px] font-medium\">\n {vendor.title.charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n <span className=\"text-sm font-medium text-white\">\n {vendor.title}\n </span>\n </button>\n )\n }\n\n // Default variant\n return (\n <button \n onClick={handleClick}\n className=\"flex items-center gap-2 bg-ods-card border border-ods-border rounded-lg py-2 px-3 hover:border-[#FFC008] transition-colors max-w-full overflow-hidden\"\n >\n {getVendorLogo(vendor) ? (\n <div className=\"w-8 h-8 bg-ods-card border border-ods-border rounded-lg flex items-center justify-center flex-shrink-0\">\n <Image\n src={getProxiedImageUrl(getVendorLogo(vendor)!) || getVendorLogo(vendor)!}\n alt={`${vendor.title} logo`}\n width={24}\n height={24}\n className=\"rounded object-cover\"\n />\n </div>\n ) : (\n <div className=\"w-8 h-8 bg-ods-border border border-ods-border rounded-lg flex items-center justify-center flex-shrink-0\">\n <span className=\"text-ods-text-primary text-[12px] font-medium\">\n {vendor.title.charAt(0)}\n </span>\n </div>\n )}\n <span className=\"text-h4 text-ods-text-primary truncate min-w-0\" title={vendor.title}>\n {vendor.title}\n </span>\n </button>\n )\n} ","\"use client\"\n\n// Stub auth provider and hooks\nimport { createContext, useContext } from 'react';\n\ninterface AuthContextType {\n user: any | null;\n isLoading: boolean;\n}\n\nconst AuthContext = createContext<AuthContextType>({\n user: null,\n isLoading: false,\n});\n\n// Global reference to real auth hook when available\nlet realUseAuth: (() => any) | null = null;\n\nexport function setRealAuthHook(authHook: () => any) {\n realUseAuth = authHook;\n}\n\nexport function useAuth() {\n // Use real auth hook if available (when used in main app)\n if (realUseAuth) {\n try {\n const realAuth = realUseAuth();\n if (realAuth && realAuth.user) {\n return realAuth;\n }\n } catch (error) {\n // Fallback if real auth fails\n }\n }\n\n // Fallback mock user for UI kit context\n return {\n user: { id: 'mock-user-id', name: 'Mock User' },\n isLoading: false\n };\n}\n\nexport function AuthProvider({ children }: { children: React.ReactNode }) {\n return (\n <AuthContext.Provider value={{ user: { id: 'mock-user-id', name: 'Mock User' }, isLoading: false }}>\n {children as any}\n </AuthContext.Provider>\n );\n}","\"use client\";\n\nimport Image from \"../embed-shims/next-image\";\nimport { getProxiedImageUrl } from \"../utils/image-proxy-stub\";\n\ninterface Props {\n name: string;\n email: string;\n avatarUrl?: string | null;\n /** Optional subtitle text (e.g., relative time) to replace email line */\n subtitle?: string | null;\n /** Authentication provider names (e.g. [\"google\", \"microsoft\"]) */\n authProviders?: string[];\n /** Show an outline Edit Profile button that routes to editHref */\n showEditButton?: boolean;\n /** Path to navigate when Edit button clicked (default \"/profile/edit\") */\n editHref?: string;\n /** Optional userId/profile passed through to EditProfileButton (for analytics) */\n userId?: string;\n profileData?: any;\n /** Optional MSP preview info to render below email */\n mspPreview?: {\n name?: string | null;\n seatCount?: number | null;\n technicianCount?: number | null;\n annualRevenue?: number | null;\n logoUrl?: string | null;\n } | null;\n /** Compact mode (avatar + name row, used in comment headers) */\n compact?: boolean;\n /** Avatar size in px for compact mode (defaults 40) */\n avatarSize?: number;\n\n /** When true, replaces the static avatar with the ProfilePhotoUpload widget */\n editablePhoto?: boolean;\n /** Required when editablePhoto=true – receives new photo URL */\n onPhotoChange?: (url: string | null) => void;\n}\n\nconst getAuthProviderIcon = (provider: string) => {\n const p = provider.toLowerCase();\n switch (p) {\n case \"google\":\n return <Image src=\"/icons/google-logo.svg\" alt=\"Google\" width={16} height={16} className=\"w-4 h-4\" />;\n case \"microsoft\":\n case \"azure\":\n return <Image src=\"/icons/microsoft-logo.svg\" alt=\"Microsoft\" width={16} height={16} className=\"w-4 h-4\" />;\n case \"slack\":\n case \"slack_oidc\":\n return <div className=\"w-4 h-4 bg-ods-text-secondary rounded-full\" />;\n default:\n return <div className=\"w-4 h-4 bg-ods-text-secondary rounded-full\" />;\n }\n};\n\n// Abbreviate large numbers: 1 200 → 1.2K , 15 000 → 15K , 2 000 000 → 2M\nconst formatNumber = (n: number) => {\n if (n >= 1_000_000_000) {\n const value = n / 1_000_000_000;\n return `${Number.isInteger(value) ? value.toFixed(0) : value.toFixed(1)}B`;\n }\n if (n >= 1_000_000) {\n const value = n / 1_000_000;\n return `${Number.isInteger(value) ? value.toFixed(0) : value.toFixed(1)}M`;\n }\n if (n >= 1_000) {\n return `${Math.round(n / 1_000)}K`;\n }\n return n.toLocaleString();\n};\n\nexport function UserSummary({\n name,\n email,\n subtitle = null,\n avatarUrl,\n authProviders,\n showEditButton = false,\n editHref = \"/profile/edit\",\n userId,\n profileData,\n mspPreview,\n compact = false,\n avatarSize = 40,\n editablePhoto = false,\n onPhotoChange,\n}: Props) {\n // Compact variant: minimal horizontal row\n if (compact) {\n return (\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"relative shrink-0\">\n {avatarUrl ? (\n <Image src={getProxiedImageUrl(avatarUrl) ?? avatarUrl} alt={name} width={avatarSize} height={avatarSize} className=\"object-cover rounded-lg\" />\n ) : (\n <div className=\"rounded-lg bg-ods-accent flex items-center justify-center text-ods-text-on-accent font-heading font-bold\" style={{ width: avatarSize, height: avatarSize }}>\n {name.split(' ').map((n: string) => n.charAt(0)).join('').slice(0, 2)}\n </div>\n )}\n {mspPreview && mspPreview.logoUrl && (\n <Image src={getProxiedImageUrl(mspPreview.logoUrl) ?? mspPreview.logoUrl} alt={mspPreview.name || 'MSP'} width={24} height={24} className=\"absolute -bottom-1 -right-1 size-6 rounded-full object-cover select-none z-10\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"text-h4 text-ods-text-primary truncate\"\n title={mspPreview?.name ? `${name} • ${mspPreview.name}` : name}\n >\n {name}\n {mspPreview?.name && (\n <span className=\"text-ods-text-secondary\"> • {mspPreview.name}</span>\n )}\n </p>\n <p className=\"text-h6 text-ods-text-secondary truncate\" title={subtitle && subtitle.trim().length > 0 ? subtitle : (email && email.trim().length > 0 ? email : '\\u00A0')}>\n {subtitle && subtitle.trim().length > 0 ? subtitle : (email && email.trim().length > 0 ? email : '\\u00A0')}\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4 w-full\">\n {/* Header Row */}\n <div className=\"flex gap-6 w-full items-start\">\n {/* Avatar with badge wrapper */}\n <div className=\"relative shrink-0 h-24 w-24 overflow-visible\">\n {avatarUrl ? (\n <Image src={getProxiedImageUrl(avatarUrl) ?? avatarUrl} alt={name} width={96} height={96} className=\"object-cover rounded-full\" />\n ) : (\n <div className=\"rounded-full bg-ods-card border border-ods-border w-full h-full flex items-center justify-center text-3xl text-ods-text-secondary font-heading\">\n {name.charAt(0).toUpperCase()}\n </div>\n )}\n\n {/* MSP logo badge (show only when MSP exists) */}\n {mspPreview && (\n <div className=\"absolute -bottom-1 -right-1 size-10 rounded-full bg-ods-bg ring-2 ring-ods-border overflow-hidden flex items-center justify-center select-none\">\n {mspPreview.logoUrl ? (\n <Image\n src={getProxiedImageUrl(mspPreview.logoUrl) ?? mspPreview.logoUrl}\n alt={mspPreview.name || 'MSP Logo'}\n width={40}\n height={40}\n className=\"object-cover\"\n />\n ) : (\n <span className=\"text-ods-text-primary font-heading text-sm font-bold\">\n {mspPreview.name?.charAt(0).toUpperCase() || '?'}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Info + actions block */}\n <div className=\"flex-1 grid grid-cols-[1fr_auto] gap-4\">\n {/* LEFT : text stack */}\n <div className=\"min-h-[6rem] flex flex-col justify-center space-y-3 truncate\">\n <p className=\"text-h2 text-ods-text-primary leading-none truncate\" title={name}>\n {name}\n </p>\n <p className=\"text-h4 text-ods-text-secondary break-all truncate\" title={(subtitle && subtitle.trim().length > 0) ? subtitle : (email && email.trim().length > 0 ? email : '\\u00A0')}>\n {(subtitle && subtitle.trim().length > 0) ? subtitle : (email && email.trim().length > 0 ? email : '\\u00A0')}\n </p>\n {mspPreview && (() => {\n const mspSegments = [\n mspPreview.name ?? '—',\n typeof mspPreview.seatCount === 'number'\n ? `${formatNumber(mspPreview.seatCount)} Seats`\n : null,\n typeof mspPreview.technicianCount === 'number'\n ? `${formatNumber(mspPreview.technicianCount)} Technicians`\n : null,\n typeof mspPreview.annualRevenue === 'number'\n ? `$${formatNumber(mspPreview.annualRevenue)}`\n : null,\n ].filter(Boolean) as string[];\n const mspTitle = mspSegments.join(' • ');\n return (\n <p className=\"text-h6 text-ods-text-primary truncate\" title={mspTitle}>\n {/* Build string with separators */}\n {mspSegments\n .flatMap((txt, idx) => (idx === 0 ? [txt] : [' • ', txt]))\n .map((seg, idx) => (\n <span key={idx} className={seg === ' • ' ? 'text-ods-text-secondary' : ''}>{seg}</span>\n ))}\n </p>\n );\n })()}\n </div>\n\n {/* RIGHT (desktop) */}\n {(authProviders?.length || showEditButton) && (\n <div className=\"hidden md:flex flex-col items-end justify-between flex-shrink-0 min-h-[6rem]\">\n {/* top part */}\n {authProviders && authProviders.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-ods-text-secondary whitespace-nowrap select-none\">\n Authorized by\n </span>\n <div className=\"flex items-center gap-2\">\n {authProviders.map((p) => (\n <div key={p} className=\"flex items-center justify-center w-4 h-4\">\n {getAuthProviderIcon(p)}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* bottom part - Edit button would go here */}\n {showEditButton && (\n <div className=\"text-xs text-ods-text-secondary\">Edit Profile</div>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Mobile row: Authorized by left, Edit btn right */}\n {(authProviders?.length || showEditButton) && (\n <div className=\"flex md:hidden items-center justify-between w-full gap-4\">\n {authProviders && authProviders.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-ods-text-secondary whitespace-nowrap select-none\">Authorized by</span>\n <div className=\"flex items-center gap-2\">\n {authProviders.map((p) => (\n <div key={p} className=\"flex items-center justify-center w-4 h-4\">\n {getAuthProviderIcon(p)}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {showEditButton && (\n <div className=\"text-xs text-ods-text-secondary\">Edit Profile</div>\n )}\n </div>\n )}\n </div>\n );\n}","\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface ContentLoadingContainerProps {\n /**\n * Whether the content is currently loading\n */\n isLoading: boolean\n /**\n * The actual content to display when not loading\n */\n children: ReactNode\n /**\n * The skeleton component to show during loading\n */\n skeletonComponent: ReactNode\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Minimum height to prevent layout jumps\n */\n minHeight?: string\n /**\n * Loading overlay opacity (0-1)\n */\n loadingOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n}\n\n/**\n * ContentLoadingContainer\n * \n * A unified loading container that wraps card grids and manages loading states \n * while keeping UI controls persistent. This component:\n * \n * - Shows skeleton loading only in content area\n * - Maintains consistent layout dimensions during loading\n * - Provides smooth transitions between loading and loaded states\n * - Prevents layout jumps by preserving container height\n * - Supports customizable skeleton components for different content types\n * \n * Usage:\n * ```tsx\n * <ContentLoadingContainer\n * isLoading={isLoadingVendors}\n * skeletonComponent={<CardSkeletonGrid variant=\"vendor\" count={12} />}\n * minHeight=\"min-h-[800px]\"\n * >\n * <VendorGrid vendors={vendors} />\n * </ContentLoadingContainer>\n * ```\n */\nexport function ContentLoadingContainer({\n isLoading,\n children,\n skeletonComponent,\n className,\n minHeight = \"min-h-[300px] md:min-h-[800px]\",\n loadingOpacity = 1,\n transitionDuration = 300,\n}: ContentLoadingContainerProps) {\n return (\n <div \n className={cn(\n \"relative w-full transition-all ease-in-out\",\n minHeight,\n className\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"region\"\n aria-label={isLoading ? \"Loading content\" : \"Content loaded\"}\n aria-live=\"polite\"\n >\n {/* Loading Skeleton Overlay */}\n {isLoading && (\n <div \n className=\"absolute inset-0 z-10 bg-[#161616]\"\n style={{ \n opacity: loadingOpacity,\n transition: `opacity ${transitionDuration}ms ease-in-out`\n }}\n role=\"status\"\n aria-label=\"Loading content\"\n >\n {skeletonComponent}\n </div>\n )}\n\n {/* Actual Content */}\n <div \n className={cn(\n \"relative transition-opacity ease-in-out\",\n isLoading && \"opacity-0\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n aria-hidden={isLoading}\n >\n {children}\n </div>\n </div>\n )\n}\n\n/**\n * Hook for managing content loading states with common patterns\n */\nexport function useContentLoading(isLoading: boolean) {\n const containerProps = {\n 'aria-busy': isLoading,\n 'data-loading': isLoading\n }\n\n const getSkeletonCount = (contentType: 'vendor' | 'blog') => {\n return contentType === 'vendor' ? 12 : 6\n }\n\n const getMinHeight = (contentType: 'vendor' | 'blog') => {\n // Vendor cards are typically taller, need more space\n return contentType === 'vendor' \n ? \"min-h-[400px] md:min-h-[900px]\" \n : \"min-h-[300px] md:min-h-[800px]\"\n }\n\n return {\n containerProps,\n getSkeletonCount,\n getMinHeight\n }\n} ","\"use client\";\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { useDynamicTheming } from '../hooks/use-dynamic-theming';\nimport { useThemeAware } from '../hooks/use-theme-aware';\n\ninterface DynamicSkeletonProps {\n /**\n * Type of skeleton animation\n */\n animation?: 'pulse' | 'shimmer' | 'wave' | 'static';\n \n /**\n * Skeleton variant based on content type\n */\n variant?: 'text' | 'avatar' | 'card' | 'button' | 'image' | 'custom';\n \n /**\n * Size preset for common elements\n */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n \n /**\n * Custom dimensions\n */\n width?: string | number;\n height?: string | number;\n \n /**\n * Number of lines for text skeleton\n */\n lines?: number;\n \n /**\n * Platform-aware styling\n */\n platformAware?: boolean;\n \n /**\n * Accessibility enhancements\n */\n includeAriaLabel?: boolean;\n \n /**\n * Custom CSS classes\n */\n className?: string;\n \n /**\n * Child elements (for container skeletons)\n */\n children?: React.ReactNode;\n}\n\nconst sizePresets = {\n sm: { width: '4rem', height: '1rem' },\n md: { width: '8rem', height: '1.5rem' },\n lg: { width: '12rem', height: '2rem' },\n xl: { width: '16rem', height: '2.5rem' }\n};\n\nconst variantStyles = {\n text: 'rounded',\n avatar: 'rounded-full aspect-square',\n card: 'rounded-lg',\n button: 'rounded-md',\n image: 'rounded-lg aspect-video',\n custom: ''\n};\n\nexport function DynamicSkeleton({\n animation = 'shimmer',\n variant = 'text',\n size = 'md',\n width,\n height,\n lines = 1,\n platformAware = true,\n includeAriaLabel = true,\n className,\n children\n}: DynamicSkeletonProps) {\n const { platform, isDark, accentColor } = useThemeAware();\n\n // Calculate dimensions\n const dimensions = React.useMemo(() => {\n if (width || height) {\n return {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height\n };\n }\n \n if (variant === 'avatar') {\n const avatarSize = sizePresets[size].height;\n return { width: avatarSize, height: avatarSize };\n }\n \n return sizePresets[size];\n }, [width, height, size, variant]);\n\n // Platform-specific skeleton colors\n const platformStyles = React.useMemo(() => {\n if (!platformAware) return {};\n\n const baseOpacity = isDark ? 0.1 : 0.15;\n const accentOpacity = isDark ? 0.05 : 0.08;\n\n return {\n '--skeleton-base': `color-mix(in srgb, var(--color-bg-skeleton) ${baseOpacity * 100}%, transparent)`,\n '--skeleton-highlight': `color-mix(in srgb, ${accentColor} ${accentOpacity * 100}%, var(--color-bg-skeleton))`,\n '--skeleton-accent': `color-mix(in srgb, ${accentColor} 10%, transparent)`\n } as React.CSSProperties;\n }, [platformAware, isDark, accentColor]);\n\n // Animation classes\n const animationClasses = {\n pulse: 'animate-pulse',\n shimmer: 'ods-loading-dynamic',\n wave: 'skeleton-wave',\n static: ''\n };\n\n // Base skeleton classes\n const baseClasses = cn(\n 'bg-ods-skeleton',\n variantStyles[variant],\n animationClasses[animation],\n platformAware && `skeleton-platform-${platform}`,\n className\n );\n\n // For text skeletons with multiple lines\n if (variant === 'text' && lines > 1) {\n return (\n <div \n className=\"space-y-2\"\n style={platformStyles}\n role=\"status\"\n aria-label={includeAriaLabel ? \"Loading content...\" : undefined}\n >\n {Array.from({ length: lines }, (_, index) => (\n <div\n key={index}\n className={cn(\n baseClasses,\n index === lines - 1 && 'w-3/4' // Last line shorter\n )}\n style={{\n ...dimensions,\n width: index === lines - 1 ? '75%' : dimensions.width\n }}\n />\n ))}\n </div>\n );\n }\n\n // Single skeleton element\n return (\n <div\n className={baseClasses}\n style={{ ...dimensions, ...platformStyles }}\n role=\"status\"\n aria-label={includeAriaLabel ? \"Loading content...\" : undefined}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Pre-configured skeleton for common UI patterns\n */\nexport const SkeletonPresets = {\n /**\n * Card skeleton with header, content, and actions\n */\n Card: ({ showActions = true, showImage = false }: { showActions?: boolean; showImage?: boolean }) => (\n <div className=\"bg-ods-card border border-ods-border rounded-lg p-6 space-y-4\">\n {showImage && (\n <DynamicSkeleton variant=\"image\" className=\"w-full h-40\" />\n )}\n <div className=\"space-y-2\">\n <DynamicSkeleton variant=\"text\" size=\"lg\" />\n <DynamicSkeleton variant=\"text\" lines={2} size=\"md\" />\n </div>\n {showActions && (\n <div className=\"flex gap-2 pt-2\">\n <DynamicSkeleton variant=\"button\" width=\"6rem\" height=\"2.5rem\" />\n <DynamicSkeleton variant=\"button\" width=\"4rem\" height=\"2.5rem\" />\n </div>\n )}\n </div>\n ),\n\n /**\n * User profile skeleton\n */\n Profile: () => (\n <div className=\"flex items-start gap-4 p-4\">\n <DynamicSkeleton variant=\"avatar\" size=\"lg\" />\n <div className=\"flex-1 space-y-2\">\n <DynamicSkeleton variant=\"text\" size=\"lg\" width=\"8rem\" />\n <DynamicSkeleton variant=\"text\" size=\"sm\" width=\"12rem\" />\n <DynamicSkeleton variant=\"text\" lines={2} size=\"md\" />\n </div>\n </div>\n ),\n\n /**\n * Navigation skeleton\n */\n Navigation: ({ items = 5 }: { items?: number }) => (\n <nav className=\"space-y-2 p-4\">\n {Array.from({ length: items }, (_, index) => (\n <div key={index} className=\"flex items-center gap-3\">\n <DynamicSkeleton variant=\"avatar\" size=\"sm\" />\n <DynamicSkeleton variant=\"text\" size=\"md\" />\n </div>\n ))}\n </nav>\n ),\n\n /**\n * Table skeleton\n */\n Table: ({ rows = 5, columns = 4 }: { rows?: number; columns?: number }) => (\n <div className=\"space-y-3\">\n {/* Header */}\n <div className=\"grid gap-4\" style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}>\n {Array.from({ length: columns }, (_, index) => (\n <DynamicSkeleton key={`header-${index}`} variant=\"text\" size=\"md\" />\n ))}\n </div>\n {/* Rows */}\n {Array.from({ length: rows }, (_, rowIndex) => (\n <div key={`row-${rowIndex}`} className=\"grid gap-4\" style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}>\n {Array.from({ length: columns }, (_, colIndex) => (\n <DynamicSkeleton key={`cell-${rowIndex}-${colIndex}`} variant=\"text\" size=\"sm\" />\n ))}\n </div>\n ))}\n </div>\n ),\n\n /**\n * Vendor grid skeleton (specific to the app)\n */\n VendorGrid: ({ items = 6 }: { items?: number }) => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: items }, (_, index) => (\n <div key={index} className=\"bg-ods-card border border-ods-border rounded-lg p-4 space-y-3\">\n <div className=\"flex items-center gap-3\">\n <DynamicSkeleton variant=\"avatar\" size=\"md\" />\n <div className=\"flex-1\">\n <DynamicSkeleton variant=\"text\" size=\"md\" width=\"6rem\" />\n <DynamicSkeleton variant=\"text\" size=\"sm\" width=\"4rem\" className=\"mt-1\" />\n </div>\n </div>\n <DynamicSkeleton variant=\"text\" lines={2} size=\"sm\" />\n <div className=\"flex gap-2\">\n <DynamicSkeleton variant=\"custom\" width=\"3rem\" height=\"1.25rem\" className=\"rounded-full\" />\n <DynamicSkeleton variant=\"custom\" width=\"4rem\" height=\"1.25rem\" className=\"rounded-full\" />\n </div>\n </div>\n ))}\n </div>\n ),\n\n /**\n * Blog post skeleton\n */\n BlogPost: () => (\n <article className=\"space-y-6\">\n <div className=\"space-y-2\">\n <DynamicSkeleton variant=\"text\" size=\"xl\" width=\"75%\" />\n <div className=\"flex gap-4 text-sm\">\n <DynamicSkeleton variant=\"text\" size=\"sm\" width=\"4rem\" />\n <DynamicSkeleton variant=\"text\" size=\"sm\" width=\"6rem\" />\n </div>\n </div>\n <DynamicSkeleton variant=\"image\" className=\"w-full h-64\" />\n <div className=\"space-y-3\">\n {Array.from({ length: 4 }, (_, index) => (\n <DynamicSkeleton key={index} variant=\"text\" lines={3} size=\"md\" />\n ))}\n </div>\n </article>\n )\n};\n\n/**\n * Platform-aware loading container that shows different skeletons based on platform\n */\nexport function PlatformSkeletonContainer({ \n children, \n isLoading, \n skeletonType = 'Card',\n skeletonProps = {}\n}: {\n children: React.ReactNode;\n isLoading: boolean;\n skeletonType?: keyof typeof SkeletonPresets;\n skeletonProps?: any;\n}) {\n const { platform } = useThemeAware();\n\n if (!isLoading) {\n return <>{children}</>;\n }\n\n const SkeletonComponent = SkeletonPresets[skeletonType];\n\n return (\n <div className={`platform-skeleton skeleton-${platform}`}>\n <SkeletonComponent {...skeletonProps} />\n </div>\n );\n}\n\n/**\n * Enhanced skeleton with progressive enhancement\n */\nexport function ProgressiveSkeleton({\n stages = ['basic', 'detailed', 'interactive'],\n currentStage = 0,\n children,\n ...props\n}: DynamicSkeletonProps & {\n stages?: string[];\n currentStage?: number;\n}) {\n const { platform } = useThemeAware();\n\n // Show more detailed skeleton as loading progresses\n const stageConfig = {\n 0: { animation: 'pulse' as const, variant: 'text' as const },\n 1: { animation: 'shimmer' as const, variant: 'card' as const },\n 2: { animation: 'wave' as const, variant: 'custom' as const }\n };\n\n const config = stageConfig[currentStage as keyof typeof stageConfig] || stageConfig[0];\n\n return (\n <DynamicSkeleton\n {...props}\n {...config}\n className={cn(\n props.className,\n `skeleton-stage-${currentStage}`,\n `skeleton-platform-${platform}`\n )}\n >\n {children}\n </DynamicSkeleton>\n );\n}","// Stub implementation for useThemeAware hook\n\nexport function useThemeAware() {\n return {\n themeColors: {},\n platformContext: 'default',\n isDarkMode: false,\n platform: 'default',\n isDark: false,\n accentColor: '#FFC008'\n };\n}","\"use client\"\n\nimport React, { useRef, useState, useEffect, useCallback } from 'react'\nimport { ChevronButton } from './ui/chevron-button'\nimport { cn } from \"../utils/cn\"\n\nexport interface FaqItem {\n id: number | string\n question: string\n answer: string\n}\n\ninterface FaqAccordionProps {\n items: FaqItem[]\n defaultOpenIds?: (number | string)[]\n}\n\n// Utility to measure scrollHeight outside render cycle\nconst useMeasuredHeight = (isOpen: boolean) => {\n const ref = useRef<HTMLDivElement | null>(null)\n const [maxHeight, setMaxHeight] = useState<string>('0px')\n\n const measure = useCallback(() => {\n if (ref.current) {\n const height = ref.current.scrollHeight\n setMaxHeight(`${height}px`)\n }\n }, [])\n\n // Update height only when section is open\n useEffect(() => {\n if (isOpen) {\n measure()\n } else {\n setMaxHeight('0px')\n }\n }, [isOpen, measure])\n\n return { ref, maxHeight }\n}\n\nexport function FaqAccordion({ items, defaultOpenIds = [] }: FaqAccordionProps) {\n const [openSet, setOpenSet] = useState<Set<string | number>>(new Set(defaultOpenIds))\n\n const toggle = (id: string | number) => {\n setOpenSet(prev => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n\n return (\n <div className=\"rounded-3xl border border-ods-border divide-y divide-[#3A3A3A] bg-ods-card overflow-hidden\">\n {items.map(item => {\n const isOpen = openSet.has(item.id)\n const { ref, maxHeight } = useMeasuredHeight(isOpen)\n\n return (\n <div\n key={item.id}\n className={cn('group transition-colors hover:bg-[#1E1E1E]', isOpen ? 'bg-[#161616]' : 'bg-transparent')}\n >\n {/* Header */}\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => toggle(item.id)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggle(item.id);\n }\n }}\n aria-expanded={isOpen}\n className=\"flex w-full items-center justify-between px-6 md:px-8 py-6 text-left focus:outline-none transition-colors cursor-pointer\"\n >\n <h3>\n {item.question}\n </h3>\n <div className=\"flex-shrink-0\">\n <ChevronButton\n size=\"md\"\n isExpanded={isOpen}\n backgroundColor=\"transparent\"\n borderColor=\"#3A3A3A\"\n />\n </div>\n </div>\n {/* Content wrapper with max-height animation */}\n <div\n style={{ maxHeight, transition: 'max-height 0.35s ease-in-out, opacity 0.35s ease-in-out', opacity: isOpen ? 1 : 0 }}\n className=\"overflow-hidden group-hover:bg-[#1E1E1E]/30\"\n >\n <div ref={ref} className=\"px-6 md:px-8 pb-6 text-ods-text-primary text-h4\">\n {item.answer}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )\n} ","\"use client\"\n\nimport { cn } from \"../utils/cn\"\nimport { X } from \"lucide-react\"\n\n// Unified FilterChip component for consistent styling across the application\ninterface FilterChipProps {\n id: string\n label: string\n variant?: 'selected' | 'unselected' | 'category' | 'subcategory' | 'tag' | 'info'\n size?: 'sm' | 'md'\n removable?: boolean\n onRemove?: () => void\n onClick?: () => void\n disabled?: boolean\n className?: string\n}\n\nexport function FilterChip({\n id,\n label,\n variant = 'unselected',\n size = 'md',\n removable = false,\n onRemove,\n onClick,\n disabled = false,\n className\n}: FilterChipProps) {\n const baseClasses = cn(\n \"inline-flex items-center justify-center rounded-full font-medium transition-all duration-200 shrink-0 group cursor-pointer\",\n \"hover:shadow-md hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2\",\n \"font-['DM_Sans'] leading-none\",\n // Size variants - enhanced mobile sizing for better visibility and touch targets\n size === 'sm' \n ? \"text-sm pl-3 pr-3 py-1 md:text-sm md:pl-3 md:pr-3 md:py-1\"\n : \"text-sm pl-3 pr-3 py-2 md:text-sm md:pl-3 md:pr-3 md:py-2\",\n // Add gap only if removable (has X button) - placed after text\n removable && \"gap-1 md:gap-1\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed hover:scale-100 hover:shadow-none\"\n )\n\n const variantClasses = {\n // Legacy variants (for backward compatibility)\n selected: \"bg-[#2A2A2A] text-[#E8E8E8] border border-[#FFC008] hover:bg-ods-border hover:border-[#FFD951] focus:ring-[#FFC008] focus:ring-offset-[#161616]\",\n unselected: \"bg-[#2A2A2A] text-[#CCCCCC] border border-[#4A4A4A] hover:bg-ods-border hover:border-[#5A5A5A] hover:text-ods-text-primary focus:ring-[#4A4A4A] focus:ring-offset-[#161616]\",\n info: \"bg-ods-border text-[#CCCCCC] border border-[#5A5A5A] cursor-default hover:scale-100 hover:shadow-none focus:ring-[#5A5A5A] focus:ring-offset-[#161616]\",\n \n // New subtle selected variants - same backgrounds/text, only border colors different\n category: \"bg-[#2A2A2A] text-[#E8E8E8] border border-[#FFC008]/40 hover:bg-ods-border hover:border-[#FFC008]/60 hover:text-ods-text-primary focus:ring-[#FFC008]/40 focus:ring-offset-[#161616]\",\n subcategory: \"bg-[#2A2A2A] text-[#E8E8E8] border border-[#FFC008]/60 hover:bg-ods-border hover:border-[#FFC008]/80 hover:text-ods-text-primary focus:ring-[#FFC008]/60 focus:ring-offset-[#161616]\",\n tag: \"bg-[#2A2A2A] text-ods-text-primary border border-[#FFC008]/20 hover:bg-ods-border hover:border-[#FFC008]/30 hover:text-ods-text-primary focus:ring-[#FFC008]/20 focus:ring-offset-[#161616]\",\n }\n\n return (\n <div\n className={cn(baseClasses, variantClasses[variant], className)}\n onClick={disabled ? undefined : (e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick?.();\n }}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick && !disabled ? 0 : undefined}\n aria-pressed={onClick && variant === 'selected' ? true : undefined}\n aria-disabled={disabled}\n >\n <span className={cn(\n \"truncate font-['DM_Sans'] font-medium leading-none text-center\",\n size === 'sm' ? \"max-w-[100px] md:max-w-[120px]\" : \"max-w-[120px] md:max-w-[140px]\"\n )} title={label}>\n {label}\n </span>\n {removable && onRemove && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) onRemove()\n }}\n disabled={disabled}\n className={cn(\n \"flex items-center justify-center w-4 h-4 md:w-4 md:h-4 rounded-full\",\n \"transition-all duration-200 shrink-0\",\n \"group-hover:scale-110 focus:outline-none focus:ring-2 focus:ring-offset-1\",\n variant === 'category'\n ? \"hover:bg-[#4A4A4A] text-[#E8E8E8] focus:ring-[#E8E8E8] focus:ring-offset-[#2A2A2A]\"\n : variant === 'subcategory'\n ? \"hover:bg-[#4A4A4A] text-[#E8E8E8] focus:ring-[#E8E8E8] focus:ring-offset-[#2A2A2A]\"\n : variant === 'tag'\n ? \"hover:bg-[#4A4A4A] text-[#E8E8E8] focus:ring-[#E8E8E8] focus:ring-offset-[#2A2A2A]\"\n : \"hover:bg-[#4A4A4A] text-[#E8E8E8] focus:ring-[#E8E8E8] focus:ring-offset-[#2A2A2A]\",\n disabled && \"opacity-50 cursor-not-allowed hover:scale-100\"\n )}\n aria-label={`Remove ${label} filter`}\n tabIndex={disabled ? -1 : 0}\n >\n <X className=\"h-2 w-2 md:h-2 md:w-2\" />\n </button>\n )}\n </div>\n )\n} ","\"use client\"\n\nimport { Suspense } from \"react\"\nimport { Skeleton } from \"./ui/skeleton\"\nimport { SocialIconRow } from \"./social-icon-row\"\n\ninterface FooterLink {\n href: string\n label: string\n}\n\ninterface FooterSection {\n title: string\n links: FooterLink[]\n}\n\ninterface FooterConfig {\n name: string\n legalName: string\n description: string\n logo?: React.ReactNode\n sections: FooterSection[]\n customComponent?: React.ReactNode // Inject any custom component here\n nameElement?: React.ReactNode // Custom element for platform name with specific font\n hideSocialRow?: boolean // Hide the default social row\n rightColumnContent?: React.ReactNode // Custom content for right column\n belowDescriptionContent?: React.ReactNode // Custom content below description\n moveDescriptionToRight?: boolean // Move description and belowDescriptionContent to right column\n keepBelowDescriptionLeft?: boolean // Keep belowDescriptionContent on left even when moveDescriptionToRight is true\n backgroundColor?: string // ODS background color (e.g., 'bg-ods-bg-card', 'bg-ods-system-greys-black')\n social?: {\n github?: string\n twitter?: string\n linkedin?: string\n reddit?: string\n youtube?: string\n instagram?: string\n facebook?: string\n discord?: string\n telegram?: string\n whatsapp?: string\n }\n}\n\ninterface FooterProps {\n config?: FooterConfig\n renderLink?: (link: FooterLink) => React.ReactNode\n}\n\nfunction NavLinkSkeleton() {\n return <Skeleton className=\"h-5 md:h-6 w-20 md:w-24\" />\n}\n\n/**\n * Platform-Aware Footer Component\n * Accepts configuration from app-config.ts\n */\nexport function Footer({ config, renderLink }: FooterProps) {\n // Config is required - no hardcoded fallbacks\n if (!config) {\n console.warn('Footer: No config provided')\n return null\n }\n \n return <UniversalFooter config={config} renderLink={renderLink} />\n}\n\n/**\n * Universal Footer Component\n * Renders footer based on provided config\n */\nfunction UniversalFooter({ config, renderLink }: { config: FooterConfig; renderLink?: (link: FooterLink) => React.ReactNode }) {\n const defaultRenderLink = (link: FooterLink) => (\n <a href={link.href} className=\"font-body font-medium text-md md:text-md leading-[1.33] text-ods-text-primary hover:text-ods-accent-primary transition-colors\">\n {link.label}\n </a>\n )\n \n const linkRenderer = renderLink || defaultRenderLink\n \n return (\n <footer className={`w-full flex flex-col justify-center items-center ${config.backgroundColor || 'bg-ods-bg-card'} px-6 py-10 relative gap-6 md:gap-6 min-h-[auto] md:min-h-[248px] z-50 border-t border-ods-border`}>\n <div className=\"w-full grid grid-cols-2 lg:grid-cols-4 gap-6 md:gap-8 items-start\">\n \n {/* Column 1: Logo and optionally description */}\n <div className=\"flex flex-col gap-4 md:gap-6 items-start text-left col-span-2 md:col-span-1 lg:col-span-1\">\n {/* Logo and name */}\n <div className=\"flex items-center gap-2\">\n {config.logo && (\n <Suspense fallback={<Skeleton className=\"w-8 h-8\" />}>\n {config.logo as any}\n </Suspense>\n )}\n {config.nameElement || <span className=\"font-heading text-heading-5 font-bold text-ods-text-primary whitespace-nowrap\">{config.name}</span>}\n </div>\n \n {/* Only show description here if NOT moving to right */}\n {!config.moveDescriptionToRight && (\n <>\n <p className=\"font-body font-medium text-sm md:text-sm leading-[1.43] text-ods-text-primary\">\n {config.description}\n </p>\n \n {/* Custom content below description */}\n {config.belowDescriptionContent && (\n <Suspense fallback={<Skeleton className=\"h-8 w-full\" />}>\n {config.belowDescriptionContent as any}\n </Suspense>\n )}\n \n {/* Conditional social row - show by default unless hideSocialRow is true */}\n {!config.hideSocialRow && (\n <SocialIconRow\n className=\"pt-2\"\n links={config.social ? Object.entries(config.social)\n .filter(([_, href]) => href)\n .map(([platform, href]) => ({ platform, href: href as string }))\n : undefined\n }\n />\n )}\n </>\n )}\n \n {/* Show belowDescriptionContent on left even when description is moved to right */}\n {config.moveDescriptionToRight && config.keepBelowDescriptionLeft && config.belowDescriptionContent && (\n <Suspense fallback={<Skeleton className=\"h-8 w-full\" />}>\n {config.belowDescriptionContent as any}\n </Suspense>\n )}\n </div>\n \n {/* Dynamic sections - 1 column each on all screens */}\n {config.sections.map((section, index) => (\n <div key={index} className=\"flex flex-col gap-3 items-start text-left col-span-1\">\n <h3 className=\"text-h5 tracking-[-0.02em] text-ods-text-muted\">\n {section.title}\n </h3>\n <div className=\"flex flex-col gap-3\">\n {section.links.map((link, linkIndex) => (\n <Suspense key={linkIndex} fallback={<NavLinkSkeleton />}>\n {linkRenderer(link) as any}\n </Suspense>\n ))}\n </div>\n </div>\n ))}\n \n {/* Custom component column - full width on mobile and medium, 1 column on large */}\n {config.customComponent && (\n <div className=\"flex flex-col col-span-2 md:col-span-1 lg:col-span-1 justify-center\">\n <Suspense fallback={<Skeleton className=\"h-32 w-full\" />}>\n {config.customComponent as any}\n </Suspense>\n </div>\n )}\n \n {/* Right column content - shows if rightColumnContent is provided OR if moving description to right */}\n {(config.rightColumnContent || config.moveDescriptionToRight) && (\n <div className=\"flex flex-col col-span-2 md:col-span-1 lg:col-span-1 justify-start gap-4 md:gap-6\">\n {/* Show description in right column if moveDescriptionToRight is true */}\n {config.moveDescriptionToRight && (\n <>\n <p className=\"font-body font-medium text-sm md:text-sm leading-[1.43] text-ods-text-primary\">\n {config.description}\n </p>\n \n {/* Custom content below description - only if NOT keeping it on left */}\n {config.belowDescriptionContent && !config.keepBelowDescriptionLeft && (\n <Suspense fallback={<Skeleton className=\"h-8 w-full\" />}>\n {config.belowDescriptionContent as any}\n </Suspense>\n )}\n </>\n )}\n \n {/* Regular right column content */}\n {config.rightColumnContent && (\n <Suspense fallback={<Skeleton className=\"h-32 w-full\" />}>\n {config.rightColumnContent as any}\n </Suspense>\n )}\n </div>\n )}\n </div>\n \n {/* Copyright */}\n <p className=\"font-body font-medium text-md md:text-md leading-[1.33] text-center w-full text-ods-text-muted pt-4 md:pt-0\">\n © {new Date().getFullYear()} {config.legalName}. All rights reserved.\n </p>\n </footer>\n )\n}\n\n","\"use client\"\n\nimport { Button } from './ui/button';\nimport { GitHubIcon, RedditIcon, XLogo, LinkedInIcon, LumaIcon, WhatsAppIcon, GlobeIcon, MessageCircleIcon, TelegramIcon, YouTubeIcon, InstagramIcon, FacebookIcon, SlackIcon } from './icons';\n\ninterface SocialLink {\n platform: string;\n href: string;\n label?: string;\n}\n\ninterface SocialIconRowProps {\n className?: string;\n links?: SocialLink[];\n variant?: \"accent\" | \"outline\" | \"transparent\" | \"destructive\" | null | undefined;\n}\n\nconst defaultLinks: SocialLink[] = [\n { platform: 'github', href: 'https://github.com/flamingo-stack', label: 'GitHub' },\n { platform: 'linkedin', href: 'https://linkedin.com/company/flamingo.run', label: 'LinkedIn' },\n { platform: 'facebook', href: 'https://www.facebook.com/flamingoai.msp', label: 'Facebook' }\n];\n\nfunction renderSocialIcon(platform: string) {\n const normalizedPlatform = platform.toLowerCase().trim();\n\n switch (normalizedPlatform) {\n case 'github':\n return <GitHubIcon className=\"w-5 h-5\" />;\n case 'twitter':\n case 'x':\n return <XLogo className=\"w-5 h-5\" />;\n case 'reddit':\n return <RedditIcon className=\"w-5 h-5\" variant=\"white\" />;\n case 'linkedin':\n return <LinkedInIcon className=\"w-5 h-5\" />;\n case 'luma':\n return <LumaIcon className=\"w-5 h-5\" />;\n case 'whatsapp':\n return <WhatsAppIcon className=\"w-5 h-5\" />;\n case 'website':\n case 'web':\n case 'url':\n return <GlobeIcon className=\"w-5 h-5\" />;\n case 'slack':\n return <SlackIcon className=\"w-5 h-5\" injectedColor=\"white\" />;\n case 'discord':\n return <MessageCircleIcon className=\"w-5 h-5\" />;\n case 'telegram':\n return <TelegramIcon className=\"w-5 h-5\" />;\n case 'youtube':\n case 'yt':\n return <YouTubeIcon className=\"w-5 h-5\" />;\n case 'instagram':\n case 'ig':\n return <InstagramIcon className=\"w-5 h-5\" />;\n case 'facebook':\n case 'fb':\n return <FacebookIcon className=\"w-5 h-5\" />;\n default:\n return <GlobeIcon className=\"w-5 h-5\" />;\n }\n}\n\nexport function SocialIconRow({ className = '', links = defaultLinks, variant = 'outline' }: SocialIconRowProps) {\n return (\n <div className={`flex flex-row gap-3 w-full ${className}`}>\n {links.map((link, index) => (\n <Button\n key={index}\n asChild\n variant={variant}\n size=\"icon\"\n className=\"flex-1\"\n >\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={link.label || link.platform}\n >\n {renderSocialIcon(link.platform)}\n </a>\n </Button>\n ))}\n </div>\n );\n} ","\"use client\"\n\nimport { useSearchParams, useRouter } from \"../embed-shims/next-navigation\"\nimport { useTransition } from \"react\"\n\n/**\n * Unified AND Filter Logic\n * \n * This module provides common filtering logic that uses AND operations\n * instead of OR operations for all filter combinations.\n */\n\nexport interface FilterState {\n search?: string\n categories?: string[]\n subcategories?: string[]\n tags?: string[]\n filters?: string[]\n pricing?: string\n page?: number\n}\n\nexport interface FilterConfig {\n basePath: string\n supportedFilters: {\n categories?: boolean\n subcategories?: boolean\n tags?: boolean\n filters?: boolean\n pricing?: boolean\n search?: boolean\n }\n}\n\n/**\n * Hook for managing AND-based filter logic\n */\nexport function useUnifiedFiltering(config: FilterConfig) {\n const router = useRouter()\n const searchParams = useSearchParams()\n const [isPending, startTransition] = useTransition()\n\n // Parse current filter state from URL\n const getCurrentFilterState = (): FilterState => {\n const search = searchParams?.get('search') || undefined\n const categories = searchParams?.get('category')?.split(',').filter(Boolean) || []\n const subcategories = searchParams?.get('subcategory')?.split(',').filter(Boolean) || []\n const tags = searchParams?.get('tag')?.split(',').filter(Boolean) || []\n const filters = searchParams?.getAll('filter') || []\n const pricing = searchParams?.get('pricing') || undefined\n const page = parseInt(searchParams?.get('page') || \"1\")\n\n return {\n search,\n categories,\n subcategories,\n tags,\n filters,\n pricing,\n page\n }\n }\n\n // Update filters with AND logic\n const updateFilters = (newFilters: Partial<FilterState>, preserveScroll = false) => {\n const currentState = getCurrentFilterState()\n const updatedState = { ...currentState, ...newFilters }\n \n // Always reset to page 1 when filters change (unless explicitly preserving page)\n if (!newFilters.hasOwnProperty('page')) {\n updatedState.page = 1\n }\n\n const params = new URLSearchParams()\n\n // Add search parameter\n if (updatedState.search && config.supportedFilters.search) {\n params.set('search', updatedState.search)\n }\n\n // Add category parameters (AND logic - all must match)\n if (updatedState.categories && updatedState.categories.length > 0 && config.supportedFilters.categories) {\n params.set('category', updatedState.categories.join(','))\n }\n\n // Add subcategory parameters (AND logic - all must match)\n if (updatedState.subcategories && updatedState.subcategories.length > 0 && config.supportedFilters.subcategories) {\n params.set('subcategory', updatedState.subcategories.join(','))\n }\n\n // Add tag parameters (AND logic - all must match)\n if (updatedState.tags && updatedState.tags.length > 0 && config.supportedFilters.tags) {\n params.set('tag', updatedState.tags.join(','))\n }\n\n // Add filter parameters (AND logic - all must match)\n if (updatedState.filters && updatedState.filters.length > 0 && config.supportedFilters.filters) {\n updatedState.filters.forEach(filter => params.append('filter', filter))\n }\n\n // Add pricing parameter\n if (updatedState.pricing && config.supportedFilters.pricing) {\n params.set('pricing', updatedState.pricing)\n }\n\n // Add page parameter (only if not page 1)\n if (updatedState.page && updatedState.page > 1) {\n params.set('page', updatedState.page.toString())\n }\n\n const currentScrollY = preserveScroll ? window.scrollY : 0\n const newUrl = `${config.basePath}?${params.toString()}`\n\n startTransition(() => {\n router.push(newUrl, { scroll: false })\n \n if (preserveScroll) {\n setTimeout(() => {\n window.scrollTo({\n top: currentScrollY,\n behavior: 'smooth'\n })\n }, 100)\n }\n })\n }\n\n // Add a filter (AND logic)\n const addFilter = (\n type: keyof FilterState,\n value: string,\n preserveScroll = false\n ) => {\n const currentState = getCurrentFilterState()\n const updates: Partial<FilterState> = {}\n\n switch (type) {\n case 'categories':\n updates.categories = [...(currentState.categories || []), value]\n break\n case 'subcategories':\n updates.subcategories = [...(currentState.subcategories || []), value]\n break\n case 'tags':\n updates.tags = [...(currentState.tags || []), value]\n break\n case 'filters':\n updates.filters = [...(currentState.filters || []), value]\n break\n case 'pricing':\n updates.pricing = value\n break\n case 'search':\n updates.search = value\n break\n }\n\n updateFilters(updates, preserveScroll)\n }\n\n // Remove a filter (AND logic)\n const removeFilter = (\n type: keyof FilterState,\n value?: string,\n preserveScroll = true\n ) => {\n const currentState = getCurrentFilterState()\n const updates: Partial<FilterState> = {}\n\n switch (type) {\n case 'categories':\n updates.categories = value \n ? (currentState.categories || []).filter(c => c !== value)\n : []\n break\n case 'subcategories':\n updates.subcategories = value \n ? (currentState.subcategories || []).filter(s => s !== value)\n : []\n break\n case 'tags':\n updates.tags = value \n ? (currentState.tags || []).filter(t => t !== value)\n : []\n break\n case 'filters':\n updates.filters = value \n ? (currentState.filters || []).filter(f => f !== value)\n : []\n break\n case 'pricing':\n updates.pricing = undefined\n break\n case 'search':\n updates.search = undefined\n break\n }\n\n updateFilters(updates, preserveScroll)\n }\n\n // Toggle a filter (AND logic)\n const toggleFilter = (\n type: keyof FilterState,\n value: string,\n preserveScroll = false\n ) => {\n const currentState = getCurrentFilterState()\n let currentValues: string[] = []\n\n switch (type) {\n case 'categories':\n currentValues = currentState.categories || []\n break\n case 'subcategories':\n currentValues = currentState.subcategories || []\n break\n case 'tags':\n currentValues = currentState.tags || []\n break\n case 'filters':\n currentValues = currentState.filters || []\n break\n case 'pricing':\n // Pricing is single-select, so toggle on/off\n if (currentState.pricing === value) {\n removeFilter('pricing', value, preserveScroll)\n } else {\n addFilter('pricing', value, preserveScroll)\n }\n return\n case 'search':\n // Search is single-value, so just update\n updateFilters({ search: value }, preserveScroll)\n return\n }\n\n if (currentValues.includes(value)) {\n removeFilter(type, value, preserveScroll)\n } else {\n addFilter(type, value, preserveScroll)\n }\n }\n\n // Clear all filters\n const clearAllFilters = () => {\n startTransition(() => {\n router.push(config.basePath, { scroll: false })\n })\n }\n\n // Get filter chips for display\n const getFilterChips = (categories?: any[], tags?: any[]) => {\n const currentState = getCurrentFilterState()\n const chips: Array<{\n id: string\n label: string\n type: 'category' | 'subcategory' | 'tag' | 'filter' | 'pricing'\n }> = []\n\n // Category chips\n if (currentState.categories && categories) {\n currentState.categories.forEach(categorySlug => {\n const category = categories.find((c: any) => c.slug === categorySlug)\n if (category) {\n chips.push({\n id: `category-${categorySlug}`,\n label: category.name,\n type: 'category'\n })\n }\n })\n }\n\n // Subcategory chips\n if (currentState.subcategories && categories) {\n currentState.subcategories.forEach(subcategorySlug => {\n // Find subcategory across all categories\n for (const category of categories) {\n if (category.subcategories) {\n const subcategory = category.subcategories.find((s: any) => s.slug === subcategorySlug)\n if (subcategory) {\n chips.push({\n id: `subcategory-${subcategorySlug}`,\n label: subcategory.name,\n type: 'subcategory'\n })\n break\n }\n }\n }\n })\n }\n\n // Tag chips\n if (currentState.tags && tags) {\n currentState.tags.forEach(tagSlug => {\n const tag = tags.find((t: any) => t.slug === tagSlug)\n if (tag) {\n chips.push({\n id: `tag-${tagSlug}`,\n label: tag.name,\n type: 'tag'\n })\n }\n })\n }\n\n // Filter chips\n if (currentState.filters) {\n currentState.filters.forEach(filterKey => {\n chips.push({\n id: `filter-${filterKey}`,\n label: getFilterLabel(filterKey),\n type: 'filter'\n })\n })\n }\n\n // Pricing chip\n if (currentState.pricing) {\n chips.push({\n id: `pricing-${currentState.pricing}`,\n label: getPricingLabel(currentState.pricing),\n type: 'pricing'\n })\n }\n\n return chips\n }\n\n // Handle filter chip removal\n const handleFilterChipRemove = (chipId: string) => {\n const [type, ...idParts] = chipId.split('-')\n const id = idParts.join('-')\n\n switch (type) {\n case 'category':\n removeFilter('categories', id)\n break\n case 'subcategory':\n removeFilter('subcategories', id)\n break\n case 'tag':\n removeFilter('tags', id)\n break\n case 'filter':\n removeFilter('filters', id)\n break\n case 'pricing':\n removeFilter('pricing', id)\n break\n }\n }\n\n return {\n getCurrentFilterState,\n updateFilters,\n addFilter,\n removeFilter,\n toggleFilter,\n clearAllFilters,\n getFilterChips,\n handleFilterChipRemove,\n isPending\n }\n}\n\nimport { formatClassification, formatPricingModel } from '../utils/format-text-stub'\n\n// Helper functions for filter labels\nfunction getFilterLabel(filterKey: string): string {\n const customLabels: Record<string, string> = {\n 'recommended': 'Recommended',\n 'featured': 'Featured'\n }\n return customLabels[filterKey] || formatClassification(filterKey)\n}\n\nfunction getPricingLabel(pricingKey: string): string {\n return formatPricingModel(pricingKey)\n}\n\n/**\n * Vendor-specific filter configuration\n */\nexport const vendorFilterConfig: FilterConfig = {\n basePath: '/vendors',\n supportedFilters: {\n categories: true,\n subcategories: true,\n tags: false,\n filters: true,\n pricing: true,\n search: true\n }\n}\n\n/**\n * Blog-specific filter configuration\n */\nexport const blogFilterConfig: FilterConfig = {\n basePath: '/blog',\n supportedFilters: {\n categories: true,\n subcategories: false,\n tags: true,\n filters: false,\n pricing: false,\n search: true\n }\n} ","// Stub for format-text utilities\nexport function formatText(text: string): string {\n return text;\n}\n\nexport function truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.slice(0, maxLength) + '...';\n}\n\nexport function formatClassification(classification: string): string {\n return classification.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\n}\n\nexport function formatPricingModel(pricing: string): string {\n return pricing.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\n}","\"use client\"\n\n// Components exports\nexport * from './chat'\nexport * from './features'\nexport * from './icons'\nexport * from './navigation'\nexport * from './platform'\nexport * from './ui'\n\n// Individual component exports\nexport * from './announcement-bar'\nexport * from './hover-card'\nexport * from './categories-cart'\nexport * from './category-card'\nexport * from './comment-card'\nexport * from './content-loading-container'\nexport * from './dynamic-skeleton'\nexport * from './empty-state'\nexport * from './faq-accordion'\nexport * from './filter-chip'\nexport * from './footer'\nexport * from './unified-filter-logic'\nexport * from './unified-pagination'\nexport * from './footer-waitlist-button'\nexport * from './hero-image-uploader'\nexport * from './icons-block'\nexport * from './image-cropper'\nexport * from './media-carousel'\nexport * from './metric-value'\nexport * from './msp-display'\nexport * from './open-source-features'\nexport * from './pagination'\nexport * from './persistent-filter-controls'\nexport * from './persistent-pagination'\nexport * from './pricing-display'\nexport * from './results-count'\nexport * from './selection-source-badge'\nexport * from './social-icon-row'\nexport * from './user-display'\nexport * from './vendor-display-button'\nexport * from './vendor-icon'\nexport * from './vendor-page-skeleton'\nexport * from './vendor-tag'\nexport * from './why-it-matters'\nexport * from './yes-no-display'\n// Removed duplicate PageContainer export - already exported from './ui/page-container'\nexport * from './made-with-love'\n\n// Loading components\nexport * from './loading'\n\n// Auth-related exports\nexport * from './auth-stub'\n\n// Date/Time components\nexport * from './date-time-picker'\n\n// Chat components\nexport * from './chat'\n\n// Onboarding components\nexport * from './shared/onboarding'\n\n// Doc-search bar — unified RAG-search dropdown used by the data-room\n// sidebar AND the onboarding-guide catalog. Pure presentation; hosts\n// own the `useDocSearch` hook and pass results in as props.\nexport * from './shared/doc-search'\n\n// Product Release components\nexport * from './shared/product-release'\n\n// Dev-center shared components (Roadmap / Delivery / DevSectionView chrome)\nexport * from './shared/dev-section'\nexport * from './shared/roadmap'\nexport * from './shared/delivery'\n\n// Legal-document shared component (privacy policy, terms of service)\nexport * from './shared/legal-document'\n\n// Detail Page Skeleton\nexport { DetailPageSkeleton, type DetailPageSkeletonProps } from './shared/detail-page-skeleton'\n\n// Priority UI components that exist in main components directory\n// Note: These are re-exported from ./ui already, no need to duplicate\n","'use client';\n\nimport { useRouter } from '../embed-shims/next-navigation';\nimport { useChatRuntime } from '../contexts/chat-runtime-context';\nimport { useCallback } from 'react';\nimport { OpenFrameLogo } from './icons';\nimport { Button } from './ui/button';\n\nexport interface FooterWaitlistButtonProps {\n className?: string;\n}\n\n/**\n * Small wrapper around JoinWaitlistButton for use inside the footer.\n *\n * Routes through the host's unified-navigation hook\n * (`runtime.navigation.navigate`) when a `ChatRuntimeContext` is\n * mounted — that's the same path EVERY other in-app navigation\n * surface uses (source chips, inline cards, search-autocomplete,\n * action cards). One rule, one decision tree across the whole app.\n * The hub's `HubRuntimeProvider` wires `navigate` to its `useUnifiedNav`\n * helper, so this button picks up cross-platform new-tab decisions,\n * same-URL re-scroll handling, embed-mode short-circuiting, and any\n * future host-side nav rules for free.\n *\n * Falls back to the embed-shim's `router.push` when no runtime is\n * mounted (third-party embedders who haven't set up\n * `ChatRuntimeContext` — the lib stays usable without forcing them\n * to wire the full chat-runtime).\n *\n * Target URL: `/waitlist#top`. `#top` is the canonical \"scroll to\n * page top\" anchor — the destination page has an explicit\n * `<div id=\"top\">` at the top of `<main>` so native browser anchor\n * scroll works in every browser regardless of the HTML5 magic-anchor\n * behavior.\n */\nexport function FooterWaitlistButton({ className }: FooterWaitlistButtonProps) {\n const router = useRouter();\n const runtime = useChatRuntime();\n\n const handleClick = useCallback(() => {\n const href = '/waitlist#top';\n // Prefer the host's unified-nav callback (hub-wired\n // `useUnifiedNav`). Falls back to the embed-shim's router when\n // the host hasn't provided one.\n if (runtime?.navigation?.navigate) {\n const handled = runtime.navigation.navigate({ href });\n if (handled) return;\n }\n router.push(href);\n }, [router, runtime]);\n\n return (\n <Button \n onClick={handleClick} \n className={className}\n leftIcon={<OpenFrameLogo />}\n >\n Join Waitlist\n </Button>\n );\n} ","\"use client\";\n\nimport { useRef, useState } from 'react';\nimport { Loader2, Image as ImageIcon, Upload, X } from 'lucide-react';\nimport { Button } from \"./ui/button\";\nimport { useToast } from \"../hooks/use-toast\";\n\ninterface HeroImageUploaderProps {\n /** Current image URL if one already exists */\n imageUrl?: string;\n /** Callback fired with new image URL (or undefined if removed) */\n onChange: (url: string | undefined) => void;\n /** Upload endpoint (required) */\n uploadEndpoint: string;\n /** Height of drop-zone. Number treated as pixels, string passed directly (e.g. '100%') */\n height?: number | string;\n /** Image object-fit, defaults to cover */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n /** Show a replace/upload button overlay in addition to remove (default true for parity with blog editor) */\n showReplaceButton?: boolean;\n /** If true, skip the actual upload and just return a base64 data URL preview. Useful for unauthenticated flows – the caller can upload later. */\n deferUpload?: boolean;\n /** Optional custom upload handler for authenticated uploads. If provided, this will be used instead of the default fetch */\n onUpload?: (file: File) => Promise<string>;\n /** Optional custom delete handler for authenticated deletion. If provided, this will be used instead of just clearing the image */\n onDelete?: () => Promise<void>;\n}\n\n/**\n * Reusable dashed hero-style image uploader identical to Blog Editor's hero picker.\n * Handles client-side validation (JPEG/PNG/WebP/GIF up to 5 MB), upload, preview & removal.\n */\nexport function HeroImageUploader({ imageUrl, onChange, uploadEndpoint, height = 300, objectFit = 'cover', showReplaceButton = true, deferUpload = false, onUpload, onDelete }: HeroImageUploaderProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const { toast } = useToast();\n const [uploading, setUploading] = useState(false);\n\n const ALLOWED_TYPES = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif'];\n const MAX_SIZE = 5 * 1024 * 1024; // 5MB\n\n const openDialog = () => inputRef.current?.click();\n\n async function handleFile(file?: File) {\n if (!file) return;\n if (!ALLOWED_TYPES.includes(file.type)) {\n toast({ title: 'Invalid file', description: 'Upload JPEG, PNG, WebP, or GIF', variant: 'destructive' });\n return;\n }\n if (file.size > MAX_SIZE) {\n toast({ title: 'File too large', description: 'Max 5MB', variant: 'destructive' });\n return;\n }\n\n if (deferUpload) {\n // Immediately convert to data URL for preview and postpone real upload\n try {\n setUploading(true);\n const reader = new FileReader();\n reader.onload = () => {\n const dataUrl = reader.result as string;\n onChange(dataUrl); // Return data URL so parent can preview & store locally\n setUploading(false);\n };\n reader.onerror = () => {\n toast({ title: 'File error', description: 'Failed to read image file', variant: 'destructive' });\n setUploading(false);\n };\n reader.readAsDataURL(file);\n } catch (err: any) {\n toast({ title: 'File error', description: err.message || 'Failed to process image', variant: 'destructive' });\n setUploading(false);\n } finally {\n if (inputRef.current) inputRef.current.value = '';\n }\n return;\n }\n\n // Upload flow - use custom handler if provided, otherwise use default fetch\n setUploading(true);\n try {\n let uploadedUrl: string;\n \n if (onUpload) {\n // Use custom upload handler (e.g., for authenticated uploads)\n uploadedUrl = await onUpload(file);\n } else {\n // Default upload flow\n const fd = new FormData();\n fd.append('file', file);\n const res = await fetch(uploadEndpoint, { method: 'POST', body: fd });\n if (!res.ok) throw new Error('Upload failed');\n const json = await res.json();\n uploadedUrl = (json.data && json.data.url) || json.url || json.file_url;\n if (!uploadedUrl) throw new Error('Invalid upload response');\n }\n \n onChange(uploadedUrl);\n } catch (err: any) {\n toast({ title: 'Upload error', description: err.message || 'Failed to upload', variant: 'destructive' });\n } finally {\n setUploading(false);\n if (inputRef.current) inputRef.current.value = '';\n }\n }\n\n const handleSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFile(e.target.files?.[0]);\n };\n\n const handleRemove = async () => {\n if (onDelete) {\n try {\n await onDelete();\n } catch (error) {\n // onDelete handler should handle its own error reporting\n return;\n }\n }\n onChange(undefined);\n };\n\n const heightStyle = typeof height === 'number' ? `${height}px` : height;\n\n return (\n <div className=\"w-full h-full max-h-full space-y-2 min-h-[300px]\">\n {imageUrl ? (\n <div className=\"relative group w-full aspect-square md:aspect-auto h-auto md:h-full flex items-center justify-center overflow-hidden\" style={{ height: heightStyle }}>\n <img src={imageUrl} className={`absolute inset-0 w-full h-full object-${objectFit}`} alt=\"Cover\" />\n <div className=\"absolute inset-0 bg-black/40 opacity-0 group-hover:opacity-100 flex items-center justify-center gap-4 transition-opacity rounded-lg\">\n {showReplaceButton && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={openDialog}\n className=\"bg-white text-black hover:bg-gray-100 rounded-full w-12 h-12\"\n >\n <Upload className=\"h-5 w-5\" />\n </Button>\n )}\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => handleRemove()}\n className=\"bg-white text-black hover:bg-gray-100 rounded-full w-12 h-12\"\n >\n <X className=\"h-5 w-5\" />\n </Button>\n </div>\n </div>\n ) : (\n <div\n className={`w-full h-full border-2 border-dashed ${uploading ? 'border-[#FFC008]' : 'border-ods-border hover:border-[#FFC008]'} rounded-lg flex flex-col items-center justify-center cursor-pointer bg-[#1A1A1A]`}\n style={{ height: heightStyle }}\n onClick={openDialog}\n >\n {uploading ? (\n <Loader2 className=\"h-8 w-8 animate-spin text-ods-accent\" />\n ) : (\n <>\n <ImageIcon className=\"h-12 w-12 text-ods-text-secondary\" />\n <span className=\"text-ods-text-primary font-['DM_Sans'] text-[16px] font-medium mt-2\">Upload cover image</span>\n <span className=\"text-ods-text-secondary font-['DM_Sans'] text-[14px] mt-1\">Click to upload or drag and drop</span>\n <span className=\"text-[#666666] font-['DM_Sans'] text-[12px]\">PNG, JPEG, WebP, GIF up to 5MB</span>\n </>\n )}\n </div>\n )}\n\n {/* hidden input */}\n <input ref={inputRef} type=\"file\" accept=\"image/*\" onChange={handleSelect} className=\"hidden\" />\n </div>\n );\n} ","\"use client\";\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport {\n VendorDirectoryIcon,\n OpenSourceIcon,\n CommunityHubIcon,\n VendorsIcon,\n CommunityIcon,\n CompareIcon,\n} from './icons-stub';\nimport { Sun, Moon, CheckCircle, Github, PlusCircle } from 'lucide-react';\n\n// Map lucide icons\nconst SunIcon = Sun;\nconst MoonIcon = Moon;\nconst CheckCircleIcon = CheckCircle;\nconst GitHubIcon = Github;\nconst PlusCircleIcon = PlusCircle;\nconst OpenmspLogo = () => <div>Logo</div>;\n\ninterface IconsBlockProps {\n /**\n * When true, always render the loading placeholder bar regardless of whether the grid is ready.\n * Default behaviour renders placeholder only until the grid is generated.\n */\n loading?: boolean;\n}\n\n// Available icons array - moved outside component to prevent recreating on each render\nconst availableIcons = [\n VendorDirectoryIcon,\n OpenSourceIcon,\n CommunityHubIcon,\n VendorsIcon,\n CommunityIcon,\n CompareIcon,\n SunIcon,\n MoonIcon,\n CheckCircleIcon,\n GitHubIcon,\n PlusCircleIcon,\n OpenmspLogo\n];\n\nexport function ResponsiveIconsBlock({ loading = false }: IconsBlockProps) {\n const [columns, setColumns] = useState(24);\n const [iconGrid, setIconGrid] = useState<Array<Array<React.ComponentType<{ width?: number; height?: number; className?: string }>>>>([]);\n const [iconsLoaded, setIconsLoaded] = useState(false);\n const randomSeedRef = useRef<number>(0);\n\n useEffect(() => {\n function calculateColumns() {\n const cols = Math.ceil(window.innerWidth / 56) + 4;\n setColumns(cols);\n }\n\n calculateColumns();\n window.addEventListener('resize', calculateColumns);\n \n setIconsLoaded(true);\n \n return () => window.removeEventListener('resize', calculateColumns);\n }, []);\n\n // Generate icon grid only on client side\n useEffect(() => {\n if (randomSeedRef.current === 0) {\n randomSeedRef.current = Date.now();\n }\n\n const grid: any[][] = [];\n const totalCells = columns * 2;\n\n for (let idx = 0; idx < totalCells; idx++) {\n const col = idx % columns;\n const row = Math.floor(idx / columns);\n\n // Initialize row if needed\n if (!grid[row]) grid[row] = [];\n\n // Get adjacent icons to avoid\n const adjacentIcons = new Set();\n\n // Check left neighbor (same row, previous column)\n if (col > 0 && grid[row][col - 1]) {\n adjacentIcons.add(grid[row][col - 1]);\n }\n\n // Check top neighbor (previous row, same column)\n if (row > 0 && grid[row - 1] && grid[row - 1][col]) {\n adjacentIcons.add(grid[row - 1][col]);\n }\n\n // Filter available icons to exclude adjacent ones\n const availableOptions = availableIcons.filter(icon => !adjacentIcons.has(icon));\n\n // Generate random selection from available options using the stable seed\n const seed = randomSeedRef.current + idx;\n const pseudoRandom = (seed * 9301 + 49297) % 233280;\n const normalized = pseudoRandom / 233280;\n const iconIndex = Math.floor(normalized * availableOptions.length);\n\n // Assign selected icon to grid\n grid[row][col] = availableOptions[iconIndex] || availableIcons[0]; // Fallback to first icon\n }\n\n setIconGrid(grid);\n }, [columns]);\n\n const displayColumns = columns;\n\n // Get icon for specific position from pre-generated grid\n const getIconForIndex = (index: number) => {\n const col = index % displayColumns;\n const row = Math.floor(index / displayColumns);\n return iconGrid[row]?.[col] || availableIcons[0];\n };\n\n // When explicit loading prop true OR grid not ready → show placeholder\n if (loading || iconGrid.length === 0) {\n return (\n <div\n className=\"w-full h-[80px] md:h-[112px] bg-[#1A1A1A] relative overflow-hidden\"\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n {/* subtle pulse bar */}\n <div className=\"absolute inset-0 animate-pulse bg-[#2A2A2A]/60\" />\n </div>\n );\n }\n\n return (\n <div\n className=\"w-full h-[80px] md:h-[112px] overflow-hidden bg-[#1A1A1A] relative z-10\"\n style={{ margin: 0, padding: 0 }}\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n <style>{`\n .icons-block svg,\n .icons-block svg * {\n filter: grayscale(100%) brightness(0) invert(1) brightness(0.4) !important;\n fill: currentColor !important;\n }\n `}</style>\n <div\n className=\"grid h-full icons-block w-full\"\n style={{\n gridTemplateColumns: `repeat(${displayColumns}, 56px)`,\n gridTemplateRows: 'repeat(2, 1fr)',\n }}\n >\n {Array.from({ length: displayColumns * 2 }).map((_, idx) => {\n const col = idx % displayColumns;\n const row = Math.floor(idx / displayColumns);\n const IconComponent = getIconForIndex(idx);\n\n return (\n <div\n key={idx}\n className=\"flex items-center justify-center w-full h-full\"\n style={{\n background: '#1A1A1A',\n borderRight: col !== displayColumns - 1 ? '0.5px solid rgba(66, 66, 66, 0.5)' : undefined,\n borderBottom: row === 0 ? '0.5px solid rgba(66, 66, 66, 0.5)' : undefined,\n margin: 0,\n padding: '8px',\n boxSizing: 'border-box',\n }}\n role=\"presentation\"\n >\n <IconComponent\n width={16}\n height={16}\n className=\"text-[#666666] md:w-5 md:h-5\"\n aria-hidden=\"true\"\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n} ","// Stub implementations for missing icons\nimport { DollarSign, Code, Users, Building, GitCompare, MessageSquare } from \"lucide-react\";\n\nexport const OpenSourceIcon = Code;\nexport const CoinsIcon = DollarSign;\nexport const VendorDirectoryIcon = Building;\nexport const CommunityHubIcon = Users;\nexport const VendorsIcon = Building;\nexport const CommunityIcon = MessageSquare;\nexport const CompareIcon = GitCompare;\n\n// OpenmspLogo moved to real implementation (should be imported from main project)\n\n// OpenFrameLogo moved to real implementation in ./openframe-logo.tsx","/*\n ImageCropper.tsx\n ----------------\n Reusable React component for interactive image cropping with:\n • Drag / resize cropping via react-easy-crop\n • Custom aspect ratio or free-form\n • Optional circular crop overlay (avatar mode)\n • Automatic scaling so the exported image never exceeds maxSizePx\n • Returns PNG data URL + Blob on confirm\n • Responsive / accessible with shadcn/ui Button & Slider components\n\n Styling relies on Tailwind + shadcn design tokens.\n*/\n\n\"use client\"\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport Cropper from \"react-easy-crop\"\nimport { Button } from \"./ui/button\"\nimport { Slider } from \"./ui/slider\"\nimport { cn } from \"../utils/cn\"\nimport { Check, RotateCcw } from \"lucide-react\"\n\n/* ------------------------------------------------------------\n * Types\n * ----------------------------------------------------------*/\n\nexport interface ImageCropperResult {\n /** Cropped PNG data URL */\n dataUrl: string\n /** Corresponding PNG Blob */\n blob: Blob\n}\n\nexport interface ImageCropperProps {\n /** Source image (URL or data URI) */\n src: string\n /** Called when user confirms crop */\n onComplete(result: ImageCropperResult): void\n /** Called when user cancels crop */\n onCancel?(): void\n /** Aspect ratio (width / height). If omitted, free-form */\n aspectRatio?: number\n /** Enable circular crop overlay for avatars */\n circular?: boolean\n /** Maximum width/height for the exported PNG (defaults 512) */\n maxSizePx?: number\n /** Optional className for wrapper */\n className?: string\n}\n\n/* ------------------------------------------------------------\n * Helpers\n * ----------------------------------------------------------*/\n\nfunction degToRad(deg: number) {\n return (deg * Math.PI) / 180\n}\n\n/** Util to create an HTMLImageElement that resolves when loaded */\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image()\n img.crossOrigin = \"anonymous\" // prevent canvas tainting\n img.onload = () => resolve(img)\n img.onerror = () => reject(new Error(\"Failed to load image\"))\n img.src = src\n })\n}\n\n/* ------------------------------------------------------------\n * Component\n * ----------------------------------------------------------*/\n\nexport const ImageCropper: React.FC<ImageCropperProps> = ({\n src,\n onComplete,\n onCancel,\n aspectRatio,\n circular = false,\n maxSizePx = 512,\n className,\n}) => {\n const [crop, setCrop] = useState({ x: 0, y: 0 })\n const [zoom, setZoom] = useState(1)\n const [rotation, setRotation] = useState(0)\n const [croppedAreaPixels, setCroppedAreaPixels] = useState<\n | { x: number; y: number; width: number; height: number }\n | null\n >(null)\n\n /* ------------------ crop complete callback -----------------*/\n const onCropComplete = useCallback((_: any, area: any) => {\n setCroppedAreaPixels(area)\n }, [])\n\n /* ------------------ Build checkered background --------------*/\n const checkerBg =\n \"bg-[length:16px_16px] bg-[linear-gradient(45deg,transparent_25%,#2a2a2a_25%,#2a2a2a_75%,transparent_75%,transparent),linear-gradient(45deg,#2a2a2a_25%,transparent_25%,transparent_75%,#2a2a2a_75%,#2a2a2a)]\"\n\n /* ------------------ Export logic ---------------------------*/\n const exportCrop = useCallback(async () => {\n if (!croppedAreaPixels) return undefined\n\n const img = await loadImage(src)\n\n // Create canvas the size of crop\n const canvas = document.createElement(\"canvas\")\n\n // Scale crop to fit maxSizePx\n const scale = Math.min(1, maxSizePx / Math.max(croppedAreaPixels.width, croppedAreaPixels.height))\n const outputW = Math.round(croppedAreaPixels.width * scale)\n const outputH = Math.round(croppedAreaPixels.height * scale)\n\n canvas.width = outputW\n canvas.height = outputH\n const ctx = canvas.getContext(\"2d\")!\n\n // Draw cropped portion\n ctx.drawImage(\n img,\n croppedAreaPixels.x,\n croppedAreaPixels.y,\n croppedAreaPixels.width,\n croppedAreaPixels.height,\n 0,\n 0,\n outputW,\n outputH,\n )\n\n // If circular mode, clip to circle\n if (circular) {\n const temp = document.createElement(\"canvas\")\n temp.width = outputW\n temp.height = outputH\n const tctx = temp.getContext(\"2d\")!\n tctx.beginPath()\n tctx.arc(outputW / 2, outputH / 2, outputW / 2, 0, Math.PI * 2)\n tctx.closePath()\n tctx.clip()\n tctx.drawImage(canvas, 0, 0)\n canvas.width = outputW\n canvas.height = outputH\n ctx.clearRect(0, 0, outputW, outputH)\n ctx.drawImage(temp, 0, 0)\n }\n\n return new Promise<ImageCropperResult>((resolve) => {\n canvas.toBlob(\n (blob) => {\n if (!blob) throw new Error(\"Canvas export failed\")\n const reader = new FileReader()\n reader.onloadend = () => {\n resolve({ dataUrl: reader.result as string, blob })\n }\n reader.readAsDataURL(blob)\n },\n \"image/png\",\n )\n })\n }, [croppedAreaPixels, circular, maxSizePx, src]) as () => Promise<ImageCropperResult | undefined>\n\n /* ------------------ Keyboard accessibility -----------------*/\n const handleKey = (e: React.KeyboardEvent) => {\n // Enter to confirm, Esc to cancel\n if (e.key === \"Enter\") {\n e.preventDefault()\n void exportCrop().then((res) => {\n if (res) onComplete(res)\n })\n } else if (e.key === \"Escape\") {\n e.preventDefault()\n onCancel?.()\n }\n }\n\n /* ------------------ Render ---------------------------------*/\n return (\n <div\n className={cn(\n \"relative flex flex-col gap-4 w-full\",\n className,\n )}\n onKeyDown={handleKey}\n tabIndex={0}\n aria-label=\"Image cropper\"\n >\n {/* Cropper container */}\n <div\n className={cn(\n \"relative w-full aspect-square md:aspect-video rounded-md overflow-hidden\",\n checkerBg,\n )}\n >\n <Cropper\n image={src}\n crop={crop}\n zoom={zoom}\n rotation={rotation}\n aspect={aspectRatio}\n cropShape={circular ? \"round\" : \"rect\"}\n showGrid={false}\n onCropChange={setCrop}\n onZoomChange={setZoom}\n onRotationChange={setRotation}\n onCropComplete={onCropComplete}\n objectFit=\"contain\"\n />\n </div>\n\n {/* Controls */}\n <div className=\"flex flex-col gap-4\">\n {/* Zoom */}\n <div className=\"flex items-center gap-3\">\n <span className=\"min-w-[60px] text-sm\">Zoom</span>\n <Slider\n min={1}\n max={3}\n step={0.01}\n value={[zoom]}\n onValueChange={(v) => setZoom(v[0])}\n aria-label=\"Zoom\"\n className=\"flex-1\"\n />\n </div>\n {/* Rotate */}\n <div className=\"flex items-center gap-3\">\n <span className=\"min-w-[60px] text-sm\">Rotate</span>\n <Slider\n min={0}\n max={360}\n step={1}\n value={[rotation]}\n onValueChange={(v) => setRotation(v[0])}\n aria-label=\"Rotation\"\n className=\"flex-1\"\n />\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setRotation(0)}\n aria-label=\"Reset rotation\"\n >\n <RotateCcw className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex justify-end gap-2 mt-2\">\n {onCancel && (\n <Button variant=\"outline\" onClick={onCancel} aria-label=\"Cancel crop\">\n Cancel\n </Button>\n )}\n <Button\n variant=\"accent\"\n onClick={async () => {\n const result = await exportCrop()\n if (result) onComplete(result)\n }}\n leftIcon={<Check className=\"h-4 w-4\" />}\n aria-label=\"Apply crop\"\n >\n Apply\n </Button>\n </div>\n </div>\n )\n} ","\"use client\";\n\nimport { useState, useRef, useEffect, memo, useCallback } from 'react';\nimport { cn } from \"../utils/cn\";\nimport { MediaItem } from '../utils/media-carousel-utils-stub';\nimport { Video, extractYouTubeId } from './features/video';\nimport { PlayIcon } from './icons-v2-generated/media-playback/play-icon';\n\n// Navigation icons\nconst ChevronLeftIcon = () => (\n <svg width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <polyline points=\"15,18 9,12 15,6\"/>\n </svg>\n);\n\nconst ChevronRightIcon = () => (\n <svg width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <polyline points=\"9,18 15,12 9,6\"/>\n </svg>\n);\n\ninterface MediaCarouselProps {\n media: MediaItem[];\n className?: string;\n /** Use aspect ratio instead of height classes for stable dimensions */\n aspectRatio?: '16/9' | '4/3' | '3/2' | '1/1';\n showThumbnails?: boolean;\n autoPlay?: boolean;\n /** How content should fit within the container */\n objectFit?: 'contain' | 'cover';\n}\n\nexport const MediaCarousel = memo(function MediaCarousel({ \n media, \n className,\n aspectRatio = \"16/9\",\n showThumbnails = true,\n autoPlay = false,\n objectFit = 'contain'\n}: MediaCarouselProps) {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const carouselRef = useRef<HTMLDivElement>(null);\n const thumbnailsRef = useRef<HTMLDivElement>(null);\n\n // Clamp `currentIndex` whenever `media` shrinks (e.g. an admin removes\n // a slide while the user is on the last one) so the thumbnail active\n // state + `currentItem` lookup stay in sync. Without this, the\n // `media[currentIndex] || media[0]` fallback renders the first slide\n // but every thumbnail's `isActive = index === currentIndex` reads\n // false — visually nothing is selected.\n useEffect(() => {\n if (currentIndex >= media.length && media.length > 0) {\n setCurrentIndex(media.length - 1);\n }\n }, [media.length, currentIndex]);\n\n // Early return if no media provided\n if (!media || media.length === 0) {\n return null;\n }\n\n const currentItem = media[currentIndex] || media[0];\n\n // Additional safety check\n if (!currentItem) {\n return null;\n }\n\n // Navigation functions — `<Video>` (MuxPlayer/YT facade) owns its own\n // play/pause lifecycle, so the previous bare-`<video>`-element pause\n // logic in nextSlide/prevSlide/selectSlide is no longer needed.\n const nextSlide = useCallback(() => {\n setCurrentIndex((prev) => (prev + 1) % media.length);\n }, [media.length]);\n\n const prevSlide = useCallback(() => {\n setCurrentIndex((prev) => (prev - 1 + media.length) % media.length);\n }, [media.length]);\n\n const selectSlide = useCallback((index: number) => {\n if (index === currentIndex) return;\n setCurrentIndex(index);\n }, [currentIndex]);\n\n // Keyboard navigation - only when carousel is focused\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (media.length <= 1) return;\n \n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n prevSlide();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n nextSlide();\n }\n }, [nextSlide, prevSlide, media.length]);\n\n // Touch/swipe handling\n const minSwipeDistance = 50;\n\n const onTouchStart = (e: React.TouchEvent) => {\n setTouchEnd(null);\n setTouchStart(e.targetTouches[0].clientX);\n };\n\n const onTouchMove = (e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n };\n\n const onTouchEnd = () => {\n if (!touchStart || !touchEnd) return;\n \n const distance = touchStart - touchEnd;\n const isLeftSwipe = distance > minSwipeDistance;\n const isRightSwipe = distance < -minSwipeDistance;\n\n if (isLeftSwipe && media.length > 1) {\n nextSlide();\n }\n if (isRightSwipe && media.length > 1) {\n prevSlide();\n }\n };\n\n // Render YouTube embed via the SSoT `<Video>` — same lite-youtube\n // facade everywhere, no carousel-local fork.\n const renderYouTubeEmbed = (item: MediaItem, index: number) => (\n <Video\n kind=\"youtube\"\n url={item.src}\n title={item.alt || `Video ${index + 1}`}\n layout=\"fill\"\n priority={index === currentIndex}\n />\n );\n\n // Render video via the SSoT `<Video>` — MuxPlayer handles both HLS\n // and plain MP4, so the carousel no longer needs its own bare\n // `<video>` element + custom play overlay + 60 LOC of error handling.\n const renderVideo = (item: MediaItem, index: number) => (\n <Video\n url={item.src}\n poster={item.poster}\n muted\n layout=\"fill\"\n priority={index === currentIndex}\n />\n );\n\n // Render image\n const renderImage = (item: MediaItem, index: number) => (\n <div className=\"absolute inset-0 bg-black\">\n <img \n src={item.src} \n alt={item.alt || `Media ${index + 1}`} \n className={`w-full h-full object-${objectFit}`}\n loading=\"lazy\"\n onError={(e) => {\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n }}\n />\n </div>\n );\n\n // Render main media item\n const renderMainMedia = (item: MediaItem, index: number) => {\n switch (item.type) {\n case 'youtube':\n return renderYouTubeEmbed(item, index);\n case 'video':\n return renderVideo(item, index);\n case 'image':\n default:\n return renderImage(item, index);\n }\n };\n\n // Render thumbnail\n const renderThumbnail = (item: MediaItem, index: number) => {\n const isActive = index === currentIndex;\n \n let thumbnailSrc = item.src;\n if (item.type === 'youtube') {\n // Use the SSoT `extractYouTubeId` (strict URL parsing, ReDoS-safe)\n // rather than a local regex so YouTube id extraction has a single\n // implementation across the lib.\n const videoId = extractYouTubeId(item.src);\n thumbnailSrc = videoId ? `https://img.youtube.com/vi/${videoId}/mqdefault.jpg` : item.src;\n } else if (item.type === 'video' && item.poster) {\n thumbnailSrc = item.poster;\n }\n\n return (\n <button\n key={index}\n onClick={() => selectSlide(index)}\n className={cn(\n \"relative flex-shrink-0 overflow-hidden transition-all duration-200\",\n \"w-20 h-20 md:w-24 md:h-24 rounded-lg border-2\",\n isActive \n ? \"border-[#FFC008] ring-2 ring-[#FFC008]/20\" \n : \"border-ods-border hover:border-[#888888]\"\n )}\n >\n <img\n src={thumbnailSrc}\n alt={item.alt || `Thumbnail ${index + 1}`}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n \n {/* Play icon overlay for videos */}\n {(item.type === 'video' || item.type === 'youtube') && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/30\">\n <div className=\"bg-black/70 rounded-full p-1\">\n <PlayIcon size={12} color=\"white\" />\n </div>\n </div>\n )}\n \n {/* Active indicator */}\n {isActive && (\n <div className=\"absolute bottom-1 right-1 w-2 h-2 bg-[#FFC008] rounded-full\" />\n )}\n </button>\n );\n };\n\n // Get CSS for aspect ratio\n const getAspectRatioClass = () => {\n switch (aspectRatio) {\n case '4/3':\n return 'aspect-[4/3]';\n case '3/2':\n return 'aspect-[3/2]';\n case '1/1':\n return 'aspect-square';\n case '16/9':\n default:\n return 'aspect-video';\n }\n };\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {/* Main Display Area with Fixed Aspect Ratio */}\n <div \n ref={carouselRef}\n className={cn(\n \"relative bg-[#161616] border border-ods-border rounded-2xl overflow-hidden group w-full\",\n getAspectRatioClass()\n )}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n onKeyDown={media.length > 1 ? handleKeyDown : undefined}\n tabIndex={media.length > 1 ? 0 : undefined}\n role={media.length > 1 ? \"region\" : undefined}\n aria-label={media.length > 1 ? \"Media carousel, use arrow keys to navigate\" : undefined}\n >\n {/* Media content */}\n {renderMainMedia(currentItem, currentIndex)}\n\n {/* Navigation Arrows - only show if multiple items */}\n {media.length > 1 && (\n <>\n <button\n onClick={prevSlide}\n className=\"absolute left-3 top-1/2 transform -translate-y-1/2 bg-black/50 text-white rounded-full p-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 hover:bg-black/70 z-10\"\n aria-label=\"Previous media\"\n >\n <ChevronLeftIcon />\n </button>\n\n <button\n onClick={nextSlide}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 bg-black/50 text-white rounded-full p-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 hover:bg-black/70 z-10\"\n aria-label=\"Next media\"\n >\n <ChevronRightIcon />\n </button>\n\n {/* Media Counter */}\n <div className=\"absolute top-3 right-3 bg-black/70 text-white px-3 py-1 rounded-lg text-sm font-medium\">\n {currentIndex + 1} / {media.length}\n </div>\n </>\n )}\n </div>\n\n {/* Thumbnail Navigation - only show if multiple items and showThumbnails is true */}\n {media.length > 1 && showThumbnails && (\n <div className=\"w-full\">\n <div \n ref={thumbnailsRef}\n className=\"flex gap-2 overflow-x-auto scrollbar-none py-2\"\n style={{ scrollbarWidth: 'none', msOverflowStyle: 'none' }}\n >\n {media.map((item, index) => renderThumbnail(item, index))}\n </div>\n </div>\n )}\n </div>\n );\n}); ","\"use client\"\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\n\ninterface MetricValueProps {\n value: string | number;\n label: string;\n className?: string;\n}\n\n/**\n * Displays a numeric/short textual value followed by a smaller grey label.\n * Example: 30s Generation Time\n */\nexport function MetricValue({ value, label, className }: MetricValueProps) {\n return (\n <div className={cn('flex items-end gap-2 whitespace-nowrap font-[\"DM_Sans\"] text-lg leading-[24px] text-ods-text-primary', className)}>\n {value}\n <span className=\"text-sm text-ods-text-secondary\">\n {label}\n </span>\n </div>\n );\n} ","\"use client\"\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { SquareAvatar } from './square-avatar';\n\ninterface MSPDisplayProps {\n name: string;\n logoUrl?: string | null;\n size?: number; // avatar size in px (square)\n className?: string;\n}\n\nexport function MSPDisplay({ name, logoUrl, size = 40, className }: MSPDisplayProps) {\n return (\n <div className={cn('flex items-center gap-2 min-w-0', className)}>\n <SquareAvatar src={logoUrl ?? undefined} fallbackName={name} size={size} />\n <h2 className=\"truncate pl-2\">\n {name}\n </h2>\n </div>\n );\n} ","\"use client\";\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { getProxiedImageUrl } from '../utils/image-proxy';\n\ninterface SquareAvatarProps {\n /** Image URL (if null/undefined, renders initials fallback) */\n src?: string | null;\n /** Fallback name used to derive initials when no image */\n fallbackName?: string;\n /** Size in px (applied to width & height). Defaults to 56 (Tailwind w-14 h-14). */\n size?: number;\n /** If true, avatar takes full width with square aspect ratio */\n fullWidth?: boolean;\n className?: string;\n}\n\n/**\n * Square avatar with rounded edges used across cards / dashboards.\n * Automatically shows image (via proxied URL) or initials fallback.\n */\nexport function SquareAvatar({ src, fallbackName = '', size = 56, fullWidth = false, className }: SquareAvatarProps) {\n const initials = React.useMemo(() => {\n if (!fallbackName) return '';\n return fallbackName\n .split(' ')\n .map((n) => n.charAt(0))\n .join('')\n .slice(0, 2)\n .toUpperCase();\n }, [fallbackName]);\n\n const style: React.CSSProperties = fullWidth ? {} : { width: size, height: size };\n\n return (\n <div\n className={cn(\n 'rounded-lg border border-ods-border flex items-center justify-center overflow-hidden bg-ods-bg-secondary',\n fullWidth ? 'w-full aspect-square' : 'flex-shrink-0',\n className,\n )}\n style={style}\n >\n {src ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={getProxiedImageUrl(src) || src} alt=\"Avatar\" className=\"object-cover w-full h-full\" />\n ) : (\n <span className={cn(\n \"font-['DM_Sans'] text-ods-text-primary font-bold\",\n fullWidth ? 'text-4xl' : 'text-lg'\n )}>\n {initials}\n </span>\n )}\n </div>\n );\n} ","\"use client\"\n\nimport React from 'react';\nimport { Terminal, DollarSign, Network, Users } from 'lucide-react';\n\ninterface FeatureCardProps {\n icon: React.ReactNode;\n title: string;\n description: string;\n}\n\nconst FeatureCard: React.FC<FeatureCardProps> = ({ icon, title, description }) => {\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-3xl p-6 flex flex-col gap-6 h-full hover:bg-[#252525] transition-colors duration-200\">\n {/* Icon Container */}\n <div className=\"w-12 h-12 bg-[#161616] border border-ods-border rounded flex items-center justify-center\">\n <div className=\"w-6 h-6 text-ods-text-secondary\">\n {icon}\n </div>\n </div>\n \n {/* Text Container */}\n <div className=\"flex flex-col gap-2\">\n <h3 className=\"text-h3 text-ods-text-primary tracking-[-0.36px]\">\n {title}\n </h3>\n <p className=\"text-h4 text-ods-text-primary\">\n {description}\n </p>\n </div>\n </div>\n );\n};\n\nconst OpenSourceFeatures: React.FC = () => {\n const features = [\n {\n icon: <Terminal className=\"w-6 h-6\" />,\n title: \"Built on FOSS\",\n description: \"No black boxes. No hidden fees. Just transparent, community-driven software you control.\"\n },\n {\n icon: <DollarSign className=\"w-6 h-6\" />,\n title: \"Own Your Stack\",\n description: \"Replace overpriced, proprietary tools with open, auditable, and customizable components.\"\n },\n {\n icon: <Network className=\"w-6 h-6\" />,\n title: \"Modular by Design\",\n description: \"Add, remove, or extend features with ease — OpenFrame adapts to how you work.\"\n },\n {\n icon: <Users className=\"w-6 h-6\" />,\n title: \"Community-Powered\",\n description: \"Developed with and for MSPs by a global open-source community. You're not just a user — you're part of the roadmap.\"\n }\n ];\n\n return (\n <section className=\"w-full bg-[#161616] py-12 md:py-16 lg:py-20\">\n <div className=\"w-full max-w-[1920px] mx-auto px-6 md:px-20\">\n {/* Section Title */}\n <div className=\"flex flex-col items-center gap-10\">\n <h2 className=\"text-h1 text-center tracking-[-0.02em] text-ods-text-primary w-full\">\n <span className=\"text-ods-accent\">100%</span>\n <span> Open-Source. </span>\n <span className=\"text-ods-accent\">0%</span>\n <span> Bullsh*t.</span>\n </h2>\n \n {/* Features Grid */}\n <div className=\"w-full\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n {features.map((feature, index) => (\n <FeatureCard\n key={index}\n icon={feature.icon}\n title={feature.title}\n description={feature.description}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default OpenSourceFeatures; ","\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface PersistentFilterControlsProps {\n /**\n * Whether the filters are currently in a loading state\n */\n isLoading: boolean\n /**\n * The filter control components (search, sidebar, mobile dropdown)\n */\n children: ReactNode\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Disabled opacity (0-1)\n */\n disabledOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n /**\n * Whether to prevent pointer events during loading\n */\n preventInteraction?: boolean\n}\n\n/**\n * PersistentFilterControls\n * \n * A wrapper component that keeps filter controls visible during loading states\n * but provides visual feedback that they are temporarily disabled.\n * \n * Features:\n * - Reduces opacity and disables pointer events during loading\n * - Maintains layout and accessibility during loading states\n * - Provides smooth transitions between enabled/disabled states\n * - Preserves keyboard navigation and screen reader functionality\n * - Applies consistent disabled styling across all filter types\n * \n * Usage:\n * ```tsx\n * <PersistentFilterControls isLoading={isLoadingVendors}>\n * <SearchContainer />\n * <CategoryFilterSidebar />\n * <MobileDropdown />\n * </PersistentFilterControls>\n * ```\n */\nexport function PersistentFilterControls({\n isLoading,\n children,\n className,\n disabledOpacity = 0.6,\n transitionDuration = 300,\n preventInteraction = true,\n}: PersistentFilterControlsProps) {\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isLoading && preventInteraction && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isLoading ? disabledOpacity : 1,\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"region\"\n aria-label=\"Filter controls\"\n aria-busy={isLoading}\n data-loading={isLoading}\n >\n {/* Loading indicator overlay for screen readers */}\n {isLoading && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n Filters temporarily disabled while loading content\n </div>\n )}\n\n {/* Filter controls with disabled state styling */}\n <div \n className={cn(\n \"transition-all ease-in-out\",\n isLoading && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n >\n {children}\n </div>\n\n {/* Visual loading indicator */}\n {isLoading && (\n <div \n className=\"absolute top-2 right-2 z-10\"\n role=\"status\"\n aria-label=\"Loading filters\"\n >\n <div className=\"w-4 h-4 border-2 border-ods-border border-t-[#FFC008] rounded-full animate-spin\" />\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Enhanced SearchContainer wrapper that integrates with persistent loading\n */\ninterface PersistentSearchContainerProps {\n isLoading: boolean\n children: ReactNode\n className?: string\n}\n\nexport function PersistentSearchContainer({\n isLoading,\n children,\n className\n}: PersistentSearchContainerProps) {\n return (\n <PersistentFilterControls \n isLoading={isLoading}\n preventInteraction={false} // Keep search interactive during loading\n className={className}\n >\n {children}\n </PersistentFilterControls>\n )\n}\n\n/**\n * Enhanced sidebar wrapper for desktop filter controls\n */\ninterface PersistentSidebarProps {\n isLoading: boolean\n children: ReactNode\n className?: string\n}\n\nexport function PersistentSidebar({\n isLoading,\n children,\n className\n}: PersistentSidebarProps) {\n return (\n <PersistentFilterControls \n isLoading={isLoading}\n disabledOpacity={0.5}\n className={cn(\"lg:sticky lg:top-20\", className)}\n >\n {children}\n </PersistentFilterControls>\n )\n}\n\n/**\n * Enhanced mobile dropdown wrapper\n */\ninterface PersistentMobileDropdownProps {\n isLoading: boolean\n children: ReactNode\n className?: string\n}\n\nexport function PersistentMobileDropdown({\n isLoading,\n children,\n className\n}: PersistentMobileDropdownProps) {\n return (\n <PersistentFilterControls \n isLoading={isLoading}\n disabledOpacity={0.7}\n className={cn(\"lg:hidden\", className)}\n >\n {children}\n </PersistentFilterControls>\n )\n} ","\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface PersistentPaginationProps {\n /**\n * Whether pagination is currently in a loading state\n */\n isLoading: boolean\n /**\n * The pagination component\n */\n children: ReactNode\n /**\n * Current page number\n */\n currentPage: number\n /**\n * Total number of pages\n */\n totalPages: number\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Disabled opacity (0-1)\n */\n disabledOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n /**\n * Whether to show loading state in pagination\n */\n showLoadingState?: boolean\n}\n\n/**\n * PersistentPagination\n * \n * A wrapper component that keeps pagination visible during loading states\n * but provides visual feedback that it's temporarily disabled.\n * \n * Features:\n * - Maintains pagination visibility during content loading\n * - Disables interaction but preserves layout\n * - Shows current page context even when loading\n * - Provides accessibility support for loading states\n * - Smooth transitions between enabled/disabled states\n * \n * Usage:\n * ```tsx\n * <PersistentPagination\n * isLoading={isLoadingVendors}\n * currentPage={currentPage}\n * totalPages={totalPages}\n * >\n * <Pagination currentPage={currentPage} totalPages={totalPages} />\n * </PersistentPagination>\n * ```\n */\nexport function PersistentPagination({\n isLoading,\n children,\n currentPage,\n totalPages,\n className,\n disabledOpacity = 0.5,\n transitionDuration = 300,\n showLoadingState = true,\n}: PersistentPaginationProps) {\n // ALWAYS show pagination for predictable layout - just gray it out when not needed\n // Removed condition that hides pagination completely\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n \"flex justify-center items-center\",\n isLoading && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isLoading ? disabledOpacity : 1,\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n >\n {/* Loading state announcement for screen readers */}\n {isLoading && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n Pagination temporarily disabled while loading page {currentPage} of {totalPages}\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isLoading && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n aria-hidden={isLoading}\n >\n {children}\n </div>\n\n {/* REMOVED: Loading overlay - only card skeletons should show during loading */}\n </div>\n )\n}\n\n/**\n * Hook for managing pagination loading states\n */\nexport function usePaginationLoading(\n isLoading: boolean,\n currentPage: number,\n totalPages: number\n) {\n const shouldShowPagination = totalPages > 1 || isLoading\n \n const paginationProps = {\n 'aria-busy': isLoading,\n 'data-loading': isLoading,\n 'data-current-page': currentPage,\n 'data-total-pages': totalPages,\n }\n\n const getLoadingMessage = () => {\n if (isLoading) {\n return `Loading page ${currentPage} of ${totalPages}`\n }\n return `Page ${currentPage} of ${totalPages}`\n }\n\n return {\n shouldShowPagination,\n paginationProps,\n getLoadingMessage,\n }\n}\n\n/**\n * Enhanced pagination component that includes loading states\n */\ninterface PersistentPaginationWrapperProps {\n isLoading: boolean\n currentPage: number\n totalPages: number\n onPageChange?: (page: number) => void\n className?: string\n variant?: 'vendor' | 'blog'\n}\n\nexport function PersistentPaginationWrapper({\n isLoading,\n currentPage,\n totalPages,\n onPageChange,\n className,\n variant = 'vendor'\n}: PersistentPaginationWrapperProps) {\n const { getLoadingMessage } = usePaginationLoading(\n isLoading,\n currentPage,\n totalPages\n )\n\n // ALWAYS show pagination for predictable layout\n // For no results (totalPages = 0), show grayed out pagination\n const hasResults = totalPages > 0\n const displayTotalPages = hasResults ? totalPages : 1\n const displayCurrentPage = hasResults ? currentPage : 1\n // Only disable during loading, but still show when no results (just grayed out)\n const isPaginationDisabled = isLoading\n const hasNoResults = !hasResults && !isLoading\n\n // Use UnifiedPagination directly from ui-kit instead of importing from consuming apps\n // Both Pagination and BlogPagination in multi-platform-hub are just wrappers around UnifiedPagination\n const PaginationComponent = require('./unified-pagination').UnifiedPagination\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out flex justify-center items-center\",\n (isPaginationDisabled || hasNoResults) && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isPaginationDisabled ? 0.3 : hasNoResults ? 0.5 : 1,\n transitionDuration: \"300ms\"\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n data-has-results={hasResults}\n >\n {/* Loading/no results state announcement for screen readers */}\n {(isLoading || !hasResults) && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n {isLoading \n ? `Pagination temporarily disabled while loading page ${displayCurrentPage} of ${displayTotalPages}`\n : `No results available - pagination disabled`\n }\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isPaginationDisabled && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: \"300ms\"\n }}\n aria-hidden={isPaginationDisabled}\n >\n <PaginationComponent\n currentPage={displayCurrentPage}\n totalPages={displayTotalPages}\n onPageChange={hasResults ? onPageChange : () => {}} // Provide empty function instead of undefined\n />\n </div>\n\n {/* REMOVED: Loading overlays - only card skeletons should show during loading */}\n </div>\n )\n} ","\"use client\"\n\nimport { StructuredPricingSummary as StructuredPricingItem } from '../utils/compare-utils-stub'\n\n// Using StructuredPricingItem from compare-utils instead of local interface\n\ninterface PricingStyleConfig {\n priceTextSize: string\n priceTextColor: string\n secondaryTextSize: string\n secondaryTextColor: string\n showTildePrefix: boolean\n fontFamily?: string\n}\n\ninterface PricingDisplayProps {\n pricing: StructuredPricingItem[] | string | StructuredPricingItem // Support both new structure and legacy string\n className?: string\n styleConfig?: PricingStyleConfig\n}\n\n// Default style configurations for different contexts\nexport const PRICING_STYLES = {\n // Comparison table style (current default)\n comparison: {\n priceTextSize: 'text-[16px]',\n priceTextColor: 'text-ods-text-primary',\n secondaryTextSize: 'text-[16px]',\n secondaryTextColor: 'text-ods-text-secondary',\n showTildePrefix: false,\n fontFamily: \"font-['DM_Sans']\"\n },\n // Vendor dropdown compact style (Figma design)\n compact: {\n priceTextSize: 'text-[12px]',\n priceTextColor: 'text-ods-text-secondary',\n secondaryTextSize: 'text-[12px]',\n secondaryTextColor: 'text-ods-text-secondary',\n showTildePrefix: true,\n fontFamily: \"font-['DM_Sans']\"\n },\n // Card style for vendor cards\n card: {\n priceTextSize: 'text-[14px]',\n priceTextColor: 'text-ods-text-primary',\n secondaryTextSize: 'text-[14px]',\n secondaryTextColor: 'text-ods-text-secondary',\n showTildePrefix: true,\n fontFamily: \"font-['DM_Sans']\"\n }\n} as const\n\n/**\n * Shared component for consistent pricing display with configurable styling\n * Now accepts structured pricing data and style configuration for better control\n */\nexport function PricingDisplay({ \n pricing, \n className = \"\", \n styleConfig = PRICING_STYLES.comparison \n}: PricingDisplayProps) {\n // Legacy support for string input\n if (typeof pricing === 'string') {\n return <LegacyPricingDisplay pricing={pricing} className={className} styleConfig={styleConfig} />\n }\n \n // Convert to array if single item\n const pricingArray = Array.isArray(pricing) ? pricing : [pricing];\n \n // Handle empty pricing\n if (!pricingArray || pricingArray.length === 0) {\n return (\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize} ${styleConfig.fontFamily} ${className}`}>\n No pricing data\n </span>\n )\n }\n \n // Handle single pricing item\n if (pricingArray.length === 1) {\n const item = pricingArray[0]\n const price = item.ranges?.[0]?.min || 0;\n const unit = item.ranges?.[0]?.unit;\n return (\n <span className={`${styleConfig.fontFamily} ${className}`}>\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`}>\n {formatPriceValue(price, styleConfig.showTildePrefix)}\n </span>\n {unit && (\n <span className={`${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`}>\n /{unit}\n </span>\n )}\n </span>\n )\n }\n \n // Handle multiple pricing items\n const priceValues = pricingArray.map(item => formatPriceValue(item.ranges?.[0]?.min || 0, styleConfig.showTildePrefix))\n \n // Find the first item that has unit info\n const itemWithUnit = pricingArray.find(item => item.ranges?.[0]?.unit)\n \n return (\n <span className={`${styleConfig.fontFamily} ${className}`}>\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`}>\n {priceValues.join(' | ')}\n </span>\n {itemWithUnit && itemWithUnit.ranges?.[0]?.unit && (\n <span className={`${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`}>\n /{itemWithUnit.ranges[0].unit}\n </span>\n )}\n </span>\n )\n}\n\n/**\n * Format price value consistently with configurable tilde prefix\n */\nfunction formatPriceValue(price: number | 'Free' | 'Contact', showTildePrefix: boolean = false): string {\n if (price === 'Free' || price === 'Contact') {\n return price\n }\n if (price === 0) {\n return 'Free'\n }\n return showTildePrefix ? `~$${price}` : `$${price}`\n}\n\n/**\n * Legacy component for backward compatibility with string input\n */\nfunction LegacyPricingDisplay({ \n pricing, \n className = \"\", \n styleConfig = PRICING_STYLES.comparison \n}: { \n pricing: string; \n className?: string; \n styleConfig?: PricingStyleConfig \n}) {\n // Handle \"Free\" case\n if (pricing === 'Free' || pricing === 'No pricing data') {\n return (\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize} ${styleConfig.fontFamily} ${className}`}>\n {pricing}\n </span>\n )\n }\n \n // Parse pricing string to separate main price from unit/cycle info\n const parsePricing = (pricingStr: string) => {\n // Handle comma-separated format like \"$10/device/month, $120/device/year\"\n if (pricingStr.includes(', ')) {\n // Split by comma and parse each part separately\n const parts = pricingStr.split(', ')\n const parsedParts = parts.map(part => {\n const match = part.trim().match(/^(\\$\\d+(?:-\\$\\d+)?|\\d+(?:-\\d+)?|Free)(.*)$/)\n if (match) {\n const price = match[1].startsWith('$') ? match[1] : `$${match[1]}`\n return {\n price,\n suffix: match[2]\n }\n }\n return { price: part.trim(), suffix: '' }\n })\n \n // Reconstruct with proper styling\n return {\n mainValue: parsedParts.map(p => p.price).join(', '),\n secondaryInfo: parsedParts.length > 0 && parsedParts[0].suffix ? parsedParts[0].suffix : ''\n }\n }\n \n // Handle pipe-separated format like \"$529/site/year | Free\"\n if (pricingStr.includes(' | ')) {\n const parts = pricingStr.split(' | ')\n const prices = parts.map(part => {\n const match = part.trim().match(/^(\\$\\d+(?:-\\$\\d+)?|\\d+(?:-\\d+)?|Free)(.*)$/)\n return match ? match[1] : part.trim()\n })\n \n return {\n mainValue: prices.join(' | '),\n secondaryInfo: ''\n }\n }\n \n // Handle multi-cycle format like \"$10/$120/device/month/year\"\n if (pricingStr.includes('/$')) {\n // Find all price patterns\n const pricePattern = /\\$\\d+(?:-\\$\\d+)?/g\n const matches = [...pricingStr.matchAll(pricePattern)]\n \n if (matches.length > 0) {\n const lastMatch = matches[matches.length - 1]\n const lastPriceEnd = lastMatch.index! + lastMatch[0].length\n \n const mainValue = pricingStr.substring(0, lastPriceEnd)\n const secondaryInfo = pricingStr.substring(lastPriceEnd)\n \n return { mainValue, secondaryInfo }\n }\n }\n \n // Handle single price format like \"$529/site/year\" or \"$0-$529/site/year\"\n const singlePriceMatch = pricingStr.match(/^(\\$\\d+(?:-\\$\\d+)?|Free)(.*)$/)\n if (singlePriceMatch) {\n return {\n mainValue: singlePriceMatch[1],\n secondaryInfo: singlePriceMatch[2]\n }\n }\n \n // Fallback - treat entire string as main value\n return {\n mainValue: pricingStr,\n secondaryInfo: ''\n }\n }\n \n const { mainValue, secondaryInfo } = parsePricing(pricing)\n \n return (\n <span className={`${styleConfig.fontFamily} ${className}`}>\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`}>{mainValue}</span>\n {secondaryInfo && (\n <span className={`${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`}>{secondaryInfo}</span>\n )}\n </span>\n )\n}\n\n/**\n * Utility function to format pricing for display in the PricingDisplay component\n * This can be used to pre-process pricing strings if needed\n */\nexport function formatPricingForDisplay(pricing: string): string {\n return pricing\n} ","\"use client\"\n\nexport interface ResultsCountProps {\n currentPage: number\n pageSize: number\n totalResults: number\n resultType: 'vendors' | 'posts'\n sortingMessage?: string\n}\n\nexport function ResultsCount({\n currentPage,\n pageSize,\n totalResults,\n resultType,\n sortingMessage\n}: ResultsCountProps) {\n if (totalResults === 0) {\n return null\n }\n\n const startIndex = ((currentPage - 1) * pageSize) + 1\n const endIndex = Math.min(currentPage * pageSize, totalResults)\n const plural = resultType === 'vendors' ? 'vendors' : 'posts'\n const singular = resultType === 'vendors' ? 'vendor' : 'post'\n const displayType = totalResults === 1 ? singular : plural\n\n return (\n <div className=\"mb-6\">\n <p className=\"text-ods-text-secondary text-sm font-['DM_Sans']\">\n {totalResults > 0 && (\n <>\n Showing {startIndex}-{endIndex} of {totalResults} {displayType}\n {sortingMessage && (\n <span className=\"ml-2 text-ods-accent\">• {sortingMessage}</span>\n )}\n </>\n )}\n </p>\n </div>\n )\n} ","\"use client\"\n\nimport { OpenSourceIcon, CoinsIcon } from \"./icons-stub\"\nimport { OpenFrameLogo } from \"./openframe-logo\"\nimport { cn } from \"../utils/cn\"\nimport { Hand, Sparkles } from \"lucide-react\"\n\nexport interface VendorTagProps {\n type: 'open-source' | 'commercial' | 'free' | 'freemium' | 'paid' | 'enterprise' | 'recommended' | 'classification' | 'ai' | 'manual' | 'openframe_selected' | 'placeholder'\n text?: string\n className?: string\n size?: 'sm' | 'md'\n hidden?: boolean\n accentColor?: string\n}\n\nexport function VendorTag({\n type,\n text,\n className = \"\",\n hidden = false,\n size = 'md',\n accentColor\n}: VendorTagProps) {\n // Base classes for the tag container\n const baseClasses = cn(\n \"flex items-center gap-1.5 bg-[#161616] border border-ods-border rounded whitespace-nowrap\",\n size === 'sm' ? \"px-2 py-1\" : \"px-2.5 py-1.5\"\n )\n\n\n // Get display text and styling based on type\n const getTagContent = () => {\n switch (type) {\n case 'placeholder':\n return {\n text: \"Placeholder\",\n textColor: \"text-ods-text-primary\",\n icon: (\n <div className=\"w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0\">\n <Sparkles width={10} height={10} className=\"text-ods-text-primary\" />\n </div>\n )\n }\n case 'ai':\n return {\n text: \"AI Selected\",\n textColor: \"text-ods-text-primary\",\n icon: (\n <div className=\"w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0\">\n <Sparkles width={10} height={10} className=\"text-ods-text-primary\" />\n </div>\n )\n }\n case 'manual':\n return {\n text: \"Manually Selected\",\n textColor: \"text-ods-text-secondary\",\n icon: (\n <div className=\"w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0\">\n <Hand width={10} height={10} className=\"text-ods-text-secondary\" />\n </div>\n )\n }\n case 'open-source':\n return {\n text: text || \"Open Source\",\n icon: (\n <div \n className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\"\n style={accentColor ? { backgroundColor: accentColor } : undefined}\n >\n <OpenSourceIcon width={10} height={10} className=\"text-[#1A1A1A]\" />\n </div>\n )\n }\n case 'commercial':\n return {\n text: text || \"Commercial Vendor\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <CoinsIcon width={10} height={10} className=\"text-ods-text-secondary\" />\n </div>\n )\n }\n case 'free':\n return {\n text: text || \"Free\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">$</span>\n </div>\n )\n }\n case 'freemium':\n return {\n text: text || \"Freemium\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">$</span>\n </div>\n )\n }\n case 'paid':\n return {\n text: text || \"Paid\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <CoinsIcon width={10} height={10} className=\"text-ods-text-secondary\" />\n </div>\n )\n }\n case 'enterprise':\n return {\n text: text || \"Enterprise\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">E</span>\n </div>\n )\n }\n case 'recommended':\n return {\n text: text || \"Recommended\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">★</span>\n </div>\n )\n }\n case 'classification':\n // Handle specific classification types based on the text value\n const classificationType = text?.toLowerCase()\n\n if (classificationType === 'open_source') {\n return {\n text: \"Open Source\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <OpenSourceIcon width={10} height={10} className=\"text-[#1A1A1A]\" />\n </div>\n )\n }\n } else if (classificationType === 'commercial') {\n return {\n text: \"Commercial Vendor\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <CoinsIcon width={10} height={10} className=\"text-ods-text-secondary\" />\n </div>\n )\n }\n } else if (classificationType === 'openframe_selected') {\n return {\n text: \"OpenFrame Selected\",\n icon: <OpenFrameLogo lowerPathColor=\"currentColor\" upperPathColor=\"currentColor\" className=\"h-4 w-4 text-ods-accent\" />\n }\n } else {\n // Fallback for unknown classification types\n return {\n text: text || \"Classification\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">C</span>\n </div>\n )\n }\n }\n case 'openframe_selected':\n return {\n text: text || \"OpenFrame Selected\",\n icon: <OpenFrameLogo lowerPathColor=\"currentColor\" upperPathColor=\"currentColor\" className=\"h-4 w-4 text-ods-accent\" />\n }\n default:\n return {\n text: text || type,\n icon: null\n }\n }\n }\n\n const { text: displayText, icon, textColor } = getTagContent()\n\n return (\n <div className={cn(baseClasses, className, hidden && \"invisible\")}>\n {icon}\n <span className={cn(\n \"font-mono font-semibold uppercase\",\n textColor ? textColor : \"text-ods-text-primary\",\n size === 'sm' ? \"text-[10px]\" : \"text-xs\"\n )}>\n {displayText}\n </span>\n </div>\n )\n} ","\"use client\"\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { VendorTag } from './vendor-tag';\n\nexport type SelectionSourceType = 'ai' | 'manual' | 'placeholder';\n\ninterface SelectionSourceBadgeProps {\n source: SelectionSourceType;\n className?: string;\n hidden?: boolean;\n}\n\n/**\n * Small pill badge indicating whether a vendor was selected manually or by AI.\n * Colors follow OpenMSP design tokens.\n */\nexport function SelectionSourceBadge({ source, hidden = false }: SelectionSourceBadgeProps) {\n if (!source) {\n return null;\n }\n \n return (\n <VendorTag\n key={`source-${source}`}\n type={source?.toLowerCase() as 'ai' | 'manual' | 'placeholder'}\n size=\"sm\"\n hidden={hidden}\n />\n );\n} ","\"use client\";\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { SquareAvatar } from './square-avatar';\n\ninterface UserDisplayProps {\n name: string;\n avatarUrl?: string | null;\n /** optional secondary text (e.g., relative timestamp) */\n subtitle?: string | null;\n /** Avatar size in px (defaults 32) */\n size?: number;\n className?: string;\n}\n\n/**\n * Reusable horizontal avatar + name (+ optional subtitle) row that follows\n * the visual pattern used in CommentCard headers.\n */\nexport function UserDisplay({ name, avatarUrl, subtitle, size = 32, className }: UserDisplayProps) {\n return (\n <div className={cn('flex items-center gap-2 min-w-0', className)}>\n <SquareAvatar src={avatarUrl ?? undefined} fallbackName={name} size={size} />\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-['DM_Sans'] text-lg leading-[22px] text-ods-text-primary truncate\">\n {name}\n </p>\n {subtitle && (\n <span className=\"font-['DM_Sans'] text-md leading-[16px] text-ods-text-secondary truncate\">\n {subtitle}\n </span>\n )}\n </div>\n </div>\n );\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from \"./unified-skeleton\"\nimport { CardSkeletonGrid } from \"./card-skeleton\"\n\ninterface PageLayoutSkeletonProps {\n className?: string\n}\n\n/**\n * Announcement bar skeleton that matches the AnnouncementBar component\n */\nexport function AnnouncementBarSkeleton() {\n return (\n <div className=\"bg-[#2A2A2A] relative w-full animate-pulse\">\n <div className=\"flex flex-row items-center relative w-full\">\n <div className=\"box-border flex flex-row gap-4 md:gap-6 items-center justify-start pl-4 md:pl-6 pr-12 md:pr-16 py-3 md:py-4 relative w-full\">\n {/* Logo skeleton */}\n <div className=\"relative shrink-0 w-6 h-6 md:w-8 md:h-8 bg-ods-border rounded\"></div>\n \n {/* Text content skeleton */}\n <div className=\"flex-1 min-w-0 space-y-1 md:space-y-2\">\n <div className=\"h-[14px] md:h-[18px] bg-ods-border rounded w-3/4 max-w-md\"></div>\n <div className=\"h-[12px] md:h-[18px] bg-ods-border rounded w-full max-w-lg hidden md:block\"></div>\n </div>\n \n {/* Close button skeleton */}\n <div className=\"absolute right-2 top-2 w-6 h-6 bg-ods-border rounded\"></div>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Header skeleton that matches the ClientOnlyHeader placeholder but with proper animations\n */\nexport function HeaderSkeleton() {\n return (\n <header className=\"sticky top-0 z-40 w-full flex items-center justify-between border-b border-ods-border bg-ods-card backdrop-blur-sm bg-ods-card/95 px-4 md:px-[80px] py-3 md:py-[12px] animate-pulse\">\n {/* Left: Logo skeleton */}\n <div className=\"flex items-center justify-start flex-1 min-w-0\">\n <div className=\"w-[110px] h-[26px] md:w-[137px] md:h-8 bg-[#2A2A2A] rounded\"></div>\n </div>\n\n {/* Center: Navigation skeleton - hidden on mobile, visible on desktop */}\n <nav className=\"hidden md:flex flex-1 basis-1/3 justify-center items-center gap-2 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <InteractiveSkeleton.Button className=\"w-24 h-10\" />\n <InteractiveSkeleton.Button className=\"w-24 h-10\" />\n <InteractiveSkeleton.Button className=\"w-24 h-10\" />\n </div>\n </nav>\n\n {/* Right: Actions skeleton */}\n <div className=\"flex items-center justify-end gap-4 flex-1 min-w-0\">\n {/* Mobile: Show hamburger skeleton */}\n <div className=\"md:hidden\">\n <InteractiveSkeleton.Button className=\"h-10 w-10\" />\n </div>\n \n {/* Desktop: Show action buttons skeletons */}\n <div className=\"hidden md:flex items-center gap-4\">\n <InteractiveSkeleton.Button className=\"w-10 h-10\" />\n <InteractiveSkeleton.Button className=\"w-32 h-10\" />\n <InteractiveSkeleton.Button className=\"w-20 h-10\" />\n </div>\n </div>\n </header>\n )\n}\n\n/**\n * Hero section skeleton for static content areas\n */\nexport function HeroSkeleton() {\n return (\n <section\n className=\"w-full flex flex-col items-center justify-center py-12 px-4 md:py-20 md:px-8 text-center animate-pulse\"\n style={{\n background: 'radial-gradient(circle at 50% 0%, #242323 0%, #1A1A1A 100%)'\n }}\n >\n {/* Title skeleton */}\n <TextSkeleton.Heading className=\"h-12 md:h-20 lg:h-24 mb-4 md:mb-6 max-w-4xl w-full\" />\n \n {/* Subtitle skeleton */}\n <div className=\"space-y-3 mb-8 md:mb-10 max-w-4xl w-full px-2\">\n <TextSkeleton.Body className=\"h-5 md:h-7\" />\n <TextSkeleton.Body className=\"h-5 md:h-7 w-3/4 mx-auto\" />\n </div>\n \n {/* CTA Button skeleton */}\n <InteractiveSkeleton.Button className=\"w-full md:w-64 h-12\" />\n </section>\n )\n}\n\n/**\n * Search container skeleton with filters\n */\nexport function SearchContainerSkeleton({ \n className,\n showFilters = true \n}: PageLayoutSkeletonProps & { showFilters?: boolean }) {\n return (\n <div className={cn(\"space-y-4\", className || \"\")}>\n {/* Search input and button */}\n <div className=\"flex gap-2 md:gap-4\">\n <InteractiveSkeleton.Input className=\"flex-1\" />\n <InteractiveSkeleton.Button className=\"w-32 md:w-40\" />\n </div>\n\n {/* Filter chips */}\n {showFilters && (\n <div className=\"flex gap-2 flex-wrap\">\n <InteractiveSkeleton.Chip />\n <InteractiveSkeleton.Chip className=\"w-24\" />\n <InteractiveSkeleton.Chip className=\"w-16\" />\n <InteractiveSkeleton.Chip className=\"w-20\" />\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Category sidebar skeleton for filtering pages\n */\nexport function CategorySidebarSkeleton({ className }: PageLayoutSkeletonProps) {\n // Matches the actual MultiLevelNavigation sidebar with folder/file icons, README badges, and chevrons\n const items = [\n { type: 'file', width: 'w-20', hasBadge: false },\n { type: 'folder', width: 'w-24', hasBadge: true },\n { type: 'folder', width: 'w-20', hasBadge: true },\n { type: 'folder', width: 'w-24', hasBadge: true },\n { type: 'folder', width: 'w-16', hasBadge: true },\n { type: 'folder', width: 'w-20', hasBadge: true },\n { type: 'folder', width: 'w-28', hasBadge: true },\n { type: 'folder', width: 'w-16', hasBadge: true },\n { type: 'folder', width: 'w-24', hasBadge: true },\n { type: 'file', width: 'w-28' },\n { type: 'file', width: 'w-36' },\n ]\n\n return (\n <div className={cn(\"w-full lg:w-[320px]\", className)}>\n {/* DATA ROOM label */}\n <UnifiedSkeleton className=\"h-[14px] w-24 rounded mb-4\" />\n\n {/* Navigation items — each has card background matching actual MultiLevelNavigation */}\n <div className=\"space-y-1.5\">\n {items.map((item, index) => (\n <div\n key={index}\n className={cn(\n \"flex items-center justify-between py-4 px-4 rounded-lg border border-ods-border min-h-[50px]\",\n index === 0 ? \"bg-ods-accent/20\" : \"bg-ods-card\"\n )}\n >\n <div className=\"flex items-center gap-2.5\">\n <UnifiedSkeleton className=\"w-4 h-4 shrink-0 rounded\" />\n <UnifiedSkeleton className={`h-[14px] ${item.width} rounded`} />\n </div>\n <div className=\"flex items-center gap-2 h-[18px]\">\n {item.hasBadge && <UnifiedSkeleton className=\"h-[18px] w-14 rounded\" />}\n {item.type === 'folder' && <UnifiedSkeleton className=\"w-4 h-4 rounded\" />}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n/**\n * Breadcrumb navigation skeleton\n */\nexport function BreadcrumbSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <div className={cn(\"flex items-center space-x-1 mb-6\", className)}>\n <TextSkeleton.Caption className=\"w-16\" />\n <UnifiedSkeleton variant=\"default\" className=\"w-4 h-4 rounded-full\" />\n <TextSkeleton.Caption className=\"w-24\" />\n <UnifiedSkeleton variant=\"default\" className=\"w-4 h-4 rounded-full\" />\n <TextSkeleton.Caption className=\"w-32\" />\n <UnifiedSkeleton variant=\"default\" className=\"w-4 h-4 rounded-full\" />\n <TextSkeleton.Caption className=\"w-24\" />\n </div>\n )\n}\n\n/**\n * Results header skeleton with count and sorting\n */\nexport function ResultsHeaderSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <div className={cn(\"flex flex-col md:flex-row justify-between items-start md:items-center gap-4 mb-6\", className)}>\n <div className=\"space-y-1\">\n <TextSkeleton.Body className=\"w-48\" />\n {/* <TextSkeleton.Caption className=\"w-32\" /> */}\n </div>\n </div>\n )\n}\n\n/**\n * Two-column layout skeleton (sidebar + main content)\n */\nexport function TwoColumnLayoutSkeleton({\n className,\n sidebarContent,\n mainContent,\n sidebarPosition = 'left'\n}: PageLayoutSkeletonProps & {\n sidebarContent?: React.ReactNode\n mainContent?: React.ReactNode\n sidebarPosition?: 'left' | 'right'\n}) {\n const sidebar = sidebarContent || <CategorySidebarSkeleton />\n const main = mainContent || <CardSkeletonGrid count={6} />\n\n return (\n <div className={cn(\n \"grid grid-cols-1 lg:grid-cols-[320px_1fr] gap-6 lg:gap-8\",\n sidebarPosition === 'right' && \"lg:grid-cols-[1fr_320px]\",\n className\n )}>\n {sidebarPosition === 'left' ? (\n <>\n <aside className=\"order-2 lg:order-1\">{sidebar}</aside>\n <main className=\"order-1 lg:order-2\">{main}</main>\n </>\n ) : (\n <>\n <main className=\"order-1\">{main}</main>\n <aside className=\"order-2\">{sidebar}</aside>\n </>\n )}\n </div>\n )\n}\n\n/**\n * Article/blog post layout skeleton\n */\nexport function ArticleLayoutSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <article className={cn(\"max-w-4xl mx-auto\", className)}>\n {/* Article header */}\n <header className=\"mb-8 md:mb-12 space-y-4 md:space-y-6\">\n {/* Category/tags */}\n <div className=\"flex gap-2\">\n <InteractiveSkeleton.Chip />\n <InteractiveSkeleton.Chip className=\"w-16\" />\n </div>\n \n {/* Title */}\n <div className=\"space-y-3\">\n <TextSkeleton.Heading className=\"w-full\" />\n <TextSkeleton.Heading className=\"w-3/4\" />\n </div>\n \n {/* Metadata */}\n <div className=\"flex items-center gap-4 pt-4 border-t border-ods-divider\">\n <div className=\"flex items-center gap-2\">\n <MediaSkeleton.Avatar size=\"sm\" />\n <TextSkeleton.Caption className=\"w-24\" />\n </div>\n <TextSkeleton.Caption className=\"w-20\" />\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n </header>\n\n {/* Featured image */}\n <div className=\"mb-8 md:mb-12\">\n <MediaSkeleton.CardImage className=\"w-full h-64 md:h-96\" />\n </div>\n\n {/* Article content */}\n <div className=\"prose prose-invert max-w-none space-y-6\">\n {/* Paragraphs */}\n {Array.from({ length: 12 }).map((_, index) => (\n <div key={index} className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-5/6\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n ))}\n \n {/* Subheading in content */}\n <div className=\"py-4\">\n <TextSkeleton.Subheading className=\"w-2/3 mb-4\" />\n <div className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-4/5\" />\n </div>\n </div>\n </div>\n </article>\n )\n}\n\n/**\n * Vendor Detail Layout Skeleton - Complete vendor detail page structure\n * Matches the refactored vendor detail page with proper platform colors and responsive layout\n */\nexport function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <main className={cn(\"bg-[#161616] min-h-screen\", className)}>\n <div className=\"max-w-[1920px] mx-auto px-6 md:px-20 py-6 md:py-10\">\n {/* Breadcrumb */}\n <BreadcrumbSkeleton className=\"mb-6\" />\n\n {/* Main Layout Container */}\n <div className=\"flex flex-col lg:flex-row lg:gap-10\">\n {/* Left Content Area */}\n <div className=\"flex-1 min-w-0\">\n \n {/* Vendor Hero Section */}\n <div className=\"mb-10\">\n {/* Header - Logo and Title Side by Side */}\n <div className=\"flex gap-6 mb-6\">\n <div className=\"w-20 h-20 bg-ods-card border border-ods-border rounded-lg animate-pulse flex-shrink-0\"></div>\n \n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col gap-2\">\n {/* Large title skeleton */}\n <div className=\"h-12 md:h-16 lg:h-20 bg-[#2A2A2A] rounded animate-pulse w-80 max-w-full\"></div>\n {/* Category text */}\n <div className=\"h-5 md:h-6 bg-[#2A2A2A] rounded animate-pulse w-32\"></div>\n </div>\n \n {/* Pricing tags */}\n <div className=\"flex items-center gap-2\">\n <div className=\"h-8 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n <div className=\"h-8 bg-[#2A2A2A] rounded animate-pulse w-16\"></div>\n </div>\n </div>\n </div>\n\n {/* Vendor Image Display Skeleton */}\n <div className=\"w-full h-[300px] md:h-[400px] lg:h-[500px] bg-ods-card border border-ods-border rounded-lg animate-pulse mb-2\"></div>\n <div className=\"text-center\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-24 mx-auto\"></div>\n </div>\n </div>\n\n {/* Mobile Sidebar - Show on mobile only, positioned after title */}\n <div className=\"lg:hidden mb-10\">\n <div className=\"space-y-4\">\n {/* Deploy Button */}\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n \n {/* Voting Buttons */}\n <div className=\"space-y-2\">\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n </div>\n \n {/* GitHub Score Section */}\n <div className=\"border border-ods-border rounded-lg overflow-hidden\">\n {/* Header */}\n <div className=\"bg-ods-card p-4 flex items-center gap-3\">\n <div className=\"w-8 h-8 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"flex flex-col gap-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n </div>\n </div>\n \n {/* Stats */}\n <div className=\"p-4 space-y-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <div className=\"w-6 h-6 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"flex items-end gap-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded animate-pulse w-8\"></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n \n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n </div>\n </div>\n </div>\n\n {/* Alternatives Container */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-48\"></div>\n \n {/* Open Source Alternatives */}\n <div className=\"flex flex-col gap-4\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-48\"></div>\n <div className=\"flex flex-wrap gap-2\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-ods-card border border-ods-border rounded-lg animate-pulse w-24\"></div>\n ))}\n </div>\n </div>\n\n {/* Commercial Alternatives */}\n <div className=\"flex flex-col gap-4\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-52\"></div>\n <div className=\"flex flex-wrap gap-2\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-ods-card border border-ods-border rounded-lg animate-pulse w-28\"></div>\n ))}\n </div>\n </div>\n </div>\n\n {/* About Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-64\"></div>\n \n <div className=\"bg-ods-card border border-ods-border rounded-lg p-6 md:p-8\">\n <div className=\"space-y-4\">\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-5/6\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-4/5\"></div>\n </div>\n </div>\n </div>\n\n {/* Key Features Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-72\"></div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-4 flex gap-4\">\n <div className=\"w-12 h-12 bg-[#2A2A2A] rounded flex-shrink-0 animate-pulse\"></div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-3/4\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse\"></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Pros and Cons Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-80\"></div>\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Pros Column */}\n <div className=\"flex flex-col gap-6\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-16\"></div>\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-4 flex gap-3\">\n <div className=\"w-12 h-12 bg-[#161616] border border-ods-border rounded flex-shrink-0 animate-pulse\"></div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-2/3\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse\"></div>\n </div>\n </div>\n ))}\n </div>\n {/* Cons Column */}\n <div className=\"flex flex-col gap-6\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-16\"></div>\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-4 flex gap-3\">\n <div className=\"w-12 h-12 bg-[#161616] border border-ods-border rounded flex-shrink-0 animate-pulse\"></div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-2/3\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse\"></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Alternatives Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-72\"></div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-6 space-y-4\">\n {/* Header */}\n <div className=\"flex items-start gap-4\">\n <div className=\"w-16 h-16 bg-[#161616] border border-ods-border rounded-lg animate-pulse flex-shrink-0\"></div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-3/4\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-1/2\"></div>\n </div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n </div>\n \n {/* Description */}\n <div className=\"space-y-2\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-5/6\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-4/5\"></div>\n </div>\n \n {/* Footer */}\n <div className=\"flex items-center justify-between pt-2 border-t border-ods-border\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-16\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n </div>\n </div>\n ))}\n </div>\n {/* Show All Button */}\n <div className=\"h-12 bg-[#2A2A2A] rounded-md animate-pulse\"></div>\n </div>\n\n {/* Comments Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-64\"></div>\n \n {/* Comment Form Skeleton */}\n <div className=\"space-y-3\">\n <div className=\"flex gap-3\">\n <div className=\"flex-1 bg-[#161616] border border-ods-border rounded-lg overflow-hidden\">\n {/* Title Section */}\n <div className=\"border-b border-ods-border p-3\">\n <div className=\"h-3 bg-[#2A2A2A] rounded animate-pulse w-8 mb-2\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-full\"></div>\n </div>\n \n {/* Description Section */}\n <div className=\"p-3\">\n <div className=\"h-3 bg-[#2A2A2A] rounded animate-pulse w-16 mb-2\"></div>\n <div className=\"space-y-2\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-full\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-3/4\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-1/2\"></div>\n </div>\n </div>\n </div>\n \n {/* Send Button */}\n <div className=\"flex items-stretch\">\n <div className=\"h-[120px] w-20 bg-[#2A2A2A] rounded-lg animate-pulse\"></div>\n </div>\n </div>\n </div>\n \n {/* Sample Comment Cards */}\n <div className=\"space-y-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-4\">\n {/* Comment Header */}\n <div className=\"flex flex-col gap-3 mb-3 min-[420px]:flex-row min-[420px]:items-center min-[420px]:justify-between min-[420px]:gap-2\">\n <div className=\"flex items-center gap-2\">\n {/* User Info */}\n <div className=\"flex items-center gap-2 bg-ods-card border border-ods-border rounded-lg py-2 px-3\">\n <div className=\"w-8 h-8 bg-[#2A2A2A] rounded-lg animate-pulse\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n </div>\n \n {/* Timestamp */}\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n </div>\n </div>\n \n {/* Comment Content */}\n <div className=\"space-y-2\">\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-2/3\"></div>\n <div className=\"space-y-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-full\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-4/5\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-3/5\"></div>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Right Sidebar - Desktop Only */}\n <div className=\"hidden lg:block w-[290px] flex-shrink-0\">\n <div className=\"space-y-4\">\n {/* Deploy Button */}\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n \n {/* Voting Buttons */}\n <div className=\"space-y-2\">\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n </div>\n \n {/* GitHub Score Section */}\n <div className=\"border border-ods-border rounded-lg overflow-hidden\">\n {/* Header */}\n <div className=\"bg-ods-card p-4 flex items-center gap-3\">\n <div className=\"w-8 h-8 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"flex flex-col gap-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n </div>\n </div>\n \n {/* Stats */}\n <div className=\"p-4 space-y-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <div className=\"w-6 h-6 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"flex items-end gap-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded animate-pulse w-8\"></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n \n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </main>\n )\n}\n\n/**\n * Stats/features section skeleton for homepage\n */\nexport function StatsSectionSkeleton({ \n className,\n columns = 3 \n}: PageLayoutSkeletonProps & { columns?: number }) {\n return (\n <div className={cn(\n \"grid gap-6 mb-12 md:mb-16\",\n columns === 3 && \"grid-cols-1 md:grid-cols-3\",\n columns === 4 && \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n className\n )}>\n {Array.from({ length: columns }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-6\">\n <div className=\"space-y-4\">\n <MediaSkeleton.Icon size=\"lg\" />\n <TextSkeleton.Subheading className=\"w-3/4\" />\n <div className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n\n/**\n * Blog Card Grid Skeleton - Always displays exactly 4 blog card skeletons\n * Used for consistent blog page layout with predictable height\n */\nexport function BlogCardGridSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n <CardSkeletonGrid \n count={4}\n variant=\"blog\"\n className=\"grid-cols-1 md:grid-cols-2\"\n />\n </div>\n )\n}\n\n/**\n * Vendor Grid Skeleton - Always displays exactly 12 vendor card skeletons\n * Used for consistent vendor page layout with predictable height\n */\nexport function VendorGridSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n <CardSkeletonGrid \n count={12}\n variant=\"vendor\"\n className=\"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\"\n />\n </div>\n )\n}\n\n/**\n * Slack Community Section Skeleton\n * Matches SlackCommunity component structure with title, channel list, and chat interface\n */\nexport function SlackCommunitySkeleton() {\n return (\n <section \n className=\"w-full bg-[#161616] px-4 md:px-20 lg:px-20 py-12 md:py-20\"\n aria-label=\"Slack Community Loading\"\n >\n {/* Frame 651 Container */}\n <div className=\"w-full flex flex-col gap-4 md:gap-6\">\n \n {/* Title Skeleton */}\n <div className=\"w-full\">\n <div className=\"h-8 md:h-12 lg:h-14 bg-[#2A2A2A] rounded-lg animate-pulse max-w-md\"></div>\n </div>\n\n {/* Content Area - Channel List + Chat Interface */}\n <div className=\"w-full flex flex-col lg:flex-row lg:justify-end lg:items-start gap-4 md:gap-6 min-w-0\">\n \n {/* Channel List Skeleton */}\n <div className=\"w-full lg:w-[290px] lg:max-w-[290px] bg-[#161616] border border-ods-border rounded flex flex-col flex-shrink-0 overflow-hidden animate-pulse\">\n <div className=\"p-4 space-y-4\">\n {/* Header */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"h-4 bg-[#2A2A2A] rounded w-24\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-16\"></div>\n </div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-32\"></div>\n </div>\n\n {/* Channels */}\n <div className=\"flex flex-col gap-1\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-16 mb-2\"></div>\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2 px-2 py-3 min-h-[48px]\">\n <div className=\"w-4 h-4 bg-[#2A2A2A] rounded\"></div>\n <div className=\"flex-1\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-24 mb-1\"></div>\n <div className=\"h-2 bg-[#2A2A2A] rounded w-16\"></div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Stats */}\n <div className=\"border-t border-ods-border pt-3 mt-2\">\n <div className=\"space-y-2\">\n <div className=\"flex justify-between\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-16\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-8\"></div>\n </div>\n <div className=\"flex justify-between\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-20\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-8\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Chat Interface Skeleton */}\n <div className=\"flex-1 min-h-[450px] h-[450px] md:min-h-[500px] md:h-[500px] lg:min-h-[600px] lg:h-[600px] bg-ods-card border border-ods-border rounded-lg flex flex-col min-w-0 animate-pulse\">\n \n {/* Header */}\n <div className=\"flex items-center justify-between p-4 md:p-6 border-b border-ods-border bg-[#161616] h-[56px] md:h-[60px] flex-shrink-0\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-3 md:h-4 bg-[#2A2A2A] rounded w-3 md:w-4\"></div>\n <div className=\"h-3 md:h-4 bg-[#2A2A2A] rounded w-24 md:w-32\"></div>\n </div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-12 md:w-16\"></div>\n </div>\n\n {/* Messages */}\n <div className=\"flex-1 bg-[#161616] p-4 md:p-6 space-y-3 md:space-y-4 overflow-hidden min-h-[280px] md:min-h-[320px] lg:min-h-[420px]\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex gap-2 md:gap-3\">\n <div className=\"w-10 h-10 md:w-12 md:h-12 bg-[#2A2A2A] rounded-lg flex-shrink-0\"></div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2 mb-1\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-16 md:w-20\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-12 md:w-16\"></div>\n </div>\n <div className=\"h-3 md:h-4 bg-[#2A2A2A] rounded w-full\"></div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Input Area */}\n <div className=\"p-4 md:p-6 border-t border-ods-border bg-ods-card h-[72px] md:h-[80px] flex-shrink-0\">\n <div className=\"flex items-end gap-3 justify-center md:justify-end\">\n <div className=\"h-10 md:h-12 bg-[#2A2A2A] rounded-lg w-28 md:w-32\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\n\ninterface UnifiedSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string\n variant?: 'default' | 'text' | 'circular' | 'rectangular'\n width?: string | number\n height?: string | number\n /**\n * Disable animation for users who prefer reduced motion\n */\n animate?: boolean\n /**\n * Accessibility label for screen readers\n */\n 'aria-label'?: string\n}\n\n/**\n * UnifiedSkeleton Component\n * \n * Base skeleton component with consistent styling across the application.\n * \n * Design Specifications:\n * - Color: #2A2A2A base with #3A3A3A pulse highlight\n * - Animation: 1.5s pulse duration, ease-in-out timing\n * - Responsive: Mobile-first approach with proper scaling\n * - Accessibility: ARIA labels and reduced motion support\n * \n * @param variant - Shape variant: default (rounded), text (rounded-sm), circular, rectangular\n * @param width - Custom width (defaults to full width)\n * @param height - Custom height (defaults to auto based on variant)\n * @param animate - Enable/disable animation (respects prefers-reduced-motion)\n * @param aria-label - Accessibility label for screen readers\n */\nexport function UnifiedSkeleton({\n className,\n variant = 'default',\n width,\n height,\n animate = true,\n 'aria-label': ariaLabel,\n ...props\n}: UnifiedSkeletonProps) {\n const baseClasses = \"bg-[#2A2A2A]\"\n \n const variantClasses = {\n default: \"rounded-md\",\n text: \"rounded-sm\",\n circular: \"rounded-full\",\n rectangular: \"rounded-none\"\n }\n \n const defaultHeights = {\n default: \"h-4\",\n text: \"h-4\", \n circular: \"h-12 w-12\",\n rectangular: \"h-4\"\n }\n \n const animationClasses = animate \n ? \"animate-pulse motion-reduce:animate-none\" \n : \"\"\n \n const style: React.CSSProperties = {\n width: width,\n height: height,\n }\n \n return (\n <div\n className={cn(\n baseClasses,\n variantClasses[variant],\n !height && !style.height && defaultHeights[variant],\n !width && !style.width && variant !== 'circular' && \"w-full\",\n animationClasses,\n className\n )}\n style={style}\n role=\"status\"\n aria-label={ariaLabel || \"Loading content\"}\n {...props}\n />\n )\n}\n\n/**\n * Text skeleton variants for consistent typography loading\n */\nexport const TextSkeleton = {\n /**\n * Large heading skeleton (h1, h2)\n */\n Heading: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"text\" \n className={cn(\"h-8 md:h-10 lg:h-12\", className)} \n aria-label=\"Loading heading\"\n {...props} \n />\n ),\n \n /**\n * Medium heading skeleton (h3, h4)\n */\n Subheading: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"text\" \n className={cn(\"h-6 md:h-7 lg:h-8\", className)} \n aria-label=\"Loading subheading\"\n {...props} \n />\n ),\n \n /**\n * Body text skeleton\n */\n Body: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"text\" \n className={cn(\"h-4 md:h-5\", className)} \n aria-label=\"Loading text\"\n {...props} \n />\n ),\n \n /**\n * Small text skeleton (captions, metadata)\n */\n Caption: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"text\" \n className={cn(\"h-3 md:h-4\", className)} \n aria-label=\"Loading caption\"\n {...props} \n />\n ),\n}\n\n/**\n * Interactive element skeletons\n */\nexport const InteractiveSkeleton = {\n /**\n * Button skeleton with proper touch targets\n */\n Button: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"default\" \n className={cn(\"h-10 md:h-12 w-32 md:w-40\", className)} \n aria-label=\"Loading button\"\n {...props} \n />\n ),\n \n /**\n * Input field skeleton\n */\n Input: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"default\" \n className={cn(\"h-10 md:h-12 w-full\", className)} \n aria-label=\"Loading input field\"\n {...props} \n />\n ),\n \n /**\n * Filter chip skeleton\n */\n Chip: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"default\" \n className={cn(\"h-8 w-20 rounded-full\", className)} \n aria-label=\"Loading filter\"\n {...props} \n />\n ),\n}\n\n/**\n * Media skeletons for images and icons\n */\nexport const MediaSkeleton = {\n /**\n * Avatar/profile image skeleton\n */\n Avatar: ({ size = 'md', className, ...props }: Omit<UnifiedSkeletonProps, 'variant'> & { size?: 'sm' | 'md' | 'lg' }) => {\n const sizeClasses = {\n sm: \"h-8 w-8\",\n md: \"h-12 w-12\", \n lg: \"h-16 w-16\"\n }\n \n return (\n <UnifiedSkeleton \n variant=\"circular\" \n className={cn(sizeClasses[size], className)} \n aria-label=\"Loading profile image\"\n {...props} \n />\n )\n },\n \n /**\n * Card image skeleton (1200×630 OG aspect — matches entity-cards default\n * so loading state never causes a height shift when card data arrives)\n */\n CardImage: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton\n variant=\"default\"\n className={cn(\"aspect-[1200/630] w-full\", className)}\n aria-label=\"Loading image\"\n {...props}\n />\n ),\n \n /**\n * Icon skeleton\n */\n Icon: ({ size = 'md', className, ...props }: Omit<UnifiedSkeletonProps, 'variant'> & { size?: 'sm' | 'md' | 'lg' }) => {\n const sizeClasses = {\n sm: \"h-4 w-4\",\n md: \"h-6 w-6\",\n lg: \"h-8 w-8\"\n }\n \n return (\n <UnifiedSkeleton \n variant=\"default\" \n className={cn(sizeClasses[size], className)} \n aria-label=\"Loading icon\"\n {...props} \n />\n )\n },\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from \"./unified-skeleton\"\n\ninterface CardSkeletonProps {\n className?: string\n /**\n * Card layout variant\n */\n variant?: 'vendor' | 'blog' | 'category' | 'alternative'\n /**\n * Show action buttons area\n */\n showActions?: boolean\n /**\n * Show metadata footer\n */\n showMetadata?: boolean\n /** Optional tailwind classes to override the card container background & border */\n containerClassName?: string\n}\n \n/**\n * Unified card skeleton component for consistent card loading states\n * \n * Supports different card types used across the application:\n * - vendor: Vendor cards with logo, title, description, and actions\n * - blog: Blog post cards with image, title, summary, and metadata \n * - category: Category cards with icon, title, and description\n * - alternative: Alternative vendor cards in comparison lists\n */\nexport function CardSkeleton({\n className,\n containerClassName,\n variant = 'vendor',\n showActions = true,\n showMetadata = true,\n ...props\n}: CardSkeletonProps) {\n const cardContent = {\n vendor: <VendorCardContent showActions={showActions} showMetadata={showMetadata} />,\n blog: <BlogCardContent showActions={showActions} showMetadata={showMetadata} />,\n category: <CategoryCardContent />,\n alternative: <AlternativeCardContent showActions={showActions} />\n }\n\n return (\n <div \n className={cn(\n containerClassName || \"bg-ods-card border border-ods-border\",\n \"rounded-lg overflow-hidden\",\n // Flex layouts for certain variants\n variant === 'blog' && \"h-full flex flex-col\",\n variant === 'vendor' && \"h-full flex flex-col\",\n className\n )}\n role=\"status\"\n aria-label={`Loading ${variant} card`}\n {...props}\n >\n {cardContent[variant]}\n </div>\n )\n}\n\n/**\n * Vendor card skeleton content - matches exact VendorCard structure\n */\nfunction VendorCardContent({ showActions, showMetadata }: { showActions: boolean; showMetadata: boolean }) {\n return (\n <div className=\"p-4 gap-3 flex flex-col\">\n {/* Header Section - Row layout matching actual VendorCard */}\n <div className=\"flex items-start gap-3 w-full\">\n {/* Logo Frame - 60px width fixed, matching actual structure */}\n <div className=\"w-[60px] h-[60px] bg-[#161616] border border-ods-border rounded-lg p-2 flex items-center justify-center flex-shrink-0\">\n <MediaSkeleton.Avatar size=\"sm\" className=\"w-11 h-11\" />\n </div>\n \n {/* Text Container - Column layout, matching actual structure */}\n <div className=\"flex-1 flex flex-col justify-center py-2 min-w-0 space-y-1\">\n {/* Title - Single line with proper width */}\n <TextSkeleton.Subheading className=\"w-3/4\" />\n {/* Category - Single line, shorter */}\n <TextSkeleton.Caption className=\"w-1/2\" />\n </div>\n </div>\n\n {/* Description Section - Fixed 48px height matching actual VendorCard */}\n <div className=\"w-full h-12 overflow-hidden flex items-center\">\n <div className=\"space-y-1 w-full\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n </div>\n\n {/* Footer Section - Responsive layout matching actual structure */}\n <div className=\"flex items-center justify-between gap-2 w-full min-w-0\">\n {/* Stats Container - Flexible width, no overflow */}\n <div className=\"flex items-center gap-3 md:gap-4 min-w-0 flex-shrink\">\n {/* OpenMSP Score skeleton */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-5 h-5\" />\n <TextSkeleton.Caption className=\"w-8\" />\n </div>\n \n {/* GitHub Stats skeleton */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-5 h-5\" />\n <TextSkeleton.Caption className=\"w-10\" />\n </div>\n </div>\n\n {/* Tag Section - Contained within card boundaries */}\n <div className=\"flex-shrink-0\">\n <div className=\"flex items-center gap-1.5 bg-[#161616] border border-ods-border rounded px-2.5 py-1.5\">\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-2.5 h-2.5\" />\n </div>\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Blog card skeleton content - matches fixed height structure\n */\nfunction BlogCardContent({ showActions, showMetadata }: { showActions: boolean; showMetadata: boolean }) {\n return (\n <>\n {/* Image Section — OG 1200×630 aspect (matches blog-card.tsx loaded state) */}\n <div className=\"blog-card-image-container relative w-full aspect-[1200/630] overflow-hidden bg-[#161616]\">\n <MediaSkeleton.CardImage />\n </div>\n \n {/* Content - Fixed height structure to match BlogCard */}\n <div className=\"p-4 flex flex-col flex-grow\">\n {/* Title Section - Fixed 2 lines with vertical centering */}\n <div className=\"mb-3 flex items-center min-h-[50.4px] md:min-h-[56px] lg:min-h-[61.6px]\">\n <div className=\"space-y-1 w-full\">\n <TextSkeleton.Subheading className=\"w-full\" />\n <TextSkeleton.Subheading className=\"w-3/4\" />\n </div>\n </div>\n \n {/* Chips Section - Fixed single line height */}\n <div className=\"mb-3 flex gap-2 h-[28px] items-center\">\n <InteractiveSkeleton.Chip className=\"w-16\" />\n <InteractiveSkeleton.Chip className=\"w-12\" />\n </div>\n \n {/* Description Section - Fixed 2 lines with vertical centering */}\n <div className=\"mb-3 flex items-center min-h-[42px] md:min-h-[45px] lg:min-h-[48px]\">\n <div className=\"space-y-1 w-full\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-1/2\" />\n </div>\n </div>\n\n {/* Actions - only if requested */}\n {showActions && (\n <div className=\"pt-2\">\n <InteractiveSkeleton.Button className=\"w-24 h-8\" />\n </div>\n )}\n \n {/* Metadata footer - Matches BlogMeta horizontal layout */}\n {showMetadata && (\n <div className=\"mt-auto\">\n <div className=\"flex items-center justify-between gap-4 pt-4 border-t border-ods-border\">\n {/* Author section - matches AuthorMeta */}\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <MediaSkeleton.Avatar size=\"sm\" />\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n \n {/* Date and reading time section - matches BlogMeta right side */}\n <div className=\"flex items-center gap-3 text-[#767676] shrink-0\">\n <TextSkeleton.Caption className=\"w-12\" />\n {/* Separator dot */}\n <div className=\"w-1 h-1 bg-[#767676] rounded-full\"></div>\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n )\n}\n\n/**\n * Category card skeleton content\n */\nfunction CategoryCardContent() {\n return (\n <div className=\"p-4 md:p-6 space-y-4\">\n {/* Icon grid */}\n <div className=\"flex gap-2 md:gap-3\">\n {Array.from({ length: 6 }).map((_, index) => (\n <MediaSkeleton.Icon \n key={index}\n size=\"lg\"\n className=\"flex-shrink-0\"\n />\n ))}\n </div>\n\n {/* Content */}\n <div className=\"space-y-2\">\n <div className=\"space-y-1\">\n <TextSkeleton.Subheading className=\"w-3/4\" />\n <TextSkeleton.Caption className=\"w-1/2\" />\n </div>\n \n <div className=\"flex items-start md:items-end justify-between gap-4 md:gap-6\">\n <div className=\"flex-1 space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n \n <InteractiveSkeleton.Button className=\"w-10 h-10 md:w-12 md:h-12 flex-shrink-0\" />\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Alternative card skeleton content (for vendor alternatives/comparisons)\n */\nfunction AlternativeCardContent({ showActions }: { showActions: boolean }) {\n return (\n <div className=\"flex items-start gap-4 p-4\">\n <MediaSkeleton.Avatar size=\"md\" className=\"flex-shrink-0\" />\n \n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <TextSkeleton.Subheading className=\"w-1/3\" />\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n \n <div className=\"space-y-1\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-5/6\" />\n </div>\n\n {showActions && (\n <div className=\"pt-2\">\n <InteractiveSkeleton.Button className=\"w-20 h-8\" />\n </div>\n )}\n </div>\n </div>\n )\n}\n\n/**\n * Grid of card skeletons for loading lists\n */\nexport function CardSkeletonGrid({\n count = 6,\n variant = 'vendor',\n className,\n containerClassName,\n ...props\n}: {\n count?: number\n variant?: CardSkeletonProps['variant']\n className?: string\n containerClassName?: string\n} & Omit<CardSkeletonProps, 'variant'>) {\n return (\n <div \n className={cn(\n \"grid gap-4 md:gap-6\",\n // Responsive grid based on card type\n variant === 'vendor' && \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n variant === 'blog' && \"grid-cols-1 md:grid-cols-2\",\n variant === 'category' && \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n variant === 'alternative' && \"grid-cols-1\",\n className\n )}\n role=\"status\"\n aria-label={`Loading ${count} ${variant} cards`}\n >\n {Array.from({ length: count }, (_, index) => (\n <CardSkeleton \n key={index} \n variant={variant}\n containerClassName={containerClassName}\n {...props}\n />\n ))}\n </div>\n )\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from \"./unified-skeleton\"\n\ninterface ContentSkeletonProps {\n className?: string\n}\n\n/**\n * Paragraph skeleton with varying line lengths for natural appearance\n */\nexport function ParagraphSkeleton({ \n className,\n lines = 4 \n}: ContentSkeletonProps & { lines?: number }) {\n const lineWidths = ['w-full', 'w-full', 'w-5/6', 'w-3/4', 'w-4/5', 'w-2/3']\n \n return (\n <div className={cn(\"space-y-2\", className)}>\n {Array.from({ length: lines }).map((_, index) => (\n <TextSkeleton.Body \n key={index}\n className={lineWidths[index % lineWidths.length]}\n />\n ))}\n </div>\n )\n}\n\n/**\n * List skeleton for navigation menus, categories, etc.\n */\nexport function ListSkeleton({ \n className,\n items = 5,\n showIcons = false,\n showActions = false \n}: ContentSkeletonProps & { \n items?: number\n showIcons?: boolean\n showActions?: boolean\n}) {\n return (\n <div className={cn(\"space-y-3\", className)}>\n {Array.from({ length: items }).map((_, index) => (\n <div key={index} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {showIcons && <MediaSkeleton.Icon size=\"sm\" />}\n <TextSkeleton.Body className=\"w-32 md:w-48\" />\n </div>\n {showActions && (\n <div className=\"flex items-center gap-2\">\n <TextSkeleton.Caption className=\"w-8\" />\n <UnifiedSkeleton variant=\"default\" className=\"w-4 h-4\" />\n </div>\n )}\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * Table skeleton for data displays\n */\nexport function TableSkeleton({ \n className,\n rows = 5,\n columns = 4 \n}: ContentSkeletonProps & { \n rows?: number\n columns?: number\n}) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n {/* Table header */}\n <div className=\"grid gap-4\" style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}>\n {Array.from({ length: columns }).map((_, index) => (\n <TextSkeleton.Subheading key={index} className=\"w-3/4\" />\n ))}\n </div>\n \n {/* Table rows */}\n <div className=\"space-y-3\">\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <div \n key={rowIndex} \n className=\"grid gap-4 py-2 border-b border-ods-divider\"\n style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}\n >\n {Array.from({ length: columns }).map((_, colIndex) => (\n <TextSkeleton.Body key={colIndex} className=\"w-2/3\" />\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n/**\n * Form skeleton for input fields and form layouts\n */\nexport function FormSkeleton({ \n className,\n fields = 4 \n}: ContentSkeletonProps & { fields?: number }) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n {Array.from({ length: fields }).map((_, index) => (\n <div key={index} className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-24\" />\n <InteractiveSkeleton.Input />\n {index % 3 === 0 && (\n <TextSkeleton.Caption className=\"w-48\" />\n )}\n </div>\n ))}\n \n <div className=\"flex gap-4 pt-4\">\n <InteractiveSkeleton.Button />\n <InteractiveSkeleton.Button className=\"bg-ods-border\" />\n </div>\n </div>\n )\n}\n\n/**\n * Navigation menu skeleton\n */\nexport function NavigationSkeleton({ \n className,\n items = 6,\n horizontal = true \n}: ContentSkeletonProps & { \n items?: number\n horizontal?: boolean\n}) {\n return (\n <nav \n className={cn(\n \"flex gap-4 md:gap-6\",\n !horizontal && \"flex-col\",\n className\n )}\n role=\"status\"\n aria-label=\"Loading navigation\"\n >\n {Array.from({ length: items }).map((_, index) => (\n <TextSkeleton.Body key={index} className=\"w-16 md:w-20\" />\n ))}\n </nav>\n )\n}\n\n/**\n * Profile/user info skeleton\n */\nexport function ProfileSkeleton({ \n className,\n showBio = true,\n showStats = true \n}: ContentSkeletonProps & { \n showBio?: boolean\n showStats?: boolean\n}) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n {/* Avatar and basic info */}\n <div className=\"flex items-start gap-4\">\n <MediaSkeleton.Avatar size=\"lg\" />\n <div className=\"flex-1 space-y-2\">\n <TextSkeleton.Subheading className=\"w-1/2\" />\n <TextSkeleton.Caption className=\"w-1/3\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n </div>\n\n {/* Bio/description */}\n {showBio && (\n <div className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-4/5\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n )}\n\n {/* Stats */}\n {showStats && (\n <div className=\"flex gap-6\">\n <div className=\"text-center\">\n <TextSkeleton.Subheading className=\"w-8 mx-auto\" />\n <TextSkeleton.Caption className=\"w-12 mx-auto\" />\n </div>\n <div className=\"text-center\">\n <TextSkeleton.Subheading className=\"w-8 mx-auto\" />\n <TextSkeleton.Caption className=\"w-16 mx-auto\" />\n </div>\n <div className=\"text-center\">\n <TextSkeleton.Subheading className=\"w-8 mx-auto\" />\n <TextSkeleton.Caption className=\"w-14 mx-auto\" />\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Comment/review skeleton for user-generated content\n */\nexport function CommentSkeleton({ \n className,\n showRating = false,\n showReplies = false \n}: ContentSkeletonProps & { \n showRating?: boolean\n showReplies?: boolean\n}) {\n return (\n <div className={cn(\"space-y-3\", className)}>\n {/* User info */}\n <div className=\"flex items-center gap-3\">\n <MediaSkeleton.Avatar size=\"sm\" />\n <div className=\"flex-1 flex items-center gap-4\">\n <TextSkeleton.Body className=\"w-24\" />\n <TextSkeleton.Caption className=\"w-16\" />\n {showRating && (\n <div className=\"flex gap-1\">\n {Array.from({ length: 5 }).map((_, i) => (\n <MediaSkeleton.Icon key={i} size=\"sm\" />\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Comment content */}\n <div className=\"ml-11 space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n <TextSkeleton.Body className=\"w-1/2\" />\n </div>\n\n {/* Actions */}\n <div className=\"ml-11 flex gap-4\">\n <TextSkeleton.Caption className=\"w-12\" />\n <TextSkeleton.Caption className=\"w-16\" />\n <TextSkeleton.Caption className=\"w-8\" />\n </div>\n\n {/* Replies */}\n {showReplies && (\n <div className=\"ml-11 pl-4 border-l border-ods-divider space-y-4\">\n {Array.from({ length: 2 }).map((_, index) => (\n <div key={index} className=\"space-y-2\">\n <div className=\"flex items-center gap-3\">\n <MediaSkeleton.Avatar size=\"sm\" />\n <TextSkeleton.Body className=\"w-20\" />\n <TextSkeleton.Caption className=\"w-12\" />\n </div>\n <div className=\"ml-11\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Feature list skeleton for product features, specifications, etc.\n */\nexport function FeatureListSkeleton({ \n className,\n features = 6,\n showIcons = true,\n grouped = false \n}: ContentSkeletonProps & { \n features?: number\n showIcons?: boolean\n grouped?: boolean\n}) {\n if (grouped) {\n // Grouped features with sections\n return (\n <div className={cn(\"space-y-6\", className)}>\n {Array.from({ length: 3 }).map((_, groupIndex) => (\n <div key={groupIndex} className=\"space-y-3\">\n <TextSkeleton.Subheading className=\"w-1/3\" />\n <div className=\"space-y-2\">\n {Array.from({ length: features / 3 }).map((_, featureIndex) => (\n <div key={featureIndex} className=\"flex items-center gap-3\">\n {showIcons && <MediaSkeleton.Icon size=\"sm\" />}\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n // Simple feature list\n return (\n <div className={cn(\"space-y-3\", className)}>\n {Array.from({ length: features }).map((_, index) => (\n <div key={index} className=\"flex items-center gap-3\">\n {showIcons && <MediaSkeleton.Icon size=\"sm\" />}\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * Timeline/activity skeleton\n */\nexport function TimelineSkeleton({ \n className,\n items = 5 \n}: ContentSkeletonProps & { items?: number }) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n {Array.from({ length: items }).map((_, index) => (\n <div key={index} className=\"flex gap-4\">\n <div className=\"flex flex-col items-center\">\n <MediaSkeleton.Icon size=\"sm\" />\n {index < items - 1 && (\n <div className=\"w-px h-12 bg-ods-border mt-2\" />\n )}\n </div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-3\">\n <TextSkeleton.Body className=\"w-1/3\" />\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * Pricing/plan skeleton\n */\nexport function PricingSkeleton({ \n className,\n plans = 3 \n}: ContentSkeletonProps & { plans?: number }) {\n return (\n <div className={cn(\n \"grid gap-6\",\n plans === 2 && \"grid-cols-1 md:grid-cols-2\",\n plans === 3 && \"grid-cols-1 md:grid-cols-3\",\n plans === 4 && \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n className\n )}>\n {Array.from({ length: plans }).map((_, index) => (\n <div key={index} className=\"bg-ods-card border border-ods-border rounded-lg p-6\">\n <div className=\"space-y-4\">\n {/* Plan name */}\n <TextSkeleton.Subheading className=\"w-1/2\" />\n \n {/* Price */}\n <div className=\"space-y-1\">\n <TextSkeleton.Heading className=\"w-1/3\" />\n <TextSkeleton.Caption className=\"w-1/4\" />\n </div>\n\n {/* Features */}\n <div className=\"space-y-3 py-4\">\n {Array.from({ length: 5 }).map((_, featureIndex) => (\n <div key={featureIndex} className=\"flex items-center gap-2\">\n <MediaSkeleton.Icon size=\"sm\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n ))}\n </div>\n\n {/* CTA Button */}\n <InteractiveSkeleton.Button className=\"w-full\" />\n </div>\n </div>\n ))}\n </div>\n )\n} ","import React from 'react'\nimport { cn } from \"../../utils/cn\"\n\ninterface ProfileLoadingSkeletonProps {\n className?: string;\n}\n\nexport function ProfileLoadingSkeleton({ className }: ProfileLoadingSkeletonProps) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n {/* Header skeleton */}\n <div className=\"flex items-center space-x-4\">\n <div className=\"h-16 w-16 bg-gray-200 rounded-full animate-pulse\" />\n <div className=\"space-y-2\">\n <div className=\"h-4 w-32 bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-3 w-24 bg-gray-200 rounded animate-pulse\" />\n </div>\n </div>\n \n {/* Content skeleton */}\n <div className=\"space-y-4\">\n <div className=\"h-4 w-full bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-4 w-3/4 bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-4 w-1/2 bg-gray-200 rounded animate-pulse\" />\n </div>\n </div>\n )\n}","import React from 'react'\nimport { cn } from \"../../utils/cn\"\nimport {\n UnifiedSkeleton,\n TextSkeleton,\n InteractiveSkeleton\n} from './unified-skeleton'\n\ninterface SkeletonProps {\n className?: string\n /**\n * Number of input fields to render on the right column (defaults to 4).\n */\n fields?: number\n}\n\n/**\n * MspProfileFormSkeleton\n * -----------------------------------------------------------------------------\n * Loading state for the <MspProfileForm /> component used in the Share-Your-Stack\n * wizard (and any other area that re-uses the form).\n *\n * Design Notes:\n * – Two-column grid matching the live component (logo upload on the left,\n * text / numeric inputs on the right).\n * – Left column: square/circular media skeleton to represent logo uploader.\n * – Right column: label + input pair per field.\n * – Mobile (<768px) collapses to one column via grid existing classes.\n * – Uses UnifiedSkeleton system to stay consistent with global loading design.\n */\nexport function MspProfileFormSkeleton({\n className,\n fields = 4,\n}: SkeletonProps) {\n return (\n <div\n className={cn(\n 'grid grid-cols-1 md:grid-cols-2 gap-6 items-stretch',\n className,\n )}\n role=\"status\"\n aria-label=\"Loading MSP profile form\"\n >\n {/* Left – Logo uploader placeholder */}\n <div className=\"flex flex-col space-y-2 h-full\">\n {/* Label skeleton */}\n <TextSkeleton.Body className=\"w-28\" />\n <div className=\"flex-1 min-h-[180px] md:min-h-full\">\n <UnifiedSkeleton className=\"w-full h-full rounded-lg\" aria-label=\"Loading company logo\" />\n </div>\n </div>\n\n {/* Right – Input fields grid (mirrors form) */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {Array.from({ length: fields }).map((_, idx) => (\n <div key={idx} className=\"space-y-2 flex flex-col\">\n <TextSkeleton.Body className=\"w-40\" />\n <InteractiveSkeleton.Input />\n </div>\n ))}\n </div>\n </div>\n )\n} ","import React from 'react'\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton } from './unified-skeleton'\n\ninterface CategoryCardSkeletonProps {\n className?: string\n}\n\nexport function CategoryCardSkeleton({ className }: CategoryCardSkeletonProps) {\n return (\n <article\n className={cn(\n 'bg-[#1A1A1A] border border-[#424242] rounded-[12px] p-8 flex flex-col min-w-0 box-border',\n className,\n )}\n role=\"status\"\n aria-label=\"Loading category card\"\n >\n {/* Icons row */}\n <div className=\"flex gap-6 mb-8 justify-center items-center\">\n {Array.from({ length: 10 }).map((_, i) => (\n <UnifiedSkeleton\n key={i}\n variant=\"circular\"\n className=\"w-10 h-10 flex-shrink-0\"\n aria-label=\"Loading icon\"\n />\n ))}\n </div>\n\n {/* Text block */}\n <div className=\"flex-1 flex flex-col space-y-3\">\n <TextSkeleton.Heading className=\"w-3/4\" />\n <TextSkeleton.Body className=\"w-1/2\" />\n <TextSkeleton.Body className=\"w-full\" />\n </div>\n\n {/* Arrow button placeholder */}\n <div className=\"mt-4 flex justify-end\">\n <UnifiedSkeleton className=\"w-12 h-12 rounded-[6px]\" aria-label=\"Loading button\" />\n </div>\n </article>\n )\n} ","import React from 'react'\nimport { cn } from \"../../utils/cn\"\nimport { TextSkeleton, UnifiedSkeleton } from './unified-skeleton'\n\ninterface CategoryVendorSelectorSkeletonProps {\n /** number of subcategory blocks to render */\n subcategories?: number\n className?: string\n}\n\nexport function CategoryVendorSelectorSkeleton({ subcategories = 3, className }: CategoryVendorSelectorSkeletonProps) {\n return (\n <div\n className={cn('bg-ods-card border border-ods-border rounded-lg p-6', className)}\n role=\"status\"\n aria-label=\"Loading category section\"\n >\n {/* Header */}\n <div className=\"mb-6 space-y-2 max-w-xl\">\n <TextSkeleton.Heading className=\"w-1/2\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n\n {/* Subcategory blocks */}\n <div className=\"space-y-6\">\n {Array.from({ length: subcategories }).map((_, idx) => (\n <div key={idx} className=\"space-y-2\">\n {/* Subcategory title */}\n <TextSkeleton.Subheading className=\"w-1/3\" />\n {/* Vendor slots container */}\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\n {Array.from({ length: 2 }).map((__, j) => (\n <UnifiedSkeleton key={j} className=\"h-20 rounded-lg\" />\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n} ","import React from 'react'\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton } from './unified-skeleton'\n\ninterface WizardLayoutSkeletonProps {\n steps?: number\n className?: string\n}\n\nexport function WizardLayoutSkeleton({ steps = 6, className }: WizardLayoutSkeletonProps) {\n return (\n <div className={cn('space-y-6', className)} role=\"status\" aria-label=\"Loading wizard layout\">\n {/* Progress bar */}\n <div className=\"flex flex-wrap items-center gap-2\">\n {Array.from({ length: steps }).map((_, i) => (\n <UnifiedSkeleton key={i} className=\"h-6 w-24 rounded\" />\n ))}\n </div>\n\n {/* Header */}\n <div className=\"space-y-2 max-w-2xl\">\n <TextSkeleton.Heading className=\"w-2/3\" />\n <TextSkeleton.Body className=\"w-1/2\" />\n </div>\n\n {/* Bottom navigation buttons */}\n <div className=\"flex justify-between mt-10\">\n <UnifiedSkeleton className=\"h-10 w-24 rounded\" />\n <UnifiedSkeleton className=\"h-10 w-32 rounded\" />\n </div>\n </div>\n )\n} ","import React from 'react';\n\ninterface MarginReportSkeletonProps {\n /** Enable pulse animation (default: true) */\n animate?: boolean;\n /** Optional explanation text shown above overlay content */\n description?: React.ReactNode;\n /** Optional React node displayed over skeleton (button, loader, etc.) */\n overlayContent?: React.ReactNode;\n}\n\nexport function MarginReportSkeleton({ animate = true, description, overlayContent }: MarginReportSkeletonProps) {\n return (\n <main className={`bg-[#161616] ${animate ? 'animate-pulse' : ''} relative min-h-screen`}>\n <div className=\"max-w-[1920px] px-6 md:px-20 py-6 md:py-10 mx-auto space-y-10\">\n {/* Header */}\n <div className=\"space-y-3\">\n <div className=\"h-10 w-72 bg-[#2A2A2A] rounded\" />\n <div className=\"h-4 w-80 bg-[#2A2A2A] rounded\" />\n </div>\n\n {/* Summary cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"h-32 bg-ods-card border border-ods-border rounded\" />\n ))}\n </div>\n\n {/* MSP Profile & Report Info cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* MSP profile skeleton */}\n <div className=\"bg-ods-card border border-ods-border rounded-lg p-6 flex items-center gap-4 animate-pulse\">\n <div className=\"w-14 h-14 rounded-lg bg-[#2A2A2A]\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-4 bg-[#2A2A2A] rounded w-3/4\" />\n <div className=\"h-3 bg-[#2A2A2A] rounded w-1/2\" />\n </div>\n </div>\n\n {/* Report info skeleton */}\n <div className=\"bg-ods-card border border-ods-border rounded-lg p-6 flex flex-col gap-4 animate-pulse\">\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-10 h-10 rounded-lg bg-[#2A2A2A]\" />\n <div className=\"space-y-1\">\n <div className=\"h-4 w-32 bg-[#2A2A2A] rounded\" />\n <div className=\"h-3 w-20 bg-[#2A2A2A] rounded\" />\n </div>\n </div>\n <div className=\"h-6 w-36 bg-[#2A2A2A] rounded\" />\n </div>\n <div className=\"h-4 w-40 bg-[#2A2A2A] rounded mt-4\" />\n </div>\n </div>\n\n {/* Vendor solution lists (Commercial & Open-Source) */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {['Commercial Stack', 'Open-Source Stack'].map((label, idx) => (\n <div key={idx} className=\"bg-ods-card border border-ods-border rounded-lg overflow-hidden flex flex-col animate-pulse\">\n {/* list header */}\n <div className=\"flex items-center justify-between px-6 py-4\">\n <div className=\"h-6 w-40 bg-[#2A2A2A] rounded\" />\n <div className=\"flex items-center gap-2\">\n <div className=\"h-5 w-20 bg-[#2A2A2A] rounded\" />\n <div className=\"h-4 w-10 bg-[#2A2A2A] rounded\" />\n </div>\n </div>\n\n {/* vendor rows */}\n <div className=\"flex-1 flex flex-col gap-3 p-3\">\n {Array.from({ length: 5 }).map((_, j) => (\n <div key={j} className=\"bg-[#161616] border border-ods-border rounded-lg px-4 py-3 flex items-center justify-between\">\n {/* left section: icon + text */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-12 h-12 bg-[#2A2A2A] rounded-lg flex-shrink-0\" />\n <div className=\"flex flex-col min-w-0\">\n <div className=\"h-4 w-32 bg-[#2A2A2A] rounded\" />\n <div className=\"hidden md:block h-3 w-24 bg-[#2A2A2A] rounded mt-1\" />\n </div>\n </div>\n {/* right addon: cost text */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <div className=\"h-4 w-16 bg-[#2A2A2A] rounded\" />\n <div className=\"h-3 w-8 bg-[#2A2A2A] rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n {/* Strategic Recommendations header placeholder */}\n <div className=\"h-6 w-60 bg-[#2A2A2A] rounded\" />\n\n {/* Recommendations grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"h-48 bg-ods-card border border-ods-border rounded\" />\n ))}\n </div>\n\n {/* OpenFrame value section */}\n <div className=\"border border-ods-border rounded-3xl p-8 space-y-6\">\n {/* Section header */}\n <div className=\"flex items-start gap-6\">\n <div className=\"flex-1 space-y-2 min-w-0\">\n <div className=\"h-8 w-72 bg-[#2A2A2A] rounded\" />\n <div className=\"h-4 w-3/4 bg-[#2A2A2A] rounded\" />\n </div>\n {/* Logo placeholder */}\n <div className=\"w-12 h-12 bg-[#2A2A2A] rounded-md shrink-0\" />\n </div>\n\n {/* Value cards grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"h-32 bg-ods-card border border-ods-border rounded\" />\n ))}\n </div>\n </div>\n </div>\n\n {/* CTA Overlay */}\n {overlayContent && (\n <div className=\"absolute inset-0 bg-ods-card/80 z-10 rounded-lg pointer-events-none\">\n {/* Button centered relative to viewport */}\n <div className=\"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-auto flex flex-col items-center gap-4 text-center px-4\">\n {description && (\n <h3 >\n {description}\n </h3>\n )}\n {overlayContent}\n </div>\n </div>\n )}\n </main>\n );\n} ","import { cn } from \"../../utils/cn\"\n\ninterface Props {\n rows?: number\n className?: string\n}\n\nexport function UsersGridSkeleton({ rows = 10, className }: Props) {\n const skeletonRows = Array.from({ length: rows })\n return (\n <div className={cn('overflow-x-auto rounded-lg border border-ods-border bg-ods-card animate-pulse', className)}>\n <table className=\"min-w-full divide-y divide-[#3A3A3A]\">\n <thead className=\"bg-[#2A2A2A]\">\n <tr>\n {['Name', 'Email', 'Role', 'Created', 'Last Sign-In'].map((h) => (\n <th key={h} className=\"px-4 py-3 text-left text-[12px] font-medium text-ods-text-primary font-['DM_Sans']\">{h}</th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-[#3A3A3A]\">\n {skeletonRows.map((_, idx) => (\n <tr key={idx}>\n {Array.from({ length: 5 }).map((__, cell) => (\n <td key={cell} className=\"px-4 py-3 whitespace-nowrap\">\n <div className=\"h-4 bg-ods-border rounded w-full\"></div>\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\n\nexport interface OrganizationIconSkeletonProps {\n /**\n * Size variant (matches OrganizationIcon/VendorIcon sizes)\n * - xs: 24px (w-6 h-6)\n * - sm: 32px (w-8 h-8) - for devices table\n * - md: 40px (w-10 h-10) - for organizations table, dashboard (default)\n * - lg: 48px (w-12 h-12)\n * - l: 56px (w-14 h-14)\n * - xl: 64px (w-16 h-16) - for detail views\n */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'l' | 'xl'\n\n /**\n * Additional CSS classes\n */\n className?: string\n\n /**\n * Show background container (default: true)\n */\n showBackground?: boolean\n\n /**\n * Background style variant (default: 'dark')\n */\n backgroundStyle?: 'dark' | 'light' | 'white'\n}\n\n/**\n * Size classes matching VendorIcon/OrganizationIcon exactly\n */\nconst sizeClasses = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n l: 'w-14 h-14',\n xl: 'w-16 h-16'\n}\n\n/**\n * Background style classes matching VendorIcon/OrganizationIcon exactly\n */\nconst backgroundClasses = {\n dark: 'bg-[#161616] border border-ods-border',\n light: 'bg-ods-card border border-ods-border',\n white: 'bg-white border border-[#E5E5E5]'\n}\n\n/**\n * OrganizationIconSkeleton - Loading skeleton for OrganizationIcon\n *\n * Matches VendorIcon styling exactly for 100% visual parity.\n * Matches the exact dimensions of OrganizationIcon to prevent layout jumps.\n * Use this in loading states before organization data is available.\n *\n * Usage:\n *\n * ```typescript\n * // In table skeleton (matches current usage)\n * <OrganizationIconSkeleton size=\"md\" />\n *\n * // In device card skeleton\n * <OrganizationIconSkeleton size=\"sm\" />\n *\n * // In detail view skeleton\n * <OrganizationIconSkeleton size=\"xl\" />\n *\n * // Without background\n * <OrganizationIconSkeleton size=\"sm\" showBackground={false} />\n * ```\n */\nexport function OrganizationIconSkeleton({\n size = 'md',\n className = '',\n showBackground = true,\n backgroundStyle = 'dark'\n}: OrganizationIconSkeletonProps) {\n const containerClasses = cn(\n sizeClasses[size],\n 'rounded-lg flex items-center justify-center flex-shrink-0',\n showBackground && backgroundClasses[backgroundStyle],\n !showBackground && 'overflow-hidden',\n className\n )\n\n return (\n <div\n className={containerClasses}\n role=\"status\"\n aria-label=\"Loading organization icon\"\n >\n <div className=\"w-1/2 h-1/2 bg-ods-border rounded-sm animate-pulse\" />\n </div>\n )\n}\n","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { OrganizationIconSkeleton } from \"./organization-icon-skeleton\"\nimport { TextSkeleton, MediaSkeleton, InteractiveSkeleton } from \"./unified-skeleton\"\n\nexport interface OrganizationCardSkeletonProps {\n /**\n * Additional CSS classes\n */\n className?: string\n\n /**\n * Show footer stats area\n */\n showFooter?: boolean\n\n /**\n * Show description area\n */\n showDescription?: boolean\n\n /** Optional tailwind classes to override the card container background & border */\n containerClassName?: string\n}\n\n/**\n * OrganizationCardSkeleton - Loading skeleton matching OrganizationCard exact layout\n *\n * Matches VendorCard skeleton structure for 100% visual parity.\n *\n * Structure:\n * - Header: 60x60px org logo + title + subtitle\n * - Description: Fixed 48px height with 2-line clamp\n * - Footer: Stats display area\n *\n * Prevents layout jumps by matching exact dimensions.\n */\nexport function OrganizationCardSkeleton({\n className,\n containerClassName,\n showFooter = true,\n showDescription = true\n}: OrganizationCardSkeletonProps) {\n return (\n <div\n className={cn(\n containerClassName || \"bg-ods-card border border-ods-border\",\n \"rounded-lg overflow-hidden h-full flex flex-col\",\n className\n )}\n role=\"status\"\n aria-label=\"Loading organization card\"\n >\n <div className=\"p-4 gap-3 flex flex-col\">\n {/* Header Section - Row layout matching OrganizationCard/VendorCard */}\n <div className=\"flex items-start gap-3 w-full\">\n {/* Logo Frame - 60px width fixed, matching actual structure */}\n <OrganizationIconSkeleton\n size=\"xl\"\n backgroundStyle=\"dark\"\n showBackground={true}\n className=\"w-[60px] h-[60px]\"\n />\n\n {/* Text Container - Column layout, matching actual structure */}\n <div className=\"flex-1 flex flex-col justify-center py-2 min-w-0 space-y-1\">\n {/* Title - Single line with proper width */}\n <TextSkeleton.Subheading className=\"w-3/4\" />\n {/* Subtitle (industry/tier) - Single line, shorter */}\n <TextSkeleton.Caption className=\"w-1/2\" />\n </div>\n </div>\n\n {/* Description Section - Fixed 48px height matching VendorCard */}\n {showDescription && (\n <div className=\"w-full h-12 overflow-hidden flex items-center\">\n <div className=\"space-y-1 w-full\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n </div>\n )}\n\n {/* Footer Section - Stats display */}\n {showFooter && (\n <div className=\"flex items-center justify-between gap-2 w-full min-w-0\">\n {/* Stats Container */}\n <div className=\"flex items-center gap-3 md:gap-4 min-w-0 flex-shrink\">\n {/* Stat 1 */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-5 h-5\" />\n <TextSkeleton.Caption className=\"w-8\" />\n </div>\n\n {/* Stat 2 */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-5 h-5\" />\n <TextSkeleton.Caption className=\"w-10\" />\n </div>\n </div>\n\n {/* Tag/Badge Section */}\n <div className=\"flex-shrink-0\">\n <div className=\"flex items-center gap-1.5 bg-[#161616] border border-ods-border rounded px-2.5 py-1.5\">\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-2.5 h-2.5\" />\n </div>\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\n/**\n * OrganizationCardSkeletonGrid - Grid of organization card skeletons\n *\n * Matches responsive grid layout:\n * - Mobile: 1 column\n * - Tablet (md): 2 columns\n * - Desktop (xl): 3 columns\n */\nexport function OrganizationCardSkeletonGrid({\n count = 12,\n className,\n containerClassName,\n showFooter = true,\n showDescription = true\n}: {\n count?: number\n className?: string\n containerClassName?: string\n showFooter?: boolean\n showDescription?: boolean\n}) {\n return (\n <div\n className={cn(\n \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-6\",\n className\n )}\n role=\"status\"\n aria-label={`Loading ${count} organization cards`}\n >\n {Array.from({ length: count }, (_, index) => (\n <OrganizationCardSkeleton\n key={index}\n containerClassName={containerClassName}\n showFooter={showFooter}\n showDescription={showDescription}\n />\n ))}\n </div>\n )\n}\n","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { OrganizationIconSkeleton } from \"./organization-icon-skeleton\"\n\nexport interface DeviceCardSkeletonProps {\n /**\n * Additional CSS classes\n */\n className?: string\n}\n\n/**\n * DeviceCardSkeleton - Loading skeleton matching DeviceCard exact layout\n *\n * Matches the structure of DeviceCard:\n * - Row 1: Device icon + Device name + More button\n * - Row 2: OS badge + Organization icon + Organization name\n * - Row 3: Status badge + Last seen\n *\n * Prevents layout jumps by matching exact dimensions.\n */\nexport function DeviceCardSkeleton({ className }: DeviceCardSkeletonProps) {\n return (\n <div\n className={cn(\n \"bg-ods-card rounded-[6px] border border-ods-border h-full\",\n className\n )}\n role=\"status\"\n aria-label=\"Loading device card\"\n >\n {/* Row 1: Device icon + Device name + More button */}\n <div className=\"flex gap-4 items-center px-4 py-3\">\n {/* Device type icon (8x8 container) */}\n <div className=\"w-8 h-8 bg-[#161616] border border-ods-border rounded-[6px] flex items-center justify-center flex-shrink-0\">\n <div className=\"w-4 h-4 bg-ods-border rounded animate-pulse\" />\n </div>\n\n {/* Device name */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"h-6 w-3/4 bg-ods-border rounded animate-pulse\" />\n </div>\n\n {/* More button */}\n <div className=\"w-12 h-12 bg-ods-border rounded-[6px] flex-shrink-0 animate-pulse\" />\n </div>\n\n {/* Row 2: OS badge + Organization */}\n <div className=\"flex gap-4 items-center px-4 py-2\">\n {/* OS badge */}\n <div className=\"w-24 h-6 bg-ods-border rounded flex-shrink-0 animate-pulse\" />\n\n {/* Organization icon */}\n <OrganizationIconSkeleton size=\"sm\" />\n\n {/* Organization name */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"h-5 w-1/2 bg-ods-border rounded animate-pulse\" />\n </div>\n </div>\n\n {/* Row 3: Status badge + Last seen */}\n <div className=\"flex gap-4 items-center px-4 py-2\">\n {/* Status badge */}\n <div className=\"w-20 h-6 bg-ods-border rounded-full flex-shrink-0 animate-pulse\" />\n\n {/* Last seen */}\n <div className=\"flex-1\">\n <div className=\"h-5 w-40 bg-ods-border rounded animate-pulse\" />\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * DeviceCardSkeletonGrid - Grid of device card skeletons\n *\n * Matches DevicesGrid layout with responsive columns:\n * - Mobile: 1 column\n * - Tablet (md): 2 columns\n * - Desktop (lg): 3 columns\n * - Large (xl): 4 columns\n */\nexport function DeviceCardSkeletonGrid({\n count = 12,\n className\n}: {\n count?: number\n className?: string\n}) {\n return (\n <div\n className={cn(\n \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\",\n className\n )}\n role=\"status\"\n aria-label={`Loading ${count} device cards`}\n >\n {Array.from({ length: count }, (_, index) => (\n <DeviceCardSkeleton key={index} />\n ))}\n </div>\n )\n}\n","\"use client\"\n\nimport { VendorDetailLayoutSkeleton } from './loading';\n\nexport function VendorPageSkeleton() {\n return <VendorDetailLayoutSkeleton />;\n}","\"use client\"\n\nimport React from 'react';\n\ninterface WhyItMattersItemProps {\n number: string;\n title: string;\n description: string;\n isLast?: boolean;\n}\n\nconst WhyItMattersItem: React.FC<WhyItMattersItemProps> = ({ number, title, description, isLast }) => {\n return (\n <li\n className={`\n flex flex-col md:flex-row items-start gap-6 p-10 w-full\n transition-colors duration-200 hover:bg-[#2A2A2A]\n ${!isLast ? 'border-b border-ods-border' : ''}\n `}\n >\n <span className=\"text-h2 tracking-[-0.02em] text-ods-accent\">\n {number}\n </span>\n <div className=\"flex-1\">\n <h3 className=\"text-h2 tracking-[-0.02em] text-ods-text-primary\">\n {title}\n </h3>\n <p className=\"text-h4 text-ods-text-primary mt-4\">\n {description}\n </p>\n </div>\n </li>\n );\n};\n\n\nconst WhyItMatters = () => {\n const items = [\n {\n number: \"1.\",\n title: \"Cut Costs\",\n description: \"Eliminate vendor fees with proven open-source alternatives\",\n },\n {\n number: \"2.\",\n title: \"Stay in Control\",\n description: \"Full visibility and data ownership\",\n },\n {\n number: \"3.\",\n title: \"Build What You Need\",\n description: \"Customize without vendor limitations\",\n },\n {\n number: \"4.\",\n title: \"Scale Freely\",\n description: \"Designed for multi-tenant MSP environments\",\n },\n ];\n\n return (\n <section className=\"bg-[#161616]\">\n <div className=\"w-full max-w-[1920px] mx-auto px-6 md:px-20\">\n <h2 className=\"text-h1 text-center text-ods-text-primary tracking-[-0.02em] mb-6\">\n Why It Matters\n </h2>\n <div className=\"bg-ods-card border border-ods-border rounded-3xl overflow-hidden w-full\">\n <ol>\n {items.map((item, index) => (\n <WhyItMattersItem\n key={item.number}\n number={item.number}\n title={item.title}\n description={item.description}\n isLast={index === items.length - 1}\n />\n ))}\n </ol>\n </div>\n </div>\n </section>\n );\n};\n\nexport default WhyItMatters; ","\"use client\"\n\nimport { CheckCircleIcon as LucideCheckCircleIcon, XCircleIcon } from './ui/custom-icons'\n\ninterface YesNoDisplayProps {\n value: boolean\n yesText?: string\n noText?: string\n customText?: string // For displaying custom text instead of Yes/No\n className?: string\n}\n\nexport function YesNoDisplay({ \n value, \n yesText = \"Yes\", \n noText = \"No\", \n customText,\n className = \"\" \n}: YesNoDisplayProps) {\n // If custom text is provided, display it with appropriate icon\n if (customText) {\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n <LucideCheckCircleIcon className=\"h-6 w-6\" />\n <span className=\"text-ods-text-primary text-[16px]\">{customText}</span>\n </div>\n )\n }\n \n // Standard Yes/No display\n if (value) {\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n <LucideCheckCircleIcon className=\"h-6 w-6\" />\n <span className=\"text-ods-text-primary text-[16px]\">{yesText}</span>\n </div>\n )\n }\n \n return (\n <div className={`flex items-center gap-2 ${className}`}>\n <XCircleIcon className=\"h-6 w-6\" />\n <span className=\"text-ods-text-secondary text-[16px]\">{noText}</span>\n </div>\n )\n}\n\n/**\n * Unified logic to determine if a feature value should be considered \"Yes\" or \"No\"\n */\nexport function evaluateFeatureValue(\n value: string | null | undefined,\n dataType: 'boolean' | 'text' | 'number'\n): boolean {\n // Handle truly empty/null values\n if (value === null || value === undefined || value === '') {\n return false\n }\n \n const stringValue = String(value).toLowerCase().trim()\n \n // Handle explicit null/empty string values\n if (stringValue === 'null' || stringValue === 'n/a' || stringValue === 'none' || stringValue === '-') {\n return false\n }\n \n // Boolean data type\n if (dataType === 'boolean') {\n return stringValue === 'true' || \n stringValue === '1' || \n stringValue === 'yes' || \n stringValue === '✓' || \n stringValue === '✅'\n }\n \n // Text data type\n if (dataType === 'text') {\n // Handle emoji values\n if (stringValue === '✅' || stringValue === '✓') {\n return true\n }\n if (stringValue === '❌' || stringValue === '✗') {\n return false\n }\n \n // Handle explicit no values\n if (stringValue === 'no' || stringValue === 'false' || stringValue === '0') {\n return false\n }\n \n // Any other non-empty text is considered \"yes\"\n return stringValue.length > 0\n }\n \n // Number data type\n if (dataType === 'number') {\n const numValue = parseFloat(stringValue)\n return !isNaN(numValue) && numValue > 0\n }\n \n // Default fallback\n return false\n} ","'use client'\n\nimport React, { useState, useEffect } from 'react';\nimport { FlamingoLogo } from './flamingo-logo';\nimport { getBaseUrl } from '../utils';\n\ninterface MadeWithLoveProps {\n /** Custom class name for the container */\n className?: string;\n /** Size variant for the component */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show on mobile (responsive) */\n showOnMobile?: boolean;\n}\n\nexport function MadeWithLove({\n className = '',\n size = 'md',\n showOnMobile = true\n}: MadeWithLoveProps) {\n const [isMobile, setIsMobile] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n // Detect mobile/desktop for responsive behavior\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < 640); // 640px = sm breakpoint\n };\n\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n // Size configuration with pixel values\n const sizeConfig = {\n sm: {\n logoSize: 14,\n fontSizeMobile: '12px',\n fontSizeDesktop: '14px',\n gap: '4px'\n },\n md: {\n logoSize: 16,\n fontSizeMobile: '14px',\n fontSizeDesktop: '16px',\n gap: '4px'\n },\n lg: {\n logoSize: 20,\n fontSizeMobile: '16px',\n fontSizeDesktop: '18px',\n gap: '6px'\n }\n };\n\n const config = sizeConfig[size];\n const flamingoUrl = getBaseUrl('flamingo');\n\n // Container styles using primitive CSS\n const containerStyle: React.CSSProperties = {\n display: (!showOnMobile && isMobile) ? 'none' : 'inline-flex',\n alignItems: 'center',\n gap: config.gap,\n fontSize: isMobile ? config.fontSizeMobile : config.fontSizeDesktop,\n lineHeight: 1.5,\n color: '#ffffff',\n fontFamily: 'inherit'\n };\n\n // Button/link styles using primitive CSS\n const linkStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '2px',\n padding: 0,\n margin: 0,\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n textDecoration: isHovered ? 'underline' : 'none',\n color: '#ffffff',\n fontSize: '14px',\n fontFamily: '\"Azeret Mono\", monospace',\n transition: 'text-decoration 0.2s ease',\n outline: 'none'\n };\n\n // Logo container styles\n const logoStyle: React.CSSProperties = {\n marginLeft: '2px',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center'\n };\n\n // Text span styles\n const textStyle: React.CSSProperties = {\n color: '#ffffff',\n marginLeft: '4px',\n textDecoration: 'none'\n };\n\n return (\n <div\n style={containerStyle}\n className={className}\n >\n Made with love by\n <a\n href={flamingoUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={linkStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div style={logoStyle}>\n <FlamingoLogo\n size={config.logoSize}\n color=\"#f357bb\" // Direct hex instead of CSS variable for cross-framework compatibility\n />\n </div>\n <span style={textStyle}>Flamingo</span>\n </a>\n </div>\n );\n}","\"use client\";\n\nimport { Label } from \"./ui/label\";\nimport DatePicker from 'react-datepicker';\nimport { cn } from '../utils/cn';\n\ninterface DateTimePickerProps {\n value?: Date;\n onChange: (date: Date | null) => void;\n disabled?: boolean;\n label?: string;\n placeholder?: string;\n className?: string;\n showTimeSelect?: boolean;\n timeFormat?: string;\n timeIntervals?: number;\n dateFormat?: string;\n}\n\n// Shared input styling that matches Input component pattern\nconst inputClassName = cn(\n \"flex h-10 w-full rounded-md border px-3 py-2 text-sm ring-offset-background\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50 touch-manipulation\",\n // Admin theme colors\n \"bg-ods-card border-ods-border text-ods-text-primary\",\n \"placeholder:text-[#767676] focus-visible:ring-[#FFC008]\",\n \"md:text-sm text-base\" // Mobile zoom prevention\n);\n\nexport function DateTimePicker({\n value,\n onChange,\n disabled = false,\n label,\n placeholder = \"Select date and time\",\n className,\n showTimeSelect = true,\n timeFormat = \"HH:mm\",\n timeIntervals = 15,\n dateFormat = \"MMMM d, yyyy h:mm aa\"\n}: DateTimePickerProps) {\n return (\n <div className={cn(\"space-y-2\", className)}>\n {label && (\n <Label className=\"font-['Azeret_Mono'] text-[12px] font-semibold leading-[1em] tracking-[-0.02em] text-ods-text-secondary uppercase\">\n {label}\n </Label>\n )}\n\n <div className=\"w-full\">\n <DatePicker\n selected={value}\n onChange={onChange}\n showTimeSelect={showTimeSelect}\n timeFormat={timeFormat}\n timeIntervals={timeIntervals}\n dateFormat={dateFormat}\n placeholderText={placeholder}\n disabled={disabled}\n wrapperClassName=\"w-full\"\n className={inputClassName}\n />\n </div>\n \n <style dangerouslySetInnerHTML={{ __html: `\n .react-datepicker-wrapper {\n width: 100% !important;\n display: block !important;\n }\n\n .react-datepicker__input-container {\n width: 100% !important;\n }\n\n .react-datepicker__input-container input {\n width: 100% !important;\n }\n\n /* Dark theme for calendar popup */\n .react-datepicker-popper {\n z-index: 9999 !important;\n }\n\n .react-datepicker {\n background-color: #212121 !important;\n border: 1px solid #3A3A3A !important;\n color: #FAFAFA !important;\n z-index: 9999 !important;\n }\n\n .react-datepicker__header {\n background-color: #2A2A2A !important;\n border-bottom: 1px solid #3A3A3A !important;\n color: #FAFAFA !important;\n }\n\n .react-datepicker__current-month {\n color: #FAFAFA !important;\n }\n\n .react-datepicker__day-name {\n color: #888888 !important;\n }\n\n .react-datepicker__day {\n color: #FAFAFA !important;\n }\n\n .react-datepicker__day:hover {\n background-color: #3A3A3A !important;\n }\n\n .react-datepicker__day--selected {\n background-color: #FFC008 !important;\n color: #000000 !important;\n }\n\n .react-datepicker__day--keyboard-selected {\n background-color: #FFC008 !important;\n color: #000000 !important;\n }\n\n .react-datepicker__time-container {\n border-left: 1px solid #3A3A3A !important;\n }\n\n .react-datepicker__time {\n background: #212121 !important;\n }\n\n .react-datepicker__time-box {\n width: 85px !important;\n }\n\n .react-datepicker-time__header {\n background-color: #2A2A2A !important;\n color: #FAFAFA !important;\n }\n\n .react-datepicker__time-list-item {\n color: #FAFAFA !important;\n }\n\n .react-datepicker__time-list-item:hover {\n background-color: #3A3A3A !important;\n }\n\n .react-datepicker__time-list-item--selected {\n background-color: #FFC008 !important;\n color: #000000 !important;\n }\n\n .react-datepicker__navigation {\n top: 1rem !important;\n }\n\n .react-datepicker__navigation--previous {\n border-right-color: #888888 !important;\n }\n\n .react-datepicker__navigation--next {\n border-left-color: #888888 !important;\n }\n ` }} />\n </div>\n );\n} ","\"use client\";\n\nimport { useState, useEffect, ComponentType } from 'react';\nimport Link from '../../../embed-shims/next-link';\nimport { useRouter } from '../../../embed-shims/next-navigation';\nimport { Card, CardContent } from '../../ui/card';\nimport { ArticleDetailLayout } from '../../layout/article-detail-layout';\nimport { BackButton } from '../../layout/back-button';\nimport { ReleaseChangelogSection } from '../../ui/release-changelog-section';\nimport { StatusBadge } from '../../ui/status-badge';\nimport { SquareAvatar } from '../../ui/square-avatar';\nimport { ImageGalleryModal } from '../../ui/image-gallery-modal';\nimport { GitHubIcon } from '../../icons/github-icon';\nimport { AlertTriangle, ExternalLink, BookMarked, Sparkles, TrendingUp, Wrench } from 'lucide-react';\nimport { formatReleaseDate } from '../../../utils/date-formatters';\nimport { nameInitials } from '../../../utils/format';\nimport { Video } from '../../features/video';\nimport { DetailPageSkeleton } from '../detail-page-skeleton';\nimport type { ChangelogEntry } from '../../../types/product-release';\nimport type { VideoTeaser } from '../../../types/video-processing';\n\n// Types for injectable components\nexport interface MarkdownRendererProps {\n content: string;\n}\n\n// Canonical RoadmapItem shape lives in chat entity types — see\n// `src/components/chat/types/entities/roadmap-item.ts`. The product-release\n// detail page previously declared a structural placeholder\n// (`{ id; [k: string]: unknown }`) that conflicted with the canonical\n// shape once the entities barrel was added; re-exporting the canonical\n// type fixes the collision while keeping the same import path for\n// downstream consumers of `./release-detail-page`.\nimport type { RoadmapItem } from '../../chat/types/entities/roadmap-item';\nimport type { DeliveryResponse } from '../../../types/delivery';\n// Re-export both types for source-compat with consumers importing\n// through this module. Canonical sources:\n// - RoadmapItem → `../../chat/types/entities/roadmap-item`\n// - DeliveryResponse → `../../../types/delivery` (single source of\n// truth, shared with the lib `<DeliveryLists>` / `<DeliveryTable>`\n// components and the new types barrel).\nexport type { RoadmapItem, DeliveryResponse };\n\nexport interface RoadmapSectionProps {\n items: RoadmapItem[];\n isLoading: boolean;\n onItemUpdate?: (item: RoadmapItem) => void;\n}\n\nexport interface DeliverySectionProps {\n data: DeliveryResponse | null;\n isLoading: boolean;\n}\n\nexport interface VideoSectionProps {\n bites: VideoTeaser[];\n title?: string;\n filterPublished?: boolean;\n}\n\n// Type for the useRelease hook result\nexport interface UseReleaseResult {\n data: unknown;\n error: Error | null;\n isLoading: boolean;\n}\n\nexport interface VideoDisplaySectionProps {\n mainVideoUrl?: string | null;\n youtubeUrl?: string | null;\n highlightVideoUrl?: string | null;\n highlightVideoThumbnail?: string | null;\n mainVideoPoster?: string | null;\n title?: string;\n videoSummary?: string | null;\n videoBites?: VideoTeaser[];\n bitesTitle?: string;\n filterPublishedBites?: boolean;\n srtContent?: string | null;\n captionsUrl?: string | null;\n}\n\nexport interface ReleaseDetailPageProps {\n slug: string;\n initialData?: unknown; // Optional pre-fetched data for admin preview\n // Required: Hook for fetching release data (must be from app-level to use correct QueryClient)\n useRelease: (slug: string | undefined) => UseReleaseResult;\n // Injectable components for app-specific rendering\n MarkdownRenderer?: ComponentType<MarkdownRendererProps>;\n RoadmapSection?: ComponentType<RoadmapSectionProps>;\n DeliverySection?: ComponentType<DeliverySectionProps>;\n VideoSection?: ComponentType<VideoSectionProps>;\n /** Injectable video display section with tabs for full/highlight video + summary + bites */\n VideoDisplaySection?: ComponentType<VideoDisplaySectionProps>;\n // API endpoints for fetching linked tasks\n roadmapApiEndpoint?: string;\n deliveryApiEndpoint?: string;\n /** Back-button config — same pattern as `DevSectionPage` /\n * `LegalDocumentPage`. Pass `false` to hide. Default\n * `{ label: 'Back to home', href: '/' }`. */\n backButton?: { label?: string; href?: string } | false;\n}\n\n// Default simple markdown renderer (just renders as text)\nfunction DefaultMarkdownRenderer({ content }: MarkdownRendererProps) {\n return <div className=\"whitespace-pre-wrap\">{content}</div>;\n}\n\nexport function ReleaseDetailPage({\n slug,\n initialData,\n useRelease,\n MarkdownRenderer = DefaultMarkdownRenderer,\n RoadmapSection,\n DeliverySection,\n VideoSection,\n VideoDisplaySection,\n roadmapApiEndpoint = '/api/roadmap',\n deliveryApiEndpoint = '/api/delivery',\n backButton\n}: ReleaseDetailPageProps) {\n const router = useRouter();\n // Use pre-fetched data if provided (admin preview), otherwise fetch via hook (public)\n const { data: fetchedRelease, error, isLoading } = useRelease(initialData ? undefined : slug);\n const release = (initialData || fetchedRelease) as Record<string, unknown> | undefined;\n const [galleryOpen, setGalleryOpen] = useState(false);\n const [galleryIndex, setGalleryIndex] = useState(0);\n\n // Back-button config — mirrors DevSectionPage / LegalDocumentPage.\n // Default: { label: 'Back to home', href: '/' }. Pass `false` to hide\n // (e.g. embed-mode where the host owns navigation chrome).\n // Narrowing note: `backButton &&` already eliminates the `false` branch,\n // so the inner expressions are typed as `{ label?, href? } | undefined`.\n // Don't re-compare to `false` here — tsc TS2367s on the dead branch.\n const showBackButton = backButton !== false;\n const backLabel = (backButton ? backButton.label : undefined) ?? 'Back to home';\n const backHref = (backButton ? backButton.href : undefined) ?? '/';\n\n // Fetch roadmap and delivery tasks if linked to this release\n const [roadmapTasks, setRoadmapTasks] = useState<RoadmapItem[]>([]);\n const [deliveryData, setDeliveryData] = useState<DeliveryResponse | null>(null);\n const [roadmapLoading, setRoadmapLoading] = useState(false);\n const [deliveryLoading, setDeliveryLoading] = useState(false);\n\n useEffect(() => {\n async function fetchLinkedTasks() {\n if (!release) return;\n\n try {\n // Fetch roadmap tasks if linked\n const roadmapTasksData = release.clickup_roadmap_tasks as Array<{ clickup_task_id: string }> | undefined;\n if (roadmapTasksData && roadmapTasksData.length > 0 && RoadmapSection) {\n setRoadmapLoading(true);\n const roadmapIds = roadmapTasksData.map(t => t.clickup_task_id).join(',');\n const roadmapResponse = await fetch(`${roadmapApiEndpoint}?task_ids=${roadmapIds}`);\n const roadmapData = await roadmapResponse.json();\n setRoadmapTasks(roadmapData.items || []);\n setRoadmapLoading(false);\n }\n\n // Fetch delivery tasks if linked\n const deliveryTasksData = release.clickup_delivery_tasks as Array<{ clickup_task_id: string }> | undefined;\n if (deliveryTasksData && deliveryTasksData.length > 0 && DeliverySection) {\n setDeliveryLoading(true);\n const deliveryIds = deliveryTasksData.map(t => t.clickup_task_id).join(',');\n const deliveryResponse = await fetch(`${deliveryApiEndpoint}?task_ids=${deliveryIds}`);\n const deliveryResponseData = await deliveryResponse.json();\n setDeliveryData(deliveryResponseData);\n setDeliveryLoading(false);\n }\n } catch (err) {\n console.error('Error fetching linked tasks:', err);\n setRoadmapLoading(false);\n setDeliveryLoading(false);\n }\n }\n\n fetchLinkedTasks();\n }, [release, RoadmapSection, DeliverySection, roadmapApiEndpoint, deliveryApiEndpoint]);\n\n // Don't show loading skeleton if we have initialData\n if (!initialData && isLoading) {\n return <DetailPageSkeleton metadataColumns={4} showImageGallery={true} />;\n }\n\n if (error || !release) {\n return (\n <div className=\"text-center py-16\">\n <h1 className=\"text-4xl font-bold text-ods-text-primary mb-4\">Release Not Found</h1>\n <p className=\"text-xl text-ods-text-secondary\">The release you're looking for doesn't exist.</p>\n </div>\n );\n }\n\n const hasBreakingChanges = Array.isArray(release.breaking_changes) && release.breaking_changes.length > 0;\n\n // Type assertions for release data\n const releaseTitle = release.title as string;\n const releaseVersion = release.version as string;\n const releaseSummary = release.summary as string | null;\n const releaseContent = release.content as string | null;\n const releaseDate = release.release_date as string;\n const releaseType = release.release_type as string;\n const releaseStatus = release.release_status as string;\n const blogTags = release.blog_tags as Array<{ id?: string; name?: string; blog_tags?: { id: string; name: string } }> | undefined;\n const releaseMedia = release.release_media as Array<{ id?: string; media_type: string; media_url: string; title?: string }> | undefined;\n const author = release.author as { avatar_url?: string; full_name?: string } | undefined;\n const githubReleases = release.github_releases as Array<{ id: string; github_release_url: string }> | undefined;\n const knowledgeBaseLinks = release.knowledge_base_links as Array<{ id?: string; kb_article_path: string }> | string[] | undefined;\n const migrationGuideUrl = release.migration_guide_url as string | undefined;\n const documentationUrl = release.documentation_url as string | undefined;\n const youtubeUrl = release.youtube_url as string | undefined;\n const mainVideoUrl = release.main_video_url as string | undefined;\n const videoBites = release.video_bites as VideoTeaser[] | undefined;\n const highlightVideoUrl = release.highlight_video_url as string | undefined;\n const highlightVideoThumbnail = release.highlight_video_thumbnail as string | undefined;\n const breakingChanges = release.breaking_changes as ChangelogEntry[] | undefined;\n const featuresAdded = release.features_added as ChangelogEntry[] | undefined;\n const bugFixed = release.bugs_fixed as ChangelogEntry[] | undefined;\n const improvements = release.improvements as ChangelogEntry[] | undefined;\n\n return (\n <ArticleDetailLayout>\n {/* Back button — desktop-only, matches DevSectionPage / LegalDocumentPage\n (TitleBlock renders the same `hidden md:inline-flex` BackButton). */}\n {showBackButton && (\n <BackButton\n label={backLabel}\n onClick={() => router.push(backHref)}\n className=\"hidden md:inline-flex mb-4\"\n />\n )}\n <div className=\"space-y-6 md:space-y-8\">\n {/* Title Block */}\n <div className=\"flex flex-col md:flex-row md:items-end gap-4 w-full\">\n <div className=\"flex-1 flex flex-col gap-2\">\n {/* Title */}\n <h1 className=\"text-h1 tracking-[-1.12px] text-ods-text-primary\">\n {releaseTitle}\n </h1>\n\n {/* Version */}\n <p className=\"text-h4 text-ods-text-secondary\">\n Version: {releaseVersion}\n </p>\n </div>\n </div>\n\n {/* Category Tags */}\n <div className=\"flex flex-wrap gap-2 w-full\">\n {/* Blog Tags */}\n {blogTags?.map((tag) => (\n <StatusBadge\n key={tag.id || tag.blog_tags?.id}\n text={(tag.name || tag.blog_tags?.name || '').toUpperCase()}\n variant=\"card\"\n className=\"bg-ods-card border border-ods-border\"\n />\n ))}\n </div>\n\n {/* Metadata Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-4 border border-ods-border rounded-md overflow-hidden w-full\">\n {/* Release Type */}\n <div className=\"bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3\">\n <div className=\"flex flex-col gap-0\">\n <p className=\"text-h4 text-ods-text-primary\">\n {releaseType.toLocaleUpperCase()}\n </p>\n <p className=\"font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary\">\n Release Type\n </p>\n </div>\n </div>\n\n {/* Release Status */}\n <div className=\"bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3\">\n <div className=\"flex flex-col gap-0\">\n <p className=\"text-h4 text-ods-text-primary\">\n {releaseStatus.toLocaleUpperCase()}\n </p>\n <p className=\"font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary\">\n Release Status\n </p>\n </div>\n </div>\n\n {/* Release Date */}\n <div className=\"bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3\">\n <div className=\"flex flex-col gap-0\">\n <p className=\"text-h4 text-ods-text-primary\">\n {formatReleaseDate(releaseDate)}\n </p>\n <p className=\"font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary\">\n Release Date\n </p>\n </div>\n </div>\n\n {/* Author */}\n <div className=\"bg-ods-card p-4 flex items-center gap-3\">\n <SquareAvatar\n src={author?.avatar_url || ''}\n alt={author?.full_name || 'Author'}\n fallback={nameInitials(author?.full_name || 'Unknown', '')}\n size=\"md\"\n variant=\"round\"\n />\n <div className=\"flex flex-col gap-0 flex-1 min-w-0\">\n <p className=\"text-h3 tracking-[-0.36px] text-ods-text-primary truncate\" title={author?.full_name || 'Unknown Author'}>\n {author?.full_name || 'Unknown Author'}\n </p>\n <p className=\"font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary\">\n Author\n </p>\n </div>\n </div>\n </div>\n\n {/* Image Gallery - Horizontal Scrolling */}\n {releaseMedia && releaseMedia.length > 0 && (\n <div className=\"flex gap-6 overflow-x-auto w-full\">\n {releaseMedia.slice(0, 5).map((mediaItem, index) => (\n <div\n key={mediaItem.id || index}\n className=\"shrink-0 w-[240px] h-[200px] rounded-md overflow-hidden border border-ods-border bg-black cursor-pointer hover:opacity-80 transition-opacity\"\n onClick={() => {\n if (mediaItem.media_type !== 'video' && mediaItem.media_type !== 'demo') {\n setGalleryIndex(index);\n setGalleryOpen(true);\n }\n }}\n >\n {mediaItem.media_type === 'video' || mediaItem.media_type === 'demo' ? (\n <Video url={mediaItem.media_url} layout=\"native\" />\n ) : (\n <img src={mediaItem.media_url} alt={mediaItem.title || `Media ${index + 1}`} className=\"w-full h-full object-cover\" />\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* Summary */}\n {releaseSummary && (\n <div className=\"text-h4 text-ods-text-primary\">\n <p>{releaseSummary}</p>\n </div>\n )}\n\n {/* Video Display Section - Injectable or fallback */}\n {VideoDisplaySection ? (\n <VideoDisplaySection\n mainVideoUrl={mainVideoUrl}\n youtubeUrl={youtubeUrl}\n highlightVideoUrl={highlightVideoUrl}\n highlightVideoThumbnail={highlightVideoThumbnail}\n title={releaseTitle}\n videoBites={videoBites}\n bitesTitle=\"Video Clips\"\n filterPublishedBites={true}\n srtContent={release?.srt_content as string | null | undefined}\n captionsUrl={release?.captionsUrl as string | undefined}\n />\n ) : (\n <>\n {/*\n Fallback when no `VideoDisplaySection` is injected. `<Video>` is the\n SSoT for every video surface — single source of truth across YouTube,\n HLS, and MP4 paths.\n */}\n {youtubeUrl && (\n <Video\n kind=\"youtube\"\n url={youtubeUrl}\n title={`${releaseTitle} - Video`}\n layout=\"native\"\n />\n )}\n {!youtubeUrl && mainVideoUrl && (\n <Video\n url={mainVideoUrl}\n srtContent={release?.srt_content as string | undefined}\n captionsUrl={release?.captionsUrl as string | undefined}\n layout=\"centered\"\n />\n )}\n {highlightVideoUrl && (\n <Video\n url={highlightVideoUrl}\n poster={highlightVideoThumbnail}\n layout=\"centered\"\n />\n )}\n </>\n )}\n\n {/* Content */}\n {releaseContent && (\n <div className=\"text-h4 text-ods-text-primary\">\n <MarkdownRenderer content={releaseContent} />\n </div>\n )}\n\n {/* Breaking Changes Warning */}\n {hasBreakingChanges && (\n <Card className=\"border-red-500 bg-red-500/10\">\n <CardContent className=\"p-6\">\n <div className=\"flex items-center gap-3\">\n <AlertTriangle className=\"h-6 w-6 text-red-500\" />\n <div>\n <h3 className=\"font-bold text-red-500 text-lg\">Breaking Changes</h3>\n <p className=\"text-ods-text-secondary\">This release contains breaking changes. Review carefully before upgrading.</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Changelog Sections — icons match the catalog card's changelog\n strip taxonomy (Sparkles/Wrench/TrendingUp/AlertTriangle) so the\n user sees a consistent visual signature across catalog → detail. */}\n <ReleaseChangelogSection\n title=\"Breaking Changes\"\n entries={breakingChanges || []}\n isBreaking\n hideTitle\n icon={<AlertTriangle className=\"h-6 w-6\" />}\n SimpleMarkdownRenderer={MarkdownRenderer}\n />\n {/* Features / Bugs / Improvements use `previewFirst` — same\n progressive-disclosure pattern as the investor-update detail\n page's Key Highlights / Financial Notes sections. Shows the\n first entry in full + fade-masks the rest, with a \"Show N\n more / Show less\" toggle. Breaking Changes (above) stays\n fully expanded — it's critical info, not skim-friendly. */}\n <ReleaseChangelogSection\n title=\"Features Added\"\n entries={featuresAdded || []}\n icon={<Sparkles className=\"h-6 w-6\" />}\n previewFirst\n SimpleMarkdownRenderer={MarkdownRenderer}\n />\n <ReleaseChangelogSection\n title=\"Bugs Fixed\"\n entries={bugFixed || []}\n icon={<Wrench className=\"h-6 w-6\" />}\n previewFirst\n SimpleMarkdownRenderer={MarkdownRenderer}\n />\n <ReleaseChangelogSection\n title=\"Improvements\"\n entries={improvements || []}\n icon={<TrendingUp className=\"h-6 w-6\" />}\n previewFirst\n SimpleMarkdownRenderer={MarkdownRenderer}\n />\n\n {/* Video Bites Section - Only when VideoDisplaySection is not handling it */}\n {!VideoDisplaySection && VideoSection && videoBites && videoBites.length > 0 && (\n <VideoSection\n bites={videoBites}\n title=\"Video Clips\"\n filterPublished={true}\n />\n )}\n\n {/* Related Roadmap Items */}\n {RoadmapSection && (roadmapLoading || roadmapTasks.length > 0) && (\n <div className=\"space-y-4 w-full\">\n <p className=\"text-h5 tracking-[-0.28px] text-ods-text-secondary\">\n Related Roadmap Items\n </p>\n <RoadmapSection\n items={roadmapTasks}\n isLoading={roadmapLoading}\n onItemUpdate={(updatedItem) => {\n setRoadmapTasks(prevTasks =>\n prevTasks.map(task =>\n task.id === updatedItem.id ? updatedItem : task\n )\n );\n }}\n />\n </div>\n )}\n\n {/* Bug-fixes & Enhancements Section */}\n {DeliverySection && (deliveryLoading || (deliveryData && (deliveryData.completed.length > 0 || deliveryData.inProgress.length > 0))) && (\n <div className=\"w-full space-y-4\">\n <p className=\"text-h5 tracking-[-0.28px] text-ods-text-secondary\">\n Related Enhancements and Bug-fixes\n </p>\n <DeliverySection\n data={deliveryData}\n isLoading={deliveryLoading}\n />\n </div>\n )}\n\n {/* Related Links */}\n {(githubReleases?.length || knowledgeBaseLinks?.length || migrationGuideUrl || documentationUrl) && (\n <div className=\"space-y-1 w-full\">\n <p className=\"text-h5 tracking-[-0.28px] text-ods-text-secondary\">\n Related Links\n </p>\n <Card className=\"bg-ods-card border-ods-border p-6\">\n <div className=\"space-y-4\">\n {/* GitHub Releases */}\n {githubReleases && githubReleases.length > 0 && (\n <>\n {githubReleases.map((ghRelease) => (\n <div key={ghRelease.id} className=\"flex items-start gap-1\">\n <GitHubIcon className=\"shrink-0\" width={24} height={24} color=\"var(--color-text-secondary)\" />\n <span className=\"text-h4 text-ods-text-primary\">\n Github Release\n </span>\n <a\n href={ghRelease.github_release_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-h4 text-[#ffc008] hover:underline\"\n >\n {ghRelease.github_release_url.split('/').pop()}\n </a>\n <ExternalLink className=\"h-6 w-6 text-[#ffc008] shrink-0\" />\n </div>\n ))}\n </>\n )}\n\n {/* Knowledge Base Links */}\n {knowledgeBaseLinks && knowledgeBaseLinks.length > 0 && (\n <>\n {knowledgeBaseLinks.map((linkObj) => {\n const path = typeof linkObj === 'string' ? linkObj : linkObj.kb_article_path;\n const linkId = typeof linkObj === 'string' ? path : linkObj.id || path;\n return (\n <div key={linkId} className=\"flex items-start gap-1\">\n <BookMarked className=\"h-6 w-6 text-ods-text-secondary shrink-0\" />\n <span className=\"text-h4 text-ods-text-primary\">\n Knowledge Base\n </span>\n <Link\n href={path.startsWith('http') ? path : `/knowledge-base${path.startsWith('/') ? '' : '/'}${path}`}\n className=\"text-h4 text-[#ffc008] hover:underline\"\n >\n {path.replace(/^\\//, '').split('/').pop()?.replace(/-/g, ' ') || 'View Article'}\n </Link>\n <ExternalLink className=\"h-6 w-6 text-[#ffc008] shrink-0\" />\n </div>\n );\n })}\n </>\n )}\n\n {/* Migration Guide */}\n {migrationGuideUrl && (\n <div className=\"flex items-start gap-1\">\n <BookMarked className=\"h-6 w-6 text-ods-text-secondary shrink-0\" />\n <a\n href={migrationGuideUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-h4 text-[#ffc008] hover:underline\"\n >\n 📖 Migration Guide\n </a>\n <ExternalLink className=\"h-6 w-6 text-[#ffc008] shrink-0\" />\n </div>\n )}\n\n {/* Documentation */}\n {documentationUrl && (\n <div className=\"flex items-start gap-1\">\n <BookMarked className=\"h-6 w-6 text-ods-text-secondary shrink-0\" />\n <a\n href={documentationUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-h4 text-[#ffc008] hover:underline\"\n >\n 📚 Documentation\n </a>\n <ExternalLink className=\"h-6 w-6 text-[#ffc008] shrink-0\" />\n </div>\n )}\n </div>\n </Card>\n </div>\n )}\n </div>\n\n {/* Gallery Modal */}\n {releaseMedia && releaseMedia.filter((m) => m.media_type !== 'video' && m.media_type !== 'demo').length > 0 && (\n <ImageGalleryModal\n images={releaseMedia.filter((m) => m.media_type !== 'video' && m.media_type !== 'demo').map((m) => m.media_url)}\n isOpen={galleryOpen}\n onClose={() => setGalleryOpen(false)}\n initialIndex={galleryIndex}\n />\n )}\n </ArticleDetailLayout>\n );\n}\n","\"use client\";\n\nimport { PageContainer } from '../layout/page-container';\n\nexport interface DetailPageSkeletonProps {\n metadataColumns?: number; // Number of metadata grid columns (default 4)\n showImageGallery?: boolean; // Show horizontal image gallery (default true)\n}\n\nexport function DetailPageSkeleton({\n metadataColumns = 4,\n showImageGallery = true\n}: DetailPageSkeletonProps = {}) {\n return (\n <PageContainer\n as=\"article\"\n backgroundClassName=\"bg-ods-bg\"\n contentPadding=\"py-6 md:py-10 px-6 md:px-20\"\n maxWidth=\"max-w-[1280px]\"\n >\n <div className=\"space-y-6 md:space-y-10 animate-pulse\">\n {/* Title Block */}\n <div className=\"flex flex-col gap-6 w-full\">\n <div className=\"h-16 md:h-20 w-full max-w-3xl bg-ods-card rounded\"></div>\n </div>\n\n {/* Category Tags Skeleton */}\n <div className=\"flex flex-wrap gap-2 w-full\">\n <div className=\"h-8 w-32 bg-ods-card rounded\"></div>\n <div className=\"h-8 w-28 bg-ods-card rounded\"></div>\n <div className=\"h-8 w-36 bg-ods-card rounded\"></div>\n </div>\n\n {/* Metadata Grid Skeleton */}\n <div className={`grid grid-cols-1 md:grid-cols-${metadataColumns} border border-ods-border rounded-md overflow-hidden w-full`}>\n {Array.from({ length: metadataColumns }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border-b md:border-b-0 md:border-r last:border-r-0 border-ods-border p-4\">\n <div className=\"h-6 w-24 bg-ods-border rounded mb-2\"></div>\n <div className=\"h-5 w-20 bg-ods-border rounded\"></div>\n </div>\n ))}\n </div>\n\n {/* Image Gallery Skeleton */}\n {showImageGallery && (\n <div className=\"flex gap-6 overflow-x-auto w-full\">\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} className=\"shrink-0 w-[240px] h-[200px] bg-ods-card rounded-md border border-ods-border\"></div>\n ))}\n </div>\n )}\n\n {/* Featured Image Skeleton (for case studies) */}\n {!showImageGallery && (\n <div className=\"aspect-[2560/1366] w-full bg-ods-card rounded-md\"></div>\n )}\n\n {/* Content Sections Skeleton */}\n {[1, 2, 3].map((section) => (\n <div key={section} className=\"space-y-6\">\n <div className=\"h-16 w-64 bg-ods-card rounded\"></div>\n <div className=\"space-y-3\">\n <div className=\"h-6 w-full bg-ods-card rounded\"></div>\n <div className=\"h-6 w-full bg-ods-card rounded\"></div>\n <div className=\"h-6 w-4/5 bg-ods-card rounded\"></div>\n </div>\n </div>\n ))}\n </div>\n </PageContainer>\n );\n}\n","\"use client\";\n\nimport { DetailPageSkeleton } from '../detail-page-skeleton';\n\nexport function ReleaseDetailSkeleton() {\n return <DetailPageSkeleton metadataColumns={4} showImageGallery={true} />;\n}\n","'use client';\n\n/**\n * RoadmapGrid — full-page roadmap surface.\n *\n * Renders a responsive 2-col grid of `<RoadmapCard>`s (lib's chat-entity\n * card, default density), threads voting state through `useRoadmapVoting`,\n * and follows up a successful vote with a single-task refresh fetch so\n * the displayed counts stay live.\n *\n * Endpoint configuration — `buildRefreshUrl`:\n * The single-task refresh hits a PATH-based endpoint\n * (`/api/roadmap/<taskId>` by default). A string-concat `refreshEndpoint`\n * would silently break embedders whose by-id route is shaped\n * differently (e.g. `/api/roadmap?id=…`), so this prop is a function\n * builder. The default matches the hub's pre-migration shape.\n *\n * Empty state — uses lib's `<EmptyState>` directly (identical API to\n * hub's, lives in `src/components/empty-state.tsx`).\n */\n\nimport { useState } from 'react';\nimport { RoadmapCard } from '../../chat/entity-cards/roadmap-card';\nimport { useRoadmapVoting, type UseRoadmapVotingOptions } from './use-roadmap-voting';\nimport { EmptyState } from '../../empty-state';\nimport type { RoadmapItem } from '../../chat/types/entities/roadmap-item';\n\nconst DEFAULT_BUILD_REFRESH_URL = (taskId: string) => `/api/roadmap/${taskId}`;\n\nexport interface RoadmapGridProps {\n items: RoadmapItem[];\n onItemUpdate?: (updatedItem: RoadmapItem) => void;\n /** Show the desktop left margin (~120px) that aligns the grid with\n * the page hero. Default `true`. Related-content rails pass `false`. */\n showLeftMargin?: boolean;\n /** URL builder for the per-task refresh call after a successful vote.\n * Function shape because the taskId sits in the URL path, not a\n * query param. Default `(t) => \\`/api/roadmap/${t}\\``. */\n buildRefreshUrl?: (taskId: string) => string;\n /** Voting hook options (vote endpoint + storage key) — see\n * `useRoadmapVoting`. */\n votingOptions?: UseRoadmapVotingOptions;\n}\n\nexport function RoadmapGrid({\n items,\n onItemUpdate,\n showLeftMargin = true,\n buildRefreshUrl = DEFAULT_BUILD_REFRESH_URL,\n votingOptions,\n}: RoadmapGridProps) {\n const { getVote, toggleVote } = useRoadmapVoting(votingOptions);\n const [votingTasks, setVotingTasks] = useState<Set<string>>(new Set());\n\n const handleVote = async (taskId: string, voteType: 'up' | 'down') => {\n // Prevent double-clicking\n if (votingTasks.has(taskId)) return;\n\n setVotingTasks(prev => new Set(prev).add(taskId));\n\n try {\n const result = await toggleVote(taskId, voteType);\n\n if (result.success) {\n // Refresh the specific task from server\n const response = await fetch(buildRefreshUrl(taskId));\n if (response.ok) {\n const data = await response.json();\n if (data.item && onItemUpdate) {\n onItemUpdate(data.item);\n }\n }\n }\n } finally {\n setVotingTasks(prev => {\n const next = new Set(prev);\n next.delete(taskId);\n return next;\n });\n }\n };\n\n if (items.length === 0) {\n return (\n <EmptyState\n type=\"generic\"\n title=\"No roadmap items\"\n description=\"Check back soon for upcoming features and improvements!\"\n />\n );\n }\n\n return (\n <div className={`grid grid-cols-1 md:grid-cols-2 gap-6 ${showLeftMargin ? 'md:ml-[120px]' : ''}`}>\n {items.map((item) => (\n <RoadmapCard\n key={item.id}\n item={item}\n userVote={getVote(item.id)}\n onVote={(voteType) => handleVote(item.id, voteType)}\n isVoting={votingTasks.has(item.id)}\n />\n ))}\n </div>\n );\n}\n","'use client';\n\n/**\n * useRoadmapVoting — localStorage-backed optimistic voting for roadmap cards.\n *\n * One vote per task per user (storage key scoped per `storageKey` option,\n * default `'roadmap_votes_v1'`). Toggling the same vote removes it;\n * switching directions sends a remove + add pair so the server's running\n * totals stay correct.\n *\n * Endpoint configuration — `voteApiEndpoint`:\n * The hook posts to ONE endpoint (default `/api/roadmap/vote`) for\n * BOTH the optimistic add AND the opposite-vote remove. Reverse-proxy\n * embedders override this with their proxied path; lib otherwise\n * matches the hub's pre-migration call shape.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\n\nexport type VoteType = 'up' | 'down' | null;\n\nexport interface VoteState {\n [taskId: string]: VoteType;\n}\n\nexport interface UseRoadmapVotingOptions {\n /** Vote endpoint URL. Default `/api/roadmap/vote`. */\n voteApiEndpoint?: string;\n /** localStorage key. Default `'roadmap_votes_v1'`. Embedders mounting\n * multiple roadmap surfaces in the same origin can scope per-surface\n * (e.g. `'roadmap_votes_v1_main'` vs `'roadmap_votes_v1_admin'`) so\n * votes don't cross-contaminate. */\n storageKey?: string;\n}\n\nconst DEFAULT_VOTE_ENDPOINT = '/api/roadmap/vote';\nconst DEFAULT_STORAGE_KEY = 'roadmap_votes_v1';\n\nexport function useRoadmapVoting(options: UseRoadmapVotingOptions = {}) {\n const voteApiEndpoint = options.voteApiEndpoint ?? DEFAULT_VOTE_ENDPOINT;\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;\n\n const [votes, setVotes] = useState<VoteState>({});\n const [isLoading, setIsLoading] = useState(true);\n\n // Load votes from localStorage. Runs on mount AND whenever `storageKey`\n // changes — when the key changes mid-lifecycle (e.g. an embedder\n // remounts with a new namespace), we MUST reset state first so the\n // save-effect below doesn't write the old key's data into the new\n // key. We also re-enter the loading phase so the load completes\n // before any save runs.\n useEffect(() => {\n setIsLoading(true);\n setVotes({});\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n setVotes(JSON.parse(stored));\n }\n } catch (error) {\n console.error('[Voting] Error loading votes from localStorage:', error);\n } finally {\n setIsLoading(false);\n }\n }, [storageKey]);\n\n // Save votes to localStorage whenever they change\n useEffect(() => {\n if (!isLoading) {\n try {\n localStorage.setItem(storageKey, JSON.stringify(votes));\n } catch (error) {\n console.error('[Voting] Error saving votes to localStorage:', error);\n }\n }\n }, [votes, isLoading, storageKey]);\n\n const getVote = useCallback(\n (taskId: string): VoteType => {\n return votes[taskId] || null;\n },\n [votes]\n );\n\n const toggleVote = useCallback(\n async (\n taskId: string,\n voteType: 'up' | 'down'\n ): Promise<{ success: boolean; newVote: VoteType; action: 'add' | 'remove' }> => {\n const currentVote = votes[taskId];\n\n let newVote: VoteType = null;\n let action: 'add' | 'remove' = 'add';\n\n if (currentVote === voteType) {\n // User clicked same vote - remove it\n newVote = null;\n action = 'remove';\n } else {\n // User clicked different vote - set it. If they had an opposite\n // vote, remove that first so the server totals stay consistent.\n if (currentVote) {\n await fetch(voteApiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n taskId,\n voteType: currentVote,\n action: 'remove',\n }),\n }).catch(err => console.error('[Voting] Error removing opposite vote:', err));\n }\n\n newVote = voteType;\n action = 'add';\n }\n\n // Optimistic update\n setVotes(prev => ({\n ...prev,\n [taskId]: newVote,\n }));\n\n try {\n const response = await fetch(voteApiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ taskId, voteType, action }),\n });\n\n if (!response.ok) {\n throw new Error('Vote API request failed');\n }\n\n return { success: true, newVote, action };\n } catch (error) {\n console.error('[Voting] API error:', error);\n\n // Revert optimistic update on error\n setVotes(prev => ({\n ...prev,\n [taskId]: currentVote,\n }));\n\n return { success: false, newVote: currentVote, action };\n }\n },\n [votes, voteApiEndpoint]\n );\n\n const clearVotes = useCallback(() => {\n setVotes({});\n localStorage.removeItem(storageKey);\n }, [storageKey]);\n\n return {\n votes,\n isLoading,\n getVote,\n toggleVote,\n clearVotes,\n };\n}\n","/**\n * RoadmapGridSkeleton — loading state for the `/roadmap` grid view.\n *\n * Pure JSX (no hooks, no events) — `'use client'` not strictly required\n * here; tsup's client-entry banner injects it automatically when this\n * file is bundled into the client output. We match the playbook's\n * skeleton-file convention (no directive when no hooks).\n *\n * NOTE: lib's `chat/entity-cards/roadmap-card.tsx` also exports a\n * `RoadmapCardSkeleton` — that one is the COMPACT 56px chat-card\n * variant. This file's internal card-skeleton (340px grid card)\n * intentionally stays file-internal to avoid the naming collision;\n * only `RoadmapGridSkeleton` is exported.\n */\n\nfunction RoadmapCardSkeleton() {\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-[6px] p-[24px] flex flex-col gap-[16px] min-h-[340px] relative\">\n {/* Status Badge Skeleton - Top Right */}\n <div className=\"absolute top-[24px] right-[24px]\">\n <div className=\"h-[20px] w-[80px] bg-ods-border rounded animate-pulse\"></div>\n </div>\n\n {/* Icon and title skeleton */}\n <div className=\"flex items-center gap-[16px] pr-[120px]\">\n <div className=\"w-[80px] h-[80px] bg-ods-border rounded-lg flex-shrink-0 animate-pulse\"></div>\n <div className=\"flex-1 min-w-0 flex flex-col gap-1\">\n <div className=\"min-h-[48px] flex items-center\">\n <div className=\"h-[24px] w-full bg-ods-border rounded animate-pulse\"></div>\n </div>\n <div className=\"min-h-[20px] flex items-center\">\n <div className=\"h-[14px] w-1/2 bg-ods-border rounded animate-pulse\"></div>\n </div>\n </div>\n </div>\n\n {/* Description skeleton - exactly 3 lines */}\n <div className=\"min-h-[72px] flex items-center\">\n <div className=\"w-full space-y-2\">\n <div className=\"h-[24px] bg-ods-border rounded animate-pulse\"></div>\n <div className=\"h-[24px] bg-ods-border rounded animate-pulse\"></div>\n <div className=\"h-[24px] w-4/5 bg-ods-border rounded animate-pulse\"></div>\n </div>\n </div>\n\n <div className=\"flex-1\"></div>\n\n {/* Bottom skeleton */}\n <div className=\"flex items-center justify-between\">\n <div className=\"h-[48px] w-[120px] bg-ods-border rounded animate-pulse\"></div>\n <div className=\"h-[32px] w-[100px] bg-ods-border rounded animate-pulse\"></div>\n </div>\n </div>\n );\n}\n\nexport interface RoadmapGridSkeletonProps {\n /** Number of skeleton cards to show. Default 4. */\n count?: number;\n /** Show the desktop left margin (~120px) that aligns the grid with\n * the page hero's title block. Default `true`. Related-content rails\n * inside narrower surfaces (e.g. the release detail page) pass `false`. */\n showLeftMargin?: boolean;\n}\n\nexport function RoadmapGridSkeleton({ count = 4, showLeftMargin = true }: RoadmapGridSkeletonProps) {\n return (\n <div className={`grid grid-cols-1 md:grid-cols-2 gap-6 ${showLeftMargin ? 'md:ml-[120px]' : ''}`}>\n {Array.from({ length: count }).map((_, i) => (\n <RoadmapCardSkeleton key={i} />\n ))}\n </div>\n );\n}\n","'use client';\n\n/**\n * DeliveryLists — the delivery section body (two tables: recently\n * completed + active). Reads `search` and `task_type` URL params\n * written by the shared `<DevSectionView>` chrome and refetches on\n * change.\n *\n * Endpoint configuration:\n * - `completedApiEndpoint` / `inProgressApiEndpoint` are the two\n * per-bucket GET endpoints. Defaults match the hub's pre-migration\n * routes (`/api/delivery/completed`, `/api/delivery/in-progress`).\n *\n * Coupling constraint — `searchParamKey` / `taskTypeParamKey`:\n * These props serve TWO purposes:\n * 1. URL READS — keys this component reads via `useSearchParams()`.\n * MUST match the consuming chrome's `section.search.paramKey` /\n * `section.filter.paramKey` (the chrome WRITES the URL params).\n * 2. API WRITES — keys this component sends as query params on the\n * outbound fetch to `{completedApiEndpoint,inProgressApiEndpoint}`.\n * The hub API contract uses `'search'` / `'task_type'`; embedders\n * reverse-proxying those routes must preserve the same names OR\n * rewrite the inbound query string on the proxy side.\n *\n * Defaults align with `OPENFRAME_DEV_SECTIONS.delivery.{search.paramKey,filter.paramKey}`\n * AND the hub API contract, so the OpenFrame zero-config case \"just\n * works\". Custom chrome overriding the param keys must override BOTH\n * ends consistently AND ensure the backend reads the same names.\n */\n\nimport { useEffect, useState } from 'react';\nimport { useSearchParams, useRouter, usePathname } from '../../../embed-shims';\nimport type { DeliveryResponse } from '../../../types/delivery';\nimport { DeliveryTable } from './delivery-table';\nimport { EmptyState } from '../../empty-state';\nimport { LoadError } from '../../ui/error-state';\n\nconst DEFAULT_COMPLETED_ENDPOINT = '/api/delivery/completed';\nconst DEFAULT_IN_PROGRESS_ENDPOINT = '/api/delivery/in-progress';\nconst DEFAULT_SEARCH_PARAM_KEY = 'search';\nconst DEFAULT_TASK_TYPE_PARAM_KEY = 'task_type';\n\nexport interface DeliveryListsProps {\n /** GET endpoint for the \"Recently Completed\" bucket. Default\n * `/api/delivery/completed`. */\n completedApiEndpoint?: string;\n /** GET endpoint for the \"Active Tasks\" bucket. Default\n * `/api/delivery/in-progress`. */\n inProgressApiEndpoint?: string;\n /** URL param key for the search input. MUST match the consuming\n * chrome's `section.search.paramKey`. Default `'search'`. */\n searchParamKey?: string;\n /** URL param key for the task-type filter. MUST match the consuming\n * chrome's `section.filter.paramKey`. Default `'task_type'`. */\n taskTypeParamKey?: string;\n}\n\nexport function DeliveryLists({\n completedApiEndpoint = DEFAULT_COMPLETED_ENDPOINT,\n inProgressApiEndpoint = DEFAULT_IN_PROGRESS_ENDPOINT,\n searchParamKey = DEFAULT_SEARCH_PARAM_KEY,\n taskTypeParamKey = DEFAULT_TASK_TYPE_PARAM_KEY,\n}: DeliveryListsProps = {}) {\n const searchParams = useSearchParams();\n const router = useRouter();\n const pathname = usePathname();\n\n const [data, setData] = useState<DeliveryResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Get filter state from URL\n const searchQuery = searchParams.get(searchParamKey) || '';\n const taskTypeFilter = searchParams.get(taskTypeParamKey) || 'all';\n\n useEffect(() => {\n async function fetchDeliveryData() {\n try {\n setIsLoading(true);\n setError(null);\n\n // Build query parameters for filtering. The outbound key names\n // mirror the inbound URL-param keys — see \"Coupling constraint\"\n // in the file docblock for why.\n const params = new URLSearchParams();\n if (searchQuery) {\n params.set(searchParamKey, searchQuery);\n }\n if (taskTypeFilter && taskTypeFilter !== 'all') {\n params.set(taskTypeParamKey, taskTypeFilter);\n }\n const queryString = params.toString();\n const queryParam = queryString ? `?${queryString}` : '';\n\n // Fetch completed and in-progress tasks separately with filters\n const [completedResponse, inProgressResponse] = await Promise.all([\n fetch(`${completedApiEndpoint}${queryParam}`),\n fetch(`${inProgressApiEndpoint}${queryParam}`),\n ]);\n\n if (!completedResponse.ok || !inProgressResponse.ok) {\n throw new Error('Failed to fetch delivery items');\n }\n\n const [completedResult, inProgressResult] = await Promise.all([\n completedResponse.json(),\n inProgressResponse.json(),\n ]);\n\n setData({\n completed: completedResult.items || [],\n inProgress: inProgressResult.items || [],\n });\n } catch (err) {\n console.error('Error fetching delivery items:', err);\n setError('Failed to load delivery items. Please try again later.');\n } finally {\n setIsLoading(false);\n }\n }\n\n fetchDeliveryData();\n }, [searchQuery, taskTypeFilter, completedApiEndpoint, inProgressApiEndpoint, searchParamKey, taskTypeParamKey]);\n\n const filteredCompleted = data?.completed || [];\n const filteredInProgress = data?.inProgress || [];\n\n const showCompleted = true;\n const showInProgress = true;\n\n const hasActiveFilters = searchQuery !== '' || taskTypeFilter !== 'all';\n const hasResults = (showCompleted && filteredCompleted.length > 0) || (showInProgress && filteredInProgress.length > 0);\n\n // Error state — consume lib's canonical LoadError so ODS tokens +\n // retry affordance stay in lockstep with every other surface.\n if (error) {\n return (\n <div className=\"w-full\">\n <LoadError message={error} onRetry={() => window.location.reload()} />\n </div>\n );\n }\n\n return (\n <div className=\"w-full flex flex-col gap-[40px]\">\n {/* Empty state if no results after filtering */}\n {!isLoading && !hasResults && (\n hasActiveFilters ? (\n <EmptyState\n type=\"search\"\n title=\"No tasks found\"\n description=\"No tasks match your current filters. Try adjusting your search or status filter.\"\n showCTA={true}\n ctaText=\"Reset Filters\"\n onCtaClick={() => {\n const params = new URLSearchParams(searchParams.toString());\n params.delete(searchParamKey);\n params.delete(taskTypeParamKey);\n router.replace(`${pathname}?${params.toString()}`, { scroll: false });\n }}\n />\n ) : (\n <EmptyState\n type=\"generic\"\n title=\"No tasks available\"\n description=\"Check back soon for upcoming tasks!\"\n showCTA={false}\n />\n )\n )}\n\n {/* Completed Tasks Table */}\n {showCompleted && (hasResults || isLoading) && (\n <div className=\"w-full\">\n <h3 className=\"text-h2 text-ods-text-primary tracking-[-0.48px] md:tracking-[-0.56px] lg:tracking-[-0.64px] mb-4\">\n Recently Completed<span className=\"text-ods-accent\">:</span>\n </h3>\n <DeliveryTable\n items={filteredCompleted}\n isLoading={isLoading}\n />\n </div>\n )}\n\n {/* In Progress Tasks Table */}\n {showInProgress && (hasResults || isLoading) && (\n <div className=\"w-full\">\n <h3 className=\"text-h2 text-ods-text-primary tracking-[-0.48px] md:tracking-[-0.56px] lg:tracking-[-0.64px] mb-4\">\n Active Tasks<span className=\"text-ods-accent\">:</span>\n </h3>\n <DeliveryTable\n items={filteredInProgress}\n isLoading={isLoading}\n />\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\n/**\n * DeliveryTable — bordered card containing one `<DeliveryRow />` per\n * item. Visual rendering of each row lives in `delivery-row.tsx` so the\n * exact same primitive can be composed elsewhere (notably the linked-\n * delivery surface inside `<TicketDetailDrawer>`).\n *\n * Props:\n * - `items` — flat list of `DeliveryItem`. Two buckets (completed +\n * in-progress) are rendered as two separate `DeliveryTable`s by\n * the parent `DeliveryLists`.\n * - `isLoading` — skeleton rows.\n * - `focusId` — `?focus=<id>` URL param. Marks the matching row\n * `id=\"delivery-<id>\"` and applies the highlight ring so the\n * deep-link from a ticket's linked-card scrolls + flashes the\n * right row.\n */\n\nimport { DeliveryRow } from './delivery-row';\nimport type { DeliveryItem } from '../../../types/delivery';\n\ninterface DeliveryTableProps {\n items: DeliveryItem[];\n isLoading?: boolean;\n}\n\n/**\n * Skeleton loader for rows - matching responsive structure\n */\nfunction SkeletonRow() {\n return (\n <div className=\"border-b border-ods-border last:border-b-0 p-[12px] md:p-[16px]\">\n <div className=\"flex flex-col md:flex-row items-start justify-between gap-[12px] md:gap-[16px] w-full\">\n {/* Left: Title, subtitle, and description skeleton */}\n <div className=\"flex-1 min-w-0 w-full md:w-auto flex flex-col gap-[12px] md:gap-[16px]\">\n {/* Title skeleton - responsive */}\n <div className=\"min-h-[24px] flex items-center\">\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-full\"></div>\n </div>\n {/* Subtitle skeleton - 1 line */}\n <div className=\"min-h-[20px] flex items-center\">\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-1/2\"></div>\n </div>\n {/* Description skeleton - 3 lines */}\n <div className=\"min-h-[72px] flex items-center\">\n <div className=\"flex-1 space-y-1\">\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-full\"></div>\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-full\"></div>\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-2/3\"></div>\n </div>\n </div>\n </div>\n\n {/* Right: Badge skeleton - two stacked badges */}\n <div className=\"flex-shrink-0 self-start flex flex-col gap-2\">\n <div className=\"h-[32px] w-[100px] bg-ods-border rounded animate-pulse\"></div>\n <div className=\"h-[32px] w-[120px] bg-ods-border rounded animate-pulse\"></div>\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * DeliveryTable Component\n * Displays bug fixes and enhancements with fixed-height rows\n */\nexport function DeliveryTable({ items, isLoading = false }: DeliveryTableProps) {\n // Show skeletons while loading\n if (isLoading) {\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full\">\n <div className=\"w-full\">\n {[1, 2, 3, 4, 5].map((i) => (\n <SkeletonRow key={i} />\n ))}\n </div>\n </div>\n );\n }\n\n // Empty state\n if (items.length === 0) {\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-[6px] p-[40px] text-center w-full\">\n <p className=\"text-ods-text-secondary text-[14px] font-['DM_Sans'] font-medium\">\n No tasks available\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full\">\n <div className=\"w-full\">\n {items.map((item) => (\n <div\n key={item.id}\n className=\"border-b border-ods-border last:border-b-0\"\n >\n <DeliveryRow item={item} />\n </div>\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\n/**\n * LegalDocumentPage — unified UI for privacy-policy, terms-of-service,\n * and any other markdown-backed legal document.\n *\n * Replaces two near-identical hub components (`PrivacyPolicyPage` +\n * `TermsOfServicePage`) that differed only in title, contact email,\n * and copy strings. Caller passes those as props.\n *\n * Markdown rendering: defaults to lib's `SimpleMarkdownRenderer`\n * (sufficient for plain-markdown legal docs). Embedders that need\n * richer markdown (embeds, video, OG previews) pass their own via\n * the `MarkdownRenderer` prop — same injection pattern as\n * `ReleaseDetailPage`.\n *\n * Endpoint configuration: forwarded to `useLegalDocs(docType, { apiEndpoint })`.\n */\n\nimport type { ComponentType } from 'react';\nimport { PageShell, PageLayout } from '../../ui';\nimport { SimpleMarkdownRenderer } from '../../ui/simple-markdown-renderer';\nimport { useRouter } from '../../../embed-shims/next-navigation';\nimport { useLegalDocs, type LegalDocument } from './use-legal-docs';\nimport { formatLegalDate } from '../../../utils/format';\n\nexport interface LegalDocumentMarkdownRendererProps {\n content: string;\n sectionIds?: Array<{ id: string; title: string; level: number }>;\n demoteMarkdownH1ToH2?: boolean;\n}\n\nexport interface LegalDocumentPageProps {\n /** Document type identifier — drives the default API endpoint\n * `/api/legal/<docType>` AND the error-log prefix. Common values:\n * `'privacy'`, `'terms'`. Embedders may use any string. */\n docType: string;\n /** Heading text (e.g. \"Privacy Policy\", \"Terms of Service\"). */\n title: string;\n /** Fallback subtitle shown when no `lastUpdated` date is available\n * (e.g. \"Our privacy policy and data protection practices\"). */\n fallbackDescription: string;\n /** Email shown in the error + empty-state copy\n * (e.g. `'privacy@openframe.io'`, `'legal@openframe.io'`). */\n contactEmail: string;\n /** Prompt shown above the contact link in the error state\n * (e.g. \"For privacy-related questions, please contact:\"). */\n errorContactPrompt: string;\n /** Title for the error block (e.g. \"Unable to load privacy policy\"). */\n errorTitle: string;\n /** Sentence shown when the API returns no document\n * (e.g. \"Privacy policy content is not available at this time.\"). */\n emptyStateMessage: string;\n /** SSR-prepared document, if available. */\n initialData?: LegalDocument | null;\n /** SSR-prepared formatted \"Last Updated\" label. Stable across hydration. */\n initialLastUpdatedLabel?: string | null;\n /** Override the default `/api/legal/<docType>` endpoint\n * (reverse-proxy embedders, alternate API paths). */\n apiEndpoint?: string;\n /** Override the default markdown renderer. */\n MarkdownRenderer?: ComponentType<LegalDocumentMarkdownRendererProps>;\n /** Back-button config — same pattern as `DevSectionPage`. Pass `false`\n * to hide. Default `{ label: 'Back to home', href: '/' }`. */\n backButton?: { label?: string; href?: string } | false;\n}\n\nexport function LegalDocumentPage({\n docType,\n title,\n fallbackDescription,\n contactEmail,\n errorContactPrompt,\n errorTitle,\n emptyStateMessage,\n initialData = null,\n initialLastUpdatedLabel = null,\n apiEndpoint,\n MarkdownRenderer = SimpleMarkdownRenderer,\n backButton,\n}: LegalDocumentPageProps) {\n const router = useRouter();\n const { data, isLoading, error } = useLegalDocs(docType, { initialData, apiEndpoint });\n\n // Back-button config — mirrors DevSectionPage's `{ label: 'Back to home',\n // onClick: () => router.push('/') }`. Hide entirely when caller passes\n // `false` (e.g. embed-mode where the host owns navigation chrome).\n const backCfg =\n backButton === false\n ? undefined\n : {\n label: backButton?.label ?? 'Back to home',\n onClick: () => router.push(backButton?.href ?? '/'),\n };\n\n const fallbackLastUpdatedLabel =\n data?.lastSynced != null ? formatLegalDate(data.lastSynced) : null;\n const effectiveLastUpdatedLabel = initialLastUpdatedLabel ?? fallbackLastUpdatedLabel;\n\n // Title with accent-colon trailing dot — matches knowledge-hub typography\n const customTitle = (\n <div className=\"flex flex-col gap-4\">\n <h1 className=\"font-['Azeret_Mono'] text-[32px] md:text-[40px] lg:text-[48px] font-semibold leading-[1em] tracking-[-0.02em] text-ods-text-primary\">\n <span>{title}</span>\n <span className=\"text-ods-accent\">.</span>\n </h1>\n <p className=\"font-['DM_Sans'] text-base md:text-lg text-ods-text-secondary max-w-2xl\">\n {effectiveLastUpdatedLabel ? `Last Updated: ${effectiveLastUpdatedLabel}` : fallbackDescription}\n {data?.sourceFile && (\n <span className=\"block text-sm mt-1 opacity-75\">Source: {data.sourceFile}</span>\n )}\n </p>\n </div>\n );\n\n return (\n <PageShell>\n <PageLayout backButton={backCfg}>\n <div className=\"flex flex-col gap-4\">{customTitle}</div>\n\n <div className=\"flex flex-col lg:flex-row gap-6 lg:gap-10 items-start flex-1\">\n <div className=\"flex-1\">\n <div className=\"w-full\">\n <article className=\"space-y-2\">\n {isLoading ? (\n // Loading skeleton matching Knowledge Hub pattern\n <div className=\"space-y-6\">\n <div className=\"h-10 bg-ods-skeleton rounded-lg w-3/4 animate-pulse\"></div>\n <div className=\"space-y-4\">\n <div className=\"h-4 bg-ods-skeleton rounded w-full animate-pulse\"></div>\n <div className=\"h-4 bg-ods-skeleton rounded w-full animate-pulse\"></div>\n <div className=\"h-4 bg-ods-skeleton rounded w-5/6 animate-pulse\"></div>\n </div>\n <div className=\"h-32 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"space-y-4\">\n <div className=\"h-4 bg-ods-skeleton rounded w-full animate-pulse\"></div>\n <div className=\"h-4 bg-ods-skeleton rounded w-4/5 animate-pulse\"></div>\n </div>\n </div>\n ) : error ? (\n <div className=\"text-center space-y-4\">\n <div className=\"bg-red-900/20 border border-red-700 rounded-lg p-6\">\n <p className=\"text-red-400 mb-2\">{errorTitle}</p>\n <p className=\"text-red-300 text-sm\">{error}</p>\n </div>\n <div className=\"text-ods-text-secondary\">\n <p>{errorContactPrompt}</p>\n <a href={`mailto:${contactEmail}`} className=\"text-ods-accent hover:underline\">\n {contactEmail}\n </a>\n </div>\n </div>\n ) : data ? (\n <MarkdownRenderer\n content={data.content}\n sectionIds={data.sections || []}\n demoteMarkdownH1ToH2\n />\n ) : (\n <div className=\"text-center text-ods-text-secondary py-16\">\n <p className=\"text-xl\">{emptyStateMessage}</p>\n <p className=\"mt-2\">\n Please contact{' '}\n <a href={`mailto:${contactEmail}`} className=\"text-ods-accent hover:underline\">\n {contactEmail}\n </a>{' '}\n for more information.\n </p>\n </div>\n )}\n </article>\n </div>\n </div>\n </div>\n </PageLayout>\n </PageShell>\n );\n}\n","'use client';\n\n/**\n * useLegalDocs — fetches a legal document (privacy policy, terms of\n * service, or any other markdown-backed legal page) from a hub API.\n *\n * Endpoint configuration — `apiEndpoint`:\n * Default `/api/legal/<docType>`. Reverse-proxy embedders override\n * with their proxied path (e.g. `/proxy/legal/privacy`).\n *\n * Data shape mirrors the hub's `lib/data/legal-utils.ts:LegalDocument`\n * server type. The hook intentionally re-declares the type here so\n * lib consumers don't need to import a server-side type.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\n\nexport interface LegalDocument {\n title: string;\n content: string;\n sourceFile: string;\n lastSynced: string | null;\n githubSha: string | null;\n sections: Array<{ id: string; title: string; level: number }>;\n docType: string;\n meta: {\n sectionsCount: number;\n contentLength: number;\n lastSyncedAgo: string;\n };\n}\n\nexport interface UseLegalDocsReturn {\n data: LegalDocument | null;\n isLoading: boolean;\n error: string | null;\n refetch: () => void;\n}\n\nexport interface UseLegalDocsOptions {\n /** Optional pre-fetched payload from server (SSR / RSC). When set,\n * the hook skips the initial client fetch. */\n initialData?: LegalDocument | null;\n /** Full GET endpoint URL. Default `/api/legal/<docType>`. */\n apiEndpoint?: string;\n}\n\n/**\n * Hook to fetch a legal document.\n * @param docType — short identifier for the document (drives the\n * default endpoint path AND the error-log prefix). Common values:\n * `'privacy'` (SECURITY.md), `'terms'` (LICENSE). Embedders may use\n * any string — the hook treats it as opaque.\n */\nexport function useLegalDocs(\n docType: string,\n options: UseLegalDocsOptions = {}\n): UseLegalDocsReturn {\n const { initialData = null, apiEndpoint } = options;\n const effectiveEndpoint = apiEndpoint ?? `/api/legal/${docType}`;\n\n const [data, setData] = useState<LegalDocument | null>(initialData ?? null);\n const [isLoading, setIsLoading] = useState(!initialData);\n const [error, setError] = useState<string | null>(null);\n\n const fetchDocument = useCallback(async () => {\n try {\n setIsLoading(true);\n setError(null);\n\n const response = await fetch(effectiveEndpoint);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch ${docType} document: ${response.status} ${response.statusText}`\n );\n }\n\n const result = await response.json();\n\n // Validate the response has required fields\n if (!result.content) {\n throw new Error(`${docType} document content is empty`);\n }\n\n setData(result);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error occurred';\n // `docType` is externally controlled (URL path segment in embedders), so it must NOT sit in\n // console.error's FIRST (format-string) argument — Node interprets %s/%j/%o there\n // (CodeQL js/tainted-format-string). Keep the format string constant; pass docType + err as\n // plain trailing args.\n console.error('Error fetching legal document:', docType, err);\n setError(errorMessage);\n } finally {\n setIsLoading(false);\n }\n }, [docType, effectiveEndpoint]);\n\n // Reset cached data when docType changes — otherwise an embedder using\n // the same hook instance for sequential docTypes (privacy → terms)\n // would briefly render the OLD doc's content while the new fetch is\n // in-flight. Not currently triggered by hub's per-route SSR (each\n // docType mounts in a fresh component), but enforces the contract.\n useEffect(() => {\n setData(initialData ?? null);\n setError(null);\n setIsLoading(!initialData);\n }, [docType, initialData]);\n\n // Fetch on mount (only if we don't already have server-provided initialData)\n useEffect(() => {\n if (initialData) return;\n fetchDocument();\n }, [fetchDocument, initialData]);\n\n const refetch = () => {\n fetchDocument();\n };\n\n return {\n data,\n isLoading,\n error,\n refetch,\n };\n}\n"],"mappings":"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","names":["OpenFrameLogo","jsx","renderSvgIcon","OpenFrameLogo","OpenmspLogo","FlamingoLogo","jsx","jsxs","renderSvgIcon","getProxiedImageUrl","jsx","getProxiedImageUrl","jsx","jsxs","jsx","jsxs","jsx","jsxs","getProxiedImageUrl","jsx","jsx","jsxs","getProxiedImageUrl","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","_","useState","useEffect","jsx","jsxs","useState","useEffect","X","jsx","jsxs","jsx","Fragment","jsx","jsxs","useCallback","jsx","useCallback","useRef","useState","ImageIcon","X","Fragment","jsx","jsxs","useRef","useState","X","ImageIcon","useState","useEffect","useRef","OpenSourceIcon","CoinsIcon","VendorDirectoryIcon","CommunityHubIcon","VendorsIcon","CommunityIcon","CompareIcon","jsx","jsxs","SunIcon","MoonIcon","CheckCircleIcon","GitHubIcon","PlusCircleIcon","OpenmspLogo","VendorDirectoryIcon","OpenSourceIcon","CommunityHubIcon","VendorsIcon","CommunityIcon","CompareIcon","useState","useRef","useEffect","useCallback","useState","jsx","jsxs","useState","useCallback","jsxs","jsx","useState","useRef","useEffect","useCallback","Fragment","jsx","jsxs","MediaCarousel","useState","useRef","useEffect","useCallback","jsx","jsxs","React","jsx","SquareAvatar","React","jsx","jsxs","SquareAvatar","DollarSign","Users","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","mainValue","secondaryInfo","Fragment","jsx","jsxs","jsx","jsxs","OpenSourceIcon","CoinsIcon","OpenFrameLogo","jsx","jsx","jsxs","SquareAvatar","jsx","sizeClasses","Fragment","jsx","jsxs","Fragment","jsx","jsxs","jsxs","jsx","Fragment","jsx","jsxs","_","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","sizeClasses","backgroundClasses","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","CheckCircleIcon","useState","useEffect","jsx","jsxs","useState","useEffect","FlamingoLogo","DatePicker","jsx","jsxs","useState","useEffect","Sparkles","jsx","jsxs","Fragment","jsx","jsxs","useState","useEffect","Sparkles","jsx","useState","useState","useEffect","useCallback","jsx","useState","jsx","jsxs","RoadmapCardSkeleton","useEffect","useState","jsx","jsxs","jsx","jsxs","useState","useEffect","useState","useEffect","useCallback","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/announcement-bar.tsx","../../src/components/icon-utils.tsx","../../src/components/openframe-logo.tsx","../../src/utils/announcement-storage.ts","../../src/components/categories-cart.tsx","../../src/components/vendor-icon.tsx","../../src/utils/url-fix.ts","../../src/utils/vendor-media-stub.ts","../../src/utils/image-proxy-stub.ts","../../src/components/category-card.tsx","../../src/components/comment-card.tsx","../../src/components/vendor-display-button.tsx","../../src/components/auth-stub.tsx","../../src/components/user-summary-stub.tsx","../../src/components/content-loading-container.tsx","../../src/components/dynamic-skeleton.tsx","../../src/hooks/use-theme-aware.ts","../../src/components/faq-accordion.tsx","../../src/components/filter-chip.tsx","../../src/components/footer.tsx","../../src/components/social-icon-row.tsx","../../src/components/unified-filter-logic.tsx","../../src/utils/format-text-stub.ts","../../src/components/index.ts","../../src/components/footer-waitlist-button.tsx","../../src/components/hero-image-uploader.tsx","../../src/components/icons-block.tsx","../../src/components/icons-stub.tsx","../../src/components/image-cropper.tsx","../../src/components/media-carousel.tsx","../../src/components/metric-value.tsx","../../src/components/msp-display.tsx","../../src/components/square-avatar.tsx","../../src/components/open-source-features.tsx","../../src/components/persistent-filter-controls.tsx","../../src/components/persistent-pagination.tsx","../../src/components/pricing-display.tsx","../../src/components/results-count.tsx","../../src/components/vendor-tag.tsx","../../src/components/selection-source-badge.tsx","../../src/components/user-display.tsx","../../src/components/loading/page-layout-skeleton.tsx","../../src/components/loading/unified-skeleton.tsx","../../src/components/loading/card-skeleton.tsx","../../src/components/loading/content-skeleton.tsx","../../src/components/profile/ProfileLoadingSkeleton.tsx","../../src/components/loading/msp-profile-form-skeleton.tsx","../../src/components/loading/category-card-skeleton.tsx","../../src/components/loading/category-vendor-selector-skeleton.tsx","../../src/components/loading/wizard-layout-skeleton.tsx","../../src/components/loading/margin-report-skeleton.tsx","../../src/components/loading/users-grid-skeleton.tsx","../../src/components/loading/organization-icon-skeleton.tsx","../../src/components/loading/organization-card-skeleton.tsx","../../src/components/loading/device-card-skeleton.tsx","../../src/components/vendor-page-skeleton.tsx","../../src/components/why-it-matters.tsx","../../src/components/yes-no-display.tsx","../../src/components/made-with-love.tsx","../../src/components/date-time-picker.tsx","../../src/components/shared/product-release/product-releases-view.tsx","../../src/components/shared/product-release/release-detail-page.tsx","../../src/components/shared/product-release/release-detail-skeleton.tsx","../../src/components/shared/roadmap/roadmap-grid.tsx","../../src/components/shared/roadmap/use-roadmap-voting.ts","../../src/components/shared/roadmap/roadmap-grid-skeleton.tsx","../../src/components/shared/roadmap/roadmap-view.tsx","../../src/components/shared/delivery/delivery-lists.tsx","../../src/components/shared/delivery/delivery-table.tsx","../../src/components/shared/legal-document/legal-document-page.tsx","../../src/components/shared/legal-document/use-legal-docs.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect } from 'react';\nimport Image from '../embed-shims/next-image';\nimport { X } from 'lucide-react';\nimport { Button } from './ui/button';\nimport { renderSvgIcon } from './icon-utils';\nimport {\n setStoredAnnouncement,\n getStoredAnnouncement,\n clearStoredAnnouncement,\n} from '../utils/announcement-storage';\nimport { Announcement } from '../types/announcement';\nimport { getAppType } from '../utils/app-config';\nimport { useEndpointsRuntime } from '../contexts/endpoints-runtime-context';\n\n// Helper that defers to renderSvgIcon so we don't need local icon imports\nconst getSvgIcon = (\n name: string,\n size: 'main' | 'cta' = 'main',\n extra: Record<string, any> = {}\n) => {\n const cls =\n size === 'cta'\n ? 'relative shrink-0 w-3 h-3 md:w-4 md:h-4'\n : 'relative shrink-0 w-6 h-6 md:w-8 md:h-8';\n return renderSvgIcon(name, { className: cls, ...extra });\n};\n\nexport function AnnouncementBar() {\n const [announcement, setAnnouncement] = useState<Announcement | null>(null);\n const [isVisible, setIsVisible] = useState<boolean>(false);\n\n // Get the platform type for platform-specific localStorage keys\n const platform = getAppType();\n\n // Optional endpoint runtime: when no provider is mounted (e.g. on a\n // bare React-tree page that doesn't wrap with HubRuntimeProvider),\n // the bar silently skips its fetch instead of throwing. Apps that DO\n // mount the provider get the configured URL — typically\n // '/api/announcements/active' in the hub, or a proxied path in an\n // embedded host.\n const endpoints = useEndpointsRuntime();\n const announcementsUrl = endpoints?.announcementsUrl;\n\n // Helper to determine dismissal key for localStorage\n const getDismissKey = (id: string) => `${platform}-announcement-${id}-dismissed`;\n \n // Helper to get platform-specific cache key\n const getCacheKey = () => `${platform}-announcement-cache`;\n\n // Fetch active announcement from API and update state + LS\n const fetchActiveAnnouncement = async () => {\n // No provider mounted → no URL configured → skip fetch silently.\n // Cached announcement from previous sessions still renders if present.\n if (!announcementsUrl) return;\n try {\n // Server-side platform injection - no URL parameter needed\n const response = await fetch(announcementsUrl);\n \n if (response.ok) {\n const data = await response.json();\n if (data.announcement) {\n setAnnouncement(data.announcement);\n\n // persist latest announcement for quick future loads with platform-specific key\n setStoredAnnouncement(getCacheKey(), data.announcement);\n\n // Check if this specific announcement was dismissed\n const isDismissed = localStorage.getItem(getDismissKey(data.announcement.id));\n setIsVisible(!isDismissed);\n } else {\n // No announcement available - clean up localStorage and hide bar\n setAnnouncement(null);\n setIsVisible(false);\n \n // Use utility function to properly clear platform-specific announcement data\n clearStoredAnnouncement(getCacheKey());\n }\n } else {\n // Network or other error - hide announcement and clean up\n console.error(`❌ [${platform.toUpperCase()}] Error fetching announcement: ${response.status}`);\n setAnnouncement(null);\n setIsVisible(false);\n \n // Clear stale data on network errors too\n clearStoredAnnouncement(getCacheKey());\n }\n } catch (error) {\n console.error('Error fetching active announcement:', error);\n setAnnouncement(null);\n setIsVisible(false);\n \n // Clear stale data on exceptions too\n clearStoredAnnouncement(getCacheKey());\n }\n };\n\n // Initial load: use cached announcement synchronously for instant paint\n useEffect(() => {\n const cached = getStoredAnnouncement(getCacheKey());\n if (cached) {\n const isDismissed = localStorage.getItem(getDismissKey(cached.id));\n setAnnouncement(cached);\n setIsVisible(!isDismissed);\n }\n\n // No provider mounted → no URL → no fetch / no polling. Cached\n // announcement still painted above. Skip scheduling the 5-min\n // interval entirely to avoid an idle timer + repeated short-circuit\n // calls.\n if (!announcementsUrl) return;\n\n // Always fetch latest on mount\n fetchActiveAnnouncement();\n\n // Schedule refresh every 5 minutes. When announcementsUrl flips\n // (e.g. provider value swap), the effect re-runs and restarts the\n // interval against the new URL — no stale captured fetch.\n const interval = setInterval(fetchActiveAnnouncement, 300_000);\n return () => clearInterval(interval);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [announcementsUrl]);\n\n // helpers\n const handleDismiss = () => {\n if (!announcement) return;\n localStorage.setItem(getDismissKey(announcement.id), 'true');\n setIsVisible(false);\n };\n\n const handleCtaClick = () => {\n if (!announcement?.cta_url) return;\n announcement.cta_target === '_blank'\n ? window.open(announcement.cta_url, '_blank', 'noopener,noreferrer')\n : (window.location.href = announcement.cta_url);\n };\n\n const renderIcon = () => {\n if (!announcement) return null;\n\n if (announcement.icon_type === 'png' && announcement.icon_png_url) {\n return (\n <Image\n src={announcement.icon_png_url}\n alt=\"Announcement icon\"\n width={32}\n height={32}\n className=\"relative shrink-0\"\n aria-hidden\n />\n );\n }\n\n return getSvgIcon(\n announcement.icon_svg_name || 'openframe-logo',\n 'main',\n announcement.icon_svg_props ?? {}\n );\n };\n\n // If no announcement or dismissed => render nothing\n if (!announcement || !isVisible) return null;\n\n return (\n <div\n className=\"relative w-full z-50\"\n style={{ backgroundColor: announcement.background_color }}\n data-announcement-bar\n >\n <div className=\"flex items-center w-full max-w-full\">\n {/* Mobile: Clickable content area, Desktop: Regular content */}\n <div\n className={`flex flex-row gap-2 md:gap-4 items-center pl-4 md:pl-6 py-1.5 md:py-2 flex-1 min-w-0 ${\n announcement.cta_enabled && announcement.cta_url ? 'md:cursor-default cursor-pointer' : ''\n }`}\n onClick={(e) => {\n // Only handle click on mobile (< 768px) and if CTA is enabled\n if (window.innerWidth < 768 && announcement.cta_enabled && announcement.cta_url) {\n e.preventDefault();\n handleCtaClick();\n }\n }}\n >\n {renderIcon()}\n\n <div className=\"flex-1 min-w-0 max-w-full\">\n <p className=\"font-body font-bold text-[14px] md:text-[18px] leading-tight tracking-tight mb-0 text-[#1A1A1A] truncate\">\n {announcement.title}\n </p>\n <p className=\"font-body text-[12px] md:text-[18px] leading-tight hidden md:block text-[#1A1A1A] truncate\">\n {announcement.description}\n </p>\n </div>\n\n {/* CTA Button - Hidden on mobile, shown on desktop */}\n {announcement.cta_enabled && announcement.cta_text && announcement.cta_url && (\n <div className=\"hidden md:flex flex-shrink-0 ml-1 md:ml-2\">\n <Button\n onClick={handleCtaClick}\n variant=\"outline\"\n size=\"small-legacy\"\n leftIcon={\n announcement.cta_show_icon && announcement.cta_icon\n ? getSvgIcon(\n announcement.cta_icon,\n 'cta',\n announcement.cta_icon_props ?? {}\n )\n : undefined\n }\n className=\"transition-opacity hover:opacity-90 text-xs md:text-sm whitespace-nowrap\"\n style={{\n backgroundColor: announcement.cta_button_background_color || undefined,\n color: announcement.cta_button_text_color || undefined,\n borderColor: announcement.cta_button_background_color || undefined,\n }}\n >\n {announcement.cta_text}\n </Button>\n </div>\n )}\n </div>\n\n {/* Dismiss button - always visible */}\n <button\n onClick={(e) => {\n e.stopPropagation(); // Prevent triggering the mobile CTA click\n handleDismiss();\n }}\n className=\"flex-shrink-0 w-8 h-8 md:w-10 md:h-10 flex items-center justify-center hover:bg-[#1A1A1A]/10 focus:outline-none focus:ring-2 focus:ring-[#1A1A1A] mr-2 md:mr-4\"\n aria-label=\"Dismiss announcement\"\n type=\"button\"\n >\n <X className=\"w-4 h-4 text-[#1A1A1A]\" strokeWidth={2} />\n </button>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport {\n Megaphone,\n Bell,\n Info,\n Star,\n Rocket,\n Package,\n} from 'lucide-react';\nimport { OpenFrameLogo } from './openframe-logo';\nimport { OpenmspLogo } from './openmsp-logo';\nimport { FlamingoLogo } from './flamingo-logo';\n\n/**\n * Returns a JSX element for a known icon name, spreading any extra props.\n * Falls back to Megaphone if the name is not recognised.\n */\nexport function renderSvgIcon(\n name: string,\n props: React.SVGProps<SVGSVGElement | SVGElement> = {}\n): React.ReactElement {\n const map: Record<string, (p: any) => React.ReactElement> = {\n megaphone: (p) => <Megaphone {...p} />,\n bell: (p) => <Bell {...p} />,\n info: (p) => <Info {...p} />,\n star: (p) => <Star {...p} />,\n rocket: (p) => <Rocket {...p} />,\n package: (p) => <Package {...p} />,\n 'openframe-logo': (p) => <OpenFrameLogo {...p} />,\n 'openmsp-logo': (p) => <OpenmspLogo {...p} />,\n 'flamingo': (p)=> <FlamingoLogo {...p} />,\n };\n\n const renderer = map[name] || map['megaphone'];\n return renderer(props);\n} ","import React from 'react';\n\nexport const OpenFrameLogo = ({ className, lowerPathColor, upperPathColor, ...props }: { className?: string, lowerPathColor?: string, upperPathColor?: string } & React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n {...props}\n className={className}\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n '--fill-0': 'currentColor',\n ...props.style\n } as React.CSSProperties}\n >\n <g>\n <g>\n {/* White squares - top right, bottom left, bottom right, bottom center */}\n <path\n d=\"M21.3333 16.5333C21.3333 16.2388 21.5721 16 21.8667 16H26.1333C26.4279 16 26.6667 16.2388 26.6667 16.5333V20.8C26.6667 21.0946 26.4279 21.3333 26.1333 21.3333H21.8667C21.5721 21.3333 21.3333 21.0946 21.3333 20.8V16.5333Z\"\n fill={lowerPathColor ?? '#ffffff'}\n />\n <path\n d=\"M16 21.8667C16 21.5721 16.2388 21.3333 16.5333 21.3333H20.8C21.0946 21.3333 21.3333 21.5721 21.3333 21.8667V26.1333C21.3333 26.4279 21.0946 26.6667 20.8 26.6667H16.5333C16.2388 26.6667 16 26.4279 16 26.1333V21.8667Z\"\n fill={lowerPathColor ?? '#ffffff'}\n />\n <path\n d=\"M26.6667 21.8667C26.6667 21.5721 26.9054 21.3333 27.2 21.3333H31.4667C31.7612 21.3333 32 21.5721 32 21.8667V26.1333C32 26.4279 31.7612 26.6667 31.4667 26.6667H27.2C26.9054 26.6667 26.6667 26.4279 26.6667 26.1333V21.8667Z\"\n fill={lowerPathColor ?? '#ffffff'}\n />\n <path\n d=\"M21.3333 27.2C21.3333 26.9054 21.5721 26.6667 21.8667 26.6667H26.1333C26.4279 26.6667 26.6667 26.9054 26.6667 27.2V31.4667C26.6667 31.7612 26.4279 32 26.1333 32H21.8667C21.5721 32 21.3333 31.7612 21.3333 31.4667V27.2Z\"\n fill={lowerPathColor ?? '#ffffff'}\n />\n </g>\n {/* Black frame/border */}\n <path\n d=\"M30.9333 0H1.06667C0.477563 0 0 0.477564 0 1.06667V30.9333C0 31.5224 0.477563 32 1.06667 32H14.9333C15.5224 32 16 31.5224 16 30.9333V27.7333C16 27.1442 15.5224 26.6667 14.9333 26.6667H5.86667C5.57211 26.6667 5.33333 26.4279 5.33333 26.1333V5.86667C5.33333 5.57211 5.57211 5.33333 5.86667 5.33333H26.1333C26.4279 5.33333 26.6667 5.57212 26.6667 5.86667V14.9333C26.6667 15.5224 27.1442 16 27.7333 16H30.9333C31.5224 16 32 15.5224 32 14.9333V1.06667C32 0.477563 31.5224 0 30.9333 0Z\"\n fill={upperPathColor ?? '#1A1A1A'}\n />\n </g>\n </svg>\n );\n};","// Stub for announcement storage\nexport interface AnnouncementStorageOptions {\n key: string;\n defaultValue?: any;\n}\n\nexport function getStoredAnnouncement(key: string): any {\n if (typeof window !== 'undefined') {\n try {\n return JSON.parse(localStorage.getItem(key) || 'null');\n } catch {\n return null;\n }\n }\n return null;\n}\n\nexport function setStoredAnnouncement(key: string, value: any): void {\n if (typeof window !== 'undefined') {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // Ignore storage errors\n }\n }\n}\n\nexport function clearStoredAnnouncement(key: string = 'announcement'): void {\n if (typeof window !== 'undefined') {\n try {\n localStorage.removeItem(key);\n } catch {\n // Ignore storage errors\n }\n }\n}","\"use client\"\n\nimport React from 'react';\nimport Link from '../embed-shims/next-link';\nimport { ChevronRight } from 'lucide-react';\nimport { VendorIcon } from './vendor-icon';\nimport type { CategoryCardProps, RealCategoryCardProps } from '../types/category';\n\n\n// Component that receives vendor and subcategory data as props\nexport function CategoriesCart({ \n category, \n vendors = [], \n vendorCount = 0, \n subcategoryCount = 0, \n isLoading = false,\n className = '' \n}: RealCategoryCardProps) {\n return (\n <Link\n href={`/vendors?category=${category.slug}`}\n className={`block bg-ods-card border border-ods-border rounded-lg p-3 md:p-4 pb-4 md:pb-6 hover:border-[#FFC008] transition-colors group relative ${className}`}\n >\n <div className=\"flex flex-col gap-4 md:gap-6\">\n {/* Vendor Icons Grid */}\n <div className=\"relative w-full h-8 md:h-10 overflow-hidden\">\n <div className=\"flex gap-2 md:gap-3 w-full\">\n {isLoading ? (\n // Skeleton loading for vendor icons\n Array.from({ length: 20 }).map((_, index) => (\n <div\n key={index}\n className=\"w-8 h-8 md:w-10 md:h-10 bg-ods-border rounded animate-pulse flex-shrink-0\"\n />\n ))\n ) : vendors && vendors.length > 0 ? (\n vendors.map((vendor: any) => (\n <VendorIcon\n key={vendor.id}\n vendor={vendor}\n size=\"md\"\n className=\"rounded overflow-hidden filter grayscale opacity-60\"\n />\n ))\n ) : (\n // No vendors found - show placeholder icons\n Array.from({ length: 6 }).map((_, index) => (\n <div\n key={index}\n className=\"w-8 h-8 md:w-10 md:h-10 bg-ods-border rounded flex items-center justify-center opacity-30 flex-shrink-0\"\n >\n <div className=\"w-4 h-4 md:w-6 md:h-6 bg-[#888888] rounded-sm\" />\n </div>\n ))\n )}\n </div>\n\n {/* Gradient overlays for fade effect */}\n <div className=\"absolute inset-y-0 left-0 w-4 md:w-6 bg-gradient-to-r from-[#212121] to-transparent pointer-events-none\" />\n <div className=\"absolute inset-y-0 right-0 w-4 md:w-6 bg-gradient-to-l from-[#212121] to-transparent pointer-events-none\" />\n </div>\n\n {/* Category Information - Updated to use real data */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-col gap-1\">\n <h3 className=\"text-xl md:text-2xl font-bold text-ods-text-primary group-hover:text-ods-accent transition-colors leading-[1.33] font-body\">\n {category.name}\n </h3>\n <p className=\"text-sm md:text-base font-medium text-ods-text-secondary leading-[1.43] font-body\">\n {subcategoryCount || 0} Subcategories • {vendorCount || 0} Products\n </p>\n </div>\n\n <div className=\"flex items-start md:items-end justify-between gap-4 md:gap-6\">\n <p className=\"font-['DM_Sans'] font-medium text-lg leading-[1.33] text-ods-text-primary flex-1\">\n {category.description}\n </p>\n\n {/* Arrow Button */}\n <div\n className=\"flex items-center justify-center w-10 h-10 md:w-12 md:h-12 bg-transparent border border-ods-border rounded-md group-hover:bg-[#FFC008] transition-colors flex-shrink-0\"\n aria-label={`View ${category.name} category`}\n > \n <ChevronRight className=\"w-5 h-5 md:w-6 md:h-6 text-ods-text-primary group-hover:text-black transition-colors\" />\n </div>\n </div>\n </div>\n </div>\n </Link>\n );\n}\n\n","\"use client\"\n\nimport React from 'react'\nimport Image from '../embed-shims/next-image'\nimport { cn } from \"../utils/cn\"\nimport { getVendorLogo, VendorWithMedia } from '../utils/vendor-media-stub'\nimport { getProxiedImageUrl } from '../utils/image-proxy-stub'\n\ninterface VendorIconProps {\n vendor: VendorWithMedia & {\n id?: number\n title: string\n slug?: string\n logo?: string | null\n }\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'l' | 'xl'\n className?: string\n showBackground?: boolean\n backgroundStyle?: 'dark' | 'light' | 'white'\n}\n\nconst sizeClasses = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8', \n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n l: 'w-14 h-14',\n xl: 'w-16 h-16'\n}\n\nconst imageSizeMap = {\n xs: { width: 16, height: 16 },\n sm: { width: 20, height: 20 },\n md: { width: 32, height: 32 },\n lg: { width: 40, height: 40 },\n l: { width: 38, height: 38 },\n xl: { width: 40, height: 40 }\n}\n\nconst backgroundClasses = {\n dark: 'bg-[#161616] border border-ods-border',\n light: 'bg-ods-card border border-ods-border',\n white: 'bg-white border border-[#E5E5E5]'\n}\n\n/**\n * Common VendorIcon component for displaying vendor logos consistently across the platform\n * Extracted from vendor-card.tsx for reuse in comparison tables, dropdowns, etc.\n */\nexport function VendorIcon({ \n vendor, \n size = 'md', \n className = '',\n showBackground = true,\n backgroundStyle = 'dark'\n}: VendorIconProps) {\n const logoUrl = getVendorLogo(vendor)\n const { width, height } = imageSizeMap[size]\n \n const containerClasses = cn(\n sizeClasses[size],\n 'rounded-lg flex items-center justify-center flex-shrink-0',\n showBackground && backgroundClasses[backgroundStyle],\n !showBackground && 'overflow-hidden',\n className\n )\n\n return (\n <div className={containerClasses}>\n {logoUrl ? (\n <Image\n src={getProxiedImageUrl(logoUrl) || logoUrl}\n alt={`${vendor.title} logo`}\n width={width}\n height={height}\n className={cn(\n 'object-contain',\n showBackground ? 'p-1' : 'w-full h-full'\n )}\n />\n ) : (\n <div className={cn(\n 'flex items-center justify-center text-xs font-medium uppercase',\n backgroundStyle === 'white' ? 'text-[#333333]' : 'text-ods-text-secondary'\n )}>\n {vendor.title?.substring(0, 2) || '??'}\n </div>\n )}\n </div>\n )\n} ","/**\n * Utility functions for fixing URL construction issues\n */\n\n/**\n * Fix double slashes in URLs while preserving protocol slashes\n * @param url The URL to fix\n * @returns Fixed URL with single slashes in path\n */\nexport function fixUrlDoubleSlashes(url: string): string {\n if (!url) return url;\n \n // Split on protocol to preserve it\n const protocolMatch = url.match(/^(https?:\\/\\/)/);\n if (protocolMatch) {\n const protocol = protocolMatch[1];\n const rest = url.substring(protocol.length);\n // Replace multiple consecutive slashes with single slash in the path part\n const fixedRest = rest.replace(/\\/+/g, '/');\n return protocol + fixedRest;\n }\n \n // For relative URLs, just fix multiple slashes\n return url.replace(/\\/+/g, '/');\n}\n\n/**\n * Properly join URL path segments without creating double slashes\n * @param segments Path segments to join\n * @returns Properly joined path\n */\nexport function joinUrlPath(...segments: string[]): string {\n return segments\n .map((segment, index) => {\n // Remove leading slash from all but first segment\n if (index > 0 && segment.startsWith('/')) {\n segment = segment.substring(1);\n }\n // Remove trailing slash from all but last segment\n if (index < segments.length - 1 && segment.endsWith('/')) {\n segment = segment.substring(0, segment.length - 1);\n }\n return segment;\n })\n .filter(segment => segment.length > 0)\n .join('/');\n}\n\n/**\n * Fix Supabase storage URLs specifically\n * @param url Supabase storage URL\n * @returns Fixed URL\n */\nexport function fixSupabaseStorageUrl(url: string): string {\n // Early return if nothing to process\n if (!url) return url;\n\n /**\n * We previously restricted the fix to URLs that contained a specific Supabase\n * domain (\"supabase.co\"). However, we now serve assets from a custom domain\n * (e.g. app.openmsp.ai) that still uses the same `/storage/v1/object/public/`\n * path structure. The old guard clause prevented those URLs from being\n * cleaned which resulted in paths like:\n * https://app.openmsp.ai/storage/v1/object/public/logos///Ansible.png\n * Googlebot treats the triple-slash as a distinct resource and reports 404\n * errors which in turn causes the \"URL will be indexed only if certain\n * conditions are met\" warning in Search Console.\n *\n * Solution: detect the canonical Supabase storage path segment instead of\n * the host name. Whenever we see that path we safely collapse multiple\n * consecutive slashes to a single slash while preserving the protocol\n * (`https://`).\n */\n\n const SUPABASE_STORAGE_SEGMENT = '/storage/v1/object/public/';\n\n if (url.includes(SUPABASE_STORAGE_SEGMENT)) {\n return fixUrlDoubleSlashes(url);\n }\n\n // No known storage segment – return the original URL untouched\n return url;\n}","// Vendor media utilities for UI kit\n// Real implementation copied from main project\n\nimport { fixSupabaseStorageUrl } from './url-fix';\n\nexport interface VendorMedia {\n media_type: 'logo' | 'image' | 'video';\n media_url: string;\n}\n\nexport interface VendorWithMedia {\n id?: number;\n title: string;\n slug?: string;\n logo?: string | null;\n logo_url?: string; // Support direct logo_url field from lightweight API\n vendor_media?: VendorMedia[];\n}\n\n/**\n * Get the logo URL from vendor_media array or direct logo_url field\n */\nexport function getVendorLogo(vendor: VendorWithMedia): string | null {\n // First check for direct logo_url field (from lightweight API)\n if (vendor.logo_url) {\n return fixSupabaseStorageUrl(vendor.logo_url);\n }\n \n // Check for legacy logo field\n if (vendor.logo) {\n return fixSupabaseStorageUrl(vendor.logo);\n }\n \n // Fallback to vendor_media array (from detailed API)\n const logoMedia = vendor.vendor_media?.find(m => m.media_type === 'logo');\n if (logoMedia?.media_url) {\n return fixSupabaseStorageUrl(logoMedia.media_url);\n }\n \n return null;\n}\n\n/**\n * Get the main image URL from vendor_media array\n */\nexport function getVendorImage(vendor: VendorWithMedia): string | null {\n const imageMedia = vendor.vendor_media?.find(m => m.media_type === 'image');\n return imageMedia?.media_url ? fixSupabaseStorageUrl(imageMedia.media_url) : null;\n}\n\n/**\n * Get the video URL from vendor_media array\n */\nexport function getVendorVideo(vendor: VendorWithMedia): string | null {\n const videoMedia = vendor.vendor_media?.find(m => m.media_type === 'video');\n return videoMedia?.media_url ? fixSupabaseStorageUrl(videoMedia.media_url) : null;\n}\n\n/**\n * Get all media URLs of a specific type\n */\nexport function getVendorMediaByType(vendor: VendorWithMedia, type: 'logo' | 'image' | 'video'): string[] {\n return vendor.vendor_media?.filter(m => m.media_type === type).map(m => fixSupabaseStorageUrl(m.media_url)) || [];\n}\n\n/**\n * Get all media items grouped by type\n */\nexport function getVendorMediaGrouped(vendor: VendorWithMedia): {\n logos: string[];\n images: string[];\n videos: string[];\n} {\n const media = vendor.vendor_media || [];\n \n return {\n logos: media.filter(m => m.media_type === 'logo').map(m => fixSupabaseStorageUrl(m.media_url)),\n images: media.filter(m => m.media_type === 'image').map(m => fixSupabaseStorageUrl(m.media_url)),\n videos: media.filter(m => m.media_type === 'video').map(m => fixSupabaseStorageUrl(m.media_url))\n };\n}\n\n/**\n * Add new media to vendor_media array (useful for admin interfaces)\n */\nexport function addVendorMedia(vendor: VendorWithMedia, type: 'logo' | 'image' | 'video', url: string): VendorMedia[] {\n const existingMedia = vendor.vendor_media || [];\n const newMedia: VendorMedia = { media_type: type, media_url: url };\n return [...existingMedia, newMedia];\n}\n\n/**\n * Remove media from vendor_media array\n */\nexport function removeVendorMedia(vendor: VendorWithMedia, url: string): VendorMedia[] {\n return vendor.vendor_media?.filter(m => m.media_url !== url) || [];\n}\n\n/**\n * Check if vendor has media of a specific type\n */\nexport function hasVendorMedia(vendor: VendorWithMedia, type: 'logo' | 'image' | 'video'): boolean {\n return vendor.vendor_media?.some(m => m.media_type === type) || false;\n}\n\n/**\n * Get media count by type\n */\nexport function getVendorMediaCount(vendor: VendorWithMedia): {\n logos: number;\n images: number;\n videos: number;\n total: number;\n} {\n const media = vendor.vendor_media || [];\n \n const logos = media.filter(m => m.media_type === 'logo').length;\n const images = media.filter(m => m.media_type === 'image').length;\n const videos = media.filter(m => m.media_type === 'video').length;\n \n return {\n logos,\n images,\n videos,\n total: media.length\n };\n}","/**\n * Utility functions for handling image proxy URLs\n */\n\n/**\n * Get proxied image URL for external images\n * If it's an external HTTP/HTTPS URL, proxy it through our API\n * Otherwise, return the original URL\n */\nexport function getProxiedImageUrl(imageUrl: string | null): string | null {\n if (!imageUrl) return null;\n \n // If it's an external HTTP/HTTPS URL, determine if we should proxy it\n if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) {\n // Skip if it's already our own proxy URL\n if (imageUrl.includes('/api/image-proxy')) {\n return imageUrl;\n }\n \n // Skip proxying for OpenMSP-owned domains (e.g., app.openmsp.ai, cdn.openmsp.ai, etc.)\n if (imageUrl.includes('openmsp.ai')) {\n return imageUrl;\n }\n \n return `/api/image-proxy?url=${encodeURIComponent(imageUrl)}`;\n }\n \n // Return local/relative images as-is\n return imageUrl;\n}\n\n/**\n * Check if an image URL needs to be proxied\n */\nexport function shouldProxyImage(imageUrl: string | null): boolean {\n if (!imageUrl) return false;\n \n // Proxy external HTTP/HTTPS URLs that aren't already proxied\n return (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) && \n !imageUrl.includes('/api/image-proxy');\n}","\"use client\"\n\nimport React from \"react\";\n\ninterface CategoryCardProps {\n name: string;\n description: string;\n categoryCount: number;\n productCount: number;\n icons?: React.ReactNode[];\n}\n\nexport function CategoryCard({ name, description, categoryCount, productCount, icons = [] }: CategoryCardProps) {\n return (\n <article className=\"bg-[#1A1A1A] border border-[#424242] rounded-[12px] p-8 flex flex-col min-w-0 box-border\">\n <div className=\"flex gap-6 mb-8 justify-center items-center\">\n {(icons.length > 0 ? icons : Array(10).fill(null)).map((icon, i) => (\n <div key={i} className=\"w-10 h-10 bg-gray-700 rounded flex items-center justify-center\">\n {icon}\n </div>\n ))}\n </div>\n <div className=\"flex-1 flex flex-col\">\n <h2 className=\"text-[24px] font-bold text-ods-text-primary mb-2 text-left leading-tight\">{name}</h2>\n <div className=\"text-[16px] text-ods-text-secondary mb-4 text-left\">\n {categoryCount} Categories • {productCount} Products\n </div>\n <div className=\"flex flex-row items-start\">\n <p className=\"text-[16px] text-ods-text-primary text-left leading-snug flex-1\">{description}</p>\n <button\n className=\"w-12 h-12 flex items-center justify-center border border-ods-border rounded-[6px] bg-transparent hover:bg-[#FFC008] transition-colors ml-4\"\n style={{ minWidth: 48, minHeight: 48 }}\n aria-label={`View ${name}`}\n >\n <svg width=\"24\" height=\"24\" fill=\"none\" stroke=\"#FAFAFA\" strokeWidth=\"2\" viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"/></svg>\n </button>\n </div>\n </div>\n </article>\n );\n} ","\"use client\"\n\nimport { Button } from \"./ui/button\"\nimport { VendorDisplayButton } from \"./vendor-display-button\"\nimport { useAuth } from \"./auth-stub\"\nimport { formatRelativeTime } from \"../utils/date-utils\"\nimport { UserSummary } from \"./user-summary-stub\"\n\ninterface CommentCardProps {\n comment: {\n id: string\n content: string\n title?: string\n type?: 'pro' | 'con'\n importance?: 'Critical' | 'Important' | 'Nice-to-have'\n createdAt: string\n vendor?: {\n id: number\n title: string\n slug: string\n logo: string | null\n category?: string | null\n }\n user?: {\n id: string\n name: string\n profilePicture: string | null\n msp?: {\n id: string | number\n name?: string | null\n icon_url?: string | null\n }\n }\n canDelete?: boolean\n }\n onViewProduct?: (vendorSlug: string) => void\n onDeleteComment?: (commentId: string) => void\n showVendorInfo?: boolean\n compact?: boolean\n context: 'profile' | 'vendor'\n}\n\nexport function CommentCard({ \n comment, \n onViewProduct, \n onDeleteComment, \n showVendorInfo = true,\n compact = false,\n context = 'profile'\n}: CommentCardProps) {\n const { user: currentUser } = useAuth()\n \n // Use unified date formatting function\n const formatActivityTime = (timestamp: string) => {\n return formatRelativeTime(timestamp);\n }\n\n // Check if current user can delete this comment\n const canUserDeleteComment = () => {\n // If not authenticated, can't delete\n if (!currentUser) return false\n \n // For profile context, use the existing canDelete prop (since it's the user's own comments)\n if (context === 'profile') {\n return comment.canDelete !== false\n }\n \n // For vendor context, check if current user is the comment creator\n if (context === 'vendor' && comment.user) {\n return currentUser.id === comment.user.id\n }\n \n return false\n }\n\n const showDeleteButton = canUserDeleteComment()\n\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-lg p-4 hover:border-[#FFC008] transition-all group overflow-hidden w-full max-w-full box-border\" style={{ maxWidth: '100%', wordBreak: 'break-word' }}>\n {/* Comment Header */}\n <div className=\"flex flex-col gap-3 mb-3 min-[420px]:flex-row min-[420px]:items-center min-[420px]:justify-between min-[420px]:gap-2 w-full\">\n {/* Row 1: Info + Timestamp */}\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n {context === 'profile' && comment.vendor ? (\n <>\n {/* Vendor Button - Icon + Name */}\n <VendorDisplayButton\n vendor={comment.vendor}\n onClick={onViewProduct || (() => {})}\n />\n \n {/* Timestamp */}\n <span className=\"font-['DM_Sans'] font-medium text-[14px] leading-[1.43] text-ods-text-secondary whitespace-nowrap flex-shrink-0\">\n {formatActivityTime(comment.createdAt)}\n </span>\n </>\n ) : context === 'vendor' && comment.user ? (\n <UserSummary\n name={comment.user.name}\n email=\"\"\n compact\n avatarSize={48}\n subtitle={formatActivityTime(comment.createdAt)}\n avatarUrl={comment.user.profilePicture ?? null}\n mspPreview={comment.user.msp ? {\n name: comment.user.msp.name ?? null,\n logoUrl: comment.user.msp.icon_url ?? null,\n seatCount: null,\n technicianCount: null,\n annualRevenue: null,\n } : null}\n showEditButton={false}\n authProviders={[]}\n />\n ) : null}\n </div>\n \n {/* Row 2: Action Buttons */}\n <div className=\"flex gap-2 justify-start min-[420px]:justify-end\">\n {/* Delete Button - shown when user can delete the comment */}\n {showDeleteButton && onDeleteComment && (\n <Button\n onClick={() => onDeleteComment(comment.id)}\n variant=\"outline\"\n size=\"icon\"\n className=\"text-ods-text-primary\"\n >\n <svg width=\"22\" height=\"24\" viewBox=\"0 0 22 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"text-ods-text-primary\">\n <path d=\"M18.6025 4.37939C19.221 4.43597 19.6768 4.98399 19.6206 5.60254L18.5176 17.7358C18.4492 18.4886 18.3924 19.1183 18.3052 19.6299C18.2155 20.1552 18.0809 20.6447 17.8101 21.1021C17.4444 21.7195 16.9245 22.2292 16.3042 22.583L16.0317 22.7251C15.5519 22.9533 15.0526 23.0438 14.5215 23.0854C14.0042 23.126 13.3727 23.125 12.6172 23.125H9.38281C8.62726 23.125 7.9958 23.126 7.47852 23.0854C7.01357 23.049 6.57289 22.975 6.14844 22.8042L5.96826 22.7251C5.32037 22.4169 4.76543 21.9454 4.35693 21.3599L4.18994 21.1021C3.91912 20.6447 3.78445 20.1552 3.69482 19.6299C3.65123 19.3743 3.61556 19.0894 3.58203 18.7744L3.48242 17.7358L2.37939 5.60254L2.375 5.48682C2.38099 4.91684 2.81768 4.43244 3.39746 4.37939C3.97776 4.32664 4.496 4.72462 4.60449 5.28467L4.62061 5.39746L5.72363 17.5322C5.79528 18.3203 5.84358 18.8475 5.9126 19.252C5.97923 19.6424 6.05232 19.8298 6.12646 19.9551L6.28467 20.1836C6.45963 20.3987 6.68118 20.5732 6.93359 20.6934L7.04639 20.7388C7.17478 20.7822 7.35781 20.8195 7.6543 20.8428C8.06325 20.8749 8.59186 20.875 9.38281 20.875H12.6172C13.4081 20.875 13.9367 20.8749 14.3457 20.8428C14.7409 20.8117 14.9349 20.7559 15.0664 20.6934L15.3066 20.5557C15.5369 20.4008 15.7309 20.1958 15.8735 19.9551C15.9477 19.8298 16.0208 19.6424 16.0874 19.252C16.1564 18.8475 16.2047 18.3203 16.2764 17.5322L17.3794 5.39746C17.436 4.77903 17.984 4.32316 18.6025 4.37939Z\" fill=\"currentColor\"/>\n <path d=\"M7.37451 15.9995V11C7.37451 10.3788 7.87842 9.87526 8.49951 9.875C9.12083 9.875 9.62451 10.3787 9.62451 11V15.9995C9.62451 16.6208 9.12083 17.1245 8.49951 17.1245C7.87842 17.1242 7.37451 16.6207 7.37451 15.9995ZM12.3755 15.9995V11C12.3755 10.3787 12.8792 9.875 13.5005 9.875C14.1216 9.87526 14.6255 10.3788 14.6255 11V15.9995C14.6255 16.6207 14.1216 17.1242 13.5005 17.1245C12.8792 17.1245 12.3755 16.6208 12.3755 15.9995ZM12.585 0.875C13.0174 0.879157 13.425 0.903301 13.8096 1.02881L14.1157 1.14746C14.4155 1.28159 14.6931 1.46221 14.9375 1.68359L15.0811 1.82568C15.4034 2.16872 15.6379 2.59872 15.8984 3.05469L16.6528 4.37451H20L20.1157 4.38037C20.6825 4.43826 21.1248 4.91747 21.125 5.49951C21.125 6.08174 20.6827 6.5607 20.1157 6.61865L20 6.62451H2C1.37868 6.62451 0.875 6.12083 0.875 5.49951C0.875264 4.87842 1.37884 4.37451 2 4.37451H5.34717L6.32129 2.6709C6.53952 2.29735 6.76267 1.95525 7.0625 1.68359L7.31738 1.47705C7.58262 1.28327 7.87687 1.1312 8.19043 1.02881L8.38525 0.974609C8.71199 0.896341 9.05467 0.878464 9.41504 0.875H12.585ZM9.85742 3.125C9.29191 3.125 9.08123 3.13201 8.97266 3.14844L8.88916 3.16748C8.83075 3.18655 8.77503 3.21301 8.72217 3.24365L8.57275 3.35205C8.53704 3.38448 8.50137 3.42629 8.42773 3.54102L8.05566 4.1709L7.93848 4.37451H14.0615L13.9443 4.1709C13.6645 3.68114 13.554 3.50141 13.4858 3.41504L13.4272 3.35205C13.3815 3.31062 13.3309 3.27443 13.2778 3.24365L13.1108 3.16748C13.019 3.13753 12.8946 3.125 12.1426 3.125H9.85742Z\" fill=\"currentColor\"/>\n </svg>\n </Button>\n )}\n </div>\n </div>\n \n {/* Comment Content */}\n <div className=\"space-y-2 w-full max-w-full overflow-hidden\" style={{ maxWidth: '100%', wordBreak: 'break-word' }}>\n {comment.title && (\n <div className={compact ? \"h-[20px] flex items-center\" : \"h-[24px] flex items-center\"}>\n <h4 className=\"text-h3 tracking-[-0.02em] text-ods-text-primary group-hover:text-ods-accent transition-colors line-clamp-1\" style={{ \n wordBreak: 'break-word', \n overflowWrap: 'break-word', \n maxWidth: '100%',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: 1\n }}>\n {comment.title}\n </h4>\n </div>\n )}\n <div className={compact ? \"h-[60px] flex items-center\" : \"h-[72px] flex items-center\"}>\n <p className=\"text-h4 text-ods-text-primary line-clamp-3\" style={{ \n wordBreak: 'break-word', \n overflowWrap: 'break-word', \n maxWidth: '100%',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: 3\n }}>\n {comment.content}\n </p>\n </div>\n </div>\n </div>\n )\n}","\"use client\"\n\nimport { Button } from \"./ui/button\"\nimport { getVendorLogo, VendorWithMedia } from \"../utils/vendor-media-stub\"\nimport Image from \"../embed-shims/next-image\"\nimport { getProxiedImageUrl } from \"../utils/image-proxy-stub\"\n\ninterface VendorDisplayButtonProps {\n vendor: VendorWithMedia\n onClick?: (vendorSlug: string) => void\n variant?: 'default' | 'compact'\n externalUrl?: string\n}\n\nexport function VendorDisplayButton({ vendor, onClick, variant = 'default', externalUrl }: VendorDisplayButtonProps) {\n const handleClick = () => {\n if (externalUrl && vendor.slug) {\n // Use environment variable or fallback to provided URL\n const baseUrl = process.env.NEXT_PUBLIC_OPENMSP_URL || externalUrl\n window.open(`${baseUrl}/vendor/${vendor.slug}`, '_blank', 'noopener,noreferrer')\n } else if (onClick && vendor.slug) {\n onClick(vendor.slug)\n }\n }\n\n // Compact variant for flamingo-teaser\n if (variant === 'compact') {\n const logoUrl = getVendorLogo(vendor)\n \n return (\n <button \n onClick={handleClick}\n className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-[#1A1A1A] border border-[#2A2A2A] hover:border-[#FFC008]/50 transition-colors\"\n >\n {logoUrl ? (\n <div className=\"w-5 h-5 rounded overflow-hidden flex-shrink-0\">\n <Image\n src={getProxiedImageUrl(logoUrl) || logoUrl}\n alt={`${vendor.title} logo`}\n width={20}\n height={20}\n className=\"w-full h-full object-cover\"\n />\n </div>\n ) : (\n <div className=\"w-5 h-5 rounded bg-[#2A2A2A] flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#666666] text-[10px] font-medium\">\n {vendor.title.charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n <span className=\"text-sm font-medium text-white\">\n {vendor.title}\n </span>\n </button>\n )\n }\n\n // Default variant\n return (\n <button \n onClick={handleClick}\n className=\"flex items-center gap-2 bg-ods-card border border-ods-border rounded-lg py-2 px-3 hover:border-[#FFC008] transition-colors max-w-full overflow-hidden\"\n >\n {getVendorLogo(vendor) ? (\n <div className=\"w-8 h-8 bg-ods-card border border-ods-border rounded-lg flex items-center justify-center flex-shrink-0\">\n <Image\n src={getProxiedImageUrl(getVendorLogo(vendor)!) || getVendorLogo(vendor)!}\n alt={`${vendor.title} logo`}\n width={24}\n height={24}\n className=\"rounded object-cover\"\n />\n </div>\n ) : (\n <div className=\"w-8 h-8 bg-ods-border border border-ods-border rounded-lg flex items-center justify-center flex-shrink-0\">\n <span className=\"text-ods-text-primary text-[12px] font-medium\">\n {vendor.title.charAt(0)}\n </span>\n </div>\n )}\n <span className=\"text-h4 text-ods-text-primary truncate min-w-0\" title={vendor.title}>\n {vendor.title}\n </span>\n </button>\n )\n} ","\"use client\"\n\n// Stub auth provider and hooks\nimport { createContext, useContext } from 'react';\n\ninterface AuthContextType {\n user: any | null;\n isLoading: boolean;\n}\n\nconst AuthContext = createContext<AuthContextType>({\n user: null,\n isLoading: false,\n});\n\n// Global reference to real auth hook when available\nlet realUseAuth: (() => any) | null = null;\n\nexport function setRealAuthHook(authHook: () => any) {\n realUseAuth = authHook;\n}\n\nexport function useAuth() {\n // Use real auth hook if available (when used in main app)\n if (realUseAuth) {\n try {\n const realAuth = realUseAuth();\n if (realAuth && realAuth.user) {\n return realAuth;\n }\n } catch (error) {\n // Fallback if real auth fails\n }\n }\n\n // Fallback mock user for UI kit context\n return {\n user: { id: 'mock-user-id', name: 'Mock User' },\n isLoading: false\n };\n}\n\nexport function AuthProvider({ children }: { children: React.ReactNode }) {\n return (\n <AuthContext.Provider value={{ user: { id: 'mock-user-id', name: 'Mock User' }, isLoading: false }}>\n {children as any}\n </AuthContext.Provider>\n );\n}","\"use client\";\n\nimport Image from \"../embed-shims/next-image\";\nimport { getProxiedImageUrl } from \"../utils/image-proxy-stub\";\n\ninterface Props {\n name: string;\n email: string;\n avatarUrl?: string | null;\n /** Optional subtitle text (e.g., relative time) to replace email line */\n subtitle?: string | null;\n /** Authentication provider names (e.g. [\"google\", \"microsoft\"]) */\n authProviders?: string[];\n /** Show an outline Edit Profile button that routes to editHref */\n showEditButton?: boolean;\n /** Path to navigate when Edit button clicked (default \"/profile/edit\") */\n editHref?: string;\n /** Optional userId/profile passed through to EditProfileButton (for analytics) */\n userId?: string;\n profileData?: any;\n /** Optional MSP preview info to render below email */\n mspPreview?: {\n name?: string | null;\n seatCount?: number | null;\n technicianCount?: number | null;\n annualRevenue?: number | null;\n logoUrl?: string | null;\n } | null;\n /** Compact mode (avatar + name row, used in comment headers) */\n compact?: boolean;\n /** Avatar size in px for compact mode (defaults 40) */\n avatarSize?: number;\n\n /** When true, replaces the static avatar with the ProfilePhotoUpload widget */\n editablePhoto?: boolean;\n /** Required when editablePhoto=true – receives new photo URL */\n onPhotoChange?: (url: string | null) => void;\n}\n\nconst getAuthProviderIcon = (provider: string) => {\n const p = provider.toLowerCase();\n switch (p) {\n case \"google\":\n return <Image src=\"/icons/google-logo.svg\" alt=\"Google\" width={16} height={16} className=\"w-4 h-4\" />;\n case \"microsoft\":\n case \"azure\":\n return <Image src=\"/icons/microsoft-logo.svg\" alt=\"Microsoft\" width={16} height={16} className=\"w-4 h-4\" />;\n case \"slack\":\n case \"slack_oidc\":\n return <div className=\"w-4 h-4 bg-ods-text-secondary rounded-full\" />;\n default:\n return <div className=\"w-4 h-4 bg-ods-text-secondary rounded-full\" />;\n }\n};\n\n// Abbreviate large numbers: 1 200 → 1.2K , 15 000 → 15K , 2 000 000 → 2M\nconst formatNumber = (n: number) => {\n if (n >= 1_000_000_000) {\n const value = n / 1_000_000_000;\n return `${Number.isInteger(value) ? value.toFixed(0) : value.toFixed(1)}B`;\n }\n if (n >= 1_000_000) {\n const value = n / 1_000_000;\n return `${Number.isInteger(value) ? value.toFixed(0) : value.toFixed(1)}M`;\n }\n if (n >= 1_000) {\n return `${Math.round(n / 1_000)}K`;\n }\n return n.toLocaleString();\n};\n\nexport function UserSummary({\n name,\n email,\n subtitle = null,\n avatarUrl,\n authProviders,\n showEditButton = false,\n editHref = \"/profile/edit\",\n userId,\n profileData,\n mspPreview,\n compact = false,\n avatarSize = 40,\n editablePhoto = false,\n onPhotoChange,\n}: Props) {\n // Compact variant: minimal horizontal row\n if (compact) {\n return (\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"relative shrink-0\">\n {avatarUrl ? (\n <Image src={getProxiedImageUrl(avatarUrl) ?? avatarUrl} alt={name} width={avatarSize} height={avatarSize} className=\"object-cover rounded-lg\" />\n ) : (\n <div className=\"rounded-lg bg-ods-accent flex items-center justify-center text-ods-text-on-accent font-heading font-bold\" style={{ width: avatarSize, height: avatarSize }}>\n {name.split(' ').map((n: string) => n.charAt(0)).join('').slice(0, 2)}\n </div>\n )}\n {mspPreview && mspPreview.logoUrl && (\n <Image src={getProxiedImageUrl(mspPreview.logoUrl) ?? mspPreview.logoUrl} alt={mspPreview.name || 'MSP'} width={24} height={24} className=\"absolute -bottom-1 -right-1 size-6 rounded-full object-cover select-none z-10\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"text-h4 text-ods-text-primary truncate\"\n title={mspPreview?.name ? `${name} • ${mspPreview.name}` : name}\n >\n {name}\n {mspPreview?.name && (\n <span className=\"text-ods-text-secondary\"> • {mspPreview.name}</span>\n )}\n </p>\n <p className=\"text-h6 text-ods-text-secondary truncate\" title={subtitle && subtitle.trim().length > 0 ? subtitle : (email && email.trim().length > 0 ? email : '\\u00A0')}>\n {subtitle && subtitle.trim().length > 0 ? subtitle : (email && email.trim().length > 0 ? email : '\\u00A0')}\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4 w-full\">\n {/* Header Row */}\n <div className=\"flex gap-6 w-full items-start\">\n {/* Avatar with badge wrapper */}\n <div className=\"relative shrink-0 h-24 w-24 overflow-visible\">\n {avatarUrl ? (\n <Image src={getProxiedImageUrl(avatarUrl) ?? avatarUrl} alt={name} width={96} height={96} className=\"object-cover rounded-full\" />\n ) : (\n <div className=\"rounded-full bg-ods-card border border-ods-border w-full h-full flex items-center justify-center text-3xl text-ods-text-secondary font-heading\">\n {name.charAt(0).toUpperCase()}\n </div>\n )}\n\n {/* MSP logo badge (show only when MSP exists) */}\n {mspPreview && (\n <div className=\"absolute -bottom-1 -right-1 size-10 rounded-full bg-ods-bg ring-2 ring-ods-border overflow-hidden flex items-center justify-center select-none\">\n {mspPreview.logoUrl ? (\n <Image\n src={getProxiedImageUrl(mspPreview.logoUrl) ?? mspPreview.logoUrl}\n alt={mspPreview.name || 'MSP Logo'}\n width={40}\n height={40}\n className=\"object-cover\"\n />\n ) : (\n <span className=\"text-ods-text-primary font-heading text-sm font-bold\">\n {mspPreview.name?.charAt(0).toUpperCase() || '?'}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Info + actions block */}\n <div className=\"flex-1 grid grid-cols-[1fr_auto] gap-4\">\n {/* LEFT : text stack */}\n <div className=\"min-h-[6rem] flex flex-col justify-center space-y-3 truncate\">\n <p className=\"text-h2 text-ods-text-primary leading-none truncate\" title={name}>\n {name}\n </p>\n <p className=\"text-h4 text-ods-text-secondary break-all truncate\" title={(subtitle && subtitle.trim().length > 0) ? subtitle : (email && email.trim().length > 0 ? email : '\\u00A0')}>\n {(subtitle && subtitle.trim().length > 0) ? subtitle : (email && email.trim().length > 0 ? email : '\\u00A0')}\n </p>\n {mspPreview && (() => {\n const mspSegments = [\n mspPreview.name ?? '—',\n typeof mspPreview.seatCount === 'number'\n ? `${formatNumber(mspPreview.seatCount)} Seats`\n : null,\n typeof mspPreview.technicianCount === 'number'\n ? `${formatNumber(mspPreview.technicianCount)} Technicians`\n : null,\n typeof mspPreview.annualRevenue === 'number'\n ? `$${formatNumber(mspPreview.annualRevenue)}`\n : null,\n ].filter(Boolean) as string[];\n const mspTitle = mspSegments.join(' • ');\n return (\n <p className=\"text-h6 text-ods-text-primary truncate\" title={mspTitle}>\n {/* Build string with separators */}\n {mspSegments\n .flatMap((txt, idx) => (idx === 0 ? [txt] : [' • ', txt]))\n .map((seg, idx) => (\n <span key={idx} className={seg === ' • ' ? 'text-ods-text-secondary' : ''}>{seg}</span>\n ))}\n </p>\n );\n })()}\n </div>\n\n {/* RIGHT (desktop) */}\n {(authProviders?.length || showEditButton) && (\n <div className=\"hidden md:flex flex-col items-end justify-between flex-shrink-0 min-h-[6rem]\">\n {/* top part */}\n {authProviders && authProviders.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-ods-text-secondary whitespace-nowrap select-none\">\n Authorized by\n </span>\n <div className=\"flex items-center gap-2\">\n {authProviders.map((p) => (\n <div key={p} className=\"flex items-center justify-center w-4 h-4\">\n {getAuthProviderIcon(p)}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* bottom part - Edit button would go here */}\n {showEditButton && (\n <div className=\"text-xs text-ods-text-secondary\">Edit Profile</div>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Mobile row: Authorized by left, Edit btn right */}\n {(authProviders?.length || showEditButton) && (\n <div className=\"flex md:hidden items-center justify-between w-full gap-4\">\n {authProviders && authProviders.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-ods-text-secondary whitespace-nowrap select-none\">Authorized by</span>\n <div className=\"flex items-center gap-2\">\n {authProviders.map((p) => (\n <div key={p} className=\"flex items-center justify-center w-4 h-4\">\n {getAuthProviderIcon(p)}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {showEditButton && (\n <div className=\"text-xs text-ods-text-secondary\">Edit Profile</div>\n )}\n </div>\n )}\n </div>\n );\n}","\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface ContentLoadingContainerProps {\n /**\n * Whether the content is currently loading\n */\n isLoading: boolean\n /**\n * The actual content to display when not loading\n */\n children: ReactNode\n /**\n * The skeleton component to show during loading\n */\n skeletonComponent: ReactNode\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Minimum height to prevent layout jumps\n */\n minHeight?: string\n /**\n * Loading overlay opacity (0-1)\n */\n loadingOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n}\n\n/**\n * ContentLoadingContainer\n * \n * A unified loading container that wraps card grids and manages loading states \n * while keeping UI controls persistent. This component:\n * \n * - Shows skeleton loading only in content area\n * - Maintains consistent layout dimensions during loading\n * - Provides smooth transitions between loading and loaded states\n * - Prevents layout jumps by preserving container height\n * - Supports customizable skeleton components for different content types\n * \n * Usage:\n * ```tsx\n * <ContentLoadingContainer\n * isLoading={isLoadingVendors}\n * skeletonComponent={<CardSkeletonGrid variant=\"vendor\" count={12} />}\n * minHeight=\"min-h-[800px]\"\n * >\n * <VendorGrid vendors={vendors} />\n * </ContentLoadingContainer>\n * ```\n */\nexport function ContentLoadingContainer({\n isLoading,\n children,\n skeletonComponent,\n className,\n minHeight = \"min-h-[300px] md:min-h-[800px]\",\n loadingOpacity = 1,\n transitionDuration = 300,\n}: ContentLoadingContainerProps) {\n return (\n <div \n className={cn(\n \"relative w-full transition-all ease-in-out\",\n minHeight,\n className\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"region\"\n aria-label={isLoading ? \"Loading content\" : \"Content loaded\"}\n aria-live=\"polite\"\n >\n {/* Loading Skeleton Overlay */}\n {isLoading && (\n <div \n className=\"absolute inset-0 z-10 bg-[#161616]\"\n style={{ \n opacity: loadingOpacity,\n transition: `opacity ${transitionDuration}ms ease-in-out`\n }}\n role=\"status\"\n aria-label=\"Loading content\"\n >\n {skeletonComponent}\n </div>\n )}\n\n {/* Actual Content */}\n <div \n className={cn(\n \"relative transition-opacity ease-in-out\",\n isLoading && \"opacity-0\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n aria-hidden={isLoading}\n >\n {children}\n </div>\n </div>\n )\n}\n\n/**\n * Hook for managing content loading states with common patterns\n */\nexport function useContentLoading(isLoading: boolean) {\n const containerProps = {\n 'aria-busy': isLoading,\n 'data-loading': isLoading\n }\n\n const getSkeletonCount = (contentType: 'vendor' | 'blog') => {\n return contentType === 'vendor' ? 12 : 6\n }\n\n const getMinHeight = (contentType: 'vendor' | 'blog') => {\n // Vendor cards are typically taller, need more space\n return contentType === 'vendor' \n ? \"min-h-[400px] md:min-h-[900px]\" \n : \"min-h-[300px] md:min-h-[800px]\"\n }\n\n return {\n containerProps,\n getSkeletonCount,\n getMinHeight\n }\n} ","\"use client\";\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { useDynamicTheming } from '../hooks/use-dynamic-theming';\nimport { useThemeAware } from '../hooks/use-theme-aware';\n\ninterface DynamicSkeletonProps {\n /**\n * Type of skeleton animation\n */\n animation?: 'pulse' | 'shimmer' | 'wave' | 'static';\n \n /**\n * Skeleton variant based on content type\n */\n variant?: 'text' | 'avatar' | 'card' | 'button' | 'image' | 'custom';\n \n /**\n * Size preset for common elements\n */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n \n /**\n * Custom dimensions\n */\n width?: string | number;\n height?: string | number;\n \n /**\n * Number of lines for text skeleton\n */\n lines?: number;\n \n /**\n * Platform-aware styling\n */\n platformAware?: boolean;\n \n /**\n * Accessibility enhancements\n */\n includeAriaLabel?: boolean;\n \n /**\n * Custom CSS classes\n */\n className?: string;\n \n /**\n * Child elements (for container skeletons)\n */\n children?: React.ReactNode;\n}\n\nconst sizePresets = {\n sm: { width: '4rem', height: '1rem' },\n md: { width: '8rem', height: '1.5rem' },\n lg: { width: '12rem', height: '2rem' },\n xl: { width: '16rem', height: '2.5rem' }\n};\n\nconst variantStyles = {\n text: 'rounded',\n avatar: 'rounded-full aspect-square',\n card: 'rounded-lg',\n button: 'rounded-md',\n image: 'rounded-lg aspect-video',\n custom: ''\n};\n\nexport function DynamicSkeleton({\n animation = 'shimmer',\n variant = 'text',\n size = 'md',\n width,\n height,\n lines = 1,\n platformAware = true,\n includeAriaLabel = true,\n className,\n children\n}: DynamicSkeletonProps) {\n const { platform, isDark, accentColor } = useThemeAware();\n\n // Calculate dimensions\n const dimensions = React.useMemo(() => {\n if (width || height) {\n return {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height\n };\n }\n \n if (variant === 'avatar') {\n const avatarSize = sizePresets[size].height;\n return { width: avatarSize, height: avatarSize };\n }\n \n return sizePresets[size];\n }, [width, height, size, variant]);\n\n // Platform-specific skeleton colors\n const platformStyles = React.useMemo(() => {\n if (!platformAware) return {};\n\n const baseOpacity = isDark ? 0.1 : 0.15;\n const accentOpacity = isDark ? 0.05 : 0.08;\n\n return {\n '--skeleton-base': `color-mix(in srgb, var(--color-bg-skeleton) ${baseOpacity * 100}%, transparent)`,\n '--skeleton-highlight': `color-mix(in srgb, ${accentColor} ${accentOpacity * 100}%, var(--color-bg-skeleton))`,\n '--skeleton-accent': `color-mix(in srgb, ${accentColor} 10%, transparent)`\n } as React.CSSProperties;\n }, [platformAware, isDark, accentColor]);\n\n // Animation classes\n const animationClasses = {\n pulse: 'animate-pulse',\n shimmer: 'ods-loading-dynamic',\n wave: 'skeleton-wave',\n static: ''\n };\n\n // Base skeleton classes\n const baseClasses = cn(\n 'bg-ods-skeleton',\n variantStyles[variant],\n animationClasses[animation],\n platformAware && `skeleton-platform-${platform}`,\n className\n );\n\n // For text skeletons with multiple lines\n if (variant === 'text' && lines > 1) {\n return (\n <div \n className=\"space-y-2\"\n style={platformStyles}\n role=\"status\"\n aria-label={includeAriaLabel ? \"Loading content...\" : undefined}\n >\n {Array.from({ length: lines }, (_, index) => (\n <div\n key={index}\n className={cn(\n baseClasses,\n index === lines - 1 && 'w-3/4' // Last line shorter\n )}\n style={{\n ...dimensions,\n width: index === lines - 1 ? '75%' : dimensions.width\n }}\n />\n ))}\n </div>\n );\n }\n\n // Single skeleton element\n return (\n <div\n className={baseClasses}\n style={{ ...dimensions, ...platformStyles }}\n role=\"status\"\n aria-label={includeAriaLabel ? \"Loading content...\" : undefined}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Pre-configured skeleton for common UI patterns\n */\nexport const SkeletonPresets = {\n /**\n * Card skeleton with header, content, and actions\n */\n Card: ({ showActions = true, showImage = false }: { showActions?: boolean; showImage?: boolean }) => (\n <div className=\"bg-ods-card border border-ods-border rounded-lg p-6 space-y-4\">\n {showImage && (\n <DynamicSkeleton variant=\"image\" className=\"w-full h-40\" />\n )}\n <div className=\"space-y-2\">\n <DynamicSkeleton variant=\"text\" size=\"lg\" />\n <DynamicSkeleton variant=\"text\" lines={2} size=\"md\" />\n </div>\n {showActions && (\n <div className=\"flex gap-2 pt-2\">\n <DynamicSkeleton variant=\"button\" width=\"6rem\" height=\"2.5rem\" />\n <DynamicSkeleton variant=\"button\" width=\"4rem\" height=\"2.5rem\" />\n </div>\n )}\n </div>\n ),\n\n /**\n * User profile skeleton\n */\n Profile: () => (\n <div className=\"flex items-start gap-4 p-4\">\n <DynamicSkeleton variant=\"avatar\" size=\"lg\" />\n <div className=\"flex-1 space-y-2\">\n <DynamicSkeleton variant=\"text\" size=\"lg\" width=\"8rem\" />\n <DynamicSkeleton variant=\"text\" size=\"sm\" width=\"12rem\" />\n <DynamicSkeleton variant=\"text\" lines={2} size=\"md\" />\n </div>\n </div>\n ),\n\n /**\n * Navigation skeleton\n */\n Navigation: ({ items = 5 }: { items?: number }) => (\n <nav className=\"space-y-2 p-4\">\n {Array.from({ length: items }, (_, index) => (\n <div key={index} className=\"flex items-center gap-3\">\n <DynamicSkeleton variant=\"avatar\" size=\"sm\" />\n <DynamicSkeleton variant=\"text\" size=\"md\" />\n </div>\n ))}\n </nav>\n ),\n\n /**\n * Table skeleton\n */\n Table: ({ rows = 5, columns = 4 }: { rows?: number; columns?: number }) => (\n <div className=\"space-y-3\">\n {/* Header */}\n <div className=\"grid gap-4\" style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}>\n {Array.from({ length: columns }, (_, index) => (\n <DynamicSkeleton key={`header-${index}`} variant=\"text\" size=\"md\" />\n ))}\n </div>\n {/* Rows */}\n {Array.from({ length: rows }, (_, rowIndex) => (\n <div key={`row-${rowIndex}`} className=\"grid gap-4\" style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}>\n {Array.from({ length: columns }, (_, colIndex) => (\n <DynamicSkeleton key={`cell-${rowIndex}-${colIndex}`} variant=\"text\" size=\"sm\" />\n ))}\n </div>\n ))}\n </div>\n ),\n\n /**\n * Vendor grid skeleton (specific to the app)\n */\n VendorGrid: ({ items = 6 }: { items?: number }) => (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: items }, (_, index) => (\n <div key={index} className=\"bg-ods-card border border-ods-border rounded-lg p-4 space-y-3\">\n <div className=\"flex items-center gap-3\">\n <DynamicSkeleton variant=\"avatar\" size=\"md\" />\n <div className=\"flex-1\">\n <DynamicSkeleton variant=\"text\" size=\"md\" width=\"6rem\" />\n <DynamicSkeleton variant=\"text\" size=\"sm\" width=\"4rem\" className=\"mt-1\" />\n </div>\n </div>\n <DynamicSkeleton variant=\"text\" lines={2} size=\"sm\" />\n <div className=\"flex gap-2\">\n <DynamicSkeleton variant=\"custom\" width=\"3rem\" height=\"1.25rem\" className=\"rounded-full\" />\n <DynamicSkeleton variant=\"custom\" width=\"4rem\" height=\"1.25rem\" className=\"rounded-full\" />\n </div>\n </div>\n ))}\n </div>\n ),\n\n /**\n * Blog post skeleton\n */\n BlogPost: () => (\n <article className=\"space-y-6\">\n <div className=\"space-y-2\">\n <DynamicSkeleton variant=\"text\" size=\"xl\" width=\"75%\" />\n <div className=\"flex gap-4 text-sm\">\n <DynamicSkeleton variant=\"text\" size=\"sm\" width=\"4rem\" />\n <DynamicSkeleton variant=\"text\" size=\"sm\" width=\"6rem\" />\n </div>\n </div>\n <DynamicSkeleton variant=\"image\" className=\"w-full h-64\" />\n <div className=\"space-y-3\">\n {Array.from({ length: 4 }, (_, index) => (\n <DynamicSkeleton key={index} variant=\"text\" lines={3} size=\"md\" />\n ))}\n </div>\n </article>\n )\n};\n\n/**\n * Platform-aware loading container that shows different skeletons based on platform\n */\nexport function PlatformSkeletonContainer({ \n children, \n isLoading, \n skeletonType = 'Card',\n skeletonProps = {}\n}: {\n children: React.ReactNode;\n isLoading: boolean;\n skeletonType?: keyof typeof SkeletonPresets;\n skeletonProps?: any;\n}) {\n const { platform } = useThemeAware();\n\n if (!isLoading) {\n return <>{children}</>;\n }\n\n const SkeletonComponent = SkeletonPresets[skeletonType];\n\n return (\n <div className={`platform-skeleton skeleton-${platform}`}>\n <SkeletonComponent {...skeletonProps} />\n </div>\n );\n}\n\n/**\n * Enhanced skeleton with progressive enhancement\n */\nexport function ProgressiveSkeleton({\n stages = ['basic', 'detailed', 'interactive'],\n currentStage = 0,\n children,\n ...props\n}: DynamicSkeletonProps & {\n stages?: string[];\n currentStage?: number;\n}) {\n const { platform } = useThemeAware();\n\n // Show more detailed skeleton as loading progresses\n const stageConfig = {\n 0: { animation: 'pulse' as const, variant: 'text' as const },\n 1: { animation: 'shimmer' as const, variant: 'card' as const },\n 2: { animation: 'wave' as const, variant: 'custom' as const }\n };\n\n const config = stageConfig[currentStage as keyof typeof stageConfig] || stageConfig[0];\n\n return (\n <DynamicSkeleton\n {...props}\n {...config}\n className={cn(\n props.className,\n `skeleton-stage-${currentStage}`,\n `skeleton-platform-${platform}`\n )}\n >\n {children}\n </DynamicSkeleton>\n );\n}","// Stub implementation for useThemeAware hook\n\nexport function useThemeAware() {\n return {\n themeColors: {},\n platformContext: 'default',\n isDarkMode: false,\n platform: 'default',\n isDark: false,\n accentColor: '#FFC008'\n };\n}","\"use client\"\n\nimport React, { useRef, useState, useEffect, useCallback } from 'react'\nimport { ChevronButton } from './ui/chevron-button'\nimport { cn } from \"../utils/cn\"\n\nexport interface FaqItem {\n id: number | string\n question: string\n answer: string\n}\n\ninterface FaqAccordionProps {\n items: FaqItem[]\n defaultOpenIds?: (number | string)[]\n}\n\n// Utility to measure scrollHeight outside render cycle\nconst useMeasuredHeight = (isOpen: boolean) => {\n const ref = useRef<HTMLDivElement | null>(null)\n const [maxHeight, setMaxHeight] = useState<string>('0px')\n\n const measure = useCallback(() => {\n if (ref.current) {\n const height = ref.current.scrollHeight\n setMaxHeight(`${height}px`)\n }\n }, [])\n\n // Update height only when section is open\n useEffect(() => {\n if (isOpen) {\n measure()\n } else {\n setMaxHeight('0px')\n }\n }, [isOpen, measure])\n\n return { ref, maxHeight }\n}\n\nexport function FaqAccordion({ items, defaultOpenIds = [] }: FaqAccordionProps) {\n const [openSet, setOpenSet] = useState<Set<string | number>>(new Set(defaultOpenIds))\n\n const toggle = (id: string | number) => {\n setOpenSet(prev => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n\n return (\n <div className=\"rounded-3xl border border-ods-border divide-y divide-[#3A3A3A] bg-ods-card overflow-hidden\">\n {items.map(item => {\n const isOpen = openSet.has(item.id)\n const { ref, maxHeight } = useMeasuredHeight(isOpen)\n\n return (\n <div\n key={item.id}\n className={cn('group transition-colors hover:bg-[#1E1E1E]', isOpen ? 'bg-[#161616]' : 'bg-transparent')}\n >\n {/* Header */}\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => toggle(item.id)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggle(item.id);\n }\n }}\n aria-expanded={isOpen}\n className=\"flex w-full items-center justify-between px-6 md:px-8 py-6 text-left focus:outline-none transition-colors cursor-pointer\"\n >\n <h3>\n {item.question}\n </h3>\n <div className=\"flex-shrink-0\">\n <ChevronButton\n size=\"md\"\n isExpanded={isOpen}\n backgroundColor=\"transparent\"\n borderColor=\"#3A3A3A\"\n />\n </div>\n </div>\n {/* Content wrapper with max-height animation */}\n <div\n style={{ maxHeight, transition: 'max-height 0.35s ease-in-out, opacity 0.35s ease-in-out', opacity: isOpen ? 1 : 0 }}\n className=\"overflow-hidden group-hover:bg-[#1E1E1E]/30\"\n >\n <div ref={ref} className=\"px-6 md:px-8 pb-6 text-ods-text-primary text-h4\">\n {item.answer}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )\n} ","\"use client\"\n\nimport { cn } from \"../utils/cn\"\nimport { X } from \"lucide-react\"\n\n// Unified FilterChip component for consistent styling across the application\ninterface FilterChipProps {\n id: string\n label: string\n variant?: 'selected' | 'unselected' | 'category' | 'subcategory' | 'tag' | 'info'\n size?: 'sm' | 'md'\n removable?: boolean\n onRemove?: () => void\n onClick?: () => void\n disabled?: boolean\n className?: string\n}\n\nexport function FilterChip({\n id,\n label,\n variant = 'unselected',\n size = 'md',\n removable = false,\n onRemove,\n onClick,\n disabled = false,\n className\n}: FilterChipProps) {\n const baseClasses = cn(\n \"inline-flex items-center justify-center rounded-full font-medium transition-all duration-200 shrink-0 group cursor-pointer\",\n \"hover:shadow-md hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2\",\n \"font-['DM_Sans'] leading-none\",\n // Size variants - enhanced mobile sizing for better visibility and touch targets\n size === 'sm' \n ? \"text-sm pl-3 pr-3 py-1 md:text-sm md:pl-3 md:pr-3 md:py-1\"\n : \"text-sm pl-3 pr-3 py-2 md:text-sm md:pl-3 md:pr-3 md:py-2\",\n // Add gap only if removable (has X button) - placed after text\n removable && \"gap-1 md:gap-1\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed hover:scale-100 hover:shadow-none\"\n )\n\n const variantClasses = {\n // Legacy variants (for backward compatibility)\n selected: \"bg-[#2A2A2A] text-[#E8E8E8] border border-[#FFC008] hover:bg-ods-border hover:border-[#FFD951] focus:ring-[#FFC008] focus:ring-offset-[#161616]\",\n unselected: \"bg-[#2A2A2A] text-[#CCCCCC] border border-[#4A4A4A] hover:bg-ods-border hover:border-[#5A5A5A] hover:text-ods-text-primary focus:ring-[#4A4A4A] focus:ring-offset-[#161616]\",\n info: \"bg-ods-border text-[#CCCCCC] border border-[#5A5A5A] cursor-default hover:scale-100 hover:shadow-none focus:ring-[#5A5A5A] focus:ring-offset-[#161616]\",\n \n // New subtle selected variants - same backgrounds/text, only border colors different\n category: \"bg-[#2A2A2A] text-[#E8E8E8] border border-[#FFC008]/40 hover:bg-ods-border hover:border-[#FFC008]/60 hover:text-ods-text-primary focus:ring-[#FFC008]/40 focus:ring-offset-[#161616]\",\n subcategory: \"bg-[#2A2A2A] text-[#E8E8E8] border border-[#FFC008]/60 hover:bg-ods-border hover:border-[#FFC008]/80 hover:text-ods-text-primary focus:ring-[#FFC008]/60 focus:ring-offset-[#161616]\",\n tag: \"bg-[#2A2A2A] text-ods-text-primary border border-[#FFC008]/20 hover:bg-ods-border hover:border-[#FFC008]/30 hover:text-ods-text-primary focus:ring-[#FFC008]/20 focus:ring-offset-[#161616]\",\n }\n\n return (\n <div\n className={cn(baseClasses, variantClasses[variant], className)}\n onClick={disabled ? undefined : (e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick?.();\n }}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick && !disabled ? 0 : undefined}\n aria-pressed={onClick && variant === 'selected' ? true : undefined}\n aria-disabled={disabled}\n >\n <span className={cn(\n \"truncate font-['DM_Sans'] font-medium leading-none text-center\",\n size === 'sm' ? \"max-w-[100px] md:max-w-[120px]\" : \"max-w-[120px] md:max-w-[140px]\"\n )} title={label}>\n {label}\n </span>\n {removable && onRemove && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) onRemove()\n }}\n disabled={disabled}\n className={cn(\n \"flex items-center justify-center w-4 h-4 md:w-4 md:h-4 rounded-full\",\n \"transition-all duration-200 shrink-0\",\n \"group-hover:scale-110 focus:outline-none focus:ring-2 focus:ring-offset-1\",\n variant === 'category'\n ? \"hover:bg-[#4A4A4A] text-[#E8E8E8] focus:ring-[#E8E8E8] focus:ring-offset-[#2A2A2A]\"\n : variant === 'subcategory'\n ? \"hover:bg-[#4A4A4A] text-[#E8E8E8] focus:ring-[#E8E8E8] focus:ring-offset-[#2A2A2A]\"\n : variant === 'tag'\n ? \"hover:bg-[#4A4A4A] text-[#E8E8E8] focus:ring-[#E8E8E8] focus:ring-offset-[#2A2A2A]\"\n : \"hover:bg-[#4A4A4A] text-[#E8E8E8] focus:ring-[#E8E8E8] focus:ring-offset-[#2A2A2A]\",\n disabled && \"opacity-50 cursor-not-allowed hover:scale-100\"\n )}\n aria-label={`Remove ${label} filter`}\n tabIndex={disabled ? -1 : 0}\n >\n <X className=\"h-2 w-2 md:h-2 md:w-2\" />\n </button>\n )}\n </div>\n )\n} ","\"use client\"\n\nimport { Suspense } from \"react\"\nimport { Skeleton } from \"./ui/skeleton\"\nimport { SocialIconRow } from \"./social-icon-row\"\n\ninterface FooterLink {\n href: string\n label: string\n}\n\ninterface FooterSection {\n title: string\n links: FooterLink[]\n}\n\ninterface FooterConfig {\n name: string\n legalName: string\n description: string\n logo?: React.ReactNode\n sections: FooterSection[]\n customComponent?: React.ReactNode // Inject any custom component here\n nameElement?: React.ReactNode // Custom element for platform name with specific font\n hideSocialRow?: boolean // Hide the default social row\n rightColumnContent?: React.ReactNode // Custom content for right column\n belowDescriptionContent?: React.ReactNode // Custom content below description\n moveDescriptionToRight?: boolean // Move description and belowDescriptionContent to right column\n keepBelowDescriptionLeft?: boolean // Keep belowDescriptionContent on left even when moveDescriptionToRight is true\n backgroundColor?: string // ODS background color (e.g., 'bg-ods-bg-card', 'bg-ods-system-greys-black')\n social?: {\n github?: string\n twitter?: string\n linkedin?: string\n reddit?: string\n youtube?: string\n instagram?: string\n facebook?: string\n discord?: string\n telegram?: string\n whatsapp?: string\n }\n}\n\ninterface FooterProps {\n config?: FooterConfig\n renderLink?: (link: FooterLink) => React.ReactNode\n}\n\nfunction NavLinkSkeleton() {\n return <Skeleton className=\"h-5 md:h-6 w-20 md:w-24\" />\n}\n\n/**\n * Platform-Aware Footer Component\n * Accepts configuration from app-config.ts\n */\nexport function Footer({ config, renderLink }: FooterProps) {\n // Config is required - no hardcoded fallbacks\n if (!config) {\n console.warn('Footer: No config provided')\n return null\n }\n \n return <UniversalFooter config={config} renderLink={renderLink} />\n}\n\n/**\n * Universal Footer Component\n * Renders footer based on provided config\n */\nfunction UniversalFooter({ config, renderLink }: { config: FooterConfig; renderLink?: (link: FooterLink) => React.ReactNode }) {\n const defaultRenderLink = (link: FooterLink) => (\n <a href={link.href} className=\"font-body font-medium text-md md:text-md leading-[1.33] text-ods-text-primary hover:text-ods-accent-primary transition-colors\">\n {link.label}\n </a>\n )\n \n const linkRenderer = renderLink || defaultRenderLink\n \n return (\n <footer className={`w-full flex flex-col justify-center items-center ${config.backgroundColor || 'bg-ods-bg-card'} px-6 py-10 relative gap-6 md:gap-6 min-h-[auto] md:min-h-[248px] z-50 border-t border-ods-border`}>\n <div className=\"w-full grid grid-cols-2 lg:grid-cols-4 gap-6 md:gap-8 items-start\">\n \n {/* Column 1: Logo and optionally description */}\n <div className=\"flex flex-col gap-4 md:gap-6 items-start text-left col-span-2 md:col-span-1 lg:col-span-1\">\n {/* Logo and name */}\n <div className=\"flex items-center gap-2\">\n {config.logo && (\n <Suspense fallback={<Skeleton className=\"w-8 h-8\" />}>\n {config.logo as any}\n </Suspense>\n )}\n {config.nameElement || <span className=\"font-heading text-heading-5 font-bold text-ods-text-primary whitespace-nowrap\">{config.name}</span>}\n </div>\n \n {/* Only show description here if NOT moving to right */}\n {!config.moveDescriptionToRight && (\n <>\n <p className=\"font-body font-medium text-sm md:text-sm leading-[1.43] text-ods-text-primary\">\n {config.description}\n </p>\n \n {/* Custom content below description */}\n {config.belowDescriptionContent && (\n <Suspense fallback={<Skeleton className=\"h-8 w-full\" />}>\n {config.belowDescriptionContent as any}\n </Suspense>\n )}\n \n {/* Conditional social row - show by default unless hideSocialRow is true */}\n {!config.hideSocialRow && (\n <SocialIconRow\n className=\"pt-2\"\n links={config.social ? Object.entries(config.social)\n .filter(([_, href]) => href)\n .map(([platform, href]) => ({ platform, href: href as string }))\n : undefined\n }\n />\n )}\n </>\n )}\n \n {/* Show belowDescriptionContent on left even when description is moved to right */}\n {config.moveDescriptionToRight && config.keepBelowDescriptionLeft && config.belowDescriptionContent && (\n <Suspense fallback={<Skeleton className=\"h-8 w-full\" />}>\n {config.belowDescriptionContent as any}\n </Suspense>\n )}\n </div>\n \n {/* Dynamic sections - 1 column each on all screens */}\n {config.sections.map((section, index) => (\n <div key={index} className=\"flex flex-col gap-3 items-start text-left col-span-1\">\n <h3 className=\"text-h5 tracking-[-0.02em] text-ods-text-muted\">\n {section.title}\n </h3>\n <div className=\"flex flex-col gap-3\">\n {section.links.map((link, linkIndex) => (\n <Suspense key={linkIndex} fallback={<NavLinkSkeleton />}>\n {linkRenderer(link) as any}\n </Suspense>\n ))}\n </div>\n </div>\n ))}\n \n {/* Custom component column - full width on mobile and medium, 1 column on large */}\n {config.customComponent && (\n <div className=\"flex flex-col col-span-2 md:col-span-1 lg:col-span-1 justify-center\">\n <Suspense fallback={<Skeleton className=\"h-32 w-full\" />}>\n {config.customComponent as any}\n </Suspense>\n </div>\n )}\n \n {/* Right column content - shows if rightColumnContent is provided OR if moving description to right */}\n {(config.rightColumnContent || config.moveDescriptionToRight) && (\n <div className=\"flex flex-col col-span-2 md:col-span-1 lg:col-span-1 justify-start gap-4 md:gap-6\">\n {/* Show description in right column if moveDescriptionToRight is true */}\n {config.moveDescriptionToRight && (\n <>\n <p className=\"font-body font-medium text-sm md:text-sm leading-[1.43] text-ods-text-primary\">\n {config.description}\n </p>\n \n {/* Custom content below description - only if NOT keeping it on left */}\n {config.belowDescriptionContent && !config.keepBelowDescriptionLeft && (\n <Suspense fallback={<Skeleton className=\"h-8 w-full\" />}>\n {config.belowDescriptionContent as any}\n </Suspense>\n )}\n </>\n )}\n \n {/* Regular right column content */}\n {config.rightColumnContent && (\n <Suspense fallback={<Skeleton className=\"h-32 w-full\" />}>\n {config.rightColumnContent as any}\n </Suspense>\n )}\n </div>\n )}\n </div>\n \n {/* Copyright */}\n <p className=\"font-body font-medium text-md md:text-md leading-[1.33] text-center w-full text-ods-text-muted pt-4 md:pt-0\">\n © {new Date().getFullYear()} {config.legalName}. All rights reserved.\n </p>\n </footer>\n )\n}\n\n","\"use client\"\n\nimport { Button } from './ui/button';\nimport { GitHubIcon, RedditIcon, XLogo, LinkedInIcon, LumaIcon, WhatsAppIcon, GlobeIcon, MessageCircleIcon, TelegramIcon, YouTubeIcon, InstagramIcon, FacebookIcon, SlackIcon } from './icons';\n\ninterface SocialLink {\n platform: string;\n href: string;\n label?: string;\n}\n\ninterface SocialIconRowProps {\n className?: string;\n links?: SocialLink[];\n variant?: \"accent\" | \"outline\" | \"transparent\" | \"destructive\" | null | undefined;\n}\n\nconst defaultLinks: SocialLink[] = [\n { platform: 'github', href: 'https://github.com/flamingo-stack', label: 'GitHub' },\n { platform: 'linkedin', href: 'https://linkedin.com/company/flamingo.run', label: 'LinkedIn' },\n { platform: 'facebook', href: 'https://www.facebook.com/flamingoai.msp', label: 'Facebook' }\n];\n\nfunction renderSocialIcon(platform: string) {\n const normalizedPlatform = platform.toLowerCase().trim();\n\n switch (normalizedPlatform) {\n case 'github':\n return <GitHubIcon className=\"w-5 h-5\" />;\n case 'twitter':\n case 'x':\n return <XLogo className=\"w-5 h-5\" />;\n case 'reddit':\n return <RedditIcon className=\"w-5 h-5\" variant=\"white\" />;\n case 'linkedin':\n return <LinkedInIcon className=\"w-5 h-5\" />;\n case 'luma':\n return <LumaIcon className=\"w-5 h-5\" />;\n case 'whatsapp':\n return <WhatsAppIcon className=\"w-5 h-5\" />;\n case 'website':\n case 'web':\n case 'url':\n return <GlobeIcon className=\"w-5 h-5\" />;\n case 'slack':\n return <SlackIcon className=\"w-5 h-5\" injectedColor=\"white\" />;\n case 'discord':\n return <MessageCircleIcon className=\"w-5 h-5\" />;\n case 'telegram':\n return <TelegramIcon className=\"w-5 h-5\" />;\n case 'youtube':\n case 'yt':\n return <YouTubeIcon className=\"w-5 h-5\" />;\n case 'instagram':\n case 'ig':\n return <InstagramIcon className=\"w-5 h-5\" />;\n case 'facebook':\n case 'fb':\n return <FacebookIcon className=\"w-5 h-5\" />;\n default:\n return <GlobeIcon className=\"w-5 h-5\" />;\n }\n}\n\nexport function SocialIconRow({ className = '', links = defaultLinks, variant = 'outline' }: SocialIconRowProps) {\n return (\n <div className={`flex flex-row gap-3 w-full ${className}`}>\n {links.map((link, index) => (\n <Button\n key={index}\n asChild\n variant={variant}\n size=\"icon\"\n className=\"flex-1\"\n >\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={link.label || link.platform}\n >\n {renderSocialIcon(link.platform)}\n </a>\n </Button>\n ))}\n </div>\n );\n} ","\"use client\"\n\nimport { useSearchParams, useRouter } from \"../embed-shims/next-navigation\"\nimport { useTransition } from \"react\"\n\n/**\n * Unified AND Filter Logic\n * \n * This module provides common filtering logic that uses AND operations\n * instead of OR operations for all filter combinations.\n */\n\nexport interface FilterState {\n search?: string\n categories?: string[]\n subcategories?: string[]\n tags?: string[]\n filters?: string[]\n pricing?: string\n page?: number\n}\n\nexport interface FilterConfig {\n basePath: string\n supportedFilters: {\n categories?: boolean\n subcategories?: boolean\n tags?: boolean\n filters?: boolean\n pricing?: boolean\n search?: boolean\n }\n}\n\n/**\n * Hook for managing AND-based filter logic\n */\nexport function useUnifiedFiltering(config: FilterConfig) {\n const router = useRouter()\n const searchParams = useSearchParams()\n const [isPending, startTransition] = useTransition()\n\n // Parse current filter state from URL\n const getCurrentFilterState = (): FilterState => {\n const search = searchParams?.get('search') || undefined\n const categories = searchParams?.get('category')?.split(',').filter(Boolean) || []\n const subcategories = searchParams?.get('subcategory')?.split(',').filter(Boolean) || []\n const tags = searchParams?.get('tag')?.split(',').filter(Boolean) || []\n const filters = searchParams?.getAll('filter') || []\n const pricing = searchParams?.get('pricing') || undefined\n const page = parseInt(searchParams?.get('page') || \"1\")\n\n return {\n search,\n categories,\n subcategories,\n tags,\n filters,\n pricing,\n page\n }\n }\n\n // Update filters with AND logic\n const updateFilters = (newFilters: Partial<FilterState>, preserveScroll = false) => {\n const currentState = getCurrentFilterState()\n const updatedState = { ...currentState, ...newFilters }\n \n // Always reset to page 1 when filters change (unless explicitly preserving page)\n if (!newFilters.hasOwnProperty('page')) {\n updatedState.page = 1\n }\n\n const params = new URLSearchParams()\n\n // Add search parameter\n if (updatedState.search && config.supportedFilters.search) {\n params.set('search', updatedState.search)\n }\n\n // Add category parameters (AND logic - all must match)\n if (updatedState.categories && updatedState.categories.length > 0 && config.supportedFilters.categories) {\n params.set('category', updatedState.categories.join(','))\n }\n\n // Add subcategory parameters (AND logic - all must match)\n if (updatedState.subcategories && updatedState.subcategories.length > 0 && config.supportedFilters.subcategories) {\n params.set('subcategory', updatedState.subcategories.join(','))\n }\n\n // Add tag parameters (AND logic - all must match)\n if (updatedState.tags && updatedState.tags.length > 0 && config.supportedFilters.tags) {\n params.set('tag', updatedState.tags.join(','))\n }\n\n // Add filter parameters (AND logic - all must match)\n if (updatedState.filters && updatedState.filters.length > 0 && config.supportedFilters.filters) {\n updatedState.filters.forEach(filter => params.append('filter', filter))\n }\n\n // Add pricing parameter\n if (updatedState.pricing && config.supportedFilters.pricing) {\n params.set('pricing', updatedState.pricing)\n }\n\n // Add page parameter (only if not page 1)\n if (updatedState.page && updatedState.page > 1) {\n params.set('page', updatedState.page.toString())\n }\n\n const currentScrollY = preserveScroll ? window.scrollY : 0\n const newUrl = `${config.basePath}?${params.toString()}`\n\n startTransition(() => {\n router.push(newUrl, { scroll: false })\n \n if (preserveScroll) {\n setTimeout(() => {\n window.scrollTo({\n top: currentScrollY,\n behavior: 'smooth'\n })\n }, 100)\n }\n })\n }\n\n // Add a filter (AND logic)\n const addFilter = (\n type: keyof FilterState,\n value: string,\n preserveScroll = false\n ) => {\n const currentState = getCurrentFilterState()\n const updates: Partial<FilterState> = {}\n\n switch (type) {\n case 'categories':\n updates.categories = [...(currentState.categories || []), value]\n break\n case 'subcategories':\n updates.subcategories = [...(currentState.subcategories || []), value]\n break\n case 'tags':\n updates.tags = [...(currentState.tags || []), value]\n break\n case 'filters':\n updates.filters = [...(currentState.filters || []), value]\n break\n case 'pricing':\n updates.pricing = value\n break\n case 'search':\n updates.search = value\n break\n }\n\n updateFilters(updates, preserveScroll)\n }\n\n // Remove a filter (AND logic)\n const removeFilter = (\n type: keyof FilterState,\n value?: string,\n preserveScroll = true\n ) => {\n const currentState = getCurrentFilterState()\n const updates: Partial<FilterState> = {}\n\n switch (type) {\n case 'categories':\n updates.categories = value \n ? (currentState.categories || []).filter(c => c !== value)\n : []\n break\n case 'subcategories':\n updates.subcategories = value \n ? (currentState.subcategories || []).filter(s => s !== value)\n : []\n break\n case 'tags':\n updates.tags = value \n ? (currentState.tags || []).filter(t => t !== value)\n : []\n break\n case 'filters':\n updates.filters = value \n ? (currentState.filters || []).filter(f => f !== value)\n : []\n break\n case 'pricing':\n updates.pricing = undefined\n break\n case 'search':\n updates.search = undefined\n break\n }\n\n updateFilters(updates, preserveScroll)\n }\n\n // Toggle a filter (AND logic)\n const toggleFilter = (\n type: keyof FilterState,\n value: string,\n preserveScroll = false\n ) => {\n const currentState = getCurrentFilterState()\n let currentValues: string[] = []\n\n switch (type) {\n case 'categories':\n currentValues = currentState.categories || []\n break\n case 'subcategories':\n currentValues = currentState.subcategories || []\n break\n case 'tags':\n currentValues = currentState.tags || []\n break\n case 'filters':\n currentValues = currentState.filters || []\n break\n case 'pricing':\n // Pricing is single-select, so toggle on/off\n if (currentState.pricing === value) {\n removeFilter('pricing', value, preserveScroll)\n } else {\n addFilter('pricing', value, preserveScroll)\n }\n return\n case 'search':\n // Search is single-value, so just update\n updateFilters({ search: value }, preserveScroll)\n return\n }\n\n if (currentValues.includes(value)) {\n removeFilter(type, value, preserveScroll)\n } else {\n addFilter(type, value, preserveScroll)\n }\n }\n\n // Clear all filters\n const clearAllFilters = () => {\n startTransition(() => {\n router.push(config.basePath, { scroll: false })\n })\n }\n\n // Get filter chips for display\n const getFilterChips = (categories?: any[], tags?: any[]) => {\n const currentState = getCurrentFilterState()\n const chips: Array<{\n id: string\n label: string\n type: 'category' | 'subcategory' | 'tag' | 'filter' | 'pricing'\n }> = []\n\n // Category chips\n if (currentState.categories && categories) {\n currentState.categories.forEach(categorySlug => {\n const category = categories.find((c: any) => c.slug === categorySlug)\n if (category) {\n chips.push({\n id: `category-${categorySlug}`,\n label: category.name,\n type: 'category'\n })\n }\n })\n }\n\n // Subcategory chips\n if (currentState.subcategories && categories) {\n currentState.subcategories.forEach(subcategorySlug => {\n // Find subcategory across all categories\n for (const category of categories) {\n if (category.subcategories) {\n const subcategory = category.subcategories.find((s: any) => s.slug === subcategorySlug)\n if (subcategory) {\n chips.push({\n id: `subcategory-${subcategorySlug}`,\n label: subcategory.name,\n type: 'subcategory'\n })\n break\n }\n }\n }\n })\n }\n\n // Tag chips\n if (currentState.tags && tags) {\n currentState.tags.forEach(tagSlug => {\n const tag = tags.find((t: any) => t.slug === tagSlug)\n if (tag) {\n chips.push({\n id: `tag-${tagSlug}`,\n label: tag.name,\n type: 'tag'\n })\n }\n })\n }\n\n // Filter chips\n if (currentState.filters) {\n currentState.filters.forEach(filterKey => {\n chips.push({\n id: `filter-${filterKey}`,\n label: getFilterLabel(filterKey),\n type: 'filter'\n })\n })\n }\n\n // Pricing chip\n if (currentState.pricing) {\n chips.push({\n id: `pricing-${currentState.pricing}`,\n label: getPricingLabel(currentState.pricing),\n type: 'pricing'\n })\n }\n\n return chips\n }\n\n // Handle filter chip removal\n const handleFilterChipRemove = (chipId: string) => {\n const [type, ...idParts] = chipId.split('-')\n const id = idParts.join('-')\n\n switch (type) {\n case 'category':\n removeFilter('categories', id)\n break\n case 'subcategory':\n removeFilter('subcategories', id)\n break\n case 'tag':\n removeFilter('tags', id)\n break\n case 'filter':\n removeFilter('filters', id)\n break\n case 'pricing':\n removeFilter('pricing', id)\n break\n }\n }\n\n return {\n getCurrentFilterState,\n updateFilters,\n addFilter,\n removeFilter,\n toggleFilter,\n clearAllFilters,\n getFilterChips,\n handleFilterChipRemove,\n isPending\n }\n}\n\nimport { formatClassification, formatPricingModel } from '../utils/format-text-stub'\n\n// Helper functions for filter labels\nfunction getFilterLabel(filterKey: string): string {\n const customLabels: Record<string, string> = {\n 'recommended': 'Recommended',\n 'featured': 'Featured'\n }\n return customLabels[filterKey] || formatClassification(filterKey)\n}\n\nfunction getPricingLabel(pricingKey: string): string {\n return formatPricingModel(pricingKey)\n}\n\n/**\n * Vendor-specific filter configuration\n */\nexport const vendorFilterConfig: FilterConfig = {\n basePath: '/vendors',\n supportedFilters: {\n categories: true,\n subcategories: true,\n tags: false,\n filters: true,\n pricing: true,\n search: true\n }\n}\n\n/**\n * Blog-specific filter configuration\n */\nexport const blogFilterConfig: FilterConfig = {\n basePath: '/blog',\n supportedFilters: {\n categories: true,\n subcategories: false,\n tags: true,\n filters: false,\n pricing: false,\n search: true\n }\n} ","// Stub for format-text utilities\nexport function formatText(text: string): string {\n return text;\n}\n\nexport function truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.slice(0, maxLength) + '...';\n}\n\nexport function formatClassification(classification: string): string {\n return classification.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\n}\n\nexport function formatPricingModel(pricing: string): string {\n return pricing.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\n}","\"use client\"\n\n// Components exports\nexport * from './chat'\nexport * from './features'\nexport * from './icons'\nexport * from './navigation'\nexport * from './platform'\nexport * from './ui'\n\n// Individual component exports\nexport * from './announcement-bar'\nexport * from './hover-card'\nexport * from './categories-cart'\nexport * from './category-card'\nexport * from './comment-card'\nexport * from './content-loading-container'\nexport * from './dynamic-skeleton'\nexport * from './empty-state'\nexport * from './faq-accordion'\nexport * from './filter-chip'\nexport * from './footer'\nexport * from './unified-filter-logic'\nexport * from './unified-pagination'\nexport * from './footer-waitlist-button'\nexport * from './hero-image-uploader'\nexport * from './icons-block'\nexport * from './image-cropper'\nexport * from './media-carousel'\nexport * from './metric-value'\nexport * from './msp-display'\nexport * from './open-source-features'\nexport * from './pagination'\nexport * from './persistent-filter-controls'\nexport * from './persistent-pagination'\nexport * from './pricing-display'\nexport * from './results-count'\nexport * from './selection-source-badge'\nexport * from './social-icon-row'\nexport * from './user-display'\nexport * from './vendor-display-button'\nexport * from './vendor-icon'\nexport * from './vendor-page-skeleton'\nexport * from './vendor-tag'\nexport * from './why-it-matters'\nexport * from './yes-no-display'\n// Removed duplicate PageContainer export - already exported from './ui/page-container'\nexport * from './made-with-love'\n\n// Loading components\nexport * from './loading'\n\n// Auth-related exports\nexport * from './auth-stub'\n\n// Date/Time components\nexport * from './date-time-picker'\n\n// Chat components\nexport * from './chat'\n\n// Onboarding components\nexport * from './shared/onboarding'\n\n// Doc-search bar — unified RAG-search dropdown used by the data-room\n// sidebar AND the onboarding-guide catalog. Pure presentation; hosts\n// own the `useDocSearch` hook and pass results in as props.\nexport * from './shared/doc-search'\n\n// Product Release components\nexport * from './shared/product-release'\n\n// Dev-center shared components (Roadmap / Delivery / DevSectionView chrome)\nexport * from './shared/dev-section'\nexport * from './shared/roadmap'\nexport * from './shared/delivery'\n\n// Legal-document shared component (privacy policy, terms of service)\nexport * from './shared/legal-document'\n\n// Detail Page Skeleton\nexport { DetailPageSkeleton, type DetailPageSkeletonProps } from './shared/detail-page-skeleton'\n\n// Priority UI components that exist in main components directory\n// Note: These are re-exported from ./ui already, no need to duplicate\n","'use client';\n\nimport { useRouter } from '../embed-shims/next-navigation';\nimport { useChatRuntime } from '../contexts/chat-runtime-context';\nimport { executeNavigationImperative } from './chat/utils/execute-navigation';\nimport { useCallback } from 'react';\nimport { OpenFrameLogo } from './icons';\nimport { Button } from './ui/button';\n\nexport interface FooterWaitlistButtonProps {\n className?: string;\n}\n\n/**\n * Small wrapper around JoinWaitlistButton for use inside the footer.\n *\n * Routes through the host's unified-navigation hook\n * (`runtime.navigation.navigate`) when a `ChatRuntimeContext` is\n * mounted — that's the same path EVERY other in-app navigation\n * surface uses (source chips, inline cards, search-autocomplete,\n * action cards). One rule, one decision tree across the whole app.\n * The hub's `HubRuntimeProvider` wires `navigate` to its `useUnifiedNav`\n * helper, so this button picks up cross-platform new-tab decisions,\n * same-URL re-scroll handling, embed-mode short-circuiting, and any\n * future host-side nav rules for free.\n *\n * Falls back to the embed-shim's `router.push` when no runtime is\n * mounted (third-party embedders who haven't set up\n * `ChatRuntimeContext` — the lib stays usable without forcing them\n * to wire the full chat-runtime).\n *\n * Target URL: `/waitlist#top`. `#top` is the canonical \"scroll to\n * page top\" anchor — the destination page has an explicit\n * `<div id=\"top\">` at the top of `<main>` so native browser anchor\n * scroll works in every browser regardless of the HTML5 magic-anchor\n * behavior.\n */\nexport function FooterWaitlistButton({ className }: FooterWaitlistButtonProps) {\n const router = useRouter();\n const runtime = useChatRuntime();\n\n const handleClick = useCallback(() => {\n // The unified nav primitive: host `navigation.navigate` if wired, else the\n // embed-shim router; new-tab/embed decision handled internally.\n executeNavigationImperative({ runtime, href: '/waitlist#top', fallbackNavigate: router.push });\n }, [router, runtime]);\n\n return (\n <Button \n onClick={handleClick} \n className={className}\n leftIcon={<OpenFrameLogo />}\n >\n Join Waitlist\n </Button>\n );\n} ","\"use client\";\n\nimport { useRef, useState } from 'react';\nimport { Loader2, Image as ImageIcon, Upload, X } from 'lucide-react';\nimport { Button } from \"./ui/button\";\nimport { useToast } from \"../hooks/use-toast\";\n\ninterface HeroImageUploaderProps {\n /** Current image URL if one already exists */\n imageUrl?: string;\n /** Callback fired with new image URL (or undefined if removed) */\n onChange: (url: string | undefined) => void;\n /** Upload endpoint (required) */\n uploadEndpoint: string;\n /** Height of drop-zone. Number treated as pixels, string passed directly (e.g. '100%') */\n height?: number | string;\n /** Image object-fit, defaults to cover */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n /** Show a replace/upload button overlay in addition to remove (default true for parity with blog editor) */\n showReplaceButton?: boolean;\n /** If true, skip the actual upload and just return a base64 data URL preview. Useful for unauthenticated flows – the caller can upload later. */\n deferUpload?: boolean;\n /** Optional custom upload handler for authenticated uploads. If provided, this will be used instead of the default fetch */\n onUpload?: (file: File) => Promise<string>;\n /** Optional custom delete handler for authenticated deletion. If provided, this will be used instead of just clearing the image */\n onDelete?: () => Promise<void>;\n}\n\n/**\n * Reusable dashed hero-style image uploader identical to Blog Editor's hero picker.\n * Handles client-side validation (JPEG/PNG/WebP/GIF up to 5 MB), upload, preview & removal.\n */\nexport function HeroImageUploader({ imageUrl, onChange, uploadEndpoint, height = 300, objectFit = 'cover', showReplaceButton = true, deferUpload = false, onUpload, onDelete }: HeroImageUploaderProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const { toast } = useToast();\n const [uploading, setUploading] = useState(false);\n\n const ALLOWED_TYPES = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif'];\n const MAX_SIZE = 5 * 1024 * 1024; // 5MB\n\n const openDialog = () => inputRef.current?.click();\n\n async function handleFile(file?: File) {\n if (!file) return;\n if (!ALLOWED_TYPES.includes(file.type)) {\n toast({ title: 'Invalid file', description: 'Upload JPEG, PNG, WebP, or GIF', variant: 'destructive' });\n return;\n }\n if (file.size > MAX_SIZE) {\n toast({ title: 'File too large', description: 'Max 5MB', variant: 'destructive' });\n return;\n }\n\n if (deferUpload) {\n // Immediately convert to data URL for preview and postpone real upload\n try {\n setUploading(true);\n const reader = new FileReader();\n reader.onload = () => {\n const dataUrl = reader.result as string;\n onChange(dataUrl); // Return data URL so parent can preview & store locally\n setUploading(false);\n };\n reader.onerror = () => {\n toast({ title: 'File error', description: 'Failed to read image file', variant: 'destructive' });\n setUploading(false);\n };\n reader.readAsDataURL(file);\n } catch (err: any) {\n toast({ title: 'File error', description: err.message || 'Failed to process image', variant: 'destructive' });\n setUploading(false);\n } finally {\n if (inputRef.current) inputRef.current.value = '';\n }\n return;\n }\n\n // Upload flow - use custom handler if provided, otherwise use default fetch\n setUploading(true);\n try {\n let uploadedUrl: string;\n \n if (onUpload) {\n // Use custom upload handler (e.g., for authenticated uploads)\n uploadedUrl = await onUpload(file);\n } else {\n // Default upload flow\n const fd = new FormData();\n fd.append('file', file);\n const res = await fetch(uploadEndpoint, { method: 'POST', body: fd });\n if (!res.ok) throw new Error('Upload failed');\n const json = await res.json();\n uploadedUrl = (json.data && json.data.url) || json.url || json.file_url;\n if (!uploadedUrl) throw new Error('Invalid upload response');\n }\n \n onChange(uploadedUrl);\n } catch (err: any) {\n toast({ title: 'Upload error', description: err.message || 'Failed to upload', variant: 'destructive' });\n } finally {\n setUploading(false);\n if (inputRef.current) inputRef.current.value = '';\n }\n }\n\n const handleSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFile(e.target.files?.[0]);\n };\n\n const handleRemove = async () => {\n if (onDelete) {\n try {\n await onDelete();\n } catch (error) {\n // onDelete handler should handle its own error reporting\n return;\n }\n }\n onChange(undefined);\n };\n\n const heightStyle = typeof height === 'number' ? `${height}px` : height;\n\n return (\n <div className=\"w-full h-full max-h-full space-y-2 min-h-[300px]\">\n {imageUrl ? (\n <div className=\"relative group w-full aspect-square md:aspect-auto h-auto md:h-full flex items-center justify-center overflow-hidden\" style={{ height: heightStyle }}>\n <img src={imageUrl} className={`absolute inset-0 w-full h-full object-${objectFit}`} alt=\"Cover\" />\n <div className=\"absolute inset-0 bg-black/40 opacity-0 group-hover:opacity-100 flex items-center justify-center gap-4 transition-opacity rounded-lg\">\n {showReplaceButton && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={openDialog}\n className=\"bg-white text-black hover:bg-gray-100 rounded-full w-12 h-12\"\n >\n <Upload className=\"h-5 w-5\" />\n </Button>\n )}\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => handleRemove()}\n className=\"bg-white text-black hover:bg-gray-100 rounded-full w-12 h-12\"\n >\n <X className=\"h-5 w-5\" />\n </Button>\n </div>\n </div>\n ) : (\n <div\n className={`w-full h-full border-2 border-dashed ${uploading ? 'border-[#FFC008]' : 'border-ods-border hover:border-[#FFC008]'} rounded-lg flex flex-col items-center justify-center cursor-pointer bg-[#1A1A1A]`}\n style={{ height: heightStyle }}\n onClick={openDialog}\n >\n {uploading ? (\n <Loader2 className=\"h-8 w-8 animate-spin text-ods-accent\" />\n ) : (\n <>\n <ImageIcon className=\"h-12 w-12 text-ods-text-secondary\" />\n <span className=\"text-ods-text-primary font-['DM_Sans'] text-[16px] font-medium mt-2\">Upload cover image</span>\n <span className=\"text-ods-text-secondary font-['DM_Sans'] text-[14px] mt-1\">Click to upload or drag and drop</span>\n <span className=\"text-[#666666] font-['DM_Sans'] text-[12px]\">PNG, JPEG, WebP, GIF up to 5MB</span>\n </>\n )}\n </div>\n )}\n\n {/* hidden input */}\n <input ref={inputRef} type=\"file\" accept=\"image/*\" onChange={handleSelect} className=\"hidden\" />\n </div>\n );\n} ","\"use client\";\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport {\n VendorDirectoryIcon,\n OpenSourceIcon,\n CommunityHubIcon,\n VendorsIcon,\n CommunityIcon,\n CompareIcon,\n} from './icons-stub';\nimport { Sun, Moon, CheckCircle, Github, PlusCircle } from 'lucide-react';\n\n// Map lucide icons\nconst SunIcon = Sun;\nconst MoonIcon = Moon;\nconst CheckCircleIcon = CheckCircle;\nconst GitHubIcon = Github;\nconst PlusCircleIcon = PlusCircle;\nconst OpenmspLogo = () => <div>Logo</div>;\n\ninterface IconsBlockProps {\n /**\n * When true, always render the loading placeholder bar regardless of whether the grid is ready.\n * Default behaviour renders placeholder only until the grid is generated.\n */\n loading?: boolean;\n}\n\n// Available icons array - moved outside component to prevent recreating on each render\nconst availableIcons = [\n VendorDirectoryIcon,\n OpenSourceIcon,\n CommunityHubIcon,\n VendorsIcon,\n CommunityIcon,\n CompareIcon,\n SunIcon,\n MoonIcon,\n CheckCircleIcon,\n GitHubIcon,\n PlusCircleIcon,\n OpenmspLogo\n];\n\nexport function ResponsiveIconsBlock({ loading = false }: IconsBlockProps) {\n const [columns, setColumns] = useState(24);\n const [iconGrid, setIconGrid] = useState<Array<Array<React.ComponentType<{ width?: number; height?: number; className?: string }>>>>([]);\n const [iconsLoaded, setIconsLoaded] = useState(false);\n const randomSeedRef = useRef<number>(0);\n\n useEffect(() => {\n function calculateColumns() {\n const cols = Math.ceil(window.innerWidth / 56) + 4;\n setColumns(cols);\n }\n\n calculateColumns();\n window.addEventListener('resize', calculateColumns);\n \n setIconsLoaded(true);\n \n return () => window.removeEventListener('resize', calculateColumns);\n }, []);\n\n // Generate icon grid only on client side\n useEffect(() => {\n if (randomSeedRef.current === 0) {\n randomSeedRef.current = Date.now();\n }\n\n const grid: any[][] = [];\n const totalCells = columns * 2;\n\n for (let idx = 0; idx < totalCells; idx++) {\n const col = idx % columns;\n const row = Math.floor(idx / columns);\n\n // Initialize row if needed\n if (!grid[row]) grid[row] = [];\n\n // Get adjacent icons to avoid\n const adjacentIcons = new Set();\n\n // Check left neighbor (same row, previous column)\n if (col > 0 && grid[row][col - 1]) {\n adjacentIcons.add(grid[row][col - 1]);\n }\n\n // Check top neighbor (previous row, same column)\n if (row > 0 && grid[row - 1] && grid[row - 1][col]) {\n adjacentIcons.add(grid[row - 1][col]);\n }\n\n // Filter available icons to exclude adjacent ones\n const availableOptions = availableIcons.filter(icon => !adjacentIcons.has(icon));\n\n // Generate random selection from available options using the stable seed\n const seed = randomSeedRef.current + idx;\n const pseudoRandom = (seed * 9301 + 49297) % 233280;\n const normalized = pseudoRandom / 233280;\n const iconIndex = Math.floor(normalized * availableOptions.length);\n\n // Assign selected icon to grid\n grid[row][col] = availableOptions[iconIndex] || availableIcons[0]; // Fallback to first icon\n }\n\n setIconGrid(grid);\n }, [columns]);\n\n const displayColumns = columns;\n\n // Get icon for specific position from pre-generated grid\n const getIconForIndex = (index: number) => {\n const col = index % displayColumns;\n const row = Math.floor(index / displayColumns);\n return iconGrid[row]?.[col] || availableIcons[0];\n };\n\n // When explicit loading prop true OR grid not ready → show placeholder\n if (loading || iconGrid.length === 0) {\n return (\n <div\n className=\"w-full h-[80px] md:h-[112px] bg-[#1A1A1A] relative overflow-hidden\"\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n {/* subtle pulse bar */}\n <div className=\"absolute inset-0 animate-pulse bg-[#2A2A2A]/60\" />\n </div>\n );\n }\n\n return (\n <div\n className=\"w-full h-[80px] md:h-[112px] overflow-hidden bg-[#1A1A1A] relative z-10\"\n style={{ margin: 0, padding: 0 }}\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n <style>{`\n .icons-block svg,\n .icons-block svg * {\n filter: grayscale(100%) brightness(0) invert(1) brightness(0.4) !important;\n fill: currentColor !important;\n }\n `}</style>\n <div\n className=\"grid h-full icons-block w-full\"\n style={{\n gridTemplateColumns: `repeat(${displayColumns}, 56px)`,\n gridTemplateRows: 'repeat(2, 1fr)',\n }}\n >\n {Array.from({ length: displayColumns * 2 }).map((_, idx) => {\n const col = idx % displayColumns;\n const row = Math.floor(idx / displayColumns);\n const IconComponent = getIconForIndex(idx);\n\n return (\n <div\n key={idx}\n className=\"flex items-center justify-center w-full h-full\"\n style={{\n background: '#1A1A1A',\n borderRight: col !== displayColumns - 1 ? '0.5px solid rgba(66, 66, 66, 0.5)' : undefined,\n borderBottom: row === 0 ? '0.5px solid rgba(66, 66, 66, 0.5)' : undefined,\n margin: 0,\n padding: '8px',\n boxSizing: 'border-box',\n }}\n role=\"presentation\"\n >\n <IconComponent\n width={16}\n height={16}\n className=\"text-[#666666] md:w-5 md:h-5\"\n aria-hidden=\"true\"\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n} ","// Stub implementations for missing icons\nimport { DollarSign, Code, Users, Building, GitCompare, MessageSquare } from \"lucide-react\";\n\nexport const OpenSourceIcon = Code;\nexport const CoinsIcon = DollarSign;\nexport const VendorDirectoryIcon = Building;\nexport const CommunityHubIcon = Users;\nexport const VendorsIcon = Building;\nexport const CommunityIcon = MessageSquare;\nexport const CompareIcon = GitCompare;\n\n// OpenmspLogo moved to real implementation (should be imported from main project)\n\n// OpenFrameLogo moved to real implementation in ./openframe-logo.tsx","/*\n ImageCropper.tsx\n ----------------\n Reusable React component for interactive image cropping with:\n • Drag / resize cropping via react-easy-crop\n • Custom aspect ratio or free-form\n • Optional circular crop overlay (avatar mode)\n • Automatic scaling so the exported image never exceeds maxSizePx\n • Returns PNG data URL + Blob on confirm\n • Responsive / accessible with shadcn/ui Button & Slider components\n\n Styling relies on Tailwind + shadcn design tokens.\n*/\n\n\"use client\"\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport Cropper from \"react-easy-crop\"\nimport { Button } from \"./ui/button\"\nimport { Slider } from \"./ui/slider\"\nimport { cn } from \"../utils/cn\"\nimport { Check, RotateCcw } from \"lucide-react\"\n\n/* ------------------------------------------------------------\n * Types\n * ----------------------------------------------------------*/\n\nexport interface ImageCropperResult {\n /** Cropped PNG data URL */\n dataUrl: string\n /** Corresponding PNG Blob */\n blob: Blob\n}\n\nexport interface ImageCropperProps {\n /** Source image (URL or data URI) */\n src: string\n /** Called when user confirms crop */\n onComplete(result: ImageCropperResult): void\n /** Called when user cancels crop */\n onCancel?(): void\n /** Aspect ratio (width / height). If omitted, free-form */\n aspectRatio?: number\n /** Enable circular crop overlay for avatars */\n circular?: boolean\n /** Maximum width/height for the exported PNG (defaults 512) */\n maxSizePx?: number\n /** Optional className for wrapper */\n className?: string\n}\n\n/* ------------------------------------------------------------\n * Helpers\n * ----------------------------------------------------------*/\n\nfunction degToRad(deg: number) {\n return (deg * Math.PI) / 180\n}\n\n/** Util to create an HTMLImageElement that resolves when loaded */\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image()\n img.crossOrigin = \"anonymous\" // prevent canvas tainting\n img.onload = () => resolve(img)\n img.onerror = () => reject(new Error(\"Failed to load image\"))\n img.src = src\n })\n}\n\n/* ------------------------------------------------------------\n * Component\n * ----------------------------------------------------------*/\n\nexport const ImageCropper: React.FC<ImageCropperProps> = ({\n src,\n onComplete,\n onCancel,\n aspectRatio,\n circular = false,\n maxSizePx = 512,\n className,\n}) => {\n const [crop, setCrop] = useState({ x: 0, y: 0 })\n const [zoom, setZoom] = useState(1)\n const [rotation, setRotation] = useState(0)\n const [croppedAreaPixels, setCroppedAreaPixels] = useState<\n | { x: number; y: number; width: number; height: number }\n | null\n >(null)\n\n /* ------------------ crop complete callback -----------------*/\n const onCropComplete = useCallback((_: any, area: any) => {\n setCroppedAreaPixels(area)\n }, [])\n\n /* ------------------ Build checkered background --------------*/\n const checkerBg =\n \"bg-[length:16px_16px] bg-[linear-gradient(45deg,transparent_25%,#2a2a2a_25%,#2a2a2a_75%,transparent_75%,transparent),linear-gradient(45deg,#2a2a2a_25%,transparent_25%,transparent_75%,#2a2a2a_75%,#2a2a2a)]\"\n\n /* ------------------ Export logic ---------------------------*/\n const exportCrop = useCallback(async () => {\n if (!croppedAreaPixels) return undefined\n\n const img = await loadImage(src)\n\n // Create canvas the size of crop\n const canvas = document.createElement(\"canvas\")\n\n // Scale crop to fit maxSizePx\n const scale = Math.min(1, maxSizePx / Math.max(croppedAreaPixels.width, croppedAreaPixels.height))\n const outputW = Math.round(croppedAreaPixels.width * scale)\n const outputH = Math.round(croppedAreaPixels.height * scale)\n\n canvas.width = outputW\n canvas.height = outputH\n const ctx = canvas.getContext(\"2d\")!\n\n // Draw cropped portion\n ctx.drawImage(\n img,\n croppedAreaPixels.x,\n croppedAreaPixels.y,\n croppedAreaPixels.width,\n croppedAreaPixels.height,\n 0,\n 0,\n outputW,\n outputH,\n )\n\n // If circular mode, clip to circle\n if (circular) {\n const temp = document.createElement(\"canvas\")\n temp.width = outputW\n temp.height = outputH\n const tctx = temp.getContext(\"2d\")!\n tctx.beginPath()\n tctx.arc(outputW / 2, outputH / 2, outputW / 2, 0, Math.PI * 2)\n tctx.closePath()\n tctx.clip()\n tctx.drawImage(canvas, 0, 0)\n canvas.width = outputW\n canvas.height = outputH\n ctx.clearRect(0, 0, outputW, outputH)\n ctx.drawImage(temp, 0, 0)\n }\n\n return new Promise<ImageCropperResult>((resolve) => {\n canvas.toBlob(\n (blob) => {\n if (!blob) throw new Error(\"Canvas export failed\")\n const reader = new FileReader()\n reader.onloadend = () => {\n resolve({ dataUrl: reader.result as string, blob })\n }\n reader.readAsDataURL(blob)\n },\n \"image/png\",\n )\n })\n }, [croppedAreaPixels, circular, maxSizePx, src]) as () => Promise<ImageCropperResult | undefined>\n\n /* ------------------ Keyboard accessibility -----------------*/\n const handleKey = (e: React.KeyboardEvent) => {\n // Enter to confirm, Esc to cancel\n if (e.key === \"Enter\") {\n e.preventDefault()\n void exportCrop().then((res) => {\n if (res) onComplete(res)\n })\n } else if (e.key === \"Escape\") {\n e.preventDefault()\n onCancel?.()\n }\n }\n\n /* ------------------ Render ---------------------------------*/\n return (\n <div\n className={cn(\n \"relative flex flex-col gap-4 w-full\",\n className,\n )}\n onKeyDown={handleKey}\n tabIndex={0}\n aria-label=\"Image cropper\"\n >\n {/* Cropper container */}\n <div\n className={cn(\n \"relative w-full aspect-square md:aspect-video rounded-md overflow-hidden\",\n checkerBg,\n )}\n >\n <Cropper\n image={src}\n crop={crop}\n zoom={zoom}\n rotation={rotation}\n aspect={aspectRatio}\n cropShape={circular ? \"round\" : \"rect\"}\n showGrid={false}\n onCropChange={setCrop}\n onZoomChange={setZoom}\n onRotationChange={setRotation}\n onCropComplete={onCropComplete}\n objectFit=\"contain\"\n />\n </div>\n\n {/* Controls */}\n <div className=\"flex flex-col gap-4\">\n {/* Zoom */}\n <div className=\"flex items-center gap-3\">\n <span className=\"min-w-[60px] text-sm\">Zoom</span>\n <Slider\n min={1}\n max={3}\n step={0.01}\n value={[zoom]}\n onValueChange={(v) => setZoom(v[0])}\n aria-label=\"Zoom\"\n className=\"flex-1\"\n />\n </div>\n {/* Rotate */}\n <div className=\"flex items-center gap-3\">\n <span className=\"min-w-[60px] text-sm\">Rotate</span>\n <Slider\n min={0}\n max={360}\n step={1}\n value={[rotation]}\n onValueChange={(v) => setRotation(v[0])}\n aria-label=\"Rotation\"\n className=\"flex-1\"\n />\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setRotation(0)}\n aria-label=\"Reset rotation\"\n >\n <RotateCcw className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex justify-end gap-2 mt-2\">\n {onCancel && (\n <Button variant=\"outline\" onClick={onCancel} aria-label=\"Cancel crop\">\n Cancel\n </Button>\n )}\n <Button\n variant=\"accent\"\n onClick={async () => {\n const result = await exportCrop()\n if (result) onComplete(result)\n }}\n leftIcon={<Check className=\"h-4 w-4\" />}\n aria-label=\"Apply crop\"\n >\n Apply\n </Button>\n </div>\n </div>\n )\n} ","\"use client\";\n\nimport { useState, useRef, useEffect, memo, useCallback } from 'react';\nimport { cn } from \"../utils/cn\";\nimport { MediaItem } from '../utils/media-carousel-utils-stub';\nimport { Video, extractYouTubeId } from './features/video';\nimport { PlayIcon } from './icons-v2-generated/media-playback/play-icon';\n\n// Navigation icons\nconst ChevronLeftIcon = () => (\n <svg width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <polyline points=\"15,18 9,12 15,6\"/>\n </svg>\n);\n\nconst ChevronRightIcon = () => (\n <svg width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <polyline points=\"9,18 15,12 9,6\"/>\n </svg>\n);\n\ninterface MediaCarouselProps {\n media: MediaItem[];\n className?: string;\n /** Use aspect ratio instead of height classes for stable dimensions */\n aspectRatio?: '16/9' | '4/3' | '3/2' | '1/1';\n showThumbnails?: boolean;\n autoPlay?: boolean;\n /** How content should fit within the container */\n objectFit?: 'contain' | 'cover';\n}\n\nexport const MediaCarousel = memo(function MediaCarousel({ \n media, \n className,\n aspectRatio = \"16/9\",\n showThumbnails = true,\n autoPlay = false,\n objectFit = 'contain'\n}: MediaCarouselProps) {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const carouselRef = useRef<HTMLDivElement>(null);\n const thumbnailsRef = useRef<HTMLDivElement>(null);\n\n // Clamp `currentIndex` whenever `media` shrinks (e.g. an admin removes\n // a slide while the user is on the last one) so the thumbnail active\n // state + `currentItem` lookup stay in sync. Without this, the\n // `media[currentIndex] || media[0]` fallback renders the first slide\n // but every thumbnail's `isActive = index === currentIndex` reads\n // false — visually nothing is selected.\n useEffect(() => {\n if (currentIndex >= media.length && media.length > 0) {\n setCurrentIndex(media.length - 1);\n }\n }, [media.length, currentIndex]);\n\n // Early return if no media provided\n if (!media || media.length === 0) {\n return null;\n }\n\n const currentItem = media[currentIndex] || media[0];\n\n // Additional safety check\n if (!currentItem) {\n return null;\n }\n\n // Navigation functions — `<Video>` (MuxPlayer/YT facade) owns its own\n // play/pause lifecycle, so the previous bare-`<video>`-element pause\n // logic in nextSlide/prevSlide/selectSlide is no longer needed.\n const nextSlide = useCallback(() => {\n setCurrentIndex((prev) => (prev + 1) % media.length);\n }, [media.length]);\n\n const prevSlide = useCallback(() => {\n setCurrentIndex((prev) => (prev - 1 + media.length) % media.length);\n }, [media.length]);\n\n const selectSlide = useCallback((index: number) => {\n if (index === currentIndex) return;\n setCurrentIndex(index);\n }, [currentIndex]);\n\n // Keyboard navigation - only when carousel is focused\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (media.length <= 1) return;\n \n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n prevSlide();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n nextSlide();\n }\n }, [nextSlide, prevSlide, media.length]);\n\n // Touch/swipe handling\n const minSwipeDistance = 50;\n\n const onTouchStart = (e: React.TouchEvent) => {\n setTouchEnd(null);\n setTouchStart(e.targetTouches[0].clientX);\n };\n\n const onTouchMove = (e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n };\n\n const onTouchEnd = () => {\n if (!touchStart || !touchEnd) return;\n \n const distance = touchStart - touchEnd;\n const isLeftSwipe = distance > minSwipeDistance;\n const isRightSwipe = distance < -minSwipeDistance;\n\n if (isLeftSwipe && media.length > 1) {\n nextSlide();\n }\n if (isRightSwipe && media.length > 1) {\n prevSlide();\n }\n };\n\n // Render YouTube embed via the SSoT `<Video>` — same lite-youtube\n // facade everywhere, no carousel-local fork.\n const renderYouTubeEmbed = (item: MediaItem, index: number) => (\n <Video\n kind=\"youtube\"\n url={item.src}\n title={item.alt || `Video ${index + 1}`}\n layout=\"fill\"\n priority={index === currentIndex}\n />\n );\n\n // Render video via the SSoT `<Video>` — MuxPlayer handles both HLS\n // and plain MP4, so the carousel no longer needs its own bare\n // `<video>` element + custom play overlay + 60 LOC of error handling.\n const renderVideo = (item: MediaItem, index: number) => (\n <Video\n url={item.src}\n poster={item.poster}\n muted\n layout=\"fill\"\n priority={index === currentIndex}\n />\n );\n\n // Render image\n const renderImage = (item: MediaItem, index: number) => (\n <div className=\"absolute inset-0 bg-black\">\n <img \n src={item.src} \n alt={item.alt || `Media ${index + 1}`} \n className={`w-full h-full object-${objectFit}`}\n loading=\"lazy\"\n onError={(e) => {\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n }}\n />\n </div>\n );\n\n // Render main media item\n const renderMainMedia = (item: MediaItem, index: number) => {\n switch (item.type) {\n case 'youtube':\n return renderYouTubeEmbed(item, index);\n case 'video':\n return renderVideo(item, index);\n case 'image':\n default:\n return renderImage(item, index);\n }\n };\n\n // Render thumbnail\n const renderThumbnail = (item: MediaItem, index: number) => {\n const isActive = index === currentIndex;\n \n let thumbnailSrc = item.src;\n if (item.type === 'youtube') {\n // Use the SSoT `extractYouTubeId` (strict URL parsing, ReDoS-safe)\n // rather than a local regex so YouTube id extraction has a single\n // implementation across the lib.\n const videoId = extractYouTubeId(item.src);\n thumbnailSrc = videoId ? `https://img.youtube.com/vi/${videoId}/mqdefault.jpg` : item.src;\n } else if (item.type === 'video' && item.poster) {\n thumbnailSrc = item.poster;\n }\n\n return (\n <button\n key={index}\n onClick={() => selectSlide(index)}\n className={cn(\n \"relative flex-shrink-0 overflow-hidden transition-all duration-200\",\n \"w-20 h-20 md:w-24 md:h-24 rounded-lg border-2\",\n isActive \n ? \"border-[#FFC008] ring-2 ring-[#FFC008]/20\" \n : \"border-ods-border hover:border-[#888888]\"\n )}\n >\n <img\n src={thumbnailSrc}\n alt={item.alt || `Thumbnail ${index + 1}`}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n \n {/* Play icon overlay for videos */}\n {(item.type === 'video' || item.type === 'youtube') && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/30\">\n <div className=\"bg-black/70 rounded-full p-1\">\n <PlayIcon size={12} color=\"white\" />\n </div>\n </div>\n )}\n \n {/* Active indicator */}\n {isActive && (\n <div className=\"absolute bottom-1 right-1 w-2 h-2 bg-[#FFC008] rounded-full\" />\n )}\n </button>\n );\n };\n\n // Get CSS for aspect ratio\n const getAspectRatioClass = () => {\n switch (aspectRatio) {\n case '4/3':\n return 'aspect-[4/3]';\n case '3/2':\n return 'aspect-[3/2]';\n case '1/1':\n return 'aspect-square';\n case '16/9':\n default:\n return 'aspect-video';\n }\n };\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {/* Main Display Area with Fixed Aspect Ratio */}\n <div \n ref={carouselRef}\n className={cn(\n \"relative bg-[#161616] border border-ods-border rounded-2xl overflow-hidden group w-full\",\n getAspectRatioClass()\n )}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n onKeyDown={media.length > 1 ? handleKeyDown : undefined}\n tabIndex={media.length > 1 ? 0 : undefined}\n role={media.length > 1 ? \"region\" : undefined}\n aria-label={media.length > 1 ? \"Media carousel, use arrow keys to navigate\" : undefined}\n >\n {/* Media content */}\n {renderMainMedia(currentItem, currentIndex)}\n\n {/* Navigation Arrows - only show if multiple items */}\n {media.length > 1 && (\n <>\n <button\n onClick={prevSlide}\n className=\"absolute left-3 top-1/2 transform -translate-y-1/2 bg-black/50 text-white rounded-full p-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 hover:bg-black/70 z-10\"\n aria-label=\"Previous media\"\n >\n <ChevronLeftIcon />\n </button>\n\n <button\n onClick={nextSlide}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 bg-black/50 text-white rounded-full p-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 hover:bg-black/70 z-10\"\n aria-label=\"Next media\"\n >\n <ChevronRightIcon />\n </button>\n\n {/* Media Counter */}\n <div className=\"absolute top-3 right-3 bg-black/70 text-white px-3 py-1 rounded-lg text-sm font-medium\">\n {currentIndex + 1} / {media.length}\n </div>\n </>\n )}\n </div>\n\n {/* Thumbnail Navigation - only show if multiple items and showThumbnails is true */}\n {media.length > 1 && showThumbnails && (\n <div className=\"w-full\">\n <div \n ref={thumbnailsRef}\n className=\"flex gap-2 overflow-x-auto scrollbar-none py-2\"\n style={{ scrollbarWidth: 'none', msOverflowStyle: 'none' }}\n >\n {media.map((item, index) => renderThumbnail(item, index))}\n </div>\n </div>\n )}\n </div>\n );\n}); ","\"use client\"\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\n\ninterface MetricValueProps {\n value: string | number;\n label: string;\n className?: string;\n}\n\n/**\n * Displays a numeric/short textual value followed by a smaller grey label.\n * Example: 30s Generation Time\n */\nexport function MetricValue({ value, label, className }: MetricValueProps) {\n return (\n <div className={cn('flex items-end gap-2 whitespace-nowrap font-[\"DM_Sans\"] text-lg leading-[24px] text-ods-text-primary', className)}>\n {value}\n <span className=\"text-sm text-ods-text-secondary\">\n {label}\n </span>\n </div>\n );\n} ","\"use client\"\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { SquareAvatar } from './square-avatar';\n\ninterface MSPDisplayProps {\n name: string;\n logoUrl?: string | null;\n size?: number; // avatar size in px (square)\n className?: string;\n}\n\nexport function MSPDisplay({ name, logoUrl, size = 40, className }: MSPDisplayProps) {\n return (\n <div className={cn('flex items-center gap-2 min-w-0', className)}>\n <SquareAvatar src={logoUrl ?? undefined} fallbackName={name} size={size} />\n <h2 className=\"truncate pl-2\">\n {name}\n </h2>\n </div>\n );\n} ","\"use client\";\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { getProxiedImageUrl } from '../utils/image-proxy';\n\ninterface SquareAvatarProps {\n /** Image URL (if null/undefined, renders initials fallback) */\n src?: string | null;\n /** Fallback name used to derive initials when no image */\n fallbackName?: string;\n /** Size in px (applied to width & height). Defaults to 56 (Tailwind w-14 h-14). */\n size?: number;\n /** If true, avatar takes full width with square aspect ratio */\n fullWidth?: boolean;\n className?: string;\n}\n\n/**\n * Square avatar with rounded edges used across cards / dashboards.\n * Automatically shows image (via proxied URL) or initials fallback.\n */\nexport function SquareAvatar({ src, fallbackName = '', size = 56, fullWidth = false, className }: SquareAvatarProps) {\n const initials = React.useMemo(() => {\n if (!fallbackName) return '';\n return fallbackName\n .split(' ')\n .map((n) => n.charAt(0))\n .join('')\n .slice(0, 2)\n .toUpperCase();\n }, [fallbackName]);\n\n const style: React.CSSProperties = fullWidth ? {} : { width: size, height: size };\n\n return (\n <div\n className={cn(\n 'rounded-lg border border-ods-border flex items-center justify-center overflow-hidden bg-ods-bg-secondary',\n fullWidth ? 'w-full aspect-square' : 'flex-shrink-0',\n className,\n )}\n style={style}\n >\n {src ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={getProxiedImageUrl(src) || src} alt=\"Avatar\" className=\"object-cover w-full h-full\" />\n ) : (\n <span className={cn(\n \"font-['DM_Sans'] text-ods-text-primary font-bold\",\n fullWidth ? 'text-4xl' : 'text-lg'\n )}>\n {initials}\n </span>\n )}\n </div>\n );\n} ","\"use client\"\n\nimport React from 'react';\nimport { Terminal, DollarSign, Network, Users } from 'lucide-react';\n\ninterface FeatureCardProps {\n icon: React.ReactNode;\n title: string;\n description: string;\n}\n\nconst FeatureCard: React.FC<FeatureCardProps> = ({ icon, title, description }) => {\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-3xl p-6 flex flex-col gap-6 h-full hover:bg-[#252525] transition-colors duration-200\">\n {/* Icon Container */}\n <div className=\"w-12 h-12 bg-[#161616] border border-ods-border rounded flex items-center justify-center\">\n <div className=\"w-6 h-6 text-ods-text-secondary\">\n {icon}\n </div>\n </div>\n \n {/* Text Container */}\n <div className=\"flex flex-col gap-2\">\n <h3 className=\"text-h3 text-ods-text-primary tracking-[-0.36px]\">\n {title}\n </h3>\n <p className=\"text-h4 text-ods-text-primary\">\n {description}\n </p>\n </div>\n </div>\n );\n};\n\nconst OpenSourceFeatures: React.FC = () => {\n const features = [\n {\n icon: <Terminal className=\"w-6 h-6\" />,\n title: \"Built on FOSS\",\n description: \"No black boxes. No hidden fees. Just transparent, community-driven software you control.\"\n },\n {\n icon: <DollarSign className=\"w-6 h-6\" />,\n title: \"Own Your Stack\",\n description: \"Replace overpriced, proprietary tools with open, auditable, and customizable components.\"\n },\n {\n icon: <Network className=\"w-6 h-6\" />,\n title: \"Modular by Design\",\n description: \"Add, remove, or extend features with ease — OpenFrame adapts to how you work.\"\n },\n {\n icon: <Users className=\"w-6 h-6\" />,\n title: \"Community-Powered\",\n description: \"Developed with and for MSPs by a global open-source community. You're not just a user — you're part of the roadmap.\"\n }\n ];\n\n return (\n <section className=\"w-full bg-[#161616] py-12 md:py-16 lg:py-20\">\n <div className=\"w-full max-w-[1920px] mx-auto px-6 md:px-20\">\n {/* Section Title */}\n <div className=\"flex flex-col items-center gap-10\">\n <h2 className=\"text-h1 text-center tracking-[-0.02em] text-ods-text-primary w-full\">\n <span className=\"text-ods-accent\">100%</span>\n <span> Open-Source. </span>\n <span className=\"text-ods-accent\">0%</span>\n <span> Bullsh*t.</span>\n </h2>\n \n {/* Features Grid */}\n <div className=\"w-full\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n {features.map((feature, index) => (\n <FeatureCard\n key={index}\n icon={feature.icon}\n title={feature.title}\n description={feature.description}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default OpenSourceFeatures; ","\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface PersistentFilterControlsProps {\n /**\n * Whether the filters are currently in a loading state\n */\n isLoading: boolean\n /**\n * The filter control components (search, sidebar, mobile dropdown)\n */\n children: ReactNode\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Disabled opacity (0-1)\n */\n disabledOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n /**\n * Whether to prevent pointer events during loading\n */\n preventInteraction?: boolean\n}\n\n/**\n * PersistentFilterControls\n * \n * A wrapper component that keeps filter controls visible during loading states\n * but provides visual feedback that they are temporarily disabled.\n * \n * Features:\n * - Reduces opacity and disables pointer events during loading\n * - Maintains layout and accessibility during loading states\n * - Provides smooth transitions between enabled/disabled states\n * - Preserves keyboard navigation and screen reader functionality\n * - Applies consistent disabled styling across all filter types\n * \n * Usage:\n * ```tsx\n * <PersistentFilterControls isLoading={isLoadingVendors}>\n * <SearchContainer />\n * <CategoryFilterSidebar />\n * <MobileDropdown />\n * </PersistentFilterControls>\n * ```\n */\nexport function PersistentFilterControls({\n isLoading,\n children,\n className,\n disabledOpacity = 0.6,\n transitionDuration = 300,\n preventInteraction = true,\n}: PersistentFilterControlsProps) {\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isLoading && preventInteraction && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isLoading ? disabledOpacity : 1,\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"region\"\n aria-label=\"Filter controls\"\n aria-busy={isLoading}\n data-loading={isLoading}\n >\n {/* Loading indicator overlay for screen readers */}\n {isLoading && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n Filters temporarily disabled while loading content\n </div>\n )}\n\n {/* Filter controls with disabled state styling */}\n <div \n className={cn(\n \"transition-all ease-in-out\",\n isLoading && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n >\n {children}\n </div>\n\n {/* Visual loading indicator */}\n {isLoading && (\n <div \n className=\"absolute top-2 right-2 z-10\"\n role=\"status\"\n aria-label=\"Loading filters\"\n >\n <div className=\"w-4 h-4 border-2 border-ods-border border-t-[#FFC008] rounded-full animate-spin\" />\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Enhanced SearchContainer wrapper that integrates with persistent loading\n */\ninterface PersistentSearchContainerProps {\n isLoading: boolean\n children: ReactNode\n className?: string\n}\n\nexport function PersistentSearchContainer({\n isLoading,\n children,\n className\n}: PersistentSearchContainerProps) {\n return (\n <PersistentFilterControls \n isLoading={isLoading}\n preventInteraction={false} // Keep search interactive during loading\n className={className}\n >\n {children}\n </PersistentFilterControls>\n )\n}\n\n/**\n * Enhanced sidebar wrapper for desktop filter controls\n */\ninterface PersistentSidebarProps {\n isLoading: boolean\n children: ReactNode\n className?: string\n}\n\nexport function PersistentSidebar({\n isLoading,\n children,\n className\n}: PersistentSidebarProps) {\n return (\n <PersistentFilterControls \n isLoading={isLoading}\n disabledOpacity={0.5}\n className={cn(\"lg:sticky lg:top-20\", className)}\n >\n {children}\n </PersistentFilterControls>\n )\n}\n\n/**\n * Enhanced mobile dropdown wrapper\n */\ninterface PersistentMobileDropdownProps {\n isLoading: boolean\n children: ReactNode\n className?: string\n}\n\nexport function PersistentMobileDropdown({\n isLoading,\n children,\n className\n}: PersistentMobileDropdownProps) {\n return (\n <PersistentFilterControls \n isLoading={isLoading}\n disabledOpacity={0.7}\n className={cn(\"lg:hidden\", className)}\n >\n {children}\n </PersistentFilterControls>\n )\n} ","\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface PersistentPaginationProps {\n /**\n * Whether pagination is currently in a loading state\n */\n isLoading: boolean\n /**\n * The pagination component\n */\n children: ReactNode\n /**\n * Current page number\n */\n currentPage: number\n /**\n * Total number of pages\n */\n totalPages: number\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Disabled opacity (0-1)\n */\n disabledOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n /**\n * Whether to show loading state in pagination\n */\n showLoadingState?: boolean\n}\n\n/**\n * PersistentPagination\n * \n * A wrapper component that keeps pagination visible during loading states\n * but provides visual feedback that it's temporarily disabled.\n * \n * Features:\n * - Maintains pagination visibility during content loading\n * - Disables interaction but preserves layout\n * - Shows current page context even when loading\n * - Provides accessibility support for loading states\n * - Smooth transitions between enabled/disabled states\n * \n * Usage:\n * ```tsx\n * <PersistentPagination\n * isLoading={isLoadingVendors}\n * currentPage={currentPage}\n * totalPages={totalPages}\n * >\n * <Pagination currentPage={currentPage} totalPages={totalPages} />\n * </PersistentPagination>\n * ```\n */\nexport function PersistentPagination({\n isLoading,\n children,\n currentPage,\n totalPages,\n className,\n disabledOpacity = 0.5,\n transitionDuration = 300,\n showLoadingState = true,\n}: PersistentPaginationProps) {\n // ALWAYS show pagination for predictable layout - just gray it out when not needed\n // Removed condition that hides pagination completely\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n \"flex justify-center items-center\",\n isLoading && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isLoading ? disabledOpacity : 1,\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n >\n {/* Loading state announcement for screen readers */}\n {isLoading && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n Pagination temporarily disabled while loading page {currentPage} of {totalPages}\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isLoading && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n aria-hidden={isLoading}\n >\n {children}\n </div>\n\n {/* REMOVED: Loading overlay - only card skeletons should show during loading */}\n </div>\n )\n}\n\n/**\n * Hook for managing pagination loading states\n */\nexport function usePaginationLoading(\n isLoading: boolean,\n currentPage: number,\n totalPages: number\n) {\n const shouldShowPagination = totalPages > 1 || isLoading\n \n const paginationProps = {\n 'aria-busy': isLoading,\n 'data-loading': isLoading,\n 'data-current-page': currentPage,\n 'data-total-pages': totalPages,\n }\n\n const getLoadingMessage = () => {\n if (isLoading) {\n return `Loading page ${currentPage} of ${totalPages}`\n }\n return `Page ${currentPage} of ${totalPages}`\n }\n\n return {\n shouldShowPagination,\n paginationProps,\n getLoadingMessage,\n }\n}\n\n/**\n * Enhanced pagination component that includes loading states\n */\ninterface PersistentPaginationWrapperProps {\n isLoading: boolean\n currentPage: number\n totalPages: number\n onPageChange?: (page: number) => void\n className?: string\n variant?: 'vendor' | 'blog'\n}\n\nexport function PersistentPaginationWrapper({\n isLoading,\n currentPage,\n totalPages,\n onPageChange,\n className,\n variant = 'vendor'\n}: PersistentPaginationWrapperProps) {\n const { getLoadingMessage } = usePaginationLoading(\n isLoading,\n currentPage,\n totalPages\n )\n\n // ALWAYS show pagination for predictable layout\n // For no results (totalPages = 0), show grayed out pagination\n const hasResults = totalPages > 0\n const displayTotalPages = hasResults ? totalPages : 1\n const displayCurrentPage = hasResults ? currentPage : 1\n // Only disable during loading, but still show when no results (just grayed out)\n const isPaginationDisabled = isLoading\n const hasNoResults = !hasResults && !isLoading\n\n // Use UnifiedPagination directly from ui-kit instead of importing from consuming apps\n // Both Pagination and BlogPagination in multi-platform-hub are just wrappers around UnifiedPagination\n const PaginationComponent = require('./unified-pagination').UnifiedPagination\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out flex justify-center items-center\",\n (isPaginationDisabled || hasNoResults) && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isPaginationDisabled ? 0.3 : hasNoResults ? 0.5 : 1,\n transitionDuration: \"300ms\"\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n data-has-results={hasResults}\n >\n {/* Loading/no results state announcement for screen readers */}\n {(isLoading || !hasResults) && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n {isLoading \n ? `Pagination temporarily disabled while loading page ${displayCurrentPage} of ${displayTotalPages}`\n : `No results available - pagination disabled`\n }\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isPaginationDisabled && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: \"300ms\"\n }}\n aria-hidden={isPaginationDisabled}\n >\n <PaginationComponent\n currentPage={displayCurrentPage}\n totalPages={displayTotalPages}\n onPageChange={hasResults ? onPageChange : () => {}} // Provide empty function instead of undefined\n />\n </div>\n\n {/* REMOVED: Loading overlays - only card skeletons should show during loading */}\n </div>\n )\n} ","\"use client\"\n\nimport { StructuredPricingSummary as StructuredPricingItem } from '../utils/compare-utils-stub'\n\n// Using StructuredPricingItem from compare-utils instead of local interface\n\ninterface PricingStyleConfig {\n priceTextSize: string\n priceTextColor: string\n secondaryTextSize: string\n secondaryTextColor: string\n showTildePrefix: boolean\n fontFamily?: string\n}\n\ninterface PricingDisplayProps {\n pricing: StructuredPricingItem[] | string | StructuredPricingItem // Support both new structure and legacy string\n className?: string\n styleConfig?: PricingStyleConfig\n}\n\n// Default style configurations for different contexts\nexport const PRICING_STYLES = {\n // Comparison table style (current default)\n comparison: {\n priceTextSize: 'text-[16px]',\n priceTextColor: 'text-ods-text-primary',\n secondaryTextSize: 'text-[16px]',\n secondaryTextColor: 'text-ods-text-secondary',\n showTildePrefix: false,\n fontFamily: \"font-['DM_Sans']\"\n },\n // Vendor dropdown compact style (Figma design)\n compact: {\n priceTextSize: 'text-[12px]',\n priceTextColor: 'text-ods-text-secondary',\n secondaryTextSize: 'text-[12px]',\n secondaryTextColor: 'text-ods-text-secondary',\n showTildePrefix: true,\n fontFamily: \"font-['DM_Sans']\"\n },\n // Card style for vendor cards\n card: {\n priceTextSize: 'text-[14px]',\n priceTextColor: 'text-ods-text-primary',\n secondaryTextSize: 'text-[14px]',\n secondaryTextColor: 'text-ods-text-secondary',\n showTildePrefix: true,\n fontFamily: \"font-['DM_Sans']\"\n }\n} as const\n\n/**\n * Shared component for consistent pricing display with configurable styling\n * Now accepts structured pricing data and style configuration for better control\n */\nexport function PricingDisplay({ \n pricing, \n className = \"\", \n styleConfig = PRICING_STYLES.comparison \n}: PricingDisplayProps) {\n // Legacy support for string input\n if (typeof pricing === 'string') {\n return <LegacyPricingDisplay pricing={pricing} className={className} styleConfig={styleConfig} />\n }\n \n // Convert to array if single item\n const pricingArray = Array.isArray(pricing) ? pricing : [pricing];\n \n // Handle empty pricing\n if (!pricingArray || pricingArray.length === 0) {\n return (\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize} ${styleConfig.fontFamily} ${className}`}>\n No pricing data\n </span>\n )\n }\n \n // Handle single pricing item\n if (pricingArray.length === 1) {\n const item = pricingArray[0]\n const price = item.ranges?.[0]?.min || 0;\n const unit = item.ranges?.[0]?.unit;\n return (\n <span className={`${styleConfig.fontFamily} ${className}`}>\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`}>\n {formatPriceValue(price, styleConfig.showTildePrefix)}\n </span>\n {unit && (\n <span className={`${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`}>\n /{unit}\n </span>\n )}\n </span>\n )\n }\n \n // Handle multiple pricing items\n const priceValues = pricingArray.map(item => formatPriceValue(item.ranges?.[0]?.min || 0, styleConfig.showTildePrefix))\n \n // Find the first item that has unit info\n const itemWithUnit = pricingArray.find(item => item.ranges?.[0]?.unit)\n \n return (\n <span className={`${styleConfig.fontFamily} ${className}`}>\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`}>\n {priceValues.join(' | ')}\n </span>\n {itemWithUnit && itemWithUnit.ranges?.[0]?.unit && (\n <span className={`${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`}>\n /{itemWithUnit.ranges[0].unit}\n </span>\n )}\n </span>\n )\n}\n\n/**\n * Format price value consistently with configurable tilde prefix\n */\nfunction formatPriceValue(price: number | 'Free' | 'Contact', showTildePrefix: boolean = false): string {\n if (price === 'Free' || price === 'Contact') {\n return price\n }\n if (price === 0) {\n return 'Free'\n }\n return showTildePrefix ? `~$${price}` : `$${price}`\n}\n\n/**\n * Legacy component for backward compatibility with string input\n */\nfunction LegacyPricingDisplay({ \n pricing, \n className = \"\", \n styleConfig = PRICING_STYLES.comparison \n}: { \n pricing: string; \n className?: string; \n styleConfig?: PricingStyleConfig \n}) {\n // Handle \"Free\" case\n if (pricing === 'Free' || pricing === 'No pricing data') {\n return (\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize} ${styleConfig.fontFamily} ${className}`}>\n {pricing}\n </span>\n )\n }\n \n // Parse pricing string to separate main price from unit/cycle info\n const parsePricing = (pricingStr: string) => {\n // Handle comma-separated format like \"$10/device/month, $120/device/year\"\n if (pricingStr.includes(', ')) {\n // Split by comma and parse each part separately\n const parts = pricingStr.split(', ')\n const parsedParts = parts.map(part => {\n const match = part.trim().match(/^(\\$\\d+(?:-\\$\\d+)?|\\d+(?:-\\d+)?|Free)(.*)$/)\n if (match) {\n const price = match[1].startsWith('$') ? match[1] : `$${match[1]}`\n return {\n price,\n suffix: match[2]\n }\n }\n return { price: part.trim(), suffix: '' }\n })\n \n // Reconstruct with proper styling\n return {\n mainValue: parsedParts.map(p => p.price).join(', '),\n secondaryInfo: parsedParts.length > 0 && parsedParts[0].suffix ? parsedParts[0].suffix : ''\n }\n }\n \n // Handle pipe-separated format like \"$529/site/year | Free\"\n if (pricingStr.includes(' | ')) {\n const parts = pricingStr.split(' | ')\n const prices = parts.map(part => {\n const match = part.trim().match(/^(\\$\\d+(?:-\\$\\d+)?|\\d+(?:-\\d+)?|Free)(.*)$/)\n return match ? match[1] : part.trim()\n })\n \n return {\n mainValue: prices.join(' | '),\n secondaryInfo: ''\n }\n }\n \n // Handle multi-cycle format like \"$10/$120/device/month/year\"\n if (pricingStr.includes('/$')) {\n // Find all price patterns\n const pricePattern = /\\$\\d+(?:-\\$\\d+)?/g\n const matches = [...pricingStr.matchAll(pricePattern)]\n \n if (matches.length > 0) {\n const lastMatch = matches[matches.length - 1]\n const lastPriceEnd = lastMatch.index! + lastMatch[0].length\n \n const mainValue = pricingStr.substring(0, lastPriceEnd)\n const secondaryInfo = pricingStr.substring(lastPriceEnd)\n \n return { mainValue, secondaryInfo }\n }\n }\n \n // Handle single price format like \"$529/site/year\" or \"$0-$529/site/year\"\n const singlePriceMatch = pricingStr.match(/^(\\$\\d+(?:-\\$\\d+)?|Free)(.*)$/)\n if (singlePriceMatch) {\n return {\n mainValue: singlePriceMatch[1],\n secondaryInfo: singlePriceMatch[2]\n }\n }\n \n // Fallback - treat entire string as main value\n return {\n mainValue: pricingStr,\n secondaryInfo: ''\n }\n }\n \n const { mainValue, secondaryInfo } = parsePricing(pricing)\n \n return (\n <span className={`${styleConfig.fontFamily} ${className}`}>\n <span className={`${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`}>{mainValue}</span>\n {secondaryInfo && (\n <span className={`${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`}>{secondaryInfo}</span>\n )}\n </span>\n )\n}\n\n/**\n * Utility function to format pricing for display in the PricingDisplay component\n * This can be used to pre-process pricing strings if needed\n */\nexport function formatPricingForDisplay(pricing: string): string {\n return pricing\n} ","\"use client\"\n\nexport interface ResultsCountProps {\n currentPage: number\n pageSize: number\n totalResults: number\n resultType: 'vendors' | 'posts'\n sortingMessage?: string\n}\n\nexport function ResultsCount({\n currentPage,\n pageSize,\n totalResults,\n resultType,\n sortingMessage\n}: ResultsCountProps) {\n if (totalResults === 0) {\n return null\n }\n\n const startIndex = ((currentPage - 1) * pageSize) + 1\n const endIndex = Math.min(currentPage * pageSize, totalResults)\n const plural = resultType === 'vendors' ? 'vendors' : 'posts'\n const singular = resultType === 'vendors' ? 'vendor' : 'post'\n const displayType = totalResults === 1 ? singular : plural\n\n return (\n <div className=\"mb-6\">\n <p className=\"text-ods-text-secondary text-sm font-['DM_Sans']\">\n {totalResults > 0 && (\n <>\n Showing {startIndex}-{endIndex} of {totalResults} {displayType}\n {sortingMessage && (\n <span className=\"ml-2 text-ods-accent\">• {sortingMessage}</span>\n )}\n </>\n )}\n </p>\n </div>\n )\n} ","\"use client\"\n\nimport { OpenSourceIcon, CoinsIcon } from \"./icons-stub\"\nimport { OpenFrameLogo } from \"./openframe-logo\"\nimport { cn } from \"../utils/cn\"\nimport { Hand, Sparkles } from \"lucide-react\"\n\nexport interface VendorTagProps {\n type: 'open-source' | 'commercial' | 'free' | 'freemium' | 'paid' | 'enterprise' | 'recommended' | 'classification' | 'ai' | 'manual' | 'openframe_selected' | 'placeholder'\n text?: string\n className?: string\n size?: 'sm' | 'md'\n hidden?: boolean\n accentColor?: string\n}\n\nexport function VendorTag({\n type,\n text,\n className = \"\",\n hidden = false,\n size = 'md',\n accentColor\n}: VendorTagProps) {\n // Base classes for the tag container\n const baseClasses = cn(\n \"flex items-center gap-1.5 bg-[#161616] border border-ods-border rounded whitespace-nowrap\",\n size === 'sm' ? \"px-2 py-1\" : \"px-2.5 py-1.5\"\n )\n\n\n // Get display text and styling based on type\n const getTagContent = () => {\n switch (type) {\n case 'placeholder':\n return {\n text: \"Placeholder\",\n textColor: \"text-ods-text-primary\",\n icon: (\n <div className=\"w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0\">\n <Sparkles width={10} height={10} className=\"text-ods-text-primary\" />\n </div>\n )\n }\n case 'ai':\n return {\n text: \"AI Selected\",\n textColor: \"text-ods-text-primary\",\n icon: (\n <div className=\"w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0\">\n <Sparkles width={10} height={10} className=\"text-ods-text-primary\" />\n </div>\n )\n }\n case 'manual':\n return {\n text: \"Manually Selected\",\n textColor: \"text-ods-text-secondary\",\n icon: (\n <div className=\"w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0\">\n <Hand width={10} height={10} className=\"text-ods-text-secondary\" />\n </div>\n )\n }\n case 'open-source':\n return {\n text: text || \"Open Source\",\n icon: (\n <div \n className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\"\n style={accentColor ? { backgroundColor: accentColor } : undefined}\n >\n <OpenSourceIcon width={10} height={10} className=\"text-[#1A1A1A]\" />\n </div>\n )\n }\n case 'commercial':\n return {\n text: text || \"Commercial Vendor\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <CoinsIcon width={10} height={10} className=\"text-ods-text-secondary\" />\n </div>\n )\n }\n case 'free':\n return {\n text: text || \"Free\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">$</span>\n </div>\n )\n }\n case 'freemium':\n return {\n text: text || \"Freemium\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">$</span>\n </div>\n )\n }\n case 'paid':\n return {\n text: text || \"Paid\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <CoinsIcon width={10} height={10} className=\"text-ods-text-secondary\" />\n </div>\n )\n }\n case 'enterprise':\n return {\n text: text || \"Enterprise\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">E</span>\n </div>\n )\n }\n case 'recommended':\n return {\n text: text || \"Recommended\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">★</span>\n </div>\n )\n }\n case 'classification':\n // Handle specific classification types based on the text value\n const classificationType = text?.toLowerCase()\n\n if (classificationType === 'open_source') {\n return {\n text: \"Open Source\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <OpenSourceIcon width={10} height={10} className=\"text-[#1A1A1A]\" />\n </div>\n )\n }\n } else if (classificationType === 'commercial') {\n return {\n text: \"Commercial Vendor\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <CoinsIcon width={10} height={10} className=\"text-ods-text-secondary\" />\n </div>\n )\n }\n } else if (classificationType === 'openframe_selected') {\n return {\n text: \"OpenFrame Selected\",\n icon: <OpenFrameLogo lowerPathColor=\"currentColor\" upperPathColor=\"currentColor\" className=\"h-4 w-4 text-ods-accent\" />\n }\n } else {\n // Fallback for unknown classification types\n return {\n text: text || \"Classification\",\n icon: (\n <div className=\"w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0\">\n <span className=\"text-[#1A1A1A] text-[8px] font-bold\">C</span>\n </div>\n )\n }\n }\n case 'openframe_selected':\n return {\n text: text || \"OpenFrame Selected\",\n icon: <OpenFrameLogo lowerPathColor=\"currentColor\" upperPathColor=\"currentColor\" className=\"h-4 w-4 text-ods-accent\" />\n }\n default:\n return {\n text: text || type,\n icon: null\n }\n }\n }\n\n const { text: displayText, icon, textColor } = getTagContent()\n\n return (\n <div className={cn(baseClasses, className, hidden && \"invisible\")}>\n {icon}\n <span className={cn(\n \"font-mono font-semibold uppercase\",\n textColor ? textColor : \"text-ods-text-primary\",\n size === 'sm' ? \"text-[10px]\" : \"text-xs\"\n )}>\n {displayText}\n </span>\n </div>\n )\n} ","\"use client\"\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { VendorTag } from './vendor-tag';\n\nexport type SelectionSourceType = 'ai' | 'manual' | 'placeholder';\n\ninterface SelectionSourceBadgeProps {\n source: SelectionSourceType;\n className?: string;\n hidden?: boolean;\n}\n\n/**\n * Small pill badge indicating whether a vendor was selected manually or by AI.\n * Colors follow OpenMSP design tokens.\n */\nexport function SelectionSourceBadge({ source, hidden = false }: SelectionSourceBadgeProps) {\n if (!source) {\n return null;\n }\n \n return (\n <VendorTag\n key={`source-${source}`}\n type={source?.toLowerCase() as 'ai' | 'manual' | 'placeholder'}\n size=\"sm\"\n hidden={hidden}\n />\n );\n} ","\"use client\";\n\nimport React from 'react';\nimport { cn } from \"../utils/cn\";\nimport { SquareAvatar } from './square-avatar';\n\ninterface UserDisplayProps {\n name: string;\n avatarUrl?: string | null;\n /** optional secondary text (e.g., relative timestamp) */\n subtitle?: string | null;\n /** Avatar size in px (defaults 32) */\n size?: number;\n className?: string;\n}\n\n/**\n * Reusable horizontal avatar + name (+ optional subtitle) row that follows\n * the visual pattern used in CommentCard headers.\n */\nexport function UserDisplay({ name, avatarUrl, subtitle, size = 32, className }: UserDisplayProps) {\n return (\n <div className={cn('flex items-center gap-2 min-w-0', className)}>\n <SquareAvatar src={avatarUrl ?? undefined} fallbackName={name} size={size} />\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-['DM_Sans'] text-lg leading-[22px] text-ods-text-primary truncate\">\n {name}\n </p>\n {subtitle && (\n <span className=\"font-['DM_Sans'] text-md leading-[16px] text-ods-text-secondary truncate\">\n {subtitle}\n </span>\n )}\n </div>\n </div>\n );\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from \"./unified-skeleton\"\nimport { CardSkeletonGrid } from \"./card-skeleton\"\n\ninterface PageLayoutSkeletonProps {\n className?: string\n}\n\n/**\n * Announcement bar skeleton that matches the AnnouncementBar component\n */\nexport function AnnouncementBarSkeleton() {\n return (\n <div className=\"bg-[#2A2A2A] relative w-full animate-pulse\">\n <div className=\"flex flex-row items-center relative w-full\">\n <div className=\"box-border flex flex-row gap-4 md:gap-6 items-center justify-start pl-4 md:pl-6 pr-12 md:pr-16 py-3 md:py-4 relative w-full\">\n {/* Logo skeleton */}\n <div className=\"relative shrink-0 w-6 h-6 md:w-8 md:h-8 bg-ods-border rounded\"></div>\n \n {/* Text content skeleton */}\n <div className=\"flex-1 min-w-0 space-y-1 md:space-y-2\">\n <div className=\"h-[14px] md:h-[18px] bg-ods-border rounded w-3/4 max-w-md\"></div>\n <div className=\"h-[12px] md:h-[18px] bg-ods-border rounded w-full max-w-lg hidden md:block\"></div>\n </div>\n \n {/* Close button skeleton */}\n <div className=\"absolute right-2 top-2 w-6 h-6 bg-ods-border rounded\"></div>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Header skeleton that matches the ClientOnlyHeader placeholder but with proper animations\n */\nexport function HeaderSkeleton() {\n return (\n <header className=\"sticky top-0 z-40 w-full flex items-center justify-between border-b border-ods-border bg-ods-card backdrop-blur-sm bg-ods-card/95 px-4 md:px-[80px] py-3 md:py-[12px] animate-pulse\">\n {/* Left: Logo skeleton */}\n <div className=\"flex items-center justify-start flex-1 min-w-0\">\n <div className=\"w-[110px] h-[26px] md:w-[137px] md:h-8 bg-[#2A2A2A] rounded\"></div>\n </div>\n\n {/* Center: Navigation skeleton - hidden on mobile, visible on desktop */}\n <nav className=\"hidden md:flex flex-1 basis-1/3 justify-center items-center gap-2 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <InteractiveSkeleton.Button className=\"w-24 h-10\" />\n <InteractiveSkeleton.Button className=\"w-24 h-10\" />\n <InteractiveSkeleton.Button className=\"w-24 h-10\" />\n </div>\n </nav>\n\n {/* Right: Actions skeleton */}\n <div className=\"flex items-center justify-end gap-4 flex-1 min-w-0\">\n {/* Mobile: Show hamburger skeleton */}\n <div className=\"md:hidden\">\n <InteractiveSkeleton.Button className=\"h-10 w-10\" />\n </div>\n \n {/* Desktop: Show action buttons skeletons */}\n <div className=\"hidden md:flex items-center gap-4\">\n <InteractiveSkeleton.Button className=\"w-10 h-10\" />\n <InteractiveSkeleton.Button className=\"w-32 h-10\" />\n <InteractiveSkeleton.Button className=\"w-20 h-10\" />\n </div>\n </div>\n </header>\n )\n}\n\n/**\n * Hero section skeleton for static content areas\n */\nexport function HeroSkeleton() {\n return (\n <section\n className=\"w-full flex flex-col items-center justify-center py-12 px-4 md:py-20 md:px-8 text-center animate-pulse\"\n style={{\n background: 'radial-gradient(circle at 50% 0%, #242323 0%, #1A1A1A 100%)'\n }}\n >\n {/* Title skeleton */}\n <TextSkeleton.Heading className=\"h-12 md:h-20 lg:h-24 mb-4 md:mb-6 max-w-4xl w-full\" />\n \n {/* Subtitle skeleton */}\n <div className=\"space-y-3 mb-8 md:mb-10 max-w-4xl w-full px-2\">\n <TextSkeleton.Body className=\"h-5 md:h-7\" />\n <TextSkeleton.Body className=\"h-5 md:h-7 w-3/4 mx-auto\" />\n </div>\n \n {/* CTA Button skeleton */}\n <InteractiveSkeleton.Button className=\"w-full md:w-64 h-12\" />\n </section>\n )\n}\n\n/**\n * Search container skeleton with filters\n */\nexport function SearchContainerSkeleton({ \n className,\n showFilters = true \n}: PageLayoutSkeletonProps & { showFilters?: boolean }) {\n return (\n <div className={cn(\"space-y-4\", className || \"\")}>\n {/* Search input and button */}\n <div className=\"flex gap-2 md:gap-4\">\n <InteractiveSkeleton.Input className=\"flex-1\" />\n <InteractiveSkeleton.Button className=\"w-32 md:w-40\" />\n </div>\n\n {/* Filter chips */}\n {showFilters && (\n <div className=\"flex gap-2 flex-wrap\">\n <InteractiveSkeleton.Chip />\n <InteractiveSkeleton.Chip className=\"w-24\" />\n <InteractiveSkeleton.Chip className=\"w-16\" />\n <InteractiveSkeleton.Chip className=\"w-20\" />\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Category sidebar skeleton for filtering pages\n */\nexport function CategorySidebarSkeleton({ className }: PageLayoutSkeletonProps) {\n // Matches the actual MultiLevelNavigation sidebar with folder/file icons, README badges, and chevrons\n const items = [\n { type: 'file', width: 'w-20', hasBadge: false },\n { type: 'folder', width: 'w-24', hasBadge: true },\n { type: 'folder', width: 'w-20', hasBadge: true },\n { type: 'folder', width: 'w-24', hasBadge: true },\n { type: 'folder', width: 'w-16', hasBadge: true },\n { type: 'folder', width: 'w-20', hasBadge: true },\n { type: 'folder', width: 'w-28', hasBadge: true },\n { type: 'folder', width: 'w-16', hasBadge: true },\n { type: 'folder', width: 'w-24', hasBadge: true },\n { type: 'file', width: 'w-28' },\n { type: 'file', width: 'w-36' },\n ]\n\n return (\n <div className={cn(\"w-full lg:w-[320px]\", className)}>\n {/* DATA ROOM label */}\n <UnifiedSkeleton className=\"h-[14px] w-24 rounded mb-4\" />\n\n {/* Navigation items — each has card background matching actual MultiLevelNavigation */}\n <div className=\"space-y-1.5\">\n {items.map((item, index) => (\n <div\n key={index}\n className={cn(\n \"flex items-center justify-between py-4 px-4 rounded-lg border border-ods-border min-h-[50px]\",\n index === 0 ? \"bg-ods-accent/20\" : \"bg-ods-card\"\n )}\n >\n <div className=\"flex items-center gap-2.5\">\n <UnifiedSkeleton className=\"w-4 h-4 shrink-0 rounded\" />\n <UnifiedSkeleton className={`h-[14px] ${item.width} rounded`} />\n </div>\n <div className=\"flex items-center gap-2 h-[18px]\">\n {item.hasBadge && <UnifiedSkeleton className=\"h-[18px] w-14 rounded\" />}\n {item.type === 'folder' && <UnifiedSkeleton className=\"w-4 h-4 rounded\" />}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n/**\n * Breadcrumb navigation skeleton\n */\nexport function BreadcrumbSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <div className={cn(\"flex items-center space-x-1 mb-6\", className)}>\n <TextSkeleton.Caption className=\"w-16\" />\n <UnifiedSkeleton variant=\"default\" className=\"w-4 h-4 rounded-full\" />\n <TextSkeleton.Caption className=\"w-24\" />\n <UnifiedSkeleton variant=\"default\" className=\"w-4 h-4 rounded-full\" />\n <TextSkeleton.Caption className=\"w-32\" />\n <UnifiedSkeleton variant=\"default\" className=\"w-4 h-4 rounded-full\" />\n <TextSkeleton.Caption className=\"w-24\" />\n </div>\n )\n}\n\n/**\n * Results header skeleton with count and sorting\n */\nexport function ResultsHeaderSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <div className={cn(\"flex flex-col md:flex-row justify-between items-start md:items-center gap-4 mb-6\", className)}>\n <div className=\"space-y-1\">\n <TextSkeleton.Body className=\"w-48\" />\n {/* <TextSkeleton.Caption className=\"w-32\" /> */}\n </div>\n </div>\n )\n}\n\n/**\n * Two-column layout skeleton (sidebar + main content)\n */\nexport function TwoColumnLayoutSkeleton({\n className,\n sidebarContent,\n mainContent,\n sidebarPosition = 'left'\n}: PageLayoutSkeletonProps & {\n sidebarContent?: React.ReactNode\n mainContent?: React.ReactNode\n sidebarPosition?: 'left' | 'right'\n}) {\n const sidebar = sidebarContent || <CategorySidebarSkeleton />\n const main = mainContent || <CardSkeletonGrid count={6} />\n\n return (\n <div className={cn(\n \"grid grid-cols-1 lg:grid-cols-[320px_1fr] gap-6 lg:gap-8\",\n sidebarPosition === 'right' && \"lg:grid-cols-[1fr_320px]\",\n className\n )}>\n {sidebarPosition === 'left' ? (\n <>\n <aside className=\"order-2 lg:order-1\">{sidebar}</aside>\n <main className=\"order-1 lg:order-2\">{main}</main>\n </>\n ) : (\n <>\n <main className=\"order-1\">{main}</main>\n <aside className=\"order-2\">{sidebar}</aside>\n </>\n )}\n </div>\n )\n}\n\n/**\n * Article/blog post layout skeleton\n */\nexport function ArticleLayoutSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <article className={cn(\"max-w-4xl mx-auto\", className)}>\n {/* Article header */}\n <header className=\"mb-8 md:mb-12 space-y-4 md:space-y-6\">\n {/* Category/tags */}\n <div className=\"flex gap-2\">\n <InteractiveSkeleton.Chip />\n <InteractiveSkeleton.Chip className=\"w-16\" />\n </div>\n \n {/* Title */}\n <div className=\"space-y-3\">\n <TextSkeleton.Heading className=\"w-full\" />\n <TextSkeleton.Heading className=\"w-3/4\" />\n </div>\n \n {/* Metadata */}\n <div className=\"flex items-center gap-4 pt-4 border-t border-ods-divider\">\n <div className=\"flex items-center gap-2\">\n <MediaSkeleton.Avatar size=\"sm\" />\n <TextSkeleton.Caption className=\"w-24\" />\n </div>\n <TextSkeleton.Caption className=\"w-20\" />\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n </header>\n\n {/* Featured image */}\n <div className=\"mb-8 md:mb-12\">\n <MediaSkeleton.CardImage className=\"w-full h-64 md:h-96\" />\n </div>\n\n {/* Article content */}\n <div className=\"prose prose-invert max-w-none space-y-6\">\n {/* Paragraphs */}\n {Array.from({ length: 12 }).map((_, index) => (\n <div key={index} className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-5/6\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n ))}\n \n {/* Subheading in content */}\n <div className=\"py-4\">\n <TextSkeleton.Subheading className=\"w-2/3 mb-4\" />\n <div className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-4/5\" />\n </div>\n </div>\n </div>\n </article>\n )\n}\n\n/**\n * Vendor Detail Layout Skeleton - Complete vendor detail page structure\n * Matches the refactored vendor detail page with proper platform colors and responsive layout\n */\nexport function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <main className={cn(\"bg-[#161616] min-h-screen\", className)}>\n <div className=\"max-w-[1920px] mx-auto px-6 md:px-20 py-6 md:py-10\">\n {/* Breadcrumb */}\n <BreadcrumbSkeleton className=\"mb-6\" />\n\n {/* Main Layout Container */}\n <div className=\"flex flex-col lg:flex-row lg:gap-10\">\n {/* Left Content Area */}\n <div className=\"flex-1 min-w-0\">\n \n {/* Vendor Hero Section */}\n <div className=\"mb-10\">\n {/* Header - Logo and Title Side by Side */}\n <div className=\"flex gap-6 mb-6\">\n <div className=\"w-20 h-20 bg-ods-card border border-ods-border rounded-lg animate-pulse flex-shrink-0\"></div>\n \n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col gap-2\">\n {/* Large title skeleton */}\n <div className=\"h-12 md:h-16 lg:h-20 bg-[#2A2A2A] rounded animate-pulse w-80 max-w-full\"></div>\n {/* Category text */}\n <div className=\"h-5 md:h-6 bg-[#2A2A2A] rounded animate-pulse w-32\"></div>\n </div>\n \n {/* Pricing tags */}\n <div className=\"flex items-center gap-2\">\n <div className=\"h-8 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n <div className=\"h-8 bg-[#2A2A2A] rounded animate-pulse w-16\"></div>\n </div>\n </div>\n </div>\n\n {/* Vendor Image Display Skeleton */}\n <div className=\"w-full h-[300px] md:h-[400px] lg:h-[500px] bg-ods-card border border-ods-border rounded-lg animate-pulse mb-2\"></div>\n <div className=\"text-center\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-24 mx-auto\"></div>\n </div>\n </div>\n\n {/* Mobile Sidebar - Show on mobile only, positioned after title */}\n <div className=\"lg:hidden mb-10\">\n <div className=\"space-y-4\">\n {/* Deploy Button */}\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n \n {/* Voting Buttons */}\n <div className=\"space-y-2\">\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n </div>\n \n {/* GitHub Score Section */}\n <div className=\"border border-ods-border rounded-lg overflow-hidden\">\n {/* Header */}\n <div className=\"bg-ods-card p-4 flex items-center gap-3\">\n <div className=\"w-8 h-8 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"flex flex-col gap-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n </div>\n </div>\n \n {/* Stats */}\n <div className=\"p-4 space-y-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <div className=\"w-6 h-6 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"flex items-end gap-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded animate-pulse w-8\"></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n \n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n </div>\n </div>\n </div>\n\n {/* Alternatives Container */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-48\"></div>\n \n {/* Open Source Alternatives */}\n <div className=\"flex flex-col gap-4\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-48\"></div>\n <div className=\"flex flex-wrap gap-2\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-ods-card border border-ods-border rounded-lg animate-pulse w-24\"></div>\n ))}\n </div>\n </div>\n\n {/* Commercial Alternatives */}\n <div className=\"flex flex-col gap-4\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-52\"></div>\n <div className=\"flex flex-wrap gap-2\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-ods-card border border-ods-border rounded-lg animate-pulse w-28\"></div>\n ))}\n </div>\n </div>\n </div>\n\n {/* About Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-64\"></div>\n \n <div className=\"bg-ods-card border border-ods-border rounded-lg p-6 md:p-8\">\n <div className=\"space-y-4\">\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-5/6\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-4/5\"></div>\n </div>\n </div>\n </div>\n\n {/* Key Features Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-72\"></div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-4 flex gap-4\">\n <div className=\"w-12 h-12 bg-[#2A2A2A] rounded flex-shrink-0 animate-pulse\"></div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-3/4\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse\"></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Pros and Cons Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-80\"></div>\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Pros Column */}\n <div className=\"flex flex-col gap-6\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-16\"></div>\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-4 flex gap-3\">\n <div className=\"w-12 h-12 bg-[#161616] border border-ods-border rounded flex-shrink-0 animate-pulse\"></div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-2/3\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse\"></div>\n </div>\n </div>\n ))}\n </div>\n {/* Cons Column */}\n <div className=\"flex flex-col gap-6\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-16\"></div>\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-4 flex gap-3\">\n <div className=\"w-12 h-12 bg-[#161616] border border-ods-border rounded flex-shrink-0 animate-pulse\"></div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-5 bg-[#2A2A2A] rounded animate-pulse w-2/3\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse\"></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Alternatives Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-72\"></div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-6 space-y-4\">\n {/* Header */}\n <div className=\"flex items-start gap-4\">\n <div className=\"w-16 h-16 bg-[#161616] border border-ods-border rounded-lg animate-pulse flex-shrink-0\"></div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-3/4\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-1/2\"></div>\n </div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n </div>\n \n {/* Description */}\n <div className=\"space-y-2\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-5/6\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-4/5\"></div>\n </div>\n \n {/* Footer */}\n <div className=\"flex items-center justify-between pt-2 border-t border-ods-border\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-16\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n </div>\n </div>\n ))}\n </div>\n {/* Show All Button */}\n <div className=\"h-12 bg-[#2A2A2A] rounded-md animate-pulse\"></div>\n </div>\n\n {/* Comments Section */}\n <div className=\"flex flex-col gap-6 mb-20\">\n <div className=\"h-8 md:h-10 bg-[#2A2A2A] rounded animate-pulse w-64\"></div>\n \n {/* Comment Form Skeleton */}\n <div className=\"space-y-3\">\n <div className=\"flex gap-3\">\n <div className=\"flex-1 bg-[#161616] border border-ods-border rounded-lg overflow-hidden\">\n {/* Title Section */}\n <div className=\"border-b border-ods-border p-3\">\n <div className=\"h-3 bg-[#2A2A2A] rounded animate-pulse w-8 mb-2\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-full\"></div>\n </div>\n \n {/* Description Section */}\n <div className=\"p-3\">\n <div className=\"h-3 bg-[#2A2A2A] rounded animate-pulse w-16 mb-2\"></div>\n <div className=\"space-y-2\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-full\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-3/4\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-1/2\"></div>\n </div>\n </div>\n </div>\n \n {/* Send Button */}\n <div className=\"flex items-stretch\">\n <div className=\"h-[120px] w-20 bg-[#2A2A2A] rounded-lg animate-pulse\"></div>\n </div>\n </div>\n </div>\n \n {/* Sample Comment Cards */}\n <div className=\"space-y-4\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-4\">\n {/* Comment Header */}\n <div className=\"flex flex-col gap-3 mb-3 min-[420px]:flex-row min-[420px]:items-center min-[420px]:justify-between min-[420px]:gap-2\">\n <div className=\"flex items-center gap-2\">\n {/* User Info */}\n <div className=\"flex items-center gap-2 bg-ods-card border border-ods-border rounded-lg py-2 px-3\">\n <div className=\"w-8 h-8 bg-[#2A2A2A] rounded-lg animate-pulse\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n </div>\n \n {/* Timestamp */}\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n </div>\n </div>\n \n {/* Comment Content */}\n <div className=\"space-y-2\">\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-2/3\"></div>\n <div className=\"space-y-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-full\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-4/5\"></div>\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-3/5\"></div>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Right Sidebar - Desktop Only */}\n <div className=\"hidden lg:block w-[290px] flex-shrink-0\">\n <div className=\"space-y-4\">\n {/* Deploy Button */}\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n \n {/* Voting Buttons */}\n <div className=\"space-y-2\">\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n </div>\n \n {/* GitHub Score Section */}\n <div className=\"border border-ods-border rounded-lg overflow-hidden\">\n {/* Header */}\n <div className=\"bg-ods-card p-4 flex items-center gap-3\">\n <div className=\"w-8 h-8 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"flex flex-col gap-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-20\"></div>\n <div className=\"h-6 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n </div>\n </div>\n \n {/* Stats */}\n <div className=\"p-4 space-y-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <div className=\"w-6 h-6 bg-[#2A2A2A] rounded animate-pulse\"></div>\n <div className=\"flex items-end gap-1\">\n <div className=\"h-4 bg-[#2A2A2A] rounded animate-pulse w-12\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded animate-pulse w-8\"></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n \n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"h-12 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </main>\n )\n}\n\n/**\n * Stats/features section skeleton for homepage\n */\nexport function StatsSectionSkeleton({ \n className,\n columns = 3 \n}: PageLayoutSkeletonProps & { columns?: number }) {\n return (\n <div className={cn(\n \"grid gap-6 mb-12 md:mb-16\",\n columns === 3 && \"grid-cols-1 md:grid-cols-3\",\n columns === 4 && \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n className\n )}>\n {Array.from({ length: columns }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border border-ods-border rounded-lg p-6\">\n <div className=\"space-y-4\">\n <MediaSkeleton.Icon size=\"lg\" />\n <TextSkeleton.Subheading className=\"w-3/4\" />\n <div className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n\n/**\n * Blog Card Grid Skeleton - Always displays exactly 4 blog card skeletons\n * Used for consistent blog page layout with predictable height\n */\nexport function BlogCardGridSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n <CardSkeletonGrid \n count={4}\n variant=\"blog\"\n className=\"grid-cols-1 md:grid-cols-2\"\n />\n </div>\n )\n}\n\n/**\n * Vendor Grid Skeleton - Always displays exactly 12 vendor card skeletons\n * Used for consistent vendor page layout with predictable height\n */\nexport function VendorGridSkeleton({ className }: PageLayoutSkeletonProps) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n <CardSkeletonGrid \n count={12}\n variant=\"vendor\"\n className=\"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\"\n />\n </div>\n )\n}\n\n/**\n * Slack Community Section Skeleton\n * Matches SlackCommunity component structure with title, channel list, and chat interface\n */\nexport function SlackCommunitySkeleton() {\n return (\n <section \n className=\"w-full bg-[#161616] px-4 md:px-20 lg:px-20 py-12 md:py-20\"\n aria-label=\"Slack Community Loading\"\n >\n {/* Frame 651 Container */}\n <div className=\"w-full flex flex-col gap-4 md:gap-6\">\n \n {/* Title Skeleton */}\n <div className=\"w-full\">\n <div className=\"h-8 md:h-12 lg:h-14 bg-[#2A2A2A] rounded-lg animate-pulse max-w-md\"></div>\n </div>\n\n {/* Content Area - Channel List + Chat Interface */}\n <div className=\"w-full flex flex-col lg:flex-row lg:justify-end lg:items-start gap-4 md:gap-6 min-w-0\">\n \n {/* Channel List Skeleton */}\n <div className=\"w-full lg:w-[290px] lg:max-w-[290px] bg-[#161616] border border-ods-border rounded flex flex-col flex-shrink-0 overflow-hidden animate-pulse\">\n <div className=\"p-4 space-y-4\">\n {/* Header */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"h-4 bg-[#2A2A2A] rounded w-24\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-16\"></div>\n </div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-32\"></div>\n </div>\n\n {/* Channels */}\n <div className=\"flex flex-col gap-1\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-16 mb-2\"></div>\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2 px-2 py-3 min-h-[48px]\">\n <div className=\"w-4 h-4 bg-[#2A2A2A] rounded\"></div>\n <div className=\"flex-1\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-24 mb-1\"></div>\n <div className=\"h-2 bg-[#2A2A2A] rounded w-16\"></div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Stats */}\n <div className=\"border-t border-ods-border pt-3 mt-2\">\n <div className=\"space-y-2\">\n <div className=\"flex justify-between\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-16\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-8\"></div>\n </div>\n <div className=\"flex justify-between\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-20\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-8\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Chat Interface Skeleton */}\n <div className=\"flex-1 min-h-[450px] h-[450px] md:min-h-[500px] md:h-[500px] lg:min-h-[600px] lg:h-[600px] bg-ods-card border border-ods-border rounded-lg flex flex-col min-w-0 animate-pulse\">\n \n {/* Header */}\n <div className=\"flex items-center justify-between p-4 md:p-6 border-b border-ods-border bg-[#161616] h-[56px] md:h-[60px] flex-shrink-0\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-3 md:h-4 bg-[#2A2A2A] rounded w-3 md:w-4\"></div>\n <div className=\"h-3 md:h-4 bg-[#2A2A2A] rounded w-24 md:w-32\"></div>\n </div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-12 md:w-16\"></div>\n </div>\n\n {/* Messages */}\n <div className=\"flex-1 bg-[#161616] p-4 md:p-6 space-y-3 md:space-y-4 overflow-hidden min-h-[280px] md:min-h-[320px] lg:min-h-[420px]\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex gap-2 md:gap-3\">\n <div className=\"w-10 h-10 md:w-12 md:h-12 bg-[#2A2A2A] rounded-lg flex-shrink-0\"></div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2 mb-1\">\n <div className=\"h-3 bg-[#2A2A2A] rounded w-16 md:w-20\"></div>\n <div className=\"h-3 bg-[#2A2A2A] rounded w-12 md:w-16\"></div>\n </div>\n <div className=\"h-3 md:h-4 bg-[#2A2A2A] rounded w-full\"></div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Input Area */}\n <div className=\"p-4 md:p-6 border-t border-ods-border bg-ods-card h-[72px] md:h-[80px] flex-shrink-0\">\n <div className=\"flex items-end gap-3 justify-center md:justify-end\">\n <div className=\"h-10 md:h-12 bg-[#2A2A2A] rounded-lg w-28 md:w-32\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\n\ninterface UnifiedSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string\n variant?: 'default' | 'text' | 'circular' | 'rectangular'\n width?: string | number\n height?: string | number\n /**\n * Disable animation for users who prefer reduced motion\n */\n animate?: boolean\n /**\n * Accessibility label for screen readers\n */\n 'aria-label'?: string\n}\n\n/**\n * UnifiedSkeleton Component\n * \n * Base skeleton component with consistent styling across the application.\n * \n * Design Specifications:\n * - Color: #2A2A2A base with #3A3A3A pulse highlight\n * - Animation: 1.5s pulse duration, ease-in-out timing\n * - Responsive: Mobile-first approach with proper scaling\n * - Accessibility: ARIA labels and reduced motion support\n * \n * @param variant - Shape variant: default (rounded), text (rounded-sm), circular, rectangular\n * @param width - Custom width (defaults to full width)\n * @param height - Custom height (defaults to auto based on variant)\n * @param animate - Enable/disable animation (respects prefers-reduced-motion)\n * @param aria-label - Accessibility label for screen readers\n */\nexport function UnifiedSkeleton({\n className,\n variant = 'default',\n width,\n height,\n animate = true,\n 'aria-label': ariaLabel,\n ...props\n}: UnifiedSkeletonProps) {\n const baseClasses = \"bg-[#2A2A2A]\"\n \n const variantClasses = {\n default: \"rounded-md\",\n text: \"rounded-sm\",\n circular: \"rounded-full\",\n rectangular: \"rounded-none\"\n }\n \n const defaultHeights = {\n default: \"h-4\",\n text: \"h-4\", \n circular: \"h-12 w-12\",\n rectangular: \"h-4\"\n }\n \n const animationClasses = animate \n ? \"animate-pulse motion-reduce:animate-none\" \n : \"\"\n \n const style: React.CSSProperties = {\n width: width,\n height: height,\n }\n \n return (\n <div\n className={cn(\n baseClasses,\n variantClasses[variant],\n !height && !style.height && defaultHeights[variant],\n !width && !style.width && variant !== 'circular' && \"w-full\",\n animationClasses,\n className\n )}\n style={style}\n role=\"status\"\n aria-label={ariaLabel || \"Loading content\"}\n {...props}\n />\n )\n}\n\n/**\n * Text skeleton variants for consistent typography loading\n */\nexport const TextSkeleton = {\n /**\n * Large heading skeleton (h1, h2)\n */\n Heading: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"text\" \n className={cn(\"h-8 md:h-10 lg:h-12\", className)} \n aria-label=\"Loading heading\"\n {...props} \n />\n ),\n \n /**\n * Medium heading skeleton (h3, h4)\n */\n Subheading: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"text\" \n className={cn(\"h-6 md:h-7 lg:h-8\", className)} \n aria-label=\"Loading subheading\"\n {...props} \n />\n ),\n \n /**\n * Body text skeleton\n */\n Body: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"text\" \n className={cn(\"h-4 md:h-5\", className)} \n aria-label=\"Loading text\"\n {...props} \n />\n ),\n \n /**\n * Small text skeleton (captions, metadata)\n */\n Caption: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"text\" \n className={cn(\"h-3 md:h-4\", className)} \n aria-label=\"Loading caption\"\n {...props} \n />\n ),\n}\n\n/**\n * Interactive element skeletons\n */\nexport const InteractiveSkeleton = {\n /**\n * Button skeleton with proper touch targets\n */\n Button: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"default\" \n className={cn(\"h-10 md:h-12 w-32 md:w-40\", className)} \n aria-label=\"Loading button\"\n {...props} \n />\n ),\n \n /**\n * Input field skeleton\n */\n Input: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"default\" \n className={cn(\"h-10 md:h-12 w-full\", className)} \n aria-label=\"Loading input field\"\n {...props} \n />\n ),\n \n /**\n * Filter chip skeleton\n */\n Chip: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton \n variant=\"default\" \n className={cn(\"h-8 w-20 rounded-full\", className)} \n aria-label=\"Loading filter\"\n {...props} \n />\n ),\n}\n\n/**\n * Media skeletons for images and icons\n */\nexport const MediaSkeleton = {\n /**\n * Avatar/profile image skeleton\n */\n Avatar: ({ size = 'md', className, ...props }: Omit<UnifiedSkeletonProps, 'variant'> & { size?: 'sm' | 'md' | 'lg' }) => {\n const sizeClasses = {\n sm: \"h-8 w-8\",\n md: \"h-12 w-12\", \n lg: \"h-16 w-16\"\n }\n \n return (\n <UnifiedSkeleton \n variant=\"circular\" \n className={cn(sizeClasses[size], className)} \n aria-label=\"Loading profile image\"\n {...props} \n />\n )\n },\n \n /**\n * Card image skeleton (1200×630 OG aspect — matches entity-cards default\n * so loading state never causes a height shift when card data arrives)\n */\n CardImage: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (\n <UnifiedSkeleton\n variant=\"default\"\n className={cn(\"aspect-[1200/630] w-full\", className)}\n aria-label=\"Loading image\"\n {...props}\n />\n ),\n \n /**\n * Icon skeleton\n */\n Icon: ({ size = 'md', className, ...props }: Omit<UnifiedSkeletonProps, 'variant'> & { size?: 'sm' | 'md' | 'lg' }) => {\n const sizeClasses = {\n sm: \"h-4 w-4\",\n md: \"h-6 w-6\",\n lg: \"h-8 w-8\"\n }\n \n return (\n <UnifiedSkeleton \n variant=\"default\" \n className={cn(sizeClasses[size], className)} \n aria-label=\"Loading icon\"\n {...props} \n />\n )\n },\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from \"./unified-skeleton\"\n\ninterface CardSkeletonProps {\n className?: string\n /**\n * Card layout variant\n */\n variant?: 'vendor' | 'blog' | 'category' | 'alternative'\n /**\n * Show action buttons area\n */\n showActions?: boolean\n /**\n * Show metadata footer\n */\n showMetadata?: boolean\n /** Optional tailwind classes to override the card container background & border */\n containerClassName?: string\n}\n \n/**\n * Unified card skeleton component for consistent card loading states\n * \n * Supports different card types used across the application:\n * - vendor: Vendor cards with logo, title, description, and actions\n * - blog: Blog post cards with image, title, summary, and metadata \n * - category: Category cards with icon, title, and description\n * - alternative: Alternative vendor cards in comparison lists\n */\nexport function CardSkeleton({\n className,\n containerClassName,\n variant = 'vendor',\n showActions = true,\n showMetadata = true,\n ...props\n}: CardSkeletonProps) {\n const cardContent = {\n vendor: <VendorCardContent showActions={showActions} showMetadata={showMetadata} />,\n blog: <BlogCardContent showActions={showActions} showMetadata={showMetadata} />,\n category: <CategoryCardContent />,\n alternative: <AlternativeCardContent showActions={showActions} />\n }\n\n return (\n <div \n className={cn(\n containerClassName || \"bg-ods-card border border-ods-border\",\n \"rounded-lg overflow-hidden\",\n // Flex layouts for certain variants\n variant === 'blog' && \"h-full flex flex-col\",\n variant === 'vendor' && \"h-full flex flex-col\",\n className\n )}\n role=\"status\"\n aria-label={`Loading ${variant} card`}\n {...props}\n >\n {cardContent[variant]}\n </div>\n )\n}\n\n/**\n * Vendor card skeleton content - matches exact VendorCard structure\n */\nfunction VendorCardContent({ showActions, showMetadata }: { showActions: boolean; showMetadata: boolean }) {\n return (\n <div className=\"p-4 gap-3 flex flex-col\">\n {/* Header Section - Row layout matching actual VendorCard */}\n <div className=\"flex items-start gap-3 w-full\">\n {/* Logo Frame - 60px width fixed, matching actual structure */}\n <div className=\"w-[60px] h-[60px] bg-[#161616] border border-ods-border rounded-lg p-2 flex items-center justify-center flex-shrink-0\">\n <MediaSkeleton.Avatar size=\"sm\" className=\"w-11 h-11\" />\n </div>\n \n {/* Text Container - Column layout, matching actual structure */}\n <div className=\"flex-1 flex flex-col justify-center py-2 min-w-0 space-y-1\">\n {/* Title - Single line with proper width */}\n <TextSkeleton.Subheading className=\"w-3/4\" />\n {/* Category - Single line, shorter */}\n <TextSkeleton.Caption className=\"w-1/2\" />\n </div>\n </div>\n\n {/* Description Section - Fixed 48px height matching actual VendorCard */}\n <div className=\"w-full h-12 overflow-hidden flex items-center\">\n <div className=\"space-y-1 w-full\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n </div>\n\n {/* Footer Section - Responsive layout matching actual structure */}\n <div className=\"flex items-center justify-between gap-2 w-full min-w-0\">\n {/* Stats Container - Flexible width, no overflow */}\n <div className=\"flex items-center gap-3 md:gap-4 min-w-0 flex-shrink\">\n {/* OpenMSP Score skeleton */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-5 h-5\" />\n <TextSkeleton.Caption className=\"w-8\" />\n </div>\n \n {/* GitHub Stats skeleton */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-5 h-5\" />\n <TextSkeleton.Caption className=\"w-10\" />\n </div>\n </div>\n\n {/* Tag Section - Contained within card boundaries */}\n <div className=\"flex-shrink-0\">\n <div className=\"flex items-center gap-1.5 bg-[#161616] border border-ods-border rounded px-2.5 py-1.5\">\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-2.5 h-2.5\" />\n </div>\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Blog card skeleton content - matches fixed height structure\n */\nfunction BlogCardContent({ showActions, showMetadata }: { showActions: boolean; showMetadata: boolean }) {\n return (\n <>\n {/* Image Section — OG 1200×630 aspect (matches blog-card.tsx loaded state) */}\n <div className=\"blog-card-image-container relative w-full aspect-[1200/630] overflow-hidden bg-[#161616]\">\n <MediaSkeleton.CardImage />\n </div>\n \n {/* Content - Fixed height structure to match BlogCard */}\n <div className=\"p-4 flex flex-col flex-grow\">\n {/* Title Section - Fixed 2 lines with vertical centering */}\n <div className=\"mb-3 flex items-center min-h-[50.4px] md:min-h-[56px] lg:min-h-[61.6px]\">\n <div className=\"space-y-1 w-full\">\n <TextSkeleton.Subheading className=\"w-full\" />\n <TextSkeleton.Subheading className=\"w-3/4\" />\n </div>\n </div>\n \n {/* Chips Section - Fixed single line height */}\n <div className=\"mb-3 flex gap-2 h-[28px] items-center\">\n <InteractiveSkeleton.Chip className=\"w-16\" />\n <InteractiveSkeleton.Chip className=\"w-12\" />\n </div>\n \n {/* Description Section - Fixed 2 lines with vertical centering */}\n <div className=\"mb-3 flex items-center min-h-[42px] md:min-h-[45px] lg:min-h-[48px]\">\n <div className=\"space-y-1 w-full\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-1/2\" />\n </div>\n </div>\n\n {/* Actions - only if requested */}\n {showActions && (\n <div className=\"pt-2\">\n <InteractiveSkeleton.Button className=\"w-24 h-8\" />\n </div>\n )}\n \n {/* Metadata footer - Matches BlogMeta horizontal layout */}\n {showMetadata && (\n <div className=\"mt-auto\">\n <div className=\"flex items-center justify-between gap-4 pt-4 border-t border-ods-border\">\n {/* Author section - matches AuthorMeta */}\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <MediaSkeleton.Avatar size=\"sm\" />\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n \n {/* Date and reading time section - matches BlogMeta right side */}\n <div className=\"flex items-center gap-3 text-[#767676] shrink-0\">\n <TextSkeleton.Caption className=\"w-12\" />\n {/* Separator dot */}\n <div className=\"w-1 h-1 bg-[#767676] rounded-full\"></div>\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n )\n}\n\n/**\n * Category card skeleton content\n */\nfunction CategoryCardContent() {\n return (\n <div className=\"p-4 md:p-6 space-y-4\">\n {/* Icon grid */}\n <div className=\"flex gap-2 md:gap-3\">\n {Array.from({ length: 6 }).map((_, index) => (\n <MediaSkeleton.Icon \n key={index}\n size=\"lg\"\n className=\"flex-shrink-0\"\n />\n ))}\n </div>\n\n {/* Content */}\n <div className=\"space-y-2\">\n <div className=\"space-y-1\">\n <TextSkeleton.Subheading className=\"w-3/4\" />\n <TextSkeleton.Caption className=\"w-1/2\" />\n </div>\n \n <div className=\"flex items-start md:items-end justify-between gap-4 md:gap-6\">\n <div className=\"flex-1 space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n \n <InteractiveSkeleton.Button className=\"w-10 h-10 md:w-12 md:h-12 flex-shrink-0\" />\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Alternative card skeleton content (for vendor alternatives/comparisons)\n */\nfunction AlternativeCardContent({ showActions }: { showActions: boolean }) {\n return (\n <div className=\"flex items-start gap-4 p-4\">\n <MediaSkeleton.Avatar size=\"md\" className=\"flex-shrink-0\" />\n \n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <TextSkeleton.Subheading className=\"w-1/3\" />\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n \n <div className=\"space-y-1\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-5/6\" />\n </div>\n\n {showActions && (\n <div className=\"pt-2\">\n <InteractiveSkeleton.Button className=\"w-20 h-8\" />\n </div>\n )}\n </div>\n </div>\n )\n}\n\n/**\n * Grid of card skeletons for loading lists\n */\nexport function CardSkeletonGrid({\n count = 6,\n variant = 'vendor',\n className,\n containerClassName,\n ...props\n}: {\n count?: number\n variant?: CardSkeletonProps['variant']\n className?: string\n containerClassName?: string\n} & Omit<CardSkeletonProps, 'variant'>) {\n return (\n <div \n className={cn(\n \"grid gap-4 md:gap-6\",\n // Responsive grid based on card type\n variant === 'vendor' && \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n variant === 'blog' && \"grid-cols-1 md:grid-cols-2\",\n variant === 'category' && \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n variant === 'alternative' && \"grid-cols-1\",\n className\n )}\n role=\"status\"\n aria-label={`Loading ${count} ${variant} cards`}\n >\n {Array.from({ length: count }, (_, index) => (\n <CardSkeleton \n key={index} \n variant={variant}\n containerClassName={containerClassName}\n {...props}\n />\n ))}\n </div>\n )\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from \"./unified-skeleton\"\n\ninterface ContentSkeletonProps {\n className?: string\n}\n\n/**\n * Paragraph skeleton with varying line lengths for natural appearance\n */\nexport function ParagraphSkeleton({ \n className,\n lines = 4 \n}: ContentSkeletonProps & { lines?: number }) {\n const lineWidths = ['w-full', 'w-full', 'w-5/6', 'w-3/4', 'w-4/5', 'w-2/3']\n \n return (\n <div className={cn(\"space-y-2\", className)}>\n {Array.from({ length: lines }).map((_, index) => (\n <TextSkeleton.Body \n key={index}\n className={lineWidths[index % lineWidths.length]}\n />\n ))}\n </div>\n )\n}\n\n/**\n * List skeleton for navigation menus, categories, etc.\n */\nexport function ListSkeleton({ \n className,\n items = 5,\n showIcons = false,\n showActions = false \n}: ContentSkeletonProps & { \n items?: number\n showIcons?: boolean\n showActions?: boolean\n}) {\n return (\n <div className={cn(\"space-y-3\", className)}>\n {Array.from({ length: items }).map((_, index) => (\n <div key={index} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {showIcons && <MediaSkeleton.Icon size=\"sm\" />}\n <TextSkeleton.Body className=\"w-32 md:w-48\" />\n </div>\n {showActions && (\n <div className=\"flex items-center gap-2\">\n <TextSkeleton.Caption className=\"w-8\" />\n <UnifiedSkeleton variant=\"default\" className=\"w-4 h-4\" />\n </div>\n )}\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * Table skeleton for data displays\n */\nexport function TableSkeleton({ \n className,\n rows = 5,\n columns = 4 \n}: ContentSkeletonProps & { \n rows?: number\n columns?: number\n}) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n {/* Table header */}\n <div className=\"grid gap-4\" style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}>\n {Array.from({ length: columns }).map((_, index) => (\n <TextSkeleton.Subheading key={index} className=\"w-3/4\" />\n ))}\n </div>\n \n {/* Table rows */}\n <div className=\"space-y-3\">\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <div \n key={rowIndex} \n className=\"grid gap-4 py-2 border-b border-ods-divider\"\n style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}\n >\n {Array.from({ length: columns }).map((_, colIndex) => (\n <TextSkeleton.Body key={colIndex} className=\"w-2/3\" />\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n/**\n * Form skeleton for input fields and form layouts\n */\nexport function FormSkeleton({ \n className,\n fields = 4 \n}: ContentSkeletonProps & { fields?: number }) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n {Array.from({ length: fields }).map((_, index) => (\n <div key={index} className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-24\" />\n <InteractiveSkeleton.Input />\n {index % 3 === 0 && (\n <TextSkeleton.Caption className=\"w-48\" />\n )}\n </div>\n ))}\n \n <div className=\"flex gap-4 pt-4\">\n <InteractiveSkeleton.Button />\n <InteractiveSkeleton.Button className=\"bg-ods-border\" />\n </div>\n </div>\n )\n}\n\n/**\n * Navigation menu skeleton\n */\nexport function NavigationSkeleton({ \n className,\n items = 6,\n horizontal = true \n}: ContentSkeletonProps & { \n items?: number\n horizontal?: boolean\n}) {\n return (\n <nav \n className={cn(\n \"flex gap-4 md:gap-6\",\n !horizontal && \"flex-col\",\n className\n )}\n role=\"status\"\n aria-label=\"Loading navigation\"\n >\n {Array.from({ length: items }).map((_, index) => (\n <TextSkeleton.Body key={index} className=\"w-16 md:w-20\" />\n ))}\n </nav>\n )\n}\n\n/**\n * Profile/user info skeleton\n */\nexport function ProfileSkeleton({ \n className,\n showBio = true,\n showStats = true \n}: ContentSkeletonProps & { \n showBio?: boolean\n showStats?: boolean\n}) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n {/* Avatar and basic info */}\n <div className=\"flex items-start gap-4\">\n <MediaSkeleton.Avatar size=\"lg\" />\n <div className=\"flex-1 space-y-2\">\n <TextSkeleton.Subheading className=\"w-1/2\" />\n <TextSkeleton.Caption className=\"w-1/3\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n </div>\n\n {/* Bio/description */}\n {showBio && (\n <div className=\"space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-4/5\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n )}\n\n {/* Stats */}\n {showStats && (\n <div className=\"flex gap-6\">\n <div className=\"text-center\">\n <TextSkeleton.Subheading className=\"w-8 mx-auto\" />\n <TextSkeleton.Caption className=\"w-12 mx-auto\" />\n </div>\n <div className=\"text-center\">\n <TextSkeleton.Subheading className=\"w-8 mx-auto\" />\n <TextSkeleton.Caption className=\"w-16 mx-auto\" />\n </div>\n <div className=\"text-center\">\n <TextSkeleton.Subheading className=\"w-8 mx-auto\" />\n <TextSkeleton.Caption className=\"w-14 mx-auto\" />\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Comment/review skeleton for user-generated content\n */\nexport function CommentSkeleton({ \n className,\n showRating = false,\n showReplies = false \n}: ContentSkeletonProps & { \n showRating?: boolean\n showReplies?: boolean\n}) {\n return (\n <div className={cn(\"space-y-3\", className)}>\n {/* User info */}\n <div className=\"flex items-center gap-3\">\n <MediaSkeleton.Avatar size=\"sm\" />\n <div className=\"flex-1 flex items-center gap-4\">\n <TextSkeleton.Body className=\"w-24\" />\n <TextSkeleton.Caption className=\"w-16\" />\n {showRating && (\n <div className=\"flex gap-1\">\n {Array.from({ length: 5 }).map((_, i) => (\n <MediaSkeleton.Icon key={i} size=\"sm\" />\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Comment content */}\n <div className=\"ml-11 space-y-2\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n <TextSkeleton.Body className=\"w-1/2\" />\n </div>\n\n {/* Actions */}\n <div className=\"ml-11 flex gap-4\">\n <TextSkeleton.Caption className=\"w-12\" />\n <TextSkeleton.Caption className=\"w-16\" />\n <TextSkeleton.Caption className=\"w-8\" />\n </div>\n\n {/* Replies */}\n {showReplies && (\n <div className=\"ml-11 pl-4 border-l border-ods-divider space-y-4\">\n {Array.from({ length: 2 }).map((_, index) => (\n <div key={index} className=\"space-y-2\">\n <div className=\"flex items-center gap-3\">\n <MediaSkeleton.Avatar size=\"sm\" />\n <TextSkeleton.Body className=\"w-20\" />\n <TextSkeleton.Caption className=\"w-12\" />\n </div>\n <div className=\"ml-11\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Feature list skeleton for product features, specifications, etc.\n */\nexport function FeatureListSkeleton({ \n className,\n features = 6,\n showIcons = true,\n grouped = false \n}: ContentSkeletonProps & { \n features?: number\n showIcons?: boolean\n grouped?: boolean\n}) {\n if (grouped) {\n // Grouped features with sections\n return (\n <div className={cn(\"space-y-6\", className)}>\n {Array.from({ length: 3 }).map((_, groupIndex) => (\n <div key={groupIndex} className=\"space-y-3\">\n <TextSkeleton.Subheading className=\"w-1/3\" />\n <div className=\"space-y-2\">\n {Array.from({ length: features / 3 }).map((_, featureIndex) => (\n <div key={featureIndex} className=\"flex items-center gap-3\">\n {showIcons && <MediaSkeleton.Icon size=\"sm\" />}\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n // Simple feature list\n return (\n <div className={cn(\"space-y-3\", className)}>\n {Array.from({ length: features }).map((_, index) => (\n <div key={index} className=\"flex items-center gap-3\">\n {showIcons && <MediaSkeleton.Icon size=\"sm\" />}\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * Timeline/activity skeleton\n */\nexport function TimelineSkeleton({ \n className,\n items = 5 \n}: ContentSkeletonProps & { items?: number }) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n {Array.from({ length: items }).map((_, index) => (\n <div key={index} className=\"flex gap-4\">\n <div className=\"flex flex-col items-center\">\n <MediaSkeleton.Icon size=\"sm\" />\n {index < items - 1 && (\n <div className=\"w-px h-12 bg-ods-border mt-2\" />\n )}\n </div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-3\">\n <TextSkeleton.Body className=\"w-1/3\" />\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * Pricing/plan skeleton\n */\nexport function PricingSkeleton({ \n className,\n plans = 3 \n}: ContentSkeletonProps & { plans?: number }) {\n return (\n <div className={cn(\n \"grid gap-6\",\n plans === 2 && \"grid-cols-1 md:grid-cols-2\",\n plans === 3 && \"grid-cols-1 md:grid-cols-3\",\n plans === 4 && \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n className\n )}>\n {Array.from({ length: plans }).map((_, index) => (\n <div key={index} className=\"bg-ods-card border border-ods-border rounded-lg p-6\">\n <div className=\"space-y-4\">\n {/* Plan name */}\n <TextSkeleton.Subheading className=\"w-1/2\" />\n \n {/* Price */}\n <div className=\"space-y-1\">\n <TextSkeleton.Heading className=\"w-1/3\" />\n <TextSkeleton.Caption className=\"w-1/4\" />\n </div>\n\n {/* Features */}\n <div className=\"space-y-3 py-4\">\n {Array.from({ length: 5 }).map((_, featureIndex) => (\n <div key={featureIndex} className=\"flex items-center gap-2\">\n <MediaSkeleton.Icon size=\"sm\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n ))}\n </div>\n\n {/* CTA Button */}\n <InteractiveSkeleton.Button className=\"w-full\" />\n </div>\n </div>\n ))}\n </div>\n )\n} ","import React from 'react'\nimport { cn } from \"../../utils/cn\"\n\ninterface ProfileLoadingSkeletonProps {\n className?: string;\n}\n\nexport function ProfileLoadingSkeleton({ className }: ProfileLoadingSkeletonProps) {\n return (\n <div className={cn(\"space-y-6\", className)}>\n {/* Header skeleton */}\n <div className=\"flex items-center space-x-4\">\n <div className=\"h-16 w-16 bg-gray-200 rounded-full animate-pulse\" />\n <div className=\"space-y-2\">\n <div className=\"h-4 w-32 bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-3 w-24 bg-gray-200 rounded animate-pulse\" />\n </div>\n </div>\n \n {/* Content skeleton */}\n <div className=\"space-y-4\">\n <div className=\"h-4 w-full bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-4 w-3/4 bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-4 w-1/2 bg-gray-200 rounded animate-pulse\" />\n </div>\n </div>\n )\n}","import React from 'react'\nimport { cn } from \"../../utils/cn\"\nimport {\n UnifiedSkeleton,\n TextSkeleton,\n InteractiveSkeleton\n} from './unified-skeleton'\n\ninterface SkeletonProps {\n className?: string\n /**\n * Number of input fields to render on the right column (defaults to 4).\n */\n fields?: number\n}\n\n/**\n * MspProfileFormSkeleton\n * -----------------------------------------------------------------------------\n * Loading state for the <MspProfileForm /> component used in the Share-Your-Stack\n * wizard (and any other area that re-uses the form).\n *\n * Design Notes:\n * – Two-column grid matching the live component (logo upload on the left,\n * text / numeric inputs on the right).\n * – Left column: square/circular media skeleton to represent logo uploader.\n * – Right column: label + input pair per field.\n * – Mobile (<768px) collapses to one column via grid existing classes.\n * – Uses UnifiedSkeleton system to stay consistent with global loading design.\n */\nexport function MspProfileFormSkeleton({\n className,\n fields = 4,\n}: SkeletonProps) {\n return (\n <div\n className={cn(\n 'grid grid-cols-1 md:grid-cols-2 gap-6 items-stretch',\n className,\n )}\n role=\"status\"\n aria-label=\"Loading MSP profile form\"\n >\n {/* Left – Logo uploader placeholder */}\n <div className=\"flex flex-col space-y-2 h-full\">\n {/* Label skeleton */}\n <TextSkeleton.Body className=\"w-28\" />\n <div className=\"flex-1 min-h-[180px] md:min-h-full\">\n <UnifiedSkeleton className=\"w-full h-full rounded-lg\" aria-label=\"Loading company logo\" />\n </div>\n </div>\n\n {/* Right – Input fields grid (mirrors form) */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {Array.from({ length: fields }).map((_, idx) => (\n <div key={idx} className=\"space-y-2 flex flex-col\">\n <TextSkeleton.Body className=\"w-40\" />\n <InteractiveSkeleton.Input />\n </div>\n ))}\n </div>\n </div>\n )\n} ","import React from 'react'\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton } from './unified-skeleton'\n\ninterface CategoryCardSkeletonProps {\n className?: string\n}\n\nexport function CategoryCardSkeleton({ className }: CategoryCardSkeletonProps) {\n return (\n <article\n className={cn(\n 'bg-[#1A1A1A] border border-[#424242] rounded-[12px] p-8 flex flex-col min-w-0 box-border',\n className,\n )}\n role=\"status\"\n aria-label=\"Loading category card\"\n >\n {/* Icons row */}\n <div className=\"flex gap-6 mb-8 justify-center items-center\">\n {Array.from({ length: 10 }).map((_, i) => (\n <UnifiedSkeleton\n key={i}\n variant=\"circular\"\n className=\"w-10 h-10 flex-shrink-0\"\n aria-label=\"Loading icon\"\n />\n ))}\n </div>\n\n {/* Text block */}\n <div className=\"flex-1 flex flex-col space-y-3\">\n <TextSkeleton.Heading className=\"w-3/4\" />\n <TextSkeleton.Body className=\"w-1/2\" />\n <TextSkeleton.Body className=\"w-full\" />\n </div>\n\n {/* Arrow button placeholder */}\n <div className=\"mt-4 flex justify-end\">\n <UnifiedSkeleton className=\"w-12 h-12 rounded-[6px]\" aria-label=\"Loading button\" />\n </div>\n </article>\n )\n} ","import React from 'react'\nimport { cn } from \"../../utils/cn\"\nimport { TextSkeleton, UnifiedSkeleton } from './unified-skeleton'\n\ninterface CategoryVendorSelectorSkeletonProps {\n /** number of subcategory blocks to render */\n subcategories?: number\n className?: string\n}\n\nexport function CategoryVendorSelectorSkeleton({ subcategories = 3, className }: CategoryVendorSelectorSkeletonProps) {\n return (\n <div\n className={cn('bg-ods-card border border-ods-border rounded-lg p-6', className)}\n role=\"status\"\n aria-label=\"Loading category section\"\n >\n {/* Header */}\n <div className=\"mb-6 space-y-2 max-w-xl\">\n <TextSkeleton.Heading className=\"w-1/2\" />\n <TextSkeleton.Body className=\"w-3/4\" />\n </div>\n\n {/* Subcategory blocks */}\n <div className=\"space-y-6\">\n {Array.from({ length: subcategories }).map((_, idx) => (\n <div key={idx} className=\"space-y-2\">\n {/* Subcategory title */}\n <TextSkeleton.Subheading className=\"w-1/3\" />\n {/* Vendor slots container */}\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\n {Array.from({ length: 2 }).map((__, j) => (\n <UnifiedSkeleton key={j} className=\"h-20 rounded-lg\" />\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n} ","import React from 'react'\nimport { cn } from \"../../utils/cn\"\nimport { UnifiedSkeleton, TextSkeleton } from './unified-skeleton'\n\ninterface WizardLayoutSkeletonProps {\n steps?: number\n className?: string\n}\n\nexport function WizardLayoutSkeleton({ steps = 6, className }: WizardLayoutSkeletonProps) {\n return (\n <div className={cn('space-y-6', className)} role=\"status\" aria-label=\"Loading wizard layout\">\n {/* Progress bar */}\n <div className=\"flex flex-wrap items-center gap-2\">\n {Array.from({ length: steps }).map((_, i) => (\n <UnifiedSkeleton key={i} className=\"h-6 w-24 rounded\" />\n ))}\n </div>\n\n {/* Header */}\n <div className=\"space-y-2 max-w-2xl\">\n <TextSkeleton.Heading className=\"w-2/3\" />\n <TextSkeleton.Body className=\"w-1/2\" />\n </div>\n\n {/* Bottom navigation buttons */}\n <div className=\"flex justify-between mt-10\">\n <UnifiedSkeleton className=\"h-10 w-24 rounded\" />\n <UnifiedSkeleton className=\"h-10 w-32 rounded\" />\n </div>\n </div>\n )\n} ","import React from 'react';\n\ninterface MarginReportSkeletonProps {\n /** Enable pulse animation (default: true) */\n animate?: boolean;\n /** Optional explanation text shown above overlay content */\n description?: React.ReactNode;\n /** Optional React node displayed over skeleton (button, loader, etc.) */\n overlayContent?: React.ReactNode;\n}\n\nexport function MarginReportSkeleton({ animate = true, description, overlayContent }: MarginReportSkeletonProps) {\n return (\n <main className={`bg-[#161616] ${animate ? 'animate-pulse' : ''} relative min-h-screen`}>\n <div className=\"max-w-[1920px] px-6 md:px-20 py-6 md:py-10 mx-auto space-y-10\">\n {/* Header */}\n <div className=\"space-y-3\">\n <div className=\"h-10 w-72 bg-[#2A2A2A] rounded\" />\n <div className=\"h-4 w-80 bg-[#2A2A2A] rounded\" />\n </div>\n\n {/* Summary cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"h-32 bg-ods-card border border-ods-border rounded\" />\n ))}\n </div>\n\n {/* MSP Profile & Report Info cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* MSP profile skeleton */}\n <div className=\"bg-ods-card border border-ods-border rounded-lg p-6 flex items-center gap-4 animate-pulse\">\n <div className=\"w-14 h-14 rounded-lg bg-[#2A2A2A]\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-4 bg-[#2A2A2A] rounded w-3/4\" />\n <div className=\"h-3 bg-[#2A2A2A] rounded w-1/2\" />\n </div>\n </div>\n\n {/* Report info skeleton */}\n <div className=\"bg-ods-card border border-ods-border rounded-lg p-6 flex flex-col gap-4 animate-pulse\">\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-10 h-10 rounded-lg bg-[#2A2A2A]\" />\n <div className=\"space-y-1\">\n <div className=\"h-4 w-32 bg-[#2A2A2A] rounded\" />\n <div className=\"h-3 w-20 bg-[#2A2A2A] rounded\" />\n </div>\n </div>\n <div className=\"h-6 w-36 bg-[#2A2A2A] rounded\" />\n </div>\n <div className=\"h-4 w-40 bg-[#2A2A2A] rounded mt-4\" />\n </div>\n </div>\n\n {/* Vendor solution lists (Commercial & Open-Source) */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {['Commercial Stack', 'Open-Source Stack'].map((label, idx) => (\n <div key={idx} className=\"bg-ods-card border border-ods-border rounded-lg overflow-hidden flex flex-col animate-pulse\">\n {/* list header */}\n <div className=\"flex items-center justify-between px-6 py-4\">\n <div className=\"h-6 w-40 bg-[#2A2A2A] rounded\" />\n <div className=\"flex items-center gap-2\">\n <div className=\"h-5 w-20 bg-[#2A2A2A] rounded\" />\n <div className=\"h-4 w-10 bg-[#2A2A2A] rounded\" />\n </div>\n </div>\n\n {/* vendor rows */}\n <div className=\"flex-1 flex flex-col gap-3 p-3\">\n {Array.from({ length: 5 }).map((_, j) => (\n <div key={j} className=\"bg-[#161616] border border-ods-border rounded-lg px-4 py-3 flex items-center justify-between\">\n {/* left section: icon + text */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-12 h-12 bg-[#2A2A2A] rounded-lg flex-shrink-0\" />\n <div className=\"flex flex-col min-w-0\">\n <div className=\"h-4 w-32 bg-[#2A2A2A] rounded\" />\n <div className=\"hidden md:block h-3 w-24 bg-[#2A2A2A] rounded mt-1\" />\n </div>\n </div>\n {/* right addon: cost text */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <div className=\"h-4 w-16 bg-[#2A2A2A] rounded\" />\n <div className=\"h-3 w-8 bg-[#2A2A2A] rounded\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n {/* Strategic Recommendations header placeholder */}\n <div className=\"h-6 w-60 bg-[#2A2A2A] rounded\" />\n\n {/* Recommendations grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"h-48 bg-ods-card border border-ods-border rounded\" />\n ))}\n </div>\n\n {/* OpenFrame value section */}\n <div className=\"border border-ods-border rounded-3xl p-8 space-y-6\">\n {/* Section header */}\n <div className=\"flex items-start gap-6\">\n <div className=\"flex-1 space-y-2 min-w-0\">\n <div className=\"h-8 w-72 bg-[#2A2A2A] rounded\" />\n <div className=\"h-4 w-3/4 bg-[#2A2A2A] rounded\" />\n </div>\n {/* Logo placeholder */}\n <div className=\"w-12 h-12 bg-[#2A2A2A] rounded-md shrink-0\" />\n </div>\n\n {/* Value cards grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"h-32 bg-ods-card border border-ods-border rounded\" />\n ))}\n </div>\n </div>\n </div>\n\n {/* CTA Overlay */}\n {overlayContent && (\n <div className=\"absolute inset-0 bg-ods-card/80 z-10 rounded-lg pointer-events-none\">\n {/* Button centered relative to viewport */}\n <div className=\"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-auto flex flex-col items-center gap-4 text-center px-4\">\n {description && (\n <h3 >\n {description}\n </h3>\n )}\n {overlayContent}\n </div>\n </div>\n )}\n </main>\n );\n} ","import { cn } from \"../../utils/cn\"\n\ninterface Props {\n rows?: number\n className?: string\n}\n\nexport function UsersGridSkeleton({ rows = 10, className }: Props) {\n const skeletonRows = Array.from({ length: rows })\n return (\n <div className={cn('overflow-x-auto rounded-lg border border-ods-border bg-ods-card animate-pulse', className)}>\n <table className=\"min-w-full divide-y divide-[#3A3A3A]\">\n <thead className=\"bg-[#2A2A2A]\">\n <tr>\n {['Name', 'Email', 'Role', 'Created', 'Last Sign-In'].map((h) => (\n <th key={h} className=\"px-4 py-3 text-left text-[12px] font-medium text-ods-text-primary font-['DM_Sans']\">{h}</th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-[#3A3A3A]\">\n {skeletonRows.map((_, idx) => (\n <tr key={idx}>\n {Array.from({ length: 5 }).map((__, cell) => (\n <td key={cell} className=\"px-4 py-3 whitespace-nowrap\">\n <div className=\"h-4 bg-ods-border rounded w-full\"></div>\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n} ","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\n\nexport interface OrganizationIconSkeletonProps {\n /**\n * Size variant (matches OrganizationIcon/VendorIcon sizes)\n * - xs: 24px (w-6 h-6)\n * - sm: 32px (w-8 h-8) - for devices table\n * - md: 40px (w-10 h-10) - for organizations table, dashboard (default)\n * - lg: 48px (w-12 h-12)\n * - l: 56px (w-14 h-14)\n * - xl: 64px (w-16 h-16) - for detail views\n */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'l' | 'xl'\n\n /**\n * Additional CSS classes\n */\n className?: string\n\n /**\n * Show background container (default: true)\n */\n showBackground?: boolean\n\n /**\n * Background style variant (default: 'dark')\n */\n backgroundStyle?: 'dark' | 'light' | 'white'\n}\n\n/**\n * Size classes matching VendorIcon/OrganizationIcon exactly\n */\nconst sizeClasses = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n l: 'w-14 h-14',\n xl: 'w-16 h-16'\n}\n\n/**\n * Background style classes matching VendorIcon/OrganizationIcon exactly\n */\nconst backgroundClasses = {\n dark: 'bg-[#161616] border border-ods-border',\n light: 'bg-ods-card border border-ods-border',\n white: 'bg-white border border-[#E5E5E5]'\n}\n\n/**\n * OrganizationIconSkeleton - Loading skeleton for OrganizationIcon\n *\n * Matches VendorIcon styling exactly for 100% visual parity.\n * Matches the exact dimensions of OrganizationIcon to prevent layout jumps.\n * Use this in loading states before organization data is available.\n *\n * Usage:\n *\n * ```typescript\n * // In table skeleton (matches current usage)\n * <OrganizationIconSkeleton size=\"md\" />\n *\n * // In device card skeleton\n * <OrganizationIconSkeleton size=\"sm\" />\n *\n * // In detail view skeleton\n * <OrganizationIconSkeleton size=\"xl\" />\n *\n * // Without background\n * <OrganizationIconSkeleton size=\"sm\" showBackground={false} />\n * ```\n */\nexport function OrganizationIconSkeleton({\n size = 'md',\n className = '',\n showBackground = true,\n backgroundStyle = 'dark'\n}: OrganizationIconSkeletonProps) {\n const containerClasses = cn(\n sizeClasses[size],\n 'rounded-lg flex items-center justify-center flex-shrink-0',\n showBackground && backgroundClasses[backgroundStyle],\n !showBackground && 'overflow-hidden',\n className\n )\n\n return (\n <div\n className={containerClasses}\n role=\"status\"\n aria-label=\"Loading organization icon\"\n >\n <div className=\"w-1/2 h-1/2 bg-ods-border rounded-sm animate-pulse\" />\n </div>\n )\n}\n","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { OrganizationIconSkeleton } from \"./organization-icon-skeleton\"\nimport { TextSkeleton, MediaSkeleton, InteractiveSkeleton } from \"./unified-skeleton\"\n\nexport interface OrganizationCardSkeletonProps {\n /**\n * Additional CSS classes\n */\n className?: string\n\n /**\n * Show footer stats area\n */\n showFooter?: boolean\n\n /**\n * Show description area\n */\n showDescription?: boolean\n\n /** Optional tailwind classes to override the card container background & border */\n containerClassName?: string\n}\n\n/**\n * OrganizationCardSkeleton - Loading skeleton matching OrganizationCard exact layout\n *\n * Matches VendorCard skeleton structure for 100% visual parity.\n *\n * Structure:\n * - Header: 60x60px org logo + title + subtitle\n * - Description: Fixed 48px height with 2-line clamp\n * - Footer: Stats display area\n *\n * Prevents layout jumps by matching exact dimensions.\n */\nexport function OrganizationCardSkeleton({\n className,\n containerClassName,\n showFooter = true,\n showDescription = true\n}: OrganizationCardSkeletonProps) {\n return (\n <div\n className={cn(\n containerClassName || \"bg-ods-card border border-ods-border\",\n \"rounded-lg overflow-hidden h-full flex flex-col\",\n className\n )}\n role=\"status\"\n aria-label=\"Loading organization card\"\n >\n <div className=\"p-4 gap-3 flex flex-col\">\n {/* Header Section - Row layout matching OrganizationCard/VendorCard */}\n <div className=\"flex items-start gap-3 w-full\">\n {/* Logo Frame - 60px width fixed, matching actual structure */}\n <OrganizationIconSkeleton\n size=\"xl\"\n backgroundStyle=\"dark\"\n showBackground={true}\n className=\"w-[60px] h-[60px]\"\n />\n\n {/* Text Container - Column layout, matching actual structure */}\n <div className=\"flex-1 flex flex-col justify-center py-2 min-w-0 space-y-1\">\n {/* Title - Single line with proper width */}\n <TextSkeleton.Subheading className=\"w-3/4\" />\n {/* Subtitle (industry/tier) - Single line, shorter */}\n <TextSkeleton.Caption className=\"w-1/2\" />\n </div>\n </div>\n\n {/* Description Section - Fixed 48px height matching VendorCard */}\n {showDescription && (\n <div className=\"w-full h-12 overflow-hidden flex items-center\">\n <div className=\"space-y-1 w-full\">\n <TextSkeleton.Body className=\"w-full\" />\n <TextSkeleton.Body className=\"w-2/3\" />\n </div>\n </div>\n )}\n\n {/* Footer Section - Stats display */}\n {showFooter && (\n <div className=\"flex items-center justify-between gap-2 w-full min-w-0\">\n {/* Stats Container */}\n <div className=\"flex items-center gap-3 md:gap-4 min-w-0 flex-shrink\">\n {/* Stat 1 */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-5 h-5\" />\n <TextSkeleton.Caption className=\"w-8\" />\n </div>\n\n {/* Stat 2 */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-5 h-5\" />\n <TextSkeleton.Caption className=\"w-10\" />\n </div>\n </div>\n\n {/* Tag/Badge Section */}\n <div className=\"flex-shrink-0\">\n <div className=\"flex items-center gap-1.5 bg-[#161616] border border-ods-border rounded px-2.5 py-1.5\">\n <div className=\"w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0\">\n <MediaSkeleton.Icon size=\"sm\" className=\"w-2.5 h-2.5\" />\n </div>\n <TextSkeleton.Caption className=\"w-16\" />\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\n/**\n * OrganizationCardSkeletonGrid - Grid of organization card skeletons\n *\n * Matches responsive grid layout:\n * - Mobile: 1 column\n * - Tablet (md): 2 columns\n * - Desktop (xl): 3 columns\n */\nexport function OrganizationCardSkeletonGrid({\n count = 12,\n className,\n containerClassName,\n showFooter = true,\n showDescription = true\n}: {\n count?: number\n className?: string\n containerClassName?: string\n showFooter?: boolean\n showDescription?: boolean\n}) {\n return (\n <div\n className={cn(\n \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-6\",\n className\n )}\n role=\"status\"\n aria-label={`Loading ${count} organization cards`}\n >\n {Array.from({ length: count }, (_, index) => (\n <OrganizationCardSkeleton\n key={index}\n containerClassName={containerClassName}\n showFooter={showFooter}\n showDescription={showDescription}\n />\n ))}\n </div>\n )\n}\n","import type React from \"react\"\nimport { cn } from \"../../utils/cn\"\nimport { OrganizationIconSkeleton } from \"./organization-icon-skeleton\"\n\nexport interface DeviceCardSkeletonProps {\n /**\n * Additional CSS classes\n */\n className?: string\n}\n\n/**\n * DeviceCardSkeleton - Loading skeleton matching DeviceCard exact layout\n *\n * Matches the structure of DeviceCard:\n * - Row 1: Device icon + Device name + More button\n * - Row 2: OS badge + Organization icon + Organization name\n * - Row 3: Status badge + Last seen\n *\n * Prevents layout jumps by matching exact dimensions.\n */\nexport function DeviceCardSkeleton({ className }: DeviceCardSkeletonProps) {\n return (\n <div\n className={cn(\n \"bg-ods-card rounded-[6px] border border-ods-border h-full\",\n className\n )}\n role=\"status\"\n aria-label=\"Loading device card\"\n >\n {/* Row 1: Device icon + Device name + More button */}\n <div className=\"flex gap-4 items-center px-4 py-3\">\n {/* Device type icon (8x8 container) */}\n <div className=\"w-8 h-8 bg-[#161616] border border-ods-border rounded-[6px] flex items-center justify-center flex-shrink-0\">\n <div className=\"w-4 h-4 bg-ods-border rounded animate-pulse\" />\n </div>\n\n {/* Device name */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"h-6 w-3/4 bg-ods-border rounded animate-pulse\" />\n </div>\n\n {/* More button */}\n <div className=\"w-12 h-12 bg-ods-border rounded-[6px] flex-shrink-0 animate-pulse\" />\n </div>\n\n {/* Row 2: OS badge + Organization */}\n <div className=\"flex gap-4 items-center px-4 py-2\">\n {/* OS badge */}\n <div className=\"w-24 h-6 bg-ods-border rounded flex-shrink-0 animate-pulse\" />\n\n {/* Organization icon */}\n <OrganizationIconSkeleton size=\"sm\" />\n\n {/* Organization name */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"h-5 w-1/2 bg-ods-border rounded animate-pulse\" />\n </div>\n </div>\n\n {/* Row 3: Status badge + Last seen */}\n <div className=\"flex gap-4 items-center px-4 py-2\">\n {/* Status badge */}\n <div className=\"w-20 h-6 bg-ods-border rounded-full flex-shrink-0 animate-pulse\" />\n\n {/* Last seen */}\n <div className=\"flex-1\">\n <div className=\"h-5 w-40 bg-ods-border rounded animate-pulse\" />\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * DeviceCardSkeletonGrid - Grid of device card skeletons\n *\n * Matches DevicesGrid layout with responsive columns:\n * - Mobile: 1 column\n * - Tablet (md): 2 columns\n * - Desktop (lg): 3 columns\n * - Large (xl): 4 columns\n */\nexport function DeviceCardSkeletonGrid({\n count = 12,\n className\n}: {\n count?: number\n className?: string\n}) {\n return (\n <div\n className={cn(\n \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\",\n className\n )}\n role=\"status\"\n aria-label={`Loading ${count} device cards`}\n >\n {Array.from({ length: count }, (_, index) => (\n <DeviceCardSkeleton key={index} />\n ))}\n </div>\n )\n}\n","\"use client\"\n\nimport { VendorDetailLayoutSkeleton } from './loading';\n\nexport function VendorPageSkeleton() {\n return <VendorDetailLayoutSkeleton />;\n}","\"use client\"\n\nimport React from 'react';\n\ninterface WhyItMattersItemProps {\n number: string;\n title: string;\n description: string;\n isLast?: boolean;\n}\n\nconst WhyItMattersItem: React.FC<WhyItMattersItemProps> = ({ number, title, description, isLast }) => {\n return (\n <li\n className={`\n flex flex-col md:flex-row items-start gap-6 p-10 w-full\n transition-colors duration-200 hover:bg-[#2A2A2A]\n ${!isLast ? 'border-b border-ods-border' : ''}\n `}\n >\n <span className=\"text-h2 tracking-[-0.02em] text-ods-accent\">\n {number}\n </span>\n <div className=\"flex-1\">\n <h3 className=\"text-h2 tracking-[-0.02em] text-ods-text-primary\">\n {title}\n </h3>\n <p className=\"text-h4 text-ods-text-primary mt-4\">\n {description}\n </p>\n </div>\n </li>\n );\n};\n\n\nconst WhyItMatters = () => {\n const items = [\n {\n number: \"1.\",\n title: \"Cut Costs\",\n description: \"Eliminate vendor fees with proven open-source alternatives\",\n },\n {\n number: \"2.\",\n title: \"Stay in Control\",\n description: \"Full visibility and data ownership\",\n },\n {\n number: \"3.\",\n title: \"Build What You Need\",\n description: \"Customize without vendor limitations\",\n },\n {\n number: \"4.\",\n title: \"Scale Freely\",\n description: \"Designed for multi-tenant MSP environments\",\n },\n ];\n\n return (\n <section className=\"bg-[#161616]\">\n <div className=\"w-full max-w-[1920px] mx-auto px-6 md:px-20\">\n <h2 className=\"text-h1 text-center text-ods-text-primary tracking-[-0.02em] mb-6\">\n Why It Matters\n </h2>\n <div className=\"bg-ods-card border border-ods-border rounded-3xl overflow-hidden w-full\">\n <ol>\n {items.map((item, index) => (\n <WhyItMattersItem\n key={item.number}\n number={item.number}\n title={item.title}\n description={item.description}\n isLast={index === items.length - 1}\n />\n ))}\n </ol>\n </div>\n </div>\n </section>\n );\n};\n\nexport default WhyItMatters; ","\"use client\"\n\nimport { CheckCircleIcon as LucideCheckCircleIcon, XCircleIcon } from './ui/custom-icons'\n\ninterface YesNoDisplayProps {\n value: boolean\n yesText?: string\n noText?: string\n customText?: string // For displaying custom text instead of Yes/No\n className?: string\n}\n\nexport function YesNoDisplay({ \n value, \n yesText = \"Yes\", \n noText = \"No\", \n customText,\n className = \"\" \n}: YesNoDisplayProps) {\n // If custom text is provided, display it with appropriate icon\n if (customText) {\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n <LucideCheckCircleIcon className=\"h-6 w-6\" />\n <span className=\"text-ods-text-primary text-[16px]\">{customText}</span>\n </div>\n )\n }\n \n // Standard Yes/No display\n if (value) {\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n <LucideCheckCircleIcon className=\"h-6 w-6\" />\n <span className=\"text-ods-text-primary text-[16px]\">{yesText}</span>\n </div>\n )\n }\n \n return (\n <div className={`flex items-center gap-2 ${className}`}>\n <XCircleIcon className=\"h-6 w-6\" />\n <span className=\"text-ods-text-secondary text-[16px]\">{noText}</span>\n </div>\n )\n}\n\n/**\n * Unified logic to determine if a feature value should be considered \"Yes\" or \"No\"\n */\nexport function evaluateFeatureValue(\n value: string | null | undefined,\n dataType: 'boolean' | 'text' | 'number'\n): boolean {\n // Handle truly empty/null values\n if (value === null || value === undefined || value === '') {\n return false\n }\n \n const stringValue = String(value).toLowerCase().trim()\n \n // Handle explicit null/empty string values\n if (stringValue === 'null' || stringValue === 'n/a' || stringValue === 'none' || stringValue === '-') {\n return false\n }\n \n // Boolean data type\n if (dataType === 'boolean') {\n return stringValue === 'true' || \n stringValue === '1' || \n stringValue === 'yes' || \n stringValue === '✓' || \n stringValue === '✅'\n }\n \n // Text data type\n if (dataType === 'text') {\n // Handle emoji values\n if (stringValue === '✅' || stringValue === '✓') {\n return true\n }\n if (stringValue === '❌' || stringValue === '✗') {\n return false\n }\n \n // Handle explicit no values\n if (stringValue === 'no' || stringValue === 'false' || stringValue === '0') {\n return false\n }\n \n // Any other non-empty text is considered \"yes\"\n return stringValue.length > 0\n }\n \n // Number data type\n if (dataType === 'number') {\n const numValue = parseFloat(stringValue)\n return !isNaN(numValue) && numValue > 0\n }\n \n // Default fallback\n return false\n} ","'use client'\n\nimport React, { useState, useEffect } from 'react';\nimport { FlamingoLogo } from './flamingo-logo';\nimport { getBaseUrl } from '../utils';\n\ninterface MadeWithLoveProps {\n /** Custom class name for the container */\n className?: string;\n /** Size variant for the component */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show on mobile (responsive) */\n showOnMobile?: boolean;\n}\n\nexport function MadeWithLove({\n className = '',\n size = 'md',\n showOnMobile = true\n}: MadeWithLoveProps) {\n const [isMobile, setIsMobile] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n // Detect mobile/desktop for responsive behavior\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < 640); // 640px = sm breakpoint\n };\n\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n // Size configuration with pixel values\n const sizeConfig = {\n sm: {\n logoSize: 14,\n fontSizeMobile: '12px',\n fontSizeDesktop: '14px',\n gap: '4px'\n },\n md: {\n logoSize: 16,\n fontSizeMobile: '14px',\n fontSizeDesktop: '16px',\n gap: '4px'\n },\n lg: {\n logoSize: 20,\n fontSizeMobile: '16px',\n fontSizeDesktop: '18px',\n gap: '6px'\n }\n };\n\n const config = sizeConfig[size];\n const flamingoUrl = getBaseUrl('flamingo');\n\n // Container styles using primitive CSS\n const containerStyle: React.CSSProperties = {\n display: (!showOnMobile && isMobile) ? 'none' : 'inline-flex',\n alignItems: 'center',\n gap: config.gap,\n fontSize: isMobile ? config.fontSizeMobile : config.fontSizeDesktop,\n lineHeight: 1.5,\n color: '#ffffff',\n fontFamily: 'inherit'\n };\n\n // Button/link styles using primitive CSS\n const linkStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '2px',\n padding: 0,\n margin: 0,\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n textDecoration: isHovered ? 'underline' : 'none',\n color: '#ffffff',\n fontSize: '14px',\n fontFamily: '\"Azeret Mono\", monospace',\n transition: 'text-decoration 0.2s ease',\n outline: 'none'\n };\n\n // Logo container styles\n const logoStyle: React.CSSProperties = {\n marginLeft: '2px',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center'\n };\n\n // Text span styles\n const textStyle: React.CSSProperties = {\n color: '#ffffff',\n marginLeft: '4px',\n textDecoration: 'none'\n };\n\n return (\n <div\n style={containerStyle}\n className={className}\n >\n Made with love by\n <a\n href={flamingoUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={linkStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div style={logoStyle}>\n <FlamingoLogo\n size={config.logoSize}\n color=\"#f357bb\" // Direct hex instead of CSS variable for cross-framework compatibility\n />\n </div>\n <span style={textStyle}>Flamingo</span>\n </a>\n </div>\n );\n}","\"use client\";\n\nimport { Label } from \"./ui/label\";\nimport DatePicker from 'react-datepicker';\nimport { cn } from '../utils/cn';\n\ninterface DateTimePickerProps {\n value?: Date;\n onChange: (date: Date | null) => void;\n disabled?: boolean;\n label?: string;\n placeholder?: string;\n className?: string;\n showTimeSelect?: boolean;\n timeFormat?: string;\n timeIntervals?: number;\n dateFormat?: string;\n}\n\n// Shared input styling that matches Input component pattern\nconst inputClassName = cn(\n \"flex h-10 w-full rounded-md border px-3 py-2 text-sm ring-offset-background\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50 touch-manipulation\",\n // Admin theme colors\n \"bg-ods-card border-ods-border text-ods-text-primary\",\n \"placeholder:text-[#767676] focus-visible:ring-[#FFC008]\",\n \"md:text-sm text-base\" // Mobile zoom prevention\n);\n\nexport function DateTimePicker({\n value,\n onChange,\n disabled = false,\n label,\n placeholder = \"Select date and time\",\n className,\n showTimeSelect = true,\n timeFormat = \"HH:mm\",\n timeIntervals = 15,\n dateFormat = \"MMMM d, yyyy h:mm aa\"\n}: DateTimePickerProps) {\n return (\n <div className={cn(\"space-y-2\", className)}>\n {label && (\n <Label className=\"font-['Azeret_Mono'] text-[12px] font-semibold leading-[1em] tracking-[-0.02em] text-ods-text-secondary uppercase\">\n {label}\n </Label>\n )}\n\n <div className=\"w-full\">\n <DatePicker\n selected={value}\n onChange={onChange}\n showTimeSelect={showTimeSelect}\n timeFormat={timeFormat}\n timeIntervals={timeIntervals}\n dateFormat={dateFormat}\n placeholderText={placeholder}\n disabled={disabled}\n wrapperClassName=\"w-full\"\n className={inputClassName}\n />\n </div>\n \n <style dangerouslySetInnerHTML={{ __html: `\n .react-datepicker-wrapper {\n width: 100% !important;\n display: block !important;\n }\n\n .react-datepicker__input-container {\n width: 100% !important;\n }\n\n .react-datepicker__input-container input {\n width: 100% !important;\n }\n\n /* Dark theme for calendar popup */\n .react-datepicker-popper {\n z-index: 9999 !important;\n }\n\n .react-datepicker {\n background-color: #212121 !important;\n border: 1px solid #3A3A3A !important;\n color: #FAFAFA !important;\n z-index: 9999 !important;\n }\n\n .react-datepicker__header {\n background-color: #2A2A2A !important;\n border-bottom: 1px solid #3A3A3A !important;\n color: #FAFAFA !important;\n }\n\n .react-datepicker__current-month {\n color: #FAFAFA !important;\n }\n\n .react-datepicker__day-name {\n color: #888888 !important;\n }\n\n .react-datepicker__day {\n color: #FAFAFA !important;\n }\n\n .react-datepicker__day:hover {\n background-color: #3A3A3A !important;\n }\n\n .react-datepicker__day--selected {\n background-color: #FFC008 !important;\n color: #000000 !important;\n }\n\n .react-datepicker__day--keyboard-selected {\n background-color: #FFC008 !important;\n color: #000000 !important;\n }\n\n .react-datepicker__time-container {\n border-left: 1px solid #3A3A3A !important;\n }\n\n .react-datepicker__time {\n background: #212121 !important;\n }\n\n .react-datepicker__time-box {\n width: 85px !important;\n }\n\n .react-datepicker-time__header {\n background-color: #2A2A2A !important;\n color: #FAFAFA !important;\n }\n\n .react-datepicker__time-list-item {\n color: #FAFAFA !important;\n }\n\n .react-datepicker__time-list-item:hover {\n background-color: #3A3A3A !important;\n }\n\n .react-datepicker__time-list-item--selected {\n background-color: #FFC008 !important;\n color: #000000 !important;\n }\n\n .react-datepicker__navigation {\n top: 1rem !important;\n }\n\n .react-datepicker__navigation--previous {\n border-right-color: #888888 !important;\n }\n\n .react-datepicker__navigation--next {\n border-left-color: #888888 !important;\n }\n ` }} />\n </div>\n );\n} ","'use client'\n\n/**\n * `<ProductReleasesView />` — the shared, SELF-CONTAINED releases LIST surface.\n *\n * The host configures only two things: the **api route** (`endpoint`, default\n * `/api/releases`) and the **internal page route** for a release's detail page\n * (via `runtime.composeContentUrl` / `basePath`). Everything else — reading the\n * search / status / page URL params the section chrome writes, fetching the\n * page, pagination, empty / error / loading states, card composition + nav —\n * happens INSIDE the lib. Mirrors the `DeliveryLists` internal-fetch pattern\n * (plain `fetch` + `useEffect`/`useState`, no react-query dependency).\n *\n * SSR: pass `initialData` to hydrate the first page without a client round-trip\n * (the hub can server-fetch); embedders omit it and the view fetches on mount.\n *\n * Card props: `buildCardProps` defaults to the lib's RICH `buildProductReleaseCardProps`\n * (full lg metadata — Type / Status / author / changelog counts); pass your own to customize.\n */\n\nimport * as React from 'react'\n\nimport { useRouter, useSearchParams, usePathname } from '../../../embed-shims'\nimport { useSelfFetch } from '../../../hooks/use-self-fetch'\nimport { useChatRuntime } from '../../../contexts/chat-runtime-context'\nimport type { ProductRelease, ProductReleaseListResponse } from '../../../types/product-release'\nimport { cn } from '../../../utils/cn'\nimport { resolveContentHref } from '../../../utils/content-href'\nimport { isModifierClick } from '../../chat/utils/chat-nav-resolution'\nimport { executeNavigationImperative } from '../../chat/utils/execute-navigation'\nimport { useEntityCardLink } from '../../chat/entity-cards/use-entity-card-link'\nimport { buildProductReleaseCardProps } from '../../chat/entity-cards/product-release-card-defaults'\nimport { EmptyState } from '../../empty-state'\nimport { LoadError } from '../../ui/error-state'\nimport { PersistentPaginationWrapper } from '../../persistent-pagination'\nimport { ProductReleaseCard, type ProductReleaseCardProps } from './product-release-card'\nimport { ProductReleaseCardSkeleton } from './product-release-card-skeleton'\nimport { DEV_SECTION_PARAM_KEYS } from '../../../utils/dev-sections/dev-section-param-keys'\n\nconst DEFAULT_ENDPOINT = '/api/releases'\n// Param keys sourced from the shared registry (see RoadmapView) — single source for the\n// chrome's written `?key=` and this view's read.\nconst DEFAULT_SEARCH_PARAM_KEY = DEV_SECTION_PARAM_KEYS.search\nconst DEFAULT_STATUS_PARAM_KEY = DEV_SECTION_PARAM_KEYS.releaseStatus\nconst DEFAULT_PAGE_PARAM_KEY = 'page'\n\n/** The `<ProductReleaseCard>` props the caller derives per release — the card's\n * own data fields minus the ones this view supplies (title/summary/version/\n * size/nav). `formattedDate` stays required so the spread satisfies the card. */\nexport type ProductReleaseCardExtras = Omit<\n ProductReleaseCardProps,\n 'title' | 'summary' | 'version' | 'size' | 'anchorProps' | 'onClick' | 'className'\n>\n\nexport interface ProductReleasesViewProps {\n /** GET endpoint for the releases list (the api route). The view appends\n * `?limit&offset&<search>&<release_status>`. Default `/api/releases`. */\n endpoint?: string\n /** Optional SSR hydrate for the first page — skips the initial client fetch. */\n initialData?: ProductReleaseListResponse\n /** Page size → fixed slot count + offset math. Default 5. */\n itemsPerPage?: number\n /** Fallback detail-href prefix when `runtime.composeContentUrl` is not wired\n * (single-platform embedders). Default `/releases`. */\n basePath?: string\n /** Derive the per-card prop bundle. Defaults to the lib's RICH lg builder\n * (`buildProductReleaseCardProps` — full Type/Status/author/changelog metadata)\n * so embedders get the complete card with zero config; pass your own to customize. */\n buildCardProps?: (release: ProductRelease) => ProductReleaseCardExtras\n /** URL param key for the search input. MUST match the chrome that writes it.\n * Default `'search'` (also the outbound query-param name). */\n searchParamKey?: string\n /** URL param key for the status filter. Default `'release_status'`. */\n statusParamKey?: string\n /** URL param key for the page number. Default `'page'`. */\n pageParamKey?: string\n className?: string\n}\n\n/**\n * Per-row child — owns the per-release hooks (`useChatRuntime` +\n * `useEntityCardLink` + `useRouter`) so they run at a component top level, NOT\n * inside the parent `.map()` (Rules-of-Hooks).\n */\nfunction ReleaseRow({\n release,\n basePath,\n buildCardProps,\n}: {\n release: ProductRelease\n basePath: string\n buildCardProps: (release: ProductRelease) => ProductReleaseCardExtras\n}) {\n const runtime = useChatRuntime()\n const router = useRouter()\n // Pass the HYDRATED junction (`product_release_platforms` — the release DAL\n // flattens each platform's `name` onto it), like the blog / case-study /\n // interview grids. The composer reads `name` → resolves to the CURRENT\n // platform when the release belongs to it → relative same-tab href.\n const cta = resolveContentHref(runtime?.composeContentUrl, {\n type: 'product_release',\n slug: release.slug,\n basePath,\n platforms: release.product_release_platforms,\n })\n const { target, rel } = useEntityCardLink({ href: cta.href, targetPlatform: cta.targetPlatform })\n\n const onClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n // Let the browser handle modifier / middle / new-tab clicks (shared\n // `isModifierClick` rule). Otherwise soft same-origin nav: the host's\n // `navigate` (hub docNav) if wired, else the registered embed-shims router.\n if (e.defaultPrevented || isModifierClick(e) || target === '_blank') return\n e.preventDefault()\n executeNavigationImperative({\n runtime,\n href: cta.href,\n targetPlatform: cta.targetPlatform,\n fallbackNavigate: router.push,\n })\n }\n\n return (\n <ProductReleaseCard\n size=\"lg\"\n title={release.title}\n summary={release.summary}\n version={release.version}\n {...buildCardProps(release)}\n anchorProps={{ href: cta.href, target, rel, onClick }}\n />\n )\n}\n\nexport function ProductReleasesView({\n endpoint = DEFAULT_ENDPOINT,\n initialData,\n itemsPerPage = 5,\n basePath = '/releases',\n buildCardProps = buildProductReleaseCardProps,\n searchParamKey = DEFAULT_SEARCH_PARAM_KEY,\n statusParamKey = DEFAULT_STATUS_PARAM_KEY,\n pageParamKey = DEFAULT_PAGE_PARAM_KEY,\n className,\n}: ProductReleasesViewProps = {}) {\n const searchParams = useSearchParams()\n const router = useRouter()\n const pathname = usePathname()\n\n // Filter / page state from the URL (written by the section chrome above).\n const search = searchParams.get(searchParamKey) || ''\n const status = searchParams.get(statusParamKey) || 'all'\n const currentPage = Math.max(1, parseInt(searchParams.get(pageParamKey) || '1', 10) || 1)\n const offset = (currentPage - 1) * itemsPerPage\n\n // Fold every query param into the url so it IS the fetch key.\n const listParams = new URLSearchParams({ limit: String(itemsPerPage), offset: String(offset) })\n if (search) listParams.set(searchParamKey, search)\n if (status && status !== 'all') listParams.set(statusParamKey, status)\n const { data, isLoading, error, reload } = useSelfFetch<ProductReleaseListResponse>(\n `${endpoint}?${listParams.toString()}`,\n { initialData },\n )\n\n const releases = data?.data ?? []\n const totalCount = data?.count ?? 0\n const totalPages = Math.ceil(totalCount / itemsPerPage)\n const hasActiveFilters = search !== '' || status !== 'all'\n const showEmpty = !isLoading && !error && releases.length === 0\n\n const goToPage = (page: number) => {\n const params = new URLSearchParams(searchParams.toString())\n params.set(pageParamKey, String(page))\n router.replace(`${pathname}?${params.toString()}`, { scroll: false })\n }\n const resetFilters = () => {\n const params = new URLSearchParams(searchParams.toString())\n params.delete(searchParamKey)\n params.delete(statusParamKey)\n params.delete(pageParamKey)\n router.replace(`${pathname}?${params.toString()}`, { scroll: false })\n }\n\n if (error) {\n return (\n <div className={cn('w-full', className)}>\n <LoadError message=\"Failed to load releases.\" onRetry={reload} />\n </div>\n )\n }\n\n return (\n <div className={cn('w-full flex flex-col gap-[40px]', className)}>\n <div className=\"min-h-[600px]\">\n {showEmpty ? (\n <div className=\"h-[600px] flex items-center justify-center\">\n {hasActiveFilters ? (\n <EmptyState\n type=\"search\"\n title=\"No releases found\"\n description=\"No releases match your current filters. Try adjusting your search or status filter.\"\n showCTA\n ctaText=\"Reset Filters\"\n onCtaClick={resetFilters}\n />\n ) : (\n <EmptyState\n type=\"generic\"\n title=\"No releases available\"\n description=\"Check back soon for product updates!\"\n showCTA={false}\n />\n )}\n </div>\n ) : (\n <>\n {/* ALWAYS render `itemsPerPage` slots — visibility toggles so the\n list height is stable across loading ↔ loaded. */}\n <div className=\"flex flex-col gap-6\">\n {Array.from({ length: itemsPerPage }).map((_, i) => {\n const release = releases[i]\n const hasData = !!release\n return (\n <div\n key={release?.id ?? `slot-${i}`}\n style={{ visibility: isLoading || hasData ? 'visible' : 'hidden' }}\n >\n {isLoading ? (\n <ProductReleaseCardSkeleton size=\"lg\" />\n ) : release ? (\n <ReleaseRow release={release} basePath={basePath} buildCardProps={buildCardProps} />\n ) : (\n <ProductReleaseCardSkeleton size=\"lg\" />\n )}\n </div>\n )\n })}\n </div>\n\n {/* Pagination — always present at the bottom for consistent spacing. */}\n <div className=\"mt-6 md:mt-8 flex justify-center\">\n {isLoading ? (\n <div className=\"h-12 m-3 w-64\" />\n ) : releases.length > 0 && totalPages > 1 ? (\n <PersistentPaginationWrapper\n isLoading={false}\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={goToPage}\n variant=\"blog\"\n />\n ) : (\n <div className=\"h-12 m-3 w-64\" style={{ visibility: 'hidden' }} />\n )}\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","\"use client\";\n\nimport { useState, useEffect, ComponentType } from 'react';\nimport Link from '../../../embed-shims/next-link';\nimport { useRouter } from '../../../embed-shims/next-navigation';\nimport { Card, CardContent } from '../../ui/card';\nimport { ArticleDetailLayout } from '../../layout/article-detail-layout';\nimport { BackButton } from '../../layout/back-button';\nimport { ReleaseChangelogSection } from '../../ui/release-changelog-section';\nimport { StatusBadge } from '../../ui/status-badge';\nimport { SquareAvatar } from '../../ui/square-avatar';\nimport { ImageGalleryModal } from '../../ui/image-gallery-modal';\nimport { GitHubIcon } from '../../icons/github-icon';\nimport { AlertTriangle, ExternalLink, BookMarked, Sparkles, TrendingUp, Wrench } from 'lucide-react';\nimport { formatReleaseDate } from '../../../utils/date-formatters';\nimport { nameInitials } from '../../../utils/format';\nimport { Video } from '../../features/video';\nimport { DetailPageSkeleton } from '../detail-page-skeleton';\nimport type { ChangelogEntry } from '../../../types/product-release';\nimport type { VideoTeaser } from '../../../types/video-processing';\n\n// Types for injectable components\nexport interface MarkdownRendererProps {\n content: string;\n}\n\n// Canonical RoadmapItem shape lives in chat entity types — see\n// `src/components/chat/types/entities/roadmap-item.ts`. The product-release\n// detail page previously declared a structural placeholder\n// (`{ id; [k: string]: unknown }`) that conflicted with the canonical\n// shape once the entities barrel was added; re-exporting the canonical\n// type fixes the collision while keeping the same import path for\n// downstream consumers of `./release-detail-page`.\nimport type { RoadmapItem } from '../../chat/types/entities/roadmap-item';\nimport type { DeliveryResponse } from '../../../types/delivery';\n// Re-export both types for source-compat with consumers importing\n// through this module. Canonical sources:\n// - RoadmapItem → `../../chat/types/entities/roadmap-item`\n// - DeliveryResponse → `../../../types/delivery` (single source of\n// truth, shared with the lib `<DeliveryLists>` / `<DeliveryTable>`\n// components and the new types barrel).\nexport type { RoadmapItem, DeliveryResponse };\n\nexport interface RoadmapSectionProps {\n items: RoadmapItem[];\n isLoading: boolean;\n onItemUpdate?: (item: RoadmapItem) => void;\n}\n\nexport interface DeliverySectionProps {\n data: DeliveryResponse | null;\n isLoading: boolean;\n}\n\nexport interface VideoSectionProps {\n bites: VideoTeaser[];\n title?: string;\n filterPublished?: boolean;\n}\n\n// Type for the useRelease hook result\nexport interface UseReleaseResult {\n data: unknown;\n error: Error | null;\n isLoading: boolean;\n}\n\nexport interface VideoDisplaySectionProps {\n mainVideoUrl?: string | null;\n youtubeUrl?: string | null;\n highlightVideoUrl?: string | null;\n highlightVideoThumbnail?: string | null;\n mainVideoPoster?: string | null;\n title?: string;\n videoSummary?: string | null;\n videoBites?: VideoTeaser[];\n bitesTitle?: string;\n filterPublishedBites?: boolean;\n srtContent?: string | null;\n captionsUrl?: string | null;\n}\n\nexport interface ReleaseDetailPageProps {\n slug: string;\n initialData?: unknown; // Optional pre-fetched data for admin preview\n // Required: Hook for fetching release data (must be from app-level to use correct QueryClient)\n useRelease: (slug: string | undefined) => UseReleaseResult;\n // Injectable components for app-specific rendering\n MarkdownRenderer?: ComponentType<MarkdownRendererProps>;\n RoadmapSection?: ComponentType<RoadmapSectionProps>;\n DeliverySection?: ComponentType<DeliverySectionProps>;\n VideoSection?: ComponentType<VideoSectionProps>;\n /** Injectable video display section with tabs for full/highlight video + summary + bites */\n VideoDisplaySection?: ComponentType<VideoDisplaySectionProps>;\n // API endpoints for fetching linked tasks\n roadmapApiEndpoint?: string;\n deliveryApiEndpoint?: string;\n /** Back-button config — same pattern as `DevSectionPage` /\n * `LegalDocumentPage`. Pass `false` to hide. Default\n * `{ label: 'Back to home', href: '/' }`. */\n backButton?: { label?: string; href?: string } | false;\n}\n\n// Default simple markdown renderer (just renders as text)\nfunction DefaultMarkdownRenderer({ content }: MarkdownRendererProps) {\n return <div className=\"whitespace-pre-wrap\">{content}</div>;\n}\n\nexport function ReleaseDetailPage({\n slug,\n initialData,\n useRelease,\n MarkdownRenderer = DefaultMarkdownRenderer,\n RoadmapSection,\n DeliverySection,\n VideoSection,\n VideoDisplaySection,\n roadmapApiEndpoint = '/api/roadmap',\n deliveryApiEndpoint = '/api/delivery',\n backButton\n}: ReleaseDetailPageProps) {\n const router = useRouter();\n // Use pre-fetched data if provided (admin preview), otherwise fetch via hook (public)\n const { data: fetchedRelease, error, isLoading } = useRelease(initialData ? undefined : slug);\n const release = (initialData || fetchedRelease) as Record<string, unknown> | undefined;\n const [galleryOpen, setGalleryOpen] = useState(false);\n const [galleryIndex, setGalleryIndex] = useState(0);\n\n // Back-button config — mirrors DevSectionPage / LegalDocumentPage.\n // Default: { label: 'Back to home', href: '/' }. Pass `false` to hide\n // (e.g. embed-mode where the host owns navigation chrome).\n // Narrowing note: `backButton &&` already eliminates the `false` branch,\n // so the inner expressions are typed as `{ label?, href? } | undefined`.\n // Don't re-compare to `false` here — tsc TS2367s on the dead branch.\n const showBackButton = backButton !== false;\n const backLabel = (backButton ? backButton.label : undefined) ?? 'Back to home';\n const backHref = (backButton ? backButton.href : undefined) ?? '/';\n\n // Fetch roadmap and delivery tasks if linked to this release\n const [roadmapTasks, setRoadmapTasks] = useState<RoadmapItem[]>([]);\n const [deliveryData, setDeliveryData] = useState<DeliveryResponse | null>(null);\n const [roadmapLoading, setRoadmapLoading] = useState(false);\n const [deliveryLoading, setDeliveryLoading] = useState(false);\n\n useEffect(() => {\n async function fetchLinkedTasks() {\n if (!release) return;\n\n try {\n // Fetch roadmap tasks if linked\n const roadmapTasksData = release.clickup_roadmap_tasks as Array<{ clickup_task_id: string }> | undefined;\n if (roadmapTasksData && roadmapTasksData.length > 0 && RoadmapSection) {\n setRoadmapLoading(true);\n const roadmapIds = roadmapTasksData.map(t => t.clickup_task_id).join(',');\n const roadmapResponse = await fetch(`${roadmapApiEndpoint}?task_ids=${roadmapIds}`);\n const roadmapData = await roadmapResponse.json();\n setRoadmapTasks(roadmapData.items || []);\n setRoadmapLoading(false);\n }\n\n // Fetch delivery tasks if linked\n const deliveryTasksData = release.clickup_delivery_tasks as Array<{ clickup_task_id: string }> | undefined;\n if (deliveryTasksData && deliveryTasksData.length > 0 && DeliverySection) {\n setDeliveryLoading(true);\n const deliveryIds = deliveryTasksData.map(t => t.clickup_task_id).join(',');\n const deliveryResponse = await fetch(`${deliveryApiEndpoint}?task_ids=${deliveryIds}`);\n const deliveryResponseData = await deliveryResponse.json();\n setDeliveryData(deliveryResponseData);\n setDeliveryLoading(false);\n }\n } catch (err) {\n console.error('Error fetching linked tasks:', err);\n setRoadmapLoading(false);\n setDeliveryLoading(false);\n }\n }\n\n fetchLinkedTasks();\n }, [release, RoadmapSection, DeliverySection, roadmapApiEndpoint, deliveryApiEndpoint]);\n\n // Don't show loading skeleton if we have initialData\n if (!initialData && isLoading) {\n return <DetailPageSkeleton metadataColumns={4} showImageGallery={true} />;\n }\n\n if (error || !release) {\n return (\n <div className=\"text-center py-16\">\n <h1 className=\"text-4xl font-bold text-ods-text-primary mb-4\">Release Not Found</h1>\n <p className=\"text-xl text-ods-text-secondary\">The release you're looking for doesn't exist.</p>\n </div>\n );\n }\n\n const hasBreakingChanges = Array.isArray(release.breaking_changes) && release.breaking_changes.length > 0;\n\n // Type assertions for release data\n const releaseTitle = release.title as string;\n const releaseVersion = release.version as string;\n const releaseSummary = release.summary as string | null;\n const releaseContent = release.content as string | null;\n const releaseDate = release.release_date as string;\n const releaseType = release.release_type as string;\n const releaseStatus = release.release_status as string;\n const blogTags = release.blog_tags as Array<{ id?: string; name?: string; blog_tags?: { id: string; name: string } }> | undefined;\n const releaseMedia = release.release_media as Array<{ id?: string; media_type: string; media_url: string; title?: string }> | undefined;\n const author = release.author as { avatar_url?: string; full_name?: string } | undefined;\n const githubReleases = release.github_releases as Array<{ id: string; github_release_url: string }> | undefined;\n const knowledgeBaseLinks = release.knowledge_base_links as Array<{ id?: string; kb_article_path: string }> | string[] | undefined;\n const migrationGuideUrl = release.migration_guide_url as string | undefined;\n const documentationUrl = release.documentation_url as string | undefined;\n const youtubeUrl = release.youtube_url as string | undefined;\n const mainVideoUrl = release.main_video_url as string | undefined;\n const videoBites = release.video_bites as VideoTeaser[] | undefined;\n const highlightVideoUrl = release.highlight_video_url as string | undefined;\n const highlightVideoThumbnail = release.highlight_video_thumbnail as string | undefined;\n const breakingChanges = release.breaking_changes as ChangelogEntry[] | undefined;\n const featuresAdded = release.features_added as ChangelogEntry[] | undefined;\n const bugFixed = release.bugs_fixed as ChangelogEntry[] | undefined;\n const improvements = release.improvements as ChangelogEntry[] | undefined;\n\n return (\n <ArticleDetailLayout>\n {/* Back button — desktop-only, matches DevSectionPage / LegalDocumentPage\n (TitleBlock renders the same `hidden md:inline-flex` BackButton). */}\n {showBackButton && (\n <BackButton\n label={backLabel}\n onClick={() => router.push(backHref)}\n className=\"hidden md:inline-flex mb-4\"\n />\n )}\n <div className=\"space-y-6 md:space-y-8\">\n {/* Title Block */}\n <div className=\"flex flex-col md:flex-row md:items-end gap-4 w-full\">\n <div className=\"flex-1 flex flex-col gap-2\">\n {/* Title */}\n <h1 className=\"text-h1 tracking-[-1.12px] text-ods-text-primary\">\n {releaseTitle}\n </h1>\n\n {/* Version */}\n <p className=\"text-h4 text-ods-text-secondary\">\n Version: {releaseVersion}\n </p>\n </div>\n </div>\n\n {/* Category Tags */}\n <div className=\"flex flex-wrap gap-2 w-full\">\n {/* Blog Tags */}\n {blogTags?.map((tag) => (\n <StatusBadge\n key={tag.id || tag.blog_tags?.id}\n text={(tag.name || tag.blog_tags?.name || '').toUpperCase()}\n variant=\"card\"\n className=\"bg-ods-card border border-ods-border\"\n />\n ))}\n </div>\n\n {/* Metadata Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-4 border border-ods-border rounded-md overflow-hidden w-full\">\n {/* Release Type */}\n <div className=\"bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3\">\n <div className=\"flex flex-col gap-0\">\n <p className=\"text-h4 text-ods-text-primary\">\n {releaseType.toLocaleUpperCase()}\n </p>\n <p className=\"font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary\">\n Release Type\n </p>\n </div>\n </div>\n\n {/* Release Status */}\n <div className=\"bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3\">\n <div className=\"flex flex-col gap-0\">\n <p className=\"text-h4 text-ods-text-primary\">\n {releaseStatus.toLocaleUpperCase()}\n </p>\n <p className=\"font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary\">\n Release Status\n </p>\n </div>\n </div>\n\n {/* Release Date */}\n <div className=\"bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3\">\n <div className=\"flex flex-col gap-0\">\n <p className=\"text-h4 text-ods-text-primary\">\n {formatReleaseDate(releaseDate)}\n </p>\n <p className=\"font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary\">\n Release Date\n </p>\n </div>\n </div>\n\n {/* Author */}\n <div className=\"bg-ods-card p-4 flex items-center gap-3\">\n <SquareAvatar\n src={author?.avatar_url || ''}\n alt={author?.full_name || 'Author'}\n fallback={nameInitials(author?.full_name || 'Unknown', '')}\n size=\"md\"\n variant=\"round\"\n />\n <div className=\"flex flex-col gap-0 flex-1 min-w-0\">\n <p className=\"text-h3 tracking-[-0.36px] text-ods-text-primary truncate\" title={author?.full_name || 'Unknown Author'}>\n {author?.full_name || 'Unknown Author'}\n </p>\n <p className=\"font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary\">\n Author\n </p>\n </div>\n </div>\n </div>\n\n {/* Image Gallery - Horizontal Scrolling */}\n {releaseMedia && releaseMedia.length > 0 && (\n <div className=\"flex gap-6 overflow-x-auto w-full\">\n {releaseMedia.slice(0, 5).map((mediaItem, index) => (\n <div\n key={mediaItem.id || index}\n className=\"shrink-0 w-[240px] h-[200px] rounded-md overflow-hidden border border-ods-border bg-black cursor-pointer hover:opacity-80 transition-opacity\"\n onClick={() => {\n if (mediaItem.media_type !== 'video' && mediaItem.media_type !== 'demo') {\n setGalleryIndex(index);\n setGalleryOpen(true);\n }\n }}\n >\n {mediaItem.media_type === 'video' || mediaItem.media_type === 'demo' ? (\n <Video url={mediaItem.media_url} layout=\"native\" />\n ) : (\n <img src={mediaItem.media_url} alt={mediaItem.title || `Media ${index + 1}`} className=\"w-full h-full object-cover\" />\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* Summary */}\n {releaseSummary && (\n <div className=\"text-h4 text-ods-text-primary\">\n <p>{releaseSummary}</p>\n </div>\n )}\n\n {/* Video Display Section - Injectable or fallback */}\n {VideoDisplaySection ? (\n <VideoDisplaySection\n mainVideoUrl={mainVideoUrl}\n youtubeUrl={youtubeUrl}\n highlightVideoUrl={highlightVideoUrl}\n highlightVideoThumbnail={highlightVideoThumbnail}\n title={releaseTitle}\n videoBites={videoBites}\n bitesTitle=\"Video Clips\"\n filterPublishedBites={true}\n srtContent={release?.srt_content as string | null | undefined}\n captionsUrl={release?.captionsUrl as string | undefined}\n />\n ) : (\n <>\n {/*\n Fallback when no `VideoDisplaySection` is injected. `<Video>` is the\n SSoT for every video surface — single source of truth across YouTube,\n HLS, and MP4 paths.\n */}\n {youtubeUrl && (\n <Video\n kind=\"youtube\"\n url={youtubeUrl}\n title={`${releaseTitle} - Video`}\n layout=\"native\"\n />\n )}\n {!youtubeUrl && mainVideoUrl && (\n <Video\n url={mainVideoUrl}\n srtContent={release?.srt_content as string | undefined}\n captionsUrl={release?.captionsUrl as string | undefined}\n layout=\"centered\"\n />\n )}\n {highlightVideoUrl && (\n <Video\n url={highlightVideoUrl}\n poster={highlightVideoThumbnail}\n layout=\"centered\"\n />\n )}\n </>\n )}\n\n {/* Content */}\n {releaseContent && (\n <div className=\"text-h4 text-ods-text-primary\">\n <MarkdownRenderer content={releaseContent} />\n </div>\n )}\n\n {/* Breaking Changes Warning */}\n {hasBreakingChanges && (\n <Card className=\"border-red-500 bg-red-500/10\">\n <CardContent className=\"p-6\">\n <div className=\"flex items-center gap-3\">\n <AlertTriangle className=\"h-6 w-6 text-red-500\" />\n <div>\n <h3 className=\"font-bold text-red-500 text-lg\">Breaking Changes</h3>\n <p className=\"text-ods-text-secondary\">This release contains breaking changes. Review carefully before upgrading.</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Changelog Sections — icons match the catalog card's changelog\n strip taxonomy (Sparkles/Wrench/TrendingUp/AlertTriangle) so the\n user sees a consistent visual signature across catalog → detail. */}\n <ReleaseChangelogSection\n title=\"Breaking Changes\"\n entries={breakingChanges || []}\n isBreaking\n hideTitle\n icon={<AlertTriangle className=\"h-6 w-6\" />}\n SimpleMarkdownRenderer={MarkdownRenderer}\n />\n {/* Features / Bugs / Improvements use `previewFirst` — same\n progressive-disclosure pattern as the investor-update detail\n page's Key Highlights / Financial Notes sections. Shows the\n first entry in full + fade-masks the rest, with a \"Show N\n more / Show less\" toggle. Breaking Changes (above) stays\n fully expanded — it's critical info, not skim-friendly. */}\n <ReleaseChangelogSection\n title=\"Features Added\"\n entries={featuresAdded || []}\n icon={<Sparkles className=\"h-6 w-6\" />}\n previewFirst\n SimpleMarkdownRenderer={MarkdownRenderer}\n />\n <ReleaseChangelogSection\n title=\"Bugs Fixed\"\n entries={bugFixed || []}\n icon={<Wrench className=\"h-6 w-6\" />}\n previewFirst\n SimpleMarkdownRenderer={MarkdownRenderer}\n />\n <ReleaseChangelogSection\n title=\"Improvements\"\n entries={improvements || []}\n icon={<TrendingUp className=\"h-6 w-6\" />}\n previewFirst\n SimpleMarkdownRenderer={MarkdownRenderer}\n />\n\n {/* Video Bites Section - Only when VideoDisplaySection is not handling it */}\n {!VideoDisplaySection && VideoSection && videoBites && videoBites.length > 0 && (\n <VideoSection\n bites={videoBites}\n title=\"Video Clips\"\n filterPublished={true}\n />\n )}\n\n {/* Related Roadmap Items */}\n {RoadmapSection && (roadmapLoading || roadmapTasks.length > 0) && (\n <div className=\"space-y-4 w-full\">\n <p className=\"text-h5 tracking-[-0.28px] text-ods-text-secondary\">\n Related Roadmap Items\n </p>\n <RoadmapSection\n items={roadmapTasks}\n isLoading={roadmapLoading}\n onItemUpdate={(updatedItem) => {\n setRoadmapTasks(prevTasks =>\n prevTasks.map(task =>\n task.id === updatedItem.id ? updatedItem : task\n )\n );\n }}\n />\n </div>\n )}\n\n {/* Bug-fixes & Enhancements Section */}\n {DeliverySection && (deliveryLoading || (deliveryData && (deliveryData.completed.length > 0 || deliveryData.inProgress.length > 0))) && (\n <div className=\"w-full space-y-4\">\n <p className=\"text-h5 tracking-[-0.28px] text-ods-text-secondary\">\n Related Enhancements and Bug-fixes\n </p>\n <DeliverySection\n data={deliveryData}\n isLoading={deliveryLoading}\n />\n </div>\n )}\n\n {/* Related Links */}\n {(githubReleases?.length || knowledgeBaseLinks?.length || migrationGuideUrl || documentationUrl) && (\n <div className=\"space-y-1 w-full\">\n <p className=\"text-h5 tracking-[-0.28px] text-ods-text-secondary\">\n Related Links\n </p>\n <Card className=\"bg-ods-card border-ods-border p-6\">\n <div className=\"space-y-4\">\n {/* GitHub Releases */}\n {githubReleases && githubReleases.length > 0 && (\n <>\n {githubReleases.map((ghRelease) => (\n <div key={ghRelease.id} className=\"flex items-start gap-1\">\n <GitHubIcon className=\"shrink-0\" width={24} height={24} color=\"var(--color-text-secondary)\" />\n <span className=\"text-h4 text-ods-text-primary\">\n Github Release\n </span>\n <a\n href={ghRelease.github_release_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-h4 text-[#ffc008] hover:underline\"\n >\n {ghRelease.github_release_url.split('/').pop()}\n </a>\n <ExternalLink className=\"h-6 w-6 text-[#ffc008] shrink-0\" />\n </div>\n ))}\n </>\n )}\n\n {/* Knowledge Base Links */}\n {knowledgeBaseLinks && knowledgeBaseLinks.length > 0 && (\n <>\n {knowledgeBaseLinks.map((linkObj) => {\n const path = typeof linkObj === 'string' ? linkObj : linkObj.kb_article_path;\n const linkId = typeof linkObj === 'string' ? path : linkObj.id || path;\n return (\n <div key={linkId} className=\"flex items-start gap-1\">\n <BookMarked className=\"h-6 w-6 text-ods-text-secondary shrink-0\" />\n <span className=\"text-h4 text-ods-text-primary\">\n Knowledge Base\n </span>\n <Link\n href={path.startsWith('http') ? path : `/knowledge-base${path.startsWith('/') ? '' : '/'}${path}`}\n className=\"text-h4 text-[#ffc008] hover:underline\"\n >\n {path.replace(/^\\//, '').split('/').pop()?.replace(/-/g, ' ') || 'View Article'}\n </Link>\n <ExternalLink className=\"h-6 w-6 text-[#ffc008] shrink-0\" />\n </div>\n );\n })}\n </>\n )}\n\n {/* Migration Guide */}\n {migrationGuideUrl && (\n <div className=\"flex items-start gap-1\">\n <BookMarked className=\"h-6 w-6 text-ods-text-secondary shrink-0\" />\n <a\n href={migrationGuideUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-h4 text-[#ffc008] hover:underline\"\n >\n 📖 Migration Guide\n </a>\n <ExternalLink className=\"h-6 w-6 text-[#ffc008] shrink-0\" />\n </div>\n )}\n\n {/* Documentation */}\n {documentationUrl && (\n <div className=\"flex items-start gap-1\">\n <BookMarked className=\"h-6 w-6 text-ods-text-secondary shrink-0\" />\n <a\n href={documentationUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-h4 text-[#ffc008] hover:underline\"\n >\n 📚 Documentation\n </a>\n <ExternalLink className=\"h-6 w-6 text-[#ffc008] shrink-0\" />\n </div>\n )}\n </div>\n </Card>\n </div>\n )}\n </div>\n\n {/* Gallery Modal */}\n {releaseMedia && releaseMedia.filter((m) => m.media_type !== 'video' && m.media_type !== 'demo').length > 0 && (\n <ImageGalleryModal\n images={releaseMedia.filter((m) => m.media_type !== 'video' && m.media_type !== 'demo').map((m) => m.media_url)}\n isOpen={galleryOpen}\n onClose={() => setGalleryOpen(false)}\n initialIndex={galleryIndex}\n />\n )}\n </ArticleDetailLayout>\n );\n}\n","\"use client\";\n\nimport { DetailPageSkeleton } from '../detail-page-skeleton';\n\nexport function ReleaseDetailSkeleton() {\n return <DetailPageSkeleton metadataColumns={4} showImageGallery={true} />;\n}\n","'use client';\n\n/**\n * RoadmapGrid — the shared roadmap LIST surface.\n *\n * Two modes (one component, one voting state):\n * - `groupByQuarter` (DEFAULT): buckets items by `item.quarter`, sorts the\n * quarters chronologically, and renders each in a collapsible `<Accordion>`\n * — the same quarter grouping the hub's roadmap page has, now shared so\n * every embedder gets it for free. Quarters at/after the current quarter\n * (and within `quartersToKeepClosed` of it) open by default; older ones\n * collapse. When `hasActiveFilters`, all quarters expand.\n * - `groupByQuarter={false}`: a flat 2-col grid (related-content rails that\n * pass a small pre-filtered `items` slice).\n *\n * Voting state (`useRoadmapVoting` + the in-flight set) lives ONCE at this\n * level and is shared across every quarter's grid, so a vote in Q3 and a vote\n * in Q4 can't race separate states. A successful vote triggers a single-task\n * refresh (`buildRefreshUrl`) and patches the parent list via `onItemUpdate`.\n *\n * Hydration: `expandedQuarters` starts `[]` and is populated in a client-only\n * effect (mirrors the hub) so SSR markup matches first client paint.\n */\n\nimport { useEffect, useRef, useState } from 'react';\nimport { RoadmapCard } from '../../chat/entity-cards/roadmap-card';\nimport { useRoadmapVoting, type UseRoadmapVotingOptions } from './use-roadmap-voting';\nimport { EmptyState } from '../../empty-state';\nimport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from '../../ui';\nimport { cn } from '../../../utils/cn';\nimport type { RoadmapItem } from '../../chat/types/entities/roadmap-item';\n\nconst DEFAULT_BUILD_REFRESH_URL = (taskId: string) => `/api/roadmap/${taskId}`;\nconst BACKLOG = 'Backlog';\n\n// ── Quarter helpers (pure; lifted from the hub roadmap section) ──────────────\n\n/** Status → sort priority (Complete → Working → Review → To-Do → other). */\nfunction getStatusPriority(status: string): number {\n const s = (status || '').toLowerCase();\n if (s.includes('complete') || s.includes('done')) return 1;\n if (s.includes('working') || s.includes('progress')) return 2;\n if (s.includes('review')) return 3;\n if (s.includes('to do') || s.includes('plan')) return 4;\n return 5;\n}\n\n/** Parse a `\"Q<n> <year>\"` label → {quarter, year}; `null` when unparseable. */\nfunction parseQuarterString(q: string): { quarter: number; year: number } | null {\n const match = q.match(/Q(\\d+)\\s+(\\d+)/);\n if (!match) return null;\n return { quarter: parseInt(match[1], 10), year: parseInt(match[2], 10) };\n}\n\nfunction compareQuarters(\n a: { quarter: number; year: number },\n b: { quarter: number; year: number },\n): number {\n if (a.year !== b.year) return a.year - b.year;\n return a.quarter - b.quarter;\n}\n\n/** Today's quarter — client-only (called from an effect, never during SSR). */\nfunction getCurrentQuarter(): { quarter: number; year: number } {\n const now = new Date();\n return { quarter: Math.floor(now.getMonth() / 3) + 1, year: now.getFullYear() };\n}\n\n/** Quarters open by default: current + future, plus the recent past within\n * `quartersToKeepClosed` of the current quarter; Backlog always open. */\nfunction computeDefaultExpandedQuarters(quarters: string[], quartersToKeepClosed: number): string[] {\n const currentQ = getCurrentQuarter();\n const out: string[] = [];\n for (const q of quarters) {\n if (q === BACKLOG) continue;\n const parsed = parseQuarterString(q);\n if (!parsed) continue;\n const diff = compareQuarters(parsed, currentQ);\n if (diff >= 0) {\n out.push(q);\n } else {\n const quartersAgo = currentQ.year * 4 + currentQ.quarter - (parsed.year * 4 + parsed.quarter);\n if (quartersAgo < quartersToKeepClosed) out.push(q);\n }\n }\n if (quarters.includes(BACKLOG)) out.push(BACKLOG);\n return out;\n}\n\nexport interface RoadmapGridProps {\n items: RoadmapItem[];\n onItemUpdate?: (updatedItem: RoadmapItem) => void;\n /** Show the desktop left margin (~120px) that aligns the grid with the page\n * hero. Default `true`. Related-content rails pass `false`. */\n showLeftMargin?: boolean;\n /** URL builder for the per-task refresh call after a successful vote. */\n buildRefreshUrl?: (taskId: string) => string;\n /** Voting hook options (vote endpoint + storage key). */\n votingOptions?: UseRoadmapVotingOptions;\n /** Group items into collapsible per-quarter accordions. Default `false`\n * (flat grid) so EXISTING callers — the hub's per-quarter RoadmapGrid calls\n * and related-content rails — stay unchanged. `RoadmapView` / full-page\n * callers pass `true` to get the shared quarter grouping. */\n groupByQuarter?: boolean;\n /** When true (search/filter active), every quarter expands so results aren't\n * hidden in collapsed sections. Threaded from `RoadmapView`. */\n hasActiveFilters?: boolean;\n /** Past quarters within this window of the current quarter stay open by\n * default; older ones collapse. Default `2`. */\n quartersToKeepClosed?: number;\n}\n\n/** Internal flat 2-col grid for ONE set of items. Voting comes from the parent\n * so the state is shared across quarters. */\nfunction RoadmapGridSingle({\n items,\n showLeftMargin,\n getVote,\n onVote,\n votingTasks,\n}: {\n items: RoadmapItem[];\n showLeftMargin: boolean;\n getVote: (taskId: string) => 'up' | 'down' | null;\n onVote: (taskId: string, voteType: 'up' | 'down') => void;\n votingTasks: Set<string>;\n}) {\n return (\n <div className={`grid grid-cols-1 md:grid-cols-2 gap-6 ${showLeftMargin ? 'md:ml-[120px]' : ''}`}>\n {items.map((item) => (\n <RoadmapCard\n key={item.id}\n item={item}\n userVote={getVote(item.id)}\n onVote={(voteType) => onVote(item.id, voteType)}\n isVoting={votingTasks.has(item.id)}\n />\n ))}\n </div>\n );\n}\n\nexport function RoadmapGrid({\n items,\n onItemUpdate,\n showLeftMargin = true,\n buildRefreshUrl = DEFAULT_BUILD_REFRESH_URL,\n votingOptions,\n groupByQuarter = false,\n hasActiveFilters = false,\n quartersToKeepClosed = 2,\n}: RoadmapGridProps) {\n // ── Voting (shared across all quarters) ──\n const { getVote, toggleVote } = useRoadmapVoting(votingOptions);\n const [votingTasks, setVotingTasks] = useState<Set<string>>(new Set());\n\n const handleVote = async (taskId: string, voteType: 'up' | 'down') => {\n if (votingTasks.has(taskId)) return;\n setVotingTasks((prev) => new Set(prev).add(taskId));\n try {\n const result = await toggleVote(taskId, voteType);\n if (result.success) {\n const response = await fetch(buildRefreshUrl(taskId));\n if (response.ok) {\n const data = await response.json();\n if (data.item && onItemUpdate) onItemUpdate(data.item);\n }\n }\n } finally {\n setVotingTasks((prev) => {\n const next = new Set(prev);\n next.delete(taskId);\n return next;\n });\n }\n };\n\n // ── Quarter bucketing + chronological sort (recomputed each render; cheap) ──\n const itemsByQuarter = items.reduce<Record<string, RoadmapItem[]>>((acc, item) => {\n const q = item.quarter || BACKLOG;\n (acc[q] ||= []).push(item);\n return acc;\n }, {});\n for (const q of Object.keys(itemsByQuarter)) {\n itemsByQuarter[q].sort((a, b) => getStatusPriority(a.status) - getStatusPriority(b.status));\n }\n const sortedQuarters = Object.keys(itemsByQuarter).sort((a, b) => {\n if (a === BACKLOG) return 1;\n if (b === BACKLOG) return -1;\n const aD = parseQuarterString(a) ?? { quarter: 0, year: 0 };\n const bD = parseQuarterString(b) ?? { quarter: 0, year: 0 };\n return compareQuarters(aD, bD);\n });\n const sortedQuartersKey = sortedQuarters.join(',');\n\n // ── Accordion expand state (hydration-safe: start [], populate in effects) ──\n const [expandedQuarters, setExpandedQuarters] = useState<string[]>([]);\n const [isInitialized, setIsInitialized] = useState(false);\n const hasSetInitialState = useRef(false);\n const prevItemsLength = useRef(0);\n\n // Initial expand state once data loads (runs once, or when data first arrives).\n useEffect(() => {\n const itemsJustLoaded = prevItemsLength.current === 0 && items.length > 0;\n prevItemsLength.current = items.length;\n if (sortedQuarters.length > 0 && (!hasSetInitialState.current || itemsJustLoaded)) {\n hasSetInitialState.current = true;\n setExpandedQuarters(\n hasActiveFilters\n ? [...sortedQuarters]\n : computeDefaultExpandedQuarters(sortedQuarters, quartersToKeepClosed),\n );\n setIsInitialized(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sortedQuarters.length, items.length]);\n\n // React to filter toggles AFTER init: filters on → expand all; off → defaults.\n useEffect(() => {\n if (!isInitialized || sortedQuarters.length === 0) return;\n setExpandedQuarters(\n hasActiveFilters\n ? [...sortedQuarters]\n : computeDefaultExpandedQuarters(sortedQuarters, quartersToKeepClosed),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hasActiveFilters, sortedQuartersKey, isInitialized, quartersToKeepClosed]);\n\n if (items.length === 0) {\n return (\n <EmptyState\n type=\"generic\"\n title=\"No roadmap items\"\n description=\"Check back soon for upcoming features and improvements!\"\n />\n );\n }\n\n // Flat mode (related-content rails) — no accordion.\n if (!groupByQuarter) {\n return (\n <RoadmapGridSingle\n items={items}\n showLeftMargin={showLeftMargin}\n getVote={getVote}\n onVote={handleVote}\n votingTasks={votingTasks}\n />\n );\n }\n\n return (\n <Accordion\n type=\"multiple\"\n value={expandedQuarters}\n onValueChange={setExpandedQuarters}\n className=\"flex flex-col gap-10\"\n >\n {sortedQuarters.map((quarter) => {\n const itemCount = itemsByQuarter[quarter]?.length || 0;\n const isExpanded = expandedQuarters.includes(quarter);\n return (\n <AccordionItem\n key={quarter}\n value={quarter}\n id={`quarter-${quarter.replace(/\\s+/g, '-').toLowerCase()}`}\n className=\"border-0\"\n >\n <AccordionTrigger className=\"w-full p-0 hover:no-underline [&>svg]:h-5 [&>svg]:w-5 [&>svg]:text-ods-text-secondary [&>svg]:ml-auto [&>svg]:shrink-0\">\n <div className=\"flex items-center gap-3\">\n <h3\n className={cn(\n \"font-['Azeret_Mono'] font-semibold text-[24px] md:text-[28px] lg:text-[32px] leading-[32px] md:leading-[36px] lg:leading-[40px] text-ods-text-primary tracking-[-0.48px] md:tracking-[-0.56px] lg:tracking-[-0.64px] transition-opacity\",\n isExpanded ? 'opacity-100' : 'opacity-60',\n )}\n >\n {quarter}\n <span className=\"text-ods-accent\">:</span>\n </h3>\n <span\n className={cn(\n 'text-sm font-medium transition-opacity',\n isExpanded ? 'text-ods-text-secondary opacity-100' : 'text-ods-text-tertiary opacity-60',\n )}\n >\n {itemCount} {itemCount === 1 ? 'item' : 'items'}\n {isInitialized && !isExpanded && <span className=\"ml-2 text-ods-accent\">Click to expand</span>}\n </span>\n </div>\n </AccordionTrigger>\n <AccordionContent className=\"pt-4 pb-0 overflow-hidden data-[state=closed]:animate-none data-[state=open]:animate-none\">\n <RoadmapGridSingle\n items={itemsByQuarter[quarter]}\n showLeftMargin={showLeftMargin}\n getVote={getVote}\n onVote={handleVote}\n votingTasks={votingTasks}\n />\n </AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordion>\n );\n}\n","'use client';\n\n/**\n * useRoadmapVoting — localStorage-backed optimistic voting for roadmap cards.\n *\n * One vote per task per user (storage key scoped per `storageKey` option,\n * default `'roadmap_votes_v1'`). Toggling the same vote removes it;\n * switching directions sends a remove + add pair so the server's running\n * totals stay correct.\n *\n * Endpoint configuration — `voteApiEndpoint`:\n * The hook posts to ONE endpoint (default `/api/roadmap/vote`) for\n * BOTH the optimistic add AND the opposite-vote remove. Reverse-proxy\n * embedders override this with their proxied path; lib otherwise\n * matches the hub's pre-migration call shape.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\n\nexport type VoteType = 'up' | 'down' | null;\n\nexport interface VoteState {\n [taskId: string]: VoteType;\n}\n\nexport interface UseRoadmapVotingOptions {\n /** Vote endpoint URL. Default `/api/roadmap/vote`. */\n voteApiEndpoint?: string;\n /** localStorage key. Default `'roadmap_votes_v1'`. Embedders mounting\n * multiple roadmap surfaces in the same origin can scope per-surface\n * (e.g. `'roadmap_votes_v1_main'` vs `'roadmap_votes_v1_admin'`) so\n * votes don't cross-contaminate. */\n storageKey?: string;\n}\n\nconst DEFAULT_VOTE_ENDPOINT = '/api/roadmap/vote';\nconst DEFAULT_STORAGE_KEY = 'roadmap_votes_v1';\n\nexport function useRoadmapVoting(options: UseRoadmapVotingOptions = {}) {\n const voteApiEndpoint = options.voteApiEndpoint ?? DEFAULT_VOTE_ENDPOINT;\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;\n\n const [votes, setVotes] = useState<VoteState>({});\n const [isLoading, setIsLoading] = useState(true);\n\n // Load votes from localStorage. Runs on mount AND whenever `storageKey`\n // changes — when the key changes mid-lifecycle (e.g. an embedder\n // remounts with a new namespace), we MUST reset state first so the\n // save-effect below doesn't write the old key's data into the new\n // key. We also re-enter the loading phase so the load completes\n // before any save runs.\n useEffect(() => {\n setIsLoading(true);\n setVotes({});\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n setVotes(JSON.parse(stored));\n }\n } catch (error) {\n console.error('[Voting] Error loading votes from localStorage:', error);\n } finally {\n setIsLoading(false);\n }\n }, [storageKey]);\n\n // Save votes to localStorage whenever they change\n useEffect(() => {\n if (!isLoading) {\n try {\n localStorage.setItem(storageKey, JSON.stringify(votes));\n } catch (error) {\n console.error('[Voting] Error saving votes to localStorage:', error);\n }\n }\n }, [votes, isLoading, storageKey]);\n\n const getVote = useCallback(\n (taskId: string): VoteType => {\n return votes[taskId] || null;\n },\n [votes]\n );\n\n const toggleVote = useCallback(\n async (\n taskId: string,\n voteType: 'up' | 'down'\n ): Promise<{ success: boolean; newVote: VoteType; action: 'add' | 'remove' }> => {\n const currentVote = votes[taskId];\n\n let newVote: VoteType = null;\n let action: 'add' | 'remove' = 'add';\n\n if (currentVote === voteType) {\n // User clicked same vote - remove it\n newVote = null;\n action = 'remove';\n } else {\n // User clicked different vote - set it. If they had an opposite\n // vote, remove that first so the server totals stay consistent.\n if (currentVote) {\n await fetch(voteApiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n taskId,\n voteType: currentVote,\n action: 'remove',\n }),\n }).catch(err => console.error('[Voting] Error removing opposite vote:', err));\n }\n\n newVote = voteType;\n action = 'add';\n }\n\n // Optimistic update\n setVotes(prev => ({\n ...prev,\n [taskId]: newVote,\n }));\n\n try {\n const response = await fetch(voteApiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ taskId, voteType, action }),\n });\n\n if (!response.ok) {\n throw new Error('Vote API request failed');\n }\n\n return { success: true, newVote, action };\n } catch (error) {\n console.error('[Voting] API error:', error);\n\n // Revert optimistic update on error\n setVotes(prev => ({\n ...prev,\n [taskId]: currentVote,\n }));\n\n return { success: false, newVote: currentVote, action };\n }\n },\n [votes, voteApiEndpoint]\n );\n\n const clearVotes = useCallback(() => {\n setVotes({});\n localStorage.removeItem(storageKey);\n }, [storageKey]);\n\n return {\n votes,\n isLoading,\n getVote,\n toggleVote,\n clearVotes,\n };\n}\n","/**\n * RoadmapGridSkeleton — loading state for the `/roadmap` grid view.\n *\n * Pure JSX (no hooks, no events) — `'use client'` not strictly required\n * here; tsup's client-entry banner injects it automatically when this\n * file is bundled into the client output. We match the playbook's\n * skeleton-file convention (no directive when no hooks).\n *\n * NOTE: lib's `chat/entity-cards/roadmap-card.tsx` also exports a\n * `RoadmapCardSkeleton` — that one is the COMPACT 56px chat-card\n * variant. This file's internal card-skeleton (340px grid card)\n * intentionally stays file-internal to avoid the naming collision;\n * only `RoadmapGridSkeleton` is exported.\n */\n\nfunction RoadmapCardSkeleton() {\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-[6px] p-[24px] flex flex-col gap-[16px] min-h-[340px] relative\">\n {/* Status Badge Skeleton - Top Right */}\n <div className=\"absolute top-[24px] right-[24px]\">\n <div className=\"h-[20px] w-[80px] bg-ods-border rounded animate-pulse\"></div>\n </div>\n\n {/* Icon and title skeleton */}\n <div className=\"flex items-center gap-[16px] pr-[120px]\">\n <div className=\"w-[80px] h-[80px] bg-ods-border rounded-lg flex-shrink-0 animate-pulse\"></div>\n <div className=\"flex-1 min-w-0 flex flex-col gap-1\">\n <div className=\"min-h-[48px] flex items-center\">\n <div className=\"h-[24px] w-full bg-ods-border rounded animate-pulse\"></div>\n </div>\n <div className=\"min-h-[20px] flex items-center\">\n <div className=\"h-[14px] w-1/2 bg-ods-border rounded animate-pulse\"></div>\n </div>\n </div>\n </div>\n\n {/* Description skeleton - exactly 3 lines */}\n <div className=\"min-h-[72px] flex items-center\">\n <div className=\"w-full space-y-2\">\n <div className=\"h-[24px] bg-ods-border rounded animate-pulse\"></div>\n <div className=\"h-[24px] bg-ods-border rounded animate-pulse\"></div>\n <div className=\"h-[24px] w-4/5 bg-ods-border rounded animate-pulse\"></div>\n </div>\n </div>\n\n <div className=\"flex-1\"></div>\n\n {/* Bottom skeleton */}\n <div className=\"flex items-center justify-between\">\n <div className=\"h-[48px] w-[120px] bg-ods-border rounded animate-pulse\"></div>\n <div className=\"h-[32px] w-[100px] bg-ods-border rounded animate-pulse\"></div>\n </div>\n </div>\n );\n}\n\nexport interface RoadmapGridSkeletonProps {\n /** Number of skeleton cards to show. Default 4. */\n count?: number;\n /** Show the desktop left margin (~120px) that aligns the grid with\n * the page hero's title block. Default `true`. Related-content rails\n * inside narrower surfaces (e.g. the release detail page) pass `false`. */\n showLeftMargin?: boolean;\n}\n\nexport function RoadmapGridSkeleton({ count = 4, showLeftMargin = true }: RoadmapGridSkeletonProps) {\n return (\n <div className={`grid grid-cols-1 md:grid-cols-2 gap-6 ${showLeftMargin ? 'md:ml-[120px]' : ''}`}>\n {Array.from({ length: count }).map((_, i) => (\n <RoadmapCardSkeleton key={i} />\n ))}\n </div>\n );\n}\n","'use client'\n\n/**\n * `<RoadmapView />` — the SELF-CONTAINED roadmap LIST surface.\n *\n * Fetches the roadmap list via the shared `useSelfFetch` hook and renders the\n * pure controlled `<RoadmapGrid>` (kept controlled so related-content rails can\n * still pass `items`). The host configures only **api routes**: the list\n * `endpoint` (default `/api/roadmap`), the per-task `buildRefreshUrl`, and the\n * vote endpoint via `votingOptions`. Optional `initialItems` hydrates SSR.\n */\n\nimport { useMemo } from 'react'\n\nimport { useSearchParams } from '../../../embed-shims'\nimport { LoadError } from '../../ui/error-state'\nimport { useSelfFetch } from '../../../hooks/use-self-fetch'\nimport type { RoadmapItem } from '../../chat/types/entities/roadmap-item'\nimport { RoadmapGrid } from './roadmap-grid'\nimport { RoadmapGridSkeleton } from './roadmap-grid-skeleton'\nimport type { UseRoadmapVotingOptions } from './use-roadmap-voting'\nimport { DEV_SECTION_PARAM_KEYS } from '../../../utils/dev-sections/dev-section-param-keys'\n\nconst DEFAULT_ENDPOINT = '/api/roadmap'\n// Defaults sourced from the ONE param-key registry the chrome (OPENFRAME_DEV_SECTIONS) also\n// reads, so the chrome's written `?key=` and this view's read can't silently diverge.\nconst DEFAULT_SEARCH_PARAM_KEY = DEV_SECTION_PARAM_KEYS.search\nconst DEFAULT_STATUS_PARAM_KEY = DEV_SECTION_PARAM_KEYS.status\n\nexport interface RoadmapViewProps {\n /** GET list endpoint (the api route). Returns `{ items }`. Default\n * `/api/roadmap`. */\n endpoint?: string\n /** Optional SSR hydrate — skips the initial client fetch. */\n initialItems?: RoadmapItem[]\n showLeftMargin?: boolean\n /** Per-task refresh URL builder (after a vote). Default `/api/roadmap/<id>`. */\n buildRefreshUrl?: (taskId: string) => string\n /** Voting hook options (vote endpoint + storage key). */\n votingOptions?: UseRoadmapVotingOptions\n /** URL param key for the search input — MUST match the section chrome\n * (`DevSectionView`) that writes it. Default `'search'`. */\n searchParamKey?: string\n /** URL param key for the status filter. Default `'status'` (the roadmap\n * section's `filter.paramKey`). `'all'` means no filter. */\n statusParamKey?: string\n}\n\nexport function RoadmapView({\n endpoint = DEFAULT_ENDPOINT,\n initialItems,\n showLeftMargin,\n buildRefreshUrl,\n votingOptions,\n searchParamKey = DEFAULT_SEARCH_PARAM_KEY,\n statusParamKey = DEFAULT_STATUS_PARAM_KEY,\n}: RoadmapViewProps = {}) {\n // Read the search + status params the section chrome (`DevSectionView`) writes\n // and fold them INTO the fetch url so the url IS the cache key — the list\n // refetches filtered whenever the controls change. Mirrors `ProductReleasesView`.\n const searchParams = useSearchParams()\n const search = searchParams.get(searchParamKey) || ''\n const status = searchParams.get(statusParamKey) || 'all'\n const listParams = new URLSearchParams()\n if (search) listParams.set(searchParamKey, search)\n if (status && status !== 'all') listParams.set(statusParamKey, status)\n const qs = listParams.toString()\n const url = qs ? `${endpoint}?${qs}` : endpoint\n\n // Memoize so the SSR `initialItems` wrapper keeps a STABLE identity — else the\n // hook's initialData re-sync effect fires every render and clobbers the\n // optimistic vote patch below.\n const initialData = useMemo(() => (initialItems ? { items: initialItems } : undefined), [initialItems])\n const { data, setData, isLoading, error, reload } = useSelfFetch<{ items?: RoadmapItem[] }>(\n url,\n { initialData },\n )\n const items = data?.items ?? []\n\n if (error) {\n return <LoadError message=\"Failed to load roadmap.\" onRetry={reload} />\n }\n // Skeleton only while the FIRST fetch is in flight (no data yet) — a malformed\n // body lacking `items` renders the grid (empty), never a stuck skeleton.\n if (isLoading && !data) {\n return <RoadmapGridSkeleton showLeftMargin={showLeftMargin} />\n }\n\n return (\n <RoadmapGrid\n items={items}\n showLeftMargin={showLeftMargin}\n buildRefreshUrl={buildRefreshUrl}\n votingOptions={votingOptions}\n // Full-page roadmap → collapsible quarter grouping (the shared RoadmapGrid\n // capability; flat grids stay the RoadmapGrid default). When the chrome's\n // search / status filter is active, expand every quarter so matches aren't hidden.\n groupByQuarter\n hasActiveFilters={search !== '' || status !== 'all'}\n // After a vote refreshes a single task, patch it into the fetched list so\n // the displayed counts stay live.\n onItemUpdate={(updated) =>\n setData((prev) =>\n prev\n ? { ...prev, items: (prev.items ?? []).map((it) => (it.id === updated.id ? updated : it)) }\n : prev,\n )\n }\n />\n )\n}\n","'use client';\n\n/**\n * DeliveryLists — the delivery section body (two tables: recently\n * completed + active). Reads `search` and `task_type` URL params\n * written by the shared `<DevSectionView>` chrome and refetches on\n * change.\n *\n * Endpoint configuration:\n * - `completedApiEndpoint` / `inProgressApiEndpoint` are the two\n * per-bucket GET endpoints. Defaults match the hub's pre-migration\n * routes (`/api/delivery/completed`, `/api/delivery/in-progress`).\n *\n * Coupling constraint — `searchParamKey` / `taskTypeParamKey`:\n * These props serve TWO purposes:\n * 1. URL READS — keys this component reads via `useSearchParams()`.\n * MUST match the consuming chrome's `section.search.paramKey` /\n * `section.filter.paramKey` (the chrome WRITES the URL params).\n * 2. API WRITES — keys this component sends as query params on the\n * outbound fetch to `{completedApiEndpoint,inProgressApiEndpoint}`.\n * The hub API contract uses `'search'` / `'task_type'`; embedders\n * reverse-proxying those routes must preserve the same names OR\n * rewrite the inbound query string on the proxy side.\n *\n * Defaults align with `OPENFRAME_DEV_SECTIONS.delivery.{search.paramKey,filter.paramKey}`\n * AND the hub API contract, so the OpenFrame zero-config case \"just\n * works\". Custom chrome overriding the param keys must override BOTH\n * ends consistently AND ensure the backend reads the same names.\n */\n\nimport { useEffect, useState } from 'react';\nimport { useSearchParams, useRouter, usePathname } from '../../../embed-shims';\nimport type { DeliveryResponse } from '../../../types/delivery';\nimport { DeliveryTable } from './delivery-table';\nimport { EmptyState } from '../../empty-state';\nimport { LoadError } from '../../ui/error-state';\nimport { DEV_SECTION_PARAM_KEYS } from '../../../utils/dev-sections/dev-section-param-keys';\n\nconst DEFAULT_COMPLETED_ENDPOINT = '/api/delivery/completed';\nconst DEFAULT_IN_PROGRESS_ENDPOINT = '/api/delivery/in-progress';\n// Param keys sourced from the shared registry (see RoadmapView) — single source for the\n// chrome's written `?key=` and this view's read.\nconst DEFAULT_SEARCH_PARAM_KEY = DEV_SECTION_PARAM_KEYS.search;\nconst DEFAULT_TASK_TYPE_PARAM_KEY = DEV_SECTION_PARAM_KEYS.deliveryTaskType;\n\nexport interface DeliveryListsProps {\n /** GET endpoint for the \"Recently Completed\" bucket. Default\n * `/api/delivery/completed`. */\n completedApiEndpoint?: string;\n /** GET endpoint for the \"Active Tasks\" bucket. Default\n * `/api/delivery/in-progress`. */\n inProgressApiEndpoint?: string;\n /** URL param key for the search input. MUST match the consuming\n * chrome's `section.search.paramKey`. Default `'search'`. */\n searchParamKey?: string;\n /** URL param key for the task-type filter. MUST match the consuming\n * chrome's `section.filter.paramKey`. Default `'task_type'`. */\n taskTypeParamKey?: string;\n}\n\nexport function DeliveryLists({\n completedApiEndpoint = DEFAULT_COMPLETED_ENDPOINT,\n inProgressApiEndpoint = DEFAULT_IN_PROGRESS_ENDPOINT,\n searchParamKey = DEFAULT_SEARCH_PARAM_KEY,\n taskTypeParamKey = DEFAULT_TASK_TYPE_PARAM_KEY,\n}: DeliveryListsProps = {}) {\n const searchParams = useSearchParams();\n const router = useRouter();\n const pathname = usePathname();\n\n const [data, setData] = useState<DeliveryResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Get filter state from URL\n const searchQuery = searchParams.get(searchParamKey) || '';\n const taskTypeFilter = searchParams.get(taskTypeParamKey) || 'all';\n\n useEffect(() => {\n async function fetchDeliveryData() {\n try {\n setIsLoading(true);\n setError(null);\n\n // Build query parameters for filtering. The outbound key names\n // mirror the inbound URL-param keys — see \"Coupling constraint\"\n // in the file docblock for why.\n const params = new URLSearchParams();\n if (searchQuery) {\n params.set(searchParamKey, searchQuery);\n }\n if (taskTypeFilter && taskTypeFilter !== 'all') {\n params.set(taskTypeParamKey, taskTypeFilter);\n }\n const queryString = params.toString();\n const queryParam = queryString ? `?${queryString}` : '';\n\n // Fetch completed and in-progress tasks separately with filters\n const [completedResponse, inProgressResponse] = await Promise.all([\n fetch(`${completedApiEndpoint}${queryParam}`),\n fetch(`${inProgressApiEndpoint}${queryParam}`),\n ]);\n\n if (!completedResponse.ok || !inProgressResponse.ok) {\n throw new Error('Failed to fetch delivery items');\n }\n\n const [completedResult, inProgressResult] = await Promise.all([\n completedResponse.json(),\n inProgressResponse.json(),\n ]);\n\n setData({\n completed: completedResult.items || [],\n inProgress: inProgressResult.items || [],\n });\n } catch (err) {\n console.error('Error fetching delivery items:', err);\n setError('Failed to load delivery items. Please try again later.');\n } finally {\n setIsLoading(false);\n }\n }\n\n fetchDeliveryData();\n }, [searchQuery, taskTypeFilter, completedApiEndpoint, inProgressApiEndpoint, searchParamKey, taskTypeParamKey]);\n\n const filteredCompleted = data?.completed || [];\n const filteredInProgress = data?.inProgress || [];\n\n const showCompleted = true;\n const showInProgress = true;\n\n const hasActiveFilters = searchQuery !== '' || taskTypeFilter !== 'all';\n const hasResults = (showCompleted && filteredCompleted.length > 0) || (showInProgress && filteredInProgress.length > 0);\n\n // Error state — consume lib's canonical LoadError so ODS tokens +\n // retry affordance stay in lockstep with every other surface.\n if (error) {\n return (\n <div className=\"w-full\">\n <LoadError message={error} onRetry={() => window.location.reload()} />\n </div>\n );\n }\n\n return (\n <div className=\"w-full flex flex-col gap-[40px]\">\n {/* Empty state if no results after filtering */}\n {!isLoading && !hasResults && (\n hasActiveFilters ? (\n <EmptyState\n type=\"search\"\n title=\"No tasks found\"\n description=\"No tasks match your current filters. Try adjusting your search or status filter.\"\n showCTA={true}\n ctaText=\"Reset Filters\"\n onCtaClick={() => {\n const params = new URLSearchParams(searchParams.toString());\n params.delete(searchParamKey);\n params.delete(taskTypeParamKey);\n router.replace(`${pathname}?${params.toString()}`, { scroll: false });\n }}\n />\n ) : (\n <EmptyState\n type=\"generic\"\n title=\"No tasks available\"\n description=\"Check back soon for upcoming tasks!\"\n showCTA={false}\n />\n )\n )}\n\n {/* Completed Tasks Table */}\n {showCompleted && (hasResults || isLoading) && (\n <div className=\"w-full\">\n <h3 className=\"text-h2 text-ods-text-primary tracking-[-0.48px] md:tracking-[-0.56px] lg:tracking-[-0.64px] mb-4\">\n Recently Completed<span className=\"text-ods-accent\">:</span>\n </h3>\n <DeliveryTable\n items={filteredCompleted}\n isLoading={isLoading}\n />\n </div>\n )}\n\n {/* In Progress Tasks Table */}\n {showInProgress && (hasResults || isLoading) && (\n <div className=\"w-full\">\n <h3 className=\"text-h2 text-ods-text-primary tracking-[-0.48px] md:tracking-[-0.56px] lg:tracking-[-0.64px] mb-4\">\n Active Tasks<span className=\"text-ods-accent\">:</span>\n </h3>\n <DeliveryTable\n items={filteredInProgress}\n isLoading={isLoading}\n />\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\n/**\n * DeliveryTable — bordered card containing one `<DeliveryRow />` per\n * item. Visual rendering of each row lives in `delivery-row.tsx` so the\n * exact same primitive can be composed elsewhere (notably the linked-\n * delivery surface inside `<TicketDetailDrawer>`).\n *\n * Props:\n * - `items` — flat list of `DeliveryItem`. Two buckets (completed +\n * in-progress) are rendered as two separate `DeliveryTable`s by\n * the parent `DeliveryLists`.\n * - `isLoading` — skeleton rows.\n * - `focusId` — `?focus=<id>` URL param. Marks the matching row\n * `id=\"delivery-<id>\"` and applies the highlight ring so the\n * deep-link from a ticket's linked-card scrolls + flashes the\n * right row.\n */\n\nimport { DeliveryRow } from './delivery-row';\nimport type { DeliveryItem } from '../../../types/delivery';\n\ninterface DeliveryTableProps {\n items: DeliveryItem[];\n isLoading?: boolean;\n}\n\n/**\n * Skeleton loader for rows - matching responsive structure\n */\nfunction SkeletonRow() {\n return (\n <div className=\"border-b border-ods-border last:border-b-0 p-[12px] md:p-[16px]\">\n <div className=\"flex flex-col md:flex-row items-start justify-between gap-[12px] md:gap-[16px] w-full\">\n {/* Left: Title, subtitle, and description skeleton */}\n <div className=\"flex-1 min-w-0 w-full md:w-auto flex flex-col gap-[12px] md:gap-[16px]\">\n {/* Title skeleton - responsive */}\n <div className=\"min-h-[24px] flex items-center\">\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-full\"></div>\n </div>\n {/* Subtitle skeleton - 1 line */}\n <div className=\"min-h-[20px] flex items-center\">\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-1/2\"></div>\n </div>\n {/* Description skeleton - 3 lines */}\n <div className=\"min-h-[72px] flex items-center\">\n <div className=\"flex-1 space-y-1\">\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-full\"></div>\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-full\"></div>\n <div className=\"h-[20px] bg-ods-border rounded animate-pulse w-2/3\"></div>\n </div>\n </div>\n </div>\n\n {/* Right: Badge skeleton - two stacked badges */}\n <div className=\"flex-shrink-0 self-start flex flex-col gap-2\">\n <div className=\"h-[32px] w-[100px] bg-ods-border rounded animate-pulse\"></div>\n <div className=\"h-[32px] w-[120px] bg-ods-border rounded animate-pulse\"></div>\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * DeliveryTable Component\n * Displays bug fixes and enhancements with fixed-height rows\n */\nexport function DeliveryTable({ items, isLoading = false }: DeliveryTableProps) {\n // Show skeletons while loading\n if (isLoading) {\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full\">\n <div className=\"w-full\">\n {[1, 2, 3, 4, 5].map((i) => (\n <SkeletonRow key={i} />\n ))}\n </div>\n </div>\n );\n }\n\n // Empty state\n if (items.length === 0) {\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-[6px] p-[40px] text-center w-full\">\n <p className=\"text-ods-text-secondary text-[14px] font-['DM_Sans'] font-medium\">\n No tasks available\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full\">\n <div className=\"w-full\">\n {items.map((item) => (\n <div\n key={item.id}\n className=\"border-b border-ods-border last:border-b-0\"\n >\n <DeliveryRow item={item} />\n </div>\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\n/**\n * LegalDocumentPage — unified UI for privacy-policy, terms-of-service,\n * and any other markdown-backed legal document.\n *\n * Replaces two near-identical hub components (`PrivacyPolicyPage` +\n * `TermsOfServicePage`) that differed only in title, contact email,\n * and copy strings. Caller passes those as props.\n *\n * Markdown rendering: defaults to lib's `SimpleMarkdownRenderer`\n * (sufficient for plain-markdown legal docs). Embedders that need\n * richer markdown (embeds, video, OG previews) pass their own via\n * the `MarkdownRenderer` prop — same injection pattern as\n * `ReleaseDetailPage`.\n *\n * Endpoint configuration: forwarded to `useLegalDocs(docType, { apiEndpoint })`.\n */\n\nimport type { ComponentType } from 'react';\nimport { PageShell, PageLayout, PageHeading } from '../../ui';\nimport { SimpleMarkdownRenderer } from '../../ui/simple-markdown-renderer';\nimport { useRouter } from '../../../embed-shims/next-navigation';\nimport { useLegalDocs, type LegalDocument } from './use-legal-docs';\nimport { formatLegalDate } from '../../../utils/format';\n\nexport interface LegalDocumentMarkdownRendererProps {\n content: string;\n sectionIds?: Array<{ id: string; title: string; level: number }>;\n demoteMarkdownH1ToH2?: boolean;\n}\n\nexport interface LegalDocumentPageProps {\n /** Document type identifier — drives the default API endpoint\n * `/api/legal/<docType>` AND the error-log prefix. Common values:\n * `'privacy'`, `'terms'`. Embedders may use any string. */\n docType: string;\n /** Heading text (e.g. \"Privacy Policy\", \"Terms of Service\"). */\n title: string;\n /** Fallback subtitle shown when no `lastUpdated` date is available\n * (e.g. \"Our privacy policy and data protection practices\"). */\n fallbackDescription: string;\n /** Email shown in the error + empty-state copy\n * (e.g. `'privacy@openframe.io'`, `'legal@openframe.io'`). */\n contactEmail: string;\n /** Prompt shown above the contact link in the error state\n * (e.g. \"For privacy-related questions, please contact:\"). */\n errorContactPrompt: string;\n /** Title for the error block (e.g. \"Unable to load privacy policy\"). */\n errorTitle: string;\n /** Sentence shown when the API returns no document\n * (e.g. \"Privacy policy content is not available at this time.\"). */\n emptyStateMessage: string;\n /** SSR-prepared document, if available. */\n initialData?: LegalDocument | null;\n /** SSR-prepared formatted \"Last Updated\" label. Stable across hydration. */\n initialLastUpdatedLabel?: string | null;\n /** Override the default `/api/legal/<docType>` endpoint\n * (reverse-proxy embedders, alternate API paths). */\n apiEndpoint?: string;\n /** Override the default markdown renderer. */\n MarkdownRenderer?: ComponentType<LegalDocumentMarkdownRendererProps>;\n /** Back-button config — same pattern as `DevSectionPage`. Pass `false`\n * to hide. Default `{ label: 'Back to home', href: '/' }`. */\n backButton?: { label?: string; href?: string } | false;\n}\n\nexport function LegalDocumentPage({\n docType,\n title,\n fallbackDescription,\n contactEmail,\n errorContactPrompt,\n errorTitle,\n emptyStateMessage,\n initialData = null,\n initialLastUpdatedLabel = null,\n apiEndpoint,\n MarkdownRenderer = SimpleMarkdownRenderer,\n backButton,\n}: LegalDocumentPageProps) {\n const router = useRouter();\n const { data, isLoading, error } = useLegalDocs(docType, { initialData, apiEndpoint });\n\n // Back-button config — mirrors DevSectionPage's `{ label: 'Back to home',\n // onClick: () => router.push('/') }`. Hide entirely when caller passes\n // `false` (e.g. embed-mode where the host owns navigation chrome).\n const backCfg =\n backButton === false\n ? undefined\n : {\n label: backButton?.label ?? 'Back to home',\n onClick: () => router.push(backButton?.href ?? '/'),\n };\n\n const fallbackLastUpdatedLabel =\n data?.lastSynced != null ? formatLegalDate(data.lastSynced) : null;\n const effectiveLastUpdatedLabel = initialLastUpdatedLabel ?? fallbackLastUpdatedLabel;\n\n // Title with accent-colon trailing dot — matches knowledge-hub typography\n const customTitle = (\n <div className=\"flex flex-col gap-4\">\n <PageHeading>\n <span>{title}</span>\n <span className=\"text-ods-accent\">.</span>\n </PageHeading>\n <p className=\"font-['DM_Sans'] text-base md:text-lg text-ods-text-secondary max-w-2xl\">\n {effectiveLastUpdatedLabel ? `Last Updated: ${effectiveLastUpdatedLabel}` : fallbackDescription}\n {data?.sourceFile && (\n <span className=\"block text-sm mt-1 opacity-75\">Source: {data.sourceFile}</span>\n )}\n </p>\n </div>\n );\n\n return (\n <PageShell>\n <PageLayout backButton={backCfg}>\n <div className=\"flex flex-col gap-4\">{customTitle}</div>\n\n <div className=\"flex flex-col lg:flex-row gap-6 lg:gap-10 items-start flex-1\">\n <div className=\"flex-1\">\n <div className=\"w-full\">\n <article className=\"space-y-2\">\n {isLoading ? (\n // Loading skeleton matching Knowledge Hub pattern\n <div className=\"space-y-6\">\n <div className=\"h-10 bg-ods-skeleton rounded-lg w-3/4 animate-pulse\"></div>\n <div className=\"space-y-4\">\n <div className=\"h-4 bg-ods-skeleton rounded w-full animate-pulse\"></div>\n <div className=\"h-4 bg-ods-skeleton rounded w-full animate-pulse\"></div>\n <div className=\"h-4 bg-ods-skeleton rounded w-5/6 animate-pulse\"></div>\n </div>\n <div className=\"h-32 bg-ods-card border border-ods-border rounded-lg animate-pulse\"></div>\n <div className=\"space-y-4\">\n <div className=\"h-4 bg-ods-skeleton rounded w-full animate-pulse\"></div>\n <div className=\"h-4 bg-ods-skeleton rounded w-4/5 animate-pulse\"></div>\n </div>\n </div>\n ) : error ? (\n <div className=\"text-center space-y-4\">\n <div className=\"bg-red-900/20 border border-red-700 rounded-lg p-6\">\n <p className=\"text-red-400 mb-2\">{errorTitle}</p>\n <p className=\"text-red-300 text-sm\">{error}</p>\n </div>\n <div className=\"text-ods-text-secondary\">\n <p>{errorContactPrompt}</p>\n <a href={`mailto:${contactEmail}`} className=\"text-ods-accent hover:underline\">\n {contactEmail}\n </a>\n </div>\n </div>\n ) : data ? (\n <MarkdownRenderer\n content={data.content}\n sectionIds={data.sections || []}\n demoteMarkdownH1ToH2\n />\n ) : (\n <div className=\"text-center text-ods-text-secondary py-16\">\n <p className=\"text-xl\">{emptyStateMessage}</p>\n <p className=\"mt-2\">\n Please contact{' '}\n <a href={`mailto:${contactEmail}`} className=\"text-ods-accent hover:underline\">\n {contactEmail}\n </a>{' '}\n for more information.\n </p>\n </div>\n )}\n </article>\n </div>\n </div>\n </div>\n </PageLayout>\n </PageShell>\n );\n}\n","'use client';\n\n/**\n * useLegalDocs — fetches a legal document (privacy policy, terms of\n * service, or any other markdown-backed legal page) from a hub API.\n *\n * Endpoint configuration — `apiEndpoint`:\n * Default `/api/legal/<docType>`. Reverse-proxy embedders override\n * with their proxied path (e.g. `/proxy/legal/privacy`).\n *\n * Data shape mirrors the hub's `lib/data/legal-utils.ts:LegalDocument`\n * server type. The hook intentionally re-declares the type here so\n * lib consumers don't need to import a server-side type.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\n\nexport interface LegalDocument {\n title: string;\n content: string;\n sourceFile: string;\n lastSynced: string | null;\n githubSha: string | null;\n sections: Array<{ id: string; title: string; level: number }>;\n docType: string;\n meta: {\n sectionsCount: number;\n contentLength: number;\n lastSyncedAgo: string;\n };\n}\n\nexport interface UseLegalDocsReturn {\n data: LegalDocument | null;\n isLoading: boolean;\n error: string | null;\n refetch: () => void;\n}\n\nexport interface UseLegalDocsOptions {\n /** Optional pre-fetched payload from server (SSR / RSC). When set,\n * the hook skips the initial client fetch. */\n initialData?: LegalDocument | null;\n /** Full GET endpoint URL. Default `/api/legal/<docType>`. */\n apiEndpoint?: string;\n}\n\n/**\n * Hook to fetch a legal document.\n * @param docType — short identifier for the document (drives the\n * default endpoint path AND the error-log prefix). Common values:\n * `'privacy'` (SECURITY.md), `'terms'` (LICENSE). Embedders may use\n * any string — the hook treats it as opaque.\n */\nexport function useLegalDocs(\n docType: string,\n options: UseLegalDocsOptions = {}\n): UseLegalDocsReturn {\n const { initialData = null, apiEndpoint } = options;\n const effectiveEndpoint = apiEndpoint ?? `/api/legal/${docType}`;\n\n const [data, setData] = useState<LegalDocument | null>(initialData ?? null);\n const [isLoading, setIsLoading] = useState(!initialData);\n const [error, setError] = useState<string | null>(null);\n\n const fetchDocument = useCallback(async () => {\n try {\n setIsLoading(true);\n setError(null);\n\n const response = await fetch(effectiveEndpoint);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch ${docType} document: ${response.status} ${response.statusText}`\n );\n }\n\n const result = await response.json();\n\n // Validate the response has required fields\n if (!result.content) {\n throw new Error(`${docType} document content is empty`);\n }\n\n setData(result);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error occurred';\n // `docType` is externally controlled (URL path segment in embedders), so it must NOT sit in\n // console.error's FIRST (format-string) argument — Node interprets %s/%j/%o there\n // (CodeQL js/tainted-format-string). Keep the format string constant; pass docType + err as\n // plain trailing args.\n console.error('Error fetching legal document:', docType, err);\n setError(errorMessage);\n } finally {\n setIsLoading(false);\n }\n }, [docType, effectiveEndpoint]);\n\n // Reset cached data when docType changes — otherwise an embedder using\n // the same hook instance for sequential docTypes (privacy → terms)\n // would briefly render the OLD doc's content while the new fetch is\n // in-flight. Not currently triggered by hub's per-route SSR (each\n // docType mounts in a fresh component), but enforces the contract.\n useEffect(() => {\n setData(initialData ?? null);\n setError(null);\n setIsLoading(!initialData);\n }, [docType, initialData]);\n\n // Fetch on mount (only if we don't already have server-provided initialData)\n useEffect(() => {\n if (initialData) return;\n fetchDocument();\n }, [fetchDocument, initialData]);\n\n const refetch = () => {\n fetchDocument();\n };\n\n return {\n data,\n isLoading,\n error,\n refetch,\n };\n}\n"],"mappings":"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","names":["OpenFrameLogo","jsx","renderSvgIcon","OpenFrameLogo","OpenmspLogo","FlamingoLogo","jsx","jsxs","renderSvgIcon","getProxiedImageUrl","jsx","getProxiedImageUrl","jsx","jsxs","jsx","jsxs","jsx","jsxs","getProxiedImageUrl","jsx","jsx","jsxs","getProxiedImageUrl","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","_","useState","useEffect","jsx","jsxs","useState","useEffect","X","jsx","jsxs","jsx","Fragment","jsx","jsxs","useCallback","jsx","useCallback","useRef","useState","ImageIcon","X","Fragment","jsx","jsxs","useRef","useState","X","ImageIcon","useState","useEffect","useRef","OpenSourceIcon","CoinsIcon","VendorDirectoryIcon","CommunityHubIcon","VendorsIcon","CommunityIcon","CompareIcon","jsx","jsxs","SunIcon","MoonIcon","CheckCircleIcon","GitHubIcon","PlusCircleIcon","OpenmspLogo","VendorDirectoryIcon","OpenSourceIcon","CommunityHubIcon","VendorsIcon","CommunityIcon","CompareIcon","useState","useRef","useEffect","useCallback","useState","jsx","jsxs","useState","useCallback","jsxs","jsx","useState","useRef","useEffect","useCallback","Fragment","jsx","jsxs","MediaCarousel","useState","useRef","useEffect","useCallback","jsx","jsxs","React","jsx","SquareAvatar","React","jsx","jsxs","SquareAvatar","DollarSign","Users","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","mainValue","secondaryInfo","Fragment","jsx","jsxs","jsx","jsxs","OpenSourceIcon","CoinsIcon","OpenFrameLogo","jsx","jsx","jsxs","SquareAvatar","jsx","sizeClasses","Fragment","jsx","jsxs","Fragment","jsx","jsxs","jsxs","jsx","Fragment","jsx","jsxs","_","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","sizeClasses","backgroundClasses","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","CheckCircleIcon","useState","useEffect","jsx","jsxs","useState","useEffect","FlamingoLogo","DatePicker","jsx","jsxs","Fragment","jsx","jsxs","useState","useEffect","Sparkles","Fragment","jsx","jsxs","useState","useEffect","Sparkles","jsx","useEffect","useRef","useState","useState","useEffect","useCallback","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","RoadmapCardSkeleton","useMemo","jsx","DEFAULT_ENDPOINT","DEFAULT_SEARCH_PARAM_KEY","DEFAULT_STATUS_PARAM_KEY","useMemo","useEffect","useState","jsx","jsxs","jsx","jsxs","DEFAULT_SEARCH_PARAM_KEY","useState","useEffect","useState","useEffect","useCallback","jsx","jsxs"]}
|