@se-studio/core-ui 1.0.52 → 1.0.53

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 (31) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/analytics/adapters/index.d.ts +1 -1
  3. package/dist/analytics/adapters/index.d.ts.map +1 -1
  4. package/dist/analytics/adapters/index.js.map +1 -1
  5. package/dist/components/CmsEmbeddedContent.d.ts +2 -1
  6. package/dist/components/CmsEmbeddedContent.d.ts.map +1 -1
  7. package/dist/components/ErrorBoundary.d.ts +1 -1
  8. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  9. package/dist/components/ExternalVimeoEmbed.d.ts +1 -1
  10. package/dist/components/ExternalVimeoEmbed.d.ts.map +1 -1
  11. package/dist/components/ExternalVimeoEmbed.js +1 -1
  12. package/dist/components/ExternalVimeoEmbed.js.map +1 -1
  13. package/dist/components/banner/BannerClient.d.ts +13 -0
  14. package/dist/components/banner/BannerClient.d.ts.map +1 -0
  15. package/dist/components/banner/BannerClient.js +109 -0
  16. package/dist/components/banner/BannerClient.js.map +1 -0
  17. package/dist/components/banner/BannerManager.d.ts +16 -0
  18. package/dist/components/banner/BannerManager.d.ts.map +1 -0
  19. package/dist/components/banner/BannerManager.js +21 -0
  20. package/dist/components/banner/BannerManager.js.map +1 -0
  21. package/dist/components/banner/BannerTargeting.d.ts +20 -0
  22. package/dist/components/banner/BannerTargeting.d.ts.map +1 -0
  23. package/dist/components/banner/BannerTargeting.js +203 -0
  24. package/dist/components/banner/BannerTargeting.js.map +1 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +2 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/utils/errorMonitoring.d.ts +2 -1
  30. package/dist/utils/errorMonitoring.d.ts.map +1 -1
  31. package/package.json +6 -15
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @se-studio/core-ui
2
2
 
3
+ ## 1.0.53
4
+
5
+ ### Patch Changes
6
+
7
+ - Bulk version bump: patch for all packages
8
+ - Updated dependencies
9
+ - @se-studio/contentful-rest-api@1.0.53
10
+ - @se-studio/core-data-types@1.0.53
11
+
3
12
  ## 1.0.52
4
13
 
5
14
  ### Patch Changes
@@ -1,4 +1,4 @@
1
1
  export { ConsentAwareAdapter } from './ConsentAwareAdapter';
2
2
  export { ConsoleAnalyticsAdapter } from './ConsoleAnalyticsAdapter';
3
- export { type ConsentState, GoogleTagManagerAdapter } from './GoogleTagManagerAdapter';
3
+ export { GoogleTagManagerAdapter } from './GoogleTagManagerAdapter';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAqB,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { type EmbeddedCollectionRenderer } from './CmsCollection';
2
2
  import { type EmbeddedComponentRenderer } from './CmsComponent';
3
3
  import { type EmbeddedExternalComponentRenderer } from './CmsExternalComponent';
4
- export type EmbeddedContentRenderer = EmbeddedComponentRenderer | EmbeddedCollectionRenderer | EmbeddedExternalComponentRenderer;
4
+ type EmbeddedContentRenderer = EmbeddedComponentRenderer | EmbeddedCollectionRenderer | EmbeddedExternalComponentRenderer;
5
5
  /**
6
6
  * Single content item renderer that routes to the appropriate renderer based on type
7
7
  */
8
8
  export declare const CmsEmbeddedContent: EmbeddedContentRenderer;
9
+ export {};
9
10
  //# sourceMappingURL=CmsEmbeddedContent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CmsEmbeddedContent.d.ts","sourceRoot":"","sources":["../../src/components/CmsEmbeddedContent.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAyB,KAAK,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAwB,KAAK,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEtF,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,uBAAuB,GAC/B,yBAAyB,GACzB,0BAA0B,GAC1B,iCAAiC,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,uBA4DhC,CAAC"}
1
+ {"version":3,"file":"CmsEmbeddedContent.d.ts","sourceRoot":"","sources":["../../src/components/CmsEmbeddedContent.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAyB,KAAK,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAwB,KAAK,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEtF,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,wBAAwB,CAAC;AAEhC,KAAK,uBAAuB,GACxB,yBAAyB,GACzB,0BAA0B,GAC1B,iCAAiC,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,uBA4DhC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import React, { type ErrorInfo, type ReactNode } from 'react';
2
- export interface ErrorBoundaryProps {
2
+ interface ErrorBoundaryProps {
3
3
  children: ReactNode;
4
4
  fallback?: ReactNode | ((error: Error) => ReactNode);
5
5
  onError?: (error: Error, errorInfo: ErrorInfo) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBAC5E,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;IAIxD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IASpD,MAAM;CAahB"}
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9D,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBAC5E,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;IAIxD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IASpD,MAAM;CAahB"}
@@ -1,6 +1,6 @@
1
1
  import type { IAnalyticsContext, IExternalVideo } from '@se-studio/core-data-types';
2
2
  import type { IVideoProps } from './Video';
3
- export declare function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext, componentLabel, autoPlay, loop, ...props }: {
3
+ declare function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext, componentLabel, autoPlay, loop, ...props }: {
4
4
  video: IExternalVideo;
5
5
  vimeoId: string;
6
6
  analyticsContext: IAnalyticsContext | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalVimeoEmbed.d.ts","sourceRoot":"","sources":["../../src/components/ExternalVimeoEmbed.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC3C,GAAG,WAAW,2CAoCd;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ExternalVimeoEmbed.d.ts","sourceRoot":"","sources":["../../src/components/ExternalVimeoEmbed.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,iBAAS,kBAAkB,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,GAAG,KAAK,EACT,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC3C,GAAG,WAAW,2CAoCd;AAED,eAAe,kBAAkB,CAAC"}
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import Image from 'next/image';
4
4
  import { calculateCropDetails } from './Visual';
5
- export function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext, componentLabel, autoPlay, loop, ...props }) {
5
+ function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext, componentLabel, autoPlay, loop, ...props }) {
6
6
  const cropProperties = calculateCropDetails(video);
7
7
  const embed = video.embed;
8
8
  const fullStyle = {
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalVimeoEmbed.js","sourceRoot":"","sources":["../../src/components/ExternalVimeoEmbed.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,KAAK,MAAM,YAAY,CAAC;AAG/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,GAAG,KAAK,EAMK;IACb,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,SAAS,GAAkB;QAC/B,GAAG,KAAK;QACR,GAAG,cAAc;QACjB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,YACzC,qBACE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,SAAS,EAAC,eAAe,EACzB,QAAQ,QACR,QAAQ,EAAE,QAAQ,KACd,KAAK,YAER,KAAK,CAAC,MAAM,IAAI,CACf,KAAC,KAAK,IACJ,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,KAAK,CAAC,MAAM,EACjB,GAAG,EAAE,KAAK,CAAC,IAAI,EACf,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,EAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAC5B,KAAK,EAAE;oBACL,SAAS,EAAE,OAAO;iBACnB,EACD,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,eAAe,GACzB,CACH,GACU,GACT,CACP,CAAC;AACJ,CAAC;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ExternalVimeoEmbed.js","sourceRoot":"","sources":["../../src/components/ExternalVimeoEmbed.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,KAAK,MAAM,YAAY,CAAC;AAG/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,SAAS,kBAAkB,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,GAAG,KAAK,EAMK;IACb,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,SAAS,GAAkB;QAC/B,GAAG,KAAK;QACR,GAAG,cAAc;QACjB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,YACzC,qBACE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,SAAS,EAAC,eAAe,EACzB,QAAQ,QACR,QAAQ,EAAE,QAAQ,KACd,KAAK,YAER,KAAK,CAAC,MAAM,IAAI,CACf,KAAC,KAAK,IACJ,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,KAAK,CAAC,MAAM,EACjB,GAAG,EAAE,KAAK,CAAC,IAAI,EACf,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,EAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAC5B,KAAK,EAAE;oBACL,SAAS,EAAE,OAAO;iBACnB,EACD,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,eAAe,GACzB,CACH,GACU,GACT,CACP,CAAC;AACJ,CAAC;AAED,eAAe,kBAAkB,CAAC"}
@@ -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;AAM1D,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,CAwH7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,109 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useState } from 'react';
4
+ const BannerClient = ({ banners, BannerComponent, debug }) => {
5
+ const [visibleBannerId, setVisibleBannerId] = useState(null);
6
+ useEffect(() => {
7
+ // Check localStorage for dismissed banners
8
+ // Safety check for SSR/environment without localStorage
9
+ if (typeof window === 'undefined')
10
+ return;
11
+ if (debug) {
12
+ console.log('[BannerClient] Initializing with banners:', banners);
13
+ }
14
+ const dismissedBanners = JSON.parse(localStorage.getItem('dismissedBanners') || '{}');
15
+ if (debug) {
16
+ console.log('[BannerClient] Dismissed banners from storage:', dismissedBanners);
17
+ }
18
+ // Sort banners by priority (descending)
19
+ const sortedBanners = [...banners].sort((a, b) => (b.priority || 0) - (a.priority || 0));
20
+ // Find the first non-dismissed banner
21
+ for (const banner of sortedBanners) {
22
+ // Date checks
23
+ const now = new Date();
24
+ if (banner.startDate && new Date(banner.startDate) > now) {
25
+ if (debug)
26
+ console.log(`[BannerClient] Banner ${banner.id} skipped: Not started yet.`);
27
+ continue;
28
+ }
29
+ if (banner.endDate && new Date(banner.endDate) < now) {
30
+ if (debug)
31
+ console.log(`[BannerClient] Banner ${banner.id} skipped: Expired.`);
32
+ continue;
33
+ }
34
+ const dismissed = dismissedBanners[banner.id];
35
+ if (!dismissed) {
36
+ // Banner was never dismissed
37
+ if (debug)
38
+ console.log(`[BannerClient] Showing banner ${banner.id}: Never dismissed.`);
39
+ setVisibleBannerId(banner.id);
40
+ break;
41
+ }
42
+ if (banner.dismissType === 'Timed' && dismissed.timestamp) {
43
+ const dismissedTime = new Date(dismissed.timestamp).getTime();
44
+ const currentTime = new Date().getTime();
45
+ const hoursSinceDismiss = (currentTime - dismissedTime) / (1000 * 60 * 60);
46
+ if (hoursSinceDismiss >= (banner.dismissDurationHours || 24)) {
47
+ // Dismissal period has expired
48
+ if (debug)
49
+ console.log(`[BannerClient] Showing banner ${banner.id}: Dismissal expired.`);
50
+ setVisibleBannerId(banner.id);
51
+ break;
52
+ }
53
+ if (debug)
54
+ console.log(`[BannerClient] Banner ${banner.id} skipped: Dismissed (Timed).`);
55
+ }
56
+ else if (banner.dismissType === 'Session') {
57
+ // For session dismissals, check if we're in a new session
58
+ const sessionKey = `banner_session_${banner.id}`;
59
+ if (!sessionStorage.getItem(sessionKey)) {
60
+ if (debug)
61
+ console.log(`[BannerClient] Showing banner ${banner.id}: New session.`);
62
+ setVisibleBannerId(banner.id);
63
+ break;
64
+ }
65
+ if (debug)
66
+ console.log(`[BannerClient] Banner ${banner.id} skipped: Dismissed (Session).`);
67
+ }
68
+ else if (banner.dismissType === 'Permanent') {
69
+ if (debug)
70
+ console.log(`[BannerClient] Banner ${banner.id} skipped: Dismissed (Permanent).`);
71
+ }
72
+ }
73
+ }, [banners, debug]);
74
+ const handleClick = useCallback((banner) => {
75
+ // Optional: emit event
76
+ if (debug)
77
+ console.debug('Banner clicked:', banner.id);
78
+ }, [debug]);
79
+ const handleDismiss = useCallback((banner) => {
80
+ if (typeof window === 'undefined')
81
+ return;
82
+ if (debug)
83
+ console.log(`[BannerClient] Dismissing banner ${banner.id}`);
84
+ // Store dismissal in localStorage
85
+ const dismissedBanners = JSON.parse(localStorage.getItem('dismissedBanners') || '{}');
86
+ dismissedBanners[banner.id] = {
87
+ timestamp: new Date().toISOString(),
88
+ type: banner.dismissType,
89
+ };
90
+ localStorage.setItem('dismissedBanners', JSON.stringify(dismissedBanners));
91
+ // For session dismissals, also store in sessionStorage
92
+ if (banner.dismissType === 'Session') {
93
+ sessionStorage.setItem(`banner_session_${banner.id}`, 'true');
94
+ }
95
+ // Hide the banner
96
+ setVisibleBannerId(null);
97
+ }, [debug]);
98
+ if (!visibleBannerId) {
99
+ if (debug && banners.length > 0)
100
+ console.log('[BannerClient] No visible banner selected.');
101
+ return null;
102
+ }
103
+ const visibleBanner = banners.find((banner) => banner.id === visibleBannerId);
104
+ if (!visibleBanner)
105
+ return null;
106
+ return (_jsx(BannerComponent, { banner: visibleBanner, onDismiss: () => handleDismiss(visibleBanner), onClick: () => handleClick(visibleBanner) }));
107
+ };
108
+ export default BannerClient;
109
+ //# sourceMappingURL=BannerClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerClient.js","sourceRoot":"","sources":["../../../src/components/banner/BannerClient.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { 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
+ url?: string;
8
+ BannerComponent: React.ComponentType<{
9
+ banner: IBanner;
10
+ onDismiss: () => void;
11
+ onClick?: () => void;
12
+ }>;
13
+ }
14
+ export declare function BannerManager({ content, banners, url, BannerComponent }: BannerManagerProps): import("react/jsx-runtime").JSX.Element | null;
15
+ export {};
16
+ //# 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,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAK9E,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,UAAU,GAAG;QAAE,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IACxD,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,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;CACJ;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,kBAAkB,kDAsB3F"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Suspense } from 'react';
3
+ import BannerClient from './BannerClient';
4
+ import { BannerTargetingEngine } from './BannerTargeting';
5
+ export function BannerManager({ content, banners, url, BannerComponent }) {
6
+ const debug = process.env.BANNER_DEBUG === 'true';
7
+ if (!banners || banners.length === 0) {
8
+ if (debug)
9
+ console.log('[BannerManager] No banners found.');
10
+ return null;
11
+ }
12
+ // Filter banners based on targeting rules
13
+ const targetedBanners = BannerTargetingEngine.filterBannersForPage(banners, content, url);
14
+ if (debug) {
15
+ console.log(`[BannerManager] ${targetedBanners.length} banners passed targeting.`);
16
+ }
17
+ if (targetedBanners.length === 0)
18
+ return null;
19
+ return (_jsx(Suspense, { fallback: null, children: _jsx(BannerClient, { banners: targetedBanners, BannerComponent: BannerComponent, debug: debug }) }));
20
+ }
21
+ //# 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,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAa1D,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAsB;IAC1F,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,0CAA0C;IAC1C,MAAM,eAAe,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAE1F,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAe,CAAC,MAAM,4BAA4B,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9C,OAAO,CACL,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,YACtB,KAAC,YAAY,IAAC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAI,GACjF,CACZ,CAAC;AACJ,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, url?: string): 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, url?: string): 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,YAAY,UAAU,QAAQ,MAAM,GAAG,OAAO;IAyGjF;;;;;;OAMG;kCAC2B,SAAS,OAAO,EAAE,YAAY,UAAU,QAAQ,MAAM,GAAG,OAAO,EAAE;CAuBjG,CAAC"}
@@ -0,0 +1,203 @@
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, url) {
79
+ debugLog('Looking at banner', banner);
80
+ const evaluation = {
81
+ excludePatterns: { matched: false },
82
+ excludeContent: { matched: false },
83
+ includePatterns: { matched: false },
84
+ includeContent: { matched: false },
85
+ };
86
+ let decision = 'DEFAULT';
87
+ let reason = 'default_behavior';
88
+ let matchedPattern;
89
+ let matchedContent;
90
+ let hasInclude = false;
91
+ let hasExclude = false;
92
+ // Step 1: Check exclude patterns first (highest priority)
93
+ if (url && banner.excludePatterns?.length) {
94
+ hasExclude = true;
95
+ const excludePatternMatch = matchesAnyPattern(banner.excludePatterns, url);
96
+ evaluation.excludePatterns.matched = !!excludePatternMatch;
97
+ if (excludePatternMatch) {
98
+ evaluation.excludePatterns.pattern = excludePatternMatch;
99
+ decision = 'EXCLUDED';
100
+ reason = 'matched_exclude_pattern';
101
+ matchedPattern = excludePatternMatch;
102
+ }
103
+ }
104
+ // Step 2: Check exclude content references
105
+ if (decision === 'DEFAULT' && content && banner.hideOn?.length) {
106
+ hasExclude = true;
107
+ const excludeContentMatch = matchesAnyReference(banner.hideOn, content);
108
+ evaluation.excludeContent.matched = !!excludeContentMatch;
109
+ if (excludeContentMatch) {
110
+ evaluation.excludeContent.contentType = excludeContentMatch.type;
111
+ evaluation.excludeContent.id = excludeContentMatch.id;
112
+ decision = 'EXCLUDED';
113
+ reason = 'matched_exclude_content';
114
+ matchedContent = {
115
+ type: excludeContentMatch.type,
116
+ id: excludeContentMatch.id,
117
+ };
118
+ }
119
+ }
120
+ // Step 3: Check include patterns
121
+ if (decision === 'DEFAULT' && url && banner.includePatterns?.length) {
122
+ hasInclude = true;
123
+ const includePatternMatch = matchesAnyPattern(banner.includePatterns, url);
124
+ evaluation.includePatterns.matched = !!includePatternMatch;
125
+ if (includePatternMatch) {
126
+ evaluation.includePatterns.pattern = includePatternMatch;
127
+ decision = 'INCLUDED';
128
+ reason = 'matched_include_pattern';
129
+ matchedPattern = includePatternMatch;
130
+ }
131
+ }
132
+ // Step 4: Check include content references (only if no include patterns or if patterns matched)
133
+ if (decision === 'DEFAULT' && content && banner.showOn?.length) {
134
+ hasInclude = true;
135
+ const includeContentMatch = matchesAnyReference(banner.showOn, content);
136
+ evaluation.includeContent.matched = !!includeContentMatch;
137
+ if (includeContentMatch) {
138
+ evaluation.includeContent.contentType = includeContentMatch.type;
139
+ evaluation.includeContent.id = includeContentMatch.id;
140
+ decision = 'INCLUDED';
141
+ reason = 'matched_include_content';
142
+ matchedContent = {
143
+ type: includeContentMatch.type,
144
+ id: includeContentMatch.id,
145
+ };
146
+ }
147
+ }
148
+ if (decision === 'DEFAULT') {
149
+ if (hasInclude) {
150
+ decision = 'EXCLUDED';
151
+ reason = 'no_include_match';
152
+ }
153
+ else if (hasExclude) {
154
+ decision = 'INCLUDED';
155
+ reason = 'no_exclude_match';
156
+ }
157
+ }
158
+ const finalDecision = decision === 'DEFAULT' ? 'INCLUDED' : decision;
159
+ // Debug logging
160
+ if (BANNER_DEBUG) {
161
+ const debugInfo = {
162
+ bannerId: banner.id,
163
+ bannerMessage: banner.message ?? null,
164
+ currentUrl: url,
165
+ decision: finalDecision,
166
+ reason,
167
+ matchedPattern,
168
+ matchedContent,
169
+ evaluation,
170
+ };
171
+ debugLog(`🎯 Banner Decision for "${banner.message}":`, debugInfo);
172
+ }
173
+ return finalDecision === 'INCLUDED';
174
+ },
175
+ /**
176
+ * Process all banners for a page with summary logging
177
+ * @param banners Array of banners to evaluate
178
+ * @param content Current content model
179
+ * @param url Current URL
180
+ * @returns Array of banners that should be shown
181
+ */
182
+ filterBannersForPage(banners, content, url) {
183
+ const results = banners.map((banner) => ({
184
+ banner,
185
+ shouldShow: this.evaluateBannerRules(banner, content, url),
186
+ }));
187
+ const includedBanners = results.filter((r) => r.shouldShow).map((r) => r.banner);
188
+ debugLog('📊 Banner filtering summary:', {
189
+ pageUrl: url,
190
+ contentId: content?.id,
191
+ totalBanners: banners.length,
192
+ includedBanners: includedBanners.length,
193
+ excludedBanners: banners.length - includedBanners.length,
194
+ bannerDetails: results.map((r) => ({
195
+ id: r.banner.id,
196
+ message: r.banner.message,
197
+ status: r.shouldShow ? 'INCLUDED' : 'EXCLUDED',
198
+ })),
199
+ });
200
+ return includedBanners;
201
+ },
202
+ };
203
+ //# 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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"}
package/dist/index.d.ts CHANGED
@@ -40,6 +40,7 @@ export { useAnalytics } from './analytics/useAnalytics';
40
40
  export type { CmsRendererConfig, CmsRendererTypes } from './CmsRendererConfig';
41
41
  export type { CollectionRegistration, ComponentRegistration, ExternalComponentRegistration, MockData, } from './cmsRegistration';
42
42
  export { buildCollectionMaps, buildComponentMaps, buildExternalComponentMaps, defineCollection, defineComponent, defineExternalComponent, } from './cmsRegistration';
43
+ export { BannerManager } from './components/banner/BannerManager';
43
44
  export { ClientMonitor } from './components/ClientMonitor.js';
44
45
  export type { CollectionMap, CollectionRenderer, CollectionRendererProps, EmbeddedCollectionMap, EmbeddedCollectionRenderer, } from './components/CmsCollection';
45
46
  export { CmsCollection } from './components/CmsCollection';
@@ -67,6 +68,7 @@ export { ComponentErrorIndicator } from './framework/ComponentErrorIndicator';
67
68
  export { showComponentError, showInlineError } from './framework/componentErrors';
68
69
  export { default as ResponsiveVisual } from './framework/ResponsiveVisual';
69
70
  export { useClickTracking } from './hooks/useClickTracking';
71
+ export { onVisibleToUser, useClientOnly, useDocumentVisible, useFirstVisibleCallback, useFirstVisibleToUser, useVisibleToUser, } from './hooks/visibility';
70
72
  export { RTF } from './rtf/rtf';
71
73
  export * from './showcase';
72
74
  export type { IBuildInformation } from './utils/buildPageMetadata';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -40,6 +40,7 @@ export { AnalyticsProvider, useAnalyticsContext } from './analytics/AnalyticsPro
40
40
  export { ConsentAwareAdapter, ConsoleAnalyticsAdapter, GoogleTagManagerAdapter, } from './analytics/adapters';
41
41
  export { useAnalytics } from './analytics/useAnalytics';
42
42
  export { buildCollectionMaps, buildComponentMaps, buildExternalComponentMaps, defineCollection, defineComponent, defineExternalComponent, } from './cmsRegistration';
43
+ export { BannerManager } from './components/banner/BannerManager';
43
44
  export { ClientMonitor } from './components/ClientMonitor.js';
44
45
  export { CmsCollection } from './components/CmsCollection';
45
46
  export { CmsComponent } from './components/CmsComponent';
@@ -66,6 +67,7 @@ export { showComponentError, showInlineError } from './framework/componentErrors
66
67
  export { default as ResponsiveVisual } from './framework/ResponsiveVisual';
67
68
  // Shared Hooks
68
69
  export { useClickTracking } from './hooks/useClickTracking';
70
+ export { onVisibleToUser, useClientOnly, useDocumentVisible, useFirstVisibleCallback, useFirstVisibleToUser, useVisibleToUser, } from './hooks/visibility';
69
71
  export { RTF } from './rtf/rtf';
70
72
  // CMS Showcase
71
73
  export * from './showcase';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,kDAAkD;AAElD,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACvF,qBAAqB;AACrB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASxD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAS9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAQrE,uBAAuB;AACvB,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,oBAAoB;AACpB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,WAAW;AACX,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,eAAe;AACf,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAC5F,mBAAmB;AACnB,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,wBAAwB;AACxB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -2,7 +2,7 @@ export interface ErrorContext {
2
2
  componentStack?: string;
3
3
  [key: string]: unknown;
4
4
  }
5
- export interface ErrorReporter {
5
+ interface ErrorReporter {
6
6
  captureException(error: Error, context?: ErrorContext): void;
7
7
  }
8
8
  /**
@@ -13,4 +13,5 @@ export declare function initErrorMonitoring(reporter: ErrorReporter): void;
13
13
  * Capture an exception
14
14
  */
15
15
  export declare function captureException(error: unknown, context?: ErrorContext): void;
16
+ export {};
16
17
  //# sourceMappingURL=errorMonitoring.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errorMonitoring.d.ts","sourceRoot":"","sources":["../../src/utils/errorMonitoring.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9D;AAgBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,QAE1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,QAGtE"}
1
+ {"version":3,"file":"errorMonitoring.d.ts","sourceRoot":"","sources":["../../src/utils/errorMonitoring.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,aAAa;IACrB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9D;AAgBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,QAE1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,QAGtE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/core-ui",
3
- "version": "1.0.52",
3
+ "version": "1.0.53",
4
4
  "description": "Shared React UI component library with Tailwind CSS v4 for SE Studio applications",
5
5
  "repository": {
6
6
  "type": "git",
@@ -55,33 +55,24 @@
55
55
  "@extractus/oembed-extractor": "^4.0.9",
56
56
  "@radix-ui/react-slot": "^1.2.4",
57
57
  "@types/mustache": "4.2.6",
58
- "change-case": "^5.4.4",
59
58
  "clsx": "^2.1.1",
60
59
  "html-entities": "^2.6.0",
61
60
  "mustache": "4.2.0",
62
61
  "tailwind-merge": "^3.4.0",
63
- "@se-studio/core-data-types": "1.0.52",
64
- "@se-studio/contentful-rest-api": "1.0.52"
62
+ "@se-studio/contentful-rest-api": "1.0.53",
63
+ "@se-studio/core-data-types": "1.0.53"
65
64
  },
66
65
  "devDependencies": {
67
66
  "@biomejs/biome": "^2.3.11",
68
- "@testing-library/jest-dom": "^6.9.1",
69
- "@testing-library/react": "^16.3.1",
70
- "@types/node": "^22.19.5",
71
- "@types/react": "^19.2.7",
67
+ "@types/node": "^22.19.7",
68
+ "@types/react": "^19.2.8",
72
69
  "@types/react-dom": "^19.2.3",
73
- "@vitejs/plugin-react": "^5.1.2",
74
- "jsdom": "^27.4.0",
75
70
  "next": "^15.5.9",
76
- "tsup": "^8.5.1",
77
- "typescript": "^5.9.3",
78
- "vitest": "^4.0.16"
71
+ "typescript": "^5.9.3"
79
72
  },
80
73
  "scripts": {
81
74
  "build": "tsc --project tsconfig.build.json",
82
75
  "dev": "tsc --project tsconfig.build.json --watch",
83
- "test": "vitest run",
84
- "test:watch": "vitest",
85
76
  "type-check": "tsc --noEmit",
86
77
  "lint": "biome lint .",
87
78
  "clean": "rm -rf dist .turbo *.tsbuildinfo"