@flamingo-stack/openframe-frontend-core 0.0.581-snapshot.20260901141954 → 0.0.581

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 (105) hide show
  1. package/dist/{chunk-CR7GPMCM.js → chunk-3GXNCJZI.js} +3 -3
  2. package/dist/{chunk-A5VD6R7N.cjs → chunk-6U45VX5J.cjs} +43 -43
  3. package/dist/{chunk-A5VD6R7N.cjs.map → chunk-6U45VX5J.cjs.map} +1 -1
  4. package/dist/{chunk-SVQVAGZK.js → chunk-7CP5KY5W.js} +3 -3
  5. package/dist/{chunk-WQ236GO3.cjs → chunk-AIALG25H.cjs} +69 -69
  6. package/dist/{chunk-WQ236GO3.cjs.map → chunk-AIALG25H.cjs.map} +1 -1
  7. package/dist/{chunk-ALSLHGBH.cjs → chunk-BTKMTVN5.cjs} +4 -4
  8. package/dist/{chunk-ALSLHGBH.cjs.map → chunk-BTKMTVN5.cjs.map} +1 -1
  9. package/dist/{chunk-FYVL6A4Z.cjs → chunk-DSPQVZFE.cjs} +24 -24
  10. package/dist/{chunk-FYVL6A4Z.cjs.map → chunk-DSPQVZFE.cjs.map} +1 -1
  11. package/dist/{chunk-HQF7VE7B.js → chunk-ESWXXWCL.js} +2 -2
  12. package/dist/{chunk-FRWQ67UM.js → chunk-EZVABFEO.js} +2 -2
  13. package/dist/{chunk-6EUYXDV3.js → chunk-GAHKWML7.js} +6 -6
  14. package/dist/{chunk-L4E2TOSF.cjs → chunk-GMQEHDN2.cjs} +5 -5
  15. package/dist/{chunk-L4E2TOSF.cjs.map → chunk-GMQEHDN2.cjs.map} +1 -1
  16. package/dist/{chunk-K5SCFOD5.cjs → chunk-GUC4JK6O.cjs} +9 -9
  17. package/dist/{chunk-K5SCFOD5.cjs.map → chunk-GUC4JK6O.cjs.map} +1 -1
  18. package/dist/{chunk-U2ZRM3YB.js → chunk-GVM37TRU.js} +4 -4
  19. package/dist/{chunk-F227VMPL.js → chunk-HJVKPG55.js} +15 -125
  20. package/dist/{chunk-F227VMPL.js.map → chunk-HJVKPG55.js.map} +1 -1
  21. package/dist/{chunk-7HHRJTIY.js → chunk-HVSZYUGP.js} +5 -5
  22. package/dist/{chunk-KBOBPKMU.js → chunk-IHFQ5VVR.js} +5 -5
  23. package/dist/{chunk-A3SVEK7A.js → chunk-JW53WPB5.js} +3 -3
  24. package/dist/{chunk-646JEAY4.js → chunk-KAEVE7W2.js} +2 -2
  25. package/dist/{chunk-R3J2ERH2.cjs → chunk-KNBXZ22O.cjs} +3 -3
  26. package/dist/{chunk-R3J2ERH2.cjs.map → chunk-KNBXZ22O.cjs.map} +1 -1
  27. package/dist/{chunk-BUOYMIFJ.js → chunk-LWDIDSCF.js} +3 -3
  28. package/dist/{chunk-ORQQZQBB.cjs → chunk-M4KQWGEL.cjs} +32 -32
  29. package/dist/{chunk-ORQQZQBB.cjs.map → chunk-M4KQWGEL.cjs.map} +1 -1
  30. package/dist/{chunk-SKGMU7TZ.js → chunk-OKA3DJJ3.js} +2 -2
  31. package/dist/{chunk-DQVM4FTL.cjs → chunk-PBRXT7TD.cjs} +10 -10
  32. package/dist/{chunk-DQVM4FTL.cjs.map → chunk-PBRXT7TD.cjs.map} +1 -1
  33. package/dist/{chunk-4KWAHIYA.js → chunk-R5JVRFSW.js} +3 -3
  34. package/dist/{chunk-BQPCCBGO.cjs → chunk-SEZ25E22.cjs} +10 -10
  35. package/dist/{chunk-BQPCCBGO.cjs.map → chunk-SEZ25E22.cjs.map} +1 -1
  36. package/dist/{chunk-DGZPX2G3.cjs → chunk-U3W2ZVN4.cjs} +159 -159
  37. package/dist/{chunk-DGZPX2G3.cjs.map → chunk-U3W2ZVN4.cjs.map} +1 -1
  38. package/dist/{chunk-KAOXOYRT.cjs → chunk-UKHM2S6I.cjs} +15 -15
  39. package/dist/{chunk-KAOXOYRT.cjs.map → chunk-UKHM2S6I.cjs.map} +1 -1
  40. package/dist/{chunk-J5I3TKAH.cjs → chunk-VDRCKHML.cjs} +3 -3
  41. package/dist/{chunk-J5I3TKAH.cjs.map → chunk-VDRCKHML.cjs.map} +1 -1
  42. package/dist/{chunk-GD3OAM4T.js → chunk-VXUUSLD5.js} +2 -2
  43. package/dist/{chunk-T32XVOFP.cjs → chunk-W2TXSZTM.cjs} +21 -21
  44. package/dist/{chunk-T32XVOFP.cjs.map → chunk-W2TXSZTM.cjs.map} +1 -1
  45. package/dist/{chunk-RMOUILHT.cjs → chunk-WHFEG6UU.cjs} +22 -22
  46. package/dist/{chunk-RMOUILHT.cjs.map → chunk-WHFEG6UU.cjs.map} +1 -1
  47. package/dist/{chunk-LOJ5KQ6B.cjs → chunk-YU2UJPAT.cjs} +356 -466
  48. package/dist/chunk-YU2UJPAT.cjs.map +1 -0
  49. package/dist/{chunk-QDSVTIO5.js → chunk-ZEZMGXYV.js} +5 -5
  50. package/dist/components/case-studies/index.cjs +9 -9
  51. package/dist/components/case-studies/index.js +3 -3
  52. package/dist/components/chat/index.cjs +2 -2
  53. package/dist/components/chat/index.js +1 -1
  54. package/dist/components/contact/index.cjs +4 -4
  55. package/dist/components/contact/index.js +3 -3
  56. package/dist/components/docs/index.cjs +7 -7
  57. package/dist/components/docs/index.js +6 -6
  58. package/dist/components/embeds/index.cjs +4 -4
  59. package/dist/components/embeds/index.js +3 -3
  60. package/dist/components/faq/index.cjs +4 -4
  61. package/dist/components/faq/index.js +3 -3
  62. package/dist/components/features/index.cjs +3 -5
  63. package/dist/components/features/index.cjs.map +1 -1
  64. package/dist/components/features/index.js +2 -4
  65. package/dist/components/features/video.d.ts +0 -12
  66. package/dist/components/features/video.d.ts.map +1 -1
  67. package/dist/components/help-center-pages/index.cjs +23 -23
  68. package/dist/components/help-center-pages/index.js +14 -14
  69. package/dist/components/index.cjs +121 -123
  70. package/dist/components/index.cjs.map +1 -1
  71. package/dist/components/index.js +13 -15
  72. package/dist/components/index.js.map +1 -1
  73. package/dist/components/meeting-scheduler/index.cjs +21 -21
  74. package/dist/components/meeting-scheduler/index.js +2 -2
  75. package/dist/components/navigation/index.cjs +6 -6
  76. package/dist/components/navigation/index.js +5 -5
  77. package/dist/components/onboarding-guides/index.cjs +6 -6
  78. package/dist/components/onboarding-guides/index.js +5 -5
  79. package/dist/components/tickets/index.cjs +7 -7
  80. package/dist/components/tickets/index.js +6 -6
  81. package/dist/components/ui/index.cjs +3 -3
  82. package/dist/components/ui/index.js +2 -2
  83. package/dist/index.cjs +7 -9
  84. package/dist/index.cjs.map +1 -1
  85. package/dist/index.js +6 -8
  86. package/dist/index.js.map +1 -1
  87. package/package.json +1 -1
  88. package/src/components/features/video.tsx +16 -198
  89. package/dist/chunk-LOJ5KQ6B.cjs.map +0 -1
  90. package/src/components/features/__tests__/video-playback-failure.test.tsx +0 -250
  91. /package/dist/{chunk-CR7GPMCM.js.map → chunk-3GXNCJZI.js.map} +0 -0
  92. /package/dist/{chunk-SVQVAGZK.js.map → chunk-7CP5KY5W.js.map} +0 -0
  93. /package/dist/{chunk-HQF7VE7B.js.map → chunk-ESWXXWCL.js.map} +0 -0
  94. /package/dist/{chunk-FRWQ67UM.js.map → chunk-EZVABFEO.js.map} +0 -0
  95. /package/dist/{chunk-6EUYXDV3.js.map → chunk-GAHKWML7.js.map} +0 -0
  96. /package/dist/{chunk-U2ZRM3YB.js.map → chunk-GVM37TRU.js.map} +0 -0
  97. /package/dist/{chunk-7HHRJTIY.js.map → chunk-HVSZYUGP.js.map} +0 -0
  98. /package/dist/{chunk-KBOBPKMU.js.map → chunk-IHFQ5VVR.js.map} +0 -0
  99. /package/dist/{chunk-A3SVEK7A.js.map → chunk-JW53WPB5.js.map} +0 -0
  100. /package/dist/{chunk-646JEAY4.js.map → chunk-KAEVE7W2.js.map} +0 -0
  101. /package/dist/{chunk-BUOYMIFJ.js.map → chunk-LWDIDSCF.js.map} +0 -0
  102. /package/dist/{chunk-SKGMU7TZ.js.map → chunk-OKA3DJJ3.js.map} +0 -0
  103. /package/dist/{chunk-4KWAHIYA.js.map → chunk-R5JVRFSW.js.map} +0 -0
  104. /package/dist/{chunk-GD3OAM4T.js.map → chunk-VXUUSLD5.js.map} +0 -0
  105. /package/dist/{chunk-QDSVTIO5.js.map → chunk-ZEZMGXYV.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useOptionalTicketLive
4
- } from "./chunk-4KWAHIYA.js";
4
+ } from "./chunk-R5JVRFSW.js";
5
5
  import {
6
6
  AppLayoutDrawerContainerContext,
7
7
  AppLayoutDrawerCoordinationContext,
@@ -12,7 +12,7 @@ import {
12
12
  UnreadDot,
13
13
  buildTicketOpenHref,
14
14
  useOptionalNotifications
15
- } from "./chunk-GD3OAM4T.js";
15
+ } from "./chunk-VXUUSLD5.js";
16
16
  import {
17
17
  useFocusTrap,
18
18
  useLocalStorage
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  OVERLAY_BACKDROP_CLASS,
22
22
  useIsHydrated
23
- } from "./chunk-F227VMPL.js";
23
+ } from "./chunk-HJVKPG55.js";
24
24
  import {
25
25
  useHeaderHeight,
26
26
  useIsomorphicLayoutEffect,
@@ -1878,4 +1878,4 @@ export {
1878
1878
  MobileBurgerMenu,
1879
1879
  AppLayout
1880
1880
  };
1881
- //# sourceMappingURL=chunk-U2ZRM3YB.js.map
1881
+ //# sourceMappingURL=chunk-GVM37TRU.js.map
@@ -11935,36 +11935,6 @@ function extractYouTubeId(url) {
11935
11935
  const m = u.pathname.match(YT_PATH_RE);
11936
11936
  return m ? m[1] : null;
11937
11937
  }
11938
- var VIDEO_PLAYBACK_FAILED_EVENT = "flamingo:video-playback-failed";
11939
- function reportPlaybackFailure(detail) {
11940
- if (typeof window === "undefined") return;
11941
- try {
11942
- window.dispatchEvent(new CustomEvent(VIDEO_PLAYBACK_FAILED_EVENT, { detail }));
11943
- } catch {
11944
- }
11945
- }
11946
- var VIDEO_STALL_TIMEOUT_MS = 15e3;
11947
- function VideoErrorOverlay({
11948
- onRetry,
11949
- watchOnYouTubeId
11950
- }) {
11951
- return /* @__PURE__ */ jsxs57("div", { className: "absolute inset-0 z-10 flex flex-col items-center justify-center gap-[var(--spacing-system-sf)] bg-ods-overlay p-[var(--spacing-system-lf)] text-center", children: [
11952
- /* @__PURE__ */ jsx76("p", { className: "text-ods-text-secondary text-h6", children: "This video failed to play." }),
11953
- /* @__PURE__ */ jsxs57("div", { className: "flex items-center gap-[var(--spacing-system-sf)]", children: [
11954
- /* @__PURE__ */ jsx76(Button, { variant: "outline", size: "small", onClick: onRetry, children: "Try again" }),
11955
- watchOnYouTubeId ? /* @__PURE__ */ jsx76(
11956
- Button,
11957
- {
11958
- variant: "transparent",
11959
- size: "small",
11960
- href: `https://www.youtube.com/watch?v=${watchOnYouTubeId}`,
11961
- openInNewTab: true,
11962
- children: "Watch on YouTube"
11963
- }
11964
- ) : null
11965
- ] })
11966
- ] });
11967
- }
11968
11938
  var VIDEO_FILE_PLAYBACK_KEYS = [
11969
11939
  "srtContent",
11970
11940
  "captionsUrl",
@@ -12369,76 +12339,10 @@ function FilePlayer({
12369
12339
  "[Video] srtContent supplied without captionsUrl \u2014 captions will not render. Pass captionsUrl (the VTT URL) instead; raw SRT text overlays are no longer supported."
12370
12340
  );
12371
12341
  }
12372
- const monitorHealth = !chromeless;
12373
- const [playbackFailed, setPlaybackFailed] = useState25(false);
12374
- const stallTimerRef = useRef15(null);
12375
- const clearStallTimer = useCallback11(() => {
12376
- if (stallTimerRef.current !== null) {
12377
- clearTimeout(stallTimerRef.current);
12378
- stallTimerRef.current = null;
12379
- }
12380
- }, []);
12381
- useEffect19(() => clearStallTimer, [clearStallTimer]);
12382
- const failPlayback = useCallback11(
12383
- (reason) => {
12384
- clearStallTimer();
12385
- setPlaybackFailed(true);
12386
- reportPlaybackFailure({ kind: "file", src: url, reason });
12387
- },
12388
- [clearStallTimer, url]
12389
- );
12390
- const armStallTimer = useCallback11(() => {
12391
- if (!monitorHealth) return;
12392
- const el = hoverPlayerRef.current;
12393
- if (!el || el.paused || el.ended) return;
12394
- if (stallTimerRef.current !== null) return;
12395
- stallTimerRef.current = setTimeout(() => {
12396
- stallTimerRef.current = null;
12397
- failPlayback("stall");
12398
- }, VIDEO_STALL_TIMEOUT_MS);
12399
- }, [monitorHealth, failPlayback]);
12400
- const handlePlaybackProgress = useCallback11(() => {
12401
- clearStallTimer();
12402
- setPlaybackFailed(false);
12403
- }, [clearStallTimer]);
12404
- const handleMediaError = useCallback11(() => {
12405
- if (!monitorHealth) return;
12406
- failPlayback("error");
12407
- }, [monitorHealth, failPlayback]);
12408
- const retryPlayback = useCallback11(() => {
12409
- setPlaybackFailed(false);
12410
- clearStallTimer();
12411
- const el = hoverPlayerRef.current;
12412
- if (!el) return;
12413
- const resumeAt = typeof el.currentTime === "number" ? el.currentTime : 0;
12414
- try {
12415
- el.load?.();
12416
- if (resumeAt > 0 && el.addEventListener && el.removeEventListener) {
12417
- const seekBack = () => {
12418
- el.removeEventListener?.("loadedmetadata", seekBack);
12419
- try {
12420
- el.currentTime = resumeAt;
12421
- } catch {
12422
- }
12423
- };
12424
- el.addEventListener("loadedmetadata", seekBack);
12425
- }
12426
- el.play?.()?.catch?.(() => {
12427
- });
12428
- } catch {
12429
- }
12430
- }, [clearStallTimer]);
12431
- const errorOverlay = monitorHealth && playbackFailed ? /* @__PURE__ */ jsx76(VideoErrorOverlay, { onRetry: retryPlayback }) : null;
12432
12342
  const player = /* @__PURE__ */ jsx76(
12433
12343
  MuxPlayer,
12434
12344
  {
12435
12345
  ref: hoverPlayerRef,
12436
- onError: handleMediaError,
12437
- onWaiting: armStallTimer,
12438
- onStalled: armStallTimer,
12439
- onPlaying: handlePlaybackProgress,
12440
- onTimeUpdate: handlePlaybackProgress,
12441
- onPause: clearStallTimer,
12442
12346
  src: url,
12443
12347
  poster: poster || void 0,
12444
12348
  streamType: "on-demand",
@@ -12476,15 +12380,19 @@ function FilePlayer({
12476
12380
  if (playOnHover && !hoverControlled) {
12477
12381
  return /* @__PURE__ */ jsxs57("div", { className: "relative h-full w-full", onPointerEnter: handleHoverEnter, onPointerLeave: handleHoverLeave, children: [
12478
12382
  player,
12479
- unmuteBadge,
12480
- errorOverlay
12383
+ unmuteBadge
12481
12384
  ] });
12482
12385
  }
12483
- if (hoverControlled || autoPlayUnmuted || startMuted || monitorHealth) {
12386
+ if (hoverControlled) {
12484
12387
  return /* @__PURE__ */ jsxs57("div", { className: "relative h-full w-full", children: [
12485
12388
  player,
12486
- unmuteBadge,
12487
- errorOverlay
12389
+ unmuteBadge
12390
+ ] });
12391
+ }
12392
+ if (autoPlayUnmuted || startMuted) {
12393
+ return /* @__PURE__ */ jsxs57("div", { className: "relative h-full w-full", children: [
12394
+ player,
12395
+ unmuteBadge
12488
12396
  ] });
12489
12397
  }
12490
12398
  return player;
@@ -12526,8 +12434,7 @@ function toYouTubeMessage(parsed) {
12526
12434
  const playerState = typeof info === "object" && info !== null && "playerState" in info ? info.playerState : void 0;
12527
12435
  return {
12528
12436
  event: typeof event === "string" ? event : void 0,
12529
- info: { playerState: typeof playerState === "number" ? playerState : void 0 },
12530
- errorCode: typeof info === "number" ? info : void 0
12437
+ info: { playerState: typeof playerState === "number" ? playerState : void 0 }
12531
12438
  };
12532
12439
  }
12533
12440
  function YouTubeFacadeInner({
@@ -12540,13 +12447,7 @@ function YouTubeFacadeInner({
12540
12447
  suspended
12541
12448
  }) {
12542
12449
  const [activated, setActivated] = useState25(Boolean(autoActivate));
12543
- const [failed, setFailed] = useState25(false);
12544
- const [reloadNonce, setReloadNonce] = useState25(0);
12545
12450
  const iframeRef = useRef15(null);
12546
- const retry = useCallback11(() => {
12547
- setFailed(false);
12548
- setReloadNonce((n) => n + 1);
12549
- }, []);
12550
12451
  const embedUrl = useMemo20(() => {
12551
12452
  const params = new URLSearchParams({
12552
12453
  autoplay: "1",
@@ -12578,7 +12479,7 @@ function YouTubeFacadeInner({
12578
12479
  const posterWebp = `https://i.ytimg.com/vi_webp/${videoId}/${posterQuality}.webp`;
12579
12480
  const handlePosterError = () => setPosterTier((tier) => Math.min(tier + 1, YT_POSTER_TIERS.length - 1));
12580
12481
  useEffect19(() => {
12581
- if (!activated || failed) return void 0;
12482
+ if (!activated) return void 0;
12582
12483
  const iframe = iframeRef.current;
12583
12484
  if (!iframe) return void 0;
12584
12485
  function subscribe2() {
@@ -12596,13 +12497,7 @@ function YouTubeFacadeInner({
12596
12497
  } catch {
12597
12498
  return;
12598
12499
  }
12599
- if (!payload) return;
12600
- if (payload.event === "onError") {
12601
- setFailed(true);
12602
- reportPlaybackFailure({ kind: "youtube", src: videoId, reason: "error", errorCode: payload.errorCode });
12603
- return;
12604
- }
12605
- if (payload.event !== "infoDelivery") return;
12500
+ if (!payload || payload.event !== "infoDelivery") return;
12606
12501
  const state = payload.info?.playerState;
12607
12502
  if (typeof state !== "number") return;
12608
12503
  if (state === YT_STATE_PLAYING) {
@@ -12623,7 +12518,7 @@ function YouTubeFacadeInner({
12623
12518
  window.removeEventListener("message", handleMessage);
12624
12519
  if (blurTimer !== null) clearTimeout(blurTimer);
12625
12520
  };
12626
- }, [activated, failed, reloadNonce, videoId]);
12521
+ }, [activated]);
12627
12522
  const prevSuspendedRef = useRef15(false);
12628
12523
  useEffect19(() => {
12629
12524
  const wasSuspended = prevSuspendedRef.current;
@@ -12638,9 +12533,6 @@ function YouTubeFacadeInner({
12638
12533
  }, [suspended, activated]);
12639
12534
  const wrapperClass = `relative w-full ${className ?? ""}`;
12640
12535
  const wrapperStyle = { paddingBottom: "56.25%" };
12641
- if (activated && failed) {
12642
- return /* @__PURE__ */ jsx76("div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ jsx76(VideoErrorOverlay, { onRetry: retry, watchOnYouTubeId: videoId }) });
12643
- }
12644
12536
  if (activated) {
12645
12537
  return /* @__PURE__ */ jsx76("div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ jsx76(
12646
12538
  "iframe",
@@ -12652,8 +12544,7 @@ function YouTubeFacadeInner({
12652
12544
  referrerPolicy: "strict-origin-when-cross-origin",
12653
12545
  title,
12654
12546
  className: "absolute inset-0 h-full w-full rounded-lg border-0"
12655
- },
12656
- reloadNonce
12547
+ }
12657
12548
  ) });
12658
12549
  }
12659
12550
  return /* @__PURE__ */ jsx76("div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ jsxs57(
@@ -24582,7 +24473,6 @@ export {
24582
24473
  VideoPlayBadge,
24583
24474
  VideoUnmuteGlyph,
24584
24475
  extractYouTubeId,
24585
- VIDEO_PLAYBACK_FAILED_EVENT,
24586
24476
  Video2 as Video,
24587
24477
  HoverDropdown,
24588
24478
  ExpandChevron,
@@ -24848,4 +24738,4 @@ export {
24848
24738
  buildStreamFrames,
24849
24739
  EmbeddableChat
24850
24740
  };
24851
- //# sourceMappingURL=chunk-F227VMPL.js.map
24741
+ //# sourceMappingURL=chunk-HJVKPG55.js.map