@acoustte-digital-services/digitalstore-controls-dev 0.8.1-dev.20260423063335 → 0.8.1-dev.20260423070204

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.
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  HlsPlayer_default
4
- } from "./chunk-VNSFFK3H.mjs";
4
+ } from "./chunk-TXHD4F4A.mjs";
5
5
  export {
6
6
  HlsPlayer_default as default
7
7
  };
@@ -20,6 +20,7 @@ var HlsPlayer = React.memo(
20
20
  const [isHovered, setIsHovered] = useState(false);
21
21
  const [isMobile, setIsMobile] = useState(false);
22
22
  const [isControlsVisible, setIsControlsVisible] = useState(true);
23
+ const [isPosterVisible, setIsPosterVisible] = useState(true);
23
24
  const wasManuallyPausedRef = useRef(false);
24
25
  const inactivityTimerRef = useRef(null);
25
26
  const INACTIVITY_DELAY = 2500;
@@ -37,6 +38,20 @@ var HlsPlayer = React.memo(
37
38
  window.addEventListener("resize", checkMobile);
38
39
  return () => window.removeEventListener("resize", checkMobile);
39
40
  }, []);
41
+ useEffect(() => {
42
+ const v = videoRef.current;
43
+ if (!v) return;
44
+ const onPlaying = () => setIsPosterVisible(false);
45
+ const onPause = () => {
46
+ if (v.currentTime === 0) setIsPosterVisible(true);
47
+ };
48
+ v.addEventListener("playing", onPlaying);
49
+ v.addEventListener("pause", onPause);
50
+ return () => {
51
+ v.removeEventListener("playing", onPlaying);
52
+ v.removeEventListener("pause", onPause);
53
+ };
54
+ }, []);
40
55
  const resetInactivityTimer = useCallback(() => {
41
56
  setIsControlsVisible(true);
42
57
  if (inactivityTimerRef.current) clearTimeout(inactivityTimerRef.current);
@@ -127,6 +142,7 @@ var HlsPlayer = React.memo(
127
142
  }, [isMobile, resetInactivityTimer]);
128
143
  const posterSources = resolvedSources.filter((s) => s.media && s.posterUrl);
129
144
  const fallbackPoster = posterUrl ?? resolvedSources.find((s) => !s.media)?.posterUrl ?? resolvedSources[0]?.posterUrl;
145
+ const isPlayOnHover = playOptions === "playOnHover";
130
146
  if (resolvedSources.length === 0) return null;
131
147
  return /* @__PURE__ */ jsxs(
132
148
  "div",
@@ -143,7 +159,7 @@ var HlsPlayer = React.memo(
143
159
  className: "w-full h-full object-contain",
144
160
  poster: fallbackPoster,
145
161
  controls: showControls && (isMobile || isPlaying),
146
- muted: playOptions === "autoplay" || playOptions === "playOnHover",
162
+ muted: playOptions === "autoplay" || isPlayOnHover,
147
163
  autoPlay: playOptions === "autoplay",
148
164
  loop,
149
165
  playsInline: true,
@@ -159,10 +175,14 @@ var HlsPlayer = React.memo(
159
175
  ))
160
176
  }
161
177
  ),
162
- !isMobile && playOptions === "playOnHover" && fallbackPoster && /* @__PURE__ */ jsxs(
178
+ !isMobile && fallbackPoster && /* @__PURE__ */ jsxs(
163
179
  "picture",
164
180
  {
165
- className: `absolute inset-0 transition-opacity ${isHovered ? "opacity-0" : "opacity-100"}`,
181
+ className: "absolute inset-0 pointer-events-none",
182
+ style: {
183
+ opacity: isPosterVisible && (!isPlayOnHover || !isHovered) ? 1 : 0,
184
+ transition: "opacity 0.4s ease"
185
+ },
166
186
  children: [
167
187
  posterSources.map(({ media, posterUrl: src }, i) => /* @__PURE__ */ jsx("source", { media, srcSet: src }, i)),
168
188
  /* @__PURE__ */ jsx(
@@ -178,7 +198,7 @@ var HlsPlayer = React.memo(
178
198
  ]
179
199
  }
180
200
  ),
181
- !isMobile && /* @__PURE__ */ jsx(
201
+ !isMobile && !isPlayOnHover && /* @__PURE__ */ jsx(
182
202
  "div",
183
203
  {
184
204
  className: "absolute inset-0 flex items-center justify-center pointer-events-none",
package/dist/index.js CHANGED
@@ -515,6 +515,7 @@ var init_HlsPlayer = __esm({
515
515
  const [isHovered, setIsHovered] = (0, import_react35.useState)(false);
516
516
  const [isMobile, setIsMobile] = (0, import_react35.useState)(false);
517
517
  const [isControlsVisible, setIsControlsVisible] = (0, import_react35.useState)(true);
518
+ const [isPosterVisible, setIsPosterVisible] = (0, import_react35.useState)(true);
518
519
  const wasManuallyPausedRef = (0, import_react35.useRef)(false);
519
520
  const inactivityTimerRef = (0, import_react35.useRef)(null);
520
521
  const INACTIVITY_DELAY = 2500;
@@ -532,6 +533,20 @@ var init_HlsPlayer = __esm({
532
533
  window.addEventListener("resize", checkMobile);
533
534
  return () => window.removeEventListener("resize", checkMobile);
534
535
  }, []);
536
+ (0, import_react35.useEffect)(() => {
537
+ const v = videoRef.current;
538
+ if (!v) return;
539
+ const onPlaying = () => setIsPosterVisible(false);
540
+ const onPause = () => {
541
+ if (v.currentTime === 0) setIsPosterVisible(true);
542
+ };
543
+ v.addEventListener("playing", onPlaying);
544
+ v.addEventListener("pause", onPause);
545
+ return () => {
546
+ v.removeEventListener("playing", onPlaying);
547
+ v.removeEventListener("pause", onPause);
548
+ };
549
+ }, []);
535
550
  const resetInactivityTimer = (0, import_react35.useCallback)(() => {
536
551
  setIsControlsVisible(true);
537
552
  if (inactivityTimerRef.current) clearTimeout(inactivityTimerRef.current);
@@ -622,6 +637,7 @@ var init_HlsPlayer = __esm({
622
637
  }, [isMobile, resetInactivityTimer]);
623
638
  const posterSources = resolvedSources.filter((s) => s.media && s.posterUrl);
624
639
  const fallbackPoster = posterUrl ?? resolvedSources.find((s) => !s.media)?.posterUrl ?? resolvedSources[0]?.posterUrl;
640
+ const isPlayOnHover = playOptions === "playOnHover";
625
641
  if (resolvedSources.length === 0) return null;
626
642
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
627
643
  "div",
@@ -638,7 +654,7 @@ var init_HlsPlayer = __esm({
638
654
  className: "w-full h-full object-contain",
639
655
  poster: fallbackPoster,
640
656
  controls: showControls && (isMobile || isPlaying),
641
- muted: playOptions === "autoplay" || playOptions === "playOnHover",
657
+ muted: playOptions === "autoplay" || isPlayOnHover,
642
658
  autoPlay: playOptions === "autoplay",
643
659
  loop,
644
660
  playsInline: true,
@@ -654,10 +670,14 @@ var init_HlsPlayer = __esm({
654
670
  ))
655
671
  }
656
672
  ),
657
- !isMobile && playOptions === "playOnHover" && fallbackPoster && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
673
+ !isMobile && fallbackPoster && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
658
674
  "picture",
659
675
  {
660
- className: `absolute inset-0 transition-opacity ${isHovered ? "opacity-0" : "opacity-100"}`,
676
+ className: "absolute inset-0 pointer-events-none",
677
+ style: {
678
+ opacity: isPosterVisible && (!isPlayOnHover || !isHovered) ? 1 : 0,
679
+ transition: "opacity 0.4s ease"
680
+ },
661
681
  children: [
662
682
  posterSources.map(({ media, posterUrl: src }, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("source", { media, srcSet: src }, i)),
663
683
  /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
@@ -673,7 +693,7 @@ var init_HlsPlayer = __esm({
673
693
  ]
674
694
  }
675
695
  ),
676
- !isMobile && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
696
+ !isMobile && !isPlayOnHover && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
677
697
  "div",
678
698
  {
679
699
  className: "absolute inset-0 flex items-center justify-center pointer-events-none",
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  HlsPlayer_default
3
- } from "./chunk-VNSFFK3H.mjs";
3
+ } from "./chunk-TXHD4F4A.mjs";
4
4
  import {
5
5
  Button_default,
6
6
  ServiceClient_default,
@@ -2782,7 +2782,7 @@ var DeviceAssetSelector_default = DeviceAssetSelector;
2782
2782
 
2783
2783
  // src/components/pageRenderingEngine/nodes/ImageNode.tsx
2784
2784
  import { Fragment as Fragment3, jsx as jsx41 } from "react/jsx-runtime";
2785
- var HlsPlayer = dynamic(() => import("./HlsPlayer-CTZICLSJ.mjs"), {
2785
+ var HlsPlayer = dynamic(() => import("./HlsPlayer-GV3FOPYT.mjs"), {
2786
2786
  ssr: false
2787
2787
  });
2788
2788
  var getNestedValue = (obj, path) => {
@@ -4251,7 +4251,7 @@ var Pagination_default = Pagination;
4251
4251
  // src/components/pageRenderingEngine/nodes/ImageGalleryNode.tsx
4252
4252
  import dynamic5 from "next/dynamic";
4253
4253
  import { Fragment as Fragment9, jsx as jsx60, jsxs as jsxs33 } from "react/jsx-runtime";
4254
- var HlsPlayer2 = dynamic5(() => import("./HlsPlayer-CTZICLSJ.mjs"), { ssr: false });
4254
+ var HlsPlayer2 = dynamic5(() => import("./HlsPlayer-GV3FOPYT.mjs"), { ssr: false });
4255
4255
  var deviceToMediaQuery = (device) => {
4256
4256
  switch (device) {
4257
4257
  case "sm":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acoustte-digital-services/digitalstore-controls-dev",
3
- "version": "0.8.1-dev.20260423063335",
3
+ "version": "0.8.1-dev.20260423070204",
4
4
  "description": "Reusable React components",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",