@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.
Files changed (625) hide show
  1. package/ANALYTICS.md +160 -0
  2. package/CHANGELOG.md +2565 -0
  3. package/CMS_INFRASTRUCTURE.md +370 -0
  4. package/CONSENT.md +121 -0
  5. package/README.md +638 -0
  6. package/dist/CmsRendererConfig.d.ts +259 -0
  7. package/dist/CmsRendererConfig.d.ts.map +1 -0
  8. package/dist/CmsRendererConfig.js +2 -0
  9. package/dist/CmsRendererConfig.js.map +1 -0
  10. package/dist/__mocks__/server-only.d.ts +2 -0
  11. package/dist/__mocks__/server-only.d.ts.map +1 -0
  12. package/dist/__mocks__/server-only.js +2 -0
  13. package/dist/__mocks__/server-only.js.map +1 -0
  14. package/dist/analytics/AnalyticsPageTracker.d.ts +11 -0
  15. package/dist/analytics/AnalyticsPageTracker.d.ts.map +1 -0
  16. package/dist/analytics/AnalyticsPageTracker.js +26 -0
  17. package/dist/analytics/AnalyticsPageTracker.js.map +1 -0
  18. package/dist/analytics/AnalyticsProvider.d.ts +18 -0
  19. package/dist/analytics/AnalyticsProvider.d.ts.map +1 -0
  20. package/dist/analytics/AnalyticsProvider.js +48 -0
  21. package/dist/analytics/AnalyticsProvider.js.map +1 -0
  22. package/dist/analytics/adapters/CompositeAnalyticsAdapter.d.ts +13 -0
  23. package/dist/analytics/adapters/CompositeAnalyticsAdapter.d.ts.map +1 -0
  24. package/dist/analytics/adapters/CompositeAnalyticsAdapter.js +35 -0
  25. package/dist/analytics/adapters/CompositeAnalyticsAdapter.js.map +1 -0
  26. package/dist/analytics/adapters/ConsentAwareAdapter.d.ts +20 -0
  27. package/dist/analytics/adapters/ConsentAwareAdapter.d.ts.map +1 -0
  28. package/dist/analytics/adapters/ConsentAwareAdapter.js +35 -0
  29. package/dist/analytics/adapters/ConsentAwareAdapter.js.map +1 -0
  30. package/dist/analytics/adapters/ConsoleAnalyticsAdapter.d.ts +12 -0
  31. package/dist/analytics/adapters/ConsoleAnalyticsAdapter.d.ts.map +1 -0
  32. package/dist/analytics/adapters/ConsoleAnalyticsAdapter.js +22 -0
  33. package/dist/analytics/adapters/ConsoleAnalyticsAdapter.js.map +1 -0
  34. package/dist/analytics/adapters/GoogleTagManagerAdapter.d.ts +53 -0
  35. package/dist/analytics/adapters/GoogleTagManagerAdapter.d.ts.map +1 -0
  36. package/dist/analytics/adapters/GoogleTagManagerAdapter.js +134 -0
  37. package/dist/analytics/adapters/GoogleTagManagerAdapter.js.map +1 -0
  38. package/dist/analytics/adapters/index.d.ts +5 -0
  39. package/dist/analytics/adapters/index.d.ts.map +1 -0
  40. package/dist/analytics/adapters/index.js +5 -0
  41. package/dist/analytics/adapters/index.js.map +1 -0
  42. package/dist/analytics/types.d.ts +42 -0
  43. package/dist/analytics/types.d.ts.map +1 -0
  44. package/dist/analytics/types.js +2 -0
  45. package/dist/analytics/types.js.map +1 -0
  46. package/dist/analytics/useAnalytics.d.ts +44 -0
  47. package/dist/analytics/useAnalytics.d.ts.map +1 -0
  48. package/dist/analytics/useAnalytics.js +69 -0
  49. package/dist/analytics/useAnalytics.js.map +1 -0
  50. package/dist/analytics/video/classifySeek.d.ts +15 -0
  51. package/dist/analytics/video/classifySeek.d.ts.map +1 -0
  52. package/dist/analytics/video/classifySeek.js +32 -0
  53. package/dist/analytics/video/classifySeek.js.map +1 -0
  54. package/dist/analytics/video/createVideoEngagementSession.d.ts +51 -0
  55. package/dist/analytics/video/createVideoEngagementSession.d.ts.map +1 -0
  56. package/dist/analytics/video/createVideoEngagementSession.js +225 -0
  57. package/dist/analytics/video/createVideoEngagementSession.js.map +1 -0
  58. package/dist/analytics/video/index.d.ts +6 -0
  59. package/dist/analytics/video/index.d.ts.map +1 -0
  60. package/dist/analytics/video/index.js +6 -0
  61. package/dist/analytics/video/index.js.map +1 -0
  62. package/dist/analytics/video/loadYouTubeIframeApi.d.ts +50 -0
  63. package/dist/analytics/video/loadYouTubeIframeApi.d.ts.map +1 -0
  64. package/dist/analytics/video/loadYouTubeIframeApi.js +52 -0
  65. package/dist/analytics/video/loadYouTubeIframeApi.js.map +1 -0
  66. package/dist/analytics/video/useHtml5VideoEngagement.d.ts +8 -0
  67. package/dist/analytics/video/useHtml5VideoEngagement.d.ts.map +1 -0
  68. package/dist/analytics/video/useHtml5VideoEngagement.js +67 -0
  69. package/dist/analytics/video/useHtml5VideoEngagement.js.map +1 -0
  70. package/dist/analytics/video/useVideoEngagement.d.ts +19 -0
  71. package/dist/analytics/video/useVideoEngagement.d.ts.map +1 -0
  72. package/dist/analytics/video/useVideoEngagement.js +80 -0
  73. package/dist/analytics/video/useVideoEngagement.js.map +1 -0
  74. package/dist/analytics/video/videoEngagementTypes.d.ts +52 -0
  75. package/dist/analytics/video/videoEngagementTypes.d.ts.map +1 -0
  76. package/dist/analytics/video/videoEngagementTypes.js +45 -0
  77. package/dist/analytics/video/videoEngagementTypes.js.map +1 -0
  78. package/dist/app-helpers.d.ts +196 -0
  79. package/dist/app-helpers.d.ts.map +1 -0
  80. package/dist/app-helpers.js +322 -0
  81. package/dist/app-helpers.js.map +1 -0
  82. package/dist/cmsRegistration.d.ts +302 -0
  83. package/dist/cmsRegistration.d.ts.map +1 -0
  84. package/dist/cmsRegistration.js +242 -0
  85. package/dist/cmsRegistration.js.map +1 -0
  86. package/dist/components/Animation.d.ts +3 -0
  87. package/dist/components/Animation.d.ts.map +1 -0
  88. package/dist/components/Animation.js +2 -0
  89. package/dist/components/Animation.js.map +1 -0
  90. package/dist/components/AnimationComponent.d.ts +9 -0
  91. package/dist/components/AnimationComponent.d.ts.map +1 -0
  92. package/dist/components/AnimationComponent.js +18 -0
  93. package/dist/components/AnimationComponent.js.map +1 -0
  94. package/dist/components/ClientMonitor.d.ts +7 -0
  95. package/dist/components/ClientMonitor.d.ts.map +1 -0
  96. package/dist/components/ClientMonitor.js +368 -0
  97. package/dist/components/ClientMonitor.js.map +1 -0
  98. package/dist/components/CmsCollection.d.ts +68 -0
  99. package/dist/components/CmsCollection.d.ts.map +1 -0
  100. package/dist/components/CmsCollection.js +68 -0
  101. package/dist/components/CmsCollection.js.map +1 -0
  102. package/dist/components/CmsComponent.d.ts +68 -0
  103. package/dist/components/CmsComponent.d.ts.map +1 -0
  104. package/dist/components/CmsComponent.js +68 -0
  105. package/dist/components/CmsComponent.js.map +1 -0
  106. package/dist/components/CmsContent.d.ts +105 -0
  107. package/dist/components/CmsContent.d.ts.map +1 -0
  108. package/dist/components/CmsContent.js +200 -0
  109. package/dist/components/CmsContent.js.map +1 -0
  110. package/dist/components/CmsConversionErrors.d.ts +8 -0
  111. package/dist/components/CmsConversionErrors.d.ts.map +1 -0
  112. package/dist/components/CmsConversionErrors.js +51 -0
  113. package/dist/components/CmsConversionErrors.js.map +1 -0
  114. package/dist/components/CmsDataError.d.ts +14 -0
  115. package/dist/components/CmsDataError.d.ts.map +1 -0
  116. package/dist/components/CmsDataError.js +7 -0
  117. package/dist/components/CmsDataError.js.map +1 -0
  118. package/dist/components/CmsDevLayout.d.ts +23 -0
  119. package/dist/components/CmsDevLayout.d.ts.map +1 -0
  120. package/dist/components/CmsDevLayout.js +26 -0
  121. package/dist/components/CmsDevLayout.js.map +1 -0
  122. package/dist/components/CmsEmbeddedContent.d.ts +10 -0
  123. package/dist/components/CmsEmbeddedContent.d.ts.map +1 -0
  124. package/dist/components/CmsEmbeddedContent.js +51 -0
  125. package/dist/components/CmsEmbeddedContent.js.map +1 -0
  126. package/dist/components/CmsExternalComponent.d.ts +63 -0
  127. package/dist/components/CmsExternalComponent.d.ts.map +1 -0
  128. package/dist/components/CmsExternalComponent.js +68 -0
  129. package/dist/components/CmsExternalComponent.js.map +1 -0
  130. package/dist/components/CmsRoutesLayout.d.ts +16 -0
  131. package/dist/components/CmsRoutesLayout.d.ts.map +1 -0
  132. package/dist/components/CmsRoutesLayout.js +17 -0
  133. package/dist/components/CmsRoutesLayout.js.map +1 -0
  134. package/dist/components/DefaultExternalVideoPlayButton.d.ts +3 -0
  135. package/dist/components/DefaultExternalVideoPlayButton.d.ts.map +1 -0
  136. package/dist/components/DefaultExternalVideoPlayButton.js +6 -0
  137. package/dist/components/DefaultExternalVideoPlayButton.js.map +1 -0
  138. package/dist/components/DotLottieAnimationComponent.d.ts +16 -0
  139. package/dist/components/DotLottieAnimationComponent.d.ts.map +1 -0
  140. package/dist/components/DotLottieAnimationComponent.js +88 -0
  141. package/dist/components/DotLottieAnimationComponent.js.map +1 -0
  142. package/dist/components/ErrorBoundary.d.ts +19 -0
  143. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  144. package/dist/components/ErrorBoundary.js +32 -0
  145. package/dist/components/ErrorBoundary.js.map +1 -0
  146. package/dist/components/ExternalVideoComponent.d.ts +9 -0
  147. package/dist/components/ExternalVideoComponent.d.ts.map +1 -0
  148. package/dist/components/ExternalVideoComponent.js +39 -0
  149. package/dist/components/ExternalVideoComponent.js.map +1 -0
  150. package/dist/components/ExternalVimeoEmbed.d.ts +12 -0
  151. package/dist/components/ExternalVimeoEmbed.d.ts.map +1 -0
  152. package/dist/components/ExternalVimeoEmbed.js +211 -0
  153. package/dist/components/ExternalVimeoEmbed.js.map +1 -0
  154. package/dist/components/ExternalYouTubeEmbed.d.ts +9 -0
  155. package/dist/components/ExternalYouTubeEmbed.d.ts.map +1 -0
  156. package/dist/components/ExternalYouTubeEmbed.js +220 -0
  157. package/dist/components/ExternalYouTubeEmbed.js.map +1 -0
  158. package/dist/components/HeroLoopVideo.d.ts +13 -0
  159. package/dist/components/HeroLoopVideo.d.ts.map +1 -0
  160. package/dist/components/HeroLoopVideo.js +146 -0
  161. package/dist/components/HeroLoopVideo.js.map +1 -0
  162. package/dist/components/HtmlComponent.d.ts +21 -0
  163. package/dist/components/HtmlComponent.d.ts.map +1 -0
  164. package/dist/components/HtmlComponent.js +34 -0
  165. package/dist/components/HtmlComponent.js.map +1 -0
  166. package/dist/components/HtmlComponentScript.d.ts +12 -0
  167. package/dist/components/HtmlComponentScript.d.ts.map +1 -0
  168. package/dist/components/HtmlComponentScript.js +12 -0
  169. package/dist/components/HtmlComponentScript.js.map +1 -0
  170. package/dist/components/ImageComponent.d.ts +7 -0
  171. package/dist/components/ImageComponent.d.ts.map +1 -0
  172. package/dist/components/ImageComponent.js +20 -0
  173. package/dist/components/ImageComponent.js.map +1 -0
  174. package/dist/components/ImageKitClientVideo.d.ts +16 -0
  175. package/dist/components/ImageKitClientVideo.d.ts.map +1 -0
  176. package/dist/components/ImageKitClientVideo.js +211 -0
  177. package/dist/components/ImageKitClientVideo.js.map +1 -0
  178. package/dist/components/ImageKitHlsVideoClient.d.ts +21 -0
  179. package/dist/components/ImageKitHlsVideoClient.d.ts.map +1 -0
  180. package/dist/components/ImageKitHlsVideoClient.js +167 -0
  181. package/dist/components/ImageKitHlsVideoClient.js.map +1 -0
  182. package/dist/components/LazyAnimation.d.ts +16 -0
  183. package/dist/components/LazyAnimation.d.ts.map +1 -0
  184. package/dist/components/LazyAnimation.js +90 -0
  185. package/dist/components/LazyAnimation.js.map +1 -0
  186. package/dist/components/LazyVideo.d.ts +19 -0
  187. package/dist/components/LazyVideo.d.ts.map +1 -0
  188. package/dist/components/LazyVideo.js +134 -0
  189. package/dist/components/LazyVideo.js.map +1 -0
  190. package/dist/components/LocalVideo.d.ts +10 -0
  191. package/dist/components/LocalVideo.d.ts.map +1 -0
  192. package/dist/components/LocalVideo.js +66 -0
  193. package/dist/components/LocalVideo.js.map +1 -0
  194. package/dist/components/LocalVideoPlayChrome.d.ts +20 -0
  195. package/dist/components/LocalVideoPlayChrome.d.ts.map +1 -0
  196. package/dist/components/LocalVideoPlayChrome.js +22 -0
  197. package/dist/components/LocalVideoPlayChrome.js.map +1 -0
  198. package/dist/components/LocalVideoPlayOverlay.d.ts +19 -0
  199. package/dist/components/LocalVideoPlayOverlay.d.ts.map +1 -0
  200. package/dist/components/LocalVideoPlayOverlay.js +49 -0
  201. package/dist/components/LocalVideoPlayOverlay.js.map +1 -0
  202. package/dist/components/PictureComponent.d.ts +7 -0
  203. package/dist/components/PictureComponent.d.ts.map +1 -0
  204. package/dist/components/PictureComponent.js +29 -0
  205. package/dist/components/PictureComponent.js.map +1 -0
  206. package/dist/components/Preview.d.ts +2 -0
  207. package/dist/components/Preview.d.ts.map +1 -0
  208. package/dist/components/Preview.js +52 -0
  209. package/dist/components/Preview.js.map +1 -0
  210. package/dist/components/StructuredData.d.ts +20 -0
  211. package/dist/components/StructuredData.d.ts.map +1 -0
  212. package/dist/components/StructuredData.js +116 -0
  213. package/dist/components/StructuredData.js.map +1 -0
  214. package/dist/components/SvgComponent.d.ts +7 -0
  215. package/dist/components/SvgComponent.d.ts.map +1 -0
  216. package/dist/components/SvgComponent.js +10 -0
  217. package/dist/components/SvgComponent.js.map +1 -0
  218. package/dist/components/SvgIconComponent.d.ts +20 -0
  219. package/dist/components/SvgIconComponent.d.ts.map +1 -0
  220. package/dist/components/SvgIconComponent.js +23 -0
  221. package/dist/components/SvgIconComponent.js.map +1 -0
  222. package/dist/components/SvgImageComponent.d.ts +7 -0
  223. package/dist/components/SvgImageComponent.d.ts.map +1 -0
  224. package/dist/components/SvgImageComponent.js +10 -0
  225. package/dist/components/SvgImageComponent.js.map +1 -0
  226. package/dist/components/SvgSpriteSheet.d.ts +24 -0
  227. package/dist/components/SvgSpriteSheet.d.ts.map +1 -0
  228. package/dist/components/SvgSpriteSheet.js +37 -0
  229. package/dist/components/SvgSpriteSheet.js.map +1 -0
  230. package/dist/components/Video.d.ts +11 -0
  231. package/dist/components/Video.d.ts.map +1 -0
  232. package/dist/components/Video.js +2 -0
  233. package/dist/components/Video.js.map +1 -0
  234. package/dist/components/VideoComponent.d.ts +10 -0
  235. package/dist/components/VideoComponent.d.ts.map +1 -0
  236. package/dist/components/VideoComponent.js +22 -0
  237. package/dist/components/VideoComponent.js.map +1 -0
  238. package/dist/components/Visual.d.ts +43 -0
  239. package/dist/components/Visual.d.ts.map +1 -0
  240. package/dist/components/Visual.js +60 -0
  241. package/dist/components/Visual.js.map +1 -0
  242. package/dist/components/VisualComponent.d.ts +83 -0
  243. package/dist/components/VisualComponent.d.ts.map +1 -0
  244. package/dist/components/VisualComponent.js +136 -0
  245. package/dist/components/VisualComponent.js.map +1 -0
  246. package/dist/components/banner/BannerClient.d.ts +13 -0
  247. package/dist/components/banner/BannerClient.d.ts.map +1 -0
  248. package/dist/components/banner/BannerClient.js +38 -0
  249. package/dist/components/banner/BannerClient.js.map +1 -0
  250. package/dist/components/banner/BannerManager.d.ts +26 -0
  251. package/dist/components/banner/BannerManager.d.ts.map +1 -0
  252. package/dist/components/banner/BannerManager.js +35 -0
  253. package/dist/components/banner/BannerManager.js.map +1 -0
  254. package/dist/components/banner/BannerTargeting.d.ts +20 -0
  255. package/dist/components/banner/BannerTargeting.d.ts.map +1 -0
  256. package/dist/components/banner/BannerTargeting.js +204 -0
  257. package/dist/components/banner/BannerTargeting.js.map +1 -0
  258. package/dist/components/banner/bannerVisibility.d.ts +20 -0
  259. package/dist/components/banner/bannerVisibility.d.ts.map +1 -0
  260. package/dist/components/banner/bannerVisibility.js +73 -0
  261. package/dist/components/banner/bannerVisibility.js.map +1 -0
  262. package/dist/components/clientMonitorVideos.d.ts +6 -0
  263. package/dist/components/clientMonitorVideos.d.ts.map +1 -0
  264. package/dist/components/clientMonitorVideos.js +116 -0
  265. package/dist/components/clientMonitorVideos.js.map +1 -0
  266. package/dist/components/dotlottieWasm.d.ts +19 -0
  267. package/dist/components/dotlottieWasm.d.ts.map +1 -0
  268. package/dist/components/dotlottieWasm.js +62 -0
  269. package/dist/components/dotlottieWasm.js.map +1 -0
  270. package/dist/components/heroLoop.d.ts +22 -0
  271. package/dist/components/heroLoop.d.ts.map +1 -0
  272. package/dist/components/heroLoop.js +24 -0
  273. package/dist/components/heroLoop.js.map +1 -0
  274. package/dist/components/svg.d.ts +3 -0
  275. package/dist/components/svg.d.ts.map +1 -0
  276. package/dist/components/svg.js +64 -0
  277. package/dist/components/svg.js.map +1 -0
  278. package/dist/context/ExternalVideoPlayButtonContext.d.ts +7 -0
  279. package/dist/context/ExternalVideoPlayButtonContext.d.ts.map +1 -0
  280. package/dist/context/ExternalVideoPlayButtonContext.js +11 -0
  281. package/dist/context/ExternalVideoPlayButtonContext.js.map +1 -0
  282. package/dist/elements/RtfOrString.d.ts +26 -0
  283. package/dist/elements/RtfOrString.d.ts.map +1 -0
  284. package/dist/elements/RtfOrString.js +13 -0
  285. package/dist/elements/RtfOrString.js.map +1 -0
  286. package/dist/elements/TrackedLink.d.ts +25 -0
  287. package/dist/elements/TrackedLink.d.ts.map +1 -0
  288. package/dist/elements/TrackedLink.js +96 -0
  289. package/dist/elements/TrackedLink.js.map +1 -0
  290. package/dist/elements/UtmLink.d.ts +7 -0
  291. package/dist/elements/UtmLink.d.ts.map +1 -0
  292. package/dist/elements/UtmLink.js +24 -0
  293. package/dist/elements/UtmLink.js.map +1 -0
  294. package/dist/framework/BackgroundMedia.d.ts +12 -0
  295. package/dist/framework/BackgroundMedia.d.ts.map +1 -0
  296. package/dist/framework/BackgroundMedia.js +23 -0
  297. package/dist/framework/BackgroundMedia.js.map +1 -0
  298. package/dist/framework/ComponentErrorIndicator.d.ts +12 -0
  299. package/dist/framework/ComponentErrorIndicator.d.ts.map +1 -0
  300. package/dist/framework/ComponentErrorIndicator.js +29 -0
  301. package/dist/framework/ComponentErrorIndicator.js.map +1 -0
  302. package/dist/framework/ContainedVisual.d.ts +12 -0
  303. package/dist/framework/ContainedVisual.d.ts.map +1 -0
  304. package/dist/framework/ContainedVisual.js +14 -0
  305. package/dist/framework/ContainedVisual.js.map +1 -0
  306. package/dist/framework/ResponsiveVisual.d.ts +14 -0
  307. package/dist/framework/ResponsiveVisual.d.ts.map +1 -0
  308. package/dist/framework/ResponsiveVisual.js +14 -0
  309. package/dist/framework/ResponsiveVisual.js.map +1 -0
  310. package/dist/framework/componentErrors.d.ts +19 -0
  311. package/dist/framework/componentErrors.d.ts.map +1 -0
  312. package/dist/framework/componentErrors.js +31 -0
  313. package/dist/framework/componentErrors.js.map +1 -0
  314. package/dist/hooks/useClickTracking.d.ts +58 -0
  315. package/dist/hooks/useClickTracking.d.ts.map +1 -0
  316. package/dist/hooks/useClickTracking.js +48 -0
  317. package/dist/hooks/useClickTracking.js.map +1 -0
  318. package/dist/hooks/useDocumentVisible.d.ts +2 -0
  319. package/dist/hooks/useDocumentVisible.d.ts.map +1 -0
  320. package/dist/hooks/useDocumentVisible.js +17 -0
  321. package/dist/hooks/useDocumentVisible.js.map +1 -0
  322. package/dist/hooks/visibility.d.ts +14 -0
  323. package/dist/hooks/visibility.d.ts.map +1 -0
  324. package/dist/hooks/visibility.js +122 -0
  325. package/dist/hooks/visibility.js.map +1 -0
  326. package/dist/index.d.ts +134 -0
  327. package/dist/index.d.ts.map +1 -0
  328. package/dist/index.js +120 -0
  329. package/dist/index.js.map +1 -0
  330. package/dist/media-library/MediaLibraryAnimationPlayer.d.ts +9 -0
  331. package/dist/media-library/MediaLibraryAnimationPlayer.d.ts.map +1 -0
  332. package/dist/media-library/MediaLibraryAnimationPlayer.js +99 -0
  333. package/dist/media-library/MediaLibraryAnimationPlayer.js.map +1 -0
  334. package/dist/media-library/MediaLibraryGrid.d.ts +5 -0
  335. package/dist/media-library/MediaLibraryGrid.d.ts.map +1 -0
  336. package/dist/media-library/MediaLibraryGrid.js +88 -0
  337. package/dist/media-library/MediaLibraryGrid.js.map +1 -0
  338. package/dist/media-library/MediaLibraryPage.d.ts +17 -0
  339. package/dist/media-library/MediaLibraryPage.d.ts.map +1 -0
  340. package/dist/media-library/MediaLibraryPage.js +30 -0
  341. package/dist/media-library/MediaLibraryPage.js.map +1 -0
  342. package/dist/media-library/index.d.ts +4 -0
  343. package/dist/media-library/index.d.ts.map +1 -0
  344. package/dist/media-library/index.js +4 -0
  345. package/dist/media-library/index.js.map +1 -0
  346. package/dist/media-library/types.d.ts +8 -0
  347. package/dist/media-library/types.d.ts.map +1 -0
  348. package/dist/media-library/types.js +12 -0
  349. package/dist/media-library/types.js.map +1 -0
  350. package/dist/route-handlers/createCmsTxtHandler.d.ts +19 -0
  351. package/dist/route-handlers/createCmsTxtHandler.d.ts.map +1 -0
  352. package/dist/route-handlers/createCmsTxtHandler.js +154 -0
  353. package/dist/route-handlers/createCmsTxtHandler.js.map +1 -0
  354. package/dist/route-handlers/createDiscoveryHandler.d.ts +67 -0
  355. package/dist/route-handlers/createDiscoveryHandler.d.ts.map +1 -0
  356. package/dist/route-handlers/createDiscoveryHandler.js +190 -0
  357. package/dist/route-handlers/createDiscoveryHandler.js.map +1 -0
  358. package/dist/route-handlers/createGuidelinesHandler.d.ts +16 -0
  359. package/dist/route-handlers/createGuidelinesHandler.d.ts.map +1 -0
  360. package/dist/route-handlers/createGuidelinesHandler.js +100 -0
  361. package/dist/route-handlers/createGuidelinesHandler.js.map +1 -0
  362. package/dist/route-handlers/createMediaLibraryHandler.d.ts +19 -0
  363. package/dist/route-handlers/createMediaLibraryHandler.d.ts.map +1 -0
  364. package/dist/route-handlers/createMediaLibraryHandler.js +76 -0
  365. package/dist/route-handlers/createMediaLibraryHandler.js.map +1 -0
  366. package/dist/route-handlers/index.d.ts +9 -0
  367. package/dist/route-handlers/index.d.ts.map +1 -0
  368. package/dist/route-handlers/index.js +5 -0
  369. package/dist/route-handlers/index.js.map +1 -0
  370. package/dist/rtf/rtf.d.ts +66 -0
  371. package/dist/rtf/rtf.d.ts.map +1 -0
  372. package/dist/rtf/rtf.js +183 -0
  373. package/dist/rtf/rtf.js.map +1 -0
  374. package/dist/server/index.d.ts +20 -0
  375. package/dist/server/index.d.ts.map +1 -0
  376. package/dist/server/index.js +11 -0
  377. package/dist/server/index.js.map +1 -0
  378. package/dist/server/merge-prepared-page-context.d.ts +8 -0
  379. package/dist/server/merge-prepared-page-context.d.ts.map +1 -0
  380. package/dist/server/merge-prepared-page-context.js +11 -0
  381. package/dist/server/merge-prepared-page-context.js.map +1 -0
  382. package/dist/server/page-test-merge.d.ts +7 -0
  383. package/dist/server/page-test-merge.d.ts.map +1 -0
  384. package/dist/server/page-test-merge.js +12 -0
  385. package/dist/server/page-test-merge.js.map +1 -0
  386. package/dist/server/route-handlers-types.d.ts +124 -0
  387. package/dist/server/route-handlers-types.d.ts.map +1 -0
  388. package/dist/server/route-handlers-types.js +2 -0
  389. package/dist/server/route-handlers-types.js.map +1 -0
  390. package/dist/server/route-handlers.d.ts +99 -0
  391. package/dist/server/route-handlers.d.ts.map +1 -0
  392. package/dist/server/route-handlers.js +1268 -0
  393. package/dist/server/route-handlers.js.map +1 -0
  394. package/dist/server/route-types.d.ts +78 -0
  395. package/dist/server/route-types.d.ts.map +1 -0
  396. package/dist/server/route-types.js +4 -0
  397. package/dist/server/route-types.js.map +1 -0
  398. package/dist/server/tag-index-guards.d.ts +33 -0
  399. package/dist/server/tag-index-guards.d.ts.map +1 -0
  400. package/dist/server/tag-index-guards.js +33 -0
  401. package/dist/server/tag-index-guards.js.map +1 -0
  402. package/dist/server/template-route-handlers.d.ts +7 -0
  403. package/dist/server/template-route-handlers.d.ts.map +1 -0
  404. package/dist/server/template-route-handlers.js +35 -0
  405. package/dist/server/template-route-handlers.js.map +1 -0
  406. package/dist/showcase/components/AllViewPanel.d.ts +7 -0
  407. package/dist/showcase/components/AllViewPanel.d.ts.map +1 -0
  408. package/dist/showcase/components/AllViewPanel.js +55 -0
  409. package/dist/showcase/components/AllViewPanel.js.map +1 -0
  410. package/dist/showcase/components/Controls.d.ts +15 -0
  411. package/dist/showcase/components/Controls.d.ts.map +1 -0
  412. package/dist/showcase/components/Controls.js +71 -0
  413. package/dist/showcase/components/Controls.js.map +1 -0
  414. package/dist/showcase/components/ControlsWrapper.d.ts +15 -0
  415. package/dist/showcase/components/ControlsWrapper.d.ts.map +1 -0
  416. package/dist/showcase/components/ControlsWrapper.js +9 -0
  417. package/dist/showcase/components/ControlsWrapper.js.map +1 -0
  418. package/dist/showcase/components/IframeHeightReporter.d.ts +13 -0
  419. package/dist/showcase/components/IframeHeightReporter.d.ts.map +1 -0
  420. package/dist/showcase/components/IframeHeightReporter.js +51 -0
  421. package/dist/showcase/components/IframeHeightReporter.js.map +1 -0
  422. package/dist/showcase/components/PreviewPanel.d.ts +18 -0
  423. package/dist/showcase/components/PreviewPanel.d.ts.map +1 -0
  424. package/dist/showcase/components/PreviewPanel.js +52 -0
  425. package/dist/showcase/components/PreviewPanel.js.map +1 -0
  426. package/dist/showcase/components/ScaledIframe.d.ts +22 -0
  427. package/dist/showcase/components/ScaledIframe.d.ts.map +1 -0
  428. package/dist/showcase/components/ScaledIframe.js +41 -0
  429. package/dist/showcase/components/ScaledIframe.js.map +1 -0
  430. package/dist/showcase/components/ShowcaseAllRenderPage.d.ts +21 -0
  431. package/dist/showcase/components/ShowcaseAllRenderPage.d.ts.map +1 -0
  432. package/dist/showcase/components/ShowcaseAllRenderPage.js +36 -0
  433. package/dist/showcase/components/ShowcaseAllRenderPage.js.map +1 -0
  434. package/dist/showcase/components/ShowcaseAnimationRoot.d.ts +8 -0
  435. package/dist/showcase/components/ShowcaseAnimationRoot.d.ts.map +1 -0
  436. package/dist/showcase/components/ShowcaseAnimationRoot.js +10 -0
  437. package/dist/showcase/components/ShowcaseAnimationRoot.js.map +1 -0
  438. package/dist/showcase/components/ShowcasePage.d.ts +25 -0
  439. package/dist/showcase/components/ShowcasePage.d.ts.map +1 -0
  440. package/dist/showcase/components/ShowcasePage.js +31 -0
  441. package/dist/showcase/components/ShowcasePage.js.map +1 -0
  442. package/dist/showcase/components/ShowcaseRenderPage.d.ts +21 -0
  443. package/dist/showcase/components/ShowcaseRenderPage.d.ts.map +1 -0
  444. package/dist/showcase/components/ShowcaseRenderPage.js +45 -0
  445. package/dist/showcase/components/ShowcaseRenderPage.js.map +1 -0
  446. package/dist/showcase/components/ShowcaseViewportGuard.d.ts +14 -0
  447. package/dist/showcase/components/ShowcaseViewportGuard.d.ts.map +1 -0
  448. package/dist/showcase/components/ShowcaseViewportGuard.js +77 -0
  449. package/dist/showcase/components/ShowcaseViewportGuard.js.map +1 -0
  450. package/dist/showcase/components/TopBar.d.ts +11 -0
  451. package/dist/showcase/components/TopBar.d.ts.map +1 -0
  452. package/dist/showcase/components/TopBar.js +105 -0
  453. package/dist/showcase/components/TopBar.js.map +1 -0
  454. package/dist/showcase/controlFieldSupport.d.ts +12 -0
  455. package/dist/showcase/controlFieldSupport.d.ts.map +1 -0
  456. package/dist/showcase/controlFieldSupport.js +35 -0
  457. package/dist/showcase/controlFieldSupport.js.map +1 -0
  458. package/dist/showcase/index.d.ts +20 -0
  459. package/dist/showcase/index.d.ts.map +1 -0
  460. package/dist/showcase/index.js +20 -0
  461. package/dist/showcase/index.js.map +1 -0
  462. package/dist/showcase/isCmsShowcase.d.ts +10 -0
  463. package/dist/showcase/isCmsShowcase.d.ts.map +1 -0
  464. package/dist/showcase/isCmsShowcase.js +12 -0
  465. package/dist/showcase/isCmsShowcase.js.map +1 -0
  466. package/dist/showcase/mergeShowcaseMocks.d.ts +34 -0
  467. package/dist/showcase/mergeShowcaseMocks.d.ts.map +1 -0
  468. package/dist/showcase/mergeShowcaseMocks.js +31 -0
  469. package/dist/showcase/mergeShowcaseMocks.js.map +1 -0
  470. package/dist/showcase/mockFactory.d.ts +47 -0
  471. package/dist/showcase/mockFactory.d.ts.map +1 -0
  472. package/dist/showcase/mockFactory.js +726 -0
  473. package/dist/showcase/mockFactory.js.map +1 -0
  474. package/dist/showcase/showcaseLayout.d.ts +17 -0
  475. package/dist/showcase/showcaseLayout.d.ts.map +1 -0
  476. package/dist/showcase/showcaseLayout.js +11 -0
  477. package/dist/showcase/showcaseLayout.js.map +1 -0
  478. package/dist/showcase/showcaseRelatedContent.d.ts +30 -0
  479. package/dist/showcase/showcaseRelatedContent.d.ts.map +1 -0
  480. package/dist/showcase/showcaseRelatedContent.js +106 -0
  481. package/dist/showcase/showcaseRelatedContent.js.map +1 -0
  482. package/dist/showcase/types.d.ts +21 -0
  483. package/dist/showcase/types.d.ts.map +1 -0
  484. package/dist/showcase/types.js +19 -0
  485. package/dist/showcase/types.js.map +1 -0
  486. package/dist/utils/UnsupportedWarning.d.ts +30 -0
  487. package/dist/utils/UnsupportedWarning.d.ts.map +1 -0
  488. package/dist/utils/UnsupportedWarning.js +44 -0
  489. package/dist/utils/UnsupportedWarning.js.map +1 -0
  490. package/dist/utils/UnusedChecker.d.ts +51 -0
  491. package/dist/utils/UnusedChecker.d.ts.map +1 -0
  492. package/dist/utils/UnusedChecker.js +96 -0
  493. package/dist/utils/UnusedChecker.js.map +1 -0
  494. package/dist/utils/agent-ready.d.ts +103 -0
  495. package/dist/utils/agent-ready.d.ts.map +1 -0
  496. package/dist/utils/agent-ready.js +246 -0
  497. package/dist/utils/agent-ready.js.map +1 -0
  498. package/dist/utils/assertValidSiteBaseUrl.d.ts +8 -0
  499. package/dist/utils/assertValidSiteBaseUrl.d.ts.map +1 -0
  500. package/dist/utils/assertValidSiteBaseUrl.js +31 -0
  501. package/dist/utils/assertValidSiteBaseUrl.js.map +1 -0
  502. package/dist/utils/breadcrumbUtils.d.ts +64 -0
  503. package/dist/utils/breadcrumbUtils.d.ts.map +1 -0
  504. package/dist/utils/breadcrumbUtils.js +73 -0
  505. package/dist/utils/breadcrumbUtils.js.map +1 -0
  506. package/dist/utils/buildPageMetadata.d.ts +139 -0
  507. package/dist/utils/buildPageMetadata.d.ts.map +1 -0
  508. package/dist/utils/buildPageMetadata.js +218 -0
  509. package/dist/utils/buildPageMetadata.js.map +1 -0
  510. package/dist/utils/cn.d.ts +29 -0
  511. package/dist/utils/cn.d.ts.map +1 -0
  512. package/dist/utils/cn.js +32 -0
  513. package/dist/utils/cn.js.map +1 -0
  514. package/dist/utils/componentUtils.d.ts +82 -0
  515. package/dist/utils/componentUtils.d.ts.map +1 -0
  516. package/dist/utils/componentUtils.js +327 -0
  517. package/dist/utils/componentUtils.js.map +1 -0
  518. package/dist/utils/convertText.d.ts +2 -0
  519. package/dist/utils/convertText.d.ts.map +1 -0
  520. package/dist/utils/convertText.js +35 -0
  521. package/dist/utils/convertText.js.map +1 -0
  522. package/dist/utils/createDefaultRenderText.d.ts +17 -0
  523. package/dist/utils/createDefaultRenderText.d.ts.map +1 -0
  524. package/dist/utils/createDefaultRenderText.js +25 -0
  525. package/dist/utils/createDefaultRenderText.js.map +1 -0
  526. package/dist/utils/errorHandling.d.ts +37 -0
  527. package/dist/utils/errorHandling.d.ts.map +1 -0
  528. package/dist/utils/errorHandling.js +61 -0
  529. package/dist/utils/errorHandling.js.map +1 -0
  530. package/dist/utils/errorMonitoring.d.ts +17 -0
  531. package/dist/utils/errorMonitoring.d.ts.map +1 -0
  532. package/dist/utils/errorMonitoring.js +26 -0
  533. package/dist/utils/errorMonitoring.js.map +1 -0
  534. package/dist/utils/imageKitVideoHls.d.ts +3 -0
  535. package/dist/utils/imageKitVideoHls.d.ts.map +1 -0
  536. package/dist/utils/imageKitVideoHls.js +5 -0
  537. package/dist/utils/imageKitVideoHls.js.map +1 -0
  538. package/dist/utils/interpolateMetaText.d.ts +9 -0
  539. package/dist/utils/interpolateMetaText.d.ts.map +1 -0
  540. package/dist/utils/interpolateMetaText.js +21 -0
  541. package/dist/utils/interpolateMetaText.js.map +1 -0
  542. package/dist/utils/linkAccessibility.d.ts +13 -0
  543. package/dist/utils/linkAccessibility.d.ts.map +1 -0
  544. package/dist/utils/linkAccessibility.js +14 -0
  545. package/dist/utils/linkAccessibility.js.map +1 -0
  546. package/dist/utils/linkResolution.d.ts +15 -0
  547. package/dist/utils/linkResolution.d.ts.map +1 -0
  548. package/dist/utils/linkResolution.js +19 -0
  549. package/dist/utils/linkResolution.js.map +1 -0
  550. package/dist/utils/listing-page-heading.d.ts +16 -0
  551. package/dist/utils/listing-page-heading.d.ts.map +1 -0
  552. package/dist/utils/listing-page-heading.js +24 -0
  553. package/dist/utils/listing-page-heading.js.map +1 -0
  554. package/dist/utils/listingStructuredData.d.ts +28 -0
  555. package/dist/utils/listingStructuredData.d.ts.map +1 -0
  556. package/dist/utils/listingStructuredData.js +65 -0
  557. package/dist/utils/listingStructuredData.js.map +1 -0
  558. package/dist/utils/marketingSiteSitemap.d.ts +103 -0
  559. package/dist/utils/marketingSiteSitemap.d.ts.map +1 -0
  560. package/dist/utils/marketingSiteSitemap.js +352 -0
  561. package/dist/utils/marketingSiteSitemap.js.map +1 -0
  562. package/dist/utils/previewPageUtils.d.ts +61 -0
  563. package/dist/utils/previewPageUtils.d.ts.map +1 -0
  564. package/dist/utils/previewPageUtils.js +72 -0
  565. package/dist/utils/previewPageUtils.js.map +1 -0
  566. package/dist/utils/previewUtils.d.ts +59 -0
  567. package/dist/utils/previewUtils.d.ts.map +1 -0
  568. package/dist/utils/previewUtils.js +60 -0
  569. package/dist/utils/previewUtils.js.map +1 -0
  570. package/dist/utils/processCollectionLinks.d.ts +11 -0
  571. package/dist/utils/processCollectionLinks.d.ts.map +1 -0
  572. package/dist/utils/processCollectionLinks.js +38 -0
  573. package/dist/utils/processCollectionLinks.js.map +1 -0
  574. package/dist/utils/processTextContent.d.ts +18 -0
  575. package/dist/utils/processTextContent.d.ts.map +1 -0
  576. package/dist/utils/processTextContent.js +24 -0
  577. package/dist/utils/processTextContent.js.map +1 -0
  578. package/dist/utils/reactNodeText.d.ts +7 -0
  579. package/dist/utils/reactNodeText.d.ts.map +1 -0
  580. package/dist/utils/reactNodeText.js +43 -0
  581. package/dist/utils/reactNodeText.js.map +1 -0
  582. package/dist/utils/richTextNodeText.d.ts +13 -0
  583. package/dist/utils/richTextNodeText.d.ts.map +1 -0
  584. package/dist/utils/richTextNodeText.js +29 -0
  585. package/dist/utils/richTextNodeText.js.map +1 -0
  586. package/dist/utils/robots.d.ts +115 -0
  587. package/dist/utils/robots.d.ts.map +1 -0
  588. package/dist/utils/robots.js +174 -0
  589. package/dist/utils/robots.js.map +1 -0
  590. package/dist/utils/scopeCss.d.ts +15 -0
  591. package/dist/utils/scopeCss.d.ts.map +1 -0
  592. package/dist/utils/scopeCss.js +186 -0
  593. package/dist/utils/scopeCss.js.map +1 -0
  594. package/dist/utils/sitemap.d.ts +173 -0
  595. package/dist/utils/sitemap.d.ts.map +1 -0
  596. package/dist/utils/sitemap.js +257 -0
  597. package/dist/utils/sitemap.js.map +1 -0
  598. package/dist/utils/structuredDataUtils.d.ts +158 -0
  599. package/dist/utils/structuredDataUtils.d.ts.map +1 -0
  600. package/dist/utils/structuredDataUtils.js +225 -0
  601. package/dist/utils/structuredDataUtils.js.map +1 -0
  602. package/dist/utils/urlUtils.d.ts +30 -0
  603. package/dist/utils/urlUtils.d.ts.map +1 -0
  604. package/dist/utils/urlUtils.js +100 -0
  605. package/dist/utils/urlUtils.js.map +1 -0
  606. package/dist/utils/visualPositions.d.ts +3 -0
  607. package/dist/utils/visualPositions.d.ts.map +1 -0
  608. package/dist/utils/visualPositions.js +13 -0
  609. package/dist/utils/visualPositions.js.map +1 -0
  610. package/dist/utils/visualSizes.d.ts +5 -0
  611. package/dist/utils/visualSizes.d.ts.map +1 -0
  612. package/dist/utils/visualSizes.js +27 -0
  613. package/dist/utils/visualSizes.js.map +1 -0
  614. package/dist/utils/wcagRelativeLuminanceFromHex.d.ts +8 -0
  615. package/dist/utils/wcagRelativeLuminanceFromHex.d.ts.map +1 -0
  616. package/dist/utils/wcagRelativeLuminanceFromHex.js +30 -0
  617. package/dist/utils/wcagRelativeLuminanceFromHex.js.map +1 -0
  618. package/dist/utils/wrapHtmlComponentJs.d.ts +10 -0
  619. package/dist/utils/wrapHtmlComponentJs.d.ts.map +1 -0
  620. package/dist/utils/wrapHtmlComponentJs.js +12 -0
  621. package/dist/utils/wrapHtmlComponentJs.js.map +1 -0
  622. package/docs/PACKAGE_EXPORT_BOUNDARIES.md +98 -0
  623. package/docs/llms.md +358 -0
  624. package/package.json +108 -0
  625. 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