var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
  for (var prop in b || (b = {}))
    if (__hasOwnProp.call(b, prop))
      __defNormalProp(a, prop, b[prop]);
  if (__getOwnPropSymbols)
    for (var prop of __getOwnPropSymbols(b)) {
      if (__propIsEnum.call(b, prop))
        __defNormalProp(a, prop, b[prop]);
    }
  return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));

// src/UncontrolledPlyr/index.tsx
import { Show } from "solid-js";
function UncontrolledPlyr(props) {
  return <>
    <Show when={props.isLoading}><Show when={props.fallback} fallback={<div class="lion-spinner-container"><div class="lion-spinner lion-spinner-wave" /></div>}>{(fallback) => fallback}</Show></Show>
    <div><video {...props} ref={props.ref} class="solid-plyr plyr" /></div>
  </>;
}

// src/createPlyr/index.ts
import {
  createSignal,
  createEffect,
  onCleanup
} from "solid-js";
import Plyr from "plyr";
function createPlyr(props) {
  const [
    plyr,
    setPlyr
  ] = createSignal();
  createEffect(() => {
    var _a;
    const options = (_a = props.options) != null ? _a : {};
    const newPlayer = new Plyr(".solid-plyr", options);
    newPlayer.source = props.source;
    setPlyr((current) => current ? __spreadProps(__spreadValues({}, current), {
      plyr: newPlayer
    }) : void 0);
    onCleanup(() => {
      newPlayer.destroy();
    });
  });
  return [plyr, setPlyr];
}

// src/SolidPlyr/index.tsx
function SolidPlyr(props) {
  const [plyr, setPlyr] = createPlyr(props);
  return <UncontrolledPlyr ref={setPlyr} isLoading={!plyr()} />;
}

// src/createDashPlyr/index.ts
import {
  createSignal as createSignal2,
  createEffect as createEffect2,
  onCleanup as onCleanup2,
  createMemo
} from "solid-js";
import Plyr2 from "plyr";
import Dash from "dashjs";
function createDashPlyr(props) {
  var _a;
  const [
    plyr,
    setPlyr
  ] = createSignal2();
  const [
    dashPlyr,
    setDashPlyr
  ] = createSignal2();
  const dash = createMemo(() => Dash.MediaPlayer().create());
  const [
    availableQualities,
    setAvailableQualities
  ] = createSignal2();
  const options = (_a = props.options) != null ? _a : {};
  const { source } = props;
  const currentSource = source.sources[0].src;
  createEffect2(() => {
    var _a2;
    const plyrInstance = plyr();
    const dashInstance = dash();
    if (!window) {
      return;
    }
    window.dashjs = window.dashjs || {};
    if (plyrInstance) {
      if (!Dash.supportsMediaSource) {
        const newPlayer = new Plyr2(".solid-plyr", options);
        plyrInstance.plyr = newPlayer;
        setDashPlyr(plyrInstance);
      } else {
        dashInstance.initialize(plyrInstance, currentSource, (_a2 = options == null ? void 0 : options.autoplay) != null ? _a2 : false);
        dashInstance.on("playbackMetaDataLoaded", () => {
          let span = document.querySelector(".plyr__menu__container [data-plyr='quality'][value='0'] span");
          if (span) {
            span.innerHTML = "AUTO";
          }
          const bitrateList = dashInstance.getBitrateInfoListFor("video");
          const availableLevels = bitrateList.map((bitrate) => bitrate.height);
          const qualities = [0, ...availableLevels];
          setAvailableQualities(qualities);
        });
      }
    }
  });
  createEffect2(() => {
    const plyrInstance = plyr();
    const dashInstance = dash();
    const qualityOptions = availableQualities();
    if (qualityOptions && plyrInstance) {
      const newOptions = __spreadProps(__spreadValues({}, options), {
        quality: {
          default: 720,
          options: qualityOptions,
          forced: true,
          onChange: (newQuality) => {
            dashInstance.setQualityFor("video", newQuality === 0 ? -1 : qualityOptions.indexOf(newQuality) - 1, true);
          }
        },
        i18n: {
          qualityLabel: {
            0: "Auto"
          }
        }
      });
      const newPlayer = new Plyr2(".solid-plyr", newOptions);
      plyrInstance.plyr = newPlayer;
      setDashPlyr(plyrInstance);
    }
    onCleanup2(() => {
      if (dashInstance && qualityOptions) {
        dashInstance.reset();
      }
    });
  });
  return [dashPlyr, setPlyr];
}

// src/SolidDashPlyr/index.tsx
function SolidDashPlyr(props) {
  const [plyr, setPlyr] = createDashPlyr(props);
  return <UncontrolledPlyr ref={setPlyr} isLoading={!plyr()} />;
}

// src/createHlsPlyr/index.ts
import {
  createSignal as createSignal3,
  createEffect as createEffect3,
  onCleanup as onCleanup3,
  createMemo as createMemo2
} from "solid-js";
import Plyr3 from "plyr";
import Hls from "hls.js";
function createHlsPlyr(props) {
  var _a;
  const [
    plyr,
    setPlyr
  ] = createSignal3();
  const [
    hlsPlyr,
    setHlsPlyr
  ] = createSignal3();
  const hls = createMemo2(() => new Hls());
  const [
    availableQualities,
    setAvailableQualities
  ] = createSignal3();
  const options = (_a = props.options) != null ? _a : {};
  const { source } = props;
  const currentSource = source.sources[0].src;
  createEffect3(() => {
    const plyrInstance = plyr();
    const hlsInstance = hls();
    if (!window) {
      return;
    }
    window.hls = window.hls || {};
    if (plyrInstance) {
      if (plyrInstance.canPlayType("application/vnd.apple.mpegURL")) {
        const newPlayer = new Plyr3(".solid-plyr", options);
        newPlayer.source = __spreadProps(__spreadValues({}, source), {
          sources: [
            __spreadProps(__spreadValues({}, source.sources[0]), {
              type: "application/vnd.apple.mpegURL"
            })
          ]
        });
        plyrInstance.plyr = newPlayer;
        setHlsPlyr(plyrInstance);
      } else if (!Hls.isSupported()) {
        const newPlayer = new Plyr3(".solid-plyr", options);
        plyrInstance.plyr = newPlayer;
        setHlsPlyr(plyrInstance);
      } else {
        hlsInstance.loadSource(currentSource);
        hlsInstance.on(Hls.Events.MANIFEST_PARSED, () => {
          const availableLevels = hlsInstance.levels.map((level) => level.height);
          const qualities = [0, ...availableLevels];
          setAvailableQualities(qualities);
          hlsInstance.on(Hls.Events.LEVEL_SWITCHED, (_, data) => {
            let span = document.querySelector(".plyr__menu__container [data-plyr='quality'][value='0'] span");
            if (span) {
              if (hlsInstance.autoLevelEnabled) {
                span.innerHTML = `AUTO (${hlsInstance.levels[data.level].height}p)`;
              } else {
                span.innerHTML = `AUTO`;
              }
            }
          });
        });
      }
    }
  });
  createEffect3(() => {
    const plyrInstance = plyr();
    const hlsInstance = hls();
    const qualityOptions = availableQualities();
    if (qualityOptions && plyrInstance) {
      const newOptions = __spreadProps(__spreadValues({}, options), {
        quality: {
          default: 720,
          options: qualityOptions,
          forced: true,
          onChange: (newQuality) => {
            if (newQuality === 0) {
              hlsInstance.currentLevel = -1;
            } else {
              hlsInstance.levels.forEach((level, levelIndex) => {
                if (level.height === newQuality) {
                  hlsInstance.currentLevel = levelIndex;
                }
              });
            }
          }
        },
        i18n: {
          qualityLabel: {
            0: "Auto"
          }
        }
      });
      const newPlayer = new Plyr3(".solid-plyr", newOptions);
      plyrInstance.plyr = newPlayer;
      setHlsPlyr(plyrInstance);
      hlsInstance.attachMedia(plyrInstance);
      window.hls = hlsInstance;
    }
    onCleanup3(() => {
      if (hlsInstance && qualityOptions) {
        hlsInstance.detachMedia();
      }
    });
  });
  return [hlsPlyr, setPlyr];
}

// src/SolidHlsPlyr/index.tsx
function SolidHlsPlyr(props) {
  const [plyr, setPlyr] = createHlsPlyr(props);
  return <UncontrolledPlyr ref={setPlyr} isLoading={!plyr()} />;
}
export {
  SolidDashPlyr,
  SolidHlsPlyr,
  SolidPlyr,
  UncontrolledPlyr,
  createDashPlyr,
  createHlsPlyr,
  createPlyr
};
//# sourceMappingURL=index.jsx.map
