UNPKG

@useloops/design-system

Version:

The official React based Loops design system

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