@se-studio/core-ui 1.17.2 → 1.19.0

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 (79) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/analytics/video/classifySeek.d.ts +15 -0
  3. package/dist/analytics/video/classifySeek.d.ts.map +1 -0
  4. package/dist/analytics/video/classifySeek.js +32 -0
  5. package/dist/analytics/video/classifySeek.js.map +1 -0
  6. package/dist/analytics/video/createVideoEngagementSession.d.ts +51 -0
  7. package/dist/analytics/video/createVideoEngagementSession.d.ts.map +1 -0
  8. package/dist/analytics/video/createVideoEngagementSession.js +225 -0
  9. package/dist/analytics/video/createVideoEngagementSession.js.map +1 -0
  10. package/dist/analytics/video/index.d.ts +6 -0
  11. package/dist/analytics/video/index.d.ts.map +1 -0
  12. package/dist/analytics/video/index.js +6 -0
  13. package/dist/analytics/video/index.js.map +1 -0
  14. package/dist/analytics/video/loadYouTubeIframeApi.d.ts +50 -0
  15. package/dist/analytics/video/loadYouTubeIframeApi.d.ts.map +1 -0
  16. package/dist/analytics/video/loadYouTubeIframeApi.js +52 -0
  17. package/dist/analytics/video/loadYouTubeIframeApi.js.map +1 -0
  18. package/dist/analytics/video/useHtml5VideoEngagement.d.ts +8 -0
  19. package/dist/analytics/video/useHtml5VideoEngagement.d.ts.map +1 -0
  20. package/dist/analytics/video/useHtml5VideoEngagement.js +67 -0
  21. package/dist/analytics/video/useHtml5VideoEngagement.js.map +1 -0
  22. package/dist/analytics/video/useVideoEngagement.d.ts +19 -0
  23. package/dist/analytics/video/useVideoEngagement.d.ts.map +1 -0
  24. package/dist/analytics/video/useVideoEngagement.js +80 -0
  25. package/dist/analytics/video/useVideoEngagement.js.map +1 -0
  26. package/dist/analytics/video/videoEngagementTypes.d.ts +52 -0
  27. package/dist/analytics/video/videoEngagementTypes.d.ts.map +1 -0
  28. package/dist/analytics/video/videoEngagementTypes.js +45 -0
  29. package/dist/analytics/video/videoEngagementTypes.js.map +1 -0
  30. package/dist/components/ExternalVimeoEmbed.d.ts +1 -1
  31. package/dist/components/ExternalVimeoEmbed.d.ts.map +1 -1
  32. package/dist/components/ExternalVimeoEmbed.js +134 -9
  33. package/dist/components/ExternalVimeoEmbed.js.map +1 -1
  34. package/dist/components/ExternalYouTubeEmbed.d.ts +1 -1
  35. package/dist/components/ExternalYouTubeEmbed.d.ts.map +1 -1
  36. package/dist/components/ExternalYouTubeEmbed.js +167 -9
  37. package/dist/components/ExternalYouTubeEmbed.js.map +1 -1
  38. package/dist/components/ImageKitClientVideo.d.ts +6 -1
  39. package/dist/components/ImageKitClientVideo.d.ts.map +1 -1
  40. package/dist/components/ImageKitClientVideo.js +69 -7
  41. package/dist/components/ImageKitClientVideo.js.map +1 -1
  42. package/dist/components/ImageKitHlsVideoClient.d.ts +7 -1
  43. package/dist/components/ImageKitHlsVideoClient.d.ts.map +1 -1
  44. package/dist/components/ImageKitHlsVideoClient.js +65 -8
  45. package/dist/components/ImageKitHlsVideoClient.js.map +1 -1
  46. package/dist/components/LazyVideo.d.ts +5 -0
  47. package/dist/components/LazyVideo.d.ts.map +1 -1
  48. package/dist/components/LazyVideo.js +61 -36
  49. package/dist/components/LazyVideo.js.map +1 -1
  50. package/dist/components/LocalVideo.d.ts.map +1 -1
  51. package/dist/components/LocalVideo.js +8 -2
  52. package/dist/components/LocalVideo.js.map +1 -1
  53. package/dist/components/LocalVideoPlayChrome.d.ts +20 -0
  54. package/dist/components/LocalVideoPlayChrome.d.ts.map +1 -0
  55. package/dist/components/LocalVideoPlayChrome.js +22 -0
  56. package/dist/components/LocalVideoPlayChrome.js.map +1 -0
  57. package/dist/components/LocalVideoPlayOverlay.d.ts +19 -0
  58. package/dist/components/LocalVideoPlayOverlay.d.ts.map +1 -0
  59. package/dist/components/LocalVideoPlayOverlay.js +49 -0
  60. package/dist/components/LocalVideoPlayOverlay.js.map +1 -0
  61. package/dist/components/Video.d.ts +5 -0
  62. package/dist/components/Video.d.ts.map +1 -1
  63. package/dist/index.d.ts +5 -0
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/server/index.d.ts +1 -0
  68. package/dist/server/index.d.ts.map +1 -1
  69. package/dist/server/index.js.map +1 -1
  70. package/dist/utils/agent-ready.d.ts +17 -3
  71. package/dist/utils/agent-ready.d.ts.map +1 -1
  72. package/dist/utils/agent-ready.js +36 -6
  73. package/dist/utils/agent-ready.js.map +1 -1
  74. package/dist/utils/robots.d.ts +7 -0
  75. package/dist/utils/robots.d.ts.map +1 -1
  76. package/dist/utils/robots.js +7 -1
  77. package/dist/utils/robots.js.map +1 -1
  78. package/docs/llms.md +27 -2
  79. package/package.json +8 -3
@@ -0,0 +1,80 @@
1
+ 'use client';
2
+ import { useEffect, useRef } from 'react';
3
+ import { useAnalytics } from '../useAnalytics';
4
+ import { createVideoEngagementSession, } from './createVideoEngagementSession';
5
+ import { VIDEO_ENGAGEMENT_THRESHOLDS } from './videoEngagementTypes';
6
+ /**
7
+ * Creates a video engagement session bound to `trackEvent` when analytics context is present.
8
+ * Observes `rootRef` for impression; disposes on unmount / pagehide.
9
+ */
10
+ export function useVideoEngagement({ identity, analyticsContext, enabled = true, }) {
11
+ const { trackEvent } = useAnalytics();
12
+ const sessionRef = useRef(null);
13
+ const rootRef = useRef(null);
14
+ const trackEventRef = useRef(trackEvent);
15
+ trackEventRef.current = trackEvent;
16
+ const canTrack = Boolean(enabled && analyticsContext);
17
+ const identityRef = useRef(identity);
18
+ identityRef.current = identity;
19
+ // Primitive deps only — avoid recreating the session when parent passes a new
20
+ // analyticsContext object with the same slug/title/type.
21
+ const slug = analyticsContext?.slug ?? '';
22
+ const pageTitle = analyticsContext?.title ?? '';
23
+ const pageType = analyticsContext?.type ?? '';
24
+ const videoProvider = identity.video_provider;
25
+ const videoId = identity.video_id;
26
+ const videoLocation = identity.location ?? '';
27
+ useEffect(() => {
28
+ if (!canTrack) {
29
+ sessionRef.current = null;
30
+ return;
31
+ }
32
+ const currentIdentity = identityRef.current;
33
+ const session = createVideoEngagementSession({
34
+ identity: {
35
+ ...currentIdentity,
36
+ video_provider: videoProvider,
37
+ video_id: videoId,
38
+ location: videoLocation || currentIdentity.location,
39
+ slug: slug || currentIdentity.slug,
40
+ title: pageTitle || currentIdentity.title,
41
+ type: pageType || currentIdentity.type,
42
+ },
43
+ track: (event, properties) => {
44
+ trackEventRef.current(event, properties);
45
+ },
46
+ });
47
+ sessionRef.current = session;
48
+ const onPageHide = () => {
49
+ session.dispose();
50
+ };
51
+ window.addEventListener('pagehide', onPageHide);
52
+ return () => {
53
+ window.removeEventListener('pagehide', onPageHide);
54
+ session.dispose();
55
+ if (sessionRef.current === session) {
56
+ sessionRef.current = null;
57
+ }
58
+ };
59
+ }, [canTrack, videoProvider, videoId, videoLocation, slug, pageTitle, pageType]);
60
+ useEffect(() => {
61
+ if (!canTrack)
62
+ return;
63
+ const el = rootRef.current;
64
+ if (!el)
65
+ return;
66
+ const observer = new IntersectionObserver((entries) => {
67
+ const entry = entries[0];
68
+ if (entry?.isIntersecting) {
69
+ sessionRef.current?.markImpression();
70
+ }
71
+ }, { threshold: VIDEO_ENGAGEMENT_THRESHOLDS.impressionRatio });
72
+ observer.observe(el);
73
+ return () => observer.disconnect();
74
+ // videoProvider/videoId/location/slug: re-bind when tracked video identity changes
75
+ // (session is recreated in the effect above; observer must re-run for a new impression).
76
+ // biome-ignore lint/correctness/useExhaustiveDependencies: intentional identity key
77
+ }, [canTrack, videoProvider, videoId, videoLocation, slug]);
78
+ return { sessionRef, rootRef };
79
+ }
80
+ //# sourceMappingURL=useVideoEngagement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVideoEngagement.js","sourceRoot":"","sources":["../../../src/analytics/video/useVideoEngagement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * First-party video engagement events fired via `trackEvent`.
3
+ * Sites map these names to GTM tags or HubSpot behavioural events.
4
+ */
5
+ export declare const VIDEO_ENGAGEMENT_EVENTS: {
6
+ readonly impression: "video_impression";
7
+ readonly start: "video_start";
8
+ readonly progress: "video_progress";
9
+ readonly complete: "video_complete";
10
+ readonly seek: "video_seek";
11
+ readonly unmute: "video_unmute";
12
+ readonly fullscreen: "video_fullscreen";
13
+ readonly exit: "video_exit";
14
+ };
15
+ export type VideoEngagementEventName = (typeof VIDEO_ENGAGEMENT_EVENTS)[keyof typeof VIDEO_ENGAGEMENT_EVENTS];
16
+ /** All engagement event name strings (for HubSpot eventNameMap keys, etc.). */
17
+ export declare const VIDEO_ENGAGEMENT_EVENT_NAMES: readonly VideoEngagementEventName[];
18
+ export type VideoProvider = 'vimeo' | 'youtube' | 'local';
19
+ /**
20
+ * Thresholds for progress, completion, skip, and seek classification.
21
+ * Tuned for marketing-site explainer videos (not long-form).
22
+ */
23
+ export declare const VIDEO_ENGAGEMENT_THRESHOLDS: {
24
+ /** Treat as completed when high-water mark reaches this % (or player ended). */
25
+ readonly completePercent: 95;
26
+ /** Exit with low % + short watch time counts as skipped. */
27
+ readonly skipMaxPercent: 10;
28
+ readonly skipMaxWatchSeconds: 3;
29
+ /** Large forward seek: at least this % of duration OR this many seconds. */
30
+ readonly seekMinPercent: 15;
31
+ readonly seekMinSeconds: 10;
32
+ /** After a large forward seek, incomplete exit with max_percent below this is skipped. */
33
+ readonly skipAfterSeekMaxPercent: 50;
34
+ readonly quartiles: readonly [25, 50, 75];
35
+ /** IntersectionObserver threshold for video_impression. */
36
+ readonly impressionRatio: 0.5;
37
+ };
38
+ export interface VideoEngagementIdentity {
39
+ video_provider: VideoProvider;
40
+ video_id: string;
41
+ video_title: string;
42
+ video_url?: string;
43
+ location?: string;
44
+ /** Page slug from IAnalyticsContext */
45
+ slug?: string;
46
+ /** Page title from IAnalyticsContext */
47
+ title?: string;
48
+ /** Page type from IAnalyticsContext */
49
+ type?: string;
50
+ }
51
+ export type VideoEngagementTrackFn = (event: string, properties: Record<string, unknown>) => void;
52
+ //# sourceMappingURL=videoEngagementTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videoEngagementTypes.d.ts","sourceRoot":"","sources":["../../../src/analytics/video/videoEngagementTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;CAS1B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAClC,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,OAAO,uBAAuB,CAAC,CAAC;AAEzE,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B,EAAE,SAAS,wBAAwB,EAS3E,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,2BAA2B;IACtC,gFAAgF;;IAEhF,4DAA4D;;;IAG5D,4EAA4E;;;IAG5E,0FAA0F;;;IAG1F,2DAA2D;;CAEnD,CAAC;AAEX,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,aAAa,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * First-party video engagement events fired via `trackEvent`.
3
+ * Sites map these names to GTM tags or HubSpot behavioural events.
4
+ */
5
+ export const VIDEO_ENGAGEMENT_EVENTS = {
6
+ impression: 'video_impression',
7
+ start: 'video_start',
8
+ progress: 'video_progress',
9
+ complete: 'video_complete',
10
+ seek: 'video_seek',
11
+ unmute: 'video_unmute',
12
+ fullscreen: 'video_fullscreen',
13
+ exit: 'video_exit',
14
+ };
15
+ /** All engagement event name strings (for HubSpot eventNameMap keys, etc.). */
16
+ export const VIDEO_ENGAGEMENT_EVENT_NAMES = [
17
+ VIDEO_ENGAGEMENT_EVENTS.impression,
18
+ VIDEO_ENGAGEMENT_EVENTS.start,
19
+ VIDEO_ENGAGEMENT_EVENTS.progress,
20
+ VIDEO_ENGAGEMENT_EVENTS.complete,
21
+ VIDEO_ENGAGEMENT_EVENTS.seek,
22
+ VIDEO_ENGAGEMENT_EVENTS.unmute,
23
+ VIDEO_ENGAGEMENT_EVENTS.fullscreen,
24
+ VIDEO_ENGAGEMENT_EVENTS.exit,
25
+ ];
26
+ /**
27
+ * Thresholds for progress, completion, skip, and seek classification.
28
+ * Tuned for marketing-site explainer videos (not long-form).
29
+ */
30
+ export const VIDEO_ENGAGEMENT_THRESHOLDS = {
31
+ /** Treat as completed when high-water mark reaches this % (or player ended). */
32
+ completePercent: 95,
33
+ /** Exit with low % + short watch time counts as skipped. */
34
+ skipMaxPercent: 10,
35
+ skipMaxWatchSeconds: 3,
36
+ /** Large forward seek: at least this % of duration OR this many seconds. */
37
+ seekMinPercent: 15,
38
+ seekMinSeconds: 10,
39
+ /** After a large forward seek, incomplete exit with max_percent below this is skipped. */
40
+ skipAfterSeekMaxPercent: 50,
41
+ quartiles: [25, 50, 75],
42
+ /** IntersectionObserver threshold for video_impression. */
43
+ impressionRatio: 0.5,
44
+ };
45
+ //# sourceMappingURL=videoEngagementTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videoEngagementTypes.js","sourceRoot":"","sources":["../../../src/analytics/video/videoEngagementTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,UAAU,EAAE,kBAAkB;IAC9B,KAAK,EAAE,aAAa;IACpB,QAAQ,EAAE,gBAAgB;IAC1B,QAAQ,EAAE,gBAAgB;IAC1B,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,cAAc;IACtB,UAAU,EAAE,kBAAkB;IAC9B,IAAI,EAAE,YAAY;CACV,CAAC;AAKX,+EAA+E;AAC/E,MAAM,CAAC,MAAM,4BAA4B,GAAwC;IAC/E,uBAAuB,CAAC,UAAU;IAClC,uBAAuB,CAAC,KAAK;IAC7B,uBAAuB,CAAC,QAAQ;IAChC,uBAAuB,CAAC,QAAQ;IAChC,uBAAuB,CAAC,IAAI;IAC5B,uBAAuB,CAAC,MAAM;IAC9B,uBAAuB,CAAC,UAAU;IAClC,uBAAuB,CAAC,IAAI;CAC7B,CAAC;AAIF;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,gFAAgF;IAChF,eAAe,EAAE,EAAE;IACnB,4DAA4D;IAC5D,cAAc,EAAE,EAAE;IAClB,mBAAmB,EAAE,CAAC;IACtB,4EAA4E;IAC5E,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,EAAE;IAClB,0FAA0F;IAC1F,uBAAuB,EAAE,EAAE;IAC3B,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU;IAChC,2DAA2D;IAC3D,eAAe,EAAE,GAAG;CACZ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { IAnalyticsContext, IExternalVideo } from '@se-studio/core-data-types';
2
2
  import type { ReactNode } from 'react';
3
3
  import type { IVideoProps } from './Video';
4
- declare function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext, componentLabel, autoPlay, loop, externalVideoPlayButton, }: {
4
+ declare function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext, componentLabel, autoPlay, loop, externalVideoPlayButton, startPlaybackOnMount, }: {
5
5
  video: IExternalVideo;
6
6
  vimeoId: string;
7
7
  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;AAEpF,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAMtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA8C3C,iBAAS,kBAAkB,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,uBAAuB,GACxB,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;IAC1C,uBAAuB,CAAC,EAAE,SAAS,CAAC;CACrC,GAAG,WAAW,+BAmFd;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;AAEpF,OAAO,KAAK,EAAiB,SAAS,EAAa,MAAM,OAAO,CAAC;AAQjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAgD3C,iBAAS,kBAAkB,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,uBAAuB,EACvB,oBAA4B,GAC7B,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;IAC1C,uBAAuB,CAAC,EAAE,SAAS,CAAC;CACrC,GAAG,WAAW,+BAmOd;AAED,eAAe,kBAAkB,CAAC"}
@@ -1,12 +1,15 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import Image from 'next/image';
4
- import { useState } from 'react';
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
5
  import { useAnalytics } from '../analytics/useAnalytics';
6
+ import { useVideoEngagement } from '../analytics/video/useVideoEngagement';
6
7
  import { useExternalVideoPlayButton } from '../context/ExternalVideoPlayButtonContext';
7
8
  import { cn } from '../utils/cn';
8
9
  import { DefaultExternalVideoPlayButton } from './DefaultExternalVideoPlayButton';
10
+ import { LocalVideoPlayChrome } from './LocalVideoPlayChrome';
9
11
  import { calculateCropDetails } from './Visual';
12
+ const PLAYBACK_REVEAL_TIMEOUT_MS = 12_000;
10
13
  function getHighResThumbnail(url, embedWidth, embedHeight) {
11
14
  const longEdge = 1280;
12
15
  const [w, h] = embedHeight > embedWidth
@@ -43,9 +46,13 @@ function buildVimeoEmbedSrc(vimeoId, externalUrl, options) {
43
46
  const qs = params.toString();
44
47
  return `https://player.vimeo.com/video/${vimeoId}${qs ? `?${qs}` : ''}`;
45
48
  }
46
- function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext, componentLabel, autoPlay, loop, externalVideoPlayButton, }) {
47
- const [hasActivated, setHasActivated] = useState(false);
49
+ function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext, componentLabel, autoPlay, loop, externalVideoPlayButton, startPlaybackOnMount = false, }) {
50
+ const [hasActivated, setHasActivated] = useState(!!startPlaybackOnMount && !autoPlay);
51
+ /** Cover (poster + chrome) stays until real playback starts. */
52
+ const [isPlaying, setIsPlaying] = useState(false);
53
+ const clickTrackedRef = useRef(false);
48
54
  const { trackClick } = useAnalytics();
55
+ const iframeRef = useRef(null);
49
56
  const embed = video.embed;
50
57
  const cropProperties = calculateCropDetails(video);
51
58
  const fullStyle = {
@@ -60,6 +67,127 @@ function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext
60
67
  : rawPoster;
61
68
  const playButtonFromContext = useExternalVideoPlayButton();
62
69
  const playButtonContent = externalVideoPlayButton ?? playButtonFromContext;
70
+ const engagementEnabled = !autoPlay && !!analyticsContext;
71
+ const { sessionRef, rootRef } = useVideoEngagement({
72
+ identity: {
73
+ video_provider: 'vimeo',
74
+ video_id: vimeoId,
75
+ video_title: video.name,
76
+ video_url: video.external,
77
+ location: componentLabel ?? undefined,
78
+ },
79
+ analyticsContext,
80
+ enabled: engagementEnabled,
81
+ });
82
+ // Reveal player when Vimeo reports play (or after timeout so we never stick on cover).
83
+ useEffect(() => {
84
+ if (!hasActivated || autoPlay)
85
+ return;
86
+ const iframe = iframeRef.current;
87
+ if (!iframe)
88
+ return;
89
+ let cancelled = false;
90
+ let player = null;
91
+ let lastTime = 0;
92
+ const reveal = () => {
93
+ if (cancelled)
94
+ return;
95
+ setIsPlaying(true);
96
+ };
97
+ const timeoutId = window.setTimeout(reveal, PLAYBACK_REVEAL_TIMEOUT_MS);
98
+ let handlers = null;
99
+ const bind = async () => {
100
+ try {
101
+ const Player = (await import('@vimeo/player')).default;
102
+ if (cancelled)
103
+ return;
104
+ player = new Player(iframe);
105
+ handlers = {
106
+ onPlay: () => {
107
+ reveal();
108
+ if (engagementEnabled) {
109
+ void player?.getMuted().then((muted) => {
110
+ sessionRef.current?.onPlay(!!muted);
111
+ });
112
+ }
113
+ },
114
+ onPause: () => {
115
+ sessionRef.current?.onPause();
116
+ },
117
+ onTimeUpdate: (data) => {
118
+ lastTime = data.seconds;
119
+ sessionRef.current?.onTime(data.seconds, data.duration);
120
+ },
121
+ onSeeked: (data) => {
122
+ sessionRef.current?.onSeek(lastTime, data.seconds, data.duration);
123
+ lastTime = data.seconds;
124
+ },
125
+ onEnded: () => {
126
+ void player?.getDuration().then((duration) => {
127
+ sessionRef.current?.onEnded(duration ?? 0);
128
+ });
129
+ },
130
+ onVolumeChange: () => {
131
+ void player?.getMuted().then((muted) => {
132
+ sessionRef.current?.onMuteChange(!!muted);
133
+ });
134
+ },
135
+ onFullscreenChange: (data) => {
136
+ sessionRef.current?.onFullscreen(!!data.fullscreen);
137
+ },
138
+ };
139
+ player.on('play', handlers.onPlay);
140
+ if (engagementEnabled) {
141
+ player.on('pause', handlers.onPause);
142
+ player.on('timeupdate', handlers.onTimeUpdate);
143
+ player.on('seeked', handlers.onSeeked);
144
+ player.on('ended', handlers.onEnded);
145
+ player.on('volumechange', handlers.onVolumeChange);
146
+ player.on('fullscreenchange', handlers.onFullscreenChange);
147
+ }
148
+ // Already playing (race with autoplay)
149
+ try {
150
+ const paused = await player.getPaused();
151
+ if (!paused)
152
+ reveal();
153
+ }
154
+ catch {
155
+ // ignore
156
+ }
157
+ }
158
+ catch {
159
+ reveal();
160
+ }
161
+ };
162
+ void bind();
163
+ return () => {
164
+ cancelled = true;
165
+ window.clearTimeout(timeoutId);
166
+ if (player && handlers) {
167
+ player.off('play', handlers.onPlay);
168
+ player.off('pause', handlers.onPause);
169
+ player.off('timeupdate', handlers.onTimeUpdate);
170
+ player.off('seeked', handlers.onSeeked);
171
+ player.off('ended', handlers.onEnded);
172
+ player.off('volumechange', handlers.onVolumeChange);
173
+ player.off('fullscreenchange', handlers.onFullscreenChange);
174
+ }
175
+ };
176
+ }, [hasActivated, autoPlay, engagementEnabled, sessionRef]);
177
+ // Intentional: trackClick = "opened player"; video_start fires when playback begins.
178
+ const trackOpenClick = useCallback(() => {
179
+ if (analyticsContext && !clickTrackedRef.current) {
180
+ clickTrackedRef.current = true;
181
+ trackClick('ExternalVideo', video.name, analyticsContext, {
182
+ location: componentLabel ?? undefined,
183
+ });
184
+ }
185
+ }, [analyticsContext, video.name, componentLabel, trackClick]);
186
+ useEffect(() => {
187
+ if (startPlaybackOnMount && !autoPlay) {
188
+ trackOpenClick();
189
+ }
190
+ }, [startPlaybackOnMount, autoPlay, trackOpenClick]);
63
191
  if (autoPlay) {
64
192
  return (_jsx("div", { className: cn('relative w-full overflow-hidden', className), style: fullStyle, children: _jsx("iframe", { src: buildVimeoEmbedSrc(vimeoId, video.external, {
65
193
  autoplay: true,
@@ -70,13 +198,10 @@ function ExternalVimeoEmbed({ video, style, className, vimeoId, analyticsContext
70
198
  }
71
199
  function handlePlay() {
72
200
  setHasActivated(true);
73
- if (analyticsContext) {
74
- trackClick('ExternalVideo', video.name, analyticsContext, {
75
- location: componentLabel ?? undefined,
76
- });
77
- }
201
+ trackOpenClick();
78
202
  }
79
- return (_jsxs("div", { className: cn('relative w-full overflow-hidden', className), style: fullStyle, children: [!hasActivated && (_jsxs("button", { type: "button", onClick: handlePlay, className: "absolute inset-0 flex h-full w-full cursor-pointer items-center justify-center bg-neutral-900 group focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white/80", "aria-label": `Play video: ${video.name}`, children: [poster && (_jsx(Image, { src: poster, alt: video.name, width: video.width ?? 1920, height: video.height ?? 1080, style: { objectFit: 'cover' }, sizes: "100vw", className: "h-full w-full" })), playButtonContent ?? _jsx(DefaultExternalVideoPlayButton, {})] })), hasActivated && (_jsx("iframe", { src: buildVimeoEmbedSrc(vimeoId, video.external, { autoplay: true, loop, dnt }), title: video.name, className: "absolute inset-0 h-full w-full border-0", frameBorder: "0", allow: "autoplay; fullscreen; picture-in-picture", allowFullScreen: true }))] }));
203
+ const showCover = !isPlaying;
204
+ return (_jsxs("div", { ref: rootRef, className: cn('relative w-full overflow-hidden bg-neutral-900', className), style: fullStyle, children: [hasActivated && (_jsx("iframe", { ref: iframeRef, src: buildVimeoEmbedSrc(vimeoId, video.external, { autoplay: true, loop, dnt }), title: video.name, className: "absolute inset-0 h-full w-full border-0", frameBorder: "0", allow: "autoplay; fullscreen; picture-in-picture", allowFullScreen: true })), showCover && (_jsxs("div", { className: "absolute inset-0 z-10", children: [poster && (_jsx(Image, { src: poster, alt: video.name, width: video.width ?? 1920, height: video.height ?? 1080, style: { objectFit: 'cover' }, sizes: "100vw", className: "h-full w-full" })), _jsx(LocalVideoPlayChrome, { label: `Play video: ${video.name}`, onPlay: handlePlay, loading: hasActivated && !isPlaying, playButton: playButtonContent ?? _jsx(DefaultExternalVideoPlayButton, {}) })] }))] }));
80
205
  }
81
206
  export default ExternalVimeoEmbed;
82
207
  //# sourceMappingURL=ExternalVimeoEmbed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalVimeoEmbed.js","sourceRoot":"","sources":["../../src/components/ExternalVimeoEmbed.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExternalVimeoEmbed.js","sourceRoot":"","sources":["../../src/components/ExternalVimeoEmbed.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAE1C,SAAS,mBAAmB,CAAC,GAAW,EAAE,UAAkB,EAAE,WAAmB;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GACV,WAAW,GAAG,UAAU;QACtB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,EAAE,QAAQ,CAAC;QAC/D,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IACpE,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC9C,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC3E,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAe,EACf,WAAmB,EACnB,OAAmF;IAEnF,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,kCAAkC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,uBAAuB,EACvB,oBAAoB,GAAG,KAAK,GAOf;IACb,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtF,gEAAgE;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAkB;QAC/B,GAAG,KAAK;QACR,GAAG,cAAc;QACjB,WAAW,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;KACxF,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE,YAAY,CAAC;IACtD,MAAM,MAAM,GACV,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM;QACzD,CAAC,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;QAC3D,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,qBAAqB,GAAG,0BAA0B,EAAE,CAAC;IAC3D,MAAM,iBAAiB,GAAG,uBAAuB,IAAI,qBAAqB,CAAC;IAE3E,MAAM,iBAAiB,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,gBAAgB,CAAC;IAC1D,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC;QACjD,QAAQ,EAAE;YACR,cAAc,EAAE,OAAO;YACvB,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,QAAQ,EAAE,cAAc,IAAI,SAAS;SACtC;QACD,gBAAgB;QAChB,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;IAEH,uFAAuF;IACvF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,IAAI,QAAQ;YAAE,OAAO;QACtC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,MAAM,GAA2C,IAAI,CAAC;QAC1D,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,SAAS;gBAAE,OAAO;YACtB,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;QAWxE,IAAI,QAAQ,GAAyB,IAAI,CAAC;QAE1C,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC;gBACvD,IAAI,SAAS;oBAAE,OAAO;gBACtB,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE5B,QAAQ,GAAG;oBACT,MAAM,EAAE,GAAG,EAAE;wBACX,MAAM,EAAE,CAAC;wBACT,IAAI,iBAAiB,EAAE,CAAC;4BACtB,KAAK,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gCACrC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;4BACtC,CAAC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBACD,OAAO,EAAE,GAAG,EAAE;wBACZ,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;oBAChC,CAAC;oBACD,YAAY,EAAE,CAAC,IAA2C,EAAE,EAAE;wBAC5D,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;wBACxB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC1D,CAAC;oBACD,QAAQ,EAAE,CAAC,IAA2C,EAAE,EAAE;wBACxD,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAClE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC1B,CAAC;oBACD,OAAO,EAAE,GAAG,EAAE;wBACZ,KAAK,MAAM,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;4BAC3C,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;wBAC7C,CAAC,CAAC,CAAC;oBACL,CAAC;oBACD,cAAc,EAAE,GAAG,EAAE;wBACnB,KAAK,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;4BACrC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAC5C,CAAC,CAAC,CAAC;oBACL,CAAC;oBACD,kBAAkB,EAAE,CAAC,IAA6B,EAAE,EAAE;wBACpD,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACtD,CAAC;iBACF,CAAC;gBAEF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,iBAAiB,EAAE,CAAC;oBACtB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACrC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;oBAC/C,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACvC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACrC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;oBACnD,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBAC7D,CAAC;gBAED,uCAAuC;gBACvC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;oBACxC,IAAI,CAAC,MAAM;wBAAE,MAAM,EAAE,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,IAAI,EAAE,CAAC;QAEZ,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACxC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACpD,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;IAE5D,qFAAqF;IACrF,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI,gBAAgB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YACjD,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE;gBACxD,QAAQ,EAAE,cAAc,IAAI,SAAS;aACtC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAErD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,iCAAiC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,YAChF,iBACE,GAAG,EAAE,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE;oBAC/C,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,IAAI;oBAChB,IAAI;oBACJ,GAAG;iBACJ,CAAC,EACF,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,SAAS,EAAC,yCAAyC,EACnD,WAAW,EAAC,GAAG,EACf,KAAK,EAAC,0CAA0C,EAChD,eAAe,SACf,GACE,CACP,CAAC;IACJ,CAAC;IAED,SAAS,UAAU;QACjB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,cAAc,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC;IAE7B,OAAO,CACL,eACE,GAAG,EAAE,OAAoC,EACzC,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,SAAS,CAAC,EAC1E,KAAK,EAAE,SAAS,aAEf,YAAY,IAAI,CACf,iBACE,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAC/E,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,SAAS,EAAC,yCAAyC,EACnD,WAAW,EAAC,GAAG,EACf,KAAK,EAAC,0CAA0C,EAChD,eAAe,SACf,CACH,EACA,SAAS,IAAI,CACZ,eAAK,SAAS,EAAC,uBAAuB,aACnC,MAAM,IAAI,CACT,KAAC,KAAK,IACJ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,KAAK,CAAC,IAAI,EACf,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,EAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAC5B,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAC7B,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,eAAe,GACzB,CACH,EACD,KAAC,oBAAoB,IACnB,KAAK,EAAE,eAAe,KAAK,CAAC,IAAI,EAAE,EAClC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,YAAY,IAAI,CAAC,SAAS,EACnC,UAAU,EAAE,iBAAiB,IAAI,KAAC,8BAA8B,KAAG,GACnE,IACE,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,eAAe,kBAAkB,CAAC"}
@@ -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 ExternalYoutubeEmbed({ video, style, className, youTubeId, analyticsContext, componentLabel, autoPlay, loop, externalVideoPlayButton, }: {
3
+ export declare function ExternalYoutubeEmbed({ video, style, className, youTubeId, analyticsContext, componentLabel, autoPlay, loop, externalVideoPlayButton, startPlaybackOnMount, }: {
4
4
  video: IExternalVideo;
5
5
  youTubeId: string;
6
6
  analyticsContext: IAnalyticsContext | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalYouTubeEmbed.d.ts","sourceRoot":"","sources":["../../src/components/ExternalYouTubeEmbed.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAQpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA4B3C,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,uBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC3C,GAAG,WAAW,+BA0Ed"}
1
+ {"version":3,"file":"ExternalYouTubeEmbed.d.ts","sourceRoot":"","sources":["../../src/components/ExternalYouTubeEmbed.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAiBpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA0C3C,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,uBAAuB,EACvB,oBAA4B,GAC7B,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC3C,GAAG,WAAW,+BAoOd"}