@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,726 @@
|
|
|
1
|
+
import { BLOCKS, MARKS, } from '@contentful/rich-text-types';
|
|
2
|
+
import { DEFAULT_ALLOWED_UNUSED } from '../utils/UnusedChecker';
|
|
3
|
+
/** Tiny valid JPEG data URL for CMS showcase `PictureComponent` blur placeholder demos */
|
|
4
|
+
const SHOWCASE_PICTURE_BLUR_DATA_URL = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYAAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAABAAEDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHT/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABBQJf/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAgBAwEBPwF//8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAgBAgEBPwF//8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAGPwJ//8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABPyF//9k=';
|
|
5
|
+
/**
|
|
6
|
+
* Parses inline marks (bold) from a text string.
|
|
7
|
+
* Returns an array of text nodes with appropriate marks.
|
|
8
|
+
*/
|
|
9
|
+
function parseInlineMarks(text) {
|
|
10
|
+
const parts = text.split(/(\*\*.*?\*\*)/g);
|
|
11
|
+
return parts
|
|
12
|
+
.filter((part) => part.length > 0)
|
|
13
|
+
.map((part) => {
|
|
14
|
+
if (part.startsWith('**') && part.endsWith('**')) {
|
|
15
|
+
return {
|
|
16
|
+
nodeType: 'text',
|
|
17
|
+
value: part.slice(2, -2),
|
|
18
|
+
marks: [{ type: MARKS.BOLD }],
|
|
19
|
+
data: {},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
nodeType: 'text',
|
|
24
|
+
value: part,
|
|
25
|
+
marks: [],
|
|
26
|
+
data: {},
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a valid Contentful Rich Text document from a string, supporting basic markdown:
|
|
32
|
+
* - Paragraphs (split by double newline)
|
|
33
|
+
* - Bold text (**text**)
|
|
34
|
+
* - Headings (# H1, ## H2, etc.)
|
|
35
|
+
* - Bullet lists (- item or * item)
|
|
36
|
+
*/
|
|
37
|
+
export function createRichTextFromMarkdown(text) {
|
|
38
|
+
if (!text) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
const paragraphs = text.split(/\n\n+/);
|
|
42
|
+
const content = paragraphs.map((paragraphText) => {
|
|
43
|
+
// Check for bullet lists (lines starting with - or *)
|
|
44
|
+
const lines = paragraphText.split('\n');
|
|
45
|
+
const isUnorderedList = lines.every((line) => /^[-*]\s+/.test(line) || line.trim() === '');
|
|
46
|
+
if (isUnorderedList && lines.some((line) => /^[-*]\s+/.test(line))) {
|
|
47
|
+
const listItems = lines
|
|
48
|
+
.filter((line) => /^[-*]\s+/.test(line))
|
|
49
|
+
.map((line) => {
|
|
50
|
+
const itemText = line.replace(/^[-*]\s+/, '');
|
|
51
|
+
return {
|
|
52
|
+
nodeType: BLOCKS.LIST_ITEM,
|
|
53
|
+
data: {},
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
nodeType: BLOCKS.PARAGRAPH,
|
|
57
|
+
data: {},
|
|
58
|
+
content: parseInlineMarks(itemText),
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
nodeType: BLOCKS.UL_LIST,
|
|
65
|
+
data: {},
|
|
66
|
+
content: listItems,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Check for headings
|
|
70
|
+
let nodeType = BLOCKS.PARAGRAPH;
|
|
71
|
+
let cleanText = paragraphText;
|
|
72
|
+
const headingMatch = paragraphText.match(/^(#{1,6})\s+(.+)/);
|
|
73
|
+
if (headingMatch?.[1] && headingMatch[2]) {
|
|
74
|
+
const level = headingMatch[1].length;
|
|
75
|
+
cleanText = headingMatch[2];
|
|
76
|
+
switch (level) {
|
|
77
|
+
case 1:
|
|
78
|
+
nodeType = BLOCKS.HEADING_1;
|
|
79
|
+
break;
|
|
80
|
+
case 2:
|
|
81
|
+
nodeType = BLOCKS.HEADING_2;
|
|
82
|
+
break;
|
|
83
|
+
case 3:
|
|
84
|
+
nodeType = BLOCKS.HEADING_3;
|
|
85
|
+
break;
|
|
86
|
+
case 4:
|
|
87
|
+
nodeType = BLOCKS.HEADING_4;
|
|
88
|
+
break;
|
|
89
|
+
case 5:
|
|
90
|
+
nodeType = BLOCKS.HEADING_5;
|
|
91
|
+
break;
|
|
92
|
+
case 6:
|
|
93
|
+
nodeType = BLOCKS.HEADING_6;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
nodeType,
|
|
99
|
+
data: {},
|
|
100
|
+
content: parseInlineMarks(cleanText),
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
const document = {
|
|
104
|
+
nodeType: BLOCKS.DOCUMENT,
|
|
105
|
+
data: {},
|
|
106
|
+
content: content,
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
json: document,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** True when a mock URL is a video page (must not become next/image Picture src). */
|
|
113
|
+
export function isExternalVideoPageUrl(url) {
|
|
114
|
+
if (!url)
|
|
115
|
+
return false;
|
|
116
|
+
try {
|
|
117
|
+
const host = new URL(url).hostname.replace(/^www\./, '');
|
|
118
|
+
return (host === 'vimeo.com' ||
|
|
119
|
+
host === 'player.vimeo.com' ||
|
|
120
|
+
host === 'youtu.be' ||
|
|
121
|
+
host === 'youtube.com' ||
|
|
122
|
+
host === 'youtube-nocookie.com' ||
|
|
123
|
+
host.endsWith('.youtube.com') ||
|
|
124
|
+
host.endsWith('.youtube-nocookie.com'));
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function buildExternalVideoEmbedHtml(url) {
|
|
131
|
+
const width = 1280;
|
|
132
|
+
const height = 720;
|
|
133
|
+
try {
|
|
134
|
+
const u = new URL(url);
|
|
135
|
+
const host = u.hostname.replace(/^www\./, '');
|
|
136
|
+
if (host === 'vimeo.com' || host === 'player.vimeo.com') {
|
|
137
|
+
const id = u.pathname.split('/').filter(Boolean).pop() ?? '';
|
|
138
|
+
const src = `https://player.vimeo.com/video/${id}`;
|
|
139
|
+
return {
|
|
140
|
+
width,
|
|
141
|
+
height,
|
|
142
|
+
html: `<iframe src="${src}" width="${width}" height="${height}" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen title="Showcase video"></iframe>`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
if (host === 'youtu.be') {
|
|
146
|
+
const id = u.pathname.replace(/^\//, '');
|
|
147
|
+
const src = `https://www.youtube.com/embed/${id}`;
|
|
148
|
+
return {
|
|
149
|
+
width,
|
|
150
|
+
height,
|
|
151
|
+
html: `<iframe src="${src}" width="${width}" height="${height}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen title="Showcase video"></iframe>`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (host === 'youtube.com' ||
|
|
155
|
+
host.endsWith('.youtube.com') ||
|
|
156
|
+
host.endsWith('.youtube-nocookie.com')) {
|
|
157
|
+
const id = u.searchParams.get('v') ?? u.pathname.split('/').filter(Boolean).pop() ?? '';
|
|
158
|
+
const src = `https://www.youtube.com/embed/${id}`;
|
|
159
|
+
return {
|
|
160
|
+
width,
|
|
161
|
+
height,
|
|
162
|
+
html: `<iframe src="${src}" width="${width}" height="${height}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen title="Showcase video"></iframe>`,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// fall through
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
width,
|
|
171
|
+
height,
|
|
172
|
+
html: `<iframe src="${url}" width="${width}" height="${height}" frameborder="0" allowfullscreen title="Showcase video"></iframe>`,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Creates a valid Visual object.
|
|
177
|
+
* - When `lottieUrl` is provided the visual wraps an IAnimation.
|
|
178
|
+
* - When `url` is a Vimeo/YouTube page, wraps an External video (not Picture).
|
|
179
|
+
* - When `url` is provided it is used as the image src.
|
|
180
|
+
* - Otherwise a placehold.co placeholder is generated from the dimensions.
|
|
181
|
+
*/
|
|
182
|
+
export function createVisual(id, width, height, url, lottieUrl, widthPercent) {
|
|
183
|
+
if (lottieUrl) {
|
|
184
|
+
const format = lottieUrl.toLowerCase().endsWith('.lottie') ? 'dotlottie' : 'lottie-json';
|
|
185
|
+
const animation = {
|
|
186
|
+
type: 'Animation',
|
|
187
|
+
id: `animation-${id}`,
|
|
188
|
+
name: 'Sample Animation',
|
|
189
|
+
format,
|
|
190
|
+
animationSrc: lottieUrl,
|
|
191
|
+
loop: true,
|
|
192
|
+
autoPlay: true,
|
|
193
|
+
...(widthPercent != null && { widthPercent }),
|
|
194
|
+
...(width > 0 && height > 0
|
|
195
|
+
? {
|
|
196
|
+
optimised: {
|
|
197
|
+
width,
|
|
198
|
+
height,
|
|
199
|
+
data: `<svg width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" xmlns="http://www.w3.org/2000/svg"></svg>`,
|
|
200
|
+
},
|
|
201
|
+
}
|
|
202
|
+
: {}),
|
|
203
|
+
};
|
|
204
|
+
return { type: 'Visual', id: `visual-${id}`, animation };
|
|
205
|
+
}
|
|
206
|
+
if (url && isExternalVideoPageUrl(url)) {
|
|
207
|
+
const embed = buildExternalVideoEmbedHtml(url);
|
|
208
|
+
return {
|
|
209
|
+
type: 'Visual',
|
|
210
|
+
id: `visual-${id}`,
|
|
211
|
+
video: {
|
|
212
|
+
type: 'External video',
|
|
213
|
+
id: `video-${id}`,
|
|
214
|
+
name: 'Sample external video',
|
|
215
|
+
external: url,
|
|
216
|
+
width: embed.width,
|
|
217
|
+
height: embed.height,
|
|
218
|
+
embed: {
|
|
219
|
+
html: embed.html,
|
|
220
|
+
width: embed.width,
|
|
221
|
+
height: embed.height,
|
|
222
|
+
},
|
|
223
|
+
...(widthPercent != null && { widthPercent }),
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
type: 'Visual',
|
|
229
|
+
id: `visual-${id}`,
|
|
230
|
+
image: {
|
|
231
|
+
type: 'Picture',
|
|
232
|
+
id: `img-${id}`,
|
|
233
|
+
name: 'Sample Image',
|
|
234
|
+
mimeType: 'image/jpeg',
|
|
235
|
+
width,
|
|
236
|
+
height,
|
|
237
|
+
size: 1024,
|
|
238
|
+
src: url ?? `https://placehold.co/${width}x${height}`,
|
|
239
|
+
description: 'Sample placeholder image',
|
|
240
|
+
blurDataURL: SHOWCASE_PICTURE_BLUR_DATA_URL,
|
|
241
|
+
...(widthPercent != null && { widthPercent }),
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Creates a Responsive Visual object.
|
|
247
|
+
* Passes through real image URL or Lottie URL from curated mock when available.
|
|
248
|
+
*/
|
|
249
|
+
export function createResponsiveVisual(showVisual, showMobile, width = 800, height = 600, url, lottieUrl, widthPercent) {
|
|
250
|
+
if (!showVisual) {
|
|
251
|
+
return undefined;
|
|
252
|
+
}
|
|
253
|
+
// Lottie animations don't have meaningful pixel dimensions — use as-is for both viewports.
|
|
254
|
+
if (lottieUrl) {
|
|
255
|
+
return {
|
|
256
|
+
visual: createVisual('desktop', 0, 0, undefined, lottieUrl, widthPercent),
|
|
257
|
+
mobileVisual: showMobile
|
|
258
|
+
? createVisual('mobile', 0, 0, undefined, lottieUrl, widthPercent)
|
|
259
|
+
: undefined,
|
|
260
|
+
hideVisual: false,
|
|
261
|
+
hideMobileVisual: !showMobile,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// External video pages: single video visual (no mobile duplicate needed for showcase).
|
|
265
|
+
if (url && isExternalVideoPageUrl(url)) {
|
|
266
|
+
return {
|
|
267
|
+
visual: createVisual('desktop', width, height, url, undefined, widthPercent),
|
|
268
|
+
hideVisual: false,
|
|
269
|
+
hideMobileVisual: true,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
// Calculate mobile dimensions maintaining roughly the same aspect ratio, but max width 400
|
|
273
|
+
const aspectRatio = height > 0 ? width / height : 4 / 3;
|
|
274
|
+
const mobileWidth = 400;
|
|
275
|
+
const mobileHeight = Math.round(mobileWidth / aspectRatio);
|
|
276
|
+
return {
|
|
277
|
+
visual: createVisual('desktop', width, height, url, undefined, widthPercent),
|
|
278
|
+
mobileVisual: showMobile
|
|
279
|
+
? createVisual('mobile', mobileWidth, mobileHeight, url, undefined, widthPercent)
|
|
280
|
+
: undefined,
|
|
281
|
+
hideVisual: false,
|
|
282
|
+
hideMobileVisual: !showMobile,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Creates sample links
|
|
287
|
+
*/
|
|
288
|
+
export function createLinks(count) {
|
|
289
|
+
return Array.from({ length: count }).map((_, i) => ({
|
|
290
|
+
type: 'Internal link',
|
|
291
|
+
internalType: 'Page',
|
|
292
|
+
internalId: `link-${i}`,
|
|
293
|
+
id: `link-${i}`,
|
|
294
|
+
name: `Sample Link ${i + 1}`,
|
|
295
|
+
title: `Action ${i + 1}`,
|
|
296
|
+
text: `Action ${i + 1}`,
|
|
297
|
+
slug: 'sample-page',
|
|
298
|
+
href: '#',
|
|
299
|
+
variant: i === 0 ? 'Primary' : 'Secondary',
|
|
300
|
+
lastModified: new Date(),
|
|
301
|
+
}));
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Returns true if a mock value is a pre-built Contentful Rich Text document
|
|
305
|
+
* that can be passed directly to the renderer without conversion.
|
|
306
|
+
*/
|
|
307
|
+
function isMockRichText(value) {
|
|
308
|
+
return (value !== null &&
|
|
309
|
+
typeof value === 'object' &&
|
|
310
|
+
'json' in value &&
|
|
311
|
+
typeof value.json === 'object');
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Returns true if the value is a non-empty array of MockLink objects (from curated mock data).
|
|
315
|
+
*/
|
|
316
|
+
function isMockLinkArray(value) {
|
|
317
|
+
return (Array.isArray(value) &&
|
|
318
|
+
value.length > 0 &&
|
|
319
|
+
typeof value[0]?.type === 'string' &&
|
|
320
|
+
typeof value[0]?.href === 'string');
|
|
321
|
+
}
|
|
322
|
+
function isMockVisualDims(value) {
|
|
323
|
+
return (value !== null &&
|
|
324
|
+
typeof value === 'object' &&
|
|
325
|
+
typeof value.width === 'number' &&
|
|
326
|
+
typeof value.height === 'number');
|
|
327
|
+
}
|
|
328
|
+
function isMockOtherMediaArray(value) {
|
|
329
|
+
return Array.isArray(value) && (value.length === 0 || isMockVisualDims(value[0]));
|
|
330
|
+
}
|
|
331
|
+
/** Converts curated otherMedia (array of visual dimensions) to IVisual[] for component renderers. */
|
|
332
|
+
function mockOtherMediaToVisuals(mockOtherMedia) {
|
|
333
|
+
return mockOtherMedia.map((dims, i) => createVisual(`other-media-${i}`, dims.width, dims.height, dims.url, dims.lottieUrl, dims.widthPercent));
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Converts curated MockLink[] (JSON-safe, from showcase-mocks.json) to proper link objects
|
|
337
|
+
* that the component renderers expect. Internal links get a synthetic lastModified Date.
|
|
338
|
+
*/
|
|
339
|
+
function mockLinksToLinkProps(mockLinks) {
|
|
340
|
+
return mockLinks.map((ml) => {
|
|
341
|
+
const base = {
|
|
342
|
+
id: ml.id,
|
|
343
|
+
name: ml.name,
|
|
344
|
+
text: ml.text,
|
|
345
|
+
variant: ml.variant,
|
|
346
|
+
backgroundColour: ml.backgroundColour ?? null,
|
|
347
|
+
textColour: ml.textColour ?? null,
|
|
348
|
+
};
|
|
349
|
+
if (ml.type === 'Internal link') {
|
|
350
|
+
const link = {
|
|
351
|
+
...base,
|
|
352
|
+
type: 'Internal link',
|
|
353
|
+
internalId: ml.internalId ?? ml.id,
|
|
354
|
+
href: ml.href,
|
|
355
|
+
internalType: (ml.internalType ?? 'Page'),
|
|
356
|
+
slug: ml.slug ?? '',
|
|
357
|
+
title: ml.name,
|
|
358
|
+
lastModified: new Date(),
|
|
359
|
+
};
|
|
360
|
+
return link;
|
|
361
|
+
}
|
|
362
|
+
if (ml.type === 'External link') {
|
|
363
|
+
const link = {
|
|
364
|
+
...base,
|
|
365
|
+
type: 'External link',
|
|
366
|
+
href: ml.href,
|
|
367
|
+
};
|
|
368
|
+
return link;
|
|
369
|
+
}
|
|
370
|
+
const link = {
|
|
371
|
+
...base,
|
|
372
|
+
type: 'Blank link',
|
|
373
|
+
href: null,
|
|
374
|
+
};
|
|
375
|
+
return link;
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
function toRichText(s) {
|
|
379
|
+
return s ? createRichTextFromMarkdown(s) : null;
|
|
380
|
+
}
|
|
381
|
+
export function parseShowcaseControls(searchParams, defaultState) {
|
|
382
|
+
const params = new URLSearchParams();
|
|
383
|
+
Object.entries(searchParams).forEach(([key, value]) => {
|
|
384
|
+
if (typeof value === 'string') {
|
|
385
|
+
params.set(key, value);
|
|
386
|
+
}
|
|
387
|
+
else if (Array.isArray(value) && value.length > 0 && value[0] !== undefined) {
|
|
388
|
+
params.set(key, value[0]);
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
const getBool = (key) => {
|
|
392
|
+
const val = params.get(key);
|
|
393
|
+
return (val === null ? defaultState[key] : val === 'true');
|
|
394
|
+
};
|
|
395
|
+
const getStr = (key) => {
|
|
396
|
+
return (params.get(key) || defaultState[key]);
|
|
397
|
+
};
|
|
398
|
+
const getNum = (key) => {
|
|
399
|
+
const val = params.get(key);
|
|
400
|
+
return (val ? Number(val) : defaultState[key]);
|
|
401
|
+
};
|
|
402
|
+
return {
|
|
403
|
+
heading: getStr('heading'),
|
|
404
|
+
showHeading: getBool('showHeading'),
|
|
405
|
+
preHeading: getStr('preHeading'),
|
|
406
|
+
postHeading: getStr('postHeading'),
|
|
407
|
+
body: getStr('body'),
|
|
408
|
+
additionalCopy: getStr('additionalCopy'),
|
|
409
|
+
showVisual: getBool('showVisual'),
|
|
410
|
+
showMobileVisual: getBool('showMobileVisual'),
|
|
411
|
+
backgroundColour: getStr('backgroundColour'),
|
|
412
|
+
textColour: getStr('textColour'),
|
|
413
|
+
textSize: getStr('textSize'),
|
|
414
|
+
showLinks: getBool('showLinks'),
|
|
415
|
+
numberOfLinks: getNum('numberOfLinks'),
|
|
416
|
+
cmsLabel: getStr('cmsLabel'),
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Merges mock data for the given type into the default showcase control state.
|
|
421
|
+
* Used by ShowcasePage and ShowcaseRenderPage to get the baseline for controls and URL diffing.
|
|
422
|
+
*/
|
|
423
|
+
export function getMergedShowcaseDefaultState(defaultState, type, mode, componentMockMap, collectionMockMap) {
|
|
424
|
+
const merged = { ...defaultState };
|
|
425
|
+
if (!type)
|
|
426
|
+
return merged;
|
|
427
|
+
const currentMockData = mode === 'component' ? componentMockMap[type] : collectionMockMap[type];
|
|
428
|
+
if (!currentMockData)
|
|
429
|
+
return merged;
|
|
430
|
+
merged.heading = typeof currentMockData.heading === 'string' ? currentMockData.heading : '';
|
|
431
|
+
merged.preHeading =
|
|
432
|
+
typeof currentMockData.preHeading === 'string' ? currentMockData.preHeading : '';
|
|
433
|
+
merged.postHeading =
|
|
434
|
+
typeof currentMockData.postHeading === 'string' ? currentMockData.postHeading : '';
|
|
435
|
+
merged.body = typeof currentMockData.body === 'string' ? currentMockData.body : '';
|
|
436
|
+
merged.additionalCopy =
|
|
437
|
+
typeof currentMockData.additionalCopy === 'string' ? currentMockData.additionalCopy : '';
|
|
438
|
+
if (typeof currentMockData.backgroundColour === 'string')
|
|
439
|
+
merged.backgroundColour = currentMockData.backgroundColour;
|
|
440
|
+
if (typeof currentMockData.textColour === 'string')
|
|
441
|
+
merged.textColour = currentMockData.textColour;
|
|
442
|
+
return merged;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Creates a mock card item for a collection
|
|
446
|
+
*/
|
|
447
|
+
export function createMockCardContent(collectionType, index, controls, collectionCardFieldsMap, cardMockData) {
|
|
448
|
+
const cardId = `mock-card-${index}`;
|
|
449
|
+
const cardName = `Mock Card ${index + 1}`;
|
|
450
|
+
// Special handling for collections whose contents are IVisual[] (visuals only)
|
|
451
|
+
if (collectionType === 'Carousel: Media' ||
|
|
452
|
+
collectionType.includes('Media') ||
|
|
453
|
+
collectionType === 'Separated visuals' ||
|
|
454
|
+
collectionType === 'Visuals') {
|
|
455
|
+
const v = cardMockData?.visual;
|
|
456
|
+
return createVisual(`visual-${index}`, v?.width ?? 800, v?.height ?? 600, v?.url, v?.lottieUrl, v?.widthPercent);
|
|
457
|
+
}
|
|
458
|
+
// Extract visual dimensions from mock data if present
|
|
459
|
+
const visualDims = cardMockData?.visual;
|
|
460
|
+
const mockFields = cardMockData || {};
|
|
461
|
+
// When curated mock data is present, return null for absent fields so the component
|
|
462
|
+
// doesn't render placeholder text that doesn't exist in the real CMS entry.
|
|
463
|
+
const getString = (key, defaultVal) => {
|
|
464
|
+
const val = mockFields[key];
|
|
465
|
+
if (typeof val === 'string')
|
|
466
|
+
return val;
|
|
467
|
+
return cardMockData ? null : defaultVal;
|
|
468
|
+
};
|
|
469
|
+
// Helper to get rich text from mock data: passes MockRichText documents through directly,
|
|
470
|
+
// or converts a markdown string, or falls back to the default string / null.
|
|
471
|
+
const getRichText = (key, defaultVal) => {
|
|
472
|
+
const val = mockFields[key];
|
|
473
|
+
if (isMockRichText(val)) {
|
|
474
|
+
return val;
|
|
475
|
+
}
|
|
476
|
+
const str = typeof val === 'string' ? val : null;
|
|
477
|
+
if (str)
|
|
478
|
+
return createRichTextFromMarkdown(str);
|
|
479
|
+
return cardMockData ? null : createRichTextFromMarkdown(defaultVal);
|
|
480
|
+
};
|
|
481
|
+
// When curated mock data is present, treat it as the sole source of truth.
|
|
482
|
+
// Don't inject showcase control defaults (colors, visuals, links) on top of it.
|
|
483
|
+
const isCurated = !!cardMockData;
|
|
484
|
+
const rawCard = {
|
|
485
|
+
id: cardId,
|
|
486
|
+
type: 'Component',
|
|
487
|
+
componentType: 'Generic',
|
|
488
|
+
name: cardName,
|
|
489
|
+
cmsLabel: cardName,
|
|
490
|
+
index,
|
|
491
|
+
isFirst: index === 0,
|
|
492
|
+
isLast: index === 3,
|
|
493
|
+
indexOfType: index,
|
|
494
|
+
preHeading: getString('preHeading', `Pre-heading ${index + 1}`),
|
|
495
|
+
heading: getString('heading', `Card Heading ${index + 1}`),
|
|
496
|
+
postHeading: getString('postHeading', `Post-heading ${index + 1}`),
|
|
497
|
+
body: getRichText('body', `This is the body content for mock card ${index + 1}.`),
|
|
498
|
+
additionalCopy: getRichText('additionalCopy', `Additional copy for card ${index + 1}.`),
|
|
499
|
+
// Spread other mock fields
|
|
500
|
+
...Object.fromEntries(Object.entries(mockFields)
|
|
501
|
+
.filter(([key]) => ![
|
|
502
|
+
'visual',
|
|
503
|
+
'links',
|
|
504
|
+
'preHeading',
|
|
505
|
+
'heading',
|
|
506
|
+
'postHeading',
|
|
507
|
+
'body',
|
|
508
|
+
'additionalCopy',
|
|
509
|
+
].includes(key))
|
|
510
|
+
.map(([key, val]) => {
|
|
511
|
+
// If it's a string, pass it as is (could be string field OR markdown for unknown rich text field)
|
|
512
|
+
// We can't automatically know if custom fields are rich text or not without schema.
|
|
513
|
+
return [key, val];
|
|
514
|
+
})),
|
|
515
|
+
// Prefer curated visual dims; otherwise placeholder when showVisual (default).
|
|
516
|
+
visual: (() => {
|
|
517
|
+
if (visualDims) {
|
|
518
|
+
return createResponsiveVisual(true, true, visualDims.width, visualDims.height, visualDims.url, visualDims.lottieUrl, visualDims.widthPercent);
|
|
519
|
+
}
|
|
520
|
+
if (!controls.showVisual && isCurated) {
|
|
521
|
+
return undefined;
|
|
522
|
+
}
|
|
523
|
+
return createResponsiveVisual(isCurated ? true : controls.showVisual, controls.showMobileVisual);
|
|
524
|
+
})(),
|
|
525
|
+
// Placeholder icon when no real visual dims (filtered out if unused).
|
|
526
|
+
icon: visualDims ? undefined : createVisual(`icon-${index}`, 64, 64),
|
|
527
|
+
// Curated: use the mock's colors (null = component picks its own default).
|
|
528
|
+
// Generic: use the showcase control colors.
|
|
529
|
+
backgroundColour: isCurated
|
|
530
|
+
? (mockFields['backgroundColour'] ?? null)
|
|
531
|
+
: controls.backgroundColour,
|
|
532
|
+
textColour: isCurated
|
|
533
|
+
? (mockFields['textColour'] ?? null)
|
|
534
|
+
: controls.textColour,
|
|
535
|
+
textSize: controls.textSize,
|
|
536
|
+
// Curated: use mock links, or empty (the mock is authoritative — no phantom buttons).
|
|
537
|
+
// Generic: generate placeholder links.
|
|
538
|
+
links: isMockLinkArray(mockFields['links'])
|
|
539
|
+
? mockLinksToLinkProps(mockFields['links'])
|
|
540
|
+
: isCurated
|
|
541
|
+
? []
|
|
542
|
+
: createLinks(1),
|
|
543
|
+
};
|
|
544
|
+
const usedFields = collectionCardFieldsMap[collectionType];
|
|
545
|
+
if (!usedFields) {
|
|
546
|
+
return rawCard;
|
|
547
|
+
}
|
|
548
|
+
// Filter fields to only include those that are used or allowed
|
|
549
|
+
const filteredCard = Object.fromEntries(Object.entries(rawCard).filter(([key]) => {
|
|
550
|
+
if (['id', 'type', 'componentType', 'name', 'cmsLabel', 'index'].includes(key)) {
|
|
551
|
+
return true;
|
|
552
|
+
}
|
|
553
|
+
if (usedFields.has(key)) {
|
|
554
|
+
return true;
|
|
555
|
+
}
|
|
556
|
+
if (DEFAULT_ALLOWED_UNUSED.has(key)) {
|
|
557
|
+
return true;
|
|
558
|
+
}
|
|
559
|
+
return false;
|
|
560
|
+
}));
|
|
561
|
+
return filteredCard;
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Generates a mock component or collection based on the control state.
|
|
565
|
+
* URL params (providedControlKeys) always override mock data for those keys.
|
|
566
|
+
*/
|
|
567
|
+
export function createMockShowcaseData(type, mode, controls, componentFieldsMap, collectionFieldsMap, collectionCardFieldsMap, componentMockMap = {}, collectionMockMap = {}, collectionCardMockMap = {}, providedControlKeys = new Set()) {
|
|
568
|
+
// Determine used fields first so we can conditionally create contents
|
|
569
|
+
const usedFields = mode === 'component' ? componentFieldsMap[type] : collectionFieldsMap[type];
|
|
570
|
+
const mockData = mode === 'component' ? componentMockMap[type] : collectionMockMap[type];
|
|
571
|
+
const mockFields = mockData || {};
|
|
572
|
+
const visualDims = mockData?.visual;
|
|
573
|
+
// When curated mock data is present, treat it as the sole source of truth unless URL provided a key.
|
|
574
|
+
const isCurated = !!mockData;
|
|
575
|
+
const commonFields = {
|
|
576
|
+
id: 'mock-id',
|
|
577
|
+
name: controls.cmsLabel,
|
|
578
|
+
cmsLabel: controls.cmsLabel,
|
|
579
|
+
index: 0,
|
|
580
|
+
isFirst: true,
|
|
581
|
+
isLast: true,
|
|
582
|
+
indexOfType: 0,
|
|
583
|
+
// URL-provided keys override; otherwise curated mock or control default.
|
|
584
|
+
preHeading: providedControlKeys.has('preHeading')
|
|
585
|
+
? controls.preHeading || null
|
|
586
|
+
: isCurated
|
|
587
|
+
? mockFields['preHeading'] != null
|
|
588
|
+
? String(mockFields['preHeading'])
|
|
589
|
+
: null
|
|
590
|
+
: controls.preHeading || null,
|
|
591
|
+
heading: providedControlKeys.has('heading')
|
|
592
|
+
? controls.showHeading
|
|
593
|
+
? controls.heading
|
|
594
|
+
: null
|
|
595
|
+
: isCurated
|
|
596
|
+
? mockFields['heading'] != null
|
|
597
|
+
? String(mockFields['heading'])
|
|
598
|
+
: null
|
|
599
|
+
: controls.showHeading
|
|
600
|
+
? controls.heading
|
|
601
|
+
: null,
|
|
602
|
+
postHeading: providedControlKeys.has('postHeading')
|
|
603
|
+
? controls.postHeading || null
|
|
604
|
+
: isCurated
|
|
605
|
+
? mockFields['postHeading'] != null
|
|
606
|
+
? String(mockFields['postHeading'])
|
|
607
|
+
: null
|
|
608
|
+
: controls.postHeading || null,
|
|
609
|
+
body: providedControlKeys.has('body')
|
|
610
|
+
? toRichText(controls.body)
|
|
611
|
+
: isMockRichText(mockFields['body'])
|
|
612
|
+
? mockFields['body']
|
|
613
|
+
: typeof mockFields['body'] === 'string'
|
|
614
|
+
? toRichText(mockFields['body'])
|
|
615
|
+
: isCurated
|
|
616
|
+
? null
|
|
617
|
+
: toRichText(controls.body),
|
|
618
|
+
additionalCopy: providedControlKeys.has('additionalCopy')
|
|
619
|
+
? toRichText(controls.additionalCopy)
|
|
620
|
+
: isMockRichText(mockFields['additionalCopy'])
|
|
621
|
+
? mockFields['additionalCopy']
|
|
622
|
+
: typeof mockFields['additionalCopy'] === 'string'
|
|
623
|
+
? toRichText(mockFields['additionalCopy'])
|
|
624
|
+
: isCurated
|
|
625
|
+
? null
|
|
626
|
+
: toRichText(controls.additionalCopy),
|
|
627
|
+
// Spread other mock fields that are NOT standard controls
|
|
628
|
+
// (Standard controls like heading/body are passed via `controls` object,
|
|
629
|
+
// so we don't need to spread them again, but we do need custom fields)
|
|
630
|
+
...Object.fromEntries(Object.entries(mockFields)
|
|
631
|
+
.filter(([key]) => ![
|
|
632
|
+
'visual',
|
|
633
|
+
'otherMedia',
|
|
634
|
+
'links',
|
|
635
|
+
'preHeading',
|
|
636
|
+
'heading',
|
|
637
|
+
'postHeading',
|
|
638
|
+
'body',
|
|
639
|
+
'additionalCopy',
|
|
640
|
+
].includes(key))
|
|
641
|
+
.map(([key, val]) => [key, val])),
|
|
642
|
+
// Curated otherMedia: convert array of visual dimensions to IVisual[] (includes widthPercent).
|
|
643
|
+
otherMedia: isMockOtherMediaArray(mockFields['otherMedia'])
|
|
644
|
+
? mockOtherMediaToVisuals(mockFields['otherMedia'])
|
|
645
|
+
: undefined,
|
|
646
|
+
// Prefer curated visual dimensions/URL when present. Otherwise generate a
|
|
647
|
+
// placehold.co placeholder when showVisual is true (default). usedFields
|
|
648
|
+
// filter drops `visual` when the type does not use it.
|
|
649
|
+
visual: (() => {
|
|
650
|
+
const show = providedControlKeys.has('showVisual')
|
|
651
|
+
? controls.showVisual
|
|
652
|
+
: visualDims
|
|
653
|
+
? true
|
|
654
|
+
: controls.showVisual;
|
|
655
|
+
if (!show) {
|
|
656
|
+
return undefined;
|
|
657
|
+
}
|
|
658
|
+
return createResponsiveVisual(true, controls.showMobileVisual || Boolean(visualDims?.url), visualDims?.width, visualDims?.height, visualDims?.url, visualDims?.lottieUrl, visualDims?.widthPercent);
|
|
659
|
+
})(),
|
|
660
|
+
backgroundColour: providedControlKeys.has('backgroundColour')
|
|
661
|
+
? controls.backgroundColour
|
|
662
|
+
: isCurated
|
|
663
|
+
? (mockFields['backgroundColour'] ?? null)
|
|
664
|
+
: controls.backgroundColour,
|
|
665
|
+
textColour: providedControlKeys.has('textColour')
|
|
666
|
+
? controls.textColour
|
|
667
|
+
: isCurated
|
|
668
|
+
? (mockFields['textColour'] ?? null)
|
|
669
|
+
: controls.textColour,
|
|
670
|
+
textSize: controls.textSize,
|
|
671
|
+
links: providedControlKeys.has('showLinks') || providedControlKeys.has('numberOfLinks')
|
|
672
|
+
? controls.showLinks
|
|
673
|
+
? createLinks(controls.numberOfLinks)
|
|
674
|
+
: []
|
|
675
|
+
: isMockLinkArray(mockFields['links'])
|
|
676
|
+
? mockLinksToLinkProps(mockFields['links'])
|
|
677
|
+
: isCurated
|
|
678
|
+
? []
|
|
679
|
+
: controls.showLinks
|
|
680
|
+
? createLinks(controls.numberOfLinks)
|
|
681
|
+
: [],
|
|
682
|
+
};
|
|
683
|
+
// Only create contents if the collection explicitly uses them
|
|
684
|
+
const collectionUsesContents = usedFields?.has('contents') ?? true;
|
|
685
|
+
// Support both a single card mock (repeated for all slots) and an array of distinct card mocks.
|
|
686
|
+
// When curated cards are provided use exactly that count; otherwise default to 4.
|
|
687
|
+
const rawCardMock = collectionCardMockMap[type];
|
|
688
|
+
const curatedCardCount = Array.isArray(rawCardMock) ? rawCardMock.length : undefined;
|
|
689
|
+
const cardCount = curatedCardCount ?? 4;
|
|
690
|
+
const getCardMock = (i) => {
|
|
691
|
+
if (!rawCardMock)
|
|
692
|
+
return undefined;
|
|
693
|
+
if (Array.isArray(rawCardMock))
|
|
694
|
+
return rawCardMock[i % rawCardMock.length];
|
|
695
|
+
return rawCardMock;
|
|
696
|
+
};
|
|
697
|
+
const rawData = mode === 'component'
|
|
698
|
+
? {
|
|
699
|
+
...commonFields,
|
|
700
|
+
type: 'Component',
|
|
701
|
+
componentType: type,
|
|
702
|
+
}
|
|
703
|
+
: {
|
|
704
|
+
...commonFields,
|
|
705
|
+
type: 'Collection',
|
|
706
|
+
collectionType: type,
|
|
707
|
+
...(collectionUsesContents && {
|
|
708
|
+
contents: Array.from({ length: cardCount }).map((_, i) => createMockCardContent(type, i, controls, collectionCardFieldsMap, getCardMock(i))),
|
|
709
|
+
}),
|
|
710
|
+
};
|
|
711
|
+
// Filter fields to only include those that are used or allowed
|
|
712
|
+
const filteredData = Object.fromEntries(Object.entries(rawData).filter(([key]) => {
|
|
713
|
+
if (['type', 'componentType', 'collectionType'].includes(key)) {
|
|
714
|
+
return true;
|
|
715
|
+
}
|
|
716
|
+
if (usedFields?.has(key)) {
|
|
717
|
+
return true;
|
|
718
|
+
}
|
|
719
|
+
if (DEFAULT_ALLOWED_UNUSED.has(key)) {
|
|
720
|
+
return true;
|
|
721
|
+
}
|
|
722
|
+
return false;
|
|
723
|
+
}));
|
|
724
|
+
return filteredData;
|
|
725
|
+
}
|
|
726
|
+
//# sourceMappingURL=mockFactory.js.map
|