@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
@@ -0,0 +1,136 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { isVisualDownload } from '@se-studio/core-data-types';
3
+ import { cn } from '../utils/cn';
4
+ import { UnsupportedWarning } from '../utils/UnsupportedWarning';
5
+ import { HeroLoopVideo } from './HeroLoopVideo';
6
+ import { shouldRenderHeroLoop } from './heroLoop';
7
+ import ImageComponent from './ImageComponent';
8
+ import { LazyAnimation } from './LazyAnimation';
9
+ import { LazyVideo } from './LazyVideo';
10
+ /**
11
+ * Determines if a mask value is a URL (for CSS mask-image) or Tailwind classes.
12
+ * URLs start with '/' or 'http', everything else is treated as Tailwind classes.
13
+ */
14
+ function isMaskUrl(mask) {
15
+ return mask.startsWith('/') || mask.startsWith('http');
16
+ }
17
+ /**
18
+ * Visual component for rendering images, videos, and animations.
19
+ *
20
+ * Automatically selects the appropriate renderer based on the visual type:
21
+ * - Animations (Lottie) are rendered via AnimationComponent
22
+ * - Videos are rendered via VideoComponent with Next.js optimization
23
+ * - Images are rendered via ImageComponent with Next.js Image optimization
24
+ *
25
+ * SVG images from icon fields are automatically rendered using the sprite system,
26
+ * which enables currentColor support for theming.
27
+ *
28
+ * When a mask is set on the visual, the component wraps the content in a
29
+ * container with the mask applied. Masks can be:
30
+ * - URL-based (starts with '/' or 'http'): Uses CSS mask-image
31
+ * - Class-based (Tailwind classes): Applied directly to the container
32
+ *
33
+ * @param visual - Visual data containing image, video, or animation
34
+ * @param muted - Whether video should be muted (default: false)
35
+ * @param controls - Whether video should show controls (default: false)
36
+ * @param autoPlay - Whether video/animation should autoplay (default: false)
37
+ * @param visualSizes - Responsive size configuration for the visual
38
+ * @param fullPlayer - Whether video should use full player mode (default: false)
39
+ * @param loop - Whether video/animation should loop (default: false)
40
+ * @param loopDelay - Delay between loops in milliseconds
41
+ * @param analyticsContext - Analytics context for tracking
42
+ * @param componentLabel - Label for analytics tracking
43
+ * @param className - Additional CSS classes
44
+ * @param style - Additional inline styles
45
+ *
46
+ * @example Basic image
47
+ * ```tsx
48
+ * <Visual visual={imageVisual} className="w-full h-auto" />
49
+ * ```
50
+ *
51
+ * @example Icon with currentColor support (automatic for icons from icon fields)
52
+ * ```tsx
53
+ * <Visual visual={component.icon} className="w-6 h-6 text-blue-500" />
54
+ * ```
55
+ *
56
+ * @example Video with autoplay
57
+ * ```tsx
58
+ * <Visual
59
+ * visual={videoVisual}
60
+ * autoPlay
61
+ * muted
62
+ * loop
63
+ * className="w-full"
64
+ * />
65
+ * ```
66
+ *
67
+ * @example Animation with loop delay
68
+ * ```tsx
69
+ * <Visual
70
+ * visual={animationVisual}
71
+ * autoPlay
72
+ * loop
73
+ * loopDelay={1000}
74
+ * />
75
+ * ```
76
+ *
77
+ * @example Image with URL-based mask (CSS mask-image)
78
+ * ```tsx
79
+ * <Visual
80
+ * visual={{ ...imageVisual, mask: '/assets/masks/circle.svg' }}
81
+ * className="w-64"
82
+ * />
83
+ * ```
84
+ *
85
+ * @example Image with class-based mask (Tailwind classes)
86
+ * ```tsx
87
+ * <Visual
88
+ * visual={{ ...imageVisual, mask: 'aspect-square rounded-full' }}
89
+ * className="w-64"
90
+ * />
91
+ * ```
92
+ */
93
+ export const Visual = ({ visual, muted, controls, autoPlay, visualSizes, fullPlayer, loop, loopDelay, contained, analyticsContext, componentLabel, className, style, ...props }) => {
94
+ const { animation, image, video, mask, gradient } = visual;
95
+ // Render the appropriate visual type
96
+ let content;
97
+ if (animation) {
98
+ content = (_jsx(LazyAnimation, { ...props, animation: animation, autoPlay: autoPlay, loop: loop, loopDelay: loopDelay, analyticsContext: analyticsContext, componentLabel: componentLabel, className: cn(className, mask && 'size-full object-cover'), style: mask ? undefined : style }));
99
+ }
100
+ else if (video) {
101
+ const videoClassName = cn(className, mask && 'size-full object-cover');
102
+ const videoStyle = mask ? undefined : style;
103
+ if (shouldRenderHeroLoop(video, { autoPlay, loop })) {
104
+ content = (_jsx(HeroLoopVideo, { delivery: video.heroDelivery, autoPlay: video.autoPlay ?? autoPlay, loop: video.loop ?? loop, visualSizes: visualSizes, contained: contained, dontCrop: video.dontCrop, verticalCropPosition: video.verticalCropPosition, horizontalCropPosition: video.horizontalCropPosition, loading: props.loading, fetchPriority: props.fetchPriority, className: videoClassName, style: videoStyle }));
105
+ }
106
+ else {
107
+ content = (_jsx(LazyVideo, { ...props, video: video, autoPlay: autoPlay, muted: muted, controls: controls, visualSizes: visualSizes, fullPlayer: fullPlayer, loop: loop, contained: contained, analyticsContext: analyticsContext, componentLabel: componentLabel, className: videoClassName, style: videoStyle }));
108
+ }
109
+ }
110
+ else if (image) {
111
+ content = (_jsx(ImageComponent, { ...props, image: image, visualSizes: visualSizes, className: cn(className, mask && 'size-full object-cover'), style: mask ? undefined : style }));
112
+ }
113
+ else if (isVisualDownload(visual)) {
114
+ const label = visual.name ?? visual.download.filename;
115
+ return (_jsx("a", { href: visual.download.href, className: cn('underline hover:opacity-80', className), style: style, children: label }));
116
+ }
117
+ else {
118
+ return (_jsx(UnsupportedWarning, { className: className, style: style, children: "Not supporting non images yet" }));
119
+ }
120
+ // If mask is set, wrap in a container with mask applied
121
+ if (mask) {
122
+ if (isMaskUrl(mask)) {
123
+ // URL-based mask: use CSS mask-image with 1:1 aspect ratio
124
+ const maskStyle = { '--mask-url': `url(${mask})`, ...style };
125
+ return (_jsxs("div", { className: cn('relative aspect-square overflow-hidden', 'mask-[image:var(--mask-url)] mask-[size:100%_100%] mask-no-repeat mask-center', className), style: maskStyle, children: [content, gradient && (_jsx("div", { className: "absolute inset-0 pointer-events-none", style: { background: gradient }, "aria-hidden": "true" }))] }));
126
+ }
127
+ // Class-based mask: apply Tailwind classes directly
128
+ return (_jsxs("div", { className: cn('relative overflow-hidden', mask, className), style: style, children: [content, gradient && (_jsx("div", { className: "absolute inset-0 pointer-events-none", style: { background: gradient }, "aria-hidden": "true" }))] }));
129
+ }
130
+ // If gradient is set (no mask), wrap in a relative container with overlay
131
+ if (gradient) {
132
+ return (_jsxs("div", { className: cn('relative', className), style: style, children: [content, _jsx("div", { className: "absolute inset-0 pointer-events-none", style: { background: gradient }, "aria-hidden": "true" })] }));
133
+ }
134
+ return content;
135
+ };
136
+ //# sourceMappingURL=VisualComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisualComponent.js","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { IBanner } from '@se-studio/core-data-types';
2
+ interface BannerClientProps {
3
+ banners: readonly IBanner[];
4
+ BannerComponent: React.ComponentType<{
5
+ banner: IBanner;
6
+ onDismiss: () => void;
7
+ onClick?: () => void;
8
+ }>;
9
+ debug?: boolean;
10
+ }
11
+ declare const BannerClient: React.FC<BannerClientProps>;
12
+ export default BannerClient;
13
+ //# sourceMappingURL=BannerClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerClient.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAU1D,UAAU,iBAAiB;IACzB,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,MAAM,IAAI,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAkD7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useCallback, useLayoutEffect, useState } from 'react';
4
+ import { readDismissedBannerStorage, readDismissedSessionBannerIds, selectVisibleBannerId, sortBannersByPriority, writeBannerDismissal, } from './bannerVisibility';
5
+ const BannerClient = ({ banners, BannerComponent, debug }) => {
6
+ const sortedBanners = sortBannersByPriority(banners);
7
+ const [visibleBannerId, setVisibleBannerId] = useState(() => sortedBanners[0]?.id ?? null);
8
+ useLayoutEffect(() => {
9
+ if (debug) {
10
+ console.log('[BannerClient] Syncing visibility with dismissal storage:', banners);
11
+ }
12
+ setVisibleBannerId(selectVisibleBannerId(banners, {
13
+ dismissedBanners: readDismissedBannerStorage(),
14
+ dismissedSessionBannerIds: readDismissedSessionBannerIds(banners),
15
+ }));
16
+ }, [banners, debug]);
17
+ const handleClick = useCallback((banner) => {
18
+ if (debug)
19
+ console.debug('Banner clicked:', banner.id);
20
+ }, [debug]);
21
+ const handleDismiss = useCallback((banner) => {
22
+ if (debug)
23
+ console.log(`[BannerClient] Dismissing banner ${banner.id}`);
24
+ writeBannerDismissal(banner);
25
+ setVisibleBannerId(null);
26
+ }, [debug]);
27
+ if (!visibleBannerId) {
28
+ if (debug && banners.length > 0)
29
+ console.log('[BannerClient] No visible banner selected.');
30
+ return null;
31
+ }
32
+ const visibleBanner = banners.find((banner) => banner.id === visibleBannerId);
33
+ if (!visibleBanner)
34
+ return null;
35
+ return (_jsx(BannerComponent, { banner: visibleBanner, onDismiss: () => handleDismiss(visibleBanner), onClick: () => handleClick(visibleBanner) }));
36
+ };
37
+ export default BannerClient;
38
+ //# sourceMappingURL=BannerClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerClient.js","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAY5B,MAAM,YAAY,GAAgC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE;IACxF,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CACnC,CAAC;IAEF,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,2DAA2D,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QAED,kBAAkB,CAChB,qBAAqB,CAAC,OAAO,EAAE;YAC7B,gBAAgB,EAAE,0BAA0B,EAAE;YAC9C,yBAAyB,EAAE,6BAA6B,CAAC,OAAO,CAAC;SAClE,CAAC,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,MAAe,EAAE,EAAE;QAClB,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,MAAe,EAAE,EAAE;QAClB,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,eAAe,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,CACL,KAAC,eAAe,IACd,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,EAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,GACzC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { BannerPlacement, IBanner, IBaseModel, ITyped } from '@se-studio/core-data-types';
2
+ interface BannerManagerProps {
3
+ content: IBaseModel & {
4
+ tags?: ReadonlyArray<ITyped>;
5
+ };
6
+ banners: ReadonlyArray<IBanner>;
7
+ BannerComponent: React.ComponentType<{
8
+ banner: IBanner;
9
+ onDismiss: () => void;
10
+ onClick?: () => void;
11
+ }>;
12
+ /**
13
+ * Layout slot this manager instance renders.
14
+ * Defaults to `top` (under nav / before main). Mount separate managers for
15
+ * `afterHero` and `bottomSticky` slots.
16
+ */
17
+ placement?: BannerPlacement;
18
+ }
19
+ /**
20
+ * Filter banners for a layout placement slot (default top).
21
+ * Missing/null placement on a banner is treated as `top`.
22
+ */
23
+ export declare function filterBannersByPlacement(banners: ReadonlyArray<IBanner>, placement?: BannerPlacement): IBanner[];
24
+ export declare function BannerManager({ content, banners, BannerComponent, placement, }: BannerManagerProps): import("react").JSX.Element | null;
25
+ export {};
26
+ //# sourceMappingURL=BannerManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerManager.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAM/F,UAAU,kBAAkB;IAC1B,OAAO,EAAE,UAAU,GAAG;QAAE,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IACvD,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,MAAM,IAAI,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC,CAAC;IACH;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,SAAS,GAAE,eAAuB,GACjC,OAAO,EAAE,CAEX;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,eAAe,EACf,SAAiB,GAClB,EAAE,kBAAkB,sCA4BpB"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { resolveBannerPlacement } from '@se-studio/core-data-types';
3
+ import BannerClient from './BannerClient';
4
+ import { BannerTargetingEngine } from './BannerTargeting';
5
+ import { isBannerWithinSchedule, sortBannersByPriority } from './bannerVisibility';
6
+ /**
7
+ * Filter banners for a layout placement slot (default top).
8
+ * Missing/null placement on a banner is treated as `top`.
9
+ */
10
+ export function filterBannersByPlacement(banners, placement = 'top') {
11
+ return banners.filter((banner) => resolveBannerPlacement(banner) === placement);
12
+ }
13
+ export function BannerManager({ content, banners, BannerComponent, placement = 'top', }) {
14
+ const debug = process.env.BANNER_DEBUG === 'true';
15
+ if (!banners || banners.length === 0) {
16
+ if (debug)
17
+ console.log('[BannerManager] No banners found.');
18
+ return null;
19
+ }
20
+ const slotBanners = filterBannersByPlacement(banners, placement);
21
+ if (slotBanners.length === 0) {
22
+ if (debug)
23
+ console.log(`[BannerManager] No banners for placement=${placement}.`);
24
+ return null;
25
+ }
26
+ const targetedBanners = BannerTargetingEngine.filterBannersForPage(slotBanners, content);
27
+ const activeBanners = sortBannersByPriority(targetedBanners).filter((banner) => isBannerWithinSchedule(banner));
28
+ if (debug) {
29
+ console.log(`[BannerManager] placement=${placement}: ${activeBanners.length} banners passed targeting and schedule.`);
30
+ }
31
+ if (activeBanners.length === 0)
32
+ return null;
33
+ return _jsx(BannerClient, { banners: activeBanners, BannerComponent: BannerComponent, debug: debug });
34
+ }
35
+ //# sourceMappingURL=BannerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerManager.js","sourceRoot":"","sources":["../../../src/components/banner/BannerManager.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAkBnF;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA+B,EAC/B,YAA6B,KAAK;IAElC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,eAAe,EACf,SAAS,GAAG,KAAK,GACE;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;IAElD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,4CAA4C,SAAS,GAAG,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,eAAe,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7E,sBAAsB,CAAC,MAAM,CAAC,CAC/B,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,6BAA6B,SAAS,KAAK,aAAa,CAAC,MAAM,yCAAyC,CACzG,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,OAAO,KAAC,YAAY,IAAC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAClG,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { IBanner, IBaseModel } from '@se-studio/core-data-types';
2
+ export declare const BannerTargetingEngine: {
3
+ /**
4
+ * Evaluates whether a banner should be shown on the current page with comprehensive logging
5
+ * @param banner Banner configuration with targeting rules
6
+ * @param content Current page/content model (IBaseModel or similar ITyped)
7
+ * @param url Current page URL
8
+ * @returns true if banner should be shown
9
+ */
10
+ evaluateBannerRules(banner: IBanner, content: IBaseModel): boolean;
11
+ /**
12
+ * Process all banners for a page with summary logging
13
+ * @param banners Array of banners to evaluate
14
+ * @param content Current content model
15
+ * @param url Current URL
16
+ * @returns Array of banners that should be shown
17
+ */
18
+ filterBannersForPage(banners: readonly IBanner[], content: IBaseModel): IBanner[];
19
+ };
20
+ //# sourceMappingURL=BannerTargeting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerTargeting.d.ts","sourceRoot":"","sources":["../../../src/components/banner/BannerTargeting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAU,MAAM,4BAA4B,CAAC;AAmG9E,eAAO,MAAM,qBAAqB;IAChC;;;;;;OAMG;gCACyB,OAAO,WAAW,UAAU,GAAG,OAAO;IA0GlE;;;;;;OAMG;kCAC2B,SAAS,OAAO,EAAE,WAAW,UAAU,GAAG,OAAO,EAAE;CAuBlF,CAAC"}
@@ -0,0 +1,204 @@
1
+ const BANNER_DEBUG = process.env.BANNER_DEBUG === 'true';
2
+ // Debug logging function for banner targeting
3
+ const debugLog = (message, data) => {
4
+ if (BANNER_DEBUG) {
5
+ console.log(message, data);
6
+ }
7
+ };
8
+ /**
9
+ * Normalize URL for consistent pattern matching
10
+ * @param url URL to normalize
11
+ * @returns Normalized URL
12
+ */
13
+ function normalizeUrl(url) {
14
+ // Ensure leading slash, remove trailing slash (except root), lowercase
15
+ let normalized = url.toLowerCase();
16
+ if (!normalized.startsWith('/')) {
17
+ normalized = `/${normalized}`;
18
+ }
19
+ if (normalized.length > 1 && normalized.endsWith('/')) {
20
+ normalized = normalized.slice(0, -1);
21
+ }
22
+ return normalized;
23
+ }
24
+ /**
25
+ * Check if a URL matches a pattern with wildcard support
26
+ * @param pattern Pattern with * wildcards
27
+ * @param url URL to check
28
+ * @returns true if URL matches pattern
29
+ */
30
+ function matchesPattern(pattern, url) {
31
+ // Escape special regex characters except *
32
+ const escapedPattern = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
33
+ // Replace * with regex equivalent (match any characters)
34
+ const regexPattern = escapedPattern.replace(/\*/g, '(.*)?');
35
+ // Create regex with anchors for exact matching
36
+ const regex = new RegExp(`^${regexPattern}$`);
37
+ return regex.test(url);
38
+ }
39
+ /**
40
+ * Check if any URL pattern matches the current URL
41
+ * @param patterns Array of URL patterns to check
42
+ * @param url Current page URL
43
+ * @returns Matched pattern or null
44
+ */
45
+ function matchesAnyPattern(patterns, url) {
46
+ const normalizedUrl = normalizeUrl(url);
47
+ for (const pattern of patterns) {
48
+ const normalizedPattern = normalizeUrl(pattern);
49
+ if (matchesPattern(normalizedPattern, normalizedUrl)) {
50
+ return pattern;
51
+ }
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Check if any content reference matches the current page context
57
+ * @param references Array of content references to check
58
+ * @param content Current page content
59
+ * @returns Matched reference or null
60
+ */
61
+ function matchesAnyReference(references, content) {
62
+ for (const ref of references) {
63
+ // Direct ID match
64
+ if (ref.id === content.id) {
65
+ return ref;
66
+ }
67
+ }
68
+ return null;
69
+ }
70
+ export const BannerTargetingEngine = {
71
+ /**
72
+ * Evaluates whether a banner should be shown on the current page with comprehensive logging
73
+ * @param banner Banner configuration with targeting rules
74
+ * @param content Current page/content model (IBaseModel or similar ITyped)
75
+ * @param url Current page URL
76
+ * @returns true if banner should be shown
77
+ */
78
+ evaluateBannerRules(banner, content) {
79
+ const url = content.href;
80
+ debugLog('Looking at banner', banner);
81
+ const evaluation = {
82
+ excludePatterns: { matched: false },
83
+ excludeContent: { matched: false },
84
+ includePatterns: { matched: false },
85
+ includeContent: { matched: false },
86
+ };
87
+ let decision = 'DEFAULT';
88
+ let reason = 'default_behavior';
89
+ let matchedPattern;
90
+ let matchedContent;
91
+ let hasInclude = false;
92
+ let hasExclude = false;
93
+ // Step 1: Check exclude patterns first (highest priority)
94
+ if (banner.excludePatterns?.length) {
95
+ hasExclude = true;
96
+ const excludePatternMatch = matchesAnyPattern(banner.excludePatterns, url);
97
+ evaluation.excludePatterns.matched = !!excludePatternMatch;
98
+ if (excludePatternMatch) {
99
+ evaluation.excludePatterns.pattern = excludePatternMatch;
100
+ decision = 'EXCLUDED';
101
+ reason = 'matched_exclude_pattern';
102
+ matchedPattern = excludePatternMatch;
103
+ }
104
+ }
105
+ // Step 2: Check exclude content references
106
+ if (decision === 'DEFAULT' && content && banner.hideOn?.length) {
107
+ hasExclude = true;
108
+ const excludeContentMatch = matchesAnyReference(banner.hideOn, content);
109
+ evaluation.excludeContent.matched = !!excludeContentMatch;
110
+ if (excludeContentMatch) {
111
+ evaluation.excludeContent.contentType = excludeContentMatch.type;
112
+ evaluation.excludeContent.id = excludeContentMatch.id;
113
+ decision = 'EXCLUDED';
114
+ reason = 'matched_exclude_content';
115
+ matchedContent = {
116
+ type: excludeContentMatch.type,
117
+ id: excludeContentMatch.id,
118
+ };
119
+ }
120
+ }
121
+ // Step 3: Check include patterns
122
+ if (decision === 'DEFAULT' && url && banner.includePatterns?.length) {
123
+ hasInclude = true;
124
+ const includePatternMatch = matchesAnyPattern(banner.includePatterns, url);
125
+ evaluation.includePatterns.matched = !!includePatternMatch;
126
+ if (includePatternMatch) {
127
+ evaluation.includePatterns.pattern = includePatternMatch;
128
+ decision = 'INCLUDED';
129
+ reason = 'matched_include_pattern';
130
+ matchedPattern = includePatternMatch;
131
+ }
132
+ }
133
+ // Step 4: Check include content references (only if no include patterns or if patterns matched)
134
+ if (decision === 'DEFAULT' && content && banner.showOn?.length) {
135
+ hasInclude = true;
136
+ const includeContentMatch = matchesAnyReference(banner.showOn, content);
137
+ evaluation.includeContent.matched = !!includeContentMatch;
138
+ if (includeContentMatch) {
139
+ evaluation.includeContent.contentType = includeContentMatch.type;
140
+ evaluation.includeContent.id = includeContentMatch.id;
141
+ decision = 'INCLUDED';
142
+ reason = 'matched_include_content';
143
+ matchedContent = {
144
+ type: includeContentMatch.type,
145
+ id: includeContentMatch.id,
146
+ };
147
+ }
148
+ }
149
+ if (decision === 'DEFAULT') {
150
+ if (hasInclude) {
151
+ decision = 'EXCLUDED';
152
+ reason = 'no_include_match';
153
+ }
154
+ else if (hasExclude) {
155
+ decision = 'INCLUDED';
156
+ reason = 'no_exclude_match';
157
+ }
158
+ }
159
+ const finalDecision = decision === 'DEFAULT' ? 'INCLUDED' : decision;
160
+ // Debug logging
161
+ if (BANNER_DEBUG) {
162
+ const debugInfo = {
163
+ bannerId: banner.id,
164
+ bannerMessage: banner.message ?? null,
165
+ currentUrl: url,
166
+ decision: finalDecision,
167
+ reason,
168
+ matchedPattern,
169
+ matchedContent,
170
+ evaluation,
171
+ };
172
+ debugLog(`🎯 Banner Decision for "${banner.message}":`, debugInfo);
173
+ }
174
+ return finalDecision === 'INCLUDED';
175
+ },
176
+ /**
177
+ * Process all banners for a page with summary logging
178
+ * @param banners Array of banners to evaluate
179
+ * @param content Current content model
180
+ * @param url Current URL
181
+ * @returns Array of banners that should be shown
182
+ */
183
+ filterBannersForPage(banners, content) {
184
+ const results = banners.map((banner) => ({
185
+ banner,
186
+ shouldShow: this.evaluateBannerRules(banner, content),
187
+ }));
188
+ const includedBanners = results.filter((r) => r.shouldShow).map((r) => r.banner);
189
+ debugLog('📊 Banner filtering summary:', {
190
+ pageUrl: content.href,
191
+ contentId: content.id,
192
+ totalBanners: banners.length,
193
+ includedBanners: includedBanners.length,
194
+ excludedBanners: banners.length - includedBanners.length,
195
+ bannerDetails: results.map((r) => ({
196
+ id: r.banner.id,
197
+ message: r.banner.message,
198
+ status: r.shouldShow ? 'INCLUDED' : 'EXCLUDED',
199
+ })),
200
+ });
201
+ return includedBanners;
202
+ },
203
+ };
204
+ //# sourceMappingURL=BannerTargeting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerTargeting.js","sourceRoot":"","sources":["../../../src/components/banner/BannerTargeting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { IBanner } from '@se-studio/core-data-types';
2
+ export type DismissedBannerRecord = Record<string, {
3
+ timestamp?: string;
4
+ type?: string;
5
+ }>;
6
+ export declare function sortBannersByPriority(banners: readonly IBanner[]): IBanner[];
7
+ export declare function isBannerWithinSchedule(banner: IBanner, referenceDate?: Date): boolean;
8
+ /**
9
+ * Picks the highest-priority banner that is within schedule and not dismissed.
10
+ * Storage arguments are injected so this stays testable without browser APIs.
11
+ */
12
+ export declare function selectVisibleBannerId(banners: readonly IBanner[], { dismissedBanners, dismissedSessionBannerIds, referenceDate, }?: {
13
+ dismissedBanners?: DismissedBannerRecord;
14
+ dismissedSessionBannerIds?: ReadonlySet<string>;
15
+ referenceDate?: Date;
16
+ }): string | null;
17
+ export declare function readDismissedBannerStorage(): DismissedBannerRecord;
18
+ export declare function readDismissedSessionBannerIds(banners: readonly IBanner[]): Set<string>;
19
+ export declare function writeBannerDismissal(banner: IBanner): void;
20
+ //# sourceMappingURL=bannerVisibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bannerVisibility.d.ts","sourceRoot":"","sources":["../../../src/components/banner/bannerVisibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE1F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAE5E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,OAAa,GAAG,OAAO,CAQ3F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,EACE,gBAAqB,EACrB,yBAA6C,EAC7C,aAA0B,GAC3B,GAAE;IACD,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,yBAAyB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,IAAI,CAAC;CACjB,GACL,MAAM,GAAG,IAAI,CA6Bf;AAED,wBAAgB,0BAA0B,IAAI,qBAAqB,CAMlE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAatF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAe1D"}
@@ -0,0 +1,73 @@
1
+ export function sortBannersByPriority(banners) {
2
+ return [...banners].sort((a, b) => (b.priority || 0) - (a.priority || 0));
3
+ }
4
+ export function isBannerWithinSchedule(banner, referenceDate = new Date()) {
5
+ if (banner.startDate && new Date(banner.startDate) > referenceDate) {
6
+ return false;
7
+ }
8
+ if (banner.endDate && new Date(banner.endDate) < referenceDate) {
9
+ return false;
10
+ }
11
+ return true;
12
+ }
13
+ /**
14
+ * Picks the highest-priority banner that is within schedule and not dismissed.
15
+ * Storage arguments are injected so this stays testable without browser APIs.
16
+ */
17
+ export function selectVisibleBannerId(banners, { dismissedBanners = {}, dismissedSessionBannerIds = new Set(), referenceDate = new Date(), } = {}) {
18
+ const sortedBanners = sortBannersByPriority(banners);
19
+ for (const banner of sortedBanners) {
20
+ if (!isBannerWithinSchedule(banner, referenceDate)) {
21
+ continue;
22
+ }
23
+ const dismissed = dismissedBanners[banner.id];
24
+ if (!dismissed) {
25
+ return banner.id;
26
+ }
27
+ if (banner.dismissType === 'Timed' && dismissed.timestamp) {
28
+ const hoursSinceDismiss = (referenceDate.getTime() - new Date(dismissed.timestamp).getTime()) / (1000 * 60 * 60);
29
+ if (hoursSinceDismiss >= (banner.dismissDurationHours || 24)) {
30
+ return banner.id;
31
+ }
32
+ }
33
+ if (banner.dismissType === 'Session') {
34
+ if (!dismissedSessionBannerIds.has(banner.id)) {
35
+ return banner.id;
36
+ }
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ export function readDismissedBannerStorage() {
42
+ if (typeof window === 'undefined') {
43
+ return {};
44
+ }
45
+ return JSON.parse(localStorage.getItem('dismissedBanners') || '{}');
46
+ }
47
+ export function readDismissedSessionBannerIds(banners) {
48
+ const dismissed = new Set();
49
+ if (typeof window === 'undefined') {
50
+ return dismissed;
51
+ }
52
+ for (const banner of banners) {
53
+ if (sessionStorage.getItem(`banner_session_${banner.id}`)) {
54
+ dismissed.add(banner.id);
55
+ }
56
+ }
57
+ return dismissed;
58
+ }
59
+ export function writeBannerDismissal(banner) {
60
+ if (typeof window === 'undefined') {
61
+ return;
62
+ }
63
+ const dismissedBanners = readDismissedBannerStorage();
64
+ dismissedBanners[banner.id] = {
65
+ timestamp: new Date().toISOString(),
66
+ type: banner.dismissType ?? undefined,
67
+ };
68
+ localStorage.setItem('dismissedBanners', JSON.stringify(dismissedBanners));
69
+ if (banner.dismissType === 'Session') {
70
+ sessionStorage.setItem(`banner_session_${banner.id}`, 'true');
71
+ }
72
+ }
73
+ //# sourceMappingURL=bannerVisibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bannerVisibility.js","sourceRoot":"","sources":["../../../src/components/banner/bannerVisibility.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,qBAAqB,CAAC,OAA2B;IAC/D,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAe,EAAE,aAAa,GAAG,IAAI,IAAI,EAAE;IAChF,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,aAAa,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA2B,EAC3B,EACE,gBAAgB,GAAG,EAAE,EACrB,yBAAyB,GAAG,IAAI,GAAG,EAAU,EAC7C,aAAa,GAAG,IAAI,IAAI,EAAE,MAKxB,EAAE;IAEN,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAErD,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;YACnD,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,KAAK,OAAO,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YAC1D,MAAM,iBAAiB,GACrB,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACzF,IAAI,iBAAiB,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC7D,OAAO,MAAM,CAAC,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9C,OAAO,MAAM,CAAC,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAA0B,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAA2B;IACvE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,cAAc,CAAC,OAAO,CAAC,kBAAkB,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC1D,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,0BAA0B,EAAE,CAAC;IACtD,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;QAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS;KACtC,CAAC;IACF,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE3E,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,cAAc,CAAC,OAAO,CAAC,kBAAkB,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function isAutoplayVideo(video: HTMLVideoElement): boolean;
2
+ export declare function handleVideo(video: HTMLVideoElement, isIntersecting: boolean): void;
3
+ /** Test-only: drop cached IntersectionObservers so stubs can be replaced. */
4
+ export declare function resetVideoObserversForTests(): void;
5
+ export declare function findAllVideos(defaultThreshold: number, shouldDebug?: (element?: HTMLElement) => boolean): () => void;
6
+ //# sourceMappingURL=clientMonitorVideos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientMonitorVideos.d.ts","sourceRoot":"","sources":["../../src/components/clientMonitorVideos.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAEhE;AAiBD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,QAoB3E;AAoBD,6EAA6E;AAC7E,wBAAgB,2BAA2B,SAK1C;AAED,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,MAAM,EACxB,WAAW,GAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,OAAqB,cAgE9D"}