@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
package/README.md
ADDED
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
# @se-studio/core-ui
|
|
2
|
+
|
|
3
|
+
Shared React UI component library with Tailwind CSS v4 and CMS infrastructure for SE Studio applications.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **React 19** - Built with the latest React
|
|
8
|
+
- **TypeScript** - Full type safety
|
|
9
|
+
- **CMS Infrastructure** - Complete system for mapping Contentful content to React components
|
|
10
|
+
- **Tailwind CSS v4** - Modern utility-first CSS framework with custom breakpoints
|
|
11
|
+
- **Visual Components** - Optimized image, video, and animation components
|
|
12
|
+
- **Rich Text Rendering** - RTF (Rich Text Field) support with embedded content
|
|
13
|
+
- **CMS Showcase** - Shared developer tools for testing and previewing CMS components
|
|
14
|
+
- **Tree-shakeable** - Import only what you need
|
|
15
|
+
- **Dual exports** - ESM and CJS support
|
|
16
|
+
- **Fully tested** - Comprehensive test coverage with Vitest
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
pnpm add @se-studio/core-ui
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
### Basic Component Usage
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { Visual } from '@se-studio/core-ui';
|
|
30
|
+
import type { IAsset } from '@se-studio/core-data-types';
|
|
31
|
+
|
|
32
|
+
const image: IAsset = {
|
|
33
|
+
src: 'https://images.ctfassets.net/...',
|
|
34
|
+
alt: 'Hero image',
|
|
35
|
+
width: 1920,
|
|
36
|
+
height: 1080
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export default function MyPage() {
|
|
40
|
+
return <Visual image={image} className="w-full h-auto" />;
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### CMS Infrastructure Usage
|
|
45
|
+
|
|
46
|
+
For content-driven applications, use the CMS infrastructure:
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
import { CmsContent } from '@se-studio/core-ui';
|
|
50
|
+
import { contentfulPageRest } from '@se-studio/contentful-rest-api';
|
|
51
|
+
|
|
52
|
+
// Fetch page from Contentful
|
|
53
|
+
const page = await contentfulPageRest(config, 'home');
|
|
54
|
+
|
|
55
|
+
// Automatically render the correct components
|
|
56
|
+
export default function Page() {
|
|
57
|
+
return <CmsContent content={page} config={rendererConfig} />;
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
See the [CMS Infrastructure Guide](./CMS_INFRASTRUCTURE.md) for detailed documentation.
|
|
62
|
+
|
|
63
|
+
### Using Tailwind Configuration
|
|
64
|
+
|
|
65
|
+
Import the Tailwind configuration in your `tailwind.config.ts`:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import baseConfig from '@se-studio/core-ui/tailwind-config';
|
|
69
|
+
import type { Config } from 'tailwindcss';
|
|
70
|
+
|
|
71
|
+
const config: Config = {
|
|
72
|
+
...baseConfig,
|
|
73
|
+
content: [
|
|
74
|
+
'./src/**/*.{ts,tsx}',
|
|
75
|
+
'./node_modules/@se-studio/core-ui/dist/**/*.{js,jsx}',
|
|
76
|
+
],
|
|
77
|
+
// Add your customizations here
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export default config;
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Importing Styles
|
|
84
|
+
|
|
85
|
+
In your Next.js app layout or root component:
|
|
86
|
+
|
|
87
|
+
```tsx
|
|
88
|
+
import '@se-studio/core-ui/styles';
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Analytics Integration
|
|
92
|
+
|
|
93
|
+
Core UI ships analytics primitives but intentionally does not select a vendor.
|
|
94
|
+
Wrap your app with `AnalyticsProvider` and pass an adapter that implements the
|
|
95
|
+
`AnalyticsAdapter` interface.
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { AnalyticsProvider, ConsoleAnalyticsAdapter } from '@se-studio/core-ui';
|
|
99
|
+
|
|
100
|
+
const analyticsAdapter = new ConsoleAnalyticsAdapter(); // example adapter
|
|
101
|
+
|
|
102
|
+
export function AppProviders({ children }: { children: React.ReactNode }) {
|
|
103
|
+
return <AnalyticsProvider adapter={analyticsAdapter}>{children}</AnalyticsProvider>;
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Use the `useAnalytics` hook anywhere within the provider to trigger events:
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
import { useAnalytics } from '@se-studio/core-ui';
|
|
111
|
+
|
|
112
|
+
export function NewsletterCta() {
|
|
113
|
+
const { trackClick } = useAnalytics();
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
<button
|
|
117
|
+
type="button"
|
|
118
|
+
onClick={() =>
|
|
119
|
+
trackClick('Button', 'Sign up', {
|
|
120
|
+
page_title: 'Home',
|
|
121
|
+
page_type: 'landing',
|
|
122
|
+
slug: 'home',
|
|
123
|
+
})
|
|
124
|
+
}
|
|
125
|
+
>
|
|
126
|
+
Sign up
|
|
127
|
+
</button>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The provided `ConsoleAnalyticsAdapter` simply logs events for development and
|
|
133
|
+
documentation purposes. Each project should supply an adapter that forwards
|
|
134
|
+
events to its analytics platform of choice.
|
|
135
|
+
|
|
136
|
+
## Components
|
|
137
|
+
|
|
138
|
+
### CMS Infrastructure Components
|
|
139
|
+
|
|
140
|
+
#### CmsContent
|
|
141
|
+
|
|
142
|
+
Main component for rendering CMS content with automatic component mapping.
|
|
143
|
+
|
|
144
|
+
**Props:**
|
|
145
|
+
- `content` - Page or entry content from Contentful
|
|
146
|
+
- `config` - `CmsRendererConfig` - Component and collection mapping configuration
|
|
147
|
+
- `context?` - Optional context data to pass to components
|
|
148
|
+
|
|
149
|
+
**Example:**
|
|
150
|
+
```tsx
|
|
151
|
+
import { CmsContent } from '@se-studio/core-ui';
|
|
152
|
+
|
|
153
|
+
<CmsContent content={page} config={rendererConfig} />
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
`CmsContent` also routes **`HtmlComponent`** entries (raw HTML from Contentful) to the `HtmlComponent` wrapper. Use `CmsRendererConfig.htmlComponentFullWidthClassName` for full-bleed layout; see `CMS_INFRASTRUCTURE.md`.
|
|
157
|
+
|
|
158
|
+
#### CmsComponent
|
|
159
|
+
|
|
160
|
+
Renders individual CMS components with type-based routing.
|
|
161
|
+
|
|
162
|
+
**Props:**
|
|
163
|
+
- `component` - Component data from Contentful
|
|
164
|
+
- `config` - Component mapping configuration
|
|
165
|
+
- `context?` - Optional context
|
|
166
|
+
|
|
167
|
+
#### CmsCollection
|
|
168
|
+
|
|
169
|
+
Renders CMS collections (arrays of components) with type-based routing.
|
|
170
|
+
|
|
171
|
+
**Props:**
|
|
172
|
+
- `collection` - Array of components from Contentful
|
|
173
|
+
- `config` - Collection mapping configuration
|
|
174
|
+
- `context?` - Optional context
|
|
175
|
+
|
|
176
|
+
### Visual Components
|
|
177
|
+
|
|
178
|
+
#### Visual
|
|
179
|
+
|
|
180
|
+
Optimized image/video component with Next.js Image integration.
|
|
181
|
+
|
|
182
|
+
**Props:**
|
|
183
|
+
- `image` - `IAsset` - Image data with src, alt, width, height
|
|
184
|
+
- `video?` - `IAsset` - Optional video data
|
|
185
|
+
- `animation?` - `IAsset` - Optional animation/Lottie data
|
|
186
|
+
- `className?` - Additional CSS classes
|
|
187
|
+
- `priority?` - Enable priority loading for above-the-fold content
|
|
188
|
+
- `fill?` - Use Next.js Image fill mode
|
|
189
|
+
|
|
190
|
+
**Example:**
|
|
191
|
+
```tsx
|
|
192
|
+
import { Visual } from '@se-studio/core-ui';
|
|
193
|
+
|
|
194
|
+
<Visual
|
|
195
|
+
image={imageData}
|
|
196
|
+
className="w-full h-auto"
|
|
197
|
+
priority
|
|
198
|
+
/>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Rich Text Components
|
|
202
|
+
|
|
203
|
+
#### RTF (Rich Text Field)
|
|
204
|
+
|
|
205
|
+
Renders Contentful rich text with support for embedded entries and assets.
|
|
206
|
+
|
|
207
|
+
**Props:**
|
|
208
|
+
- `document` - Contentful rich text document
|
|
209
|
+
- `embeddedComponents?` - Configuration for embedded components
|
|
210
|
+
- `embeddedCollections?` - Configuration for embedded collections
|
|
211
|
+
- `renderMark?` - Custom mark renderers (e.g. `MARKS.CODE` for inline shortcodes)
|
|
212
|
+
|
|
213
|
+
**Example:**
|
|
214
|
+
```tsx
|
|
215
|
+
import { RTF } from '@se-studio/core-ui';
|
|
216
|
+
|
|
217
|
+
<RTF
|
|
218
|
+
document={richTextField}
|
|
219
|
+
embeddedComponents={componentConfig}
|
|
220
|
+
/>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Utility Components
|
|
224
|
+
|
|
225
|
+
#### UnusedChecker
|
|
226
|
+
|
|
227
|
+
Development utility to detect unused CMS content types in your configuration.
|
|
228
|
+
|
|
229
|
+
**Props:**
|
|
230
|
+
- `config` - Your CMS renderer configuration
|
|
231
|
+
- `pages` - Array of pages to check against
|
|
232
|
+
- `allowedUnused?` - Array of content types allowed to be unused
|
|
233
|
+
|
|
234
|
+
**Example:**
|
|
235
|
+
```tsx
|
|
236
|
+
import { UnusedChecker } from '@se-studio/core-ui';
|
|
237
|
+
|
|
238
|
+
<UnusedChecker
|
|
239
|
+
config={rendererConfig}
|
|
240
|
+
pages={allPages}
|
|
241
|
+
/>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
#### CMS Showcase
|
|
245
|
+
|
|
246
|
+
The library provides a set of components and utilities to build a CMS component showcase for your project.
|
|
247
|
+
|
|
248
|
+
- **`ShowcasePage`** - The main interface for selecting components and adjusting mock data.
|
|
249
|
+
- **`ShowcaseRenderPage`** - The renderer component for the preview iframe.
|
|
250
|
+
- **`mockFactory`** - Utilities for generating mock data from CMS registrations.
|
|
251
|
+
|
|
252
|
+
See the [CMS Showcase Infrastructure Guide](./src/showcase/README.md) for more details.
|
|
253
|
+
|
|
254
|
+
### Animation & Monitoring Components
|
|
255
|
+
|
|
256
|
+
#### ClientMonitor
|
|
257
|
+
|
|
258
|
+
Monitors page elements for scroll-based animations and visibility tracking. Automatically tracks elements with `data-component` attributes, videos, and Lottie animations using IntersectionObserver.
|
|
259
|
+
|
|
260
|
+
**Props:**
|
|
261
|
+
- `defaultThreshold?` - Number (0-1) - Default intersection threshold for triggering animations (default: 0.2)
|
|
262
|
+
- `enableDebug?` - Boolean - Enable debug logging in development mode (default: false)
|
|
263
|
+
|
|
264
|
+
**Example:**
|
|
265
|
+
```tsx
|
|
266
|
+
import { ClientMonitor } from '@se-studio/core-ui';
|
|
267
|
+
|
|
268
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
269
|
+
return (
|
|
270
|
+
<html>
|
|
271
|
+
<body>
|
|
272
|
+
<ClientMonitor defaultThreshold={0.2} enableDebug={false} />
|
|
273
|
+
{children}
|
|
274
|
+
</body>
|
|
275
|
+
</html>
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**How it works:**
|
|
281
|
+
- Automatically finds and observes all elements with `data-component` attributes
|
|
282
|
+
- Tracks video elements for play/pause based on visibility
|
|
283
|
+
- Tracks Lottie animation elements for play/pause based on visibility
|
|
284
|
+
- Sets `data-seen="true"` and `data-visible="true"` attributes on elements when they enter the viewport
|
|
285
|
+
- Uses scroll progress calculation for tall elements that exceed viewport height
|
|
286
|
+
|
|
287
|
+
**Excluding components from animation:**
|
|
288
|
+
|
|
289
|
+
To exclude a component from animation tracking, add the `data-exclude-animation` attribute:
|
|
290
|
+
|
|
291
|
+
```tsx
|
|
292
|
+
<div data-component="MyComponent" data-exclude-animation>
|
|
293
|
+
{/* This component will not be tracked by ClientMonitor */}
|
|
294
|
+
{/* It will not receive data-seen or data-visible attributes */}
|
|
295
|
+
</div>
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Custom thresholds:**
|
|
299
|
+
|
|
300
|
+
You can set a custom intersection threshold for individual elements using the `data-intersection-threshold` attribute:
|
|
301
|
+
|
|
302
|
+
```tsx
|
|
303
|
+
<div data-component="MyComponent" data-intersection-threshold="0.5">
|
|
304
|
+
{/* This component will trigger when 50% visible */}
|
|
305
|
+
</div>
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## Development
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
# Install dependencies
|
|
312
|
+
pnpm install
|
|
313
|
+
|
|
314
|
+
# Run tests
|
|
315
|
+
pnpm test
|
|
316
|
+
|
|
317
|
+
# Run tests in watch mode
|
|
318
|
+
pnpm test:watch
|
|
319
|
+
|
|
320
|
+
# Build the library
|
|
321
|
+
pnpm build
|
|
322
|
+
|
|
323
|
+
# Type check
|
|
324
|
+
pnpm type-check
|
|
325
|
+
|
|
326
|
+
# Lint
|
|
327
|
+
pnpm lint
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Tailwind Configuration
|
|
331
|
+
|
|
332
|
+
### Custom Breakpoints
|
|
333
|
+
|
|
334
|
+
The library includes custom breakpoints optimized for modern responsive design:
|
|
335
|
+
|
|
336
|
+
- `tablet`: 768px
|
|
337
|
+
- `laptop`: 1024px
|
|
338
|
+
- `desktop`: 1440px
|
|
339
|
+
|
|
340
|
+
Use them in your Tailwind classes:
|
|
341
|
+
|
|
342
|
+
```tsx
|
|
343
|
+
<div className="hidden tablet:block laptop:grid laptop:grid-cols-2 desktop:grid-cols-3">
|
|
344
|
+
{/* Content */}
|
|
345
|
+
</div>
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Typography Utilities
|
|
349
|
+
|
|
350
|
+
Custom typography styles are available:
|
|
351
|
+
|
|
352
|
+
- `text-h1` - Heading 1 style
|
|
353
|
+
- `text-h2` - Heading 2 style
|
|
354
|
+
- `text-h3` - Heading 3 style
|
|
355
|
+
- `text-h4` - Heading 4 style
|
|
356
|
+
- `text-body` - Body text style
|
|
357
|
+
- `text-body-sm` - Small body text
|
|
358
|
+
|
|
359
|
+
## Configuration System
|
|
360
|
+
|
|
361
|
+
The package exports several configuration utilities:
|
|
362
|
+
|
|
363
|
+
### createCmsRendererConfig
|
|
364
|
+
|
|
365
|
+
Creates a type-safe CMS renderer configuration:
|
|
366
|
+
|
|
367
|
+
```tsx
|
|
368
|
+
import { createCmsRendererConfig } from '@se-studio/core-ui';
|
|
369
|
+
|
|
370
|
+
const config = createCmsRendererConfig({
|
|
371
|
+
components: {
|
|
372
|
+
heroSection: HeroComponent,
|
|
373
|
+
featureSection: FeatureComponent
|
|
374
|
+
},
|
|
375
|
+
collections: {
|
|
376
|
+
cardGrid: CardGridCollection
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### mergeCmsRendererConfig
|
|
382
|
+
|
|
383
|
+
Merges multiple configurations (useful for environment-specific or preview mode configs):
|
|
384
|
+
|
|
385
|
+
```tsx
|
|
386
|
+
import { mergeCmsRendererConfig } from '@se-studio/core-ui';
|
|
387
|
+
|
|
388
|
+
const previewConfig = mergeCmsRendererConfig(
|
|
389
|
+
baseConfig,
|
|
390
|
+
previewOverrides
|
|
391
|
+
);
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
## API Reference
|
|
395
|
+
|
|
396
|
+
### Main Exports
|
|
397
|
+
|
|
398
|
+
#### Components
|
|
399
|
+
- **`CmsContent`** - Main component for rendering CMS content with automatic component mapping
|
|
400
|
+
- **`CmsComponent`** - Renders individual CMS components with type-based routing
|
|
401
|
+
- **`CmsCollection`** - Renders CMS collections (arrays of components)
|
|
402
|
+
- **`Visual`** - Optimized image/video/animation component with Next.js Image integration
|
|
403
|
+
- **`RTF`** - Renders Contentful rich text with support for embedded entries and assets
|
|
404
|
+
- **`UnusedChecker`** - Development utility to detect unused CMS content types
|
|
405
|
+
|
|
406
|
+
#### Hooks
|
|
407
|
+
- **`useAnalytics`** - Hook for accessing analytics functions (trackEvent, trackPage, trackClick)
|
|
408
|
+
- **`useClickTracking`** - Hook for tracking click events with analytics
|
|
409
|
+
- **`useDocumentVisible`** - Hook for tracking document visibility
|
|
410
|
+
|
|
411
|
+
#### Utilities
|
|
412
|
+
- **`createRobotsConfig`** - Builds `MetadataRoute.Robots` for `src/app/robots.ts` with shared production disallow defaults; configurable via `pathPrefix`, `apiPrefixes`, `disallowExtra`, `disallowOmit`, and `blockTrackingQueryParams`
|
|
413
|
+
- **`buildRobotsDisallow`** - Returns the production disallow path list (for plain-text robots route handlers)
|
|
414
|
+
- **`formatRobotsTxt` / `createRobotsTxtResponse`** - Plain-text robots.txt including optional Content Signals (`src/app/robots.txt/route.ts`)
|
|
415
|
+
- **`resolveMarkdownNegotiationPath` / `prefersMarkdownAccept` / `htmlPathToMarkdownPath`** - Middleware helpers for `Accept: text/markdown` → existing `/{path}.md` rewrites
|
|
416
|
+
- **`apiPathNeedingTrailingSlash`** - Middleware helper: rewrite bare `/api/*` → `/api/*/` when `trailingSlash: true` so MCP POST and other APIs are not 308’d
|
|
417
|
+
- **`appendAgentDiscoveryLinkHeaders` / `buildAgentDiscoveryLinkValues`** - Homepage/document `Link` headers (`describedby` → `/llms.txt`, alternate markdown)
|
|
418
|
+
- **`buildPageMetadata`** - Generates Next.js metadata object from CMS page model
|
|
419
|
+
- **`handleCmsError`** - Error handling utility for CMS operations
|
|
420
|
+
- **`getRelatedArticles`** - Fetches related articles for collections (limited sets): `contents` article refs provide IDs/order only; display data is always resolved from `contentfulAllArticleLinks` (or `getAllArticleLinks` via `createAppHelpers`) so the `article` cache tag revalidates on publish. Auto-fill uses `filterRelatedArticles`. Tag criteria come from collection tag links, or fall back to `pageContext.tag`, then the current article's tags on article detail pages. See also full-list filtering via `getAllArticleLinks` (below).
|
|
421
|
+
- **`getRelatedPeople`** - Related people for collections: `contents` person refs are IDs/order only; always resolved from `contentfulAllPersonLinks` / `getAllPersonLinks` (`person` cache tag).
|
|
422
|
+
- **`getRelatedTags`** - Related tags for collections: `contents` tag refs are IDs/order only; always resolved from `contentfulAllTagLinks` / `getAllTagLinks` (`tag` cache tag). Falls back to `pageContext.tag` or the current article's tags when `contents` is empty.
|
|
423
|
+
- **`cn`** - Utility function for merging Tailwind CSS classes
|
|
424
|
+
|
|
425
|
+
#### Server-only exports (import from `@se-studio/core-ui/server`)
|
|
426
|
+
- **`createAppHelpers`** — Factory for `getAll*Links`, `getPageWithErrors`, `getRelatedArticles`, `getSitemapEntries` (when configured), etc. Wire with your converterContext + buildOptions.
|
|
427
|
+
- **`filterRelatedArticles`** + **`RelatedArticlesOptions`** — Re-export of the pure article list filter/ranker (articleType/tag/author/tagType slugs+ids, strict author mode, scoring, dates, etc.). Use in collection renderers or custom full-list logic (e.g. News Grids, person-scoped Publications lists). `getAllArticleLinks(options)` on the helpers already applies these filters when you pass `articleTypeSlugs`, `strictAuthorMatch`, etc.
|
|
428
|
+
- **`getRelatedArticles`** / **`getRelatedPeople`** / **`getRelatedTags`** (also re-exported here for server collections)
|
|
429
|
+
- **`buildListingItems`** / **`buildListingStructuredDataContext`** — ItemList JSON-LD context for article-type, tag, and person listing pages (async CMS fetch via `getAllArticleLinks` + `filterRelatedArticles`)
|
|
430
|
+
|
|
431
|
+
#### Sitemap Utilities
|
|
432
|
+
- **`buildSitemap`** - Builds a Next.js sitemap from multiple async sources; calls each source in parallel, deduplicates by URL, and converts to `MetadataRoute.Sitemap`
|
|
433
|
+
- **`sitemapToXml`** - Converts a `MetadataRoute.Sitemap` array to sitemap XML string for Route Handlers (e.g. `/sitemap-unindexed.xml`)
|
|
434
|
+
- **`generateNextSitemap`** - Converts sitemap entries to Next.js format with baseUrl normalization
|
|
435
|
+
- **`deduplicateSitemapEntries`** - Deduplicates entries by URL (keeps most recent `lastModified`)
|
|
436
|
+
- **`sortSitemapEntries`** - Sorts by priority then lastModified
|
|
437
|
+
|
|
438
|
+
#### Types
|
|
439
|
+
- **`CmsRendererConfig`** - Complete renderer configuration type
|
|
440
|
+
- **`MarketingSiteSitemapConfig`** - Config for `getSitemapEntries` when using createAppHelpers (optional articlesSlug when enableArticleTypeIndex, tagsSlug, enableArticleTypeIndex, other feature flags, optional additionalSources)
|
|
441
|
+
- **`AppHelpersWithSitemap`** - Return type of `createAppHelpers` when `marketingSiteSitemap` is provided; use when you need to type helpers that include `getSitemapEntries`
|
|
442
|
+
- **`SitemapEntry`**, **`SitemapSource`**, **`GenerateSitemapOptions`** - Types for building custom sitemap sources
|
|
443
|
+
- **`LinkFetchOptions`** - Options for all `getAll*Links` helpers (and `rendererConfig.fetchHelpers`). Article-specific keys (`articleTypeSlugs`, `tagSlugs`, `authorSlugs`, `strictAuthorMatch`, `tagType*`, `before`/`after`, `count`, `excludeArticleIds`) only affect `getAllArticleLinks` (delegated to `filterRelatedArticles` after the raw fetch + indexed filter).
|
|
444
|
+
|
|
445
|
+
For detailed JSDoc documentation on all exports, see the TypeScript declaration files (`.d.ts`) in the package.
|
|
446
|
+
|
|
447
|
+
### Sitemap Usage
|
|
448
|
+
|
|
449
|
+
Use `buildSitemap` with source functions for a thin `sitemap.ts`:
|
|
450
|
+
|
|
451
|
+
```ts
|
|
452
|
+
// app/sitemap.ts
|
|
453
|
+
import { buildSitemap } from '@se-studio/core-ui';
|
|
454
|
+
import { baseUrl } from '@/lib/server-config';
|
|
455
|
+
import { getSitemapEntries } from '@/lib/sitemap-sources';
|
|
456
|
+
|
|
457
|
+
export default async function sitemap() {
|
|
458
|
+
return buildSitemap(
|
|
459
|
+
[() => getSitemapEntries({ includeUnindexed: false })],
|
|
460
|
+
{ baseUrl, defaultPriority: 0.5, defaultChangeFrequency: 'monthly', trailingSlash: true },
|
|
461
|
+
);
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
For a custom route (e.g. unindexed pages sitemap), use `sitemapToXml`:
|
|
466
|
+
|
|
467
|
+
```ts
|
|
468
|
+
// app/sitemap-unindexed.xml/route.ts
|
|
469
|
+
import { buildSitemap, sitemapToXml } from '@se-studio/core-ui';
|
|
470
|
+
import { NextResponse } from 'next/server';
|
|
471
|
+
import { baseUrl } from '@/lib/server-config';
|
|
472
|
+
import { getSitemapEntries } from '@/lib/sitemap-sources';
|
|
473
|
+
|
|
474
|
+
export async function GET() {
|
|
475
|
+
const entries = await buildSitemap(
|
|
476
|
+
[() => getSitemapEntries({ includeUnindexed: true })],
|
|
477
|
+
{ baseUrl, defaultPriority: 0.5, defaultChangeFrequency: 'monthly', trailingSlash: true },
|
|
478
|
+
);
|
|
479
|
+
return new NextResponse(sitemapToXml(entries), {
|
|
480
|
+
headers: { 'Content-Type': 'application/xml' },
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### Marketing Site Sitemap (createAppHelpers)
|
|
486
|
+
|
|
487
|
+
When using `createAppHelpers`, pass `marketingSiteSitemap` to enable `getSitemapEntries` for sites with articles, tags, and people. When provided, `getSitemapEntries` is guaranteed and correctly typed (return type is `AppHelpersWithSitemap`), so you can re-export it from a `sitemap-sources` module without type assertions.
|
|
488
|
+
|
|
489
|
+
```ts
|
|
490
|
+
// lib/cms-server.ts
|
|
491
|
+
const { getSitemapEntries, ... } = createAppHelpers({
|
|
492
|
+
converterContext,
|
|
493
|
+
getConfig: getContentfulConfig,
|
|
494
|
+
buildOptions,
|
|
495
|
+
marketingSiteSitemap: {
|
|
496
|
+
...(enableArticleTypeIndex && { articlesSlug: ARTICLES_SLUG }),
|
|
497
|
+
tagsSlug: TAGS_SLUG,
|
|
498
|
+
enableArticleTypeIndex,
|
|
499
|
+
enableArticleTypeTagIndex,
|
|
500
|
+
enablePeopleIndex,
|
|
501
|
+
enablePerson,
|
|
502
|
+
enableTag,
|
|
503
|
+
enableTagsIndex,
|
|
504
|
+
additionalSources: [
|
|
505
|
+
() => getDrivePageSitemapEntries(), // custom content, e.g. drive pages
|
|
506
|
+
],
|
|
507
|
+
},
|
|
508
|
+
});
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
`additionalSources` are merged into the main sitemap only (not the unindexed sitemap). For custom content from another Contentful table, add async functions that return `SitemapEntry[]`.
|
|
512
|
+
|
|
513
|
+
### `@se-studio/core-ui/server` – Route Handlers Factory
|
|
514
|
+
|
|
515
|
+
The `/server` entry point (server-only) provides `createRouteHandlers`, a factory that centralises all `generate*Page` and `generate*Metadata` functions for CMS-driven Next.js apps.
|
|
516
|
+
|
|
517
|
+
Each app wires it once in `src/lib/route-handlers.ts`:
|
|
518
|
+
|
|
519
|
+
```typescript
|
|
520
|
+
import 'server-only';
|
|
521
|
+
import { createRouteHandlers } from '@se-studio/core-ui/server';
|
|
522
|
+
import BasicLayout from '@/project/BasicLayout';
|
|
523
|
+
import { buildOptions, getBannersWithErrors, getPageWithErrors, ... , projectRendererConfig } from './cms-server';
|
|
524
|
+
import { buildInformation } from './converter-context';
|
|
525
|
+
import { ARTICLES_SLUG, TAGS_SLUG, PEOPLE_SLUG, articlesCustomTypeSlug,
|
|
526
|
+
requireCustomTypeForArticleTypes, enableTag, enablePerson, enableTagsIndex } from './constants';
|
|
527
|
+
|
|
528
|
+
export const {
|
|
529
|
+
generatePage, generatePageMetadata,
|
|
530
|
+
generateArticlePage, generateArticleMetadata,
|
|
531
|
+
generateArticleTypePage, generateArticleTypeMetadata,
|
|
532
|
+
generateArticleTypeTagPage, generateArticleTypeTagMetadata,
|
|
533
|
+
generateArticleTypesIndexPage, generateArticleTypesIndexMetadata,
|
|
534
|
+
generateTagPage, generateTagMetadata,
|
|
535
|
+
generateTagsIndexPage, generateTagsIndexMetadata,
|
|
536
|
+
generatePersonPage, generatePersonMetadata,
|
|
537
|
+
generateTeamIndexPage, generateTeamIndexMetadata,
|
|
538
|
+
generateCustomTypePage, generateCustomTypeMetadata,
|
|
539
|
+
buildLocaleAlternates,
|
|
540
|
+
} = createRouteHandlers({
|
|
541
|
+
rendererConfig: projectRendererConfig,
|
|
542
|
+
buildOptions,
|
|
543
|
+
buildInformation,
|
|
544
|
+
getBannersWithErrors,
|
|
545
|
+
getPageWithErrors,
|
|
546
|
+
// ... remaining fetch helpers
|
|
547
|
+
LayoutComponent: BasicLayout,
|
|
548
|
+
constants: { ARTICLES_SLUG, TAGS_SLUG, PEOPLE_SLUG, articlesCustomTypeSlug,
|
|
549
|
+
requireCustomTypeForArticleTypes, enableTag, enablePerson, enableTagsIndex },
|
|
550
|
+
});
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
Route files then import directly from `@/lib/route-handlers`.
|
|
554
|
+
|
|
555
|
+
#### `CmsRouteConfig` (per-route flags)
|
|
556
|
+
|
|
557
|
+
Each route passes a `CmsRouteConfig` into `generate*Page` and `generate*Metadata`. Common fields:
|
|
558
|
+
|
|
559
|
+
| Field | Default | Purpose |
|
|
560
|
+
|-------|---------|---------|
|
|
561
|
+
| `throwOnNotFound` | (required) | When true, missing CMS entries call Next.js `notFound()` |
|
|
562
|
+
| `showBreadcrumbs` | (required) | Show breadcrumb trail in layout |
|
|
563
|
+
| `truncateBreadcrumbs` | (required) | Truncate long breadcrumb paths |
|
|
564
|
+
| `videoEmbedDnt` | `false` | Pass `dnt: true` in analytics context for privacy-enhanced video embeds |
|
|
565
|
+
| `requireArticleContent` | `true` | When `false`, `generateArticlePage` allows articles with no body components (metadata/template-only, e.g. publication posters) |
|
|
566
|
+
|
|
567
|
+
Example for metadata-only article detail routes:
|
|
568
|
+
|
|
569
|
+
```typescript
|
|
570
|
+
export const ARTICLE_DETAIL_ROUTE_CONFIG: CmsRouteConfig = {
|
|
571
|
+
throwOnNotFound: true,
|
|
572
|
+
showBreadcrumbs: true,
|
|
573
|
+
truncateBreadcrumbs: true,
|
|
574
|
+
requireArticleContent: false,
|
|
575
|
+
};
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
#### Optional `prepare*` hooks (async `pageContext` enrichment)
|
|
579
|
+
|
|
580
|
+
`RouteHandlersConfig` may include any of these optional callbacks. Each runs **after** the route’s fetch and **after** the usual “will render” guards, and **before** `CmsContent` is rendered:
|
|
581
|
+
|
|
582
|
+
| Hook | Runs with |
|
|
583
|
+
|------|-----------|
|
|
584
|
+
| `preparePage` | `generatePage` |
|
|
585
|
+
| `prepareArticlePage` | `generateArticlePage` |
|
|
586
|
+
| `prepareArticleTypePage` | `generateArticleTypePage` |
|
|
587
|
+
| `prepareArticleTypeTagPage` | `generateArticleTypeTagPage` |
|
|
588
|
+
| `prepareArticleTypesIndexPage` | `generateArticleTypesIndexPage` |
|
|
589
|
+
| `prepareTagPage` | `generateTagPage` |
|
|
590
|
+
| `prepareTagsIndexPage` | `generateTagsIndexPage` |
|
|
591
|
+
| `preparePersonPage` | `generatePersonPage` |
|
|
592
|
+
| `prepareTeamIndexPage` | `generateTeamIndexPage` |
|
|
593
|
+
| `prepareCustomTypePage` | `generateCustomTypePage` |
|
|
594
|
+
|
|
595
|
+
Each hook returns `Promise<CmsPagePreparationResult>`, where `pageContext` is an optional object of extra keys to merge into `CmsContent`’s `pageContext`. **Merge order:** hook keys are applied first, then the route’s canonical keys (`page`, `article`, `tag`, `articleType`, `person`, `customType` as applicable). Canonical keys **always win**, so the hook cannot replace the loaded CMS models.
|
|
596
|
+
|
|
597
|
+
Hook inputs mirror what that route already has (models, `errors`, `path`, `locale`, `routeConfig`, route-specific slugs). `banners` is only passed when that route’s data loader already fetches banners.
|
|
598
|
+
|
|
599
|
+
Read merged values from components and rich text via `contentContext.pageContext` (and from `rendererConfig.processText(text, contentContext)` when used). Types are exported from `@se-studio/core-ui/server` (`CmsPagePreparationResult`, `PreparePageInput`, `PrepareArticlePageInput`, etc.).
|
|
600
|
+
|
|
601
|
+
Apps that bypass `createRouteHandlers` for a custom page should build the same `pageContext` merge locally if they need the same pattern.
|
|
602
|
+
|
|
603
|
+
#### Tag index and `TAGS_SLUG` custom type
|
|
604
|
+
|
|
605
|
+
`generateTagPage` / `generateTagMetadata` resolve the tag via `getTagWithErrors` (which may merge template content from the `TAGS_SLUG` entry inside the REST layer). They also call `getCustomTypeWithErrors(TAGS_SLUG)` for the shell row used in `pageContext` and metadata.
|
|
606
|
+
|
|
607
|
+
- **Default (relaxed):** If `constants.tagIndexRequiresCustomType` is omitted or `false`, a tag with non-empty `contents` still renders when the shell row is missing or returns null (for example when the entry is **hidden** in production and `getCustomTypeWithErrors` strips it). In that case `pageContext.customType` may be omitted or undefined; `IPageContext.customType` is already optional.
|
|
608
|
+
- **Strict (legacy):** Set `tagIndexRequiresCustomType: true` to require both the tag and a resolved shell custom type, matching the old behaviour (404 if the shell is absent).
|
|
609
|
+
|
|
610
|
+
The same flag applies to **`generateArticleTypeTagPage`** / **`generateArticleTypeTagMetadata`** for the tag shell fetched with `TAGS_SLUG`.
|
|
611
|
+
|
|
612
|
+
The `/server` entry also exports `canRenderTagIndex` and `canRenderArticleTypeTagRoute` (pure helpers used by the factory), `CmsRouteConfig`, `BreadcrumbOptions`, `toBreadcrumbOptions`, `BasicLayoutProps`, and the `prepare*`-related types (`CmsPagePreparationResult`, `PreparePageInput`, `RouteHandlersPrepareHooks`, etc.). The types (but not `createRouteHandlers`) are also re-exported from the main package entry for client-safe use where applicable.
|
|
613
|
+
|
|
614
|
+
## Advanced Usage
|
|
615
|
+
|
|
616
|
+
For advanced CMS infrastructure usage, including:
|
|
617
|
+
- Configuration composition patterns
|
|
618
|
+
- Embeddable components
|
|
619
|
+
- Context passing
|
|
620
|
+
- Preview mode setup
|
|
621
|
+
|
|
622
|
+
See the [CMS Infrastructure Guide](./CMS_INFRASTRUCTURE.md).
|
|
623
|
+
|
|
624
|
+
## Examples
|
|
625
|
+
|
|
626
|
+
Check out [example-empty](../../apps/example-empty) in this monorepo, or customer sites listed in [docs/RELATED_PROJECTS.md](../../docs/RELATED_PROJECTS.md), for complete implementations using core-ui features.
|
|
627
|
+
|
|
628
|
+
## Learn More
|
|
629
|
+
|
|
630
|
+
- [CMS Infrastructure Guide](./CMS_INFRASTRUCTURE.md) - Comprehensive guide to the CMS system
|
|
631
|
+
- [Analytics Integration Guide](./ANALYTICS.md) - Analytics and GTM setup
|
|
632
|
+
- [Consent Management Guide](./CONSENT.md) - GDPR/CCPA compliance setup
|
|
633
|
+
- [Core Data Types](../core-data-types/README.md) - Shared TypeScript types
|
|
634
|
+
- [Contentful REST API](../contentful-rest-api/README.md) - API client for Contentful
|
|
635
|
+
|
|
636
|
+
## License
|
|
637
|
+
|
|
638
|
+
MIT
|