"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __getProtoOf = Object.getPrototypeOf;
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));
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
  __markAsModule(target);
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, desc) => {
  if (module2 && typeof module2 === "object" || typeof module2 === "function") {
    for (let key of __getOwnPropNames(module2))
      if (!__hasOwnProp.call(target, key) && key !== "default")
        __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
  }
  return target;
};
var __toModule = (module2) => {
  return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};

// src/index.ts
__export(exports, {
  SolidDashPlyr: () => SolidDashPlyr,
  SolidHlsPlyr: () => SolidHlsPlyr,
  SolidPlyr: () => SolidPlyr,
  UncontrolledPlyr: () => UncontrolledPlyr,
  createDashPlyr: () => createDashPlyr,
  createHlsPlyr: () => createHlsPlyr,
  createPlyr: () => createPlyr
});

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

// src/createPlyr/index.ts
var import_solid_js2 = __toModule(require("solid-js"));
var import_plyr = __toModule(require("plyr"));
function createPlyr(props) {
  const [
    plyr,
    setPlyr
  ] = (0, import_solid_js2.createSignal)();
  (0, import_solid_js2.createEffect)(() => {
    var _a;
    const options = (_a = props.options) != null ? _a : {};
    const newPlayer = new import_plyr.default(".solid-plyr", options);
    newPlayer.source = props.source;
    setPlyr((current) => current ? __spreadProps(__spreadValues({}, current), {
      plyr: newPlayer
    }) : void 0);
    (0, import_solid_js2.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
var import_solid_js3 = __toModule(require("solid-js"));
var import_plyr2 = __toModule(require("plyr"));
var import_dashjs = __toModule(require("dashjs"));
function createDashPlyr(props) {
  var _a;
  const [
    plyr,
    setPlyr
  ] = (0, import_solid_js3.createSignal)();
  const [
    dashPlyr,
    setDashPlyr
  ] = (0, import_solid_js3.createSignal)();
  const dash = (0, import_solid_js3.createMemo)(() => import_dashjs.default.MediaPlayer().create());
  const [
    availableQualities,
    setAvailableQualities
  ] = (0, import_solid_js3.createSignal)();
  const options = (_a = props.options) != null ? _a : {};
  const { source } = props;
  const currentSource = source.sources[0].src;
  (0, import_solid_js3.createEffect)(() => {
    var _a2;
    const plyrInstance = plyr();
    const dashInstance = dash();
    if (!window) {
      return;
    }
    window.dashjs = window.dashjs || {};
    if (plyrInstance) {
      if (!import_dashjs.default.supportsMediaSource) {
        const newPlayer = new import_plyr2.default(".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);
        });
      }
    }
  });
  (0, import_solid_js3.createEffect)(() => {
    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 import_plyr2.default(".solid-plyr", newOptions);
      plyrInstance.plyr = newPlayer;
      setDashPlyr(plyrInstance);
    }
    (0, import_solid_js3.onCleanup)(() => {
      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
var import_solid_js4 = __toModule(require("solid-js"));
var import_plyr3 = __toModule(require("plyr"));
var import_hls = __toModule(require("hls.js"));
function createHlsPlyr(props) {
  var _a;
  const [
    plyr,
    setPlyr
  ] = (0, import_solid_js4.createSignal)();
  const [
    hlsPlyr,
    setHlsPlyr
  ] = (0, import_solid_js4.createSignal)();
  const hls = (0, import_solid_js4.createMemo)(() => new import_hls.default());
  const [
    availableQualities,
    setAvailableQualities
  ] = (0, import_solid_js4.createSignal)();
  const options = (_a = props.options) != null ? _a : {};
  const { source } = props;
  const currentSource = source.sources[0].src;
  (0, import_solid_js4.createEffect)(() => {
    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 import_plyr3.default(".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 (!import_hls.default.isSupported()) {
        const newPlayer = new import_plyr3.default(".solid-plyr", options);
        plyrInstance.plyr = newPlayer;
        setHlsPlyr(plyrInstance);
      } else {
        hlsInstance.loadSource(currentSource);
        hlsInstance.on(import_hls.default.Events.MANIFEST_PARSED, () => {
          const availableLevels = hlsInstance.levels.map((level) => level.height);
          const qualities = [0, ...availableLevels];
          setAvailableQualities(qualities);
          hlsInstance.on(import_hls.default.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`;
              }
            }
          });
        });
      }
    }
  });
  (0, import_solid_js4.createEffect)(() => {
    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 import_plyr3.default(".solid-plyr", newOptions);
      plyrInstance.plyr = newPlayer;
      setHlsPlyr(plyrInstance);
      hlsInstance.attachMedia(plyrInstance);
      window.hls = hlsInstance;
    }
    (0, import_solid_js4.onCleanup)(() => {
      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()} />;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  SolidDashPlyr,
  SolidHlsPlyr,
  SolidPlyr,
  UncontrolledPlyr,
  createDashPlyr,
  createHlsPlyr,
  createPlyr
});
//# sourceMappingURL=index.jsx.map
