JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr{ gilour

File "audio-player.tsx"

Full Path: /home/markqprx/iniasli.pro/client/player/ui/audio-player.tsx
File size: 2.43 KB
MIME-type: text/plain
Charset: utf-8

import {Fragment} from 'react';
import {PlayerContext} from '@common/player/player-context';
import {MediaItem} from '@common/player/media-item';
import {PlayerOutlet} from '@common/player/ui/player-outlet';
import {PlayButton} from '@common/player/ui/controls/play-button';
import {VolumeControls} from '@common/player/ui/controls/volume-controls';
import {Seekbar} from '@common/player/ui/controls/seeking/seekbar';
import {FormattedCurrentTime} from '@common/player/ui/controls/formatted-current-time';
import {FormattedPlayerDuration} from '@common/player/ui/controls/formatted-player-duration';
import {PlaybackOptionsButton} from '@common/player/ui/controls/playback-options-button';
import clsx from 'clsx';
import {SeekButton} from '@common/player/ui/controls/seeking/seek-button';
import {Forward10Icon} from '@common/icons/material/Forward10';
import {UndoIcon} from '@common/icons/material/Undo';

const mediaItem: MediaItem = {
  id: 'test1',
  src: 'storage/title-videos/pLiHKnN3dXz0Ep0rVrgiZ4mSS0lyDV8fnrcwmDOE.mp4',
  poster: 'https://peach.blender.org/wp-content/uploads/bbb-splash.png',
  provider: 'htmlAudio',
};

const mediaItem2: MediaItem = {
  id: 'test2',
  src: '0G3_kG5FFfQ',
  provider: 'youtube',
};

interface Props {
  className?: string;
}
export function AudioPlayer({className}: Props) {
  return (
    <PlayerContext
      id="audio"
      options={{
        initialData: {
          queue: [mediaItem2, mediaItem],
          cuedMediaId: 'test1',
        },
      }}
    >
      <div className={clsx(className, 'shadow rounded')}>
        <Player />
      </div>
    </PlayerContext>
  );
}

function Player() {
  return (
    <Fragment>
      <PlayerOutlet className="w-full h-full" />
      <Controls />
    </Fragment>
  );
}

function Controls() {
  return (
    <div className="flex items-center gap-24 p-14 text-sm">
      <div className="flex items-center gap-4">
        <SeekButton seconds="-15">
          <UndoIcon />
        </SeekButton>
        <PlayButton />
        <SeekButton seconds="+15">
          <Forward10Icon />
        </SeekButton>
      </div>
      <FormattedCurrentTime className="min-w-40 text-right" />
      <Seekbar fillColor="bg-black" trackColor="bg-black/20" />
      <FormattedPlayerDuration className="min-w-40 text-right" />
      <div className="flex items-center gap-4">
        <PlaybackOptionsButton />
        <VolumeControls fillColor="bg-black" trackColor="bg-black/20" />
      </div>
    </div>
  );
}