{"version":3,"file":"ducanh2912-react-tuby.cjs","sources":["../src/components/ClientRender.tsx","../src/components/ErrorBoundary.tsx","../src/shared/utils.ts","../src/components/Icons/CircularProgress.tsx","../src/components/ClickAwayListener.tsx","../src/components/Icons/Cog.tsx","../src/components/Icons/ExitFullScreen.tsx","../src/components/Icons/FullScreen.tsx","../src/components/Icons/Pause.tsx","../src/components/Effect/PauseEffect.tsx","../src/components/Icons/PictureInPicture.tsx","../src/components/Icons/Play.tsx","../src/components/Effect/PlayEffect.tsx","../src/components/Icons/Check.tsx","../src/components/Icons/ChevronLeft.tsx","../src/components/Icons/ChevronRight.tsx","../src/components/Icons/Quality.tsx","../src/components/Icons/SelectSubtitle.tsx","../src/components/Icons/Speed.tsx","../src/components/SettingsDialog.tsx","../src/components/SettingsModal.tsx","../src/components/Icons/Subtitle.tsx","../src/components/Icons/VolumeFull.tsx","../src/components/Icons/VolumeHalf.tsx","../src/components/Icons/VolumeMuted.tsx","../src/hooks/useEffectUpdate.ts","../src/components/Main.tsx","../src/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport type { FC, ReactElement } from \"react\";\n\nconst ClientRender: FC<{ children: ReactElement }> = ({ children }) => {\n  const [rendered, setRendered] = useState(false);\n  useEffect(() => {\n    setRendered(true);\n  }, []);\n  return rendered ? children : <></>;\n};\n\nexport default ClientRender;\n","import React, { Component, createRef } from \"react\";\nimport type { ReactNode, RefObject, HTMLProps } from \"react\";\nimport type { SrcType, SubtitleType, RendererType } from \"../shared/types\";\n\ninterface Props {\n  renderer?: RendererType;\n  children?: ReactNode;\n  src: SrcType;\n  subtitles?: SubtitleType[];\n}\n\nclass ErrorBoundary extends Component<Props, { hasError: boolean }> {\n  playerRef: RefObject<HTMLVideoElement>;\n  videoProps: HTMLProps<HTMLVideoElement> & { src: string };\n  constructor(props: Props) {\n    super(props);\n    this.state = { hasError: false };\n    this.playerRef = createRef<HTMLVideoElement>();\n    this.videoProps = {\n      crossOrigin: \"anonymous\",\n      playsInline: true,\n      controls: true,\n      src:\n        typeof this.props.src === \"string\"\n          ? this.props.src\n          : this.props.src[0].url,\n      children: (\n        <>\n          {this.props.subtitles &&\n            this.props.subtitles.length > 0 &&\n            this.props.subtitles.map((subtitle, index) => (\n              <track\n                key={subtitle.lang}\n                kind=\"subtitles\"\n                srcLang={subtitle.lang}\n                label={subtitle.language}\n                src={subtitle.url}\n                default={index === 0}\n              />\n            ))}\n        </>\n      ),\n    };\n  }\n  static getDerivedStateFromError() {\n    return { hasError: true };\n  }\n  render() {\n    if (this.state.hasError) {\n      return (\n        <div className=\"tuby-container\">\n          {this.props.renderer ? (\n            this.props.renderer(this.playerRef, this.videoProps)\n          ) : (\n            // eslint-disable-next-line jsx-a11y/media-has-caption\n            <video ref={this.playerRef} {...this.videoProps} />\n          )}\n        </div>\n      );\n    }\n    return <>{this.props.children}</>;\n  }\n}\n\nexport default ErrorBoundary;\n","export const formatVideoTime = (time: number) => {\n  try {\n    const date = new Date(0);\n    date.setSeconds(time);\n    const timeString = date.toISOString().slice(11, 19);\n    const result = timeString.startsWith(\"00:0\")\n      ? timeString.slice(4)\n      : timeString.startsWith(\"00\")\n      ? timeString.slice(3)\n      : timeString;\n    return result;\n  } catch (error) {\n    return \"0:00\";\n  }\n};\n\nexport const isMobile = () =>\n  /iPhone|iPad|iPod|Android/i.test(window?.navigator?.userAgent);\n","import React from \"react\";\n\nconst CircularProgress = () => {\n  return (\n    <svg className=\"tuby-progress\" viewBox=\"25 25 50 50\">\n      <circle cx=\"50\" cy=\"50\" r=\"20\"></circle>\n    </svg>\n  );\n};\n\nexport default CircularProgress;\n","import React, { useEffect, useRef } from \"react\";\nimport type { FC, RefObject, ReactElement } from \"react\";\n\ninterface ClickAwayListenerProps {\n  onClickAway: () => void;\n  children: (ref: RefObject<HTMLDivElement>) => ReactElement;\n}\n\nconst ClickAwayListener: FC<ClickAwayListenerProps> = ({\n  children,\n  onClickAway,\n}) => {\n  const childrenRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handler = (e: MouseEvent) => {\n      if (\n        childrenRef.current &&\n        !childrenRef.current.contains(\n          // @ts-expect-error\n          e.target\n        )\n      ) {\n        onClickAway();\n      }\n    };\n\n    window.addEventListener(\"click\", handler);\n\n    return () => window.removeEventListener(\"click\", handler);\n  }, [onClickAway]);\n\n  return <>{children(childrenRef)}</>;\n};\n\nexport default ClickAwayListener;\n","import React from \"react\";\n\nconst Cog = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M44.1242 27.4467C44.2208 26.6625 44.2852 25.8469 44.2852 25C44.2852 24.1531 44.2208 23.3689 44.1242 22.5533L49.5331 18.4128C50.016 18.0364 50.1448 17.3777 49.8228 16.8131L44.6715 8.15558C44.3818 7.62233 43.6735 7.40276 43.1262 7.62233L36.7192 10.1317C35.3992 9.12798 33.9504 8.31242 32.3728 7.68507L31.4069 1.03513C31.3425 0.439147 30.7952 0 30.1513 0H19.8487C19.2048 0 18.6897 0.439147 18.5931 1.03513L17.6272 7.68507C16.0818 8.31242 14.633 9.15935 13.2808 10.1317L6.87385 7.62233C6.29432 7.40276 5.61822 7.62233 5.32846 8.15558L0.17715 16.8131C-0.144806 17.3463 0.0161725 18.0364 0.466912 18.4128L5.87578 22.5533C5.7792 23.3375 5.7148 24.1844 5.7148 25C5.7148 25.8156 5.7792 26.6311 5.87578 27.4467L0.466912 31.5872C-0.0160232 31.9636 -0.144806 32.6223 0.17715 33.187L5.32846 41.8444C5.61822 42.3777 6.32652 42.5972 6.87385 42.3777L13.2808 39.8683C14.6008 40.872 16.0496 41.6876 17.6272 42.3149L18.5931 48.9649C18.6575 49.5609 19.2048 50 19.8487 50H30.1513C30.7952 50 31.3103 49.5609 31.4069 48.9649L32.3728 42.3149C33.9182 41.6876 35.367 40.8407 36.7192 39.8683L43.1262 42.3777C43.7057 42.5972 44.3818 42.3777 44.6715 41.8444L49.8228 33.187C50.1126 32.6537 49.9838 31.9636 49.5331 31.5872L44.1242 27.4467V27.4467ZM25 33.7516C20.0419 33.7516 15.9852 29.8306 15.9852 24.9686C15.9852 20.138 20.0097 16.1857 25 16.1857C29.9581 16.1857 34.0148 20.1067 34.0148 24.9686C34.0148 29.7992 29.9903 33.7516 25 33.7516Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default Cog;\n","import React from \"react\";\n\nconst ExitFullScreen = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path d=\"M12.5 12.5H0V18.75H18.75V0H12.5V12.5Z\" fill=\"white\" />\n      <path d=\"M37.5 12.5V1.14441e-05H31.25V18.75H50V12.5H37.5Z\" fill=\"white\" />\n      <path d=\"M31.25 50H37.5V37.5H50V31.25H31.25V50Z\" fill=\"white\" />\n      <path d=\"M0 37.5H12.5V50H18.75V31.25H0V37.5Z\" fill=\"white\" />\n    </svg>\n  );\n};\n\nexport default ExitFullScreen;\n","import React from \"react\";\n\nconst FullScreen = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path d=\"M0 18.75H6.25V6.25H18.75V0H0V18.75Z\" fill=\"white\" />\n      <path d=\"M31.25 0V6.25H43.75V18.75H50V0H31.25Z\" fill=\"white\" />\n      <path d=\"M43.75 43.75H31.25V50H50V31.25H43.75V43.75Z\" fill=\"white\" />\n      <path d=\"M6.25 31.25H0V50H18.75V43.75H6.25V31.25Z\" fill=\"white\" />\n    </svg>\n  );\n};\n\nexport default FullScreen;\n","import React from \"react\";\n\nconst Pause = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M5 50H17.3077V0H5V50ZM32.6923 50H45V0H32.6923V50Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default Pause;\n","import React, { type FC } from \"react\";\n\nimport PauseIcon from \"../Icons/Pause\";\n\nconst PauseEffect: FC = () => {\n  return (\n    <div className=\"tuby-fade-zoom-out tuby-effect-icon\">\n      <PauseIcon className=\"tuby-icon-md\" />\n    </div>\n  );\n};\n\nexport default PauseEffect;\n","import React from \"react\";\n\nconst PictureInPicture = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M40.9091 22.6667H22.7273V36.6667H40.9091V22.6667ZM50 41.3333V8.62C50 6.05333 47.9545 4 45.4545 4H4.54545C2.04545 4 0 6.05333 0 8.62V41.3333C0 43.9 2.04545 46 4.54545 46H45.4545C47.9545 46 50 43.9 50 41.3333ZM45.4545 41.38H4.54545V8.59667H45.4545V41.38Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default PictureInPicture;\n","import React from \"react\";\n\nconst Play = ({ ...others }) => {\n  return (\n    <svg\n      width=\"50\"\n      height=\"50\"\n      viewBox=\"0 0 26 26\"\n      fill=\"#FFFFFF\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path d=\"M3 1V25L23 13L3 1Z\" />\n    </svg>\n  );\n};\n\nexport default Play;\n","import React, { type FC } from \"react\";\n\nimport PlayIcon from \"../Icons/Play\";\n\nconst PlayEffect: FC = () => {\n  return (\n    <div className=\"tuby-fade-zoom-out tuby-effect-icon\">\n      <PlayIcon className=\"tuby-icon-md\" />\n    </div>\n  );\n};\n\nexport default PlayEffect;\n","import React from \"react\";\n\nconst Check = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M48.9536 8.08584C50.3488 9.53131 50.3488 11.8672 48.9536 13.3127L20.3806 42.9159C18.9854 44.3614 16.7308 44.3614 15.3357 42.9159L1.04604 28.1143C-0.34868 26.6688 -0.34868 24.3329 1.04604 22.8875C2.44098 21.442 4.70227 21.442 6.09744 22.8875L17.7577 35.0641L43.9087 8.08584C45.3039 6.63805 47.5585 6.63805 48.9536 8.08584Z\"\n        fill=\"#fff\"\n      />\n    </svg>\n  );\n};\n\nexport default Check;\n","import React from \"react\";\n\nconst ChevronLeft = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M40 5.875L21.4575 25L40 44.125L34.2915 50L10 25L34.2915 0L40 5.875Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default ChevronLeft;\n","import React from \"react\";\n\nconst ChevronRight = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M10 44.125L28.5425 25L10 5.875L15.7085 0L40 25L15.7085 50L10 44.125Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default ChevronRight;\n","import React from \"react\";\n\nconst Speed = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M33.3333 40.5294H50V43.3529H33.3333V40.5294ZM22.2222 40.5294H0V43.3529H22.2222V49H25V43.3529V40.5294V34.8824H22.2222V40.5294ZM30.5556 15.1176H33.3333V9.47059V6.64706V1H30.5556V6.64706H0V9.47059H30.5556V15.1176ZM41.6667 6.64706V9.47059H50V6.64706H41.6667ZM8.33333 32.0588H11.1111V26.4118V23.5882V17.9412H8.33333V23.5882H0V26.4118H8.33333V32.0588ZM19.4444 26.4118H50V23.5882H19.4444V26.4118Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default Speed;\n","import React from \"react\";\n\nconst SelectSubtitle = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M8.33333 30.5556V19.4444C8.33333 17.9167 9.58333 16.6667 11.1111 16.6667H19.4444C20.9722 16.6667 22.2222 17.9167 22.2222 19.4444V22.2222H18.0556V20.8333H12.5V29.1667H18.0556V27.7778H22.2222V30.5556C22.2222 32.0833 20.9722 33.3333 19.4444 33.3333H11.1111C9.58333 33.3333 8.33333 32.0833 8.33333 30.5556ZM30.5556 33.3333H38.8889C40.4167 33.3333 41.6667 32.0833 41.6667 30.5556V27.7778H37.5V29.1667H31.9444V20.8333H37.5V22.2222H41.6667V19.4444C41.6667 17.9167 40.4167 16.6667 38.8889 16.6667H30.5556C29.0278 16.6667 27.7778 17.9167 27.7778 19.4444V30.5556C27.7778 32.0833 29.0278 33.3333 30.5556 33.3333ZM47.2222 2.77778H2.77778V47.2222H47.2222V2.77778ZM50 0V50H0V0.0277778C0 -2.58701e-08 -2.58701e-08 0 0.0277778 0H50Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default SelectSubtitle;\n","import React from \"react\";\n\nconst Speed = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M20 15V35L35 25L20 15ZM10.75 7.5L9.25 5.5C13 2.5 17.5 0.5 22.5 0L22.75 2.5C18.25 3 14.25 4.75 10.75 7.5ZM7.5 10.75L5.5 9.25C2.5 13 0.5 17.5 0 22.5L2.5 22.75C3 18.25 4.75 14.25 7.5 10.75ZM7.5 39.25C4.75 35.75 3 31.5 2.5 27.25L0 27.5C0.5 32.5 2.5 37 5.5 41L7.5 39.25ZM22.75 47.5C18.25 47 14.25 45.25 10.75 42.5L9.25 44.5C13 47.5 17.5 49.5 22.5 50L22.75 47.5ZM50 25C50 12 40.25 1.5 27.5 0L27.25 2.5C38.75 3.75 47.5 13.25 47.5 25C47.5 36.75 38.75 46.25 27.25 47.5L27.5 50C40.5 48.75 50 38 50 25Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default Speed;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport type { FC, RefObject } from \"react\";\nimport Check from \"./Icons/Check\";\nimport ChevronLeft from \"./Icons/ChevronLeft\";\nimport ChevronRight from \"./Icons/ChevronRight\";\nimport Quality from \"./Icons/Quality\";\nimport SelectSubtitle from \"./Icons/SelectSubtitle\";\nimport type { SettingsProps } from \"../shared/types\";\nimport Speed from \"./Icons/Speed\";\n\nconst SettingsDialog: FC<SettingsProps> = ({\n  settingsActive,\n  src,\n  subtitles,\n  playbackSpeed,\n  setPlaybackSpeed,\n  subtitleIndex,\n  setSubtitleIndex,\n  quality,\n  setQuality,\n  internationalization,\n}) => {\n  const [height, setHeight] = useState(0);\n\n  const [activeSection, setActiveSection] = useState(\"main\");\n\n  const mainSectionRef = useRef<HTMLDivElement>(null);\n  const speedSectionRef = useRef<HTMLDivElement>(null);\n  const subtitlesSectionRef = useRef<HTMLDivElement>(null);\n  const qualitySectionRef = useRef<HTMLDivElement>(null);\n\n  const sections: { [key: string]: RefObject<HTMLDivElement> } = {\n    main: mainSectionRef,\n    speed: speedSectionRef,\n    subtitles: subtitlesSectionRef,\n    quality: qualitySectionRef,\n  };\n\n  useEffect(() => {\n    if (sections[activeSection].current) {\n      const elementHeight = sections[activeSection].current?.offsetHeight;\n      setHeight(elementHeight && elementHeight > 250 ? 250 : elementHeight!);\n      sections[activeSection].current?.scrollTo &&\n        sections[activeSection].current?.scrollTo(0, 0);\n    }\n    // eslint-disable-next-line\n  }, [activeSection]);\n\n  return (\n    <div\n      className={`tuby-settings-dialog ${settingsActive ? \"tuby-show\" : \"\"}`}\n    >\n      <div style={{ height }} className=\"tuby-settings-outer\">\n        <div\n          ref={mainSectionRef}\n          className={`tuby-settings-section tuby-settings-py ${\n            activeSection === \"main\"\n              ? \"tuby-settings-translate-center\"\n              : \"tuby-settings-translate-left\"\n          }`}\n        >\n          <button\n            onClick={() => setActiveSection(\"speed\")}\n            className=\"tuby-settings-item\"\n          >\n            <div className=\"tuby-settings-item-left\">\n              <Speed className=\"tuby-icon-sm\" />\n              <p>\n                {internationalization?.settingsPlaybackSpeed ||\n                  \"Playback Speed\"}\n              </p>\n            </div>\n            <ChevronRight className=\"tuby-chevron\" />\n          </button>\n          {subtitles && (\n            <button\n              onClick={() => setActiveSection(\"subtitles\")}\n              className=\"tuby-settings-item\"\n            >\n              <div className=\"tuby-settings-item-left\">\n                <SelectSubtitle className=\"tuby-icon-sm\" />\n                <p>{internationalization?.settingsSubtitles || \"Subtitles\"}</p>\n              </div>\n              <ChevronRight style={{ width: 15, height: 15 }} />\n            </button>\n          )}\n          {typeof src !== \"string\" && (\n            <button\n              onClick={() => setActiveSection(\"quality\")}\n              className=\"tuby-settings-item\"\n            >\n              <div className=\"tuby-settings-item-left\">\n                <Quality className=\"tuby-icon-sm\" />\n                <p>{internationalization?.settingsQuality || \"Quality\"}</p>\n              </div>\n              <ChevronRight className=\"tuby-chevron\" />\n            </button>\n          )}\n        </div>\n\n        <div\n          ref={speedSectionRef}\n          className={`tuby-settings-section ${\n            activeSection === \"speed\"\n              ? \"tuby-settings-translate-center\"\n              : \"tuby-settings-translate-right\"\n          }`}\n        >\n          <button\n            onClick={() => setActiveSection(\"main\")}\n            className=\"tuby-settings-section-header\"\n          >\n            <ChevronLeft className=\"tuby-chevron\" />\n            <span>\n              {internationalization?.settingsPlaybackSpeed || \"Playback speed\"}\n            </span>\n          </button>\n          <div className=\"tuby-settings-py\">\n            {new Array(8)\n              .fill(\"\")\n              .map((_, index) =>\n                index === 3\n                  ? internationalization?.settingsPlaybackSpeedNormal ||\n                    \"Normal\"\n                  : (index + 1) / 4\n              )\n              .map((item, index) => (\n                <button\n                  key={item}\n                  onClick={() => {\n                    setPlaybackSpeed((index + 1) / 4);\n                    setActiveSection(\"main\");\n                  }}\n                  className=\"tuby-settings-item-2\"\n                >\n                  {playbackSpeed === (index + 1) / 4 ? (\n                    <Check className=\"tuby-chevron\" />\n                  ) : (\n                    <div style={{ width: 15, height: 15 }}></div>\n                  )}\n                  <span>{item}</span>\n                </button>\n              ))}\n          </div>\n        </div>\n\n        {subtitles && (\n          <div\n            ref={subtitlesSectionRef}\n            className={`tuby-settings-section ${\n              activeSection === \"subtitles\"\n                ? \"tuby-settings-translate-center\"\n                : \"tuby-settings-translate-right\"\n            }`}\n          >\n            <button\n              onClick={() => setActiveSection(\"main\")}\n              className=\"tuby-settings-section-header\"\n            >\n              <ChevronLeft className=\"tuby-chevron\" />\n              <span>\n                {internationalization?.settingsSubtitles || \"Subtitles\"}\n              </span>\n            </button>\n            <div className=\"tuby-settings-py\">\n              <button\n                onClick={() => {\n                  setSubtitleIndex(-1);\n                  setActiveSection(\"main\");\n                }}\n                className=\"tuby-settings-item-2\"\n              >\n                {subtitleIndex === -1 ? (\n                  <Check className=\"tuby-chevron\" />\n                ) : (\n                  <div style={{ width: 15, height: 15 }}></div>\n                )}\n                <span>\n                  {internationalization?.settingsSubtitlesOff || \"Off\"}\n                </span>\n              </button>\n              {subtitles.map((subtitle, index) => (\n                <button\n                  key={subtitle.lang}\n                  onClick={() => {\n                    setSubtitleIndex(index);\n                    setActiveSection(\"main\");\n                  }}\n                  className=\"tuby-settings-item-2\"\n                >\n                  {subtitleIndex === index ? (\n                    <Check className=\"tuby-chevron\" />\n                  ) : (\n                    <div style={{ width: 15, height: 15 }}></div>\n                  )}\n                  <span>{subtitle.language}</span>\n                </button>\n              ))}\n            </div>\n          </div>\n        )}\n\n        {typeof src !== \"string\" && (\n          <div\n            ref={qualitySectionRef}\n            className={`tuby-settings-section ${\n              activeSection === \"quality\"\n                ? \"tuby-settings-translate-center\"\n                : \"tuby-settings-translate-right\"\n            }`}\n          >\n            <button\n              onClick={() => setActiveSection(\"main\")}\n              className=\"tuby-settings-section-header\"\n            >\n              <ChevronLeft className=\"tuby-chevron\" />\n              <span>{internationalization?.settingsQuality || \"Quality\"}</span>\n            </button>\n            <div className=\"tuby-settings-py\">\n              {src.map((source, index) => (\n                <button\n                  key={source.quality}\n                  onClick={() => {\n                    setQuality(index);\n                    setActiveSection(\"main\");\n                  }}\n                  className=\"tuby-settings-item-2\"\n                >\n                  {quality === index ? (\n                    <Check className=\"tuby-chevron\" />\n                  ) : (\n                    <div style={{ width: 15, height: 15 }}></div>\n                  )}\n                  <span>\n                    {typeof source.quality === \"number\"\n                      ? `${source.quality}p`\n                      : source.quality}\n                  </span>\n                </button>\n              ))}\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\nexport default SettingsDialog;\n","import React, { type FC } from \"react\";\nimport type { SettingsProps } from \"../shared/types\";\n\nconst SettingsModal: FC<SettingsProps> = ({\n  settingsActive,\n  setSettingsActive,\n  src,\n  subtitles,\n  playbackSpeed,\n  setPlaybackSpeed,\n  subtitleIndex,\n  setSubtitleIndex,\n  quality,\n  setQuality,\n  internationalization,\n}) => {\n  return (\n    <div\n      onClick={() => setSettingsActive(false)}\n      onKeyDown={() => setSettingsActive(false)}\n      role=\"button\"\n      tabIndex={0}\n      className={`tuby-backdrop ${settingsActive ? \"tuby-show\" : \"\"}`}\n    >\n      <div\n        onClick={(e) => e.stopPropagation()}\n        onKeyDown={(e) => e.stopPropagation()}\n        role=\"button\"\n        tabIndex={0}\n        className=\"tuby-modal\"\n      >\n        <h1>{internationalization?.tooltipsSettings || \"Settings\"}</h1>\n\n        <div>\n          <p>{internationalization?.settingsPlaybackSpeed || \"Speed\"}</p>\n          <select\n            value={playbackSpeed * 4 - 1}\n            onChange={(e) => setPlaybackSpeed((+e.target.value + 1) / 4)}\n          >\n            {new Array(8)\n              .fill(\"\")\n              .map((_, index) =>\n                index === 3\n                  ? internationalization?.settingsPlaybackSpeedNormal ||\n                    \"Normal\"\n                  : (index + 1) / 4\n              )\n              .map((item, index) => (\n                <option key={item} value={index}>\n                  {item}\n                </option>\n              ))}\n          </select>\n        </div>\n\n        {subtitles && (\n          <div>\n            <p>{internationalization?.settingsSubtitles || \"Subtitles\"}</p>\n            <select\n              value={subtitleIndex}\n              onChange={(e) => setSubtitleIndex(+e.target.value)}\n            >\n              <option value={-1}>\n                {internationalization?.settingsSubtitlesOff || \"Off\"}\n              </option>\n\n              {subtitles.map((subtitle, index) => (\n                <option\n                  key={subtitle.lang}\n                  onClick={() => {\n                    setSubtitleIndex(index);\n                  }}\n                  value={index}\n                >\n                  {subtitle.language}\n                </option>\n              ))}\n            </select>\n          </div>\n        )}\n\n        {typeof src === \"object\" && (\n          <div>\n            <p>{internationalization?.settingsQuality || \"Quality\"}</p>\n            <select\n              value={quality}\n              onChange={(e) => setQuality(+e.target.value)}\n            >\n              {src.map((source, index) => (\n                <option\n                  key={source.quality}\n                  onClick={() => {\n                    setQuality(index);\n                  }}\n                  value={index}\n                >\n                  {typeof source.quality === \"number\"\n                    ? `${source.quality}p`\n                    : source.quality}\n                </option>\n              ))}\n            </select>\n          </div>\n        )}\n        <div className=\"tuby-modal-btn-container\">\n          <button\n            style={{ padding: 5 }}\n            onClick={() => setSettingsActive(false)}\n          >\n            {internationalization?.settingsModalOff || \"OK\"}\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default SettingsModal;\n","import React from \"react\";\n\nconst Subtitle = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M5.55556 5C2.47222 5 0 7.57143 0 10.7143V39.2857C0 42.4286 2.47222 45 5.55556 45H44.4444C47.5 45 50 42.4286 50 39.2857V10.7143C50 7.57143 47.5 5 44.4444 5H5.55556ZM22.2222 22.1429H18.0556V20.7143H12.5V29.2857H18.0556V27.8571H22.2222V30.7143C22.2222 32.2857 20.9722 33.5714 19.4444 33.5714H11.1111C9.58333 33.5714 8.33333 32.2857 8.33333 30.7143V19.2857C8.33333 17.7143 9.58333 16.4286 11.1111 16.4286H19.4444C20.9722 16.4286 22.2222 17.7143 22.2222 19.2857V22.1429ZM41.6667 22.1429H37.5V20.7143H31.9444V29.2857H37.5V27.8571H41.6667V30.7143C41.6667 32.2857 40.4167 33.5714 38.8889 33.5714H30.5556C29.0278 33.5714 27.7778 32.2857 27.7778 30.7143V19.2857C27.7778 17.7143 29.0278 16.4286 30.5556 16.4286H38.8889C40.4167 16.4286 41.6667 17.7143 41.6667 19.2857V22.1429Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default Subtitle;\n","import React from \"react\";\n\nconst VolumeFull = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M0 33.5519H11.1111L25 47.805V2.19498L11.1111 16.4481H0V33.5519ZM30.5556 13.5975V36.4025C34.6667 34.4641 37.5 30.0456 37.5 25C37.5 20.0399 34.6667 15.707 30.5556 13.5975ZM30.5556 5.87229C38.5833 8.32383 44.4444 15.9635 44.4444 25C44.4444 34.0365 38.5833 41.6762 30.5556 44.1277V50C41.6944 47.4059 50 37.2007 50 25C50 12.7993 41.6944 2.59407 30.5556 0V5.87229Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default VolumeFull;\n","import React from \"react\";\n\nconst VolumeHalf = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M0 34.375H14.8148L33.3333 50V0L14.8148 15.625H0V34.375ZM40.7407 12.5V37.5C46.2222 35.375 50 30.5312 50 25C50 19.5625 46.2222 14.8125 40.7407 12.5Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default VolumeHalf;\n","import React from \"react\";\n\nconst VolumeMuted = ({ ...others }) => {\n  return (\n    <svg\n      viewBox=\"0 0 50 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...others}\n    >\n      <path\n        d=\"M37.5 25.0139C37.5 20.0945 34.6667 15.8699 30.5556 13.8132V19.9555L37.3611 26.7649C37.4444 26.209 37.5 25.6253 37.5 25.0139ZM44.4444 25.0139C44.4444 27.6265 43.8889 30.0723 42.9444 32.3513L47.1389 36.5481C48.9722 33.1017 50 29.1829 50 25.0139C50 13.1184 41.6944 3.16843 30.5556 0.667039V6.36465C38.5833 8.75487 44.4444 16.2034 44.4444 25.0139V25.0139ZM3.52778 0L0 3.50195L13.1111 16.6481H0V33.3241H11.1111L25 47.2207V28.5158L36.8056 40.328C34.9444 41.7732 32.8611 42.9127 30.5556 43.6076V49.333C34.3889 48.4714 37.8611 46.6926 40.8056 44.3024L46.4722 50L50 46.4703L25 21.4564L3.55556 0H3.52778ZM24.9722 2.75153L19.1667 8.53252L24.9722 14.3413V2.77932V2.75153Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default VolumeMuted;\n","import { useEffect, useRef, type DependencyList } from \"react\";\n\nexport const useEffectUpdate = (cb: Function, dependencies: DependencyList) => {\n  const updated = useRef(false);\n  useEffect(() => {\n    if (!updated.current) {\n      updated.current = true;\n      return;\n    }\n    cb();\n    //eslint-disable-next-line\n  }, dependencies);\n};\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\nimport type { FC, HTMLProps } from \"react\";\nimport { formatVideoTime, isMobile } from \"../shared/utils\";\nimport CircularProgress from \"./Icons/CircularProgress\";\nimport ClickAwayListener from \"./ClickAwayListener\";\nimport Cog from \"./Icons/Cog\";\nimport ExitFullScreen from \"./Icons/ExitFullScreen\";\nimport FullScreen from \"./Icons/FullScreen\";\nimport Pause from \"./Icons/Pause\";\nimport PauseEffect from \"./Effect/PauseEffect\";\nimport PictureInPicture from \"./Icons/PictureInPicture\";\nimport Play from \"./Icons/Play\";\nimport PlayEffect from \"./Effect/PlayEffect\";\nimport type { PlayerProps } from \"../shared/types\";\nimport SettingsDialog from \"./SettingsDialog\";\nimport SettingsModal from \"./SettingsModal\";\nimport Subtitle from \"./Icons/Subtitle\";\nimport VolumeFull from \"./Icons/VolumeFull\";\nimport VolumeHalf from \"./Icons/VolumeHalf\";\nimport VolumeMuted from \"./Icons/VolumeMuted\";\nimport { useEffectUpdate } from \"../hooks/useEffectUpdate\";\n\nconst Player: FC<PlayerProps> = ({\n  playerKey,\n  src,\n  subtitles,\n  children,\n  poster,\n  seekDuration = 10,\n  internationalization,\n  playerRef: passedDownRef,\n  pictureInPicture = false,\n  keyboardShortcut = true,\n  preserve = {\n    watchTime: true,\n    playbackSpeed: true,\n    volume: true,\n  },\n}) => {\n  const [quality, setQuality] = useState(0);\n  const [playbackSpeed, setPlaybackSpeed] = useState(\n    preserve.playbackSpeed ? Number(localStorage.getItem(\"tuby-speed\")) || 1 : 1\n  );\n  const [paused, setPaused] = useState(true);\n  const [onFullScreen, setOnFullScreen] = useState(false);\n  const [loading, setLoading] = useState(false);\n  const [settingsActive, setSettingsActive] = useState(false);\n  const [subtitleIndex, setSubtitleIndex] = useState(0);\n\n  const [currentTime, setCurrentTime] = useState(0);\n  const [duration, setDuration] = useState(0);\n\n  const [seekPreview, setSeekPreview] = useState<null | {\n    time: number;\n    offset: number;\n  }>(null);\n\n  const [loadedData, setLoadedData] = useState(false);\n\n  const [volume, setVolume] = useState(\n    !preserve.volume &&\n      isNaN(parseInt(localStorage.getItem(\"tuby-volume\") as string))\n      ? 100\n      : Number(localStorage.getItem(\"tuby-volume\"))\n  );\n  const [isMuted, setIsMuted] = useState(\n    preserve.volume\n      ? Boolean(Number(localStorage.getItem(\"tuby-muted\")))\n      : false\n  );\n\n  const [hoverEnabled, setHoverEnabled] = useState(true);\n\n  const [pauseDidUpdate, setPauseDidUpdate] = useState(false);\n\n  const myRef = useRef<HTMLVideoElement>(null);\n  const playerRef = passedDownRef || myRef;\n  const containerRef = useRef<HTMLDivElement>(null);\n  const seekRef = useRef<HTMLDivElement>(null);\n  const mouseDownRef = useRef<Boolean>(false);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | number | null>(\n    null\n  );\n  const fullscreenToggleButton = useRef<HTMLButtonElement>(null);\n  const pauseButton = useRef<HTMLButtonElement>(null);\n  const volumeButtonRef = useRef<HTMLButtonElement>(null);\n  const subtitleButtonRef = useRef<HTMLButtonElement>(null);\n\n  const updateHoverState = () => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current);\n    setHoverEnabled(true);\n    timeoutRef.current = setTimeout(() => {\n      setHoverEnabled(false);\n    }, 2000);\n  };\n\n  const toggleSound = () => {\n    setIsMuted(!isMuted);\n    setVolume(volume === 0 ? 100 : volume);\n  };\n\n  const handleSeeking = (offsetX: number) => {\n    if (!playerRef.current || !seekRef.current) return;\n\n    const offset =\n      (offsetX - seekRef.current.getBoundingClientRect().left) /\n      seekRef.current.offsetWidth;\n\n    const newTime =\n      (Math.abs(offset) === Infinity || isNaN(offset) ? 0 : offset) *\n      playerRef.current.duration;\n\n    playerRef.current.currentTime = newTime;\n\n    setCurrentTime(newTime);\n  };\n\n  const handleSeekPreview = (offsetX: number) => {\n    if (!playerRef.current || !seekRef.current) return;\n\n    const left = seekRef.current.getBoundingClientRect().left;\n\n    let offsetInPercentage = (offsetX - left) / seekRef.current.offsetWidth;\n\n    offsetInPercentage =\n      Math.abs(offsetInPercentage) === Infinity || isNaN(offsetInPercentage)\n        ? 0\n        : offsetInPercentage;\n\n    const offsetInPixel = offsetInPercentage * seekRef.current.offsetWidth;\n\n    let newTime = offsetInPercentage * playerRef.current.duration;\n\n    if (isNaN(newTime)) setSeekPreview(null);\n\n    if (newTime < 0) newTime = 0;\n\n    setSeekPreview({\n      time: Math.round(newTime),\n      offset: offsetInPixel,\n    });\n  };\n\n  const listenMouseMoveSeeking = () => {\n    const moveHandler = (e: MouseEvent) => {\n      handleSeekPreview(e.clientX);\n      if (mouseDownRef.current) {\n        handleSeeking(e.clientX);\n      }\n    };\n    window.addEventListener(\"mousemove\", moveHandler);\n\n    const touchMoveHandler = (e: TouchEvent) => {\n      handleSeekPreview(e.touches?.[0]?.pageX);\n      if (mouseDownRef.current) {\n        handleSeeking(e.touches?.[0]?.pageX);\n      }\n    };\n    window.addEventListener(\"touchmove\", touchMoveHandler);\n\n    window.addEventListener(\"mouseup\", () => {\n      window.removeEventListener(\"mousemove\", moveHandler);\n      mouseDownRef.current = false;\n      setSeekPreview(null);\n    });\n\n    window.addEventListener(\"touchend\", () => {\n      window.removeEventListener(\"touchmove\", touchMoveHandler);\n      mouseDownRef.current = false;\n      setSeekPreview(null);\n    });\n  };\n\n  const handleScreenClicked = (\n    e: React.MouseEvent<HTMLVideoElement> | React.MouseEvent<HTMLDivElement>\n  ) => {\n    if (settingsActive) {\n      setSettingsActive(false);\n    } else {\n      setPaused((prev) => !prev);\n    }\n\n    if (e.detail === 2 && !isMobile()) {\n      setOnFullScreen((prev) => !prev);\n    }\n  };\n\n  useEffectUpdate(() => {\n    updateHoverState();\n    setPauseDidUpdate(true);\n    if (paused) {\n      playerRef.current?.pause();\n    } else {\n      playerRef.current?.play();\n    }\n    if (document.activeElement instanceof HTMLElement) {\n      document.activeElement.blur();\n    }\n  }, [paused]);\n\n  useEffect(() => {\n    if (playerRef.current) {\n      playerRef.current.muted = isMuted;\n      playerRef.current.volume = isMuted ? 0 : volume / 100;\n    }\n\n    if (preserve.volume) {\n      localStorage.setItem(\"tuby-volume\", String(volume));\n      localStorage.setItem(\"tuby-muted\", String(+isMuted));\n    }\n  }, [volume, isMuted, playerRef, preserve.volume]);\n\n  useEffect(() => {\n    const changeHandler = () => {\n      const doc = document as any;\n      const fullscreenElement =\n        doc.fullscreenElement ||\n        doc.webkitFullscreenElement ||\n        doc.webkitCurrentFullScreenElement ||\n        doc.mozFullScreenElement ||\n        doc.msFullscreenElement;\n\n      if (fullscreenElement) {\n        setOnFullScreen(true);\n      } else {\n        setOnFullScreen(false);\n      }\n    };\n\n    document.addEventListener(\"fullscreenchange\", changeHandler);\n    document.addEventListener(\"webkitfullscreenchange\", changeHandler);\n    document.addEventListener(\"mozfullscreenchange\", changeHandler);\n    document.addEventListener(\"MSFullscreenChange\", changeHandler);\n\n    const endFullScreenHandler = () => {\n      changeHandler();\n      setPaused(true);\n    };\n\n    const player = playerRef.current;\n\n    player?.addEventListener(\"webkitendfullscreen\", endFullScreenHandler);\n\n    return () => {\n      document.removeEventListener(\"fullscreenchange\", changeHandler);\n      document.removeEventListener(\"webkitfullscreenchange\", changeHandler);\n      document.removeEventListener(\"mozfullscreenchange\", changeHandler);\n      document.removeEventListener(\"MSFullscreenChange\", changeHandler);\n\n      player?.removeEventListener(\"webkitendfullscreen\", endFullScreenHandler);\n    };\n  }, [playerRef]);\n\n  useEffectUpdate(() => {\n    try {\n      if (onFullScreen) {\n        if (isMobile()) {\n          const elem = playerRef.current as any;\n          if (elem) {\n            const requestFullScreen =\n              elem.requestFullscreen ||\n              elem.webkitRequestFullscreen ||\n              elem.webkitRequestFullScreen ||\n              elem.webkitEnterFullscreen ||\n              elem.mozRequestFullScreen ||\n              elem.msRequestFullscreen;\n            requestFullScreen\n              ?.call(elem)\n              .catch((err: unknown) => console.error(err));\n          }\n        } else {\n          const elem = containerRef.current as any;\n          if (elem) {\n            const requestFullScreen =\n              elem.requestFullscreen ||\n              elem.webkitRequestFullscreen ||\n              elem.webkitRequestFullScreen ||\n              elem.webkitEnterFullscreen ||\n              elem.mozRequestFullScreen ||\n              elem.msRequestFullscreen;\n            requestFullScreen\n              ?.call(elem)\n              .catch((err: unknown) => console.error(err));\n          }\n        }\n      } else {\n        if (document.fullscreenElement) {\n          const doc = document as any;\n          const exitFullScreen =\n            doc.exitFullscreen ||\n            doc.webkitExitFullscreen ||\n            doc.webkitCancelFullScreen ||\n            doc.mozCancelFullScreen ||\n            doc.msExitFullscreen;\n          exitFullScreen\n            ?.call(document)\n            .catch((err: unknown) => console.error(err));\n        }\n      }\n    } catch (error) {\n      /* Empty */\n    }\n    updateHoverState();\n  }, [onFullScreen]);\n\n  useEffectUpdate(() => {\n    if (!playerRef.current) return;\n\n    playerRef.current.addEventListener(\n      \"loadeddata\",\n      () => {\n        if (playerRef.current) {\n          if (currentTime) {\n            playerRef.current.currentTime = currentTime;\n            playerRef.current.play();\n          }\n        }\n      },\n      { once: true }\n    );\n\n    playerRef.current.addEventListener(\"error\", () => {\n      playerRef.current?.pause();\n    });\n  }, [quality]);\n\n  useEffect(() => {\n    if (!playerRef.current) return;\n\n    if (preserve.playbackSpeed) {\n      localStorage.setItem(\"tuby-speed\", String(playbackSpeed));\n    }\n\n    playerRef.current.playbackRate = playbackSpeed;\n  }, [playbackSpeed, playerRef, preserve.playbackSpeed]);\n\n  useEffect(() => {\n    const keyHandler = (e: KeyboardEvent) => {\n      if (!keyboardShortcut) return;\n      const seekTime = (amount: number) => {\n        playerRef.current && (playerRef.current.currentTime += amount);\n      };\n      if (containerRef.current?.contains(document.activeElement)) {\n        if (document.activeElement instanceof HTMLElement) {\n          document.activeElement.blur();\n        }\n      }\n      // Pause\n      if (\n        (keyboardShortcut === true || keyboardShortcut.pause) &&\n        (e.key === \" \" || e.key === \"k\")\n      )\n        pauseButton.current?.click();\n      // Rewind\n      if (\n        (keyboardShortcut === true || keyboardShortcut.rewind) &&\n        e.key === \"ArrowLeft\"\n      )\n        seekTime(-seekDuration);\n      // Forward\n      if (\n        (keyboardShortcut === true || keyboardShortcut.forward) &&\n        e.key === \"ArrowRight\"\n      )\n        seekTime(seekDuration);\n      // Full screen\n      if (\n        (keyboardShortcut === true || keyboardShortcut.fullScreen) &&\n        e.key === \"f\"\n      )\n        fullscreenToggleButton.current?.click();\n      // Mute\n      if ((keyboardShortcut === true || keyboardShortcut.mute) && e.key === \"m\")\n        volumeButtonRef.current?.click();\n      // Subtitle\n      if (\n        (keyboardShortcut === true || keyboardShortcut.subtitle) &&\n        e.key === \"c\"\n      )\n        subtitleButtonRef.current?.click();\n    };\n\n    const spacePressHandler = (e: KeyboardEvent) => {\n      if (keyboardShortcut && e.key === \" \") e.preventDefault();\n    };\n\n    window.addEventListener(\"keyup\", keyHandler);\n\n    window.addEventListener(\"keydown\", spacePressHandler);\n\n    return () => {\n      window.removeEventListener(\"keyup\", keyHandler);\n      window.removeEventListener(\"keydown\", spacePressHandler);\n    };\n  }, [seekDuration, playerRef, keyboardShortcut]);\n\n  useEffect(() => {\n    const video = playerRef.current;\n    if (!video) return;\n    for (let i = 0; i < video.textTracks.length; i++) {\n      video.textTracks[i].mode = \"hidden\";\n    }\n    if (\n      subtitleIndex < video.textTracks.length &&\n      video.textTracks &&\n      video.textTracks[subtitleIndex]\n    ) {\n      video.textTracks[subtitleIndex].mode = \"showing\";\n    }\n  }, [playerRef, subtitleIndex]);\n\n  const videoProps: HTMLProps<HTMLVideoElement> & { src: string } = {\n    crossOrigin: \"anonymous\",\n    playsInline: true,\n    onClickCapture: handleScreenClicked,\n    controls: false,\n    src: typeof src === \"string\" ? src : src[quality].url,\n    onWaiting: () => setLoading(true),\n    onPlaying: () => {\n      setLoading(false);\n      setPaused(false);\n    },\n    onLoadedData: () => {\n      setLoadedData(true);\n      setDuration(playerRef.current?.duration || 0);\n      let newCurrentTime;\n      if (playerKey && preserve.watchTime) {\n        newCurrentTime = Number(\n          localStorage.getItem(`${playerKey}-time`) as string\n        );\n      } else newCurrentTime = 0;\n      setCurrentTime(newCurrentTime);\n      playerRef.current && (playerRef.current.currentTime = newCurrentTime);\n    },\n    onTimeUpdate: () => {\n      if (playerKey && loadedData && preserve.watchTime) {\n        localStorage.setItem(\n          `${playerKey}-time`,\n          String(playerRef.current?.currentTime || 0)\n        );\n      }\n      setCurrentTime(playerRef.current?.currentTime || 0);\n      setDuration(playerRef.current?.duration || 0);\n    },\n    onEnded: () => {\n      setPaused(true);\n    },\n    onMouseMove: () => updateHoverState(),\n\n    children: (\n      <>\n        {subtitles &&\n          subtitles.length > 0 &&\n          subtitleIndex >= 0 &&\n          loadedData &&\n          subtitles.map((sub, index) => (\n            <track\n              key={`react-tuby-player${playerKey ? `-${playerKey}` : \"\"}-${\n                sub.lang\n              }`}\n              kind=\"subtitles\"\n              srcLang={sub.lang}\n              label={sub.language}\n              src={sub.url}\n              default={index === 0}\n            />\n          ))}\n      </>\n    ),\n  };\n\n  return (\n    <>\n      {poster && !pauseDidUpdate && (\n        <img src={poster} className=\"tuby-poster\" alt=\"Tuby Poster\" />\n      )}\n      <div\n        ref={containerRef}\n        className={`tuby-container ${\n          hoverEnabled ? \"tuby-controls-hovered\" : \"\"\n        }`}\n      >\n        {children ? (\n          children(playerRef, videoProps)\n        ) : (\n          // eslint-disable-next-line jsx-a11y/media-has-caption\n          <video ref={playerRef} {...videoProps} />\n        )}\n\n        {((!loadedData && pauseDidUpdate) || (loading && !paused)) && (\n          <div className=\"tuby-center\">\n            <CircularProgress />\n          </div>\n        )}\n\n        {paused && pauseDidUpdate && (\n          <div className=\"tuby-center\" onClickCapture={handleScreenClicked}>\n            <PauseEffect />\n          </div>\n        )}\n\n        {!paused && pauseDidUpdate && (\n          <div className=\"tuby-center\" onClickCapture={handleScreenClicked}>\n            <PlayEffect />\n          </div>\n        )}\n\n        {!pauseDidUpdate && (\n          <div className=\"tuby-center\" onClickCapture={handleScreenClicked}>\n            <Play className=\"tuby-icon-md\" />\n          </div>\n        )}\n        <div\n          onTouchEnd={() => setHoverEnabled(true)}\n          onClick={() => setHoverEnabled(true)}\n          onKeyDown={() => setHoverEnabled(true)}\n          role=\"button\"\n          tabIndex={0}\n          onMouseEnter={() =>\n            timeoutRef.current && clearTimeout(timeoutRef.current)\n          }\n          className={`tuby-controls ${\n            paused || settingsActive ? \"tuby-show\" : \"\"\n          }`}\n        >\n          <div\n            ref={seekRef}\n            onMouseDown={(e) => {\n              mouseDownRef.current = true;\n              handleSeeking(e.clientX);\n              listenMouseMoveSeeking();\n            }}\n            onTouchStart={(e) => {\n              mouseDownRef.current = true;\n              handleSeeking(e.touches?.[0]?.pageX);\n              listenMouseMoveSeeking();\n            }}\n            onMouseMove={(e) => handleSeekPreview(e.clientX)}\n            onMouseLeave={() => setSeekPreview(null)}\n            role=\"button\"\n            tabIndex={0}\n            className=\"tuby-seek\"\n          >\n            <div className=\"tuby-seek-bar\">\n              <div\n                style={{\n                  width:\n                    duration !== 0\n                      ? `${Math.round((currentTime / duration) * 1000) / 10}%`\n                      : 0,\n                }}\n                className=\"tuby-seek-left\"\n              ></div>\n            </div>\n            {seekPreview !== null && (\n              <div\n                className=\"tuby-seek-preview\"\n                style={{\n                  left:\n                    seekPreview.offset < 16\n                      ? 0\n                      : seekPreview.offset >\n                        (seekRef.current?.offsetWidth || 0) - 16\n                      ? \"auto\"\n                      : seekPreview.offset,\n                  right:\n                    seekPreview.offset >\n                    (seekRef.current?.offsetWidth || 0) - 16\n                      ? 0\n                      : \"auto\",\n                  transform:\n                    seekPreview.offset < 16 ||\n                    seekPreview.offset >\n                      (seekRef.current?.offsetWidth || 0) - 16\n                      ? \"none\"\n                      : \"translateX(-50%)\",\n                }}\n              >\n                {formatVideoTime(seekPreview.time)}\n              </div>\n            )}\n          </div>\n          <div className=\"tuby-controls-main\">\n            <div className=\"tuby-controls-left\">\n              <button\n                ref={pauseButton}\n                className=\"tuby-center-container tuby-tooltips-left\"\n                data-tuby-tooltips={\n                  paused\n                    ? internationalization?.tooltipsPlay || \"Play (k)\"\n                    : internationalization?.tooltipsPause || \"Pause (k)\"\n                }\n                onClickCapture={() => setPaused((prev) => !prev)}\n                aria-label=\"Play or pause the video\"\n              >\n                {paused ? (\n                  <Play className=\"tuby-icon-sm\" />\n                ) : (\n                  <Pause className=\"tuby-icon-sm\" />\n                )}\n              </button>\n\n              <div className=\"tuby-volume-container\">\n                <button\n                  ref={volumeButtonRef}\n                  className=\"tuby-center-container\"\n                  data-tuby-tooltips={\n                    isMuted || volume === 0\n                      ? internationalization?.tooltipsUnmute || \"Unmute (m)\"\n                      : internationalization?.tooltipsMute || \"Mute (m)\"\n                  }\n                  onClickCapture={toggleSound}\n                  aria-label=\"Click to either mute or unmute. Hover and use the slider next to the button to change the volume\"\n                >\n                  {isMuted || volume === 0 ? (\n                    <VolumeMuted className=\"tuby-icon-sm\" />\n                  ) : volume === 100 ? (\n                    <VolumeFull className=\"tuby-icon-sm\" />\n                  ) : (\n                    <VolumeHalf className=\"tuby-icon-sm\" />\n                  )}\n                </button>\n                <div className=\"tuby-volume-wrapper\">\n                  <input\n                    className=\"tuby-volume-slider\"\n                    type=\"range\"\n                    min={0}\n                    max={100}\n                    value={isMuted ? 0 : volume}\n                    onChange={(e) => {\n                      setVolume(+e.target.value);\n                      setIsMuted(+e.target.value === 0);\n                    }}\n                    aria-label=\"Change the volume of the video\"\n                  />\n                  <div\n                    className=\"tuby-volume-left-bar\"\n                    style={{ width: isMuted ? 0 : volume * 0.52 }}\n                  ></div>\n                </div>\n              </div>\n\n              <div className=\"tuby-time\">\n                {formatVideoTime(currentTime)}\n                {\" / \"}\n                {formatVideoTime(duration)}\n              </div>\n            </div>\n\n            <div className=\"tuby-controls-right\">\n              {Boolean(subtitles) && (\n                <button\n                  ref={subtitleButtonRef}\n                  className={`tuby-center-container ${\n                    subtitleIndex >= 0 ? \"tuby-icon-underline\" : \"\"\n                  }`}\n                  data-tuby-tooltips={\n                    internationalization?.tooltipsSubtitles || \"Subtitles (c)\"\n                  }\n                  onClickCapture={() =>\n                    subtitleIndex >= 0\n                      ? setSubtitleIndex(-1)\n                      : setSubtitleIndex(0)\n                  }\n                  aria-label=\"Toggle subtitles for this video\"\n                >\n                  <Subtitle className=\"tuby-icon-sm\" />\n                </button>\n              )}\n              <ClickAwayListener onClickAway={() => setSettingsActive(false)}>\n                {(ref) => (\n                  <div ref={ref} style={{ position: \"relative\" }}>\n                    <button\n                      className=\"tuby-center-container\"\n                      onClickCapture={() => setSettingsActive((prev) => !prev)}\n                      {...(!settingsActive\n                        ? {\n                            \"data-tuby-tooltips\":\n                              internationalization?.tooltipsSettings ||\n                              \"Settings\",\n                          }\n                        : {})}\n                      aria-label=\"Open settings for this video\"\n                    >\n                      <Cog className=\"tuby-icon-sm\" />\n                    </button>\n\n                    {!isMobile() ? (\n                      <SettingsDialog\n                        settingsActive={settingsActive}\n                        setSettingsActive={setSettingsActive}\n                        src={src}\n                        subtitles={subtitles}\n                        playbackSpeed={playbackSpeed}\n                        setPlaybackSpeed={setPlaybackSpeed}\n                        subtitleIndex={subtitleIndex}\n                        setSubtitleIndex={setSubtitleIndex}\n                        quality={quality}\n                        setQuality={setQuality}\n                        internationalization={internationalization}\n                      />\n                    ) : (\n                      <SettingsModal\n                        settingsActive={settingsActive}\n                        setSettingsActive={setSettingsActive}\n                        src={src}\n                        subtitles={subtitles}\n                        playbackSpeed={playbackSpeed}\n                        setPlaybackSpeed={setPlaybackSpeed}\n                        subtitleIndex={subtitleIndex}\n                        setSubtitleIndex={setSubtitleIndex}\n                        quality={quality}\n                        setQuality={setQuality}\n                        internationalization={internationalization}\n                      />\n                    )}\n                  </div>\n                )}\n              </ClickAwayListener>\n\n              {pictureInPicture && document?.pictureInPictureEnabled && (\n                <button\n                  className=\"tuby-center-container\"\n                  ref={fullscreenToggleButton}\n                  data-tuby-tooltips=\"Picture in Picture\"\n                  onClickCapture={() => {\n                    try {\n                      if (document?.pictureInPictureElement)\n                        document?.exitPictureInPicture();\n                      else playerRef.current?.requestPictureInPicture();\n                    } catch (error) {\n                      /* Empty */\n                    }\n                  }}\n                  aria-label=\"Enable Picture in Picture\"\n                >\n                  <PictureInPicture className=\"tuby-icon-sm\" />\n                </button>\n              )}\n\n              <button\n                className=\"tuby-center-container tuby-tooltips-right\"\n                ref={fullscreenToggleButton}\n                data-tuby-tooltips={`${\n                  onFullScreen\n                    ? internationalization?.tooltipsExitFullscreen ||\n                      \"Exit full screen (f)\"\n                    : internationalization?.tooltipsFullscreen ||\n                      \"Full screen (f)\"\n                }`}\n                onClickCapture={() => setOnFullScreen((prev) => !prev)}\n                aria-label=\"Exit or enter full screen mode\"\n              >\n                {onFullScreen ? (\n                  <ExitFullScreen className=\"tuby-icon-sm\" />\n                ) : (\n                  <FullScreen className=\"tuby-icon-sm\" />\n                )}\n              </button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </>\n  );\n};\n\nexport default Player;\n","import React, { type FC } from \"react\";\nimport ClientRender from \"./components/ClientRender\";\nimport ErrorBoundary from \"./components/ErrorBoundary\";\nimport Main from \"./components/Main\";\nimport type { PlayerProps } from \"./shared/types\";\n\nexport const Player: FC<PlayerProps> = (props) => {\n  const { dimensions, primaryColor, children, subtitles, src } = props;\n  return (\n    <div\n      className=\"tuby\"\n      style={{\n        ...(typeof dimensions === \"number\"\n          ? { width: \"100%\", height: 0, paddingBottom: `${dimensions}%` }\n          : typeof dimensions === \"object\"\n          ? {\n              width: dimensions.width,\n              height: dimensions.height,\n            }\n          : { width: \"100%\", height: 0, paddingBottom: \"56.25%\" }),\n        ...(primaryColor\n          ? {\n              [\"--tuby-primary-color\"]: primaryColor,\n            }\n          : {}),\n      }}\n    >\n      <ClientRender>\n        <ErrorBoundary renderer={children} src={src} subtitles={subtitles}>\n          <Main {...props} />\n        </ErrorBoundary>\n      </ClientRender>\n    </div>\n  );\n};\n\nexport type { PlayerProps } from \"./shared/types\";\n"],"names":["ClientRender","_ref","children","_useState","useState","rendered","setRendered","useEffect","React","createElement","Fragment","ErrorBoundary","_Component","props","_this","call","this","playerRef","videoProps","state","hasError","createRef","crossOrigin","playsInline","controls","src","url","subtitles","length","map","subtitle","index","key","lang","kind","srcLang","label","language","default","getDerivedStateFromError","render","className","renderer","_extends","ref","Component","time","date","Date","setSeconds","toISOString","slice","timeString","startsWith","error","isMobile","test","window","_window$navigator","_window","navigator","userAgent","viewBox","cx","cy","r","ClickAwayListener","onClickAway","childrenRef","useRef","handler","e","current","contains","target","addEventListener","removeEventListener","others","fill","xmlns","d","ExitFullScreen","FullScreen","PauseIcon","Play","width","height","PlayIcon","SettingsDialog","settingsActive","playbackSpeed","setPlaybackSpeed","subtitleIndex","setSubtitleIndex","quality","setQuality","internationalization","setHeight","_useState2","activeSection","setActiveSection","speedSectionRef","subtitlesSectionRef","qualitySectionRef","sections","main","mainSectionRef","speed","elementHeight","_sections$activeSecti","offsetHeight","_sections$activeSecti2","scrollTo","_sections$activeSecti3","style","onClick","Speed","settingsPlaybackSpeed","ChevronRight","SelectSubtitle","settingsSubtitles","Quality","settingsQuality","ChevronLeft","Array","_","settingsPlaybackSpeedNormal","item","Check","settingsSubtitlesOff","source","SettingsModal","setSettingsActive","onKeyDown","role","tabIndex","stopPropagation","tooltipsSettings","value","onChange","padding","settingsModalOff","useEffectUpdate","cb","dependencies","updated","Player","_seekRef$current","_seekRef$current2","_seekRef$current3","_document","playerKey","poster","seekDuration","_ref$seekDuration","passedDownRef","pictureInPicture","_ref$pictureInPicture","_ref$keyboardShortcut","keyboardShortcut","preserve","_ref$preserve","watchTime","volume","Number","localStorage","getItem","paused","setPaused","_useState3","_useState4","onFullScreen","setOnFullScreen","loading","setLoading","_useState6","_useState7","currentTime","setCurrentTime","_useState8","duration","setDuration","_useState9","_useState10","seekPreview","setSeekPreview","_useState11","loadedData","setLoadedData","isNaN","parseInt","_useState12","setVolume","Boolean","isMuted","setIsMuted","_useState13","_useState14","hoverEnabled","setHoverEnabled","_useState15","pauseDidUpdate","setPauseDidUpdate","myRef","seekRef","mouseDownRef","timeoutRef","fullscreenToggleButton","pauseButton","volumeButtonRef","subtitleButtonRef","clearTimeout","setTimeout","handleSeeking","offsetX","offset","getBoundingClientRect","left","offsetWidth","newTime","Infinity","Math","abs","handleSeekPreview","offsetInPercentage","offsetInPixel","round","clientX","moveHandler","touchMoveHandler","_e$touches2","_e$touches2$","touches","_e$touches$","_e$touches","pageX","handleScreenClicked","prev","detail","_playerRef$current","updateHoverState","pause","play","document","activeElement","blur","muted","setItem","String","doc","fullscreenElement","webkitFullscreenElement","webkitCurrentFullScreenElement","mozFullScreenElement","msFullscreenElement","changeHandler","player","endFullScreenHandler","elem","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","webkitEnterFullscreen","mozRequestFullScreen","msRequestFullscreen","requestFullScreen","err","console","containerRef","exitFullScreen","exitFullscreen","webkitExitFullscreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen","once","_playerRef$current3","playbackRate","keyHandler","_containerRef$current","_pauseButton$current","_fullscreenToggleButt","_volumeButtonRef$curr","_subtitleButtonRef$cu","seekTime","amount","click","rewind","forward","fullScreen","mute","spacePressHandler","preventDefault","video","i","textTracks","mode","onClickCapture","onWaiting","onPlaying","onLoadedData","_playerRef$current4","newCurrentTime","onTimeUpdate","_playerRef$current6","_playerRef$current7","_playerRef$current5","onEnded","onMouseMove","sub","alt","CircularProgress","PauseEffect","PlayEffect","onTouchEnd","onMouseEnter","onMouseDown","listenMouseMoveSeeking","onTouchStart","_e$touches3","_e$touches3$","onMouseLeave","right","transform","formatVideoTime","tooltipsPlay","tooltipsPause","Pause","tooltipsUnmute","tooltipsMute","VolumeMuted","VolumeFull","VolumeHalf","type","min","max","tooltipsSubtitles","Subtitle","position","Cog","pictureInPictureEnabled","_document2","_document3","_playerRef$current8","pictureInPictureElement","exitPictureInPicture","requestPictureInPicture","PictureInPicture","tooltipsExitFullscreen","tooltipsFullscreen","dimensions","primaryColor","paddingBottom","Main"],"mappings":"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"}