@se-studio/core-ui 1.0.13 → 1.0.15

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 (114) hide show
  1. package/README.md +78 -14
  2. package/dist/CmsRendererConfig.d.ts +122 -0
  3. package/dist/CmsRendererConfig.d.ts.map +1 -1
  4. package/dist/analytics/AnalyticsProvider.d.ts +16 -0
  5. package/dist/analytics/AnalyticsProvider.d.ts.map +1 -0
  6. package/dist/analytics/AnalyticsProvider.js +22 -0
  7. package/dist/analytics/AnalyticsProvider.js.map +1 -0
  8. package/dist/analytics/adapters/ConsoleAnalyticsAdapter.d.ts +12 -0
  9. package/dist/analytics/adapters/ConsoleAnalyticsAdapter.d.ts.map +1 -0
  10. package/dist/analytics/adapters/ConsoleAnalyticsAdapter.js +21 -0
  11. package/dist/analytics/adapters/ConsoleAnalyticsAdapter.js.map +1 -0
  12. package/dist/analytics/adapters/index.d.ts +2 -0
  13. package/dist/analytics/adapters/index.d.ts.map +1 -0
  14. package/dist/analytics/adapters/index.js +2 -0
  15. package/dist/analytics/adapters/index.js.map +1 -0
  16. package/dist/analytics/types.d.ts +41 -0
  17. package/dist/analytics/types.d.ts.map +1 -0
  18. package/dist/analytics/types.js +2 -0
  19. package/dist/analytics/types.js.map +1 -0
  20. package/dist/analytics/useAnalytics.d.ts +45 -0
  21. package/dist/analytics/useAnalytics.d.ts.map +1 -0
  22. package/dist/analytics/useAnalytics.js +70 -0
  23. package/dist/analytics/useAnalytics.js.map +1 -0
  24. package/dist/components/ClientMonitor.d.ts +1 -0
  25. package/dist/components/ClientMonitor.d.ts.map +1 -1
  26. package/dist/components/ClientMonitor.js +223 -18
  27. package/dist/components/ClientMonitor.js.map +1 -1
  28. package/dist/components/CmsCollection.d.ts +47 -0
  29. package/dist/components/CmsCollection.d.ts.map +1 -1
  30. package/dist/components/CmsCollection.js +7 -0
  31. package/dist/components/CmsCollection.js.map +1 -1
  32. package/dist/components/CmsComponent.d.ts +47 -0
  33. package/dist/components/CmsComponent.d.ts.map +1 -1
  34. package/dist/components/CmsComponent.js +7 -0
  35. package/dist/components/CmsComponent.js.map +1 -1
  36. package/dist/components/CmsContent.d.ts +62 -0
  37. package/dist/components/CmsContent.d.ts.map +1 -1
  38. package/dist/components/CmsContent.js +53 -0
  39. package/dist/components/CmsContent.js.map +1 -1
  40. package/dist/components/CmsConversionErrors.js +2 -0
  41. package/dist/components/CmsConversionErrors.js.map +1 -1
  42. package/dist/components/CmsEmbeddedContent.d.ts +3 -0
  43. package/dist/components/CmsEmbeddedContent.d.ts.map +1 -1
  44. package/dist/components/CmsEmbeddedContent.js +3 -0
  45. package/dist/components/CmsEmbeddedContent.js.map +1 -1
  46. package/dist/components/CmsExternalComponent.d.ts +44 -0
  47. package/dist/components/CmsExternalComponent.d.ts.map +1 -1
  48. package/dist/components/CmsExternalComponent.js +7 -0
  49. package/dist/components/CmsExternalComponent.js.map +1 -1
  50. package/dist/components/ImageKitClientVideo.js +1 -0
  51. package/dist/components/ImageKitClientVideo.js.map +1 -1
  52. package/dist/components/SvgComponent.js +3 -1
  53. package/dist/components/SvgComponent.js.map +1 -1
  54. package/dist/components/VisualComponent.d.ts +47 -0
  55. package/dist/components/VisualComponent.d.ts.map +1 -1
  56. package/dist/components/VisualComponent.js +47 -0
  57. package/dist/components/VisualComponent.js.map +1 -1
  58. package/dist/elements/TrackedLink.d.ts +24 -0
  59. package/dist/elements/TrackedLink.d.ts.map +1 -0
  60. package/dist/elements/TrackedLink.js +76 -0
  61. package/dist/elements/TrackedLink.js.map +1 -0
  62. package/dist/framework/BackgroundMedia.js +5 -1
  63. package/dist/framework/BackgroundMedia.js.map +1 -1
  64. package/dist/framework/ComponentErrorIndicator.js +7 -4
  65. package/dist/framework/ComponentErrorIndicator.js.map +1 -1
  66. package/dist/framework/componentErrors.d.ts +8 -0
  67. package/dist/framework/componentErrors.d.ts.map +1 -1
  68. package/dist/framework/componentErrors.js +10 -0
  69. package/dist/framework/componentErrors.js.map +1 -1
  70. package/dist/hooks/useClickTracking.d.ts +39 -0
  71. package/dist/hooks/useClickTracking.d.ts.map +1 -1
  72. package/dist/hooks/useClickTracking.js +29 -0
  73. package/dist/hooks/useClickTracking.js.map +1 -1
  74. package/dist/index.d.ts +41 -1
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +48 -1
  77. package/dist/index.js.map +1 -1
  78. package/dist/rtf/rtf.d.ts +41 -0
  79. package/dist/rtf/rtf.d.ts.map +1 -1
  80. package/dist/rtf/rtf.js +36 -0
  81. package/dist/rtf/rtf.js.map +1 -1
  82. package/dist/utils/UnsupportedWarning.d.ts +23 -0
  83. package/dist/utils/UnsupportedWarning.d.ts.map +1 -1
  84. package/dist/utils/UnsupportedWarning.js +24 -0
  85. package/dist/utils/UnsupportedWarning.js.map +1 -1
  86. package/dist/utils/UnusedChecker.d.ts +39 -0
  87. package/dist/utils/UnusedChecker.d.ts.map +1 -1
  88. package/dist/utils/UnusedChecker.js +47 -3
  89. package/dist/utils/UnusedChecker.js.map +1 -1
  90. package/dist/utils/buildPageMetadata.d.ts +45 -0
  91. package/dist/utils/buildPageMetadata.d.ts.map +1 -1
  92. package/dist/utils/buildPageMetadata.js +37 -0
  93. package/dist/utils/buildPageMetadata.js.map +1 -1
  94. package/dist/utils/cn.d.ts +26 -0
  95. package/dist/utils/cn.d.ts.map +1 -1
  96. package/dist/utils/cn.js +26 -0
  97. package/dist/utils/cn.js.map +1 -1
  98. package/dist/utils/componentUtils.d.ts +121 -0
  99. package/dist/utils/componentUtils.d.ts.map +1 -1
  100. package/dist/utils/componentUtils.js +80 -0
  101. package/dist/utils/componentUtils.js.map +1 -1
  102. package/dist/utils/convertText.js +10 -2
  103. package/dist/utils/convertText.js.map +1 -1
  104. package/dist/utils/errorHandling.d.ts +27 -0
  105. package/dist/utils/errorHandling.d.ts.map +1 -1
  106. package/dist/utils/errorHandling.js +33 -0
  107. package/dist/utils/errorHandling.js.map +1 -1
  108. package/dist/utils/previewUtils.js +2 -0
  109. package/dist/utils/previewUtils.js.map +1 -1
  110. package/package.json +22 -8
  111. package/dist/elements/UtmLinkOrDiv.d.ts +0 -5
  112. package/dist/elements/UtmLinkOrDiv.d.ts.map +0 -1
  113. package/dist/elements/UtmLinkOrDiv.js +0 -9
  114. package/dist/elements/UtmLinkOrDiv.js.map +0 -1
package/README.md CHANGED
@@ -87,6 +87,51 @@ In your Next.js app layout or root component:
87
87
  import '@se-studio/core-ui/styles';
88
88
  ```
89
89
 
90
+ ### Analytics Integration
91
+
92
+ Core UI ships analytics primitives but intentionally does not select a vendor.
93
+ Wrap your app with `AnalyticsProvider` and pass an adapter that implements the
94
+ `AnalyticsAdapter` interface.
95
+
96
+ ```tsx
97
+ import { AnalyticsProvider, ConsoleAnalyticsAdapter } from '@se-studio/core-ui';
98
+
99
+ const analyticsAdapter = new ConsoleAnalyticsAdapter(); // example adapter
100
+
101
+ export function AppProviders({ children }: { children: React.ReactNode }) {
102
+ return <AnalyticsProvider adapter={analyticsAdapter}>{children}</AnalyticsProvider>;
103
+ }
104
+ ```
105
+
106
+ Use the `useAnalytics` hook anywhere within the provider to trigger events:
107
+
108
+ ```tsx
109
+ import { useAnalytics } from '@se-studio/core-ui';
110
+
111
+ export function NewsletterCta() {
112
+ const { trackClick } = useAnalytics();
113
+
114
+ return (
115
+ <button
116
+ type="button"
117
+ onClick={() =>
118
+ trackClick('Button', 'Sign up', {
119
+ page_title: 'Home',
120
+ page_type: 'landing',
121
+ slug: 'home',
122
+ })
123
+ }
124
+ >
125
+ Sign up
126
+ </button>
127
+ );
128
+ }
129
+ ```
130
+
131
+ The provided `ConsoleAnalyticsAdapter` simply logs events for development and
132
+ documentation purposes. Each project should supply an adapter that forwards
133
+ events to its analytics platform of choice.
134
+
90
135
  ## Components
91
136
 
92
137
  ### CMS Infrastructure Components
@@ -278,20 +323,39 @@ const previewConfig = mergeCmsRendererConfig(
278
323
  );
279
324
  ```
280
325
 
281
- ## API Exports
282
-
283
- ### Component Configuration Types
284
-
285
- - `ComponentConfig<TComponent, TContext>` - Type-safe component configuration
286
- - `CollectionConfig<TCollection, TContext>` - Type-safe collection configuration
287
- - `CmsRendererConfig` - Complete renderer configuration type
288
-
289
- ### Utility Functions
290
-
291
- - `buildPageMetadata(page)` - Generate Next.js metadata from page data
292
- - `handleCmsError(error)` - Error handling utility for CMS operations
293
- - `extractComponentInfo(component, config)` - Extract component rendering info
294
- - `extractCollectionInfo(collection, config)` - Extract collection rendering info
326
+ ## API Reference
327
+
328
+ ### Main Exports
329
+
330
+ #### Components
331
+ - **`CmsContent`** - Main component for rendering CMS content with automatic component mapping
332
+ - **`CmsComponent`** - Renders individual CMS components with type-based routing
333
+ - **`CmsCollection`** - Renders CMS collections (arrays of components)
334
+ - **`Visual`** - Optimized image/video/animation component with Next.js Image integration
335
+ - **`RTF`** - Renders Contentful rich text with support for embedded entries and assets
336
+ - **`UnusedChecker`** - Development utility to detect unused CMS content types
337
+
338
+ #### Hooks
339
+ - **`useAnalytics`** - Hook for accessing analytics functions (trackEvent, trackPage, trackClick)
340
+ - **`useClickTracking`** - Hook for tracking click events with analytics
341
+ - **`useDocumentVisible`** - Hook for tracking document visibility
342
+
343
+ #### Utilities
344
+ - **`buildPageMetadata`** - Generates Next.js metadata object from CMS page model
345
+ - **`handleCmsError`** - Error handling utility for CMS operations
346
+ - **`extractComponentInfo`** - Extract specific component information fields
347
+ - **`extractCollectionInfo`** - Extract specific collection information fields
348
+ - **`extractPageContext`** - Extract specific page context fields
349
+ - **`cn`** - Utility function for merging Tailwind CSS classes
350
+
351
+ #### Types
352
+ - **`CmsRendererConfig`** - Complete renderer configuration type
353
+ - **`ComponentRenderer<T>`** - Type for component renderer functions
354
+ - **`CollectionRenderer<T>`** - Type for collection renderer functions
355
+ - **`ComponentConfig<T>`** - Type-safe component configuration
356
+ - **`CollectionConfig<T>`** - Type-safe collection configuration
357
+
358
+ For detailed JSDoc documentation on all exports, see the TypeScript declaration files (`.d.ts`) in the package.
295
359
 
296
360
  ## Advanced Usage
297
361
 
@@ -1,3 +1,4 @@
1
+ /** biome-ignore-all lint/suspicious/noExplicitAny: Any is allowed */
1
2
  import type { IContentContext } from '@se-studio/core-data-types';
2
3
  import type { React } from 'next/dist/server/route-modules/app-page/vendored/rsc/entrypoints';
3
4
  import type { CollectionMap, CollectionRenderer, EmbeddedCollectionMap } from './components/CmsCollection';
@@ -12,20 +13,141 @@ export type CmsRendererTypes = {
12
13
  ExternaComponentNameType: string;
13
14
  ExternalComponentType: any;
14
15
  };
16
+ /**
17
+ * Configuration object that bundles all CMS renderer maps and display options.
18
+ * Create this once at the project level and pass it to CmsContent.
19
+ *
20
+ * This provides a clean, extensible API for configuring how CMS content is rendered,
21
+ * making it easy to add new renderer types without breaking existing code.
22
+ *
23
+ * @example Basic configuration
24
+ * ```tsx
25
+ * const rendererConfig = createCmsRendererConfig<MyProjectConfig>({
26
+ * componentMap: {
27
+ * "Hero": HeroComponent,
28
+ * "CTA": CTAComponent,
29
+ * "Content Block": ContentBlock,
30
+ * },
31
+ * collectionMap: {
32
+ * "FAQs": FAQCollection,
33
+ * "Related Articles": RelatedArticles,
34
+ * },
35
+ * showUnknownTypeErrors: process.env.NODE_ENV === 'development',
36
+ * });
37
+ * ```
38
+ *
39
+ * @example With all renderer types
40
+ * ```tsx
41
+ * const rendererConfig = createCmsRendererConfig<MyProjectConfig>({
42
+ * componentMap: { ... },
43
+ * collectionMap: { ... },
44
+ * externalComponentMap: {
45
+ * "Contact Form": ContactFormRenderer,
46
+ * "Newsletter": NewsletterRenderer,
47
+ * },
48
+ * visualComponentRenderer: VisualRenderer,
49
+ * internalLinkRenderer: InternalLinkRenderer,
50
+ * showUnknownTypeErrors: true,
51
+ * showRenderErrors: true,
52
+ * });
53
+ * ```
54
+ */
15
55
  export interface CmsRendererConfig<TConfig extends CmsRendererTypes = CmsRendererTypes> {
56
+ /**
57
+ * Map of component types to their renderers.
58
+ * Each key should match a ComponentType from your CMS configuration.
59
+ *
60
+ * @example
61
+ * ```tsx
62
+ * componentMap: {
63
+ * "Hero": HeroComponent,
64
+ * "CTA": CTAComponent,
65
+ * }
66
+ * ```
67
+ */
16
68
  componentMap: ComponentMap<TConfig['ComponentNameType'], TConfig['ComponentType']>;
17
69
  embeddedComponentMap: EmbeddedComponentMap<TConfig['ComponentNameType'], TConfig['ComponentType']>;
70
+ /**
71
+ * Map of collection types to their renderers.
72
+ * Each key should match a CollectionType from your CMS configuration.
73
+ *
74
+ * @example
75
+ * ```tsx
76
+ * collectionMap: {
77
+ * "FAQs": FAQCollection,
78
+ * "Related Articles": RelatedArticles,
79
+ * }
80
+ * ```
81
+ */
18
82
  collectionMap: CollectionMap<TConfig['CollectionNameType'], TConfig['CollectionType']>;
19
83
  embeddedCollectionMap: EmbeddedCollectionMap<TConfig['CollectionNameType'], TConfig['CollectionType']>;
84
+ /**
85
+ * Map of external component types to their renderers (optional).
86
+ * Use this for third-party integrations, forms, widgets, etc.
87
+ *
88
+ * @example
89
+ * ```tsx
90
+ * externalComponentMap: {
91
+ * "Contact Form": ContactFormRenderer,
92
+ * "Newsletter": NewsletterRenderer,
93
+ * }
94
+ * ```
95
+ */
20
96
  externalComponentMap: ExternalComponentMap<TConfig['ExternaComponentNameType'], TConfig['ExternalComponentType']>;
21
97
  embeddedExternalComponentMap: EmbeddedExternalComponentMap<TConfig['ExternaComponentNameType'], TConfig['ExternalComponentType']>;
98
+ /**
99
+ * Renderer for Visual content types (optional).
100
+ * Use this to define how images, videos, and other visual assets are rendered.
101
+ *
102
+ * @example
103
+ * ```tsx
104
+ * visualComponentRenderer: ({ information, contentContext }) => (
105
+ * <VisualComponent visual={information} />
106
+ * )
107
+ * ```
108
+ */
22
109
  visualComponentRenderer: VisualComponentRenderer;
110
+ /**
111
+ * Renderer for Internal Link content types (optional).
112
+ * Use this to define how internal navigation links are rendered.
113
+ *
114
+ * @example
115
+ * ```tsx
116
+ * internalLinkRenderer: ({ information }) => (
117
+ * <Link href={information.href}>{information.text}</Link>
118
+ * )
119
+ * ```
120
+ */
23
121
  internalLinkRenderer: InternalLinkRenderer;
122
+ /**
123
+ * Map of custom content types to their renderers (optional).
124
+ * Use this for project-specific content types that extend the base CMS content model.
125
+ *
126
+ * @example
127
+ * ```tsx
128
+ * customContentMap: {
129
+ * "pricingPlan": PricingPlanRenderer,
130
+ * "testimonial": TestimonialRenderer,
131
+ * }
132
+ * ```
133
+ */
24
134
  customContentMap?: Partial<Record<string, React.FC<{
25
135
  information: any;
26
136
  contentContext: IContentContext;
27
137
  }>>>;
138
+ /**
139
+ * Show error panels for unknown content types in development mode (default: false).
140
+ * When true, displays a visual warning when a component/collection type is not mapped.
141
+ *
142
+ * Recommended: Set to `process.env.NODE_ENV === 'development'`
143
+ */
28
144
  showUnknownTypeErrors: boolean;
145
+ /**
146
+ * Show error panels for rendering errors (default: false).
147
+ * When true, displays error details when a component throws during rendering.
148
+ *
149
+ * Recommended: Set to `process.env.NODE_ENV === 'development'`
150
+ */
29
151
  showRenderErrors: boolean;
30
152
  defaultComponentRenderer: ComponentRenderer<any>;
31
153
  defaultCollectionRenderer: CollectionRenderer<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"CmsRendererConfig.d.ts","sourceRoot":"","sources":["../src/CmsRendererConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kEAAkE,CAAC;AAC9F,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EACV,4BAA4B,EAC5B,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,GAAG,CAAC;IACpB,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,GAAG,CAAC;CAC5B,CAAC;AAyCF,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,gBAAgB,GAAG,gBAAgB;IAapF,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IAEnF,oBAAoB,EAAE,oBAAoB,CACxC,OAAO,CAAC,mBAAmB,CAAC,EAC5B,OAAO,CAAC,eAAe,CAAC,CACzB,CAAC;IAcF,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvF,qBAAqB,EAAE,qBAAqB,CAC1C,OAAO,CAAC,oBAAoB,CAAC,EAC7B,OAAO,CAAC,gBAAgB,CAAC,CAC1B,CAAC;IAcF,oBAAoB,EAAE,oBAAoB,CACxC,OAAO,CAAC,0BAA0B,CAAC,EACnC,OAAO,CAAC,uBAAuB,CAAC,CACjC,CAAC;IACF,4BAA4B,EAAE,4BAA4B,CACxD,OAAO,CAAC,0BAA0B,CAAC,EACnC,OAAO,CAAC,uBAAuB,CAAC,CACjC,CAAC;IAaF,uBAAuB,EAAE,uBAAuB,CAAC;IAajD,oBAAoB,EAAE,oBAAoB,CAAC;IAc3C,gBAAgB,CAAC,EAAE,OAAO,CACxB,MAAM,CACJ,MAAM,EACN,KAAK,CAAC,EAAE,CAAC;QACP,WAAW,EAAE,GAAG,CAAC;QACjB,cAAc,EAAE,eAAe,CAAC;KACjC,CAAC,CACH,CACF,CAAC;IAQF,qBAAqB,EAAE,OAAO,CAAC;IAQ/B,gBAAgB,EAAE,OAAO,CAAC;IAE1B,wBAAwB,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACjD,yBAAyB,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;CACpD"}
1
+ {"version":3,"file":"CmsRendererConfig.d.ts","sourceRoot":"","sources":["../src/CmsRendererConfig.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kEAAkE,CAAC;AAC9F,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EACV,4BAA4B,EAC5B,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,GAAG,CAAC;IACpB,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,GAAG,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,gBAAgB,GAAG,gBAAgB;IACpF;;;;;;;;;;;OAWG;IACH,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IAEnF,oBAAoB,EAAE,oBAAoB,CACxC,OAAO,CAAC,mBAAmB,CAAC,EAC5B,OAAO,CAAC,eAAe,CAAC,CACzB,CAAC;IAEF;;;;;;;;;;;OAWG;IACH,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvF,qBAAqB,EAAE,qBAAqB,CAC1C,OAAO,CAAC,oBAAoB,CAAC,EAC7B,OAAO,CAAC,gBAAgB,CAAC,CAC1B,CAAC;IAEF;;;;;;;;;;;OAWG;IACH,oBAAoB,EAAE,oBAAoB,CACxC,OAAO,CAAC,0BAA0B,CAAC,EACnC,OAAO,CAAC,uBAAuB,CAAC,CACjC,CAAC;IACF,4BAA4B,EAAE,4BAA4B,CACxD,OAAO,CAAC,0BAA0B,CAAC,EACnC,OAAO,CAAC,uBAAuB,CAAC,CACjC,CAAC;IAEF;;;;;;;;;;OAUG;IACH,uBAAuB,EAAE,uBAAuB,CAAC;IAEjD;;;;;;;;;;OAUG;IACH,oBAAoB,EAAE,oBAAoB,CAAC;IAE3C;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,OAAO,CACxB,MAAM,CACJ,MAAM,EACN,KAAK,CAAC,EAAE,CAAC;QACP,WAAW,EAAE,GAAG,CAAC;QACjB,cAAc,EAAE,eAAe,CAAC;KACjC,CAAC,CACH,CACF,CAAC;IAEF;;;;;OAKG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAE/B;;;;;OAKG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B,wBAAwB,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACjD,yBAAyB,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;CACpD"}
@@ -0,0 +1,16 @@
1
+ import type React from 'react';
2
+ import type { AnalyticsAdapter } from './types';
3
+ export interface AnalyticsProviderProps {
4
+ adapter: AnalyticsAdapter;
5
+ children: React.ReactNode;
6
+ }
7
+ /**
8
+ * Provider component that makes analytics adapter available to child components
9
+ */
10
+ export declare function AnalyticsProvider({ adapter, children }: AnalyticsProviderProps): import("react/jsx-runtime").JSX.Element;
11
+ /**
12
+ * Hook to access the analytics adapter from context
13
+ * @throws Error if used outside of AnalyticsProvider
14
+ */
15
+ export declare function useAnalyticsContext(): AnalyticsAdapter;
16
+ //# sourceMappingURL=AnalyticsProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsProvider.d.ts","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIhD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CAE9E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAMtD"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext } from 'react';
4
+ const AnalyticsContext = createContext(null);
5
+ /**
6
+ * Provider component that makes analytics adapter available to child components
7
+ */
8
+ export function AnalyticsProvider({ adapter, children }) {
9
+ return _jsx(AnalyticsContext.Provider, { value: adapter, children: children });
10
+ }
11
+ /**
12
+ * Hook to access the analytics adapter from context
13
+ * @throws Error if used outside of AnalyticsProvider
14
+ */
15
+ export function useAnalyticsContext() {
16
+ const adapter = useContext(AnalyticsContext);
17
+ if (!adapter) {
18
+ throw new Error('useAnalyticsContext must be used within an AnalyticsProvider');
19
+ }
20
+ return adapter;
21
+ }
22
+ //# sourceMappingURL=AnalyticsProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsProvider.js","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,MAAM,gBAAgB,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAOtE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAA0B;IAC7E,OAAO,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA6B,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { AnalyticsAdapter, ClickTrackingProperties, PageTrackingProperties } from '../types';
2
+ /**
3
+ * Console adapter used as the default/example implementation.
4
+ * Customer projects should provide their own adapter that satisfies `AnalyticsAdapter`.
5
+ */
6
+ export declare class ConsoleAnalyticsAdapter implements AnalyticsAdapter {
7
+ private log;
8
+ trackEvent(event: string, properties: Record<string, unknown>): void;
9
+ trackPage(url: string, properties: PageTrackingProperties): void;
10
+ trackClick(properties: ClickTrackingProperties): void;
11
+ }
12
+ //# sourceMappingURL=ConsoleAnalyticsAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleAnalyticsAdapter.d.ts","sourceRoot":"","sources":["../../../src/analytics/adapters/ConsoleAnalyticsAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAElG;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D,OAAO,CAAC,GAAG;IAKX,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIpE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,GAAG,IAAI;IAIhE,UAAU,CAAC,UAAU,EAAE,uBAAuB,GAAG,IAAI;CAGtD"}
@@ -0,0 +1,21 @@
1
+ 'use client';
2
+ /**
3
+ * Console adapter used as the default/example implementation.
4
+ * Customer projects should provide their own adapter that satisfies `AnalyticsAdapter`.
5
+ */
6
+ export class ConsoleAnalyticsAdapter {
7
+ log(...args) {
8
+ // eslint-disable-next-line no-console -- intentional logging adapter
9
+ console.log('[Analytics]', ...args);
10
+ }
11
+ trackEvent(event, properties) {
12
+ this.log('event', event, properties);
13
+ }
14
+ trackPage(url, properties) {
15
+ this.log('page', { ...properties, url });
16
+ }
17
+ trackClick(properties) {
18
+ this.log('click', properties);
19
+ }
20
+ }
21
+ //# sourceMappingURL=ConsoleAnalyticsAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleAnalyticsAdapter.js","sourceRoot":"","sources":["../../../src/analytics/adapters/ConsoleAnalyticsAdapter.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAC1B,GAAG,CAAC,GAAG,IAAe;QAC5B,qEAAqE;QACrE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,UAAmC;QAC3D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,UAAkC;QACvD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,UAAU,CAAC,UAAmC;QAC5C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { ConsoleAnalyticsAdapter } from './ConsoleAnalyticsAdapter';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ConsoleAnalyticsAdapter } from './ConsoleAnalyticsAdapter';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { IAnalyticsContext } from '@se-studio/core-data-types';
2
+ /**
3
+ * Properties for tracking a click event
4
+ */
5
+ export interface ClickTrackingProperties extends IAnalyticsContext {
6
+ componentType: string;
7
+ url: string;
8
+ targetUrl?: string;
9
+ linkText: string;
10
+ location?: string;
11
+ }
12
+ /**
13
+ * Properties for tracking a page view
14
+ */
15
+ export interface PageTrackingProperties extends IAnalyticsContext {
16
+ url: string;
17
+ pathname: string;
18
+ }
19
+ /**
20
+ * Interface that analytics adapters must implement
21
+ */
22
+ export interface AnalyticsAdapter {
23
+ /**
24
+ * Track a custom event
25
+ * @param event - Event name
26
+ * @param properties - Event properties
27
+ */
28
+ trackEvent(event: string, properties: Record<string, unknown>): void;
29
+ /**
30
+ * Track a page view
31
+ * @param url - Full URL of the page
32
+ * @param properties - Page properties
33
+ */
34
+ trackPage(url: string, properties: PageTrackingProperties): void;
35
+ /**
36
+ * Track a component click
37
+ * @param properties - Click tracking properties
38
+ */
39
+ trackClick(properties: ClickTrackingProperties): void;
40
+ }
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAErE;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAEjE;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACvD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import type { IAnalyticsContext } from '@se-studio/core-data-types';
2
+ /**
3
+ * Hook for accessing analytics functions.
4
+ *
5
+ * Provides a clean API for tracking events, pages, and clicks. Must be used
6
+ * within an AnalyticsProvider context.
7
+ *
8
+ * @returns Object with tracking functions:
9
+ * - `trackEvent` - Track custom events
10
+ * - `trackPage` - Track page views
11
+ * - `trackClick` - Track click interactions
12
+ *
13
+ * @throws {Error} If used outside of AnalyticsProvider
14
+ *
15
+ * @example Basic usage
16
+ * ```tsx
17
+ * import { useAnalytics } from '@se-studio/core-ui';
18
+ *
19
+ * function MyComponent() {
20
+ * const { trackClick, trackPage } = useAnalytics();
21
+ *
22
+ * useEffect(() => {
23
+ * trackPage(window.location.href, window.location.pathname, {
24
+ * page_title: 'Home',
25
+ * page_type: 'landing',
26
+ * });
27
+ * }, []);
28
+ *
29
+ * return (
30
+ * <button onClick={() => trackClick('Button', 'Sign up', { page_title: 'Home' })}>
31
+ * Sign up
32
+ * </button>
33
+ * );
34
+ * }
35
+ * ```
36
+ */
37
+ export declare function useAnalytics(): {
38
+ trackEvent: (event: string, properties: Record<string, unknown>) => void;
39
+ trackPage: (url: string, pathname: string, analyticsContext: IAnalyticsContext) => void;
40
+ trackClick: (componentType: string, linkText: string, analyticsContext: IAnalyticsContext, options?: {
41
+ targetUrl?: string;
42
+ location?: string;
43
+ }) => void;
44
+ };
45
+ //# sourceMappingURL=useAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnalytics.d.ts","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAKpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,YAAY;wBAIhB,MAAM,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAO7C,MAAM,YAAY,MAAM,oBAAoB,iBAAiB;gCAalD,MAAM,YACX,MAAM,oBACE,iBAAiB,YACzB;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;EAqBN"}
@@ -0,0 +1,70 @@
1
+ 'use client';
2
+ import { useCallback } from 'react';
3
+ import { useAnalyticsContext } from './AnalyticsProvider';
4
+ /**
5
+ * Hook for accessing analytics functions.
6
+ *
7
+ * Provides a clean API for tracking events, pages, and clicks. Must be used
8
+ * within an AnalyticsProvider context.
9
+ *
10
+ * @returns Object with tracking functions:
11
+ * - `trackEvent` - Track custom events
12
+ * - `trackPage` - Track page views
13
+ * - `trackClick` - Track click interactions
14
+ *
15
+ * @throws {Error} If used outside of AnalyticsProvider
16
+ *
17
+ * @example Basic usage
18
+ * ```tsx
19
+ * import { useAnalytics } from '@se-studio/core-ui';
20
+ *
21
+ * function MyComponent() {
22
+ * const { trackClick, trackPage } = useAnalytics();
23
+ *
24
+ * useEffect(() => {
25
+ * trackPage(window.location.href, window.location.pathname, {
26
+ * page_title: 'Home',
27
+ * page_type: 'landing',
28
+ * });
29
+ * }, []);
30
+ *
31
+ * return (
32
+ * <button onClick={() => trackClick('Button', 'Sign up', { page_title: 'Home' })}>
33
+ * Sign up
34
+ * </button>
35
+ * );
36
+ * }
37
+ * ```
38
+ */
39
+ export function useAnalytics() {
40
+ const adapter = useAnalyticsContext();
41
+ const trackEvent = useCallback((event, properties) => {
42
+ adapter.trackEvent(event, properties);
43
+ }, [adapter]);
44
+ const trackPage = useCallback((url, pathname, analyticsContext) => {
45
+ const properties = {
46
+ url,
47
+ pathname,
48
+ ...analyticsContext,
49
+ };
50
+ adapter.trackPage(url, properties);
51
+ }, [adapter]);
52
+ const trackClick = useCallback((componentType, linkText, analyticsContext, options) => {
53
+ const url = typeof window !== 'undefined' ? window.location.href : '';
54
+ const properties = {
55
+ componentType,
56
+ url,
57
+ linkText,
58
+ location: options?.location,
59
+ targetUrl: options?.targetUrl,
60
+ ...analyticsContext,
61
+ };
62
+ adapter.trackClick(properties);
63
+ }, [adapter]);
64
+ return {
65
+ trackEvent,
66
+ trackPage,
67
+ trackClick,
68
+ };
69
+ }
70
+ //# sourceMappingURL=useAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnalytics.js","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IAEtC,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,KAAa,EAAE,UAAmC,EAAE,EAAE;QACrD,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,GAAW,EAAE,QAAgB,EAAE,gBAAmC,EAAE,EAAE;QACrE,MAAM,UAAU,GAA2B;YACzC,GAAG;YACH,QAAQ;YACR,GAAG,gBAAgB;SACpB,CAAC;QACF,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC5B,CACE,aAAqB,EACrB,QAAgB,EAChB,gBAAmC,EACnC,OAGC,EACD,EAAE;QACF,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,UAAU,GAA4B;YAC1C,aAAa;YACb,GAAG;YACH,QAAQ;YACR,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,GAAG,gBAAgB;SACpB,CAAC;QACF,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO;QACL,UAAU;QACV,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  interface ClientMonitorProps {
2
2
  defaultThreshold?: number;
3
+ enableDebug?: boolean;
3
4
  }
4
5
  export declare const ClientMonitor: React.FC<ClientMonitorProps>;
5
6
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ClientMonitor.d.ts","sourceRoot":"","sources":["../../src/components/ClientMonitor.tsx"],"names":[],"mappings":"AAmNA,UAAU,kBAAkB;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAatD,CAAC"}
1
+ {"version":3,"file":"ClientMonitor.d.ts","sourceRoot":"","sources":["../../src/components/ClientMonitor.tsx"],"names":[],"mappings":"AAkbA,UAAU,kBAAkB;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAuBtD,CAAC"}