@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,158 @@
1
+ import { type IBaseModel } from '@se-studio/core-data-types';
2
+ import type { BreadcrumbSegment } from './breadcrumbUtils';
3
+ import type { IBuildInformation } from './buildPageMetadata';
4
+ /**
5
+ * @fileoverview Structured Data Context Builder
6
+ *
7
+ * This module builds minimal context objects for structured data (Schema.org JSON-LD) templates.
8
+ *
9
+ * ## Design Philosophy: Minimal Context
10
+ *
11
+ * This implementation follows a "minimal context" approach where:
12
+ * - **Static data lives in CMS templates** (organization name, address, contact info)
13
+ * - **Dynamic data lives in this context** (URLs, page titles, dates)
14
+ *
15
+ * ### Why This Approach?
16
+ *
17
+ * 1. **Separation of Concerns**: Content editors control static organizational data in the CMS,
18
+ * while deployment-specific values (like baseUrl) are injected at runtime.
19
+ *
20
+ * 2. **Simpler Templates**: Content editors work with straightforward variables like
21
+ * `{{baseUrl}}` and `{{page.title}}` rather than deeply nested objects.
22
+ *
23
+ * 3. **Easier Maintenance**: When organization details change, update the CMS template once
24
+ * rather than changing code and redeploying.
25
+ *
26
+ * 4. **Deployment Flexibility**: The same CMS templates work across dev/staging/prod with
27
+ * only the baseUrl changing.
28
+ *
29
+ * ### Example CMS Template
30
+ *
31
+ * ```json
32
+ * {
33
+ * "@context": "https://schema.org",
34
+ * "@type": "Organization",
35
+ * "name": "OM1",
36
+ * "url": "{{baseUrl}}",
37
+ * "logo": "{{baseUrl}}/logo.svg",
38
+ * "description": "Predict What's Next. Improve Outcomes.",
39
+ * "address": {
40
+ * "@type": "PostalAddress",
41
+ * "streetAddress": "31 St. James Ave Suite #1010",
42
+ * "addressLocality": "Boston"
43
+ * }
44
+ * }
45
+ * ```
46
+ *
47
+ * ### Available Context Variables
48
+ *
49
+ * - `baseUrl` - Site base URL (environment-specific)
50
+ * - `currentUrl` - Full URL of current page
51
+ * - `page.title` - Page title
52
+ * - `page.description` - Page description
53
+ * - `page.slug` - Page slug
54
+ * - `page.imageUrl` - Featured image URL (if available)
55
+ * - `page.breadcrumbs` - Array of breadcrumb objects. Each has position, name, last; url is optional.
56
+ * When a segment has no link (e.g. path in breadcrumbNoLinkPaths), url is omitted. BreadcrumbList
57
+ * templates in the CMS must output the ListItem "item" only when url is present (e.g. Mustache:
58
+ * {{#url}}"item": {"@id": "{{{url}}}"}{{/url}}) so non-link segments get only name and position.
59
+ * - `article.*` - Article-specific fields (only for Article pages)
60
+ * - `person.*` - Person-specific fields (only for Person pages)
61
+ * - `listing.items` - ItemList entries (position, name, url, last) when provided
62
+ *
63
+ * @see {@link StructuredDataContext} for complete context interface
64
+ */
65
+ /**
66
+ * Minimal context object for Mustache templates in structured data.
67
+ *
68
+ * Philosophy: Only truly dynamic values that change per page/deployment should be in this context.
69
+ * Static organizational data (company name, address, etc.) should be hardcoded in CMS templates.
70
+ *
71
+ * This keeps templates simpler and separates concerns:
72
+ * - Static data (organization details) → CMS templates
73
+ * - Dynamic data (URLs, page-specific info) → This context
74
+ */
75
+ export interface StructuredDataContext {
76
+ baseUrl: string;
77
+ currentUrl: string;
78
+ page: {
79
+ title: string;
80
+ description: string;
81
+ slug: string;
82
+ imageUrl?: string;
83
+ breadcrumbs: Array<{
84
+ position: number;
85
+ name: string;
86
+ url?: string;
87
+ last: boolean;
88
+ }>;
89
+ };
90
+ article?: {
91
+ title: string;
92
+ description: string;
93
+ datePublished: string;
94
+ dateModified: string;
95
+ authorName?: string;
96
+ authorUrl?: string;
97
+ /** All authors in order (for multi-author JSON-LD). */
98
+ authors?: Array<{
99
+ name: string;
100
+ url?: string;
101
+ }>;
102
+ imageUrl?: string;
103
+ };
104
+ person?: {
105
+ name: string;
106
+ jobTitle?: string;
107
+ imageUrl?: string;
108
+ };
109
+ /** ItemList context for hub/index pages (article type, tag, person). */
110
+ listing?: {
111
+ items: Array<{
112
+ position: number;
113
+ name: string;
114
+ url: string;
115
+ last: boolean;
116
+ }>;
117
+ };
118
+ [key: string]: unknown;
119
+ }
120
+ /**
121
+ * Extracts entity nodes from a parsed JSON-LD object for merging into a flat @graph.
122
+ * CMS templates often render as `{ @context, @graph: [entity] }`; merging multiple
123
+ * templates must flatten inner @graph arrays, not nest them.
124
+ */
125
+ export declare function graphNodesFromParsed(obj: unknown): unknown[];
126
+ /**
127
+ * Builds the final JSON-LD object from one or more parsed schema templates.
128
+ * Always emits a top-level `@context`. Single entity → context + entity fields;
129
+ * multiple → one document with a flat `@graph`.
130
+ */
131
+ export declare function buildMergedStructuredDataJson(parsedSchemas: unknown[]): unknown;
132
+ /**
133
+ * Options for buildStructuredDataContext.
134
+ */
135
+ export interface BuildStructuredDataContextOptions {
136
+ /** Pre-resolved breadcrumb segments from resolveBreadcrumbSegments. When provided, used for Schema.org instead of slug-derived labels. */
137
+ resolvedBreadcrumbs?: BreadcrumbSegment[] | null;
138
+ /** Pre-built ItemList entries for hub/index pages. */
139
+ listing?: StructuredDataContext['listing'];
140
+ [key: string]: unknown;
141
+ }
142
+ /**
143
+ * Builds a minimal context object for structured data templates.
144
+ *
145
+ * Only includes truly dynamic values that change per page or deployment:
146
+ * - URLs (baseUrl varies by environment)
147
+ * - Page-specific content (title, description, images)
148
+ * - Content-type specific data (article dates, person info)
149
+ *
150
+ * Static organizational data (company name, address, etc.) should be
151
+ * hardcoded in CMS templates, not injected here.
152
+ *
153
+ * @param model - The CMS content model (Page, Article, Person, etc.)
154
+ * @param config - Build configuration (baseUrl and customerName)
155
+ * @param extraContextOrOptions - Optional extra context or options (resolvedBreadcrumbs)
156
+ */
157
+ export declare function buildStructuredDataContext(model: IBaseModel, config: IBuildInformation, extraContextOrOptions?: Record<string, unknown> | BuildStructuredDataContextOptions): StructuredDataContext;
158
+ //# sourceMappingURL=structuredDataUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredDataUtils.d.ts","sourceRoot":"","sources":["../../src/utils/structuredDataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,EAIhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IAEpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAGnB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACrF,CAAC;IAGF,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,uDAAuD;QACvD,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAGF,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,wEAAwE;IACxE,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KAC9E,CAAC;IAGF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAUD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,CAY5D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAkB/E;AAyGD;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,0IAA0I;IAC1I,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IACjD,sDAAsD;IACtD,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,iBAAiB,EACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iCAAiC,GAClF,qBAAqB,CA0FvB"}
@@ -0,0 +1,225 @@
1
+ import { getArticleAuthors, getPrimaryArticleAuthor, mergeMeta, parseMeta, } from '@se-studio/core-data-types';
2
+ function stripDocumentContext(node) {
3
+ if (typeof node !== 'object' || node === null || !('@context' in node)) {
4
+ return node;
5
+ }
6
+ const { '@context': _, ...rest } = node;
7
+ return rest;
8
+ }
9
+ /**
10
+ * Extracts entity nodes from a parsed JSON-LD object for merging into a flat @graph.
11
+ * CMS templates often render as `{ @context, @graph: [entity] }`; merging multiple
12
+ * templates must flatten inner @graph arrays, not nest them.
13
+ */
14
+ export function graphNodesFromParsed(obj) {
15
+ if (typeof obj !== 'object' || obj === null) {
16
+ return [obj];
17
+ }
18
+ const record = obj;
19
+ if (Array.isArray(record['@graph'])) {
20
+ return record['@graph'].map(stripDocumentContext);
21
+ }
22
+ if ('@context' in record) {
23
+ return [stripDocumentContext(record)];
24
+ }
25
+ return [obj];
26
+ }
27
+ /**
28
+ * Builds the final JSON-LD object from one or more parsed schema templates.
29
+ * Always emits a top-level `@context`. Single entity → context + entity fields;
30
+ * multiple → one document with a flat `@graph`.
31
+ */
32
+ export function buildMergedStructuredDataJson(parsedSchemas) {
33
+ const nodes = parsedSchemas.flatMap(graphNodesFromParsed);
34
+ if (nodes.length === 0) {
35
+ return {
36
+ '@context': 'https://schema.org',
37
+ '@graph': [],
38
+ };
39
+ }
40
+ if (nodes.length === 1) {
41
+ return {
42
+ '@context': 'https://schema.org',
43
+ ...nodes[0],
44
+ };
45
+ }
46
+ return {
47
+ '@context': 'https://schema.org',
48
+ '@graph': nodes,
49
+ };
50
+ }
51
+ /**
52
+ * Helper to build the breadcrumbs array for structured data.
53
+ * Splits the path and creates breadcrumb entries with positions.
54
+ *
55
+ * @param path - Current page path (e.g., '/about/team')
56
+ * @param baseUrl - Base URL for the site
57
+ * @param currentTitle - Title of the current page
58
+ * @param breadcrumbTitleOverride - Optional override for the last breadcrumb title
59
+ */
60
+ function buildBreadcrumbs(path, baseUrl, currentTitle, breadcrumbTitleOverride) {
61
+ const segments = path.split('/').filter(Boolean);
62
+ const breadcrumbs = [];
63
+ // Home
64
+ breadcrumbs.push({
65
+ position: 1,
66
+ name: 'Home',
67
+ url: `${baseUrl}/`,
68
+ last: segments.length === 0,
69
+ });
70
+ let currentPath = '';
71
+ segments.forEach((segment, index) => {
72
+ currentPath += `/${segment}`;
73
+ const isLast = index === segments.length - 1;
74
+ // For intermediate segments, capitalize the slug
75
+ // For the last segment, use the page title or override
76
+ let name = segment.charAt(0).toUpperCase() + segment.slice(1).replace(/-/g, ' ');
77
+ if (isLast) {
78
+ name = breadcrumbTitleOverride || currentTitle;
79
+ }
80
+ breadcrumbs.push({
81
+ position: index + 2,
82
+ name: name,
83
+ url: `${baseUrl}${currentPath}/`,
84
+ last: isLast,
85
+ });
86
+ });
87
+ return breadcrumbs;
88
+ }
89
+ /**
90
+ * Converts pre-resolved breadcrumb segments to Schema.org format.
91
+ * Non-last segments without seg.href get no url (for BreadcrumbList templates that use {{#url}}).
92
+ *
93
+ * @param segments - Pre-resolved segments from resolveBreadcrumbSegments
94
+ * @param baseUrl - Base URL for the site
95
+ * @param currentPath - Full path of current page (for last segment URL)
96
+ */
97
+ function segmentsToStructuredData(segments, baseUrl, currentPath) {
98
+ const breadcrumbs = [
99
+ { position: 1, name: 'Home', url: `${baseUrl}/`, last: false },
100
+ ];
101
+ segments.forEach((seg, index) => {
102
+ const isLast = index === segments.length - 1;
103
+ if (isLast) {
104
+ breadcrumbs.push({
105
+ position: index + 2,
106
+ name: seg.label,
107
+ url: `${baseUrl}${currentPath}`,
108
+ last: true,
109
+ });
110
+ }
111
+ else if (seg.href) {
112
+ breadcrumbs.push({
113
+ position: index + 2,
114
+ name: seg.label,
115
+ url: `${baseUrl}${seg.href}`,
116
+ last: false,
117
+ });
118
+ }
119
+ else {
120
+ breadcrumbs.push({
121
+ position: index + 2,
122
+ name: seg.label,
123
+ last: false,
124
+ });
125
+ }
126
+ });
127
+ return breadcrumbs;
128
+ }
129
+ /**
130
+ * Builds a minimal context object for structured data templates.
131
+ *
132
+ * Only includes truly dynamic values that change per page or deployment:
133
+ * - URLs (baseUrl varies by environment)
134
+ * - Page-specific content (title, description, images)
135
+ * - Content-type specific data (article dates, person info)
136
+ *
137
+ * Static organizational data (company name, address, etc.) should be
138
+ * hardcoded in CMS templates, not injected here.
139
+ *
140
+ * @param model - The CMS content model (Page, Article, Person, etc.)
141
+ * @param config - Build configuration (baseUrl and customerName)
142
+ * @param extraContextOrOptions - Optional extra context or options (resolvedBreadcrumbs)
143
+ */
144
+ export function buildStructuredDataContext(model, config, extraContextOrOptions) {
145
+ const { baseUrl } = config;
146
+ const path = model.href;
147
+ const currentUrl = `${baseUrl}${path}`;
148
+ const featuredImageId = model.featuredImage?.id;
149
+ const ogBase = config.ogImagePath ?? '/og';
150
+ const imageUrl = featuredImageId ? `${baseUrl}${ogBase}/${featuredImageId}.jpg` : undefined;
151
+ const opts = extraContextOrOptions;
152
+ const resolvedBreadcrumbs = opts?.resolvedBreadcrumbs;
153
+ const extraContext = { ...opts };
154
+ delete extraContext.resolvedBreadcrumbs;
155
+ delete extraContext.listing;
156
+ const extraMeta = extraContext.meta;
157
+ delete extraContext.meta;
158
+ const breadcrumbs = resolvedBreadcrumbs && resolvedBreadcrumbs.length > 0
159
+ ? segmentsToStructuredData(resolvedBreadcrumbs, baseUrl, path)
160
+ : buildBreadcrumbs(path, baseUrl, model.title, model.breadcrumbTitle);
161
+ // Base context with page information
162
+ const context = {
163
+ baseUrl: `${baseUrl}/`,
164
+ currentUrl,
165
+ page: {
166
+ title: model.title,
167
+ description: model.description,
168
+ slug: model.slug,
169
+ imageUrl,
170
+ breadcrumbs,
171
+ },
172
+ ...(opts?.listing ? { listing: opts.listing } : {}),
173
+ ...extraContext,
174
+ };
175
+ const meta = mergeMeta(parseMeta(model.meta), parseMeta(extraMeta));
176
+ if (Object.keys(meta).length > 0) {
177
+ context.meta = meta;
178
+ }
179
+ // Article-specific context
180
+ if (model.type === 'Article') {
181
+ const article = model;
182
+ const primaryAuthor = getPrimaryArticleAuthor(article);
183
+ const primaryAuthorName = primaryAuthor?.name ?? primaryAuthor?.title;
184
+ const authors = getArticleAuthors(article).flatMap((person) => {
185
+ const name = person.name ?? person.title;
186
+ if (!name)
187
+ return [];
188
+ return [
189
+ {
190
+ name,
191
+ url: person.href ? `${baseUrl}${person.href}` : undefined,
192
+ },
193
+ ];
194
+ });
195
+ context.article = {
196
+ title: article.title,
197
+ description: article.description,
198
+ datePublished: article.date
199
+ ? new Date(article.date).toISOString()
200
+ : article.lastUpdated
201
+ ? new Date(article.lastUpdated).toISOString()
202
+ : new Date().toISOString(),
203
+ dateModified: article.lastUpdated
204
+ ? new Date(article.lastUpdated).toISOString()
205
+ : article.date
206
+ ? new Date(article.date).toISOString()
207
+ : new Date().toISOString(),
208
+ imageUrl,
209
+ authorName: primaryAuthorName,
210
+ authorUrl: primaryAuthor?.href ? `${baseUrl}${primaryAuthor.href}` : undefined,
211
+ authors,
212
+ };
213
+ }
214
+ // Person-specific context
215
+ if (model.type === 'Person') {
216
+ const person = model;
217
+ context.person = {
218
+ name: person.title,
219
+ jobTitle: person.jobTitle || undefined,
220
+ imageUrl,
221
+ };
222
+ }
223
+ return context;
224
+ }
225
+ //# sourceMappingURL=structuredDataUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredDataUtils.js","sourceRoot":"","sources":["../../src/utils/structuredDataUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare function isAbsoluteUrl(url: string): boolean;
2
+ /**
3
+ * Ensure page-like internal paths use a trailing slash (SE Studio `trailingSlash: true`).
4
+ *
5
+ * - Preserves query string and hash (`/drive#x` → `/drive/#x`, `/drive?q=1` → `/drive/?q=1`).
6
+ * - Leaves `/`, already-slashed paths, hash-only, and non-path hrefs unchanged.
7
+ * - Skips file-like last segments (contain a `.`) so download/asset paths stay bare.
8
+ */
9
+ export declare function ensureInternalPageTrailingSlash(href: string): string;
10
+ /**
11
+ * Resolve a hyperlink href for navigation + external treatment.
12
+ *
13
+ * - Relative / hash / protocol-relative-handled-as-absolute paths stay as-is (not external
14
+ * unless absolute http(s) to another origin).
15
+ * - Absolute same-site URLs (matching `siteBaseUrl` origin, or `window.location.origin`
16
+ * when no base is provided) are stripped to path + search + hash and treated as internal.
17
+ * - Absolute other-origin URLs stay absolute and are external (typically target=_blank).
18
+ * - Internal page paths are normalized to trailing-slash form (SE Studio convention) so
19
+ * plain RTF hyperlinks like `/drive` do not force a 308 redirect.
20
+ */
21
+ export declare function resolveTrackedHref(href: string, siteBaseUrl?: string | null): {
22
+ href: string;
23
+ isExternal: boolean;
24
+ };
25
+ /**
26
+ * Utility function to get the current page URL safely.
27
+ * Returns an empty string when running on the server.
28
+ */
29
+ export declare function getCurrentPageUrl(): string;
30
+ //# sourceMappingURL=urlUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../../src/utils/urlUtils.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8BpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAsCvC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
@@ -0,0 +1,100 @@
1
+ export function isAbsoluteUrl(url) {
2
+ try {
3
+ const parsed = new URL(url);
4
+ return parsed.protocol === 'http:' || parsed.protocol === 'https:';
5
+ }
6
+ catch {
7
+ return false;
8
+ }
9
+ }
10
+ /**
11
+ * Ensure page-like internal paths use a trailing slash (SE Studio `trailingSlash: true`).
12
+ *
13
+ * - Preserves query string and hash (`/drive#x` → `/drive/#x`, `/drive?q=1` → `/drive/?q=1`).
14
+ * - Leaves `/`, already-slashed paths, hash-only, and non-path hrefs unchanged.
15
+ * - Skips file-like last segments (contain a `.`) so download/asset paths stay bare.
16
+ */
17
+ export function ensureInternalPageTrailingSlash(href) {
18
+ if (!href || href === '#' || href.startsWith('#') || !href.startsWith('/')) {
19
+ return href;
20
+ }
21
+ let path = href;
22
+ let search = '';
23
+ let hash = '';
24
+ const hashIdx = path.indexOf('#');
25
+ if (hashIdx >= 0) {
26
+ hash = path.slice(hashIdx);
27
+ path = path.slice(0, hashIdx);
28
+ }
29
+ const qIdx = path.indexOf('?');
30
+ if (qIdx >= 0) {
31
+ search = path.slice(qIdx);
32
+ path = path.slice(0, qIdx);
33
+ }
34
+ if (path === '/' || path.endsWith('/')) {
35
+ return `${path}${search}${hash}`;
36
+ }
37
+ const lastSegment = path.split('/').filter(Boolean).pop() ?? '';
38
+ if (lastSegment.includes('.')) {
39
+ return `${path}${search}${hash}`;
40
+ }
41
+ return `${path}/${search}${hash}`;
42
+ }
43
+ /**
44
+ * Resolve a hyperlink href for navigation + external treatment.
45
+ *
46
+ * - Relative / hash / protocol-relative-handled-as-absolute paths stay as-is (not external
47
+ * unless absolute http(s) to another origin).
48
+ * - Absolute same-site URLs (matching `siteBaseUrl` origin, or `window.location.origin`
49
+ * when no base is provided) are stripped to path + search + hash and treated as internal.
50
+ * - Absolute other-origin URLs stay absolute and are external (typically target=_blank).
51
+ * - Internal page paths are normalized to trailing-slash form (SE Studio convention) so
52
+ * plain RTF hyperlinks like `/drive` do not force a 308 redirect.
53
+ */
54
+ export function resolveTrackedHref(href, siteBaseUrl) {
55
+ if (!href || href === '#' || href.startsWith('#')) {
56
+ return { href, isExternal: false };
57
+ }
58
+ if (href.startsWith('/')) {
59
+ return { href: ensureInternalPageTrailingSlash(href), isExternal: false };
60
+ }
61
+ if (!isAbsoluteUrl(href)) {
62
+ return { href, isExternal: false };
63
+ }
64
+ try {
65
+ const url = new URL(href);
66
+ const candidates = [];
67
+ if (siteBaseUrl) {
68
+ try {
69
+ candidates.push(new URL(siteBaseUrl).origin);
70
+ }
71
+ catch {
72
+ // ignore invalid base
73
+ }
74
+ }
75
+ if (typeof window !== 'undefined' && window.location?.origin) {
76
+ candidates.push(window.location.origin);
77
+ }
78
+ if (candidates.some((origin) => origin === url.origin)) {
79
+ return {
80
+ href: ensureInternalPageTrailingSlash(`${url.pathname}${url.search}${url.hash}`),
81
+ isExternal: false,
82
+ };
83
+ }
84
+ return { href, isExternal: true };
85
+ }
86
+ catch {
87
+ return { href, isExternal: false };
88
+ }
89
+ }
90
+ /**
91
+ * Utility function to get the current page URL safely.
92
+ * Returns an empty string when running on the server.
93
+ */
94
+ export function getCurrentPageUrl() {
95
+ if (typeof window !== 'undefined') {
96
+ return window.location.href;
97
+ }
98
+ return '';
99
+ }
100
+ //# sourceMappingURL=urlUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlUtils.js","sourceRoot":"","sources":["../../src/utils/urlUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type IVisual } from '@se-studio/core-data-types';
2
+ export declare function calculateHorizontalPositionClassName(visual?: IVisual): "laptop:mr-auto" | "laptop:ml-auto" | "laptop:mx-auto";
3
+ //# sourceMappingURL=visualPositions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualPositions.d.ts","sourceRoot":"","sources":["../../src/utils/visualPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAEvF,wBAAgB,oCAAoC,CAAC,MAAM,CAAC,EAAE,OAAO,0DAUpE"}
@@ -0,0 +1,13 @@
1
+ import { getVisualHorizontalPosition } from '@se-studio/core-data-types';
2
+ export function calculateHorizontalPositionClassName(visual) {
3
+ const horizontalPosition = getVisualHorizontalPosition(visual);
4
+ switch (horizontalPosition) {
5
+ case 'Left':
6
+ return 'laptop:mr-auto';
7
+ case 'Right':
8
+ return 'laptop:ml-auto';
9
+ default:
10
+ return 'laptop:mx-auto';
11
+ }
12
+ }
13
+ //# sourceMappingURL=visualPositions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualPositions.js","sourceRoot":"","sources":["../../src/utils/visualPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAgB,MAAM,4BAA4B,CAAC;AAEvF,MAAM,UAAU,oCAAoC,CAAC,MAAgB;IACnE,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC/D,QAAQ,kBAAkB,EAAE,CAAC;QAC3B,KAAK,MAAM;YACT,OAAO,gBAAgB,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,gBAAgB,CAAC;QAC1B;YACE,OAAO,gBAAgB,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { IVisualSizes } from '@se-studio/core-data-types';
2
+ export declare function calculateVisualSizes(defaultRatio: number, breakpointRatios?: Partial<Record<string, number>>, sizes?: Record<string, {
3
+ breakpoint: number;
4
+ }>): IVisualSizes;
5
+ //# sourceMappingURL=visualSizes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualSizes.d.ts","sourceRoot":"","sources":["../../src/utils/visualSizes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAQ/D,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAClD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,gBAuB/C"}
@@ -0,0 +1,27 @@
1
+ const DEFAULT_BREAKPOINTS = {
2
+ tablet: { breakpoint: 768 },
3
+ laptop: { breakpoint: 1024 },
4
+ desktop: { breakpoint: 1440 },
5
+ };
6
+ export function calculateVisualSizes(defaultRatio, breakpointRatios, sizes) {
7
+ const effectiveSizes = sizes || DEFAULT_BREAKPOINTS;
8
+ const visualSizes = {
9
+ defaultSize: `${Math.round(defaultRatio * 100)}vw`,
10
+ breakpoints: breakpointRatios
11
+ ? Object.entries(breakpointRatios).map(([size, ratio]) => {
12
+ const info = effectiveSizes[size];
13
+ if (!info || ratio === undefined) {
14
+ throw new Error(`Size ${size} not found in configuration or ratio is undefined`);
15
+ }
16
+ return {
17
+ minWidth: info.breakpoint,
18
+ proportion: ratio,
19
+ pixels: Math.round(info.breakpoint * ratio),
20
+ size: `${Math.round(ratio * 100)}vw`,
21
+ };
22
+ })
23
+ : undefined,
24
+ };
25
+ return visualSizes;
26
+ }
27
+ //# sourceMappingURL=visualSizes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualSizes.js","sourceRoot":"","sources":["../../src/utils/visualSizes.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAA2C;IAClE,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;IAC3B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC9B,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAClC,YAAoB,EACpB,gBAAkD,EAClD,KAA8C;IAE9C,MAAM,cAAc,GAAG,KAAK,IAAI,mBAAmB,CAAC;IAEpD,MAAM,WAAW,GAAiB;QAChC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI;QAClD,WAAW,EAAE,gBAAgB;YAC3B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;gBACrD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,mDAAmD,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,UAAU;oBACzB,UAAU,EAAE,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;oBAC3C,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI;iBACrC,CAAC;YACJ,CAAC,CAAC;YACJ,CAAC,CAAC,SAAS;KACd,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * WCAG 2.1 relative luminance (0 = black, 1 = white) for an sRGB hex string.
3
+ *
4
+ * Accepts `#RGB` or `#RRGGBB` (case-insensitive hex digits). Trims surrounding whitespace.
5
+ * Returns `null` if the string is not a valid hex color.
6
+ */
7
+ export declare function wcagRelativeLuminanceFromHex(hex: string): number | null;
8
+ //# sourceMappingURL=wcagRelativeLuminanceFromHex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wcagRelativeLuminanceFromHex.d.ts","sourceRoot":"","sources":["../../src/utils/wcagRelativeLuminanceFromHex.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBvE"}
@@ -0,0 +1,30 @@
1
+ const HEX_COLOR_REGEX = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
2
+ function expandShortHex(hex) {
3
+ if (hex.length !== 4) {
4
+ return hex;
5
+ }
6
+ return `#${hex[1]}${hex[1]}${hex[2]}${hex[2]}${hex[3]}${hex[3]}`;
7
+ }
8
+ /**
9
+ * WCAG 2.1 relative luminance (0 = black, 1 = white) for an sRGB hex string.
10
+ *
11
+ * Accepts `#RGB` or `#RRGGBB` (case-insensitive hex digits). Trims surrounding whitespace.
12
+ * Returns `null` if the string is not a valid hex color.
13
+ */
14
+ export function wcagRelativeLuminanceFromHex(hex) {
15
+ const trimmed = hex.trim();
16
+ if (!HEX_COLOR_REGEX.test(trimmed)) {
17
+ return null;
18
+ }
19
+ const full = expandShortHex(trimmed);
20
+ const n = Number.parseInt(full.slice(1), 16);
21
+ if (!Number.isFinite(n)) {
22
+ return null;
23
+ }
24
+ const toLinear = (c) => (c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);
25
+ const r = toLinear(((n >> 16) & 0xff) / 255);
26
+ const g = toLinear(((n >> 8) & 0xff) / 255);
27
+ const b = toLinear((n & 0xff) / 255);
28
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
29
+ }
30
+ //# sourceMappingURL=wcagRelativeLuminanceFromHex.js.map