@se-studio/core-ui 1.0.14 → 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.
- package/README.md +33 -14
- package/dist/CmsRendererConfig.d.ts +122 -0
- package/dist/CmsRendererConfig.d.ts.map +1 -1
- package/dist/analytics/AnalyticsProvider.d.ts +7 -0
- package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
- package/dist/analytics/AnalyticsProvider.js +7 -0
- package/dist/analytics/AnalyticsProvider.js.map +1 -1
- package/dist/analytics/adapters/ConsoleAnalyticsAdapter.d.ts +4 -0
- package/dist/analytics/adapters/ConsoleAnalyticsAdapter.d.ts.map +1 -1
- package/dist/analytics/adapters/ConsoleAnalyticsAdapter.js +5 -0
- package/dist/analytics/adapters/ConsoleAnalyticsAdapter.js.map +1 -1
- package/dist/analytics/types.d.ts +23 -0
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/analytics/useAnalytics.d.ts +35 -0
- package/dist/analytics/useAnalytics.d.ts.map +1 -1
- package/dist/analytics/useAnalytics.js +35 -0
- package/dist/analytics/useAnalytics.js.map +1 -1
- package/dist/components/ClientMonitor.js +36 -0
- package/dist/components/ClientMonitor.js.map +1 -1
- package/dist/components/CmsCollection.d.ts +47 -0
- package/dist/components/CmsCollection.d.ts.map +1 -1
- package/dist/components/CmsCollection.js +7 -0
- package/dist/components/CmsCollection.js.map +1 -1
- package/dist/components/CmsComponent.d.ts +47 -0
- package/dist/components/CmsComponent.d.ts.map +1 -1
- package/dist/components/CmsComponent.js +7 -0
- package/dist/components/CmsComponent.js.map +1 -1
- package/dist/components/CmsContent.d.ts +62 -0
- package/dist/components/CmsContent.d.ts.map +1 -1
- package/dist/components/CmsContent.js +53 -0
- package/dist/components/CmsContent.js.map +1 -1
- package/dist/components/CmsConversionErrors.js +2 -0
- package/dist/components/CmsConversionErrors.js.map +1 -1
- package/dist/components/CmsEmbeddedContent.d.ts +3 -0
- package/dist/components/CmsEmbeddedContent.d.ts.map +1 -1
- package/dist/components/CmsEmbeddedContent.js +3 -0
- package/dist/components/CmsEmbeddedContent.js.map +1 -1
- package/dist/components/CmsExternalComponent.d.ts +44 -0
- package/dist/components/CmsExternalComponent.d.ts.map +1 -1
- package/dist/components/CmsExternalComponent.js +7 -0
- package/dist/components/CmsExternalComponent.js.map +1 -1
- package/dist/components/ImageKitClientVideo.js +1 -0
- package/dist/components/ImageKitClientVideo.js.map +1 -1
- package/dist/components/SvgComponent.js +3 -1
- package/dist/components/SvgComponent.js.map +1 -1
- package/dist/components/VisualComponent.d.ts +47 -0
- package/dist/components/VisualComponent.d.ts.map +1 -1
- package/dist/components/VisualComponent.js +47 -0
- package/dist/components/VisualComponent.js.map +1 -1
- package/dist/elements/TrackedLink.d.ts +8 -0
- package/dist/elements/TrackedLink.d.ts.map +1 -1
- package/dist/elements/TrackedLink.js +13 -0
- package/dist/elements/TrackedLink.js.map +1 -1
- package/dist/framework/BackgroundMedia.js +5 -1
- package/dist/framework/BackgroundMedia.js.map +1 -1
- package/dist/framework/ComponentErrorIndicator.js +7 -4
- package/dist/framework/ComponentErrorIndicator.js.map +1 -1
- package/dist/framework/componentErrors.d.ts +8 -0
- package/dist/framework/componentErrors.d.ts.map +1 -1
- package/dist/framework/componentErrors.js +10 -0
- package/dist/framework/componentErrors.js.map +1 -1
- package/dist/hooks/useClickTracking.d.ts +39 -0
- package/dist/hooks/useClickTracking.d.ts.map +1 -1
- package/dist/hooks/useClickTracking.js +29 -0
- package/dist/hooks/useClickTracking.js.map +1 -1
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -1
- package/dist/rtf/rtf.d.ts +41 -0
- package/dist/rtf/rtf.d.ts.map +1 -1
- package/dist/rtf/rtf.js +36 -0
- package/dist/rtf/rtf.js.map +1 -1
- package/dist/utils/UnsupportedWarning.d.ts +23 -0
- package/dist/utils/UnsupportedWarning.d.ts.map +1 -1
- package/dist/utils/UnsupportedWarning.js +24 -0
- package/dist/utils/UnsupportedWarning.js.map +1 -1
- package/dist/utils/UnusedChecker.d.ts +39 -0
- package/dist/utils/UnusedChecker.d.ts.map +1 -1
- package/dist/utils/UnusedChecker.js +47 -3
- package/dist/utils/UnusedChecker.js.map +1 -1
- package/dist/utils/buildPageMetadata.d.ts +45 -0
- package/dist/utils/buildPageMetadata.d.ts.map +1 -1
- package/dist/utils/buildPageMetadata.js +37 -0
- package/dist/utils/buildPageMetadata.js.map +1 -1
- package/dist/utils/cn.d.ts +26 -0
- package/dist/utils/cn.d.ts.map +1 -1
- package/dist/utils/cn.js +26 -0
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/componentUtils.d.ts +121 -0
- package/dist/utils/componentUtils.d.ts.map +1 -1
- package/dist/utils/componentUtils.js +80 -0
- package/dist/utils/componentUtils.js.map +1 -1
- package/dist/utils/convertText.js +10 -2
- package/dist/utils/convertText.js.map +1 -1
- package/dist/utils/errorHandling.d.ts +27 -0
- package/dist/utils/errorHandling.d.ts.map +1 -1
- package/dist/utils/errorHandling.js +33 -0
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/previewUtils.js +2 -0
- package/dist/utils/previewUtils.js.map +1 -1
- package/package.json +17 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsExternalComponent.d.ts","sourceRoot":"","sources":["../../src/components/CmsExternalComponent.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CmsExternalComponent.d.ts","sourceRoot":"","sources":["../../src/components/CmsExternalComponent.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,MAAM,8BAA8B,CAAC,YAAY,SAAS,MAAM,IAAI;IACxE,WAAW,EAAE,YAAY,CAAC;IAC1B,cAAc,EAAE,eAAe,CAAC;IAChC,cAAc,EAAE,iBAAiB,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,yBAAyB,CAAC,YAAY,SAAS,MAAM,IAAI,KAAK,CAAC,EAAE,CAC3E,8BAA8B,CAAC,YAAY,CAAC,CAC7C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,iCAAiC,CAAC,YAAY,SAAS,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,EAAE,CAC5F,8BAA8B,CAAC,YAAY,CAAC,GAAG,qBAAqB,CACrE,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,IAAI,SAAS,MAAM,EAAE,YAAY,SAAS,MAAM,IAAI,OAAO,CAC1F,MAAM,CAAC,IAAI,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAC,CACtD,CAAC;AAEF,MAAM,MAAM,4BAA4B,CACtC,IAAI,SAAS,MAAM,EACnB,YAAY,SAAS,MAAM,IACzB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,iCAAiC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AA8C3E,eAAO,MAAM,oBAAoB,EAAE,yBAAyB,CAAC,sBAAsB,CA8ClF,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,iCAAiC,CAC1E,sBAAsB,CAqCvB,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Error component displayed in development/preview mode when an unknown collection type is encountered
|
|
4
|
+
*/
|
|
2
5
|
const ExternalComponentTypeError = ({ information, availableTypes, showInProduction = false, }) => {
|
|
3
6
|
if (!showInProduction && typeof process !== 'undefined' && process.env?.NODE_ENV === 'production')
|
|
4
7
|
return null;
|
|
@@ -17,8 +20,10 @@ export const CmsExternalComponent = ({ information, contentContext, rendererConf
|
|
|
17
20
|
const result = (_jsx(Element, { information: information, contentContext: contentContext, rendererConfig: rendererConfig }));
|
|
18
21
|
return result;
|
|
19
22
|
}
|
|
23
|
+
// Log unknown component type for monitoring
|
|
20
24
|
const availableTypes = Object.keys(externalComponentMap);
|
|
21
25
|
console.log(`Unknown external component type: ${String(information.externalType)} (ID: ${information.id}). Available types:`, availableTypes.join(','));
|
|
26
|
+
// Show warning in development/preview mode, use Generic fallback
|
|
22
27
|
const shouldShowError = showUnknownTypeErrors ||
|
|
23
28
|
(typeof process !== 'undefined' && process.env?.NODE_ENV === 'development');
|
|
24
29
|
const result = (_jsx(_Fragment, { children: shouldShowError && (_jsx(ExternalComponentTypeError, { information: information, availableTypes: availableTypes, showInProduction: showUnknownTypeErrors })) }));
|
|
@@ -31,8 +36,10 @@ export const CmsEmbeddedExternalComponent = ({ information, rendererConfig, ...p
|
|
|
31
36
|
const result = _jsx(Element, { information: information, rendererConfig: rendererConfig, ...props });
|
|
32
37
|
return result;
|
|
33
38
|
}
|
|
39
|
+
// Log unknown component type for monitoring
|
|
34
40
|
const availableTypes = Object.keys(embeddedExternalComponentMap);
|
|
35
41
|
console.log(`Unknown embedded external component type: ${String(information.externalType)} (ID: ${information.id}). Available types:`, availableTypes.join(','));
|
|
42
|
+
// Show warning in development/preview mode, use Generic fallback
|
|
36
43
|
const shouldShowError = showUnknownTypeErrors ||
|
|
37
44
|
(typeof process !== 'undefined' && process.env?.NODE_ENV === 'development');
|
|
38
45
|
const result = (_jsx(_Fragment, { children: shouldShowError && (_jsx(ExternalComponentTypeError, { information: information, availableTypes: availableTypes, showInProduction: showUnknownTypeErrors })) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsExternalComponent.js","sourceRoot":"","sources":["../../src/components/CmsExternalComponent.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"CmsExternalComponent.js","sourceRoot":"","sources":["../../src/components/CmsExternalComponent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ const VideoSources = ({ baseSrc, videoPrefix, width, visualSizes }) => {
|
|
|
9
9
|
?.breakpoints?.filter((x) => !width || x.pixels < width)
|
|
10
10
|
.sort((a, b) => a.minWidth - b.minWidth);
|
|
11
11
|
return (_jsxs(_Fragment, { children: [sizes?.map(({ minWidth, pixels }, index, arr) => {
|
|
12
|
+
// For video sources, convert minWidth back to max-width media queries
|
|
12
13
|
const nextBreakpoint = arr[index + 1];
|
|
13
14
|
const maxWidth = nextBreakpoint ? nextBreakpoint.minWidth - 1 : undefined;
|
|
14
15
|
return maxWidth ? (_jsx("source", { src: `${videoPrefix}${baseSrc}?tr=w-${pixels}`, media: `(max-width: ${maxWidth}px)`, type: "video/mp4" }, minWidth)) : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageKitClientVideo.js","sourceRoot":"","sources":["../../src/components/ImageKitClientVideo.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAyC,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,YAAY,GAKb,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;IACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,iBAAQ,GAAG,EAAE,GAAG,WAAW,GAAG,OAAO,EAAE,EAAE,IAAI,EAAC,WAAW,GAAG,CAAC;IACtE,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC;QACrC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE3C,OAAO,CACL,8BACG,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"ImageKitClientVideo.js","sourceRoot":"","sources":["../../src/components/ImageKitClientVideo.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAyC,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,YAAY,GAKb,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;IACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,iBAAQ,GAAG,EAAE,GAAG,WAAW,GAAG,OAAO,EAAE,EAAE,IAAI,EAAC,WAAW,GAAG,CAAC;IACtE,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC;QACrC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE3C,OAAO,CACL,8BACG,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC/C,sEAAsE;gBACtE,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAE1E,OAAO,QAAQ,CAAC,CAAC,CAAC,CAChB,iBAEE,GAAG,EAAE,GAAG,WAAW,GAAG,OAAO,SAAS,MAAM,EAAE,EAC9C,KAAK,EAAE,eAAe,QAAQ,KAAK,EACnC,IAAI,EAAC,WAAW,IAHX,QAAQ,CAIb,CACH,CAAC,CAAC,CAAC,IAAI,CAAC;YACX,CAAC,CAAC,EACD,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAC3B,iBACE,GAAG,EAAE,GAAG,WAAW,GAAG,OAAO,SAAS,WAAW,CAAC,aAAa,EAAE,EACjE,IAAI,EAAC,WAAW,GAChB,CACH,CAAC,CAAC,CAAC,CACF,iBAAQ,GAAG,EAAE,GAAG,WAAW,GAAG,OAAO,EAAE,EAAE,IAAI,EAAC,WAAW,GAAG,CAC7D,IACA,CACJ,CAAC;AACJ,CAAC,CAAC;AACF,SAAS,aAAa,CAAC,EACrB,GAAG,EACH,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,EACL,MAAM,EACN,WAAW,EACX,OAAO,EACP,aAAa,EACb,QAAQ,EACR,GAAG,KAAK,EAOG;IACX,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,cAAc,GAAG,oBAAoB,CAAC;QAC1C,QAAQ;QACR,oBAAoB;QACpB,sBAAsB;KACvB,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;IAChC,MAAM,SAAS,GAAG,KAAK,IAAI,YAAY,CAAC;IACxC,MAAM,YAAY,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;IAEnE,MAAM,OAAO,GAAG,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,WAAW,GAAG,OAAO,mBAAmB,CAAC,CAAC;IAElG,OAAO,CACL,gBACE,WAAW,EAAE,IAAI,EACjB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,cAAc,EAAE,EACtC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,KAAK,MAAM,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KACzE,KAAK,EACT,MAAM,EAAE,UAAU,YAElB,KAAC,YAAY,IAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,GAAI,GAChF,CACT,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -2,7 +2,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { calculateCropDetails } from './Visual';
|
|
3
3
|
function SvgComponent({ image, className, style, ...other }) {
|
|
4
4
|
const cropProperties = calculateCropDetails(image);
|
|
5
|
-
return (_jsx("div", { className: className, style: { ...style, ...cropProperties },
|
|
5
|
+
return (_jsx("div", { className: className, style: { ...style, ...cropProperties },
|
|
6
|
+
// biome-ignore lint/security/noDangerouslySetInnerHtml: Ok to set SVG inner HTML
|
|
7
|
+
dangerouslySetInnerHTML: { __html: image.data }, ...other }));
|
|
6
8
|
}
|
|
7
9
|
export default SvgComponent;
|
|
8
10
|
//# sourceMappingURL=SvgComponent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SvgComponent.js","sourceRoot":"","sources":["../../src/components/SvgComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAoB,MAAM,UAAU,CAAC;AAElE,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACgE;IACxE,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO,CACL,cACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"SvgComponent.js","sourceRoot":"","sources":["../../src/components/SvgComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAoB,MAAM,UAAU,CAAC;AAElE,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACgE;IACxE,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO,CACL,cACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,cAAc,EAAE;QACtC,iFAAiF;QACjF,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAC3C,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -1,6 +1,53 @@
|
|
|
1
1
|
import type { IVisual } from '@se-studio/core-data-types';
|
|
2
2
|
import type React from 'react';
|
|
3
3
|
import type { IVisualProps } from './Visual';
|
|
4
|
+
/**
|
|
5
|
+
* Visual component for rendering images, videos, and animations.
|
|
6
|
+
*
|
|
7
|
+
* Automatically selects the appropriate renderer based on the visual type:
|
|
8
|
+
* - Animations (Lottie) are rendered via AnimationServer
|
|
9
|
+
* - Videos are rendered via VideoComponent with Next.js optimization
|
|
10
|
+
* - Images are rendered via ImageComponent with Next.js Image optimization
|
|
11
|
+
*
|
|
12
|
+
* @param visual - Visual data containing image, video, or animation
|
|
13
|
+
* @param muted - Whether video should be muted (default: false)
|
|
14
|
+
* @param controls - Whether video should show controls (default: false)
|
|
15
|
+
* @param autoPlay - Whether video/animation should autoplay (default: false)
|
|
16
|
+
* @param visualSizes - Responsive size configuration for the visual
|
|
17
|
+
* @param fullPlayer - Whether video should use full player mode (default: false)
|
|
18
|
+
* @param loop - Whether video/animation should loop (default: false)
|
|
19
|
+
* @param loopDelay - Delay between loops in milliseconds
|
|
20
|
+
* @param analyticsContext - Analytics context for tracking
|
|
21
|
+
* @param componentLabel - Label for analytics tracking
|
|
22
|
+
* @param className - Additional CSS classes
|
|
23
|
+
* @param style - Additional inline styles
|
|
24
|
+
*
|
|
25
|
+
* @example Basic image
|
|
26
|
+
* ```tsx
|
|
27
|
+
* <Visual visual={imageVisual} className="w-full h-auto" />
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example Video with autoplay
|
|
31
|
+
* ```tsx
|
|
32
|
+
* <Visual
|
|
33
|
+
* visual={videoVisual}
|
|
34
|
+
* autoPlay
|
|
35
|
+
* muted
|
|
36
|
+
* loop
|
|
37
|
+
* className="w-full"
|
|
38
|
+
* />
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @example Animation with loop delay
|
|
42
|
+
* ```tsx
|
|
43
|
+
* <Visual
|
|
44
|
+
* visual={animationVisual}
|
|
45
|
+
* autoPlay
|
|
46
|
+
* loop
|
|
47
|
+
* loopDelay={1000}
|
|
48
|
+
* />
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
4
51
|
export declare const Visual: React.FC<{
|
|
5
52
|
visual: IVisual;
|
|
6
53
|
} & IVisualProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualComponent.d.ts","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,YAAY,CAqD/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"VisualComponent.d.ts","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,YAAY,CAqD/D,CAAC"}
|
|
@@ -3,6 +3,53 @@ import { UnsupportedWarning } from '../utils/UnsupportedWarning';
|
|
|
3
3
|
import AnimationServer from './AnimationServer';
|
|
4
4
|
import ImageComponent from './ImageComponent';
|
|
5
5
|
import VideoComponent from './VideoComponent';
|
|
6
|
+
/**
|
|
7
|
+
* Visual component for rendering images, videos, and animations.
|
|
8
|
+
*
|
|
9
|
+
* Automatically selects the appropriate renderer based on the visual type:
|
|
10
|
+
* - Animations (Lottie) are rendered via AnimationServer
|
|
11
|
+
* - Videos are rendered via VideoComponent with Next.js optimization
|
|
12
|
+
* - Images are rendered via ImageComponent with Next.js Image optimization
|
|
13
|
+
*
|
|
14
|
+
* @param visual - Visual data containing image, video, or animation
|
|
15
|
+
* @param muted - Whether video should be muted (default: false)
|
|
16
|
+
* @param controls - Whether video should show controls (default: false)
|
|
17
|
+
* @param autoPlay - Whether video/animation should autoplay (default: false)
|
|
18
|
+
* @param visualSizes - Responsive size configuration for the visual
|
|
19
|
+
* @param fullPlayer - Whether video should use full player mode (default: false)
|
|
20
|
+
* @param loop - Whether video/animation should loop (default: false)
|
|
21
|
+
* @param loopDelay - Delay between loops in milliseconds
|
|
22
|
+
* @param analyticsContext - Analytics context for tracking
|
|
23
|
+
* @param componentLabel - Label for analytics tracking
|
|
24
|
+
* @param className - Additional CSS classes
|
|
25
|
+
* @param style - Additional inline styles
|
|
26
|
+
*
|
|
27
|
+
* @example Basic image
|
|
28
|
+
* ```tsx
|
|
29
|
+
* <Visual visual={imageVisual} className="w-full h-auto" />
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example Video with autoplay
|
|
33
|
+
* ```tsx
|
|
34
|
+
* <Visual
|
|
35
|
+
* visual={videoVisual}
|
|
36
|
+
* autoPlay
|
|
37
|
+
* muted
|
|
38
|
+
* loop
|
|
39
|
+
* className="w-full"
|
|
40
|
+
* />
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example Animation with loop delay
|
|
44
|
+
* ```tsx
|
|
45
|
+
* <Visual
|
|
46
|
+
* visual={animationVisual}
|
|
47
|
+
* autoPlay
|
|
48
|
+
* loop
|
|
49
|
+
* loopDelay={1000}
|
|
50
|
+
* />
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
6
53
|
export const Visual = ({ visual, muted, controls, autoPlay, visualSizes, fullPlayer, loop, loopDelay, analyticsContext, componentLabel, ...props }) => {
|
|
7
54
|
const { animation, image, video } = visual;
|
|
8
55
|
if (animation) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualComponent.js","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAG9C,MAAM,CAAC,MAAM,MAAM,GAAiD,CAAC,EACnE,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,IAAI,EACJ,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,KAAC,eAAe,IACd,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,KAC1B,KAAK,GACT,CACH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,KAAC,cAAc,IACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,KAC1B,KAAK,GACT,CACH,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAC,cAAc,IAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,KAAM,KAAK,GAAI,CAAC;IAC/E,CAAC;IAED,OAAO,CACL,KAAC,kBAAkB,IAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,8CAE7C,CACtB,CAAC;AACJ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"VisualComponent.js","sourceRoot":"","sources":["../../src/components/VisualComponent.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAG9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,MAAM,MAAM,GAAiD,CAAC,EACnE,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,IAAI,EACJ,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,KAAC,eAAe,IACd,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,KAC1B,KAAK,GACT,CACH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,KAAC,cAAc,IACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,KAC1B,KAAK,GACT,CACH,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAC,cAAc,IAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,KAAM,KAAK,GAAI,CAAC;IAC/E,CAAC;IAED,OAAO,CACL,KAAC,kBAAkB,IAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,8CAE7C,CACtB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -12,5 +12,13 @@ export interface TrackedLinkProps extends Omit<LinkProps<string>, 'href'>, Omit<
|
|
|
12
12
|
component?: React.ElementType;
|
|
13
13
|
children: React.ReactNode;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Unified link component that handles:
|
|
17
|
+
* - All link types (internal, external, blank)
|
|
18
|
+
* - UTM parameter appending from URL search params
|
|
19
|
+
* - Click tracking integration
|
|
20
|
+
* - Uses Next.js Link for all URLs (handles absolute URLs correctly)
|
|
21
|
+
* - Uses href="#" for blank links
|
|
22
|
+
*/
|
|
15
23
|
export declare const TrackedLink: React.ForwardRefExoticComponent<TrackedLinkProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
16
24
|
//# sourceMappingURL=TrackedLink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackedLink.d.ts","sourceRoot":"","sources":["../../src/elements/TrackedLink.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EACrC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"TrackedLink.d.ts","sourceRoot":"","sources":["../../src/elements/TrackedLink.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EACrC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,4FA+GtB,CAAC"}
|
|
@@ -4,9 +4,18 @@ import { Slot } from '@radix-ui/react-slot';
|
|
|
4
4
|
import Link from 'next/link';
|
|
5
5
|
import { forwardRef, isValidElement, useCallback, useEffect, useState } from 'react';
|
|
6
6
|
import { useAnalytics } from '../analytics/useAnalytics';
|
|
7
|
+
/**
|
|
8
|
+
* Unified link component that handles:
|
|
9
|
+
* - All link types (internal, external, blank)
|
|
10
|
+
* - UTM parameter appending from URL search params
|
|
11
|
+
* - Click tracking integration
|
|
12
|
+
* - Uses Next.js Link for all URLs (handles absolute URLs correctly)
|
|
13
|
+
* - Uses href="#" for blank links
|
|
14
|
+
*/
|
|
7
15
|
export const TrackedLink = forwardRef(function TrackedLink({ href, componentType = 'Link', location, analyticsContext, linkText, appendUtmParams = true, children, onClick, asChild = false, component, prefetch, replace, scroll, shallow, passHref, locale, ...props }, ref) {
|
|
8
16
|
const { trackClick } = useAnalytics();
|
|
9
17
|
const [finalHref, setFinalHref] = useState(href || '#');
|
|
18
|
+
// Handle UTM parameter appending
|
|
10
19
|
useEffect(() => {
|
|
11
20
|
if (!href || href === '#') {
|
|
12
21
|
setFinalHref('#');
|
|
@@ -24,11 +33,13 @@ export const TrackedLink = forwardRef(function TrackedLink({ href, componentType
|
|
|
24
33
|
setFinalHref(href);
|
|
25
34
|
}
|
|
26
35
|
}, [href, appendUtmParams]);
|
|
36
|
+
// Get link text for tracking
|
|
27
37
|
const getLinkText = useCallback(() => {
|
|
28
38
|
if (linkText)
|
|
29
39
|
return linkText;
|
|
30
40
|
if (typeof children === 'string')
|
|
31
41
|
return children;
|
|
42
|
+
// Try to extract text from children
|
|
32
43
|
if (isValidElement(children)) {
|
|
33
44
|
const childrenElement = children;
|
|
34
45
|
const props = childrenElement.props;
|
|
@@ -39,12 +50,14 @@ export const TrackedLink = forwardRef(function TrackedLink({ href, componentType
|
|
|
39
50
|
return '';
|
|
40
51
|
}, [linkText, children]);
|
|
41
52
|
const handleClick = useCallback((event) => {
|
|
53
|
+
// Track the click if analytics context is provided
|
|
42
54
|
if (analyticsContext) {
|
|
43
55
|
trackClick(componentType, getLinkText(), analyticsContext, {
|
|
44
56
|
targetUrl: href || undefined,
|
|
45
57
|
location: location || undefined,
|
|
46
58
|
});
|
|
47
59
|
}
|
|
60
|
+
// Call the original onClick handler
|
|
48
61
|
onClick?.(event);
|
|
49
62
|
}, [analyticsContext, componentType, getLinkText, href, location, onClick, trackClick]);
|
|
50
63
|
const linkProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackedLink.js","sourceRoot":"","sources":["../../src/elements/TrackedLink.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,OAAO,IAAwB,MAAM,WAAW,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"TrackedLink.js","sourceRoot":"","sources":["../../src/elements/TrackedLink.tsx"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,10 @@ export function BackgroundMedia({ responsiveVisual, overlayOpacity, className, a
|
|
|
14
14
|
: undefined;
|
|
15
15
|
const isVideo = isVisualVideo(visual);
|
|
16
16
|
const isMobileVideo = isVisualVideo(mobileVisual);
|
|
17
|
-
return (_jsxs("div", { className: cn('absolute inset-0 overflow-hidden', className), children: [!hideVisual && (_jsx("div", { className: cn('size-full', (hideMobileVisual || mobileVisual) && 'max-laptop:hidden'), children: _jsx(Visual, { visual: visual, className: "size-full object-cover object-center",
|
|
17
|
+
return (_jsxs("div", { className: cn('absolute inset-0 overflow-hidden', className), children: [!hideVisual && (_jsx("div", { className: cn('size-full', (hideMobileVisual || mobileVisual) && 'max-laptop:hidden'), children: _jsx(Visual, { visual: visual, className: "size-full object-cover object-center",
|
|
18
|
+
// Videos should autoplay, be muted, and loop for backgrounds
|
|
19
|
+
autoPlay: isVideo, muted: isVideo, loop: isVideo, controls: false, analyticsContext: analyticsContext, componentLabel: componentLabel }) })), mobileVisual && !hideMobileVisual && (_jsx("div", { className: "size-full block tablet:hidden", children: _jsx(Visual, { visual: mobileVisual, className: "size-full object-cover object-center",
|
|
20
|
+
// Videos should autoplay, be muted, and loop for backgrounds
|
|
21
|
+
autoPlay: isMobileVideo, muted: isMobileVideo, loop: isMobileVideo, controls: false, analyticsContext: analyticsContext, componentLabel: componentLabel }) })), hasOverlay && _jsx("div", { className: "absolute inset-0", style: overlayStyle, "aria-hidden": "true" })] }));
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=BackgroundMedia.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackgroundMedia.js","sourceRoot":"","sources":["../../src/framework/BackgroundMedia.tsx"],"names":[],"mappings":";AAAA,OAAO,EAGL,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,MAAM,UAAU,eAAe,CAAC,EAC9B,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,cAAc,GACO;IACrB,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAAC;IAEhF,MAAM,UAAU,GAAG,cAAc,IAAI,cAAc,GAAG,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC;YACE,eAAe,EAAE,iBAAiB,cAAc,GAAG,GAAG,GAAG;SAC1D;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAElD,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,aAE9D,CAAC,UAAU,IAAI,CACd,cAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,gBAAgB,IAAI,YAAY,CAAC,IAAI,mBAAmB,CAAC,YACxF,KAAC,MAAM,IACL,MAAM,EAAE,MAAM,EACd,SAAS,EAAC,sCAAsC,
|
|
1
|
+
{"version":3,"file":"BackgroundMedia.js","sourceRoot":"","sources":["../../src/framework/BackgroundMedia.tsx"],"names":[],"mappings":";AAAA,OAAO,EAGL,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,MAAM,UAAU,eAAe,CAAC,EAC9B,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,cAAc,GACO;IACrB,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAAC;IAEhF,MAAM,UAAU,GAAG,cAAc,IAAI,cAAc,GAAG,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC;YACE,eAAe,EAAE,iBAAiB,cAAc,GAAG,GAAG,GAAG;SAC1D;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAElD,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,aAE9D,CAAC,UAAU,IAAI,CACd,cAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,gBAAgB,IAAI,YAAY,CAAC,IAAI,mBAAmB,CAAC,YACxF,KAAC,MAAM,IACL,MAAM,EAAE,MAAM,EACd,SAAS,EAAC,sCAAsC;oBAChD,6DAA6D;oBAC7D,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,KAAK,EACf,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,GAC9B,GACE,CACP,EAGA,YAAY,IAAI,CAAC,gBAAgB,IAAI,CACpC,cAAK,SAAS,EAAC,+BAA+B,YAC5C,KAAC,MAAM,IACL,MAAM,EAAE,YAAY,EACpB,SAAS,EAAC,sCAAsC;oBAChD,6DAA6D;oBAC7D,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,KAAK,EACf,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,GAC9B,GACE,CACP,EAGA,UAAU,IAAI,cAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,YAAY,iBAAc,MAAM,GAAG,IACvF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
export function ComponentErrorIndicator({ type, message, component, id, details, inline = false, isProduction = false, }) {
|
|
3
|
+
// Don't show errors in production
|
|
3
4
|
if (isProduction)
|
|
4
5
|
return null;
|
|
5
6
|
const bgColor = {
|
|
6
|
-
validation: '#f97316e6',
|
|
7
|
-
parsing: '#ef4444e6',
|
|
8
|
-
render: '#dc2626e6',
|
|
9
|
-
data: '#eab308e6',
|
|
7
|
+
validation: '#f97316e6', // orange-500 with 90% opacity
|
|
8
|
+
parsing: '#ef4444e6', // red-500 with 90% opacity
|
|
9
|
+
render: '#dc2626e6', // red-600 with 90% opacity
|
|
10
|
+
data: '#eab308e6', // yellow-500 with 90% opacity
|
|
10
11
|
}[type];
|
|
11
12
|
const icon = {
|
|
12
13
|
validation: '⚠️',
|
|
@@ -15,8 +16,10 @@ export function ComponentErrorIndicator({ type, message, component, id, details,
|
|
|
15
16
|
data: '⚡',
|
|
16
17
|
}[type];
|
|
17
18
|
if (inline) {
|
|
19
|
+
// Inline version for embedding within components
|
|
18
20
|
return (_jsxs("span", { className: "inline-flex items-center gap-1 rounded px-2 py-0.5 text-xs font-medium text-white", style: { backgroundColor: bgColor }, children: [_jsx("span", { children: icon }), _jsx("span", { children: message })] }));
|
|
19
21
|
}
|
|
22
|
+
// Full banner version
|
|
20
23
|
return (_jsx("div", { className: "relative z-40 text-white", style: { backgroundColor: bgColor }, children: _jsx("div", { className: "mx-auto max-w-7xl px-4 py-2", children: _jsxs("div", { className: "flex items-start gap-2 p-sm", children: [_jsx("span", { className: "text-lg", children: icon }), _jsxs("div", { className: "flex-1", children: [_jsxs("p", { className: "font-semibold", children: ["Component Error: ", component ? `${component}` : 'Unknown Component', id && ` (${id})`] }), _jsx("p", { className: "mt-0.5", children: message }), details !== undefined && details !== null && (_jsxs("details", { className: "mt-1", children: [_jsx("summary", { className: "cursor-pointer text-xs opacity-75 hover:opacity-100", children: "Show details" }), _jsx("pre", { className: "mt-1 overflow-auto rounded bg-black/20 p-2 text-xs", children: details instanceof Error
|
|
21
24
|
? details.stack || details.message
|
|
22
25
|
: typeof details === 'object'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentErrorIndicator.js","sourceRoot":"","sources":["../../src/framework/ComponentErrorIndicator.tsx"],"names":[],"mappings":";AAUA,MAAM,UAAU,uBAAuB,CAAC,EACtC,IAAI,EACJ,OAAO,EACP,SAAS,EACT,EAAE,EACF,OAAO,EACP,MAAM,GAAG,KAAK,EACd,YAAY,GAAG,KAAK,GACS;
|
|
1
|
+
{"version":3,"file":"ComponentErrorIndicator.js","sourceRoot":"","sources":["../../src/framework/ComponentErrorIndicator.tsx"],"names":[],"mappings":";AAUA,MAAM,UAAU,uBAAuB,CAAC,EACtC,IAAI,EACJ,OAAO,EACP,SAAS,EACT,EAAE,EACF,OAAO,EACP,MAAM,GAAG,KAAK,EACd,YAAY,GAAG,KAAK,GACS;IAC7B,kCAAkC;IAClC,IAAI,YAAY;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,OAAO,GAAG;QACd,UAAU,EAAE,WAAW,EAAE,8BAA8B;QACvD,OAAO,EAAE,WAAW,EAAE,2BAA2B;QACjD,MAAM,EAAE,WAAW,EAAE,2BAA2B;QAChD,IAAI,EAAE,WAAW,EAAE,8BAA8B;KAClD,CAAC,IAAI,CAAC,CAAC;IAER,MAAM,IAAI,GAAG;QACX,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,GAAG;KACV,CAAC,IAAI,CAAC,CAAC;IAER,IAAI,MAAM,EAAE,CAAC;QACX,iDAAiD;QACjD,OAAO,CACL,gBACE,SAAS,EAAC,mFAAmF,EAC7F,KAAK,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,aAEnC,yBAAO,IAAI,GAAQ,EACnB,yBAAO,OAAO,GAAQ,IACjB,CACR,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,OAAO,CACL,cAAK,SAAS,EAAC,0BAA0B,EAAC,KAAK,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,YAC3E,cAAK,SAAS,EAAC,6BAA6B,YAC1C,eAAK,SAAS,EAAC,6BAA6B,aAC1C,eAAM,SAAS,EAAC,SAAS,YAAE,IAAI,GAAQ,EACvC,eAAK,SAAS,EAAC,QAAQ,aACrB,aAAG,SAAS,EAAC,eAAe,kCACR,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,mBAAmB,EACjE,EAAE,IAAI,KAAK,EAAE,GAAG,IACf,EACJ,YAAG,SAAS,EAAC,QAAQ,YAAE,OAAO,GAAK,EAClC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,CAC5C,mBAAS,SAAS,EAAC,MAAM,aACvB,kBAAS,SAAS,EAAC,qDAAqD,6BAE9D,EACV,cAAK,SAAS,EAAC,oDAAoD,YAChE,OAAO,YAAY,KAAK;4CACvB,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO;4CAClC,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ;gDAC3B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gDAClC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GACjB,IACE,CACX,IACG,IACF,GACF,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** biome-ignore-all lint/suspicious/noConsole: Console is ok */
|
|
1
2
|
interface ComponentError {
|
|
2
3
|
type: 'validation' | 'parsing' | 'render' | 'data';
|
|
3
4
|
message: string;
|
|
@@ -5,7 +6,14 @@ interface ComponentError {
|
|
|
5
6
|
id?: string;
|
|
6
7
|
details?: unknown;
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Shows a component error indicator in non-production environments
|
|
11
|
+
* Returns the error element to be included in the component's render
|
|
12
|
+
*/
|
|
8
13
|
export declare function showComponentError(error: ComponentError, isProduction?: boolean): import("react/jsx-runtime").JSX.Element | null;
|
|
14
|
+
/**
|
|
15
|
+
* Shows an inline error indicator (smaller, embedded version)
|
|
16
|
+
*/
|
|
9
17
|
export declare function showInlineError(error: ComponentError, isProduction?: boolean): import("react/jsx-runtime").JSX.Element | null;
|
|
10
18
|
export {};
|
|
11
19
|
//# sourceMappingURL=componentErrors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentErrors.d.ts","sourceRoot":"","sources":["../../src/framework/componentErrors.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"componentErrors.d.ts","sourceRoot":"","sources":["../../src/framework/componentErrors.tsx"],"names":[],"mappings":"AAAA,gEAAgE;AAIhE,UAAU,cAAc;IACtB,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AAEH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,UAAQ,kDAU7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,UAAQ,kDAU1E"}
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/** biome-ignore-all lint/suspicious/noConsole: Console is ok */
|
|
2
3
|
import { ComponentErrorIndicator } from './ComponentErrorIndicator';
|
|
4
|
+
/**
|
|
5
|
+
* Shows a component error indicator in non-production environments
|
|
6
|
+
* Returns the error element to be included in the component's render
|
|
7
|
+
*/
|
|
3
8
|
export function showComponentError(error, isProduction = false) {
|
|
4
9
|
if (isProduction)
|
|
5
10
|
return null;
|
|
11
|
+
// Also log to console for debugging
|
|
6
12
|
console.error(`Component Error [${error.component || 'Unknown'}]:`, {
|
|
7
13
|
...error,
|
|
8
14
|
timestamp: new Date().toISOString(),
|
|
9
15
|
});
|
|
10
16
|
return _jsx(ComponentErrorIndicator, { ...error, isProduction: isProduction });
|
|
11
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Shows an inline error indicator (smaller, embedded version)
|
|
20
|
+
*/
|
|
12
21
|
export function showInlineError(error, isProduction = false) {
|
|
13
22
|
if (isProduction)
|
|
14
23
|
return null;
|
|
24
|
+
// Also log to console for debugging
|
|
15
25
|
console.warn(`Component Warning [${error.component || 'Unknown'}]:`, {
|
|
16
26
|
...error,
|
|
17
27
|
timestamp: new Date().toISOString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentErrors.js","sourceRoot":"","sources":["../../src/framework/componentErrors.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"componentErrors.js","sourceRoot":"","sources":["../../src/framework/componentErrors.tsx"],"names":[],"mappings":";AAAA,gEAAgE;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAUpE;;;GAGG;AAEH,MAAM,UAAU,kBAAkB,CAAC,KAAqB,EAAE,YAAY,GAAG,KAAK;IAC5E,IAAI,YAAY;QAAE,OAAO,IAAI,CAAC;IAE9B,oCAAoC;IACpC,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,SAAS,IAAI,SAAS,IAAI,EAAE;QAClE,GAAG,KAAK;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;IAEH,OAAO,KAAC,uBAAuB,OAAK,KAAK,EAAE,YAAY,EAAE,YAAY,GAAI,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAqB,EAAE,YAAY,GAAG,KAAK;IACzE,IAAI,YAAY;QAAE,OAAO,IAAI,CAAC;IAE9B,oCAAoC;IACpC,OAAO,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,SAAS,IAAI,SAAS,IAAI,EAAE;QACnE,GAAG,KAAK;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;IAEH,OAAO,KAAC,uBAAuB,OAAK,KAAK,EAAE,MAAM,QAAC,YAAY,EAAE,YAAY,GAAI,CAAC;AACnF,CAAC"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import type { IAnalyticsContext } from '@se-studio/core-data-types';
|
|
2
|
+
/**
|
|
3
|
+
* Props for the useClickTracking hook.
|
|
4
|
+
*/
|
|
2
5
|
interface UseClickTrackingProps {
|
|
6
|
+
/** Type of component being tracked (e.g., 'Button', 'Link', 'Card') */
|
|
3
7
|
componentType: string;
|
|
8
|
+
/** Optional target URL for the click */
|
|
4
9
|
targetUrl?: string;
|
|
10
|
+
/** Text content of the link/button */
|
|
5
11
|
linkText: string;
|
|
12
|
+
/** Location label from CMS (optional) */
|
|
6
13
|
location: string | null | undefined;
|
|
14
|
+
/** Optional analytics context for enhanced tracking */
|
|
7
15
|
analytics?: IAnalyticsContext;
|
|
16
|
+
/** Function to call when tracking a click */
|
|
8
17
|
trackClick: (props: {
|
|
9
18
|
componentType: string;
|
|
10
19
|
url: string;
|
|
@@ -12,8 +21,38 @@ interface UseClickTrackingProps {
|
|
|
12
21
|
linkText: string;
|
|
13
22
|
location?: string;
|
|
14
23
|
} & IAnalyticsContext) => void;
|
|
24
|
+
/** Function to get the current page URL */
|
|
15
25
|
getCurrentPageUrl: () => string;
|
|
16
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Hook for tracking click events with analytics.
|
|
29
|
+
*
|
|
30
|
+
* Returns a click handler function that automatically tracks clicks with
|
|
31
|
+
* component type, link text, URLs, and analytics context.
|
|
32
|
+
*
|
|
33
|
+
* @param props - Click tracking configuration
|
|
34
|
+
* @returns Click handler function to attach to onClick events
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* import { useClickTracking, useAnalytics } from '@se-studio/core-ui';
|
|
39
|
+
*
|
|
40
|
+
* function MyButton() {
|
|
41
|
+
* const { trackClick } = useAnalytics();
|
|
42
|
+
* const handleClick = useClickTracking({
|
|
43
|
+
* componentType: 'Button',
|
|
44
|
+
* targetUrl: '/signup',
|
|
45
|
+
* linkText: 'Sign up',
|
|
46
|
+
* location: 'hero',
|
|
47
|
+
* analytics: { page_title: 'Home' },
|
|
48
|
+
* trackClick,
|
|
49
|
+
* getCurrentPageUrl: () => window.location.href,
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* return <button onClick={handleClick}>Sign up</button>;
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
17
56
|
export declare function useClickTracking({ componentType, targetUrl, linkText, location, analytics, trackClick, getCurrentPageUrl, }: UseClickTrackingProps): () => void;
|
|
18
57
|
export {};
|
|
19
58
|
//# sourceMappingURL=useClickTracking.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useClickTracking.d.ts","sourceRoot":"","sources":["../../src/hooks/useClickTracking.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,UAAU,qBAAqB;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,UAAU,EAAE,CACV,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,iBAAiB,KAClB,IAAI,CAAC;IACV,iBAAiB,EAAE,MAAM,MAAM,CAAC;CACjC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,aAAa,EACb,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,iBAAiB,GAClB,EAAE,qBAAqB,cAiBvB"}
|
|
1
|
+
{"version":3,"file":"useClickTracking.d.ts","sourceRoot":"","sources":["../../src/hooks/useClickTracking.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE;;GAEG;AACH,UAAU,qBAAqB;IAC7B,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,uDAAuD;IACvD,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,6CAA6C;IAC7C,UAAU,EAAE,CACV,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,iBAAiB,KAClB,IAAI,CAAC;IACV,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,MAAM,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,aAAa,EACb,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,iBAAiB,GAClB,EAAE,qBAAqB,cAiBvB"}
|
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useCallback } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Hook for tracking click events with analytics.
|
|
5
|
+
*
|
|
6
|
+
* Returns a click handler function that automatically tracks clicks with
|
|
7
|
+
* component type, link text, URLs, and analytics context.
|
|
8
|
+
*
|
|
9
|
+
* @param props - Click tracking configuration
|
|
10
|
+
* @returns Click handler function to attach to onClick events
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* import { useClickTracking, useAnalytics } from '@se-studio/core-ui';
|
|
15
|
+
*
|
|
16
|
+
* function MyButton() {
|
|
17
|
+
* const { trackClick } = useAnalytics();
|
|
18
|
+
* const handleClick = useClickTracking({
|
|
19
|
+
* componentType: 'Button',
|
|
20
|
+
* targetUrl: '/signup',
|
|
21
|
+
* linkText: 'Sign up',
|
|
22
|
+
* location: 'hero',
|
|
23
|
+
* analytics: { page_title: 'Home' },
|
|
24
|
+
* trackClick,
|
|
25
|
+
* getCurrentPageUrl: () => window.location.href,
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* return <button onClick={handleClick}>Sign up</button>;
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
3
32
|
export function useClickTracking({ componentType, targetUrl, linkText, location, analytics, trackClick, getCurrentPageUrl, }) {
|
|
4
33
|
const handleClick = useCallback(() => {
|
|
5
34
|
const url = getCurrentPageUrl();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useClickTracking.js","sourceRoot":"","sources":["../../src/hooks/useClickTracking.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useClickTracking.js","sourceRoot":"","sources":["../../src/hooks/useClickTracking.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AA8BpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,aAAa,EACb,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,iBAAiB,GACK;IACtB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;QAEhC,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,CAAC;gBACT,aAAa;gBACb,GAAG,SAAS;gBACZ,GAAG;gBACH,SAAS;gBACT,QAAQ;gBACR,QAAQ,EAAE,QAAQ,IAAI,SAAS;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE7F,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @se-studio/core-ui
|
|
3
|
+
*
|
|
4
|
+
* Shared React UI component library with Tailwind CSS v4 and CMS infrastructure
|
|
5
|
+
* for SE Studio applications.
|
|
6
|
+
*
|
|
7
|
+
* This package provides:
|
|
8
|
+
* - CMS content rendering system with type-safe component mapping
|
|
9
|
+
* - React components for images, videos, animations, and rich text
|
|
10
|
+
* - Analytics integration hooks and providers
|
|
11
|
+
* - Utility functions for page metadata, error handling, and content extraction
|
|
12
|
+
* - Type-safe configuration system for CMS renderers
|
|
13
|
+
*
|
|
14
|
+
* @example Basic usage
|
|
15
|
+
* ```tsx
|
|
16
|
+
* import { CmsContent, Visual } from '@se-studio/core-ui';
|
|
17
|
+
* import { contentfulPageRest } from '@se-studio/contentful-rest-api';
|
|
18
|
+
*
|
|
19
|
+
* const page = await contentfulPageRest(config, 'home');
|
|
20
|
+
*
|
|
21
|
+
* export default function Page() {
|
|
22
|
+
* return <CmsContent content={page} config={rendererConfig} />;
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example Using Visual component
|
|
27
|
+
* ```tsx
|
|
28
|
+
* import { Visual } from '@se-studio/core-ui';
|
|
29
|
+
* import type { IVisual } from '@se-studio/core-data-types';
|
|
30
|
+
*
|
|
31
|
+
* <Visual visual={visualData} className="w-full" priority />
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @packageDocumentation
|
|
35
|
+
*/
|
|
1
36
|
export { AnalyticsProvider, useAnalyticsContext } from './analytics/AnalyticsProvider';
|
|
2
37
|
export { ConsoleAnalyticsAdapter } from './analytics/adapters';
|
|
3
38
|
export type { AnalyticsAdapter, ClickTrackingProperties, PageTrackingProperties, } from './analytics/types';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|