@hanifhan1f/vidstack-react 1.12.17 → 1.12.19

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.
@@ -1328,7 +1328,7 @@ function DefaultVideoLargeLayout() {
1328
1328
  React.useEffect(() => {
1329
1329
  if (!$fullscreen) setEpisodesOpen(false);
1330
1330
  }, [$fullscreen]);
1331
- const canOpenEpisodes = ($fullscreen || isSmallLayout) && list.length > 0;
1331
+ const canOpenEpisodes = $fullscreen && list.length > 0;
1332
1332
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DefaultAnnouncer, null), /* @__PURE__ */ React.createElement(DefaultVideoGestures, null), /* @__PURE__ */ React.createElement(DefaultVideoKeyboardDisplay, null), slot(slots, "bufferingIndicator", /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null)), slot(slots, "captions", /* @__PURE__ */ React.createElement(DefaultCaptions, null)), /* @__PURE__ */ React.createElement(Root$a, { className: "vds-controls" }, /* @__PURE__ */ React.createElement(Group, { className: "vds-controls-group" }, slot(slots, "topControlsGroupStart", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, "topControlsGroupCenter", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, "topControlsGroupEnd", null), menuGroup === "top" && /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots })), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: "vds-controls-group" }, slot(slots, "centerControlsGroupStart", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, "centerControlsGroupCenter", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, "centerControlsGroupEnd", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: "vds-controls-group" }, slot(slots, "timeSlider", /* @__PURE__ */ React.createElement(DefaultTimeSlider, null))), /* @__PURE__ */ React.createElement(Group, { className: "vds-controls-group" }, slot(slots, "playButton", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: "top start" })), /* @__PURE__ */ React.createElement(DefaultSeekButton, { backward: true, tooltip: "top" }), /* @__PURE__ */ React.createElement(DefaultSeekButton, { tooltip: "top" }), /* @__PURE__ */ React.createElement(DefaultVolumePopup, { orientation: "horizontal", tooltip: "top", slots }), /* @__PURE__ */ React.createElement(DefaultTimeInfo, { slots }), slot(slots, "chapterTitle", /* @__PURE__ */ React.createElement(DefaultTitle, null)), canOpenEpisodes ? /* @__PURE__ */ React.createElement(DefaultEpisodeButton, { tooltip: "top", onPress: () => setEpisodesOpen((open) => !open) }) : null, slot(slots, "captionButton", /* @__PURE__ */ React.createElement(DefaultCaptionButton, { tooltip: "top" })), menuGroup === "bottom" && /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots }), slot(slots, "airPlayButton", /* @__PURE__ */ React.createElement(DefaultAirPlayButton, { tooltip: "top" })), slot(slots, "googleCastButton", /* @__PURE__ */ React.createElement(DefaultGoogleCastButton, { tooltip: "top" })), slot(slots, "downloadButton", /* @__PURE__ */ React.createElement(DefaultDownloadButton, null)), slot(slots, "pipButton", /* @__PURE__ */ React.createElement(DefaultPIPButton, { tooltip: "top" })), slot(slots, "fullscreenButton", /* @__PURE__ */ React.createElement(DefaultFullscreenButton, { tooltip: "top end" })))), /* @__PURE__ */ React.createElement(
1333
1333
  DefaultEpisodesSidebar,
1334
1334
  {
@@ -1345,7 +1345,7 @@ function DefaultVideoSmallLayout() {
1345
1345
  React.useEffect(() => {
1346
1346
  if (!$fullscreen) setEpisodesOpen(false);
1347
1347
  }, [$fullscreen]);
1348
- const canOpenEpisodes = ($fullscreen || isSmallLayout) && list.length > 0;
1348
+ const canOpenEpisodes = $fullscreen && list.length > 0;
1349
1349
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DefaultAnnouncer, null), /* @__PURE__ */ React.createElement(DefaultVideoGestures, null), /* @__PURE__ */ React.createElement(DefaultVideoKeyboardDisplay, null), slot(slots, "bufferingIndicator", /* @__PURE__ */ React.createElement(DefaultBufferingIndicator, null)), slot(slots, "captions", /* @__PURE__ */ React.createElement(DefaultCaptions, null)), /* @__PURE__ */ React.createElement(Root$a, { className: "vds-controls" }, /* @__PURE__ */ React.createElement(Group, { className: "vds-controls-group" }, slot(slots, "topControlsGroupStart", null), slot(slots, "airPlayButton", /* @__PURE__ */ React.createElement(DefaultAirPlayButton, { tooltip: "top start" })), slot(slots, "googleCastButton", /* @__PURE__ */ React.createElement(DefaultGoogleCastButton, { tooltip: "top start" })), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, "topControlsGroupCenter", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, "captionButton", /* @__PURE__ */ React.createElement(DefaultCaptionButton, { tooltip: "bottom" })), slot(slots, "downloadButton", /* @__PURE__ */ React.createElement(DefaultDownloadButton, null)), /* @__PURE__ */ React.createElement(DefaultVideoMenus, { slots }), /* @__PURE__ */ React.createElement(DefaultVolumePopup, { orientation: "vertical", tooltip: "bottom end", slots }), slot(slots, "topControlsGroupEnd", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: "vds-controls-group" }, slot(slots, "centerControlsGroupStart", null), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(DefaultSeekButton, { backward: true, tooltip: "top" }), slot(slots, "centerControlsGroupCenter", null), slot(slots, "playButton", /* @__PURE__ */ React.createElement(DefaultPlayButton, { tooltip: "top" })), /* @__PURE__ */ React.createElement(DefaultSeekButton, { tooltip: "top" }), canOpenEpisodes ? /* @__PURE__ */ React.createElement(DefaultEpisodeButton, { tooltip: "top", onPress: () => setEpisodesOpen((open) => !open) }) : null, /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), slot(slots, "centerControlsGroupEnd", null)), /* @__PURE__ */ React.createElement(DefaultControlsSpacer, null), /* @__PURE__ */ React.createElement(Group, { className: "vds-controls-group" }, /* @__PURE__ */ React.createElement(DefaultTimeInfo, { slots }), slot(slots, "chapterTitle", /* @__PURE__ */ React.createElement(DefaultTitle, null)), slot(slots, "fullscreenButton", /* @__PURE__ */ React.createElement(DefaultFullscreenButton, { tooltip: "top end" }))), /* @__PURE__ */ React.createElement(Group, { className: "vds-controls-group" }, slot(slots, "timeSlider", /* @__PURE__ */ React.createElement(DefaultTimeSlider, null)))), slot(slots, "startDuration", /* @__PURE__ */ React.createElement(DefaultVideoStartDuration, null)), /* @__PURE__ */ React.createElement(
1350
1350
  DefaultEpisodesSidebar,
1351
1351
  {
@@ -1401,14 +1401,33 @@ function DefaultVideoMenus({ slots }) {
1401
1401
  ));
1402
1402
  }
1403
1403
  DefaultVideoMenus.displayName = "DefaultVideoMenus";
1404
+ function formatMinutesLeftLabel(secondsLeft) {
1405
+ if (secondsLeft <= 0) return null;
1406
+ if (secondsLeft < 60) return "<1m left";
1407
+ const m = Math.floor(secondsLeft / 60);
1408
+ return `${m}m left`;
1409
+ }
1404
1410
  function DefaultEpisodesSidebar({
1405
1411
  open,
1406
1412
  onClose,
1407
1413
  episodes,
1408
1414
  episodesTitle
1409
1415
  }) {
1410
- const $fullscreen = useMediaState("fullscreen"), { isSmallLayout } = useDefaultLayoutContext();
1411
- if (!$fullscreen && !isSmallLayout || episodes.length === 0) return null;
1416
+ const $fullscreen = useMediaState("fullscreen"), currentTime = useMediaState("currentTime"), duration = useMediaState("duration"), listRef = React.useRef(null), wasEpisodesOpenRef = React.useRef(false);
1417
+ React.useLayoutEffect(() => {
1418
+ const justOpened = open && !wasEpisodesOpenRef.current;
1419
+ wasEpisodesOpenRef.current = open;
1420
+ if (!justOpened || !$fullscreen) return;
1421
+ const root = listRef.current;
1422
+ if (!root) return;
1423
+ requestAnimationFrame(() => {
1424
+ root.querySelector('[data-active="true"]')?.scrollIntoView({
1425
+ block: "nearest",
1426
+ behavior: "smooth"
1427
+ });
1428
+ });
1429
+ }, [open, $fullscreen]);
1430
+ if (!$fullscreen || episodes.length === 0) return null;
1412
1431
  return /* @__PURE__ */ React.createElement(
1413
1432
  "div",
1414
1433
  {
@@ -1438,12 +1457,15 @@ function DefaultEpisodesSidebar({
1438
1457
  onClose();
1439
1458
  }
1440
1459
  },
1441
- /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true" }, "x")
1460
+ /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true" }, "\u2715")
1442
1461
  )),
1443
- /* @__PURE__ */ React.createElement("div", { className: "vds-episodes-list", role: "list" }, episodes.map((episode, index) => {
1444
- const episodeName = episode.episodeTitle || `Episode ${episode.episodeNumber ?? index + 1}`, runtimeText = Number.isFinite(episode.runtime) ? `${episode.runtime}m` : null, seasonEpLabel = episode.seasonNumber != null && episode.episodeNumber != null ? `S${String(episode.seasonNumber).padStart(2, "0")} \xB7 E${String(episode.episodeNumber).padStart(2, "0")}` : episodeName;
1462
+ /* @__PURE__ */ React.createElement("div", { ref: listRef, className: "vds-episodes-list", role: "list" }, episodes.map((episode, index) => {
1463
+ const episodeName = episode.episodeTitle || `Episode ${episode.episodeNumber ?? index + 1}`;
1464
+ const seasonEpLabel = episode.seasonNumber != null && episode.episodeNumber != null ? `S${String(episode.seasonNumber).padStart(2, "0")} \xB7 E${String(episode.episodeNumber).padStart(2, "0")}` : episodeName;
1465
+ const isActive = !!episode.isActive;
1445
1466
  const onEpisodeSelect = (event) => {
1446
1467
  event.stopPropagation();
1468
+ if (isActive) return;
1447
1469
  event.currentTarget.dispatchEvent(
1448
1470
  new CustomEvent("vds-episode-select", {
1449
1471
  bubbles: true,
@@ -1453,11 +1475,29 @@ function DefaultEpisodesSidebar({
1453
1475
  );
1454
1476
  onClose();
1455
1477
  };
1478
+ let runtimeText = null;
1479
+ if (isActive && duration > 0) {
1480
+ const secsLeft = Math.max(0, duration - currentTime);
1481
+ runtimeText = formatMinutesLeftLabel(secsLeft);
1482
+ } else if (episode.timeLeft != null && episode.timeLeft > 0) {
1483
+ runtimeText = `${episode.timeLeft}m left`;
1484
+ } else if (Number.isFinite(episode.runtime) && (episode.runtime ?? 0) > 0) {
1485
+ runtimeText = `${episode.runtime}m`;
1486
+ }
1487
+ let progressPct = 0;
1488
+ if (isActive && duration > 0) {
1489
+ progressPct = Math.min(100, currentTime / duration * 100);
1490
+ } else if (episode.progressPercent != null && episode.progressPercent > 0) {
1491
+ progressPct = Math.min(100, episode.progressPercent);
1492
+ }
1493
+ const showSubtitle = !!episode.episodeTitle && episode.episodeTitle.trim() !== "" && episode.episodeTitle !== episode.title;
1456
1494
  return /* @__PURE__ */ React.createElement(
1457
1495
  "article",
1458
1496
  {
1459
1497
  key: `${episode.episodeNumber ?? index}-${episode.title ?? ""}`,
1460
1498
  className: "vds-episode-item",
1499
+ "data-active": isActive ? "true" : "false",
1500
+ "aria-current": isActive ? "true" : void 0,
1461
1501
  role: "button",
1462
1502
  tabIndex: 0,
1463
1503
  "aria-label": episode.title || episodeName,
@@ -1475,8 +1515,8 @@ function DefaultEpisodesSidebar({
1475
1515
  loading: "lazy",
1476
1516
  decoding: "async"
1477
1517
  }
1478
- ) : /* @__PURE__ */ React.createElement("div", { className: "vds-episode-thumb vds-episode-thumb-placeholder" })),
1479
- /* @__PURE__ */ React.createElement("div", { className: "vds-episode-body" }, /* @__PURE__ */ React.createElement("div", { className: "vds-episode-meta-row" }, /* @__PURE__ */ React.createElement("span", { className: "vds-episode-label" }, seasonEpLabel), runtimeText ? /* @__PURE__ */ React.createElement("span", { className: "vds-episode-runtime" }, runtimeText) : null), /* @__PURE__ */ React.createElement("h4", { className: "vds-episode-title", title: episode.title || "" }, episode.title || "-"), /* @__PURE__ */ React.createElement("p", { className: "vds-episode-subtitle", title: episodeName }, episodeName), episode.overview ? /* @__PURE__ */ React.createElement("p", { className: "vds-episode-desc", title: episode.overview }, episode.overview) : null)
1518
+ ) : /* @__PURE__ */ React.createElement("div", { className: "vds-episode-thumb vds-episode-thumb-placeholder" }), isActive ? /* @__PURE__ */ React.createElement("div", { className: "vds-episode-active-overlay", "aria-hidden": "true" }, /* @__PURE__ */ React.createElement("span", { className: "vds-episode-playing-badge" }, "Now playing")) : null, progressPct > 0 ? /* @__PURE__ */ React.createElement("div", { className: "vds-episode-progress-track", "aria-hidden": "true" }, /* @__PURE__ */ React.createElement("div", { className: "vds-episode-progress-fill", style: { width: `${progressPct}%` } })) : null),
1519
+ /* @__PURE__ */ React.createElement("div", { className: "vds-episode-body" }, /* @__PURE__ */ React.createElement("div", { className: "vds-episode-meta-row" }, /* @__PURE__ */ React.createElement("span", { className: "vds-episode-label" }, seasonEpLabel), runtimeText ? /* @__PURE__ */ React.createElement("span", { className: "vds-episode-runtime" }, runtimeText) : null), /* @__PURE__ */ React.createElement("h4", { className: "vds-episode-title", title: episode.title || "" }, episode.title || "-"), showSubtitle ? /* @__PURE__ */ React.createElement("p", { className: "vds-episode-subtitle", title: episode.episodeTitle }, episode.episodeTitle) : null, episode.overview ? /* @__PURE__ */ React.createElement("p", { className: "vds-episode-desc", title: episode.overview }, episode.overview) : null)
1480
1520
  );
1481
1521
  }))
1482
1522
  )
@@ -1441,7 +1441,8 @@ function DefaultEpisodesSidebar({
1441
1441
  /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true" }, "x")
1442
1442
  )),
1443
1443
  /* @__PURE__ */ React.createElement("div", { className: "vds-episodes-list", role: "list" }, episodes.map((episode, index) => {
1444
- const episodeName = episode.episodeTitle || `Episode ${episode.episodeNumber ?? index + 1}`, runtimeText = Number.isFinite(episode.runtime) && (episode.runtime ?? 0) > 0 ? `${episode.runtime} min left` : null, seasonEpLabel = episode.seasonNumber != null && episode.episodeNumber != null ? `S${String(episode.seasonNumber).padStart(2, "0")} \xB7 E${String(episode.episodeNumber).padStart(2, "0")}` : episodeName;
1444
+ const episodeName = episode.episodeTitle || `Episode ${episode.episodeNumber ?? index + 1}`;
1445
+ const seasonEpLabel = episode.seasonNumber != null && episode.episodeNumber != null ? `S${String(episode.seasonNumber).padStart(2, "0")} \xB7 E${String(episode.episodeNumber).padStart(2, "0")}` : episodeName;
1445
1446
  const onEpisodeSelect = (event) => {
1446
1447
  event.stopPropagation();
1447
1448
  event.currentTarget.dispatchEvent(
@@ -1453,30 +1454,36 @@ function DefaultEpisodesSidebar({
1453
1454
  );
1454
1455
  onClose();
1455
1456
  };
1457
+ const runtimeText = episode.timeLeft && episode.timeLeft > 0 ? `${episode.timeLeft}m left` : Number.isFinite(episode.runtime) && (episode.runtime ?? 0) > 0 ? `${episode.runtime}m` : null;
1456
1458
  return /* @__PURE__ */ React.createElement(
1457
1459
  "article",
1458
1460
  {
1459
1461
  key: `${episode.episodeNumber ?? index}-${episode.title ?? ""}`,
1460
1462
  className: "vds-episode-item",
1463
+ "data-active": episode.isActive ? "true" : "false",
1461
1464
  role: "button",
1462
1465
  tabIndex: 0,
1463
1466
  "aria-label": episode.title || episodeName,
1464
1467
  onPointerUp: onEpisodeSelect,
1465
1468
  onKeyDown: (event) => {
1466
1469
  if (event.key === "Enter" || event.key === " ") onEpisodeSelect(event);
1470
+ },
1471
+ style: {
1472
+ ...episode.isActive ? { borderLeft: "3px solid #ef4444", backgroundColor: "rgba(255,255,255,0.05)" } : {}
1467
1473
  }
1468
1474
  },
1469
- /* @__PURE__ */ React.createElement("div", { className: "vds-episode-thumb-wrap" }, episode.thumbnail ? /* @__PURE__ */ React.createElement(
1475
+ /* @__PURE__ */ React.createElement("div", { className: "vds-episode-thumb-wrap", style: { position: "relative", overflow: "hidden" } }, episode.thumbnail ? /* @__PURE__ */ React.createElement(
1470
1476
  "img",
1471
1477
  {
1472
1478
  className: "vds-episode-thumb",
1473
1479
  src: episode.thumbnail,
1474
1480
  alt: episode.title || episodeName,
1475
1481
  loading: "lazy",
1476
- decoding: "async"
1482
+ decoding: "async",
1483
+ style: episode.isActive ? { filter: "brightness(0.7)" } : {}
1477
1484
  }
1478
- ) : /* @__PURE__ */ React.createElement("div", { className: "vds-episode-thumb vds-episode-thumb-placeholder" })),
1479
- /* @__PURE__ */ React.createElement("div", { className: "vds-episode-body" }, /* @__PURE__ */ React.createElement("div", { className: "vds-episode-meta-row" }, /* @__PURE__ */ React.createElement("span", { className: "vds-episode-label" }, seasonEpLabel), runtimeText ? /* @__PURE__ */ React.createElement("span", { className: "vds-episode-runtime" }, runtimeText) : null), /* @__PURE__ */ React.createElement("h4", { className: "vds-episode-title", title: episode.title || "" }, episode.title || "-"), /* @__PURE__ */ React.createElement("p", { className: "vds-episode-subtitle", title: episodeName }, episodeName), episode.overview ? /* @__PURE__ */ React.createElement("p", { className: "vds-episode-desc", title: episode.overview }, episode.overview) : null)
1485
+ ) : /* @__PURE__ */ React.createElement("div", { className: "vds-episode-thumb vds-episode-thumb-placeholder" }), episode.isActive && /* @__PURE__ */ React.createElement("div", { className: "vds-episode-active-overlay", style: { position: "absolute", inset: 0, display: "flex", alignItems: "center", justifyContent: "center", backgroundColor: "rgba(0,0,0,0.3)" } }, /* @__PURE__ */ React.createElement("span", { style: { backgroundColor: "#ef4444", color: "#fff", fontSize: "10px", fontWeight: "bold", padding: "2px 6px", borderRadius: "4px", textTransform: "uppercase", letterSpacing: "0.5px" } }, "Playing")), episode.progressPercent && episode.progressPercent > 0 ? /* @__PURE__ */ React.createElement("div", { style: { position: "absolute", bottom: 0, left: 0, right: 0, height: "4px", backgroundColor: "rgba(255,255,255,0.2)" } }, /* @__PURE__ */ React.createElement("div", { style: { height: "100%", backgroundColor: "#ef4444", width: `${Math.min(episode.progressPercent, 100)}%` } })) : null),
1486
+ /* @__PURE__ */ React.createElement("div", { className: "vds-episode-body" }, /* @__PURE__ */ React.createElement("div", { className: "vds-episode-meta-row" }, /* @__PURE__ */ React.createElement("span", { className: "vds-episode-label", style: episode.isActive ? { color: "#ef4444" } : {} }, seasonEpLabel), runtimeText ? /* @__PURE__ */ React.createElement("span", { className: "vds-episode-runtime" }, runtimeText) : null), /* @__PURE__ */ React.createElement("h4", { className: "vds-episode-title", title: episode.title || "", style: episode.isActive ? { color: "#fff" } : {} }, episode.title || "-"), /* @__PURE__ */ React.createElement("p", { className: "vds-episode-subtitle", title: episodeName }, episodeName), episode.overview ? /* @__PURE__ */ React.createElement("p", { className: "vds-episode-desc", title: episode.overview }, episode.overview) : null)
1480
1487
  );
1481
1488
  }))
1482
1489
  )
@@ -1,6 +1,6 @@
1
1
  "use client"
2
2
 
3
- export { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions } from '../chunks/vidstack-C6mbdfF1.js';
3
+ export { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions } from '../chunks/vidstack-Ct1NFlBa.js';
4
4
  export { defaultLayoutIcons } from './vidstack-default-icons.js';
5
5
  import 'react';
6
6
  import '../chunks/vidstack-D_bWd66h.js';
@@ -1,6 +1,6 @@
1
1
  "use client"
2
2
 
3
- export { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultLayoutContext, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions, i18n, useDefaultLayoutContext, useDefaultLayoutWord } from '../chunks/vidstack-C6mbdfF1.js';
3
+ export { DefaultAudioLayout, DefaultBufferingIndicator, DefaultKeyboardDisplay, DefaultLayoutContext, DefaultMenuButton, DefaultMenuCheckbox, DefaultMenuItem, DefaultMenuRadioGroup, DefaultMenuSection, DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps, DefaultTooltip, DefaultVideoGestures, DefaultVideoLargeLayout, DefaultVideoLayout, DefaultVideoSmallLayout, createRadioOptions, i18n, useDefaultLayoutContext, useDefaultLayoutWord } from '../chunks/vidstack-Ct1NFlBa.js';
4
4
  export { defaultLayoutIcons } from './vidstack-default-icons.js';
5
5
  import 'react';
6
6
  import '../chunks/vidstack-D_bWd66h.js';