@se-studio/core-ui 0.0.0-next16-20260822103555
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/ANALYTICS.md +160 -0
- package/CHANGELOG.md +2565 -0
- package/CMS_INFRASTRUCTURE.md +370 -0
- package/CONSENT.md +121 -0
- package/README.md +638 -0
- package/dist/CmsRendererConfig.d.ts +259 -0
- package/dist/CmsRendererConfig.d.ts.map +1 -0
- package/dist/CmsRendererConfig.js +2 -0
- package/dist/CmsRendererConfig.js.map +1 -0
- package/dist/__mocks__/server-only.d.ts +2 -0
- package/dist/__mocks__/server-only.d.ts.map +1 -0
- package/dist/__mocks__/server-only.js +2 -0
- package/dist/__mocks__/server-only.js.map +1 -0
- package/dist/analytics/AnalyticsPageTracker.d.ts +11 -0
- package/dist/analytics/AnalyticsPageTracker.d.ts.map +1 -0
- package/dist/analytics/AnalyticsPageTracker.js +26 -0
- package/dist/analytics/AnalyticsPageTracker.js.map +1 -0
- package/dist/analytics/AnalyticsProvider.d.ts +18 -0
- package/dist/analytics/AnalyticsProvider.d.ts.map +1 -0
- package/dist/analytics/AnalyticsProvider.js +48 -0
- package/dist/analytics/AnalyticsProvider.js.map +1 -0
- package/dist/analytics/adapters/CompositeAnalyticsAdapter.d.ts +13 -0
- package/dist/analytics/adapters/CompositeAnalyticsAdapter.d.ts.map +1 -0
- package/dist/analytics/adapters/CompositeAnalyticsAdapter.js +35 -0
- package/dist/analytics/adapters/CompositeAnalyticsAdapter.js.map +1 -0
- package/dist/analytics/adapters/ConsentAwareAdapter.d.ts +20 -0
- package/dist/analytics/adapters/ConsentAwareAdapter.d.ts.map +1 -0
- package/dist/analytics/adapters/ConsentAwareAdapter.js +35 -0
- package/dist/analytics/adapters/ConsentAwareAdapter.js.map +1 -0
- package/dist/analytics/adapters/ConsoleAnalyticsAdapter.d.ts +12 -0
- package/dist/analytics/adapters/ConsoleAnalyticsAdapter.d.ts.map +1 -0
- package/dist/analytics/adapters/ConsoleAnalyticsAdapter.js +22 -0
- package/dist/analytics/adapters/ConsoleAnalyticsAdapter.js.map +1 -0
- package/dist/analytics/adapters/GoogleTagManagerAdapter.d.ts +53 -0
- package/dist/analytics/adapters/GoogleTagManagerAdapter.d.ts.map +1 -0
- package/dist/analytics/adapters/GoogleTagManagerAdapter.js +134 -0
- package/dist/analytics/adapters/GoogleTagManagerAdapter.js.map +1 -0
- package/dist/analytics/adapters/index.d.ts +5 -0
- package/dist/analytics/adapters/index.d.ts.map +1 -0
- package/dist/analytics/adapters/index.js +5 -0
- package/dist/analytics/adapters/index.js.map +1 -0
- package/dist/analytics/types.d.ts +42 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +2 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/analytics/useAnalytics.d.ts +44 -0
- package/dist/analytics/useAnalytics.d.ts.map +1 -0
- package/dist/analytics/useAnalytics.js +69 -0
- package/dist/analytics/useAnalytics.js.map +1 -0
- package/dist/analytics/video/classifySeek.d.ts +15 -0
- package/dist/analytics/video/classifySeek.d.ts.map +1 -0
- package/dist/analytics/video/classifySeek.js +32 -0
- package/dist/analytics/video/classifySeek.js.map +1 -0
- package/dist/analytics/video/createVideoEngagementSession.d.ts +51 -0
- package/dist/analytics/video/createVideoEngagementSession.d.ts.map +1 -0
- package/dist/analytics/video/createVideoEngagementSession.js +225 -0
- package/dist/analytics/video/createVideoEngagementSession.js.map +1 -0
- package/dist/analytics/video/index.d.ts +6 -0
- package/dist/analytics/video/index.d.ts.map +1 -0
- package/dist/analytics/video/index.js +6 -0
- package/dist/analytics/video/index.js.map +1 -0
- package/dist/analytics/video/loadYouTubeIframeApi.d.ts +50 -0
- package/dist/analytics/video/loadYouTubeIframeApi.d.ts.map +1 -0
- package/dist/analytics/video/loadYouTubeIframeApi.js +52 -0
- package/dist/analytics/video/loadYouTubeIframeApi.js.map +1 -0
- package/dist/analytics/video/useHtml5VideoEngagement.d.ts +8 -0
- package/dist/analytics/video/useHtml5VideoEngagement.d.ts.map +1 -0
- package/dist/analytics/video/useHtml5VideoEngagement.js +67 -0
- package/dist/analytics/video/useHtml5VideoEngagement.js.map +1 -0
- package/dist/analytics/video/useVideoEngagement.d.ts +19 -0
- package/dist/analytics/video/useVideoEngagement.d.ts.map +1 -0
- package/dist/analytics/video/useVideoEngagement.js +80 -0
- package/dist/analytics/video/useVideoEngagement.js.map +1 -0
- package/dist/analytics/video/videoEngagementTypes.d.ts +52 -0
- package/dist/analytics/video/videoEngagementTypes.d.ts.map +1 -0
- package/dist/analytics/video/videoEngagementTypes.js +45 -0
- package/dist/analytics/video/videoEngagementTypes.js.map +1 -0
- package/dist/app-helpers.d.ts +196 -0
- package/dist/app-helpers.d.ts.map +1 -0
- package/dist/app-helpers.js +322 -0
- package/dist/app-helpers.js.map +1 -0
- package/dist/cmsRegistration.d.ts +302 -0
- package/dist/cmsRegistration.d.ts.map +1 -0
- package/dist/cmsRegistration.js +242 -0
- package/dist/cmsRegistration.js.map +1 -0
- package/dist/components/Animation.d.ts +3 -0
- package/dist/components/Animation.d.ts.map +1 -0
- package/dist/components/Animation.js +2 -0
- package/dist/components/Animation.js.map +1 -0
- package/dist/components/AnimationComponent.d.ts +9 -0
- package/dist/components/AnimationComponent.d.ts.map +1 -0
- package/dist/components/AnimationComponent.js +18 -0
- package/dist/components/AnimationComponent.js.map +1 -0
- package/dist/components/ClientMonitor.d.ts +7 -0
- package/dist/components/ClientMonitor.d.ts.map +1 -0
- package/dist/components/ClientMonitor.js +368 -0
- package/dist/components/ClientMonitor.js.map +1 -0
- package/dist/components/CmsCollection.d.ts +68 -0
- package/dist/components/CmsCollection.d.ts.map +1 -0
- package/dist/components/CmsCollection.js +68 -0
- package/dist/components/CmsCollection.js.map +1 -0
- package/dist/components/CmsComponent.d.ts +68 -0
- package/dist/components/CmsComponent.d.ts.map +1 -0
- package/dist/components/CmsComponent.js +68 -0
- package/dist/components/CmsComponent.js.map +1 -0
- package/dist/components/CmsContent.d.ts +105 -0
- package/dist/components/CmsContent.d.ts.map +1 -0
- package/dist/components/CmsContent.js +200 -0
- package/dist/components/CmsContent.js.map +1 -0
- package/dist/components/CmsConversionErrors.d.ts +8 -0
- package/dist/components/CmsConversionErrors.d.ts.map +1 -0
- package/dist/components/CmsConversionErrors.js +51 -0
- package/dist/components/CmsConversionErrors.js.map +1 -0
- package/dist/components/CmsDataError.d.ts +14 -0
- package/dist/components/CmsDataError.d.ts.map +1 -0
- package/dist/components/CmsDataError.js +7 -0
- package/dist/components/CmsDataError.js.map +1 -0
- package/dist/components/CmsDevLayout.d.ts +23 -0
- package/dist/components/CmsDevLayout.d.ts.map +1 -0
- package/dist/components/CmsDevLayout.js +26 -0
- package/dist/components/CmsDevLayout.js.map +1 -0
- package/dist/components/CmsEmbeddedContent.d.ts +10 -0
- package/dist/components/CmsEmbeddedContent.d.ts.map +1 -0
- package/dist/components/CmsEmbeddedContent.js +51 -0
- package/dist/components/CmsEmbeddedContent.js.map +1 -0
- package/dist/components/CmsExternalComponent.d.ts +63 -0
- package/dist/components/CmsExternalComponent.d.ts.map +1 -0
- package/dist/components/CmsExternalComponent.js +68 -0
- package/dist/components/CmsExternalComponent.js.map +1 -0
- package/dist/components/CmsRoutesLayout.d.ts +16 -0
- package/dist/components/CmsRoutesLayout.d.ts.map +1 -0
- package/dist/components/CmsRoutesLayout.js +17 -0
- package/dist/components/CmsRoutesLayout.js.map +1 -0
- package/dist/components/DefaultExternalVideoPlayButton.d.ts +3 -0
- package/dist/components/DefaultExternalVideoPlayButton.d.ts.map +1 -0
- package/dist/components/DefaultExternalVideoPlayButton.js +6 -0
- package/dist/components/DefaultExternalVideoPlayButton.js.map +1 -0
- package/dist/components/DotLottieAnimationComponent.d.ts +16 -0
- package/dist/components/DotLottieAnimationComponent.d.ts.map +1 -0
- package/dist/components/DotLottieAnimationComponent.js +88 -0
- package/dist/components/DotLottieAnimationComponent.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +19 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +32 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/ExternalVideoComponent.d.ts +9 -0
- package/dist/components/ExternalVideoComponent.d.ts.map +1 -0
- package/dist/components/ExternalVideoComponent.js +39 -0
- package/dist/components/ExternalVideoComponent.js.map +1 -0
- package/dist/components/ExternalVimeoEmbed.d.ts +12 -0
- package/dist/components/ExternalVimeoEmbed.d.ts.map +1 -0
- package/dist/components/ExternalVimeoEmbed.js +211 -0
- package/dist/components/ExternalVimeoEmbed.js.map +1 -0
- package/dist/components/ExternalYouTubeEmbed.d.ts +9 -0
- package/dist/components/ExternalYouTubeEmbed.d.ts.map +1 -0
- package/dist/components/ExternalYouTubeEmbed.js +220 -0
- package/dist/components/ExternalYouTubeEmbed.js.map +1 -0
- package/dist/components/HeroLoopVideo.d.ts +13 -0
- package/dist/components/HeroLoopVideo.d.ts.map +1 -0
- package/dist/components/HeroLoopVideo.js +146 -0
- package/dist/components/HeroLoopVideo.js.map +1 -0
- package/dist/components/HtmlComponent.d.ts +21 -0
- package/dist/components/HtmlComponent.d.ts.map +1 -0
- package/dist/components/HtmlComponent.js +34 -0
- package/dist/components/HtmlComponent.js.map +1 -0
- package/dist/components/HtmlComponentScript.d.ts +12 -0
- package/dist/components/HtmlComponentScript.d.ts.map +1 -0
- package/dist/components/HtmlComponentScript.js +12 -0
- package/dist/components/HtmlComponentScript.js.map +1 -0
- package/dist/components/ImageComponent.d.ts +7 -0
- package/dist/components/ImageComponent.d.ts.map +1 -0
- package/dist/components/ImageComponent.js +20 -0
- package/dist/components/ImageComponent.js.map +1 -0
- package/dist/components/ImageKitClientVideo.d.ts +16 -0
- package/dist/components/ImageKitClientVideo.d.ts.map +1 -0
- package/dist/components/ImageKitClientVideo.js +211 -0
- package/dist/components/ImageKitClientVideo.js.map +1 -0
- package/dist/components/ImageKitHlsVideoClient.d.ts +21 -0
- package/dist/components/ImageKitHlsVideoClient.d.ts.map +1 -0
- package/dist/components/ImageKitHlsVideoClient.js +167 -0
- package/dist/components/ImageKitHlsVideoClient.js.map +1 -0
- package/dist/components/LazyAnimation.d.ts +16 -0
- package/dist/components/LazyAnimation.d.ts.map +1 -0
- package/dist/components/LazyAnimation.js +90 -0
- package/dist/components/LazyAnimation.js.map +1 -0
- package/dist/components/LazyVideo.d.ts +19 -0
- package/dist/components/LazyVideo.d.ts.map +1 -0
- package/dist/components/LazyVideo.js +134 -0
- package/dist/components/LazyVideo.js.map +1 -0
- package/dist/components/LocalVideo.d.ts +10 -0
- package/dist/components/LocalVideo.d.ts.map +1 -0
- package/dist/components/LocalVideo.js +66 -0
- package/dist/components/LocalVideo.js.map +1 -0
- package/dist/components/LocalVideoPlayChrome.d.ts +20 -0
- package/dist/components/LocalVideoPlayChrome.d.ts.map +1 -0
- package/dist/components/LocalVideoPlayChrome.js +22 -0
- package/dist/components/LocalVideoPlayChrome.js.map +1 -0
- package/dist/components/LocalVideoPlayOverlay.d.ts +19 -0
- package/dist/components/LocalVideoPlayOverlay.d.ts.map +1 -0
- package/dist/components/LocalVideoPlayOverlay.js +49 -0
- package/dist/components/LocalVideoPlayOverlay.js.map +1 -0
- package/dist/components/PictureComponent.d.ts +7 -0
- package/dist/components/PictureComponent.d.ts.map +1 -0
- package/dist/components/PictureComponent.js +29 -0
- package/dist/components/PictureComponent.js.map +1 -0
- package/dist/components/Preview.d.ts +2 -0
- package/dist/components/Preview.d.ts.map +1 -0
- package/dist/components/Preview.js +52 -0
- package/dist/components/Preview.js.map +1 -0
- package/dist/components/StructuredData.d.ts +20 -0
- package/dist/components/StructuredData.d.ts.map +1 -0
- package/dist/components/StructuredData.js +116 -0
- package/dist/components/StructuredData.js.map +1 -0
- package/dist/components/SvgComponent.d.ts +7 -0
- package/dist/components/SvgComponent.d.ts.map +1 -0
- package/dist/components/SvgComponent.js +10 -0
- package/dist/components/SvgComponent.js.map +1 -0
- package/dist/components/SvgIconComponent.d.ts +20 -0
- package/dist/components/SvgIconComponent.d.ts.map +1 -0
- package/dist/components/SvgIconComponent.js +23 -0
- package/dist/components/SvgIconComponent.js.map +1 -0
- package/dist/components/SvgImageComponent.d.ts +7 -0
- package/dist/components/SvgImageComponent.d.ts.map +1 -0
- package/dist/components/SvgImageComponent.js +10 -0
- package/dist/components/SvgImageComponent.js.map +1 -0
- package/dist/components/SvgSpriteSheet.d.ts +24 -0
- package/dist/components/SvgSpriteSheet.d.ts.map +1 -0
- package/dist/components/SvgSpriteSheet.js +37 -0
- package/dist/components/SvgSpriteSheet.js.map +1 -0
- package/dist/components/Video.d.ts +11 -0
- package/dist/components/Video.d.ts.map +1 -0
- package/dist/components/Video.js +2 -0
- package/dist/components/Video.js.map +1 -0
- package/dist/components/VideoComponent.d.ts +10 -0
- package/dist/components/VideoComponent.d.ts.map +1 -0
- package/dist/components/VideoComponent.js +22 -0
- package/dist/components/VideoComponent.js.map +1 -0
- package/dist/components/Visual.d.ts +43 -0
- package/dist/components/Visual.d.ts.map +1 -0
- package/dist/components/Visual.js +60 -0
- package/dist/components/Visual.js.map +1 -0
- package/dist/components/VisualComponent.d.ts +83 -0
- package/dist/components/VisualComponent.d.ts.map +1 -0
- package/dist/components/VisualComponent.js +136 -0
- package/dist/components/VisualComponent.js.map +1 -0
- package/dist/components/banner/BannerClient.d.ts +13 -0
- package/dist/components/banner/BannerClient.d.ts.map +1 -0
- package/dist/components/banner/BannerClient.js +38 -0
- package/dist/components/banner/BannerClient.js.map +1 -0
- package/dist/components/banner/BannerManager.d.ts +26 -0
- package/dist/components/banner/BannerManager.d.ts.map +1 -0
- package/dist/components/banner/BannerManager.js +35 -0
- package/dist/components/banner/BannerManager.js.map +1 -0
- package/dist/components/banner/BannerTargeting.d.ts +20 -0
- package/dist/components/banner/BannerTargeting.d.ts.map +1 -0
- package/dist/components/banner/BannerTargeting.js +204 -0
- package/dist/components/banner/BannerTargeting.js.map +1 -0
- package/dist/components/banner/bannerVisibility.d.ts +20 -0
- package/dist/components/banner/bannerVisibility.d.ts.map +1 -0
- package/dist/components/banner/bannerVisibility.js +73 -0
- package/dist/components/banner/bannerVisibility.js.map +1 -0
- package/dist/components/clientMonitorVideos.d.ts +6 -0
- package/dist/components/clientMonitorVideos.d.ts.map +1 -0
- package/dist/components/clientMonitorVideos.js +116 -0
- package/dist/components/clientMonitorVideos.js.map +1 -0
- package/dist/components/dotlottieWasm.d.ts +19 -0
- package/dist/components/dotlottieWasm.d.ts.map +1 -0
- package/dist/components/dotlottieWasm.js +62 -0
- package/dist/components/dotlottieWasm.js.map +1 -0
- package/dist/components/heroLoop.d.ts +22 -0
- package/dist/components/heroLoop.d.ts.map +1 -0
- package/dist/components/heroLoop.js +24 -0
- package/dist/components/heroLoop.js.map +1 -0
- package/dist/components/svg.d.ts +3 -0
- package/dist/components/svg.d.ts.map +1 -0
- package/dist/components/svg.js +64 -0
- package/dist/components/svg.js.map +1 -0
- package/dist/context/ExternalVideoPlayButtonContext.d.ts +7 -0
- package/dist/context/ExternalVideoPlayButtonContext.d.ts.map +1 -0
- package/dist/context/ExternalVideoPlayButtonContext.js +11 -0
- package/dist/context/ExternalVideoPlayButtonContext.js.map +1 -0
- package/dist/elements/RtfOrString.d.ts +26 -0
- package/dist/elements/RtfOrString.d.ts.map +1 -0
- package/dist/elements/RtfOrString.js +13 -0
- package/dist/elements/RtfOrString.js.map +1 -0
- package/dist/elements/TrackedLink.d.ts +25 -0
- package/dist/elements/TrackedLink.d.ts.map +1 -0
- package/dist/elements/TrackedLink.js +96 -0
- package/dist/elements/TrackedLink.js.map +1 -0
- package/dist/elements/UtmLink.d.ts +7 -0
- package/dist/elements/UtmLink.d.ts.map +1 -0
- package/dist/elements/UtmLink.js +24 -0
- package/dist/elements/UtmLink.js.map +1 -0
- package/dist/framework/BackgroundMedia.d.ts +12 -0
- package/dist/framework/BackgroundMedia.d.ts.map +1 -0
- package/dist/framework/BackgroundMedia.js +23 -0
- package/dist/framework/BackgroundMedia.js.map +1 -0
- package/dist/framework/ComponentErrorIndicator.d.ts +12 -0
- package/dist/framework/ComponentErrorIndicator.d.ts.map +1 -0
- package/dist/framework/ComponentErrorIndicator.js +29 -0
- package/dist/framework/ComponentErrorIndicator.js.map +1 -0
- package/dist/framework/ContainedVisual.d.ts +12 -0
- package/dist/framework/ContainedVisual.d.ts.map +1 -0
- package/dist/framework/ContainedVisual.js +14 -0
- package/dist/framework/ContainedVisual.js.map +1 -0
- package/dist/framework/ResponsiveVisual.d.ts +14 -0
- package/dist/framework/ResponsiveVisual.d.ts.map +1 -0
- package/dist/framework/ResponsiveVisual.js +14 -0
- package/dist/framework/ResponsiveVisual.js.map +1 -0
- package/dist/framework/componentErrors.d.ts +19 -0
- package/dist/framework/componentErrors.d.ts.map +1 -0
- package/dist/framework/componentErrors.js +31 -0
- package/dist/framework/componentErrors.js.map +1 -0
- package/dist/hooks/useClickTracking.d.ts +58 -0
- package/dist/hooks/useClickTracking.d.ts.map +1 -0
- package/dist/hooks/useClickTracking.js +48 -0
- package/dist/hooks/useClickTracking.js.map +1 -0
- package/dist/hooks/useDocumentVisible.d.ts +2 -0
- package/dist/hooks/useDocumentVisible.d.ts.map +1 -0
- package/dist/hooks/useDocumentVisible.js +17 -0
- package/dist/hooks/useDocumentVisible.js.map +1 -0
- package/dist/hooks/visibility.d.ts +14 -0
- package/dist/hooks/visibility.d.ts.map +1 -0
- package/dist/hooks/visibility.js +122 -0
- package/dist/hooks/visibility.js.map +1 -0
- package/dist/index.d.ts +134 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +120 -0
- package/dist/index.js.map +1 -0
- package/dist/media-library/MediaLibraryAnimationPlayer.d.ts +9 -0
- package/dist/media-library/MediaLibraryAnimationPlayer.d.ts.map +1 -0
- package/dist/media-library/MediaLibraryAnimationPlayer.js +99 -0
- package/dist/media-library/MediaLibraryAnimationPlayer.js.map +1 -0
- package/dist/media-library/MediaLibraryGrid.d.ts +5 -0
- package/dist/media-library/MediaLibraryGrid.d.ts.map +1 -0
- package/dist/media-library/MediaLibraryGrid.js +88 -0
- package/dist/media-library/MediaLibraryGrid.js.map +1 -0
- package/dist/media-library/MediaLibraryPage.d.ts +17 -0
- package/dist/media-library/MediaLibraryPage.d.ts.map +1 -0
- package/dist/media-library/MediaLibraryPage.js +30 -0
- package/dist/media-library/MediaLibraryPage.js.map +1 -0
- package/dist/media-library/index.d.ts +4 -0
- package/dist/media-library/index.d.ts.map +1 -0
- package/dist/media-library/index.js +4 -0
- package/dist/media-library/index.js.map +1 -0
- package/dist/media-library/types.d.ts +8 -0
- package/dist/media-library/types.d.ts.map +1 -0
- package/dist/media-library/types.js +12 -0
- package/dist/media-library/types.js.map +1 -0
- package/dist/route-handlers/createCmsTxtHandler.d.ts +19 -0
- package/dist/route-handlers/createCmsTxtHandler.d.ts.map +1 -0
- package/dist/route-handlers/createCmsTxtHandler.js +154 -0
- package/dist/route-handlers/createCmsTxtHandler.js.map +1 -0
- package/dist/route-handlers/createDiscoveryHandler.d.ts +67 -0
- package/dist/route-handlers/createDiscoveryHandler.d.ts.map +1 -0
- package/dist/route-handlers/createDiscoveryHandler.js +190 -0
- package/dist/route-handlers/createDiscoveryHandler.js.map +1 -0
- package/dist/route-handlers/createGuidelinesHandler.d.ts +16 -0
- package/dist/route-handlers/createGuidelinesHandler.d.ts.map +1 -0
- package/dist/route-handlers/createGuidelinesHandler.js +100 -0
- package/dist/route-handlers/createGuidelinesHandler.js.map +1 -0
- package/dist/route-handlers/createMediaLibraryHandler.d.ts +19 -0
- package/dist/route-handlers/createMediaLibraryHandler.d.ts.map +1 -0
- package/dist/route-handlers/createMediaLibraryHandler.js +76 -0
- package/dist/route-handlers/createMediaLibraryHandler.js.map +1 -0
- package/dist/route-handlers/index.d.ts +9 -0
- package/dist/route-handlers/index.d.ts.map +1 -0
- package/dist/route-handlers/index.js +5 -0
- package/dist/route-handlers/index.js.map +1 -0
- package/dist/rtf/rtf.d.ts +66 -0
- package/dist/rtf/rtf.d.ts.map +1 -0
- package/dist/rtf/rtf.js +183 -0
- package/dist/rtf/rtf.js.map +1 -0
- package/dist/server/index.d.ts +20 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +11 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/merge-prepared-page-context.d.ts +8 -0
- package/dist/server/merge-prepared-page-context.d.ts.map +1 -0
- package/dist/server/merge-prepared-page-context.js +11 -0
- package/dist/server/merge-prepared-page-context.js.map +1 -0
- package/dist/server/page-test-merge.d.ts +7 -0
- package/dist/server/page-test-merge.d.ts.map +1 -0
- package/dist/server/page-test-merge.js +12 -0
- package/dist/server/page-test-merge.js.map +1 -0
- package/dist/server/route-handlers-types.d.ts +124 -0
- package/dist/server/route-handlers-types.d.ts.map +1 -0
- package/dist/server/route-handlers-types.js +2 -0
- package/dist/server/route-handlers-types.js.map +1 -0
- package/dist/server/route-handlers.d.ts +99 -0
- package/dist/server/route-handlers.d.ts.map +1 -0
- package/dist/server/route-handlers.js +1268 -0
- package/dist/server/route-handlers.js.map +1 -0
- package/dist/server/route-types.d.ts +78 -0
- package/dist/server/route-types.d.ts.map +1 -0
- package/dist/server/route-types.js +4 -0
- package/dist/server/route-types.js.map +1 -0
- package/dist/server/tag-index-guards.d.ts +33 -0
- package/dist/server/tag-index-guards.d.ts.map +1 -0
- package/dist/server/tag-index-guards.js +33 -0
- package/dist/server/tag-index-guards.js.map +1 -0
- package/dist/server/template-route-handlers.d.ts +7 -0
- package/dist/server/template-route-handlers.d.ts.map +1 -0
- package/dist/server/template-route-handlers.js +35 -0
- package/dist/server/template-route-handlers.js.map +1 -0
- package/dist/showcase/components/AllViewPanel.d.ts +7 -0
- package/dist/showcase/components/AllViewPanel.d.ts.map +1 -0
- package/dist/showcase/components/AllViewPanel.js +55 -0
- package/dist/showcase/components/AllViewPanel.js.map +1 -0
- package/dist/showcase/components/Controls.d.ts +15 -0
- package/dist/showcase/components/Controls.d.ts.map +1 -0
- package/dist/showcase/components/Controls.js +71 -0
- package/dist/showcase/components/Controls.js.map +1 -0
- package/dist/showcase/components/ControlsWrapper.d.ts +15 -0
- package/dist/showcase/components/ControlsWrapper.d.ts.map +1 -0
- package/dist/showcase/components/ControlsWrapper.js +9 -0
- package/dist/showcase/components/ControlsWrapper.js.map +1 -0
- package/dist/showcase/components/IframeHeightReporter.d.ts +13 -0
- package/dist/showcase/components/IframeHeightReporter.d.ts.map +1 -0
- package/dist/showcase/components/IframeHeightReporter.js +51 -0
- package/dist/showcase/components/IframeHeightReporter.js.map +1 -0
- package/dist/showcase/components/PreviewPanel.d.ts +18 -0
- package/dist/showcase/components/PreviewPanel.d.ts.map +1 -0
- package/dist/showcase/components/PreviewPanel.js +52 -0
- package/dist/showcase/components/PreviewPanel.js.map +1 -0
- package/dist/showcase/components/ScaledIframe.d.ts +22 -0
- package/dist/showcase/components/ScaledIframe.d.ts.map +1 -0
- package/dist/showcase/components/ScaledIframe.js +41 -0
- package/dist/showcase/components/ScaledIframe.js.map +1 -0
- package/dist/showcase/components/ShowcaseAllRenderPage.d.ts +21 -0
- package/dist/showcase/components/ShowcaseAllRenderPage.d.ts.map +1 -0
- package/dist/showcase/components/ShowcaseAllRenderPage.js +36 -0
- package/dist/showcase/components/ShowcaseAllRenderPage.js.map +1 -0
- package/dist/showcase/components/ShowcaseAnimationRoot.d.ts +8 -0
- package/dist/showcase/components/ShowcaseAnimationRoot.d.ts.map +1 -0
- package/dist/showcase/components/ShowcaseAnimationRoot.js +10 -0
- package/dist/showcase/components/ShowcaseAnimationRoot.js.map +1 -0
- package/dist/showcase/components/ShowcasePage.d.ts +25 -0
- package/dist/showcase/components/ShowcasePage.d.ts.map +1 -0
- package/dist/showcase/components/ShowcasePage.js +31 -0
- package/dist/showcase/components/ShowcasePage.js.map +1 -0
- package/dist/showcase/components/ShowcaseRenderPage.d.ts +21 -0
- package/dist/showcase/components/ShowcaseRenderPage.d.ts.map +1 -0
- package/dist/showcase/components/ShowcaseRenderPage.js +45 -0
- package/dist/showcase/components/ShowcaseRenderPage.js.map +1 -0
- package/dist/showcase/components/ShowcaseViewportGuard.d.ts +14 -0
- package/dist/showcase/components/ShowcaseViewportGuard.d.ts.map +1 -0
- package/dist/showcase/components/ShowcaseViewportGuard.js +77 -0
- package/dist/showcase/components/ShowcaseViewportGuard.js.map +1 -0
- package/dist/showcase/components/TopBar.d.ts +11 -0
- package/dist/showcase/components/TopBar.d.ts.map +1 -0
- package/dist/showcase/components/TopBar.js +105 -0
- package/dist/showcase/components/TopBar.js.map +1 -0
- package/dist/showcase/controlFieldSupport.d.ts +12 -0
- package/dist/showcase/controlFieldSupport.d.ts.map +1 -0
- package/dist/showcase/controlFieldSupport.js +35 -0
- package/dist/showcase/controlFieldSupport.js.map +1 -0
- package/dist/showcase/index.d.ts +20 -0
- package/dist/showcase/index.d.ts.map +1 -0
- package/dist/showcase/index.js +20 -0
- package/dist/showcase/index.js.map +1 -0
- package/dist/showcase/isCmsShowcase.d.ts +10 -0
- package/dist/showcase/isCmsShowcase.d.ts.map +1 -0
- package/dist/showcase/isCmsShowcase.js +12 -0
- package/dist/showcase/isCmsShowcase.js.map +1 -0
- package/dist/showcase/mergeShowcaseMocks.d.ts +34 -0
- package/dist/showcase/mergeShowcaseMocks.d.ts.map +1 -0
- package/dist/showcase/mergeShowcaseMocks.js +31 -0
- package/dist/showcase/mergeShowcaseMocks.js.map +1 -0
- package/dist/showcase/mockFactory.d.ts +47 -0
- package/dist/showcase/mockFactory.d.ts.map +1 -0
- package/dist/showcase/mockFactory.js +726 -0
- package/dist/showcase/mockFactory.js.map +1 -0
- package/dist/showcase/showcaseLayout.d.ts +17 -0
- package/dist/showcase/showcaseLayout.d.ts.map +1 -0
- package/dist/showcase/showcaseLayout.js +11 -0
- package/dist/showcase/showcaseLayout.js.map +1 -0
- package/dist/showcase/showcaseRelatedContent.d.ts +30 -0
- package/dist/showcase/showcaseRelatedContent.d.ts.map +1 -0
- package/dist/showcase/showcaseRelatedContent.js +106 -0
- package/dist/showcase/showcaseRelatedContent.js.map +1 -0
- package/dist/showcase/types.d.ts +21 -0
- package/dist/showcase/types.d.ts.map +1 -0
- package/dist/showcase/types.js +19 -0
- package/dist/showcase/types.js.map +1 -0
- package/dist/utils/UnsupportedWarning.d.ts +30 -0
- package/dist/utils/UnsupportedWarning.d.ts.map +1 -0
- package/dist/utils/UnsupportedWarning.js +44 -0
- package/dist/utils/UnsupportedWarning.js.map +1 -0
- package/dist/utils/UnusedChecker.d.ts +51 -0
- package/dist/utils/UnusedChecker.d.ts.map +1 -0
- package/dist/utils/UnusedChecker.js +96 -0
- package/dist/utils/UnusedChecker.js.map +1 -0
- package/dist/utils/agent-ready.d.ts +103 -0
- package/dist/utils/agent-ready.d.ts.map +1 -0
- package/dist/utils/agent-ready.js +246 -0
- package/dist/utils/agent-ready.js.map +1 -0
- package/dist/utils/assertValidSiteBaseUrl.d.ts +8 -0
- package/dist/utils/assertValidSiteBaseUrl.d.ts.map +1 -0
- package/dist/utils/assertValidSiteBaseUrl.js +31 -0
- package/dist/utils/assertValidSiteBaseUrl.js.map +1 -0
- package/dist/utils/breadcrumbUtils.d.ts +64 -0
- package/dist/utils/breadcrumbUtils.d.ts.map +1 -0
- package/dist/utils/breadcrumbUtils.js +73 -0
- package/dist/utils/breadcrumbUtils.js.map +1 -0
- package/dist/utils/buildPageMetadata.d.ts +139 -0
- package/dist/utils/buildPageMetadata.d.ts.map +1 -0
- package/dist/utils/buildPageMetadata.js +218 -0
- package/dist/utils/buildPageMetadata.js.map +1 -0
- package/dist/utils/cn.d.ts +29 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +32 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/componentUtils.d.ts +82 -0
- package/dist/utils/componentUtils.d.ts.map +1 -0
- package/dist/utils/componentUtils.js +327 -0
- package/dist/utils/componentUtils.js.map +1 -0
- package/dist/utils/convertText.d.ts +2 -0
- package/dist/utils/convertText.d.ts.map +1 -0
- package/dist/utils/convertText.js +35 -0
- package/dist/utils/convertText.js.map +1 -0
- package/dist/utils/createDefaultRenderText.d.ts +17 -0
- package/dist/utils/createDefaultRenderText.d.ts.map +1 -0
- package/dist/utils/createDefaultRenderText.js +25 -0
- package/dist/utils/createDefaultRenderText.js.map +1 -0
- package/dist/utils/errorHandling.d.ts +37 -0
- package/dist/utils/errorHandling.d.ts.map +1 -0
- package/dist/utils/errorHandling.js +61 -0
- package/dist/utils/errorHandling.js.map +1 -0
- package/dist/utils/errorMonitoring.d.ts +17 -0
- package/dist/utils/errorMonitoring.d.ts.map +1 -0
- package/dist/utils/errorMonitoring.js +26 -0
- package/dist/utils/errorMonitoring.js.map +1 -0
- package/dist/utils/imageKitVideoHls.d.ts +3 -0
- package/dist/utils/imageKitVideoHls.d.ts.map +1 -0
- package/dist/utils/imageKitVideoHls.js +5 -0
- package/dist/utils/imageKitVideoHls.js.map +1 -0
- package/dist/utils/interpolateMetaText.d.ts +9 -0
- package/dist/utils/interpolateMetaText.d.ts.map +1 -0
- package/dist/utils/interpolateMetaText.js +21 -0
- package/dist/utils/interpolateMetaText.js.map +1 -0
- package/dist/utils/linkAccessibility.d.ts +13 -0
- package/dist/utils/linkAccessibility.d.ts.map +1 -0
- package/dist/utils/linkAccessibility.js +14 -0
- package/dist/utils/linkAccessibility.js.map +1 -0
- package/dist/utils/linkResolution.d.ts +15 -0
- package/dist/utils/linkResolution.d.ts.map +1 -0
- package/dist/utils/linkResolution.js +19 -0
- package/dist/utils/linkResolution.js.map +1 -0
- package/dist/utils/listing-page-heading.d.ts +16 -0
- package/dist/utils/listing-page-heading.d.ts.map +1 -0
- package/dist/utils/listing-page-heading.js +24 -0
- package/dist/utils/listing-page-heading.js.map +1 -0
- package/dist/utils/listingStructuredData.d.ts +28 -0
- package/dist/utils/listingStructuredData.d.ts.map +1 -0
- package/dist/utils/listingStructuredData.js +65 -0
- package/dist/utils/listingStructuredData.js.map +1 -0
- package/dist/utils/marketingSiteSitemap.d.ts +103 -0
- package/dist/utils/marketingSiteSitemap.d.ts.map +1 -0
- package/dist/utils/marketingSiteSitemap.js +352 -0
- package/dist/utils/marketingSiteSitemap.js.map +1 -0
- package/dist/utils/previewPageUtils.d.ts +61 -0
- package/dist/utils/previewPageUtils.d.ts.map +1 -0
- package/dist/utils/previewPageUtils.js +72 -0
- package/dist/utils/previewPageUtils.js.map +1 -0
- package/dist/utils/previewUtils.d.ts +59 -0
- package/dist/utils/previewUtils.d.ts.map +1 -0
- package/dist/utils/previewUtils.js +60 -0
- package/dist/utils/previewUtils.js.map +1 -0
- package/dist/utils/processCollectionLinks.d.ts +11 -0
- package/dist/utils/processCollectionLinks.d.ts.map +1 -0
- package/dist/utils/processCollectionLinks.js +38 -0
- package/dist/utils/processCollectionLinks.js.map +1 -0
- package/dist/utils/processTextContent.d.ts +18 -0
- package/dist/utils/processTextContent.d.ts.map +1 -0
- package/dist/utils/processTextContent.js +24 -0
- package/dist/utils/processTextContent.js.map +1 -0
- package/dist/utils/reactNodeText.d.ts +7 -0
- package/dist/utils/reactNodeText.d.ts.map +1 -0
- package/dist/utils/reactNodeText.js +43 -0
- package/dist/utils/reactNodeText.js.map +1 -0
- package/dist/utils/richTextNodeText.d.ts +13 -0
- package/dist/utils/richTextNodeText.d.ts.map +1 -0
- package/dist/utils/richTextNodeText.js +29 -0
- package/dist/utils/richTextNodeText.js.map +1 -0
- package/dist/utils/robots.d.ts +115 -0
- package/dist/utils/robots.d.ts.map +1 -0
- package/dist/utils/robots.js +174 -0
- package/dist/utils/robots.js.map +1 -0
- package/dist/utils/scopeCss.d.ts +15 -0
- package/dist/utils/scopeCss.d.ts.map +1 -0
- package/dist/utils/scopeCss.js +186 -0
- package/dist/utils/scopeCss.js.map +1 -0
- package/dist/utils/sitemap.d.ts +173 -0
- package/dist/utils/sitemap.d.ts.map +1 -0
- package/dist/utils/sitemap.js +257 -0
- package/dist/utils/sitemap.js.map +1 -0
- package/dist/utils/structuredDataUtils.d.ts +158 -0
- package/dist/utils/structuredDataUtils.d.ts.map +1 -0
- package/dist/utils/structuredDataUtils.js +225 -0
- package/dist/utils/structuredDataUtils.js.map +1 -0
- package/dist/utils/urlUtils.d.ts +30 -0
- package/dist/utils/urlUtils.d.ts.map +1 -0
- package/dist/utils/urlUtils.js +100 -0
- package/dist/utils/urlUtils.js.map +1 -0
- package/dist/utils/visualPositions.d.ts +3 -0
- package/dist/utils/visualPositions.d.ts.map +1 -0
- package/dist/utils/visualPositions.js +13 -0
- package/dist/utils/visualPositions.js.map +1 -0
- package/dist/utils/visualSizes.d.ts +5 -0
- package/dist/utils/visualSizes.d.ts.map +1 -0
- package/dist/utils/visualSizes.js +27 -0
- package/dist/utils/visualSizes.js.map +1 -0
- package/dist/utils/wcagRelativeLuminanceFromHex.d.ts +8 -0
- package/dist/utils/wcagRelativeLuminanceFromHex.d.ts.map +1 -0
- package/dist/utils/wcagRelativeLuminanceFromHex.js +30 -0
- package/dist/utils/wcagRelativeLuminanceFromHex.js.map +1 -0
- package/dist/utils/wrapHtmlComponentJs.d.ts +10 -0
- package/dist/utils/wrapHtmlComponentJs.d.ts.map +1 -0
- package/dist/utils/wrapHtmlComponentJs.js +12 -0
- package/dist/utils/wrapHtmlComponentJs.js.map +1 -0
- package/docs/PACKAGE_EXPORT_BOUNDARIES.md +98 -0
- package/docs/llms.md +358 -0
- package/package.json +108 -0
- package/src/showcase/README.md +269 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { isVisualDownload } from '@se-studio/core-data-types';
|
|
3
|
+
import { cn } from '../utils/cn';
|
|
4
|
+
import { UnsupportedWarning } from '../utils/UnsupportedWarning';
|
|
5
|
+
import { HeroLoopVideo } from './HeroLoopVideo';
|
|
6
|
+
import { shouldRenderHeroLoop } from './heroLoop';
|
|
7
|
+
import ImageComponent from './ImageComponent';
|
|
8
|
+
import { LazyAnimation } from './LazyAnimation';
|
|
9
|
+
import { LazyVideo } from './LazyVideo';
|
|
10
|
+
/**
|
|
11
|
+
* Determines if a mask value is a URL (for CSS mask-image) or Tailwind classes.
|
|
12
|
+
* URLs start with '/' or 'http', everything else is treated as Tailwind classes.
|
|
13
|
+
*/
|
|
14
|
+
function isMaskUrl(mask) {
|
|
15
|
+
return mask.startsWith('/') || mask.startsWith('http');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Visual component for rendering images, videos, and animations.
|
|
19
|
+
*
|
|
20
|
+
* Automatically selects the appropriate renderer based on the visual type:
|
|
21
|
+
* - Animations (Lottie) are rendered via AnimationComponent
|
|
22
|
+
* - Videos are rendered via VideoComponent with Next.js optimization
|
|
23
|
+
* - Images are rendered via ImageComponent with Next.js Image optimization
|
|
24
|
+
*
|
|
25
|
+
* SVG images from icon fields are automatically rendered using the sprite system,
|
|
26
|
+
* which enables currentColor support for theming.
|
|
27
|
+
*
|
|
28
|
+
* When a mask is set on the visual, the component wraps the content in a
|
|
29
|
+
* container with the mask applied. Masks can be:
|
|
30
|
+
* - URL-based (starts with '/' or 'http'): Uses CSS mask-image
|
|
31
|
+
* - Class-based (Tailwind classes): Applied directly to the container
|
|
32
|
+
*
|
|
33
|
+
* @param visual - Visual data containing image, video, or animation
|
|
34
|
+
* @param muted - Whether video should be muted (default: false)
|
|
35
|
+
* @param controls - Whether video should show controls (default: false)
|
|
36
|
+
* @param autoPlay - Whether video/animation should autoplay (default: false)
|
|
37
|
+
* @param visualSizes - Responsive size configuration for the visual
|
|
38
|
+
* @param fullPlayer - Whether video should use full player mode (default: false)
|
|
39
|
+
* @param loop - Whether video/animation should loop (default: false)
|
|
40
|
+
* @param loopDelay - Delay between loops in milliseconds
|
|
41
|
+
* @param analyticsContext - Analytics context for tracking
|
|
42
|
+
* @param componentLabel - Label for analytics tracking
|
|
43
|
+
* @param className - Additional CSS classes
|
|
44
|
+
* @param style - Additional inline styles
|
|
45
|
+
*
|
|
46
|
+
* @example Basic image
|
|
47
|
+
* ```tsx
|
|
48
|
+
* <Visual visual={imageVisual} className="w-full h-auto" />
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @example Icon with currentColor support (automatic for icons from icon fields)
|
|
52
|
+
* ```tsx
|
|
53
|
+
* <Visual visual={component.icon} className="w-6 h-6 text-blue-500" />
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @example Video with autoplay
|
|
57
|
+
* ```tsx
|
|
58
|
+
* <Visual
|
|
59
|
+
* visual={videoVisual}
|
|
60
|
+
* autoPlay
|
|
61
|
+
* muted
|
|
62
|
+
* loop
|
|
63
|
+
* className="w-full"
|
|
64
|
+
* />
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @example Animation with loop delay
|
|
68
|
+
* ```tsx
|
|
69
|
+
* <Visual
|
|
70
|
+
* visual={animationVisual}
|
|
71
|
+
* autoPlay
|
|
72
|
+
* loop
|
|
73
|
+
* loopDelay={1000}
|
|
74
|
+
* />
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @example Image with URL-based mask (CSS mask-image)
|
|
78
|
+
* ```tsx
|
|
79
|
+
* <Visual
|
|
80
|
+
* visual={{ ...imageVisual, mask: '/assets/masks/circle.svg' }}
|
|
81
|
+
* className="w-64"
|
|
82
|
+
* />
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @example Image with class-based mask (Tailwind classes)
|
|
86
|
+
* ```tsx
|
|
87
|
+
* <Visual
|
|
88
|
+
* visual={{ ...imageVisual, mask: 'aspect-square rounded-full' }}
|
|
89
|
+
* className="w-64"
|
|
90
|
+
* />
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export const Visual = ({ visual, muted, controls, autoPlay, visualSizes, fullPlayer, loop, loopDelay, contained, analyticsContext, componentLabel, className, style, ...props }) => {
|
|
94
|
+
const { animation, image, video, mask, gradient } = visual;
|
|
95
|
+
// Render the appropriate visual type
|
|
96
|
+
let content;
|
|
97
|
+
if (animation) {
|
|
98
|
+
content = (_jsx(LazyAnimation, { ...props, animation: animation, autoPlay: autoPlay, loop: loop, loopDelay: loopDelay, analyticsContext: analyticsContext, componentLabel: componentLabel, className: cn(className, mask && 'size-full object-cover'), style: mask ? undefined : style }));
|
|
99
|
+
}
|
|
100
|
+
else if (video) {
|
|
101
|
+
const videoClassName = cn(className, mask && 'size-full object-cover');
|
|
102
|
+
const videoStyle = mask ? undefined : style;
|
|
103
|
+
if (shouldRenderHeroLoop(video, { autoPlay, loop })) {
|
|
104
|
+
content = (_jsx(HeroLoopVideo, { delivery: video.heroDelivery, autoPlay: video.autoPlay ?? autoPlay, loop: video.loop ?? loop, visualSizes: visualSizes, contained: contained, dontCrop: video.dontCrop, verticalCropPosition: video.verticalCropPosition, horizontalCropPosition: video.horizontalCropPosition, loading: props.loading, fetchPriority: props.fetchPriority, className: videoClassName, style: videoStyle }));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
content = (_jsx(LazyVideo, { ...props, video: video, autoPlay: autoPlay, muted: muted, controls: controls, visualSizes: visualSizes, fullPlayer: fullPlayer, loop: loop, contained: contained, analyticsContext: analyticsContext, componentLabel: componentLabel, className: videoClassName, style: videoStyle }));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (image) {
|
|
111
|
+
content = (_jsx(ImageComponent, { ...props, image: image, visualSizes: visualSizes, className: cn(className, mask && 'size-full object-cover'), style: mask ? undefined : style }));
|
|
112
|
+
}
|
|
113
|
+
else if (isVisualDownload(visual)) {
|
|
114
|
+
const label = visual.name ?? visual.download.filename;
|
|
115
|
+
return (_jsx("a", { href: visual.download.href, className: cn('underline hover:opacity-80', className), style: style, children: label }));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return (_jsx(UnsupportedWarning, { className: className, style: style, children: "Not supporting non images yet" }));
|
|
119
|
+
}
|
|
120
|
+
// If mask is set, wrap in a container with mask applied
|
|
121
|
+
if (mask) {
|
|
122
|
+
if (isMaskUrl(mask)) {
|
|
123
|
+
// URL-based mask: use CSS mask-image with 1:1 aspect ratio
|
|
124
|
+
const maskStyle = { '--mask-url': `url(${mask})`, ...style };
|
|
125
|
+
return (_jsxs("div", { className: cn('relative aspect-square overflow-hidden', 'mask-[image:var(--mask-url)] mask-[size:100%_100%] mask-no-repeat mask-center', className), style: maskStyle, children: [content, gradient && (_jsx("div", { className: "absolute inset-0 pointer-events-none", style: { background: gradient }, "aria-hidden": "true" }))] }));
|
|
126
|
+
}
|
|
127
|
+
// Class-based mask: apply Tailwind classes directly
|
|
128
|
+
return (_jsxs("div", { className: cn('relative overflow-hidden', mask, className), style: style, children: [content, gradient && (_jsx("div", { className: "absolute inset-0 pointer-events-none", style: { background: gradient }, "aria-hidden": "true" }))] }));
|
|
129
|
+
}
|
|
130
|
+
// If gradient is set (no mask), wrap in a relative container with overlay
|
|
131
|
+
if (gradient) {
|
|
132
|
+
return (_jsxs("div", { className: cn('relative', className), style: style, children: [content, _jsx("div", { className: "absolute inset-0 pointer-events-none", style: { background: gradient }, "aria-hidden": "true" })] }));
|
|
133
|
+
}
|
|
134
|
+
return content;
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=VisualComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisualComponent.js","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IBanner } from '@se-studio/core-data-types';
|
|
2
|
+
interface BannerClientProps {
|
|
3
|
+
banners: readonly IBanner[];
|
|
4
|
+
BannerComponent: React.ComponentType<{
|
|
5
|
+
banner: IBanner;
|
|
6
|
+
onDismiss: () => void;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
}>;
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
}
|
|
11
|
+
declare const BannerClient: React.FC<BannerClientProps>;
|
|
12
|
+
export default BannerClient;
|
|
13
|
+
//# sourceMappingURL=BannerClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BannerClient.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAU1D,UAAU,iBAAiB;IACzB,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,MAAM,IAAI,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAkD7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useLayoutEffect, useState } from 'react';
|
|
4
|
+
import { readDismissedBannerStorage, readDismissedSessionBannerIds, selectVisibleBannerId, sortBannersByPriority, writeBannerDismissal, } from './bannerVisibility';
|
|
5
|
+
const BannerClient = ({ banners, BannerComponent, debug }) => {
|
|
6
|
+
const sortedBanners = sortBannersByPriority(banners);
|
|
7
|
+
const [visibleBannerId, setVisibleBannerId] = useState(() => sortedBanners[0]?.id ?? null);
|
|
8
|
+
useLayoutEffect(() => {
|
|
9
|
+
if (debug) {
|
|
10
|
+
console.log('[BannerClient] Syncing visibility with dismissal storage:', banners);
|
|
11
|
+
}
|
|
12
|
+
setVisibleBannerId(selectVisibleBannerId(banners, {
|
|
13
|
+
dismissedBanners: readDismissedBannerStorage(),
|
|
14
|
+
dismissedSessionBannerIds: readDismissedSessionBannerIds(banners),
|
|
15
|
+
}));
|
|
16
|
+
}, [banners, debug]);
|
|
17
|
+
const handleClick = useCallback((banner) => {
|
|
18
|
+
if (debug)
|
|
19
|
+
console.debug('Banner clicked:', banner.id);
|
|
20
|
+
}, [debug]);
|
|
21
|
+
const handleDismiss = useCallback((banner) => {
|
|
22
|
+
if (debug)
|
|
23
|
+
console.log(`[BannerClient] Dismissing banner ${banner.id}`);
|
|
24
|
+
writeBannerDismissal(banner);
|
|
25
|
+
setVisibleBannerId(null);
|
|
26
|
+
}, [debug]);
|
|
27
|
+
if (!visibleBannerId) {
|
|
28
|
+
if (debug && banners.length > 0)
|
|
29
|
+
console.log('[BannerClient] No visible banner selected.');
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const visibleBanner = banners.find((banner) => banner.id === visibleBannerId);
|
|
33
|
+
if (!visibleBanner)
|
|
34
|
+
return null;
|
|
35
|
+
return (_jsx(BannerComponent, { banner: visibleBanner, onDismiss: () => handleDismiss(visibleBanner), onClick: () => handleClick(visibleBanner) }));
|
|
36
|
+
};
|
|
37
|
+
export default BannerClient;
|
|
38
|
+
//# sourceMappingURL=BannerClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BannerClient.js","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAY5B,MAAM,YAAY,GAAgC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE;IACxF,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CACnC,CAAC;IAEF,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,2DAA2D,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QAED,kBAAkB,CAChB,qBAAqB,CAAC,OAAO,EAAE;YAC7B,gBAAgB,EAAE,0BAA0B,EAAE;YAC9C,yBAAyB,EAAE,6BAA6B,CAAC,OAAO,CAAC;SAClE,CAAC,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,MAAe,EAAE,EAAE;QAClB,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,MAAe,EAAE,EAAE;QAClB,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,eAAe,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,CACL,KAAC,eAAe,IACd,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,EAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,GACzC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { BannerPlacement, IBanner, IBaseModel, ITyped } from '@se-studio/core-data-types';
|
|
2
|
+
interface BannerManagerProps {
|
|
3
|
+
content: IBaseModel & {
|
|
4
|
+
tags?: ReadonlyArray<ITyped>;
|
|
5
|
+
};
|
|
6
|
+
banners: ReadonlyArray<IBanner>;
|
|
7
|
+
BannerComponent: React.ComponentType<{
|
|
8
|
+
banner: IBanner;
|
|
9
|
+
onDismiss: () => void;
|
|
10
|
+
onClick?: () => void;
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Layout slot this manager instance renders.
|
|
14
|
+
* Defaults to `top` (under nav / before main). Mount separate managers for
|
|
15
|
+
* `afterHero` and `bottomSticky` slots.
|
|
16
|
+
*/
|
|
17
|
+
placement?: BannerPlacement;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Filter banners for a layout placement slot (default top).
|
|
21
|
+
* Missing/null placement on a banner is treated as `top`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function filterBannersByPlacement(banners: ReadonlyArray<IBanner>, placement?: BannerPlacement): IBanner[];
|
|
24
|
+
export declare function BannerManager({ content, banners, BannerComponent, placement, }: BannerManagerProps): import("react").JSX.Element | null;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=BannerManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BannerManager.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAM/F,UAAU,kBAAkB;IAC1B,OAAO,EAAE,UAAU,GAAG;QAAE,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IACvD,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,MAAM,IAAI,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC,CAAC;IACH;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,SAAS,GAAE,eAAuB,GACjC,OAAO,EAAE,CAEX;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,eAAe,EACf,SAAiB,GAClB,EAAE,kBAAkB,sCA4BpB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { resolveBannerPlacement } from '@se-studio/core-data-types';
|
|
3
|
+
import BannerClient from './BannerClient';
|
|
4
|
+
import { BannerTargetingEngine } from './BannerTargeting';
|
|
5
|
+
import { isBannerWithinSchedule, sortBannersByPriority } from './bannerVisibility';
|
|
6
|
+
/**
|
|
7
|
+
* Filter banners for a layout placement slot (default top).
|
|
8
|
+
* Missing/null placement on a banner is treated as `top`.
|
|
9
|
+
*/
|
|
10
|
+
export function filterBannersByPlacement(banners, placement = 'top') {
|
|
11
|
+
return banners.filter((banner) => resolveBannerPlacement(banner) === placement);
|
|
12
|
+
}
|
|
13
|
+
export function BannerManager({ content, banners, BannerComponent, placement = 'top', }) {
|
|
14
|
+
const debug = process.env.BANNER_DEBUG === 'true';
|
|
15
|
+
if (!banners || banners.length === 0) {
|
|
16
|
+
if (debug)
|
|
17
|
+
console.log('[BannerManager] No banners found.');
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const slotBanners = filterBannersByPlacement(banners, placement);
|
|
21
|
+
if (slotBanners.length === 0) {
|
|
22
|
+
if (debug)
|
|
23
|
+
console.log(`[BannerManager] No banners for placement=${placement}.`);
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const targetedBanners = BannerTargetingEngine.filterBannersForPage(slotBanners, content);
|
|
27
|
+
const activeBanners = sortBannersByPriority(targetedBanners).filter((banner) => isBannerWithinSchedule(banner));
|
|
28
|
+
if (debug) {
|
|
29
|
+
console.log(`[BannerManager] placement=${placement}: ${activeBanners.length} banners passed targeting and schedule.`);
|
|
30
|
+
}
|
|
31
|
+
if (activeBanners.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
return _jsx(BannerClient, { banners: activeBanners, BannerComponent: BannerComponent, debug: debug });
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=BannerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BannerManager.js","sourceRoot":"","sources":["../../../src/components/banner/BannerManager.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAkBnF;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA+B,EAC/B,YAA6B,KAAK;IAElC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,eAAe,EACf,SAAS,GAAG,KAAK,GACE;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;IAElD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,4CAA4C,SAAS,GAAG,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,eAAe,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7E,sBAAsB,CAAC,MAAM,CAAC,CAC/B,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,6BAA6B,SAAS,KAAK,aAAa,CAAC,MAAM,yCAAyC,CACzG,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,OAAO,KAAC,YAAY,IAAC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAClG,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IBanner, IBaseModel } from '@se-studio/core-data-types';
|
|
2
|
+
export declare const BannerTargetingEngine: {
|
|
3
|
+
/**
|
|
4
|
+
* Evaluates whether a banner should be shown on the current page with comprehensive logging
|
|
5
|
+
* @param banner Banner configuration with targeting rules
|
|
6
|
+
* @param content Current page/content model (IBaseModel or similar ITyped)
|
|
7
|
+
* @param url Current page URL
|
|
8
|
+
* @returns true if banner should be shown
|
|
9
|
+
*/
|
|
10
|
+
evaluateBannerRules(banner: IBanner, content: IBaseModel): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Process all banners for a page with summary logging
|
|
13
|
+
* @param banners Array of banners to evaluate
|
|
14
|
+
* @param content Current content model
|
|
15
|
+
* @param url Current URL
|
|
16
|
+
* @returns Array of banners that should be shown
|
|
17
|
+
*/
|
|
18
|
+
filterBannersForPage(banners: readonly IBanner[], content: IBaseModel): IBanner[];
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=BannerTargeting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BannerTargeting.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerTargeting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAU,MAAM,4BAA4B,CAAC;AAmG9E,eAAO,MAAM,qBAAqB;IAChC;;;;;;OAMG;gCACyB,OAAO,WAAW,UAAU,GAAG,OAAO;IA0GlE;;;;;;OAMG;kCAC2B,SAAS,OAAO,EAAE,WAAW,UAAU,GAAG,OAAO,EAAE;CAuBlF,CAAC"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
const BANNER_DEBUG = process.env.BANNER_DEBUG === 'true';
|
|
2
|
+
// Debug logging function for banner targeting
|
|
3
|
+
const debugLog = (message, data) => {
|
|
4
|
+
if (BANNER_DEBUG) {
|
|
5
|
+
console.log(message, data);
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Normalize URL for consistent pattern matching
|
|
10
|
+
* @param url URL to normalize
|
|
11
|
+
* @returns Normalized URL
|
|
12
|
+
*/
|
|
13
|
+
function normalizeUrl(url) {
|
|
14
|
+
// Ensure leading slash, remove trailing slash (except root), lowercase
|
|
15
|
+
let normalized = url.toLowerCase();
|
|
16
|
+
if (!normalized.startsWith('/')) {
|
|
17
|
+
normalized = `/${normalized}`;
|
|
18
|
+
}
|
|
19
|
+
if (normalized.length > 1 && normalized.endsWith('/')) {
|
|
20
|
+
normalized = normalized.slice(0, -1);
|
|
21
|
+
}
|
|
22
|
+
return normalized;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a URL matches a pattern with wildcard support
|
|
26
|
+
* @param pattern Pattern with * wildcards
|
|
27
|
+
* @param url URL to check
|
|
28
|
+
* @returns true if URL matches pattern
|
|
29
|
+
*/
|
|
30
|
+
function matchesPattern(pattern, url) {
|
|
31
|
+
// Escape special regex characters except *
|
|
32
|
+
const escapedPattern = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
|
|
33
|
+
// Replace * with regex equivalent (match any characters)
|
|
34
|
+
const regexPattern = escapedPattern.replace(/\*/g, '(.*)?');
|
|
35
|
+
// Create regex with anchors for exact matching
|
|
36
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
37
|
+
return regex.test(url);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if any URL pattern matches the current URL
|
|
41
|
+
* @param patterns Array of URL patterns to check
|
|
42
|
+
* @param url Current page URL
|
|
43
|
+
* @returns Matched pattern or null
|
|
44
|
+
*/
|
|
45
|
+
function matchesAnyPattern(patterns, url) {
|
|
46
|
+
const normalizedUrl = normalizeUrl(url);
|
|
47
|
+
for (const pattern of patterns) {
|
|
48
|
+
const normalizedPattern = normalizeUrl(pattern);
|
|
49
|
+
if (matchesPattern(normalizedPattern, normalizedUrl)) {
|
|
50
|
+
return pattern;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check if any content reference matches the current page context
|
|
57
|
+
* @param references Array of content references to check
|
|
58
|
+
* @param content Current page content
|
|
59
|
+
* @returns Matched reference or null
|
|
60
|
+
*/
|
|
61
|
+
function matchesAnyReference(references, content) {
|
|
62
|
+
for (const ref of references) {
|
|
63
|
+
// Direct ID match
|
|
64
|
+
if (ref.id === content.id) {
|
|
65
|
+
return ref;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
export const BannerTargetingEngine = {
|
|
71
|
+
/**
|
|
72
|
+
* Evaluates whether a banner should be shown on the current page with comprehensive logging
|
|
73
|
+
* @param banner Banner configuration with targeting rules
|
|
74
|
+
* @param content Current page/content model (IBaseModel or similar ITyped)
|
|
75
|
+
* @param url Current page URL
|
|
76
|
+
* @returns true if banner should be shown
|
|
77
|
+
*/
|
|
78
|
+
evaluateBannerRules(banner, content) {
|
|
79
|
+
const url = content.href;
|
|
80
|
+
debugLog('Looking at banner', banner);
|
|
81
|
+
const evaluation = {
|
|
82
|
+
excludePatterns: { matched: false },
|
|
83
|
+
excludeContent: { matched: false },
|
|
84
|
+
includePatterns: { matched: false },
|
|
85
|
+
includeContent: { matched: false },
|
|
86
|
+
};
|
|
87
|
+
let decision = 'DEFAULT';
|
|
88
|
+
let reason = 'default_behavior';
|
|
89
|
+
let matchedPattern;
|
|
90
|
+
let matchedContent;
|
|
91
|
+
let hasInclude = false;
|
|
92
|
+
let hasExclude = false;
|
|
93
|
+
// Step 1: Check exclude patterns first (highest priority)
|
|
94
|
+
if (banner.excludePatterns?.length) {
|
|
95
|
+
hasExclude = true;
|
|
96
|
+
const excludePatternMatch = matchesAnyPattern(banner.excludePatterns, url);
|
|
97
|
+
evaluation.excludePatterns.matched = !!excludePatternMatch;
|
|
98
|
+
if (excludePatternMatch) {
|
|
99
|
+
evaluation.excludePatterns.pattern = excludePatternMatch;
|
|
100
|
+
decision = 'EXCLUDED';
|
|
101
|
+
reason = 'matched_exclude_pattern';
|
|
102
|
+
matchedPattern = excludePatternMatch;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Step 2: Check exclude content references
|
|
106
|
+
if (decision === 'DEFAULT' && content && banner.hideOn?.length) {
|
|
107
|
+
hasExclude = true;
|
|
108
|
+
const excludeContentMatch = matchesAnyReference(banner.hideOn, content);
|
|
109
|
+
evaluation.excludeContent.matched = !!excludeContentMatch;
|
|
110
|
+
if (excludeContentMatch) {
|
|
111
|
+
evaluation.excludeContent.contentType = excludeContentMatch.type;
|
|
112
|
+
evaluation.excludeContent.id = excludeContentMatch.id;
|
|
113
|
+
decision = 'EXCLUDED';
|
|
114
|
+
reason = 'matched_exclude_content';
|
|
115
|
+
matchedContent = {
|
|
116
|
+
type: excludeContentMatch.type,
|
|
117
|
+
id: excludeContentMatch.id,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Step 3: Check include patterns
|
|
122
|
+
if (decision === 'DEFAULT' && url && banner.includePatterns?.length) {
|
|
123
|
+
hasInclude = true;
|
|
124
|
+
const includePatternMatch = matchesAnyPattern(banner.includePatterns, url);
|
|
125
|
+
evaluation.includePatterns.matched = !!includePatternMatch;
|
|
126
|
+
if (includePatternMatch) {
|
|
127
|
+
evaluation.includePatterns.pattern = includePatternMatch;
|
|
128
|
+
decision = 'INCLUDED';
|
|
129
|
+
reason = 'matched_include_pattern';
|
|
130
|
+
matchedPattern = includePatternMatch;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Step 4: Check include content references (only if no include patterns or if patterns matched)
|
|
134
|
+
if (decision === 'DEFAULT' && content && banner.showOn?.length) {
|
|
135
|
+
hasInclude = true;
|
|
136
|
+
const includeContentMatch = matchesAnyReference(banner.showOn, content);
|
|
137
|
+
evaluation.includeContent.matched = !!includeContentMatch;
|
|
138
|
+
if (includeContentMatch) {
|
|
139
|
+
evaluation.includeContent.contentType = includeContentMatch.type;
|
|
140
|
+
evaluation.includeContent.id = includeContentMatch.id;
|
|
141
|
+
decision = 'INCLUDED';
|
|
142
|
+
reason = 'matched_include_content';
|
|
143
|
+
matchedContent = {
|
|
144
|
+
type: includeContentMatch.type,
|
|
145
|
+
id: includeContentMatch.id,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (decision === 'DEFAULT') {
|
|
150
|
+
if (hasInclude) {
|
|
151
|
+
decision = 'EXCLUDED';
|
|
152
|
+
reason = 'no_include_match';
|
|
153
|
+
}
|
|
154
|
+
else if (hasExclude) {
|
|
155
|
+
decision = 'INCLUDED';
|
|
156
|
+
reason = 'no_exclude_match';
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const finalDecision = decision === 'DEFAULT' ? 'INCLUDED' : decision;
|
|
160
|
+
// Debug logging
|
|
161
|
+
if (BANNER_DEBUG) {
|
|
162
|
+
const debugInfo = {
|
|
163
|
+
bannerId: banner.id,
|
|
164
|
+
bannerMessage: banner.message ?? null,
|
|
165
|
+
currentUrl: url,
|
|
166
|
+
decision: finalDecision,
|
|
167
|
+
reason,
|
|
168
|
+
matchedPattern,
|
|
169
|
+
matchedContent,
|
|
170
|
+
evaluation,
|
|
171
|
+
};
|
|
172
|
+
debugLog(`🎯 Banner Decision for "${banner.message}":`, debugInfo);
|
|
173
|
+
}
|
|
174
|
+
return finalDecision === 'INCLUDED';
|
|
175
|
+
},
|
|
176
|
+
/**
|
|
177
|
+
* Process all banners for a page with summary logging
|
|
178
|
+
* @param banners Array of banners to evaluate
|
|
179
|
+
* @param content Current content model
|
|
180
|
+
* @param url Current URL
|
|
181
|
+
* @returns Array of banners that should be shown
|
|
182
|
+
*/
|
|
183
|
+
filterBannersForPage(banners, content) {
|
|
184
|
+
const results = banners.map((banner) => ({
|
|
185
|
+
banner,
|
|
186
|
+
shouldShow: this.evaluateBannerRules(banner, content),
|
|
187
|
+
}));
|
|
188
|
+
const includedBanners = results.filter((r) => r.shouldShow).map((r) => r.banner);
|
|
189
|
+
debugLog('📊 Banner filtering summary:', {
|
|
190
|
+
pageUrl: content.href,
|
|
191
|
+
contentId: content.id,
|
|
192
|
+
totalBanners: banners.length,
|
|
193
|
+
includedBanners: includedBanners.length,
|
|
194
|
+
excludedBanners: banners.length - includedBanners.length,
|
|
195
|
+
bannerDetails: results.map((r) => ({
|
|
196
|
+
id: r.banner.id,
|
|
197
|
+
message: r.banner.message,
|
|
198
|
+
status: r.shouldShow ? 'INCLUDED' : 'EXCLUDED',
|
|
199
|
+
})),
|
|
200
|
+
});
|
|
201
|
+
return includedBanners;
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
//# sourceMappingURL=BannerTargeting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BannerTargeting.js","sourceRoot":"","sources":["../../../src/components/banner/BannerTargeting.ts"],"names":[],"mappings":"AAoBA,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;AAEzD,8CAA8C;AAC9C,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,IAAc,EAAE,EAAE;IACnD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC;AAEF;;;;GAIG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,uEAAuE;IACvE,IAAI,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,GAAW;IAClD,2CAA2C;IAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IAErE,yDAAyD;IACzD,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE5D,+CAA+C;IAC/C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,QAA2B,EAAE,GAAW;IACjE,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAExC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,cAAc,CAAC,iBAAiB,EAAE,aAAa,CAAC,EAAE,CAAC;YACrD,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,UAA6B,EAAE,OAAmB;IAC7E,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,kBAAkB;QAClB,IAAI,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC;;;;;;OAMG;IACH,mBAAmB,CAAC,MAAe,EAAE,OAAmB;QACtD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,UAAU,GAAqB;YACnC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YACnC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAClC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YACnC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;SACnC,CAAC;QAEF,IAAI,QAAQ,GAAwC,SAAS,CAAC;QAC9D,IAAI,MAAM,GAAG,kBAAkB,CAAC;QAChC,IAAI,cAAkC,CAAC;QACvC,IAAI,cAAwD,CAAC;QAC7D,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,0DAA0D;QAC1D,IAAI,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YACnC,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YAC3E,UAAU,CAAC,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC,mBAAmB,CAAC;YAC3D,IAAI,mBAAmB,EAAE,CAAC;gBACxB,UAAU,CAAC,eAAe,CAAC,OAAO,GAAG,mBAAmB,CAAC;gBACzD,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM,GAAG,yBAAyB,CAAC;gBACnC,cAAc,GAAG,mBAAmB,CAAC;YACvC,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC/D,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,UAAU,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC,mBAAmB,CAAC;YAC1D,IAAI,mBAAmB,EAAE,CAAC;gBACxB,UAAU,CAAC,cAAc,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC;gBACjE,UAAU,CAAC,cAAc,CAAC,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC;gBACtD,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM,GAAG,yBAAyB,CAAC;gBACnC,cAAc,GAAG;oBACf,IAAI,EAAE,mBAAmB,CAAC,IAAI;oBAC9B,EAAE,EAAE,mBAAmB,CAAC,EAAE;iBAC3B,CAAC;YACJ,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,QAAQ,KAAK,SAAS,IAAI,GAAG,IAAI,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YACpE,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YAC3E,UAAU,CAAC,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC,mBAAmB,CAAC;YAC3D,IAAI,mBAAmB,EAAE,CAAC;gBACxB,UAAU,CAAC,eAAe,CAAC,OAAO,GAAG,mBAAmB,CAAC;gBACzD,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM,GAAG,yBAAyB,CAAC;gBACnC,cAAc,GAAG,mBAAmB,CAAC;YACvC,CAAC;QACH,CAAC;QAED,gGAAgG;QAChG,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC/D,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,UAAU,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC,mBAAmB,CAAC;YAC1D,IAAI,mBAAmB,EAAE,CAAC;gBACxB,UAAU,CAAC,cAAc,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC;gBACjE,UAAU,CAAC,cAAc,CAAC,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC;gBACtD,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM,GAAG,yBAAyB,CAAC;gBACnC,cAAc,GAAG;oBACf,IAAI,EAAE,mBAAmB,CAAC,IAAI;oBAC9B,EAAE,EAAE,mBAAmB,CAAC,EAAE;iBAC3B,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,UAAU,EAAE,CAAC;gBACf,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM,GAAG,kBAAkB,CAAC;YAC9B,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM,GAAG,kBAAkB,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QAErE,gBAAgB;QAChB,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,SAAS,GAAmB;gBAChC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,aAAa,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;gBACrC,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,aAAa;gBACvB,MAAM;gBACN,cAAc;gBACd,cAAc;gBACd,UAAU;aACX,CAAC;YACF,QAAQ,CAAC,2BAA2B,MAAM,CAAC,OAAO,IAAI,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,aAAa,KAAK,UAAU,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACH,oBAAoB,CAAC,OAA2B,EAAE,OAAmB;QACnE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;SACtD,CAAC,CAAC,CAAC;QAEJ,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEjF,QAAQ,CAAC,8BAA8B,EAAE;YACvC,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,eAAe,EAAE,eAAe,CAAC,MAAM;YACvC,eAAe,EAAE,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM;YACxD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;gBACf,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;gBACzB,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;aAC/C,CAAC,CAAC;SACJ,CAAC,CAAC;QAEH,OAAO,eAAe,CAAC;IACzB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IBanner } from '@se-studio/core-data-types';
|
|
2
|
+
export type DismissedBannerRecord = Record<string, {
|
|
3
|
+
timestamp?: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function sortBannersByPriority(banners: readonly IBanner[]): IBanner[];
|
|
7
|
+
export declare function isBannerWithinSchedule(banner: IBanner, referenceDate?: Date): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Picks the highest-priority banner that is within schedule and not dismissed.
|
|
10
|
+
* Storage arguments are injected so this stays testable without browser APIs.
|
|
11
|
+
*/
|
|
12
|
+
export declare function selectVisibleBannerId(banners: readonly IBanner[], { dismissedBanners, dismissedSessionBannerIds, referenceDate, }?: {
|
|
13
|
+
dismissedBanners?: DismissedBannerRecord;
|
|
14
|
+
dismissedSessionBannerIds?: ReadonlySet<string>;
|
|
15
|
+
referenceDate?: Date;
|
|
16
|
+
}): string | null;
|
|
17
|
+
export declare function readDismissedBannerStorage(): DismissedBannerRecord;
|
|
18
|
+
export declare function readDismissedSessionBannerIds(banners: readonly IBanner[]): Set<string>;
|
|
19
|
+
export declare function writeBannerDismissal(banner: IBanner): void;
|
|
20
|
+
//# sourceMappingURL=bannerVisibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bannerVisibility.d.ts","sourceRoot":"","sources":["../../../src/components/banner/bannerVisibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE1F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAE5E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,OAAa,GAAG,OAAO,CAQ3F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,EACE,gBAAqB,EACrB,yBAA6C,EAC7C,aAA0B,GAC3B,GAAE;IACD,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,yBAAyB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,IAAI,CAAC;CACjB,GACL,MAAM,GAAG,IAAI,CA6Bf;AAED,wBAAgB,0BAA0B,IAAI,qBAAqB,CAMlE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAatF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAe1D"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function sortBannersByPriority(banners) {
|
|
2
|
+
return [...banners].sort((a, b) => (b.priority || 0) - (a.priority || 0));
|
|
3
|
+
}
|
|
4
|
+
export function isBannerWithinSchedule(banner, referenceDate = new Date()) {
|
|
5
|
+
if (banner.startDate && new Date(banner.startDate) > referenceDate) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
if (banner.endDate && new Date(banner.endDate) < referenceDate) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Picks the highest-priority banner that is within schedule and not dismissed.
|
|
15
|
+
* Storage arguments are injected so this stays testable without browser APIs.
|
|
16
|
+
*/
|
|
17
|
+
export function selectVisibleBannerId(banners, { dismissedBanners = {}, dismissedSessionBannerIds = new Set(), referenceDate = new Date(), } = {}) {
|
|
18
|
+
const sortedBanners = sortBannersByPriority(banners);
|
|
19
|
+
for (const banner of sortedBanners) {
|
|
20
|
+
if (!isBannerWithinSchedule(banner, referenceDate)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const dismissed = dismissedBanners[banner.id];
|
|
24
|
+
if (!dismissed) {
|
|
25
|
+
return banner.id;
|
|
26
|
+
}
|
|
27
|
+
if (banner.dismissType === 'Timed' && dismissed.timestamp) {
|
|
28
|
+
const hoursSinceDismiss = (referenceDate.getTime() - new Date(dismissed.timestamp).getTime()) / (1000 * 60 * 60);
|
|
29
|
+
if (hoursSinceDismiss >= (banner.dismissDurationHours || 24)) {
|
|
30
|
+
return banner.id;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (banner.dismissType === 'Session') {
|
|
34
|
+
if (!dismissedSessionBannerIds.has(banner.id)) {
|
|
35
|
+
return banner.id;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
export function readDismissedBannerStorage() {
|
|
42
|
+
if (typeof window === 'undefined') {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
return JSON.parse(localStorage.getItem('dismissedBanners') || '{}');
|
|
46
|
+
}
|
|
47
|
+
export function readDismissedSessionBannerIds(banners) {
|
|
48
|
+
const dismissed = new Set();
|
|
49
|
+
if (typeof window === 'undefined') {
|
|
50
|
+
return dismissed;
|
|
51
|
+
}
|
|
52
|
+
for (const banner of banners) {
|
|
53
|
+
if (sessionStorage.getItem(`banner_session_${banner.id}`)) {
|
|
54
|
+
dismissed.add(banner.id);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return dismissed;
|
|
58
|
+
}
|
|
59
|
+
export function writeBannerDismissal(banner) {
|
|
60
|
+
if (typeof window === 'undefined') {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const dismissedBanners = readDismissedBannerStorage();
|
|
64
|
+
dismissedBanners[banner.id] = {
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
type: banner.dismissType ?? undefined,
|
|
67
|
+
};
|
|
68
|
+
localStorage.setItem('dismissedBanners', JSON.stringify(dismissedBanners));
|
|
69
|
+
if (banner.dismissType === 'Session') {
|
|
70
|
+
sessionStorage.setItem(`banner_session_${banner.id}`, 'true');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=bannerVisibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bannerVisibility.js","sourceRoot":"","sources":["../../../src/components/banner/bannerVisibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isAutoplayVideo(video: HTMLVideoElement): boolean;
|
|
2
|
+
export declare function handleVideo(video: HTMLVideoElement, isIntersecting: boolean): void;
|
|
3
|
+
/** Test-only: drop cached IntersectionObservers so stubs can be replaced. */
|
|
4
|
+
export declare function resetVideoObserversForTests(): void;
|
|
5
|
+
export declare function findAllVideos(defaultThreshold: number, shouldDebug?: (element?: HTMLElement) => boolean): () => void;
|
|
6
|
+
//# sourceMappingURL=clientMonitorVideos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientMonitorVideos.d.ts","sourceRoot":"","sources":["../../src/components/clientMonitorVideos.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAEhE;AAiBD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,QAoB3E;AAoBD,6EAA6E;AAC7E,wBAAgB,2BAA2B,SAK1C;AAED,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,MAAM,EACxB,WAAW,GAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,OAAqB,cAgE9D"}
|