@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,370 @@
|
|
|
1
|
+
# CMS Component Mapping Infrastructure
|
|
2
|
+
|
|
3
|
+
This document describes the CMS component mapping infrastructure extracted from the Point.me marketing-site project into the core-ui package.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Overview](#overview)
|
|
8
|
+
- [Architecture](#architecture)
|
|
9
|
+
- [Core Concepts](#core-concepts)
|
|
10
|
+
- [File Structure](#file-structure)
|
|
11
|
+
- [Usage Guide](#usage-guide)
|
|
12
|
+
- [1. Create Your Renderer Configuration](#1-create-your-renderer-configuration)
|
|
13
|
+
- [2. Use CmsContent with Your Configuration](#2-use-cmscontent-with-your-configuration)
|
|
14
|
+
- [3. Use UnusedChecker for Development](#3-use-unusedchecker-for-development)
|
|
15
|
+
- [Configuration Composition](#configuration-composition)
|
|
16
|
+
- [Preview Mode Configuration](#preview-mode-configuration)
|
|
17
|
+
- [Environment-Specific Configurations](#environment-specific-configurations)
|
|
18
|
+
- [Embedded Context Configuration](#embedded-context-configuration)
|
|
19
|
+
- [Type System](#type-system)
|
|
20
|
+
- [BaseCmsConfig](#basecmsconfig)
|
|
21
|
+
- [CmsRendererConfig](#cmsrendererconfig)
|
|
22
|
+
- [Context Types](#context-types)
|
|
23
|
+
- [Development Features](#development-features)
|
|
24
|
+
- [Unknown Type Warnings](#unknown-type-warnings)
|
|
25
|
+
- [Generic Fallbacks](#generic-fallbacks)
|
|
26
|
+
- [Type Safety](#type-safety)
|
|
27
|
+
- [Benefits Over Ad-Hoc Rendering](#benefits-over-ad-hoc-rendering)
|
|
28
|
+
- [Migration from Marketing-Site](#migration-from-marketing-site)
|
|
29
|
+
- [Examples](#examples)
|
|
30
|
+
- [API Reference](#api-reference)
|
|
31
|
+
- [CmsContent Props](#cmscontent-props)
|
|
32
|
+
- [Future Enhancements](#future-enhancements)
|
|
33
|
+
|
|
34
|
+
## Overview
|
|
35
|
+
|
|
36
|
+
The infrastructure provides a type-safe, extensible system for mapping CMS content types to React components. It supports:
|
|
37
|
+
|
|
38
|
+
- **Component/Collection Mapping**: Registry pattern for routing content types to renderers
|
|
39
|
+
- **Embedding System**: Components can be rendered in embedded contexts (like rich text)
|
|
40
|
+
- **Generic Fallbacks**: Automatic fallback rendering for unmapped types
|
|
41
|
+
- **Development Utilities**: Warnings for unused props and rendering errors
|
|
42
|
+
|
|
43
|
+
## Architecture
|
|
44
|
+
|
|
45
|
+
### Core Concepts
|
|
46
|
+
|
|
47
|
+
1. **Content Routing**: `CmsContent` receives an array of mixed content types and routes each to the appropriate renderer
|
|
48
|
+
2. **Type Mapping**: `ComponentMap` and `CollectionMap` define which React components render which content types
|
|
49
|
+
3. **Embedded Rendering**: Components can be rendered in embedded contexts (like rich text)
|
|
50
|
+
|
|
51
|
+
### File Structure
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
packages/core-ui/src/
|
|
55
|
+
├── components/
|
|
56
|
+
│ ├── CmsComponent.tsx # Component type router
|
|
57
|
+
│ ├── CmsCollection.tsx # Collection type router
|
|
58
|
+
│ ├── CmsContent.tsx # Main content renderer
|
|
59
|
+
│ ├── GenericComponent.tsx # Fallback component renderer
|
|
60
|
+
│ └── GenericCollection.tsx # Fallback collection renderer
|
|
61
|
+
├── embeddable/
|
|
62
|
+
│ ├── EmbeddableContext.ts # Context types for embedded rendering
|
|
63
|
+
│ ├── BuildEmbed.tsx # Factory functions for embeddable components
|
|
64
|
+
│ └── EmbeddableMaps.ts # Type definitions for embeddable maps
|
|
65
|
+
└── utils/
|
|
66
|
+
├── componentUtils.ts # Related content fetching
|
|
67
|
+
└── UnusedChecker.tsx # Development warning utility
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Usage Guide
|
|
71
|
+
|
|
72
|
+
### 1. Create Your Renderer Configuration
|
|
73
|
+
|
|
74
|
+
The recommended approach is to create a single `CmsRendererConfig` object that bundles all your renderer maps and options:
|
|
75
|
+
|
|
76
|
+
```tsx
|
|
77
|
+
import { createCmsRendererConfig } from "@se-studio/core-ui";
|
|
78
|
+
import type { MyProjectConfig } from "./types";
|
|
79
|
+
|
|
80
|
+
// Import your component renderers
|
|
81
|
+
import { HeroComponent } from "@/components/Hero";
|
|
82
|
+
import { CTAComponent } from "@/components/CTA";
|
|
83
|
+
import { ContentBlock } from "@/components/ContentBlock";
|
|
84
|
+
|
|
85
|
+
// Import your collection renderers
|
|
86
|
+
import { FAQCollection } from "@/components/FAQCollection";
|
|
87
|
+
import { RelatedArticles } from "@/components/RelatedArticles";
|
|
88
|
+
|
|
89
|
+
// Import special renderers (optional)
|
|
90
|
+
import { VisualRenderer } from "@/components/VisualRenderer";
|
|
91
|
+
import { InternalLinkRenderer } from "@/components/InternalLinkRenderer";
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Main CMS renderer configuration for the project.
|
|
95
|
+
* Create this once and reuse it throughout your app.
|
|
96
|
+
*/
|
|
97
|
+
export const rendererConfig = createCmsRendererConfig<MyProjectConfig>({
|
|
98
|
+
componentMap: {
|
|
99
|
+
"Hero": HeroComponent,
|
|
100
|
+
"CTA": CTAComponent,
|
|
101
|
+
"Content Block": ContentBlock,
|
|
102
|
+
},
|
|
103
|
+
collectionMap: {
|
|
104
|
+
"FAQs": FAQCollection,
|
|
105
|
+
"Related Articles": RelatedArticles,
|
|
106
|
+
},
|
|
107
|
+
// Optional: external components, visuals, links
|
|
108
|
+
externalComponentMap: {
|
|
109
|
+
"Contact Form": ContactFormRenderer,
|
|
110
|
+
},
|
|
111
|
+
visualComponentRenderer: VisualRenderer,
|
|
112
|
+
internalLinkRenderer: InternalLinkRenderer,
|
|
113
|
+
buildInformation,
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 2. Use CmsContent with Your Configuration
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
import { CmsContent } from "@se-studio/core-ui";
|
|
121
|
+
import { rendererConfig } from "@/cms/rendererConfig";
|
|
122
|
+
|
|
123
|
+
export function PageRenderer({ page }) {
|
|
124
|
+
const pageContext = {
|
|
125
|
+
pageLink: { slug: page.slug, title: page.title },
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
return (
|
|
129
|
+
<CmsContent
|
|
130
|
+
rendererConfig={rendererConfig}
|
|
131
|
+
pageContext={pageContext}
|
|
132
|
+
contents={page.contents}
|
|
133
|
+
/>
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Benefits of this approach:**
|
|
139
|
+
- **Clean API**: Only 3 props instead of 7+ individual props
|
|
140
|
+
- **Single source of truth**: All renderer configuration in one place
|
|
141
|
+
- **Easy to extend**: Add new renderer types without touching every CmsContent call
|
|
142
|
+
- **Type-safe**: Full TypeScript support with generics
|
|
143
|
+
- **Composable**: Create variants with `mergeCmsRendererConfig()`
|
|
144
|
+
|
|
145
|
+
### HtmlComponent entries
|
|
146
|
+
|
|
147
|
+
Contentful **HTML component** entries (`type: 'HtmlComponent'`) render through `HtmlComponent` inside `CmsContent` and `CmsEmbeddedContent`. `customJs` runs inside an IIFE with a per-instance `hcRoot` (safe to place more than one scripted HtmlComponent on a page). Optional config:
|
|
148
|
+
|
|
149
|
+
- **`htmlComponentFullWidthClassName`** — Tailwind (or other) classes applied when the entry has `fullWidth: true`. If unset, a built-in viewport-breakout default is used; override per project to match your grid.
|
|
150
|
+
|
|
151
|
+
Hero entries (`isHero: true`) are ordered **first** within each content array for both React output and markdown/search extraction. `markdownContent` and `excludeFromSearch` control what `MarkdownConverter` emits for search indexing.
|
|
152
|
+
|
|
153
|
+
### 3. Use UnusedChecker for Development
|
|
154
|
+
|
|
155
|
+
Catch unused CMS properties that aren't being rendered:
|
|
156
|
+
|
|
157
|
+
```tsx
|
|
158
|
+
import { UnusedChecker } from "@se-studio/core-ui";
|
|
159
|
+
|
|
160
|
+
export const MyComponent = ({ information, contentContext }) => {
|
|
161
|
+
const { heading, body, links, ...unused } = information;
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<UnusedChecker
|
|
165
|
+
componentName="MyComponent"
|
|
166
|
+
unused={unused}
|
|
167
|
+
showWarnings={true}
|
|
168
|
+
>
|
|
169
|
+
<div>
|
|
170
|
+
<h2>{heading}</h2>
|
|
171
|
+
<p>{body}</p>
|
|
172
|
+
</div>
|
|
173
|
+
</UnusedChecker>
|
|
174
|
+
);
|
|
175
|
+
};
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Configuration Composition
|
|
179
|
+
|
|
180
|
+
The `mergeCmsRendererConfig()` utility allows you to create specialized configurations from a base config:
|
|
181
|
+
|
|
182
|
+
### Preview Mode Configuration
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
import { mergeCmsRendererConfig } from "@se-studio/core-ui";
|
|
186
|
+
|
|
187
|
+
const baseConfig = createCmsRendererConfig({ ... });
|
|
188
|
+
|
|
189
|
+
// Preview config: use buildInformation with isProduction: false to show errors
|
|
190
|
+
export const previewConfig = mergeCmsRendererConfig(baseConfig, {
|
|
191
|
+
buildInformation: { ...baseConfig.buildInformation, isProduction: false },
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// Use in preview routes
|
|
195
|
+
<CmsContent rendererConfig={previewConfig} ... />
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Environment-Specific Configurations
|
|
199
|
+
|
|
200
|
+
```tsx
|
|
201
|
+
const productionConfig = createCmsRendererConfig({
|
|
202
|
+
buildInformation: { ...buildInfo, isProduction: true },
|
|
203
|
+
componentMap: { ... },
|
|
204
|
+
collectionMap: { ... },
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
const developmentConfig = mergeCmsRendererConfig(productionConfig, {
|
|
208
|
+
buildInformation: { ...buildInfo, isProduction: false },
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
export const rendererConfig =
|
|
212
|
+
process.env.NODE_ENV === 'production'
|
|
213
|
+
? productionConfig
|
|
214
|
+
: developmentConfig;
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Embedded Context Configuration
|
|
218
|
+
|
|
219
|
+
```tsx
|
|
220
|
+
// Different component map for embedded contexts
|
|
221
|
+
const embeddedConfig = mergeCmsRendererConfig(baseConfig, {
|
|
222
|
+
componentMap: {
|
|
223
|
+
...baseConfig.componentMap,
|
|
224
|
+
"Hero": EmbeddedHeroComponent, // Use simplified version
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Type System
|
|
230
|
+
|
|
231
|
+
### BaseCmsConfig
|
|
232
|
+
|
|
233
|
+
Projects must extend `BaseCmsConfig` to define their CMS-specific types:
|
|
234
|
+
|
|
235
|
+
```tsx
|
|
236
|
+
import type { BaseCmsConfig } from "@se-studio/core-data-types";
|
|
237
|
+
|
|
238
|
+
export interface MyProjectConfig extends BaseCmsConfig {
|
|
239
|
+
ComponentType: "Hero" | "CTA" | "Content Block";
|
|
240
|
+
CollectionType: "FAQs" | "Related Articles";
|
|
241
|
+
ExternalComponentType: "ContactForm" | "Newsletter";
|
|
242
|
+
ColourName: "red" | "blue" | "green";
|
|
243
|
+
// ... other type overrides
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### CmsRendererConfig
|
|
248
|
+
|
|
249
|
+
The main configuration type that bundles all renderer maps and helpers:
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
interface CmsRendererConfig<TConfig extends CmsRendererTypes> {
|
|
253
|
+
buildInformation: IBuildInformation;
|
|
254
|
+
componentMap: ComponentMap<TConfig>;
|
|
255
|
+
embeddedComponentMap: EmbeddedComponentMap<TConfig>;
|
|
256
|
+
collectionMap: CollectionMap<TConfig>;
|
|
257
|
+
embeddedCollectionMap: EmbeddedCollectionMap<TConfig>;
|
|
258
|
+
externalComponentMap: ExternalComponentMap<TConfig>;
|
|
259
|
+
embeddedExternalComponentMap: EmbeddedExternalComponentMap<TConfig>;
|
|
260
|
+
visualComponentRenderer: VisualComponentRenderer;
|
|
261
|
+
internalLinkRenderer: InternalLinkRenderer;
|
|
262
|
+
/** Optional: block RTF embeds for Internal link (vs inline `internalLinkRenderer`). */
|
|
263
|
+
embeddedBlockInternalLinkRenderer?: EmbeddedBlockInternalLinkRenderer;
|
|
264
|
+
/** Required for Contentful live preview. Pass from app cms-server so components avoid importing cms-server. */
|
|
265
|
+
previewHelpers: PreviewHelpers;
|
|
266
|
+
/** Helpers for collections that fetch data (getRelatedArticles, getAllArticleLinks, etc.). Pass from cms-server. */
|
|
267
|
+
fetchHelpers: FetchHelpers;
|
|
268
|
+
defaultComponentRenderer: ComponentRenderer<any>;
|
|
269
|
+
defaultCollectionRenderer: CollectionRenderer<any>;
|
|
270
|
+
customContentMap?: Partial<...>;
|
|
271
|
+
processText?: (text: string, contentContext?: IContentContext) => React.ReactNode;
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Entry `meta` JSON:** Page, article, template, and related types have an optional Long text `meta` field (pretty JSON). Converters merge `template → type → entry → variant` onto `model.meta`. `buildStructuredDataContext` exposes it as `{{meta.key}}` in schema templates. Visible copy interpolates **only** `{{meta.path}}` (not full Mustache), then any site `processText` (`{{phone}}`). Use `parseMeta` / `mergeMeta` / `resolvedMeta` from `@se-studio/core-data-types` when adding `meta` to a site-only type (e.g. HSD location).
|
|
276
|
+
|
|
277
|
+
Error panels (unknown types, render errors) are shown when `!buildInformation.isProduction`.
|
|
278
|
+
|
|
279
|
+
**Block vs inline internal links:** Rich text `BLOCKS.EMBEDDED_ENTRY` for Internal link routes through `CmsEmbeddedContent`. Set `embeddedBlockInternalLinkRenderer` when block embeds should look different from inline links (e.g. CTA). If omitted, the block still renders using `internalLinkRenderer` inside the embed position wrapper.
|
|
280
|
+
|
|
281
|
+
**Preview and fetch helpers:** Components and collections in the registration chain must **not** import from the app's `cms-server` (that causes a circular dependency). Instead they use `getPreviewFieldProps(rendererConfig, id, fieldId)` and `getPreviewResponsiveVisualFieldProps(rendererConfig, id, 'visual', 'mobileVisual')` from `@se-studio/core-ui`, and `rendererConfig.fetchHelpers` for data. The app passes `previewHelpers` (and optionally `fetchHelpers`) on the config. See `docs/SERVER_CLIENT_BOUNDARIES.md`.
|
|
282
|
+
|
|
283
|
+
**Visibility enforcement:** `createAppHelpers` enforces two visibility rules via `buildInformation`:
|
|
284
|
+
|
|
285
|
+
- **`hidden` entities:** Entity fetchers (`getPageWithErrors`, `getArticleWithErrors`, etc.) return `null` data when the entity has `hidden === true` in production. Callers treat `null` as `notFound()`. In non-production environments, hidden entities are returned normally so content authors can preview them.
|
|
286
|
+
- **`indexed` filtering:** Link fetchers (`getAllPageLinks`, `getAllArticleLinks`, etc.) exclude entries with `indexed === false` by default. Pass `{ allowUnindexed: true }` (via `LinkFetchOptions`) to include them. This applies in all environments. `filterRelatedArticles`, `getRelatedPeople`, and `getRelatedTags` apply the same rule on auto-filled slots.
|
|
287
|
+
- **Link-shaped UI and revalidation:** Collection `contents` link refs (person, article, tag) provide **selection and order only**. `getRelatedArticles`, `getRelatedPeople`, and `getRelatedTags` always resolve display fields from `getAll*Links` listing fetches (`article`, `person`, `tag` cache tags). Entity detail routes use entity fetches (`article#slug`, etc.). Do not render portraits, titles, or hrefs from embedded page-include link objects in collection renderers.
|
|
288
|
+
- **Full-list article filtering (`getAllArticleLinks`):** Pass article filter criteria directly: `articleTypeSlugs`/`articleTypeIds`, `tagSlugs`/`tagIds`, `tagType*`, `authorSlugs`/`authorIds` + `strictAuthorMatch: true` (hard filter for person pages), `before`/`after`, `excludeArticleIds`, `count`. The wrapper in `createAppHelpers` runs the base list through `filterRelatedArticles` (after indexed filtering). Use for News Grids / Publications Lists / ArticleFilter collections that need the *complete* matching set (client-side search UI, "latest N" on indexes, person-scoped lists). See also `getRelatedArticles` for limited related sets driven by collection `links`.
|
|
289
|
+
- **Related Articles tag criteria (`getRelatedArticles`):** Tag filters are taken from tag links in the collection `links` or `contents`. When none are set, `applyFallbackCriteria` uses `pageContext.tag.id` (tag index pages), then `pageContext.article.tags` (article detail pages). Explicit CMS tag links always win. When `tagIds` reach `filterRelatedArticles`, articles must match at least one tag (OR semantics).
|
|
290
|
+
- **`buildPageMetadata`** calls `notFound()` when `model.hidden === true` in production, providing a second safety net at the metadata layer.
|
|
291
|
+
|
|
292
|
+
### Context Types
|
|
293
|
+
|
|
294
|
+
- `IPageContext`: Page-level context (`page`, `article`, `articleType`, `tag`, `person`, `customType`, plus optional app keys and `[key: string]: unknown` for `prepare*` hook data). See `@se-studio/core-ui/server` `createRouteHandlers` optional `prepare*` callbacks: they shallow-merge `pageContext` **before** canonical route keys, so loaded models cannot be overridden by the hook.
|
|
295
|
+
- `IContentContext`: Content-level context (current, previous, next content). **`contentContext.pageContext`** is the same object passed to `CmsContent`, so enrichment from `prepare*` hooks is available in renderers and in `processText(text, contentContext)`.
|
|
296
|
+
- `IEmbeddableComponentContext<TConfig>`: Context for embedded components
|
|
297
|
+
- `IEmbeddableCollectionContext<TConfig>`: Context for embedded collections
|
|
298
|
+
|
|
299
|
+
## Development Features
|
|
300
|
+
|
|
301
|
+
### Unknown Type Warnings
|
|
302
|
+
|
|
303
|
+
When not in production (`!buildInformation.isProduction`), the infrastructure displays visual warnings for:
|
|
304
|
+
- Unmapped component/collection types
|
|
305
|
+
- Rendering errors
|
|
306
|
+
- Unused CMS properties
|
|
307
|
+
|
|
308
|
+
### Generic Fallbacks
|
|
309
|
+
|
|
310
|
+
When a component/collection type isn't mapped:
|
|
311
|
+
1. A warning is logged to console
|
|
312
|
+
2. When not in production, an error panel is displayed
|
|
313
|
+
3. A generic fallback renderer is used
|
|
314
|
+
4. The page continues to render (no crashes)
|
|
315
|
+
|
|
316
|
+
### Type Safety
|
|
317
|
+
|
|
318
|
+
- Full TypeScript support with generic types
|
|
319
|
+
- Development warnings catch unused properties
|
|
320
|
+
|
|
321
|
+
## Benefits Over Ad-Hoc Rendering
|
|
322
|
+
|
|
323
|
+
1. **Centralized Mapping**: All component mappings in one place
|
|
324
|
+
2. **Reusability**: Components work in multiple contexts (full-page, embedded)
|
|
325
|
+
3. **Maintainability**: Changes to component structure are caught at compile-time
|
|
326
|
+
4. **Development UX**: Clear warnings for mistakes
|
|
327
|
+
5. **Fallback Handling**: Pages never break from unmapped types
|
|
328
|
+
|
|
329
|
+
## Migration from Marketing-Site
|
|
330
|
+
|
|
331
|
+
To migrate an existing project:
|
|
332
|
+
|
|
333
|
+
1. Install core-ui: `pnpm add @se-studio/core-ui`
|
|
334
|
+
2. Create ComponentMap and CollectionMap
|
|
335
|
+
3. Replace direct component rendering with CmsContent
|
|
336
|
+
4. Use a non-production build (e.g. `buildInformation.isProduction: false`) to see error panels for missing mappings
|
|
337
|
+
|
|
338
|
+
## Examples
|
|
339
|
+
|
|
340
|
+
See the example apps in this monorepo for complete working implementations:
|
|
341
|
+
- `apps/example-empty` – Template app in this monorepo (articles, people, tags cms-routes pattern)
|
|
342
|
+
- Customer sites – See `docs/RELATED_PROJECTS.md` (e.g. SE Studio, Brightline, OM1 with alternative slug structures)
|
|
343
|
+
|
|
344
|
+
## API Reference
|
|
345
|
+
|
|
346
|
+
### CmsContent Props
|
|
347
|
+
|
|
348
|
+
`CmsContent` accepts three props (all provided via a single `rendererConfig` plus page data):
|
|
349
|
+
|
|
350
|
+
- `pageContext`: Page-level context information (e.g. `{ page }`, `{ article }`, `{ tag, customType }`, or indexes that only set `customType`). When using `createRouteHandlers`, optional `prepare*` hooks may add keys; canonical route fields always override duplicate keys from the hook.
|
|
351
|
+
- `contents`: Array of content items to render (from `page.contents`, `article.contents`, etc.).
|
|
352
|
+
- `rendererConfig`: A `CmsRendererConfig` object that bundles:
|
|
353
|
+
- `buildInformation` – Build config (isProduction, baseUrl, etc.). Error panels are shown when `!buildInformation.isProduction`.
|
|
354
|
+
- `componentMap`, `collectionMap`, `embeddedComponentMap`, `embeddedCollectionMap` – Maps of content types to renderers.
|
|
355
|
+
- `externalComponentMap`, `embeddedExternalComponentMap` – External/embed maps (optional).
|
|
356
|
+
- `visualComponentRenderer`, `internalLinkRenderer` – Renderers for Visual and Internal Link types.
|
|
357
|
+
- `previewHelpers` – **Required.** Preview helpers for Contentful live preview (pass from app cms-server).
|
|
358
|
+
- `fetchHelpers` – Helpers for data fetching in collections (`getRelatedArticles`, `getRelatedPeople`, `getRelatedTags`, `getAllArticleLinks`, `getAllTagLinks`, `getAllPersonLinks`, etc.). Link fetchers accept optional `LinkFetchOptions` (pass `{ allowUnindexed: true }` to include unindexed entries; pass articleType*/tag*/author* criteria for pre-filtered full lists via `getAllArticleLinks`). Import advanced filter symbols from `@se-studio/core-ui/server` when needed in server collections.
|
|
359
|
+
- `defaultComponentRenderer`, `defaultCollectionRenderer` – Fallback renderers for unmapped types.
|
|
360
|
+
|
|
361
|
+
## Future Enhancements
|
|
362
|
+
|
|
363
|
+
Potential improvements for future iterations:
|
|
364
|
+
|
|
365
|
+
- [ ] Async component loading for code splitting
|
|
366
|
+
- [ ] Component preview mode for CMS editors
|
|
367
|
+
- [ ] Performance monitoring hooks
|
|
368
|
+
- [ ] Server-side rendering optimizations
|
|
369
|
+
- [ ] Component analytics integration
|
|
370
|
+
- [ ] Rich text node renderer registration system
|
package/CONSENT.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Consent Management Guide
|
|
2
|
+
|
|
3
|
+
Core UI integrates with [Orejime](https://github.com/empreinte-digitale/orejime), an open-source consent management manager, to provide GDPR and CCPA compliance.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The consent system ensures that:
|
|
8
|
+
1. Users are presented with a consent banner
|
|
9
|
+
2. Cookies/Trackers are blocked until consent is given
|
|
10
|
+
3. Analytics adapters only fire when allowed
|
|
11
|
+
|
|
12
|
+
## Setup
|
|
13
|
+
|
|
14
|
+
### 1. Configure Consent Provider
|
|
15
|
+
|
|
16
|
+
Wrap your application with `ConsentProvider` and provide configuration.
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import { ConsentProvider } from '@se-studio/core-ui';
|
|
20
|
+
|
|
21
|
+
const config = {
|
|
22
|
+
apps: [
|
|
23
|
+
{
|
|
24
|
+
name: 'google-tag-manager',
|
|
25
|
+
title: 'Analytics',
|
|
26
|
+
purposes: ['analytics'],
|
|
27
|
+
cookies: ['_ga', '_gid'],
|
|
28
|
+
required: false,
|
|
29
|
+
default: true,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'marketing-cookies',
|
|
33
|
+
title: 'Marketing',
|
|
34
|
+
purposes: ['marketing'],
|
|
35
|
+
required: false,
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
privacyPolicy: '/privacy-policy',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Styling theme (optional)
|
|
42
|
+
const theme = {
|
|
43
|
+
primaryColor: '#0070f3',
|
|
44
|
+
borderRadius: '8px',
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export function AppProviders({ children }) {
|
|
48
|
+
return (
|
|
49
|
+
<ConsentProvider config={config} theme={theme}>
|
|
50
|
+
{children}
|
|
51
|
+
</ConsentProvider>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 2. Connect to Analytics
|
|
57
|
+
|
|
58
|
+
Use `ConsentAwareAdapter` to gate analytics based on consent.
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
import { ConsentAwareAdapter, GoogleTagManagerAdapter, useConsent } from '@se-studio/core-ui';
|
|
62
|
+
|
|
63
|
+
function AnalyticsSetup() {
|
|
64
|
+
const { hasConsent } = useConsent();
|
|
65
|
+
|
|
66
|
+
const adapter = useMemo(() => {
|
|
67
|
+
const base = new GoogleTagManagerAdapter({ containerId: '...' });
|
|
68
|
+
// 'google-tag-manager' matches the app name in config
|
|
69
|
+
return new ConsentAwareAdapter(base, 'google-tag-manager', hasConsent);
|
|
70
|
+
}, [hasConsent]);
|
|
71
|
+
|
|
72
|
+
return <AnalyticsProvider adapter={adapter}>...</AnalyticsProvider>;
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Styling
|
|
77
|
+
|
|
78
|
+
Orejime styles can be customized via CSS variables or the `theme` prop.
|
|
79
|
+
|
|
80
|
+
### Using Theme Prop
|
|
81
|
+
|
|
82
|
+
```tsx
|
|
83
|
+
<ConsentProvider
|
|
84
|
+
theme={{
|
|
85
|
+
fontFamily: 'Inter, sans-serif',
|
|
86
|
+
primaryColor: '#ff0000',
|
|
87
|
+
backgroundColor: '#ffffff'
|
|
88
|
+
}}
|
|
89
|
+
>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Using CSS Variables
|
|
93
|
+
|
|
94
|
+
In your global CSS:
|
|
95
|
+
|
|
96
|
+
```css
|
|
97
|
+
:root {
|
|
98
|
+
--orejime-color-primary: #ff0000;
|
|
99
|
+
--orejime-border-radius: 4px;
|
|
100
|
+
--orejime-z-index: 50;
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Hook API
|
|
105
|
+
|
|
106
|
+
The `useConsent` hook provides access to consent state.
|
|
107
|
+
|
|
108
|
+
```tsx
|
|
109
|
+
import { useConsent } from '@se-studio/core-ui';
|
|
110
|
+
|
|
111
|
+
function MyComponent() {
|
|
112
|
+
const { hasConsent, showConsentModal, resetConsent } = useConsent();
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<div>
|
|
116
|
+
{hasConsent('analytics') && <AnalyticsDashboard />}
|
|
117
|
+
<button onClick={showConsentModal}>Cookie Settings</button>
|
|
118
|
+
</div>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
```
|