UNPKG

@useloops/design-system

Version:

The official React based Loops design system

2 lines (1 loc) 10.1 kB
"use strict";var e=require("react/jsx-runtime"),r=require("react"),t=require("@mui/material"),i=require("@use-it/event-listener"),a=require("../../../utils/normaliseFloat.js");require("../../../utils/formValidation/misc.js"),require("../../BrandCore/Icon/Icon.js"),require("../../BrandCore/primitiveVariables.js"),require("../../WebCore/utils/typography.util.js"),require("../../WebCore/AnnualController/AnnualController.js"),require("../../WebCore/Accordion/Accordion.js"),require("../../WebCore/Typography/Typography.js"),require("merge-sx"),require("../../WebCore/Badge/Badge.js"),require("../../WebCore/Breadcrumb/Breadcrumb.js"),require("../../WebCore/Button/Button.js"),require("../../WebCore/ButtonBase/ButtonBase.js"),require("../../WebCore/Checkbox/StyledCheckbox.js"),require("../../WebCore/InputFieldBase/InputFieldBase.js"),require("../../WebCore/CreatableAutocomplete/CreatableAutocomplete.js"),require("@mui/icons-material"),require("../../WebCore/InputLabelBase/StyledInputLabelBase.js"),require("../../WebCore/Differential/DifferentialContainer.js"),require("../../WebCore/Differential/DifferentialRadio.js"),require("../../WebCore/DropdownMenu/StyledMenu.js"),require("../../WebCore/ExpandableTypographyClamp/ExpandableTypographyClamp.js"),require("../../WebCore/FormGenerator/FormGenerator.js"),require("../../WebCore/GridOverlay/GridOverlay.js"),require("html-react-parser"),require("../../WebCore/IconButton/IconButton.js"),require("../../WebCore/IconButtonBase/IconButtonBase.js"),require("../../WebCore/IconButtonGroup/IconButtonGroup.js"),require("../../WebCore/Image/Image.js"),require("../../WebCore/Label/Label.js"),require("../../WebCore/Likert/LikertContainer.js"),require("../../WebCore/Likert/LikertLabel.js"),require("../../WebCore/Likert/LikertRadio.js"),require("../../WebCore/Link/StyledLink.js"),require("@lottiefiles/dotlottie-react"),require("../../WebCore/LoopsAiButton/LoopsAiButton.js"),require("markdown-to-jsx"),require("material-ui-popup-state/hooks");var o=require("../../WebCore/Surface/Surface.js");require("../../WebCore/Menu/MenuItem.js"),require("../../WebCore/ModalLayout/_partials/ModalActionsWrapper.js"),require("../../WebCore/ModalLayout/_partials/ModalContentWrapper.js"),require("../../WebCore/NavigationButton/NavigationButton.js"),require("../../WebCore/Nudge/NudgeButton.js"),require("../../WebCore/NumberField/NumberField.js"),require("../../BrandCore/colorRamps.js"),require("../../BrandCore/semanticColor.js"),require("../../BrandCore/types.js"),require("../../BrandCore/typography.js"),require("../../WebCore/Progress/Progress.js"),require("../../WebCore/Pill/StyledPill.js"),require("../../WebCore/ProgressBar/ProgressBar.js"),require("../../WebCore/Radio/StyledRadio.js"),require("../../WebCore/utils/autocomplete.styles.js"),require("../../WebCore/Select/AutocompleteListbox.js"),require("../../WebCore/Select/StyledAutocomplete.js"),require("../../WebCore/Select/SelectItem.js"),require("../../WebCore/Select/StyledSelect.js"),require("../../WebCore/RankItem/RankItemContainer.js"),require("../../WebCore/RankItem/RankItemLabel.js"),require("../../WebCore/SortableList/SortableList.js"),require("../../WebCore/SortableList/components/SortableItem/SortableItem.js"),require("../../WebCore/SortableList/components/SortableOverlay/SortableOverlay.js"),require("@tiptap/extension-placeholder"),require("@tiptap/starter-kit"),require("mui-tiptap"),require("../../WebCore/RichTextField/StyledRichTextEditor.js"),require("../../WebCore/Skeleton/Skeleton.js"),require("../../WebCore/Slider/StyledSlider.js"),require("../../WebCore/StarRating/StarRating.js"),require("../../WebCore/Switch/StyledSwitch.js"),require("../../WebCore/Textarea/Textarea.js"),require("../../WebCore/TrialCard/TrialCardContainers.js"),require("../../WebCore/TrialCard/TrialPill.js"),require("../../WebCore/UserMenu/UserMenuButton.js"),require("../../WebCore/VideoModal/VideoModal.js");var n=require("./components/ActionButton/ActionButton.js"),s=require("./components/Timeline/Timeline.js");function l(e){return e&&e.__esModule?e:{default:e}}var u=l(i);const d=t.styled(o)(({theme:e})=>({display:"flex",flex:1,padding:e.spacing(e.custom.padding.md),borderColor:e.custom.palette.stroke.light,borderWidth:1,gap:e.spacing(e.custom.padding.sm),borderStyle:"solid",flexDirection:"column"})),m=t.styled(t.Stack)(({theme:e})=>({alignItems:"center",gap:e.spacing(e.custom.padding.md),justifyContent:"space-between",flexDirection:"row",flex:1})),c=r.forwardRef(({id:t,videoElement:i,initialEndTime:o=0,initialCurrentTime:l=0,initialMuted:c,initialVolume:b,markers:C,options:f,slots:p,events:{onEnd:g,onPlay:q,onSeekEnd:j,onSeeking:y,onSeekStart:k,onTimeUpdate:T,onPause:W,onVolumeChange:v,onVolumeMute:S,onRestart:B,onFirstPlay:h,onFirstEnded:E,onReset:I}={},videoSeekTime:F},x)=>{const[L,P]=r.useState(!1),[w,M]=r.useState([]),R={rtl:!1,volumeControls:!0,normaliseTime:!1,markerIndicatorMode:"time",markerIndicator:!1,markerIndicatorSize:3,volumeControlsType:"mute",disableBufferingEvents:!1,...f},[{seeking:A,endTime:V,currentTime:D,playing:G,buffering:N,loaded:O,ended:_,volume:z,muted:U,startTime:H,firstPlay:J,firstEnded:K},Q]=r.useState({startTime:a.normaliseFloat(R.normaliseTime?l:0),endTime:a.normaliseFloat(R.normaliseTime?o:i.duration),currentTime:a.normaliseFloat(l??0),loaded:!0,ended:!1,firstPlay:!1,firstEnded:!1,seeking:!1,playing:!1,volume:b||1,muted:c||!1,buffering:!1});r.useEffect(()=>{if(i.muted=U,i.volume=z,R.normaliseTime&&(void 0===o||void 0===l))throw new Error("Please supply an initial end time and initial currentTime for normalising time in VideoControls.tsx");return()=>{se()}},[]),r.useEffect(()=>{Q(e=>({...e,startTime:a.normaliseFloat(R.normaliseTime?l:0),endTime:a.normaliseFloat(R.normaliseTime?o:i.duration),currentTime:a.normaliseFloat(l??0)})),i.currentTime=a.normaliseFloat(l??0)},[l,o]);const X=r.useCallback(()=>{Q(e=>({...e,playing:!1,ended:!0,...!K&&{firstEnded:!0}})),g&&g(),!K&&E&&E()},[K]);r.useEffect(()=>{if(!i||null==F)return;(async()=>{const e=!i.paused,r=F===V;Q(e=>({...e,playing:!1,currentTime:a.normaliseFloat(F)})),await new Promise(e=>{const r=()=>{i.removeEventListener("seeked",r),e()};i.addEventListener("seeked",r),setTimeout(e,500)}),Q(e=>({...e,currentTime:a.normaliseFloat(F)})),await new Promise(e=>setTimeout(e,50)),Q(t=>({...t,playing:e,currentTime:a.normaliseFloat(r?F-.001:F+.001)}))})().catch(e=>{console.error("Error seeking video:",e)})},[F,i]);const Y=r.useCallback(e=>{Q(r=>({...r,muted:e.target?.muted,volume:"number"==typeof e.target?.volume?e.target?.volume:1})),U!==e.target?.muted&&S&&S(!U),z!==e.target?.volume&&v&&v(z)},[U,z]),Z=r.useCallback(()=>{const e=a.normaliseFloat(i.currentTime)>=V&&V!==a.normaliseFloat(i.duration)&&!_,r=a.normaliseFloat(i.currentTime)>=V&&V===a.normaliseFloat(i.duration)&&!_&&!G;(e||r)&&(i.pause(),i.dispatchEvent(new Event("ended"))),Q(e=>({...e,currentTime:a.normaliseFloat(i.currentTime)})),T&&T(a.normaliseFloat(i.currentTime))},[V,_,G]),$=r.useCallback(()=>{Q(e=>({...e,playing:!1})),W&&W()},[D]),ee=r.useCallback(()=>{Q(e=>({...e,playing:!0,ended:!1,...!R?.disableBufferingEvents&&{buffering:!1},...!J&&{firstPlay:!0}})),!J&&h&&h(),q&&q()},[J,R?.disableBufferingEvents]),re=r.useCallback(()=>{R?.disableBufferingEvents||Q(e=>({...e,buffering:!0}))},[R?.disableBufferingEvents]),te=r.useCallback(()=>{R?.disableBufferingEvents||Q(e=>({...e,buffering:!1}))},[N,R?.disableBufferingEvents]),ie=r.useCallback(()=>{if(R?.disableBufferingEvents)return;const e=[];for(let r=0;r<i.buffered.length;r++){const t=i.buffered.start(r),a=i.buffered.end(r);if(a>=H&&t<=V){const r=Math.max(t,H),i=Math.min(a,V);e.push({start:r-H,end:i-H,startPercent:(r-H)/(V-H)*100,widthPercent:(i-r)/(V-H)*100})}}M(e)},[A,V,D,G,N,O,_,z,U,H,w,R?.disableBufferingEvents]),ae=r.useCallback(async e=>{G&&se(),i.currentTime=H,e&&await ne(),B&&B()},[G,D,H,V,_]),oe=r.useCallback(async()=>{G&&se(),i.currentTime=H,Q(e=>({...e,startTime:a.normaliseFloat(R.normaliseTime?l:0),endTime:a.normaliseFloat(R.normaliseTime?o:i.duration),currentTime:a.normaliseFloat(l??0),loaded:!0,ended:!1,firstPlay:!1,firstEnded:!1,seeking:!1,playing:!1})),I&&I()},[G,D,H,V,_,l,o]),ne=async()=>{await i.play()},se=()=>{i.pause()},le=r.useCallback(e=>{i.currentTime=a.normaliseFloat(e),Q(r=>({...r,currentTime:a.normaliseFloat(e),ended:!1,seeking:!0,...!R?.disableBufferingEvents&&{buffering:!1},firstPlay:!J||r.firstPlay,bufferProgress:e})),y&&y(e),!J&&h&&h()},[N,J,R?.disableBufferingEvents]),ue=r.useCallback(async()=>{document.hidden?G&&!i.paused?(P(!0),se()):P(!1):(L&&!G&&await ne(),P(!1))},[G,L,se,ne,i]),de=r.useCallback(e=>{e&&i.pause(),Q(e=>({...e,seeking:!0})),k&&k()},[_]),me=r.useCallback(async(e,r,t)=>{r&&(i.currentTime=r),e&&!_&&await i.play(),t&&G&&i.pause(),Q(e=>({...e,...r?{currentTime:r}:{},ended:!t&&e.ended,seeking:!1})),j&&j(r)},[G,_,N,A]);return u.default("visibilitychange",ue,document),u.default("pause",$,i),u.default("playing",ee,i),u.default("timeupdate",Z,i),u.default("ended",X,i),u.default("volumechange",Y,i),u.default("waiting",re,i),u.default("canplay",te,i),u.default("progress",ie,i),r.useImperativeHandle(x,()=>({play:ne,pause:se,restart:ae,reset:oe,seek:(e,r,t)=>me(r,e,t),videoState:{seeking:A,endTime:V,currentTime:D,playing:G,buffering:N,loaded:O,ended:_,volume:z,firstPlay:J,firstEnded:K,muted:U,startTime:H}})),e.jsxs(d,{variation:"raised",borderradius:"xl",id:t,children:[e.jsxs(m,{...R?.rtl&&{dir:"rtl"},children:[e.jsx(n,{seeking:A,playing:G,ended:_,buffering:N,handleAction:async()=>{_?await ae(!0):G?se():await ne()}}),e.jsx(s,{handleSeeking:le,handleSeekEnd:me,handleSeekStart:de,ended:_,marker:p?.marker,markers:C,markerIndicatorMode:R.markerIndicatorMode,markerIndicatorSize:R.markerIndicatorSize,markerIndicator:R.markerIndicator,startTime:R.normaliseTime?H:0,currentTime:D,endTime:V,playing:G,bufferRanges:w,buffering:N,volume:z,muted:U,volumeControls:R.volumeControls,volumeControlsType:R.volumeControlsType,handleVolumeMute:()=>{i.muted=!U},handleVolumeChange:e=>{i.volume=e,U&&(i.muted=!1)}})]}),p?.bottom]})});var b=r.memo(c);module.exports=b;