@jeremyckahn/farmhand 1.23.0 → 1.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -726,7 +726,7 @@ Create a new `,"processor first, by invoking it: use `processor()` instead of ",
726
726
  animation: ${0} 1.4s linear infinite;
727
727
  `,circularRotateKeyframe)),CircularProgressSVG=styled$1(`svg`,{name:`MuiCircularProgress`,slot:`Svg`,overridesResolver:(e,t)=>t.svg})({display:`block`}),CircularProgressCircle=styled$1(`circle`,{name:`MuiCircularProgress`,slot:`Circle`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.circle,t[`circle${capitalize_default(n.variant)}`],n.disableShrink&&t.circleDisableShrink]}})(({ownerState:e,theme:t})=>_extends$3({stroke:`currentColor`},e.variant===`determinate`&&{transition:t.transitions.create(`stroke-dashoffset`)},e.variant===`indeterminate`&&{strokeDasharray:`80px, 200px`,strokeDashoffset:0}),({ownerState:e})=>e.variant===`indeterminate`&&!e.disableShrink&&css$2(_t4||=_`
728
728
  animation: ${0} 1.4s ease-in-out infinite;
729
- `,circularDashKeyframe)),CircularProgress=import_react$24.forwardRef(function(e,t){let n=useDefaultProps({props:e,name:`MuiCircularProgress`}),{className:a,color:o=`primary`,disableShrink:s=!1,size:l=40,style:u,thickness:d=3.6,value:f=0,variant:m=`indeterminate`}=n,h=_objectWithoutPropertiesLoose$3(n,_excluded$2),v=_extends$3({},n,{color:o,disableShrink:s,size:l,thickness:d,value:f,variant:m}),y=useUtilityClasses$2(v),b={},x={},S={};if(m===`determinate`){let e=2*Math.PI*((SIZE-d)/2);b.strokeDasharray=e.toFixed(3),S[`aria-valuenow`]=Math.round(f),b.strokeDashoffset=`${((100-f)/100*e).toFixed(3)}px`,x.transform=`rotate(-90deg)`}return(0,import_jsx_runtime.jsx)(CircularProgressRoot,_extends$3({className:clsx$1(y.root,a),style:_extends$3({width:l,height:l},x,u),ownerState:v,ref:t,role:`progressbar`},S,h,{children:(0,import_jsx_runtime.jsx)(CircularProgressSVG,{className:y.svg,ownerState:v,viewBox:`${SIZE/2} ${SIZE/2} ${SIZE} ${SIZE}`,children:(0,import_jsx_runtime.jsx)(CircularProgressCircle,{className:y.circle,style:b,ownerState:v,cx:SIZE,cy:SIZE,r:(SIZE-d)/2,fill:`none`,strokeWidth:d})})}))});function DayAndProgressContainer({dayCount:e,experience:t,itemsSold:n}){let a=levelAchieved(t),o=scaleNumber(t,experienceNeededForLevel(a),experienceNeededForLevel(a+1),0,100),s=experienceNeededForLevel(a+1)-t,l=a+1;return(0,import_jsx_runtime.jsxs)(`h2`,{className:`day-and-progress-container`,children:[(0,import_jsx_runtime.jsxs)(`span`,{children:[`Day `,integerString(e),`, level:`]}),(0,import_jsx_runtime.jsx)(Tooltip,{arrow:!0,placement:`top`,title:EXPERIENCE_GAUGE_TOOLTIP_LABEL`${s}${l}`,children:(0,import_jsx_runtime.jsxs)(Box,{children:[(0,import_jsx_runtime.jsx)(CircularProgress,{value:o,variant:`determinate`}),(0,import_jsx_runtime.jsx)(`span`,{className:`current-level`,children:integerString(a)})]})})]})}DayAndProgressContainer.propTypes={dayCount:import_prop_types$1.number.isRequired,experience:import_prop_types$1.number.isRequired,itemsSold:import_prop_types$1.object.isRequired};function Consumer$15(e){return(0,import_jsx_runtime.jsx)(FarmhandContext.Consumer,{children:({gameState:t,handlers:n})=>(0,import_jsx_runtime.jsx)(DayAndProgressContainer,{...t,...n,...e})})}var FarmNameDisplay=({farmName:e,handleFarmNameUpdate:t})=>{let[n,a]=(0,import_react$24.useState)(e);return(0,import_react$24.useEffect)(()=>{a(e)},[e,a]),(0,import_jsx_runtime.jsxs)(`h2`,{className:`farm-name`,children:[(0,import_jsx_runtime.jsx)(TextField,{variant:`standard`,inputProps:{maxLength:12},onChange:({target:{value:e}})=>{a(e)},onBlur:({target:{value:e}})=>{t(e)},placeholder:`Farm Name`,value:n}),` `,`Farm`]})},OnlineControls=({activePlayers:e,handleActivePlayerButtonClick:t,handleChatRoomOpenStateChange:n,handleOnlineToggleChange:a,handleRoomChange:o,isChatAvailable:s,isOnline:l,room:u})=>{let[d,f]=(0,import_react$24.useState)(u);(0,import_react$24.useEffect)(()=>{f(u)},[u,f]);let m=()=>{n(!0)},h=()=>{o(d)},v=e=>{h(),a(e)};return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(FormControl,{variant:`standard`,className:`online-control-container`,component:`fieldset`,children:[(0,import_jsx_runtime.jsx)(FormGroup,{className:`toggle-container`,children:(0,import_jsx_runtime.jsx)(FormControlLabel,{control:(0,import_jsx_runtime.jsx)(Switch,{color:`primary`,checked:l,onChange:(e,t)=>{v(t)},name:`play-online`}),label:`Play online`})}),(0,import_jsx_runtime.jsx)(TextField,{className:`room-name`,inputProps:{maxLength:25},label:`Room name`,onChange:({target:{value:e}})=>{f(e)},onKeyUp:({key:e})=>{e===`Enter`&&h()},value:d,variant:`outlined`})]}),e&&(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(Button,{color:`primary`,onClick:t,variant:`contained`,children:[`Connected players: `,integerString(e)]}),s?(0,import_jsx_runtime.jsx)(Button,{variant:`contained`,color:`primary`,onClick:m,children:`Open chat`}):(0,import_jsx_runtime.jsxs)(Typography,{className:`chat-placeholder`,children:[`Chat is available for online rooms other than "`,`global`,`"`]})]})]})},{FARMERS_LOG,PRICE_EVENTS,STATS,ACHIEVEMENTS,ACCOUNTING,SETTINGS,ONLINE_PEERS,KEYBINDINGS}=dialogView,dialogTriggerTextMap={[FARMERS_LOG]:`Open Farmer's Log (l)`,[PRICE_EVENTS]:`See Price Events (e)`,[STATS]:`View your stats (s)`,[ACHIEVEMENTS]:`View Achievements (a)`,[ACCOUNTING]:`View Bank Account (b)`,[SETTINGS]:`View Settings (comma)`},dialogTitleMap={[FARMERS_LOG]:`Farmer's Log`,[PRICE_EVENTS]:`Price Events`,[STATS]:`Farm Stats`,[ACHIEVEMENTS]:`Achievements`,[ACCOUNTING]:`Bank Account`,[SETTINGS]:`Settings`,[ONLINE_PEERS]:`Active Players`,[KEYBINDINGS]:`Keyboard Shortcuts`},dialogContentMap={[FARMERS_LOG]:(0,import_jsx_runtime.jsx)(Consumer$20,{}),[PRICE_EVENTS]:(0,import_jsx_runtime.jsx)(Consumer$18,{}),[STATS]:(0,import_jsx_runtime.jsx)(Consumer$16,{}),[ACHIEVEMENTS]:(0,import_jsx_runtime.jsx)(Consumer$21,{}),[ACCOUNTING]:(0,import_jsx_runtime.jsx)(Consumer$23,{}),[SETTINGS]:(0,import_jsx_runtime.jsx)(Consumer$17,{}),[ONLINE_PEERS]:(0,import_jsx_runtime.jsx)(Consumer$19,{}),[KEYBINDINGS]:(0,import_jsx_runtime.jsx)(KeybindingsView,{})},Navigation=({activePlayers:e,blockInput:t,currentDialogView:n,farmName:a,handleActivePlayerButtonClick:o,handleChatRoomOpenStateChange:s,handleClickDialogViewButton:l,handleCloseDialogView:u,handleDialogViewExited:d,handleFarmNameUpdate:f,handleOnlineToggleChange:m,handleRoomChange:h,handleViewChange:v,inventory:y,inventoryLimit:b,isChatAvailable:x,isDialogViewOpen:S,isOnline:C,room:T,stageFocus:E,viewList:D,currentDialogViewLowerCase:O=(n||``).toLowerCase(),modalTitleId:k=`${O}-modal-title`,modalContentId:j=`${O}-modal-content`})=>(0,import_jsx_runtime.jsxs)(Header,{className:`Navigation`,sx:{flexDirection:`column`,flexShrink:0,display:`flex`,"& .version":{fontFamily:`"Francois One", sans-serif`,textAlign:`center`},"& .farm-name":{lineHeight:`1.3em`,margin:`0.25em 0`,"& .MuiInput-root":{background:`none`,margin:0,"& input":{fontFamily:`"Francois One"`,paddingLeft:`0.5em`,paddingRight:`0.5em`,textAlign:`center`}}},"& .online-control-container":{alignItems:`center`,display:`flex`,flexDirection:`row`,margin:`1em 0`,"& .toggle-container":{minWidth:`155px`}},"& .button-array":{marginLeft:`3em`,marginRight:`3em`,[`@media (max-width: ${breakpoints.smallPhone}px)`]:{marginLeft:`2em`,marginRight:`2em`}},"& .current-level":{alignItems:`center`,bottom:0,display:`flex`,justifyContent:`center`,left:0,position:`absolute`,right:0,top:0,userSelect:`none`},"& h1":{fontSize:`3em`,fontWeight:`bold`,[`@media (max-width: ${breakpoints.smallPhone}px)`]:{fontSize:`2.5em`}},"& button":{fontSize:`1.3em`,margin:`0.3em`,minWidth:`56px`},"& h1, & h2, & h3":{textAlign:`center`},"& .day-and-progress-container":{alignItems:`center`,display:`flex`,fontSize:`1.5em`,margin:`0.5em auto`,"& .MuiBox-root":{display:`inline-flex`,marginLeft:`0.5em`,position:`relative`}},"& .inventory-info":{fontSize:`1em`},"& .MuiSelect-select":{padding:`1em`},"& .chat-placeholder":{fontSize:`0.75em`,padding:`0.5em 0`,textAlign:`center`}},children:[(0,import_jsx_runtime.jsx)(`h1`,{children:`Farmhand`}),(0,import_jsx_runtime.jsxs)(`p`,{className:`version`,children:[`v`,`1.23.0`]}),(0,import_jsx_runtime.jsx)(FarmNameDisplay,{farmName:a,handleFarmNameUpdate:f}),(0,import_jsx_runtime.jsx)(Consumer$15,{}),(0,import_jsx_runtime.jsx)(OnlineControls,{activePlayers:e,handleActivePlayerButtonClick:o,handleChatRoomOpenStateChange:s,handleOnlineToggleChange:m,handleRoomChange:h,isChatAvailable:x,isOnline:C,room:T}),b>-1&&(0,import_jsx_runtime.jsxs)(H3,{className:(0,import_classnames.default)(`inventory-info`,{"is-inventory-full":!doesInventorySpaceRemain({inventory:y,inventoryLimit:b})}),sx:{color:doesInventorySpaceRemain({inventory:y,inventoryLimit:b})?void 0:colors.error},children:[`Inventory: `,integerString(inventorySpaceConsumed(y)),` /`,` `,integerString(b)]}),(0,import_jsx_runtime.jsx)(Select,{variant:`standard`,className:`view-select`,onChange:v,value:E,children:D.map((e,t)=>(0,import_jsx_runtime.jsxs)(MenuItem,{key:e,value:e,children:[t+1,`: `,STAGE_TITLE_MAP[e]]}))}),(0,import_jsx_runtime.jsx)(`div`,{className:`button-array`,children:[{dialogView:FARMERS_LOG,Icon:import_Book.default},{dialogView:PRICE_EVENTS,Icon:import_FlashOn.default},{dialogView:STATS,Icon:import_Assessment.default},{dialogView:ACHIEVEMENTS,Icon:import_Beenhere.default},{dialogView:ACCOUNTING,Icon:import_AccountBalance.default},{dialogView:SETTINGS,Icon:import_Settings.default}].map(({dialogView:e,Icon:t})=>(0,import_jsx_runtime.jsx)(Tooltip,{arrow:!0,key:e,placement:`top`,title:dialogTriggerTextMap[e],children:(0,import_jsx_runtime.jsx)(Fab,{"aria-label":dialogTriggerTextMap[e],color:`primary`,onClick:()=>l(e),children:(0,import_jsx_runtime.jsx)(t,{})})}))}),(0,import_jsx_runtime.jsxs)(Dialog,{className:(0,import_classnames.default)(`Farmhand`,{"block-input":t}),fullWidth:!0,maxWidth:`xs`,onClose:u,open:S,TransitionProps:{onExited:d},"aria-describedby":k,"aria-labelledby":j,children:[(0,import_jsx_runtime.jsx)(DialogTitle,{id:k,children:n?dialogTitleMap[n]:``}),(0,import_jsx_runtime.jsx)(DialogContent,{id:j,children:n?dialogContentMap[n]:null}),(0,import_jsx_runtime.jsx)(DialogActions,{children:(0,import_jsx_runtime.jsx)(Button,{onClick:u,color:`primary`,autoFocus:!0,children:`Close`})})]})]});Navigation.propTypes={activePlayers:import_prop_types$1.number,blockInput:import_prop_types$1.bool.isRequired,farmName:import_prop_types$1.string.isRequired,handleClickDialogViewButton:import_prop_types$1.func.isRequired,handleChatRoomOpenStateChange:import_prop_types$1.func.isRequired,handleActivePlayerButtonClick:import_prop_types$1.func.isRequired,handleCloseDialogView:import_prop_types$1.func.isRequired,handleDialogViewExited:import_prop_types$1.func.isRequired,handleFarmNameUpdate:import_prop_types$1.func.isRequired,handleOnlineToggleChange:import_prop_types$1.func.isRequired,handleRoomChange:import_prop_types$1.func.isRequired,handleViewChange:import_prop_types$1.func.isRequired,inventory:import_prop_types$1.array.isRequired,inventoryLimit:import_prop_types$1.number.isRequired,isChatAvailable:import_prop_types$1.bool.isRequired,isDialogViewOpen:import_prop_types$1.bool.isRequired,isOnline:import_prop_types$1.bool.isRequired,stageFocus:import_prop_types$1.string.isRequired,viewList:import_prop_types$1.array.isRequired};function Consumer$14(e){return(0,import_jsx_runtime.jsx)(FarmhandContext.Consumer,{children:({gameState:t,handlers:n})=>(0,import_jsx_runtime.jsx)(Navigation,{...t,...n,...e})})}var getNotificationKey=({message:e,severity:t})=>`${t}:${e}`,snackbarProviderContentCallback=(e,{message:t,onClick:n,severity:a})=>(0,import_jsx_runtime.jsx)(Alert,{elevation:3,key:e,onClick:n,severity:a,style:{cursor:n?`pointer`:`default`},children:(0,import_jsx_runtime.jsx)(import_react_markdown.default,{source:t})}),NotificationSystem=({enqueueSnackbar:e,latestNotification:t})=>((0,import_react$24.useEffect)(()=>{t&&e(t,{key:getNotificationKey(t),autoHideDuration:NOTIFICATION_DURATION,preventDuplicate:!0})},[e,t]),null);NotificationSystem.propTypes={latestNotification:(0,import_prop_types$1.shape)({message:import_prop_types$1.string.isRequired,onClick:import_prop_types$1.func,severity:import_prop_types$1.string.isRequired})};var NotificationSystem_default=withSnackbar(function(e){return(0,import_jsx_runtime.jsx)(FarmhandContext.Consumer,{children:({gameState:t,handlers:n})=>(0,import_jsx_runtime.jsx)(NotificationSystem,{...t,...n,...e})})}),require_ZoomIn=__commonJSMin((e=>{var t=require_interopRequireDefault();Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(require_createSvgIcon()),a=require_jsx_runtime();e.default=(0,n.default)([(0,a.jsx)(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14`},`0`),(0,a.jsx)(`path`,{d:`M12 10h-2v2H9v-2H7V9h2V7h1v2h2z`},`1`)],`ZoomIn`)})),require_ZoomOut=__commonJSMin((e=>{var t=require_interopRequireDefault();Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(require_createSvgIcon()),a=require_jsx_runtime();e.default=(0,n.default)((0,a.jsx)(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z`}),`ZoomOut`)}));function areArraysEqual(e,t,n=(e,t)=>e===t){return e.length===t.length&&e.every((e,a)=>n(e,t[a]))}init_extends(),init_esm(),init_extractEventHandlers();var INTENTIONAL_DRAG_COUNT_THRESHOLD=2;function asc(e,t){return e-t}function findClosest(e,t){var n;let{index:a}=e.reduce((e,n,a)=>{let o=Math.abs(t-n);return e===null||o<e.distance||o===e.distance?{distance:o,index:a}:e},null)??{};return a}function trackFinger(e,t){if(t.current!==void 0&&e.changedTouches){let n=e;for(let e=0;e<n.changedTouches.length;e+=1){let a=n.changedTouches[e];if(a.identifier===t.current)return{x:a.clientX,y:a.clientY}}return!1}return{x:e.clientX,y:e.clientY}}function valueToPercent(e,t,n){return(e-t)*100/(n-t)}function percentToValue(e,t,n){return(n-t)*e+t}function getDecimalPrecision(e){if(Math.abs(e)<1){let t=e.toExponential().split(`e-`),n=t[0].split(`.`)[1];return(n?n.length:0)+parseInt(t[1],10)}let t=e.toString().split(`.`)[1];return t?t.length:0}function roundValueToStep(e,t,n){let a=Math.round((e-n)/t)*t+n;return Number(a.toFixed(getDecimalPrecision(t)))}function setValueIndex({values:e,newValue:t,index:n}){let a=e.slice();return a[n]=t,a.sort(asc)}function focusThumb({sliderRef:e,activeIndex:t,setActive:n}){var a,o;let s=ownerDocument(e.current);if(!((a=e.current)!=null&&a.contains(s.activeElement))||Number(s==null||(o=s.activeElement)==null?void 0:o.getAttribute(`data-index`))!==t){var l;(l=e.current)==null||l.querySelector(`[type="range"][data-index="${t}"]`).focus()}n&&n(t)}function areValuesEqual(e,t){return typeof e==`number`&&typeof t==`number`?e===t:typeof e==`object`&&typeof t==`object`&&areArraysEqual(e,t)}var axisProps={horizontal:{offset:e=>({left:`${e}%`}),leap:e=>({width:`${e}%`})},"horizontal-reverse":{offset:e=>({right:`${e}%`}),leap:e=>({width:`${e}%`})},vertical:{offset:e=>({bottom:`${e}%`}),leap:e=>({height:`${e}%`})}},Identity$1=e=>e,cachedSupportsTouchActionNone;function doesSupportTouchActionNone(){return cachedSupportsTouchActionNone===void 0&&(cachedSupportsTouchActionNone=typeof CSS<`u`&&typeof CSS.supports==`function`?CSS.supports(`touch-action`,`none`):!0),cachedSupportsTouchActionNone}function useSlider(e){let{"aria-labelledby":t,defaultValue:n,disabled:a=!1,disableSwap:o=!1,isRtl:s=!1,marks:l=!1,max:u=100,min:d=0,name:f,onChange:m,onChangeCommitted:h,orientation:v=`horizontal`,rootRef:y,scale:b=Identity$1,step:x=1,shiftStep:S=10,tabIndex:C,value:T}=e,E=import_react$24.useRef(void 0),[D,O]=import_react$24.useState(-1),[k,j]=import_react$24.useState(-1),[M,N]=import_react$24.useState(!1),F=import_react$24.useRef(0),[I,L]=useControlled({controlled:T,default:n??d,name:`Slider`}),R=m&&((e,t,n)=>{let a=e.nativeEvent||e,o=new a.constructor(a.type,a);Object.defineProperty(o,"target",{writable:!0,value:{value:t,name:f}}),m(o,t,n)}),z=Array.isArray(I),B=z?I.slice().sort(asc):[I];B=B.map(e=>e==null?d:clamp$1(e,d,u));let V=l===!0&&x!==null?[...Array(Math.floor((u-d)/x)+1)].map((e,t)=>({value:d+x*t})):l||[],H=V.map(e=>e.value),{isFocusVisibleRef:U,onBlur:W,onFocus:G,ref:ee}=useIsFocusVisible(),[te,K]=import_react$24.useState(-1),q=import_react$24.useRef(null),ne=useForkRef(y,useForkRef(ee,q)),re=e=>t=>{var n;let a=Number(t.currentTarget.getAttribute(`data-index`));G(t),U.current===!0&&K(a),j(a),e==null||(n=e.onFocus)==null||n.call(e,t)},J=e=>t=>{var n;W(t),U.current===!1&&K(-1),j(-1),e==null||(n=e.onBlur)==null||n.call(e,t)},ie=(e,t)=>{let n=Number(e.currentTarget.getAttribute(`data-index`)),a=B[n],s=H.indexOf(a),l=t;if(V&&x==null){let e=H[H.length-1];l=l>e?e:l<H[0]?H[0]:l<a?H[s-1]:H[s+1]}if(l=clamp$1(l,d,u),z){o&&(l=clamp$1(l,B[n-1]||-1/0,B[n+1]||1/0));let e=l;l=setValueIndex({values:B,newValue:l,index:n});let t=n;o||(t=l.indexOf(e)),focusThumb({sliderRef:q,activeIndex:t})}L(l),K(n),R&&!areValuesEqual(l,I)&&R(e,l,n),h&&h(e,l)},ae=e=>t=>{var n;if(x!==null){let e=Number(t.currentTarget.getAttribute(`data-index`)),n=B[e],a=null;(t.key===`ArrowLeft`||t.key===`ArrowDown`)&&t.shiftKey||t.key===`PageDown`?a=Math.max(n-S,d):((t.key===`ArrowRight`||t.key===`ArrowUp`)&&t.shiftKey||t.key===`PageUp`)&&(a=Math.min(n+S,u)),a!==null&&(ie(t,a),t.preventDefault())}e==null||(n=e.onKeyDown)==null||n.call(e,t)};useEnhancedEffect$1(()=>{if(a&&q.current.contains(document.activeElement)){var e;(e=document.activeElement)==null||e.blur()}},[a]),a&&D!==-1&&O(-1),a&&te!==-1&&K(-1);let oe=e=>t=>{var n;(n=e.onChange)==null||n.call(e,t),ie(t,t.target.valueAsNumber)},se=import_react$24.useRef(void 0),ce=v;s&&v===`horizontal`&&(ce+=`-reverse`);let Y=({finger:e,move:t=!1})=>{let{current:n}=q,{width:a,height:s,bottom:l,left:f}=n.getBoundingClientRect(),m;m=ce.indexOf(`vertical`)===0?(l-e.y)/s:(e.x-f)/a,ce.indexOf(`-reverse`)!==-1&&(m=1-m);let h;if(h=percentToValue(m,d,u),x)h=roundValueToStep(h,x,d);else{let e=findClosest(H,h);h=H[e]}h=clamp$1(h,d,u);let v=0;if(z){v=t?se.current:findClosest(B,h),o&&(h=clamp$1(h,B[v-1]||-1/0,B[v+1]||1/0));let e=h;h=setValueIndex({values:B,newValue:h,index:v}),o&&t||(v=h.indexOf(e),se.current=v)}return{newValue:h,activeIndex:v}},le=useEventCallback$1(e=>{let t=trackFinger(e,E);if(!t)return;if(F.current+=1,e.type===`mousemove`&&e.buttons===0){ue(e);return}let{newValue:n,activeIndex:a}=Y({finger:t,move:!0});focusThumb({sliderRef:q,activeIndex:a,setActive:O}),L(n),!M&&F.current>INTENTIONAL_DRAG_COUNT_THRESHOLD&&N(!0),R&&!areValuesEqual(n,I)&&R(e,n,a)}),ue=useEventCallback$1(e=>{let t=trackFinger(e,E);if(N(!1),!t)return;let{newValue:n}=Y({finger:t,move:!0});O(-1),e.type===`touchend`&&j(-1),h&&h(e,n),E.current=void 0,X()}),de=useEventCallback$1(e=>{if(a)return;doesSupportTouchActionNone()||e.preventDefault();let t=e.changedTouches[0];t!=null&&(E.current=t.identifier);let n=trackFinger(e,E);if(n!==!1){let{newValue:t,activeIndex:a}=Y({finger:n});focusThumb({sliderRef:q,activeIndex:a,setActive:O}),L(t),R&&!areValuesEqual(t,I)&&R(e,t,a)}F.current=0;let o=ownerDocument(q.current);o.addEventListener(`touchmove`,le,{passive:!0}),o.addEventListener(`touchend`,ue,{passive:!0})}),X=import_react$24.useCallback(()=>{let e=ownerDocument(q.current);e.removeEventListener(`mousemove`,le),e.removeEventListener(`mouseup`,ue),e.removeEventListener(`touchmove`,le),e.removeEventListener(`touchend`,ue)},[ue,le]);import_react$24.useEffect(()=>{let{current:e}=q;return e.addEventListener(`touchstart`,de,{passive:doesSupportTouchActionNone()}),()=>{e.removeEventListener(`touchstart`,de),X()}},[X,de]),import_react$24.useEffect(()=>{a&&X()},[a,X]);let fe=e=>t=>{var n;if((n=e.onMouseDown)==null||n.call(e,t),a||t.defaultPrevented||t.button!==0)return;t.preventDefault();let o=trackFinger(t,E);if(o!==!1){let{newValue:e,activeIndex:n}=Y({finger:o});focusThumb({sliderRef:q,activeIndex:n,setActive:O}),L(e),R&&!areValuesEqual(e,I)&&R(t,e,n)}F.current=0;let s=ownerDocument(q.current);s.addEventListener(`mousemove`,le,{passive:!0}),s.addEventListener(`mouseup`,ue)},pe=valueToPercent(z?B[0]:d,d,u),me=valueToPercent(B[B.length-1],d,u)-pe,he=(e={})=>{let t=extractEventHandlers(e),n=_extends$3({},t,{onMouseDown:fe(t||{})});return _extends$3({},e,{ref:ne},n)},ge=e=>t=>{var n;(n=e.onMouseOver)==null||n.call(e,t);let a=Number(t.currentTarget.getAttribute(`data-index`));j(a)},Z=e=>t=>{var n;(n=e.onMouseLeave)==null||n.call(e,t),j(-1)};return{active:D,axis:ce,axisProps,dragging:M,focusedThumbIndex:te,getHiddenInputProps:(n={})=>{var o;let l=extractEventHandlers(n),m=_extends$3({},l,{onChange:oe(l||{}),onFocus:re(l||{}),onBlur:J(l||{}),onKeyDown:ae(l||{})});return _extends$3({tabIndex:C,"aria-labelledby":t,"aria-orientation":v,"aria-valuemax":b(u),"aria-valuemin":b(d),name:f,type:`range`,min:e.min,max:e.max,step:e.step===null&&e.marks?`any`:e.step??void 0,disabled:a},n,m,{style:_extends$3({},visuallyHidden,{direction:s?`rtl`:`ltr`,width:`100%`,height:`100%`})})},getRootProps:he,getThumbProps:(e={})=>{let t=extractEventHandlers(e);return _extends$3({},e,t,{onMouseOver:ge(t||{}),onMouseLeave:Z(t||{})})},marks:V,open:k,range:z,rootRef:ne,trackLeap:me,trackOffset:pe,values:B,getThumbStyle:e=>({pointerEvents:D!==-1&&D!==e?`none`:void 0})}}init_isHostComponent();var shouldSpreadAdditionalProps=e=>!e||!isHostComponent(e);init_generateUtilityClasses(),init_generateUtilityClass();function getSliderUtilityClass(e){return generateUtilityClass(`MuiSlider`,e)}var sliderClasses=generateUtilityClasses(`MuiSlider`,`root.active.colorPrimary.colorSecondary.colorError.colorInfo.colorSuccess.colorWarning.disabled.dragging.focusVisible.mark.markActive.marked.markLabel.markLabelActive.rail.sizeSmall.thumb.thumbColorPrimary.thumbColorSecondary.thumbColorError.thumbColorSuccess.thumbColorInfo.thumbColorWarning.track.trackInverted.trackFalse.thumbSizeSmall.valueLabel.valueLabelOpen.valueLabelCircle.valueLabelLabel.vertical`.split(`.`));init_clsx();var useValueLabelClasses=e=>{let{open:t}=e;return{offset:clsx$1(t&&sliderClasses.valueLabelOpen),circle:sliderClasses.valueLabelCircle,label:sliderClasses.valueLabelLabel}};function SliderValueLabel$1(e){let{children:t,className:n,value:a}=e,o=useValueLabelClasses(e);return t?import_react$24.cloneElement(t,{className:clsx$1(t.props.className)},(0,import_jsx_runtime.jsxs)(import_react$24.Fragment,{children:[t.props.children,(0,import_jsx_runtime.jsx)(`span`,{className:clsx$1(o.offset,n),"aria-hidden":!0,children:(0,import_jsx_runtime.jsx)(`span`,{className:o.circle,children:(0,import_jsx_runtime.jsx)(`span`,{className:o.label,children:a})})})]})):null}init_objectWithoutPropertiesLoose(),init_extends(),init_clsx(),init_composeClasses(),init_useSlotProps(),init_isHostComponent(),init_styled(),init_DefaultPropsProvider(),init_slotShouldForwardProp(),init_capitalize();var _excluded$1=`aria-label.aria-valuetext.aria-labelledby.component.components.componentsProps.color.classes.className.disableSwap.disabled.getAriaLabel.getAriaValueText.marks.max.min.name.onChange.onChangeCommitted.orientation.shiftStep.size.step.scale.slotProps.slots.tabIndex.track.value.valueLabelDisplay.valueLabelFormat`.split(`.`);function Identity(e){return e}var SliderRoot=styled$1(`span`,{name:`MuiSlider`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,t[`color${capitalize_default(n.color)}`],n.size!==`medium`&&t[`size${capitalize_default(n.size)}`],n.marked&&t.marked,n.orientation===`vertical`&&t.vertical,n.track===`inverted`&&t.trackInverted,n.track===!1&&t.trackFalse]}})(({theme:e})=>{var t;return{borderRadius:12,boxSizing:`content-box`,display:`inline-block`,position:`relative`,cursor:`pointer`,touchAction:`none`,WebkitTapHighlightColor:`transparent`,"@media print":{colorAdjust:`exact`},[`&.${sliderClasses.disabled}`]:{pointerEvents:`none`,cursor:`default`,color:(e.vars||e).palette.grey[400]},[`&.${sliderClasses.dragging}`]:{[`& .${sliderClasses.thumb}, & .${sliderClasses.track}`]:{transition:`none`}},variants:[...Object.keys((e.vars??e).palette).filter(t=>{var n;return(e.vars??e).palette[t].main}).map(t=>({props:{color:t},style:{color:(e.vars||e).palette[t].main}})),{props:{orientation:`horizontal`},style:{height:4,width:`100%`,padding:`13px 0`,"@media (pointer: coarse)":{padding:`20px 0`}}},{props:{orientation:`horizontal`,size:`small`},style:{height:2}},{props:{orientation:`horizontal`,marked:!0},style:{marginBottom:20}},{props:{orientation:`vertical`},style:{height:`100%`,width:4,padding:`0 13px`,"@media (pointer: coarse)":{padding:`0 20px`}}},{props:{orientation:`vertical`,size:`small`},style:{width:2}},{props:{orientation:`vertical`,marked:!0},style:{marginRight:44}}]}}),SliderRail=styled$1(`span`,{name:`MuiSlider`,slot:`Rail`,overridesResolver:(e,t)=>t.rail})({display:`block`,position:`absolute`,borderRadius:`inherit`,backgroundColor:`currentColor`,opacity:.38,variants:[{props:{orientation:`horizontal`},style:{width:`100%`,height:`inherit`,top:`50%`,transform:`translateY(-50%)`}},{props:{orientation:`vertical`},style:{height:`100%`,width:`inherit`,left:`50%`,transform:`translateX(-50%)`}},{props:{track:`inverted`},style:{opacity:1}}]}),SliderTrack=styled$1(`span`,{name:`MuiSlider`,slot:`Track`,overridesResolver:(e,t)=>t.track})(({theme:e})=>{var t;return{display:`block`,position:`absolute`,borderRadius:`inherit`,border:`1px solid currentColor`,backgroundColor:`currentColor`,transition:e.transitions.create([`left`,`width`,`bottom`,`height`],{duration:e.transitions.duration.shortest}),variants:[{props:{size:`small`},style:{border:`none`}},{props:{orientation:`horizontal`},style:{height:`inherit`,top:`50%`,transform:`translateY(-50%)`}},{props:{orientation:`vertical`},style:{width:`inherit`,left:`50%`,transform:`translateX(-50%)`}},{props:{track:!1},style:{display:`none`}},...Object.keys((e.vars??e).palette).filter(t=>{var n;return(e.vars??e).palette[t].main}).map(t=>({props:{color:t,track:`inverted`},style:_extends$3({},e.vars?{backgroundColor:e.vars.palette.Slider[`${t}Track`],borderColor:e.vars.palette.Slider[`${t}Track`]}:_extends$3({backgroundColor:(0,import_colorManipulator.lighten)(e.palette[t].main,.62),borderColor:(0,import_colorManipulator.lighten)(e.palette[t].main,.62)},e.applyStyles(`dark`,{backgroundColor:(0,import_colorManipulator.darken)(e.palette[t].main,.5)}),e.applyStyles(`dark`,{borderColor:(0,import_colorManipulator.darken)(e.palette[t].main,.5)})))}))]}}),SliderThumb=styled$1(`span`,{name:`MuiSlider`,slot:`Thumb`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.thumb,t[`thumbColor${capitalize_default(n.color)}`],n.size!==`medium`&&t[`thumbSize${capitalize_default(n.size)}`]]}})(({theme:e})=>{var t;return{position:`absolute`,width:20,height:20,boxSizing:`border-box`,borderRadius:`50%`,outline:0,backgroundColor:`currentColor`,display:`flex`,alignItems:`center`,justifyContent:`center`,transition:e.transitions.create([`box-shadow`,`left`,`bottom`],{duration:e.transitions.duration.shortest}),"&::before":{position:`absolute`,content:`""`,borderRadius:`inherit`,width:`100%`,height:`100%`,boxShadow:(e.vars||e).shadows[2]},"&::after":{position:`absolute`,content:`""`,borderRadius:`50%`,width:42,height:42,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`},[`&.${sliderClasses.disabled}`]:{"&:hover":{boxShadow:`none`}},variants:[{props:{size:`small`},style:{width:12,height:12,"&::before":{boxShadow:`none`}}},{props:{orientation:`horizontal`},style:{top:`50%`,transform:`translate(-50%, -50%)`}},{props:{orientation:`vertical`},style:{left:`50%`,transform:`translate(-50%, 50%)`}},...Object.keys((e.vars??e).palette).filter(t=>{var n;return(e.vars??e).palette[t].main}).map(t=>({props:{color:t},style:{[`&:hover, &.${sliderClasses.focusVisible}`]:_extends$3({},e.vars?{boxShadow:`0px 0px 0px 8px rgba(${e.vars.palette[t].mainChannel} / 0.16)`}:{boxShadow:`0px 0px 0px 8px ${(0,import_colorManipulator.alpha)(e.palette[t].main,.16)}`},{"@media (hover: none)":{boxShadow:`none`}}),[`&.${sliderClasses.active}`]:_extends$3({},e.vars?{boxShadow:`0px 0px 0px 14px rgba(${e.vars.palette[t].mainChannel} / 0.16)`}:{boxShadow:`0px 0px 0px 14px ${(0,import_colorManipulator.alpha)(e.palette[t].main,.16)}`})}}))]}}),SliderValueLabel=styled$1(SliderValueLabel$1,{name:`MuiSlider`,slot:`ValueLabel`,overridesResolver:(e,t)=>t.valueLabel})(({theme:e})=>_extends$3({zIndex:1,whiteSpace:`nowrap`},e.typography.body2,{fontWeight:500,transition:e.transitions.create([`transform`],{duration:e.transitions.duration.shortest}),position:`absolute`,backgroundColor:(e.vars||e).palette.grey[600],borderRadius:2,color:(e.vars||e).palette.common.white,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0.25rem 0.75rem`,variants:[{props:{orientation:`horizontal`},style:{transform:`translateY(-100%) scale(0)`,top:`-10px`,transformOrigin:`bottom center`,"&::before":{position:`absolute`,content:`""`,width:8,height:8,transform:`translate(-50%, 50%) rotate(45deg)`,backgroundColor:`inherit`,bottom:0,left:`50%`},[`&.${sliderClasses.valueLabelOpen}`]:{transform:`translateY(-100%) scale(1)`}}},{props:{orientation:`vertical`},style:{transform:`translateY(-50%) scale(0)`,right:`30px`,top:`50%`,transformOrigin:`right center`,"&::before":{position:`absolute`,content:`""`,width:8,height:8,transform:`translate(-50%, -50%) rotate(45deg)`,backgroundColor:`inherit`,right:-8,top:`50%`},[`&.${sliderClasses.valueLabelOpen}`]:{transform:`translateY(-50%) scale(1)`}}},{props:{size:`small`},style:{fontSize:e.typography.pxToRem(12),padding:`0.25rem 0.5rem`}},{props:{orientation:`vertical`,size:`small`},style:{right:`20px`}}]})),SliderMark=styled$1(`span`,{name:`MuiSlider`,slot:`Mark`,shouldForwardProp:e=>slotShouldForwardProp(e)&&e!==`markActive`,overridesResolver:(e,t)=>{let{markActive:n}=e;return[t.mark,n&&t.markActive]}})(({theme:e})=>({position:`absolute`,width:2,height:2,borderRadius:1,backgroundColor:`currentColor`,variants:[{props:{orientation:`horizontal`},style:{top:`50%`,transform:`translate(-1px, -50%)`}},{props:{orientation:`vertical`},style:{left:`50%`,transform:`translate(-50%, 1px)`}},{props:{markActive:!0},style:{backgroundColor:(e.vars||e).palette.background.paper,opacity:.8}}]})),SliderMarkLabel=styled$1(`span`,{name:`MuiSlider`,slot:`MarkLabel`,shouldForwardProp:e=>slotShouldForwardProp(e)&&e!==`markLabelActive`,overridesResolver:(e,t)=>t.markLabel})(({theme:e})=>_extends$3({},e.typography.body2,{color:(e.vars||e).palette.text.secondary,position:`absolute`,whiteSpace:`nowrap`,variants:[{props:{orientation:`horizontal`},style:{top:30,transform:`translateX(-50%)`,"@media (pointer: coarse)":{top:40}}},{props:{orientation:`vertical`},style:{left:36,transform:`translateY(50%)`,"@media (pointer: coarse)":{left:44}}},{props:{markLabelActive:!0},style:{color:(e.vars||e).palette.text.primary}}]})),useUtilityClasses$1=e=>{let{disabled:t,dragging:n,marked:a,orientation:o,track:s,classes:l,color:u,size:d}=e;return composeClasses({root:[`root`,t&&`disabled`,n&&`dragging`,a&&`marked`,o===`vertical`&&`vertical`,s===`inverted`&&`trackInverted`,s===!1&&`trackFalse`,u&&`color${capitalize_default(u)}`,d&&`size${capitalize_default(d)}`],rail:[`rail`],track:[`track`],mark:[`mark`],markActive:[`markActive`],markLabel:[`markLabel`],markLabelActive:[`markLabelActive`],valueLabel:[`valueLabel`],thumb:[`thumb`,t&&`disabled`,d&&`thumbSize${capitalize_default(d)}`,u&&`thumbColor${capitalize_default(u)}`],active:[`active`],disabled:[`disabled`],focusVisible:[`focusVisible`]},getSliderUtilityClass,l)},Forward=({children:e})=>e,Slider=import_react$24.forwardRef(function(e,t){var n,a,o,s,l,u,d,f,m,h,v,y,b,x,S,C,T,E,D,O,k,j,M,N;let F=useDefaultProps({props:e,name:`MuiSlider`}),I=useRtl(),{"aria-label":L,"aria-valuetext":R,"aria-labelledby":z,component:B=`span`,components:V={},componentsProps:H={},color:U=`primary`,classes:W,className:G,disableSwap:ee=!1,disabled:te=!1,getAriaLabel:K,getAriaValueText:q,marks:ne=!1,max:re=100,min:J=0,orientation:ie=`horizontal`,shiftStep:ae=10,size:oe=`medium`,step:se=1,scale:ce=Identity,slotProps:Y,slots:le,track:ue=`normal`,valueLabelDisplay:de=`off`,valueLabelFormat:X=Identity}=F,fe=_objectWithoutPropertiesLoose$3(F,_excluded$1),pe=_extends$3({},F,{isRtl:I,max:re,min:J,classes:W,disabled:te,disableSwap:ee,orientation:ie,marks:ne,color:U,size:oe,step:se,shiftStep:ae,scale:ce,track:ue,valueLabelDisplay:de,valueLabelFormat:X}),{axisProps:me,getRootProps:he,getHiddenInputProps:ge,getThumbProps:Z,open:_e,active:Q,axis:$,focusedThumbIndex:ve,range:ye,dragging:be,marks:xe,values:Se,trackOffset:Ce,trackLeap:we,getThumbStyle:Te}=useSlider(_extends$3({},pe,{rootRef:t}));pe.marked=xe.length>0&&xe.some(e=>e.label),pe.dragging=be,pe.focusedThumbIndex=ve;let Ee=useUtilityClasses$1(pe),De=le?.root??V.Root??SliderRoot,Oe=le?.rail??V.Rail??SliderRail,ke=le?.track??V.Track??SliderTrack,Ae=le?.thumb??V.Thumb??SliderThumb,je=le?.valueLabel??V.ValueLabel??SliderValueLabel,Me=le?.mark??V.Mark??SliderMark,Ne=le?.markLabel??V.MarkLabel??SliderMarkLabel,Pe=le?.input??V.Input??`input`,Fe=Y?.root??H.root,Ie=Y?.rail??H.rail,Le=Y?.track??H.track,Re=Y?.thumb??H.thumb,ze=Y?.valueLabel??H.valueLabel,Be=Y?.mark??H.mark,Ve=Y?.markLabel??H.markLabel,He=Y?.input??H.input,Ue=useSlotProps({elementType:De,getSlotProps:he,externalSlotProps:Fe,externalForwardedProps:fe,additionalProps:_extends$3({},shouldSpreadAdditionalProps(De)&&{as:B}),ownerState:_extends$3({},pe,Fe?.ownerState),className:[Ee.root,G]}),We=useSlotProps({elementType:Oe,externalSlotProps:Ie,ownerState:pe,className:Ee.rail}),Ge=useSlotProps({elementType:ke,externalSlotProps:Le,additionalProps:{style:_extends$3({},me[$].offset(Ce),me[$].leap(we))},ownerState:_extends$3({},pe,Le?.ownerState),className:Ee.track}),Ke=useSlotProps({elementType:Ae,getSlotProps:Z,externalSlotProps:Re,ownerState:_extends$3({},pe,Re?.ownerState),className:Ee.thumb}),qe=useSlotProps({elementType:je,externalSlotProps:ze,ownerState:_extends$3({},pe,ze?.ownerState),className:Ee.valueLabel}),Je=useSlotProps({elementType:Me,externalSlotProps:Be,ownerState:pe,className:Ee.mark}),Ye=useSlotProps({elementType:Ne,externalSlotProps:Ve,ownerState:pe,className:Ee.markLabel}),Xe=useSlotProps({elementType:Pe,getSlotProps:ge,externalSlotProps:He,ownerState:pe});return(0,import_jsx_runtime.jsxs)(De,_extends$3({},Ue,{children:[(0,import_jsx_runtime.jsx)(Oe,_extends$3({},We)),(0,import_jsx_runtime.jsx)(ke,_extends$3({},Ge)),xe.filter(e=>e.value>=J&&e.value<=re).map((e,t)=>{let n=valueToPercent(e.value,J,re),a=me[$].offset(n),o;return o=ue===!1?Se.indexOf(e.value)!==-1:ue===`normal`&&(ye?e.value>=Se[0]&&e.value<=Se[Se.length-1]:e.value<=Se[0])||ue===`inverted`&&(ye?e.value<=Se[0]||e.value>=Se[Se.length-1]:e.value>=Se[0]),(0,import_jsx_runtime.jsxs)(import_react$24.Fragment,{children:[(0,import_jsx_runtime.jsx)(Me,_extends$3({"data-index":t},Je,!isHostComponent(Me)&&{markActive:o},{style:_extends$3({},a,Je.style),className:clsx$1(Je.className,o&&Ee.markActive)})),e.label==null?null:(0,import_jsx_runtime.jsx)(Ne,_extends$3({"aria-hidden":!0,"data-index":t},Ye,!isHostComponent(Ne)&&{markLabelActive:o},{style:_extends$3({},a,Ye.style),className:clsx$1(Ee.markLabel,Ye.className,o&&Ee.markLabelActive),children:e.label}))]},t)}),Se.map((e,t)=>{let n=valueToPercent(e,J,re),a=me[$].offset(n),o=de===`off`?Forward:je;return(0,import_jsx_runtime.jsx)(o,_extends$3({},!isHostComponent(o)&&{valueLabelFormat:X,valueLabelDisplay:de,value:typeof X==`function`?X(ce(e),t):X,index:t,open:_e===t||Q===t||de===`on`,disabled:te},qe,{children:(0,import_jsx_runtime.jsx)(Ae,_extends$3({"data-index":t},Ke,{className:clsx$1(Ee.thumb,Ke.className,Q===t&&Ee.active,ve===t&&Ee.focusVisible),style:_extends$3({},a,Te(t),Ke.style),children:(0,import_jsx_runtime.jsx)(Pe,_extends$3({"data-index":t,"aria-label":K?K(t):L,"aria-valuenow":ce(e),"aria-labelledby":z,"aria-valuetext":q?q(ce(e),t):R,value:Se[t]},Xe))}))}),t)})]}))}),import_ZoomIn=__toESM(require_ZoomIn()),import_ZoomOut=__toESM(require_ZoomOut()),extendStatics$1=function(e,t){return extendStatics$1=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},extendStatics$1(e,t)};function __extends$1(e,t){extendStatics$1(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var __assign$1=function(){return __assign$1=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var o in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},__assign$1.apply(this,arguments)};function __rest$1(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var o=0,a=Object.getOwnPropertySymbols(e);o<a.length;o++)t.indexOf(a[o])<0&&Object.prototype.propertyIsEnumerable.call(e,a[o])&&(n[a[o]]=e[a[o]]);return n}var initialState={wrapperComponent:null,contentComponent:null,previousScale:1,scale:1,positionX:0,positionY:0,options:{disabled:!1,transformEnabled:!0,minPositionX:null,maxPositionX:null,minPositionY:null,maxPositionY:null,minScale:1,maxScale:8,limitToBounds:!0,limitToWrapper:!1,centerContent:!0,wrapperClass:``,contentClass:``},wheel:{disabled:!1,step:5,wheelEnabled:!0,touchPadEnabled:!0,limitsOnWheel:!1},pan:{disabled:!1,panAnimationType:`linear`,lockAxisX:!1,lockAxisY:!1,velocity:!0,velocityEqualToMove:!0,velocitySensitivity:2,velocityActiveScale:1,velocityMinSpeed:1,velocityBaseTime:1600,velocityAnimationType:`easeOutQuart`,padding:!0,paddingSize:30,panReturnAnimationTime:400,panReturnAnimationType:`easeOut`,disableOnTarget:[]},pinch:{disabled:!1},zoomIn:{disabled:!1,step:20,animation:!0,animationType:`easeOut`,animationTime:200},zoomOut:{disabled:!1,step:20,animation:!0,animationType:`easeOut`,animationTime:200},doubleClick:{disabled:!1,step:20,mode:`zoomIn`,animation:!0,animationType:`easeOut`,animationTime:200},reset:{disabled:!1,animation:!0,animationType:`easeOut`,animationTime:200},scalePadding:{disabled:!1,size:.2,animationTime:200,animationType:`easeOut`}},roundNumber=function(e,t){return Number(e.toFixed(t))},checkIsNumber=function(e,t){return typeof e==`number`?e:t},boundLimiter=function(e,t,n,a){return roundNumber(a?e<t?t:e>n?n:e:e,2)},calculateBoundingArea=function(e,t,n,a,o,s,l){var u=e>t?n*(l?1:.5):0,d=a>o?s*(l?1:.5):0;return{minPositionX:e-t-u,maxPositionX:u,minPositionY:a-o-d,maxPositionY:d}},getDistance=function(e,t){return Math.sqrt((e.pageX-t.pageX)**2+(e.pageY-t.pageY)**2)},deleteUndefinedProps=function(e){var t=__assign$1({},e);return Object.keys(t).forEach(function(e){return t[e]===void 0&&delete t[e]}),t},handleCallback=function(e,t){e&&typeof e==`function`&&e(t)},handleWheelStop=function(e,t,n){var a=n.scale,o=n.options,s=o.maxScale,l=o.minScale;return e?a<s||a>l||Math.sign(e.deltaY)!==Math.sign(t.deltaY)||e.deltaY>0&&e.deltaY<t.deltaY||e.deltaY<0&&e.deltaY>t.deltaY||Math.sign(e.deltaY)!==Math.sign(t.deltaY):!1},mergeProps=function(e,t){return Object.keys(e).reduce(function(n,a){return typeof t[a]==`object`&&t[a]!==null?n[a]=__assign$1(__assign$1({},e[a]),t[a]):n[a]=t[a]===void 0?e[a]:t[a],n},{})};function getWindowScaleY(e){return e?window.innerHeight/e.offsetHeight:0}function getWindowScaleX(e){return e?window.innerWidth/e.offsetWidth:0}var easeOut=function(e){return-Math.cos(e*Math.PI)/2+.5},linear=function(e){return e},easeInQuad=function(e){return e*e},easeOutQuad=function(e){return e*(2-e)},easeInOutQuad=function(e){return e<.5?2*e*e:-1+(4-2*e)*e},easeInCubic=function(e){return e*e*e},easeOutCubic=function(e){return--e*e*e+1},easeInOutCubic=function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart=function(e){return e*e*e*e},easeOutQuart=function(e){return 1- --e*e*e*e},easeInOutQuart=function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint=function(e){return e*e*e*e*e},easeOutQuint=function(e){return 1+--e*e*e*e*e},easeInOutQuint=function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e},availableAnimations={easeOut,linear,easeInQuad,easeOutQuad,easeInOutQuad,easeInCubic,easeOutCubic,easeInOutCubic,easeInQuart,easeOutQuart,easeInOutQuart,easeInQuint,easeOutQuint,easeInOutQuint};function handleDisableAnimation(){this.mounted&&(this.animation&&cancelAnimationFrame(this.animation),this.animate=!1,this.animation=!1,this.velocity=!1)}function animate(e,t,n){var a=this;if(this.mounted){var o=new Date().getTime(),s=1;handleDisableAnimation.call(this),this.animation=function(){if(!(!a.animation||!a.mounted)){var l=new Date().getTime()-o,u=l/t,d=availableAnimations[e],f=d(u);l>=t?(n(s),a.animation=null):(n(f),requestAnimationFrame(a.animation))}},requestAnimationFrame(this.animation)}}function animateComponent(e){var t=this,n=e.targetState,a=e.speed,o=e.type,s=this.stateProvider,l=s.scale,u=s.positionX,d=s.positionY,f=n.scale-l,m=n.positionX-u,h=n.positionY-d;a===0?(this.stateProvider.previousScale=this.stateProvider.scale,this.stateProvider.scale=n.scale,this.stateProvider.positionX=n.positionX,this.stateProvider.positionY=n.positionY,this.applyTransformation()):animate.call(this,o,a,function(e){t.stateProvider.previousScale=t.stateProvider.scale,t.stateProvider.scale=l+f*e,t.stateProvider.positionX=u+m*e,t.stateProvider.positionY=d+h*e,t.applyTransformation()})}function checkZoomBounds(e,t,n,a,o){var s=t-(o?a:0);return!isNaN(n)&&e>=n?n:!isNaN(t)&&e<=s?s:e}function checkPositionBounds(e,t,n,a,o,s){var l=n.minPositionX,u=n.minPositionY,d=n.maxPositionX,f=n.maxPositionY,m=s?o*s.offsetWidth/100:0,h=s?o*s.offsetHeight/100:0;return{x:boundLimiter(e,l-m,d+m,a),y:boundLimiter(t,u-h,f+h,a)}}function getDelta(e,t){return checkIsNumber(t,e?e.deltaY<0?1:-1:0)}function wheelMousePosition(e,t,n){var a=t.getBoundingClientRect(),o=(e.clientX-a.left)/n,s=(e.clientY-a.top)/n;return(isNaN(o)||isNaN(s))&&console.error(`No mouse or touch offset found`),{mouseX:o,mouseY:s}}function getComponentsSizes(e,t,n){var a=e.offsetWidth,o=e.offsetHeight,s=t.offsetWidth,l=t.offsetHeight,u=s*n,d=l*n;return{wrapperWidth:a,wrapperHeight:o,newContentWidth:u,newDiffWidth:a-u,newContentHeight:d,newDiffHeight:o-d}}function handleCalculatePositions(e,t,n,a,o){var s=this.stateProvider,l=s.scale,u=s.positionX,d=s.positionY,f=s.options.transformEnabled,m=n-l;return typeof e!=`number`||typeof t!=`number`?console.error(`Mouse X and Y position were not provided!`):f?checkPositionBounds(u-e*m,d-t*m,a,o,0,null):{newPositionX:u,newPositionY:d}}function getClientPosition(e){var t=e.touches;return t&&t.length===1?{clientX:t[0].clientX,clientY:t[0].clientY}:t?null:{clientX:e.clientX,clientY:e.clientY}}function handlePanning(e){var t=this.stateProvider,n=t.scale,a=t.positionX,o=t.positionY,s=t.options,l=s.limitToBounds,u=s.minScale,d=t.pan,f=d.lockAxisX,m=d.lockAxisY,h=d.padding,v=d.paddingSize,y=t.wrapperComponent;if(this.startCoords){var b=this.startCoords,x=b.x,S=b.y,C=getClientPosition(e);if(!C)return console.error(`Cannot find mouse client positions`);var T=C.clientX,E=C.clientY,D=T-x,O=E-S,k=f?a:D,j=m?o:O,M=h&&n>=u?v:0;if(!(k===a&&j===o)){var N=checkPositionBounds(k,j,this.bounds,l,M,y);handlePaddingAnimation.call(this,N.x,N.y)}}}function handlePanningAnimation(){var e=this.stateProvider,t=e.scale,n=e.options.minScale,a=e.pan,o=a.disabled,s=a.padding,l=a.panReturnAnimationTime,u=a.panReturnAnimationType;if(!(o||t<n||!s)){var d=handlePanToBounds.call(this);animateComponent.call(this,{targetState:d,speed:l,type:u})}}function handlePanToBounds(){var e=this.stateProvider,t=e.positionX,n=e.positionY,a=e.scale,o=e.options,s=o.disabled,l=o.limitToBounds,u=o.limitToWrapper,d=this.state.wrapperComponent;if(!s){var f=this.bounds,m=f.maxPositionX,h=f.minPositionX,v=f.maxPositionY,y=f.minPositionY,b=t>m||t<h,x=n>v||n<y,S=t>m?d.offsetWidth:this.stateProvider.minPositionX||0,C=n>v?d.offsetHeight:this.stateProvider.minPositionY||0,T=S,E=C,D=handleCalculatePositions.call(this,T,E,a,this.bounds,l||u),O=D.x,k=D.y;return{scale:a,positionX:b?O:t,positionY:x?k:n}}}function handlePaddingAnimation(e,t){this.stateProvider.pan.padding&&(this.stateProvider.positionX=e,this.stateProvider.positionY=t,this.applyTransformation())}function handleCalculateZoom(e,t,n,a,o){var s=this.stateProvider,l=s.scale,u=s.options,d=u.maxScale,f=u.minScale,m=s.scalePadding,h=m.size,v=m.disabled,y=s.wrapperComponent,b=null;if(o){var x=window.innerWidth*1e-4,S=e<0?30:20;b=l+(t-t*x)*e*(l/S)}else{var C=2-window.innerWidth/y.offsetWidth,x=Math.max(.2,Math.min(.99,C)),S=20;b=l+t*e*((l-l*x)/S)}if(a)return b;var T=!n&&!v;return checkZoomBounds(roundNumber(b,3),f,d,h,T)}function handleCalculateBounds(e,t){var n=this.stateProvider,a=n.wrapperComponent,o=n.contentComponent,s=getComponentsSizes(a,o,e),l=s.wrapperWidth,u=s.wrapperHeight,d=s.newContentWidth,f=s.newDiffWidth,m=s.newContentHeight,h=s.newDiffHeight,v=calculateBoundingArea(l,d,f,u,m,h,t);return this.bounds=v,v}function handleWheelZoom(e){var t=this.stateProvider,n=t.scale,a=t.contentComponent,o=t.options.limitToBounds,s=t.scalePadding,l=s.size,u=s.disabled,d=t.wheel,f=d.step,m=d.limitsOnWheel;e.preventDefault(),e.stopPropagation();var h=getDelta(e,null),v=handleCalculateZoom.call(this,h,f,!e.ctrlKey);if(n!==v){var y=handleCalculateBounds.call(this,v,!m),b=wheelMousePosition(e,a,n),x=b.mouseX,S=b.mouseY,C=o&&(u||l===0||m),T=handleCalculatePositions.call(this,x,S,v,y,C),E=T.x,D=T.y;this.bounds=y,this.stateProvider.previousScale=n,this.stateProvider.scale=v,this.stateProvider.positionX=E,this.stateProvider.positionY=D,this.applyTransformation()}}function handleZoomToPoint(e,t,n,a,o){var s=this.stateProvider,l=s.contentComponent,u=s.options,d=u.disabled,f=u.minScale,m=u.maxScale,h=u.limitToBounds,v=u.limitToWrapper;if(!(d||e)){var y=checkZoomBounds(roundNumber(t,2),f,m,null,null),b=handleCalculateBounds.call(this,y,v),x=n,S=a;if(o){var C=wheelMousePosition(o,l,t);x=C.mouseX,S=C.mouseY}var T=handleCalculatePositions.call(this,x,S,y,b,h);return{scale:y,positionX:T.x,positionY:T.y}}}function handlePaddingAnimation$1(){var e=this.stateProvider,t=e.scale,n=e.wrapperComponent,a=e.options,o=a.minScale,s=a.limitToBounds,l=e.scalePadding,u=l.disabled,d=l.animationTime,f=l.animationType,m=u||t>=o;if((t>=1||s)&&handlePanningAnimation.call(this),!m){var h=n.offsetWidth/2,v=n.offsetHeight/2,y=handleZoomToPoint.call(this,!1,o,h,v,null);animateComponent.call(this,{targetState:y,speed:d,type:f})}}function handleDoubleClick(e){e.preventDefault(),e.stopPropagation();var t=this.stateProvider,n=t.contentComponent,a=t.scale,o=t.doubleClick,s=o.disabled,l=o.mode,u=o.step,d=o.animationTime,f=o.animationType;if(l===`reset`)return resetTransformations.call(this,e,d);var m=l===`zoomOut`?-1:1,h=handleCalculateZoom.call(this,m,u,void 0,void 0,!0),v=wheelMousePosition(e,n,a),y=v.mouseX,b=v.mouseY,x=handleZoomToPoint.call(this,s,h,y,b);if(x.scale!==a){var S=getButtonAnimationTime(handleCalculateZoom.call(this,m,u,!0,void 0,!0),h,d);animateComponent.call(this,{targetState:x,speed:S,type:f})}}function handleZoomControls(e,t){var n=this.stateProvider,a=n.scale,o=n.positionX,s=n.positionY,l=n.wrapperComponent,u=n.zoomIn,d=n.zoomOut,f=l.offsetWidth,m=l.offsetHeight,h=(f/2-o)/a,v=(m/2-s)/a,y=handleCalculateZoom.call(this,e,t,void 0,void 0,!0),b=y>a,x=b?u.animationTime:d.animationTime,S=b?u.animationType:d.animationType,C=b?u.disabled:d.disabled,T=handleZoomToPoint.call(this,C,y,h,v);if(T.scale!==a){var E=getButtonAnimationTime(handleCalculateZoom.call(this,e,t,!0,void 0,!0),y,x);animateComponent.call(this,{targetState:T,speed:E,type:S})}}function resetTransformations(e){var t=this.props.defaultValues,n=t.defaultScale,a=t.defaultPositionX,o=t.defaultPositionY,s=this.stateProvider,l=s.scale,u=s.positionX,d=s.positionY,f=s.reset,m=s.options,h=m.disabled,v=m.limitToBounds,y=m.centerContent,b=m.limitToWrapper;if(!(h||f.disabled)&&!(l===n&&u===a&&d===o)){var x=typeof e==`number`?e:f.animationTime,S=checkIsNumber(n,initialState.scale),C=checkIsNumber(a,initialState.positionX),T=checkIsNumber(o,initialState.positionY);if(v&&!b||y){var E=handleCalculateBounds.call(this,S,b);C=E.minPositionX,T=E.minPositionY}var D={scale:S,positionX:C,positionY:T};animateComponent.call(this,{targetState:D,speed:x,type:f.animationType})}}function getButtonAnimationTime(e,t,n){return t/e*n}function round(e,t){var n=10**t;return Math.round(e*n)/n}function getCurrentDistance(e){return getDistance(e.touches[0],e.touches[1])}function checkIfInfinite(e){return e===1/0||e===-1/0}function calculatePinchZoom(e,t){var n=this.stateProvider,a=n.options,o=a.minScale,s=a.maxScale,l=n.scalePadding,u=l.size,d=l.disabled;if(typeof t!=`number`||typeof e!=`number`)return console.error(`Pinch touches distance was not provided`);if(!(e<0))return checkZoomBounds(roundNumber(e/t*this.pinchStartScale,2),o,s,u,!d)}function calculateMidpoint(e,t,n){var a=n.getBoundingClientRect(),o=e.touches,s=round(o[0].clientX-a.left,5),l=round(o[0].clientY-a.top,5),u=round(o[1].clientX-a.left,5),d=round(o[1].clientY-a.top,5);return{mouseX:(s+u)/2/t,mouseY:(l+d)/2/t}}function handleZoomPinch(e){var t=this.stateProvider,n=t.scale,a=t.options,o=a.limitToBounds,s=a.limitToWrapper,l=t.scalePadding,u=l.disabled,d=l.size,f=t.wheel.limitsOnWheel,m=t.pinch,h=this.state.contentComponent;if(!(m.disabled||this.stateProvider.options.disabled)&&(e.cancelable&&(e.preventDefault(),e.stopPropagation()),this.pinchStartDistance!==null)){var v=calculateMidpoint(e,n,h),y=v.mouseX,b=v.mouseY;if(!(checkIfInfinite(y)||checkIfInfinite(b))){var x=getCurrentDistance(e),S=calculatePinchZoom.call(this,x,this.pinchStartDistance);if(!(checkIfInfinite(S)||S===n)){var C=handleCalculateBounds.call(this,S,s),T=o&&(u||d===0||f),E=handleCalculatePositions.call(this,y,b,S,C,T),D=E.x,O=E.y;this.lastDistance=x,this.stateProvider.positionX=D,this.stateProvider.positionY=O,this.stateProvider.scale=S,this.stateProvider.previousScale=n,this.applyTransformation()}}}}var throttleTime=30;function velocityTimeSpeed(e,t){return this.stateProvider.pan.velocityEqualToMove?t-t/Math.max(1,e):t}function handleEnableVelocity(){this.setState({startAnimation:!1})}function handleFireVelocity(){this.setState({startAnimation:!0})}function animateVelocity(){var e=this,t=this.stateProvider,n=t.positionX,a=t.positionY,o=t.options.limitToBounds,s=t.pan,l=s.velocityBaseTime,u=s.lockAxisX,d=s.lockAxisY,f=s.velocityAnimationType,m=s.panReturnAnimationTime,h=s.panReturnAnimationType,v=s.padding,y=s.paddingSize,b=t.wrapperComponent;if(this.mounted){if(!this.velocity||!this.bounds)return handleDisableAnimation.call(this);var x=this.bounds,S=x.maxPositionX,C=x.minPositionX,T=x.maxPositionY,E=x.minPositionY,D=this.velocity,O=D.velocityX,k=D.velocityY,j=D.velocity,M=velocityTimeSpeed.call(this,j,l);if(!M){handlePanningAnimation.call(this);return}var N=O,F=k,I=M>m?M:m,L=v?y:0,R=b?L*b.offsetWidth/100:0,z=b?L*b.offsetHeight/100:0,B=S+R,V=C-R,H=T+z,U=E-z,W=checkPositionBounds(n,a,this.bounds,o,L,b),G=new Date().getTime();animate.call(this,f,I,function(t){var s=new Date().getTime()-G,l=s/m,f=availableAnimations[h],v=f(l);(s>m||v>1||v===1/0||v===-1/0)&&(v=1);var y=getPosition(u,N,t,v,C,S,o,n,W.x,V,B),b=getPosition(d,F,t,v,E,T,o,a,W.y,U,H);(n!==y||a!==b)&&(e.stateProvider.positionX=y,e.stateProvider.positionY=b,e.applyTransformation())})}}function calculateVelocityStart(e){var t=this,n=this.stateProvider,a=n.scale,o=n.options.disabled,s=n.pan,l=s.velocity,u=s.velocitySensitivity,d=s.velocityActiveScale,f=s.velocityMinSpeed,m=n.wrapperComponent;if(!(!l||d>=a||o)){handleEnableVelocity.call(this);var h=Date.now();if(this.lastMousePosition){var v=getClientPosition(e);if(!v)return console.error(`No mouse or touch position detected`);var y=v.clientX,b=v.clientY,x=y-this.lastMousePosition.clientX,S=b-this.lastMousePosition.clientY,C=h-this.velocityTime,T=2-m.offsetWidth/window.innerWidth,E=2-m.offsetHeight/window.innerHeight,D=20*Math.max(f,Math.min(2,T)),O=20*Math.max(f,Math.min(2,E)),k=x/C*u*a*D,j=S/C*u*a*O,M=x*x+S*S,N=Math.sqrt(M)/C*u;if(this.velocity&&N<this.velocity.velocity&&this.throttle)return;this.velocity={velocityX:k,velocityY:j,velocity:N},this.throttle&&clearTimeout(this.throttle),this.throttle=setTimeout(function(){t.mounted&&(t.throttle=!1)},throttleTime)}var F=getClientPosition(e);this.lastMousePosition=F,this.velocityTime=h}}function getPosition(e,t,n,a,o,s,l,u,d,f,m){if(l){if(d>o&&u>s){var h=d-(d-s)*a;return h>m?m:h<s?s:h}if(d<o&&u<o){var h=d-(d-o)*a;return h<f?f:h>o?o:h}}return e?d:boundLimiter(u+t*n,o,s,l)}function makePassiveEventOption(e){return e}var propsList=`previousScale.scale.positionX.positionY.defaultPositionX.defaultPositionY.defaultScale.onWheelStart.onWheel.onWheelStop.onPanningStart.onPanning.onPanningStop.onPinchingStart.onPinching.onPinchingStop.onZoomChange.options.wheel.scalePadding.pan.pinch.zoomIn.zoomOut.doubleClick.reset`.split(`.`),getValidPropsFromObject=function(e){return Object.keys(e).reduce(function(t,n){return propsList.includes(n)&&(t[n]=e[n]),t},{})},Context=import_react$24.createContext({}),wheelStopEventTimer=null,wheelStopEventTime=180,wheelAnimationTimer=null,wheelAnimationTime=100,StateProvider=function(e){__extends$1(t,e);function t(){var t=e!==null&&e.apply(this,arguments)||this;return t.mounted=!0,t.state={wrapperComponent:void 0,contentComponent:void 0},t.stateProvider=__assign$1(__assign$1(__assign$1(__assign$1({},initialState),mergeProps(initialState,t.props.dynamicValues)),t.props.defaultValues),{previousScale:t.props.dynamicValues.scale||t.props.defaultValues.scale||initialState.scale}),t.windowToWrapperScaleX=0,t.windowToWrapperScaleY=0,t.startCoords=null,t.isDown=!1,t.pinchStartDistance=null,t.lastDistance=null,t.pinchStartScale=null,t.distance=null,t.bounds=null,t.velocityTime=null,t.lastMousePosition=null,t.velocity=null,t.offsetX=null,t.offsetY=null,t.throttle=!1,t.previousWheelEvent=null,t.lastScale=null,t.animate=null,t.animation=null,t.maxBounds=null,t.handleWheel=function(e){var n=t.stateProvider,a=n.scale,o=n.wheel,s=o.disabled,l=o.wheelEnabled,u=o.touchPadEnabled,d=t.props,f=d.onWheelStart,m=d.onWheel,h=d.onWheelStop,v=t.state,y=v.wrapperComponent,b=v.contentComponent;t.isDown||s||t.stateProvider.options.disabled||!y||!b||!l&&!e.ctrlKey||!u&&e.ctrlKey||(wheelStopEventTimer||(t.lastScale=a,handleDisableAnimation.call(t),handleCallback(f,t.getCallbackProps())),handleWheelZoom.call(t,e),handleCallback(m,t.getCallbackProps()),t.applyTransformation(null,null,null),t.previousWheelEvent=e,handleWheelStop(t.previousWheelEvent,e,t.stateProvider)&&(clearTimeout(wheelStopEventTimer),wheelStopEventTimer=setTimeout(function(){t.mounted&&(handleCallback(h,t.getCallbackProps()),wheelStopEventTimer=null)},wheelStopEventTime)),t.animate=!1,t.lastScale=t.stateProvider.scale,clearTimeout(wheelAnimationTimer),wheelAnimationTimer=setTimeout(function(){t.mounted&&handlePaddingAnimation$1.call(t,e)},wheelAnimationTime))},t.checkPanningTarget=function(e){var n=t.stateProvider.pan.disableOnTarget;return n.map(function(e){return e.toUpperCase()}).includes(e.target.tagName)||n.find(function(t){return e.target.classList.value.includes(t)})},t.checkIsPanningActive=function(e){var n=t.stateProvider.pan.disabled,a=t.state,o=a.wrapperComponent,s=a.contentComponent;return!t.isDown||n||t.stateProvider.options.disabled||e.touches&&(e.touches.length!==1||Math.abs(t.startCoords.x-e.touches[0].clientX)<1||Math.abs(t.startCoords.y-e.touches[0].clientY)<1)||!o||!s},t.handleSetUpPanning=function(e,n){var a=t.stateProvider,o=a.positionX,s=a.positionY;t.isDown=!0,t.startCoords={x:e-o,y:n-s},handleCallback(t.props.onPanningStart,t.getCallbackProps())},t.handleStartPanning=function(e){var n=t.stateProvider,a=n.wrapperComponent,o=n.scale,s=n.options,l=s.minScale,u=s.maxScale,d=s.limitToWrapper,f=n.pan.disabled,m=e.target,h=e.touches;f||t.stateProvider.options.disabled||a&&!a.contains(m)||t.checkPanningTarget(e)||o<l||o>u||(handleDisableAnimation.call(t),t.bounds=handleCalculateBounds.call(t,o,d),h&&h.length===1&&t.handleSetUpPanning(h[0].clientX,h[0].clientY),h||t.handleSetUpPanning(e.clientX,e.clientY))},t.handlePanning=function(e){t.isDown&&e.preventDefault(),!t.checkIsPanningActive(e)&&(e.stopPropagation(),calculateVelocityStart.call(t,e),handlePanning.call(t,e),handleCallback(t.props.onPanning,t.getCallbackProps()))},t.handleStopPanning=function(){if(t.isDown){t.isDown=!1,t.animate=!1,t.animation=!1,handleFireVelocity.call(t),handleCallback(t.props.onPanningStop,t.getCallbackProps());var e=t.stateProvider,n=e.pan.velocity,a=e.scale;t.velocity&&n&&a>1?animateVelocity.call(t):handlePanningAnimation.call(t)}},t.handlePinchStart=function(e){var n=t.stateProvider.scale;e.preventDefault(),e.stopPropagation(),handleDisableAnimation.call(t);var a=getDistance(e.touches[0],e.touches[1]);t.pinchStartDistance=a,t.lastDistance=a,t.pinchStartScale=n,t.isDown=!1,handleCallback(t.props.onPinchingStart,t.getCallbackProps())},t.handlePinch=function(e){t.isDown=!1,handleZoomPinch.call(t,e),handleCallback(t.props.onPinching,t.getCallbackProps())},t.handlePinchStop=function(){typeof t.pinchStartScale==`number`&&(t.isDown=!1,t.velocity=null,t.lastDistance=null,t.pinchStartScale=null,t.pinchStartDistance=null,handlePaddingAnimation$1.call(t),handleCallback(t.props.onPinchingStop,t.getCallbackProps()))},t.handleTouchStart=function(e){var n=t.stateProvider,a=n.wrapperComponent,o=n.contentComponent,s=n.scale,l=n.options,u=l.disabled,d=l.minScale,f=e.touches;if(!(u||!a||!o||s<d)){if(handleDisableAnimation.call(t),f&&f.length===1)return t.handleStartPanning(e);if(f&&f.length===2)return t.handlePinchStart(e)}},t.handleTouch=function(e){var n=t.stateProvider,a=n.pan,o=n.pinch;if(!n.options.disabled){if(!a.disabled&&e.touches.length===1)return t.handlePanning(e);if(!o.disabled&&e.touches.length===2)return t.handlePinch(e)}},t.handleTouchStop=function(){t.handleStopPanning(),t.handlePinchStop()},t.zoomIn=function(e){var n=t.stateProvider,a=n.zoomIn,o=a.disabled,s=a.step,l=n.options,u=t.state,d=u.wrapperComponent,f=u.contentComponent;if(!e)throw Error(`Zoom in function requires event prop`);o||l.disabled||!d||!f||handleZoomControls.call(t,1,s)},t.zoomOut=function(e){var n=t.stateProvider,a=n.zoomOut,o=a.disabled,s=a.step,l=n.options,u=t.state,d=u.wrapperComponent,f=u.contentComponent;if(!e)throw Error(`Zoom out function requires event prop`);o||l.disabled||!d||!f||handleZoomControls.call(t,-1,s)},t.handleDbClick=function(e){var n=t.stateProvider,a=n.options,o=n.doubleClick,s=o.disabled,l=o.step,u=t.state,d=u.wrapperComponent,f=u.contentComponent;if(!e)throw Error(`Double click function requires event prop`);s||a.disabled||!d||!f||handleDoubleClick.call(t,e,1,l)},t.setScale=function(e,n,a){n===void 0&&(n=200),a===void 0&&(a=`easeOut`);var o=t.stateProvider,s=o.positionX,l=o.positionY,u=o.scale,d=o.options.disabled,f=t.state,m=f.wrapperComponent,h=f.contentComponent;if(!(d||!m||!h)){var v={positionX:s,positionY:l,scale:isNaN(e)?u:e};animateComponent.call(t,{targetState:v,speed:n,type:a})}},t.setPositionX=function(e,n,a){n===void 0&&(n=200),a===void 0&&(a=`easeOut`);var o=t.stateProvider,s=o.positionX,l=o.positionY,u=o.scale,d=o.options,f=d.disabled,m=d.transformEnabled,h=t.state,v=h.wrapperComponent,y=h.contentComponent;if(!(f||!m||!v||!y)){var b={positionX:isNaN(e)?s:e,positionY:l,scale:u};animateComponent.call(t,{targetState:b,speed:n,type:a})}},t.setPositionY=function(e,n,a){n===void 0&&(n=200),a===void 0&&(a=`easeOut`);var o=t.stateProvider,s=o.positionX,l=o.scale,u=o.positionY,d=o.options,f=d.disabled,m=d.transformEnabled,h=t.state,v=h.wrapperComponent,y=h.contentComponent;if(!(f||!m||!v||!y)){var b={positionX:s,positionY:isNaN(e)?u:e,scale:l};animateComponent.call(t,{targetState:b,speed:n,type:a})}},t.setTransform=function(e,n,a,o,s){o===void 0&&(o=200),s===void 0&&(s=`easeOut`);var l=t.stateProvider,u=l.positionX,d=l.positionY,f=l.scale,m=l.options,h=m.disabled,v=m.transformEnabled,y=t.state,b=y.wrapperComponent,x=y.contentComponent;if(!(h||!v||!b||!x)){var S={positionX:isNaN(e)?u:e,positionY:isNaN(n)?d:n,scale:isNaN(a)?f:a};animateComponent.call(t,{targetState:S,speed:o,type:s})}},t.resetTransform=function(){var e=t.stateProvider.options,n=e.disabled,a=e.transformEnabled;n||!a||resetTransformations.call(t)},t.setDefaultState=function(){t.animation=null,t.stateProvider=__assign$1(__assign$1(__assign$1({},t.stateProvider),{scale:initialState.scale,positionX:initialState.positionX,positionY:initialState.positionY}),t.props.defaultValues),t.forceUpdate()},t.setWrapperComponent=function(e){t.setState({wrapperComponent:e})},t.setContentComponent=function(e){t.setState({contentComponent:e},function(){var n=t.stateProvider,a=n.wrapperComponent,o=n.options,s=o.centerContent,l=o.limitToBounds,u=o.limitToWrapper,d=n.scale,f=t.props.defaultValues,m=f.positionX,h=f.positionY;if(l&&!u||s&&!m&&!h){var v=`translate(25%, 25%) scale(`+d+`)`;e.style.transform=v,e.style.WebkitTransform=v,t.forceUpdate();var y=new Date().getTime(),b=2e3,x=setInterval(function(){if(a.offsetWidth){var e=handleCalculateBounds.call(t,d,!1);t.stateProvider.positionX=e.minPositionX,t.stateProvider.positionY=e.minPositionY,t.applyTransformation(null,null,null),clearInterval(x),x=null}else new Date().getTime()-y>b&&(clearInterval(x),x=null)},20)}else t.applyTransformation(null,null,null)})},t.applyTransformation=function(e,n,a){if(t.mounted){var o=t.state.contentComponent,s=t.props.onZoomChange,l=t.stateProvider,u=l.previousScale,d=l.scale,f=l.positionX,m=l.positionY;if(!o)return console.error(`There is no content component`);var h=`translate(`+(n||f)+`px, `+(a||m)+`px) scale(`+(e||d)+`)`;o.style.transform=h,o.style.WebkitTransform=h,t.forceUpdate(),s&&u!==d&&handleCallback(s,t.getCallbackProps())}},t.getCallbackProps=function(){return getValidPropsFromObject(t.stateProvider)},t}return t.prototype.componentDidMount=function(){var e=makePassiveEventOption(!1);window.addEventListener(`mousedown`,this.handleStartPanning,e),window.addEventListener(`mousemove`,this.handlePanning,e),window.addEventListener(`mouseup`,this.handleStopPanning,e)},t.prototype.componentWillUnmount=function(){var e=makePassiveEventOption(!1);window.removeEventListener(`mousedown`,this.handleStartPanning,e),window.removeEventListener(`mousemove`,this.handlePanning,e),window.removeEventListener(`mouseup`,this.handleStopPanning,e),handleDisableAnimation.call(this)},t.prototype.componentDidUpdate=function(e,t){var n=this.state,a=n.wrapperComponent,o=n.contentComponent,s=this.props.dynamicValues;if(!t.contentComponent&&o&&(this.stateProvider.contentComponent=o),!t.wrapperComponent&&a&&a!==void 0){this.stateProvider.wrapperComponent=a,this.windowToWrapperScaleX=getWindowScaleX(a),this.windowToWrapperScaleY=getWindowScaleY(a);var l=makePassiveEventOption(!1);a.addEventListener(`wheel`,this.handleWheel,l),a.addEventListener(`dblclick`,this.handleDbClick,l),a.addEventListener(`touchstart`,this.handleTouchStart,l),a.addEventListener(`touchmove`,this.handleTouch,l),a.addEventListener(`touchend`,this.handleTouchStop,l)}(a&&o||e.dynamicValues!==s)&&(this.maxBounds=handleCalculateBounds.call(this,this.stateProvider.scale,this.stateProvider.options.limitToWrapper)),e.dynamicValues&&e.dynamicValues!==s&&(this.animation=null,this.stateProvider=__assign$1(__assign$1({},this.stateProvider),mergeProps(this.stateProvider,s)),this.applyTransformation(null,null,null))},t.prototype.render=function(){var e=this.state,t=e.wrapperComponent,n=e.contentComponent,a={loaded:!!(t&&n),state:this.getCallbackProps(),dispatch:{setScale:this.setScale,setPositionX:this.setPositionX,setPositionY:this.setPositionY,zoomIn:this.zoomIn,zoomOut:this.zoomOut,setTransform:this.setTransform,resetTransform:this.resetTransform,setDefaultState:this.setDefaultState},nodes:{setWrapperComponent:this.setWrapperComponent,setContentComponent:this.setContentComponent}},o=this.props.children,s=typeof o==`function`?o(__assign$1(__assign$1({},a.state),a.dispatch)):o;return import_react$24.createElement(Context.Provider,{value:a},s)},t}(import_react$24.Component),TransformWrapper=function(e){var t=e.children,n=e.defaultPositionX,a=e.defaultPositionY,o=e.defaultScale,s=e.onWheelStart,l=e.onWheel,u=e.onWheelStop,d=e.onPanningStart,f=e.onPanning,m=e.onPanningStop,h=e.onPinchingStart,v=e.onPinching,y=e.onPinchingStop,b=e.onZoomChange,x=__rest$1(e,[`children`,`defaultPositionX`,`defaultPositionY`,`defaultScale`,`onWheelStart`,`onWheel`,`onWheelStop`,`onPanningStart`,`onPanning`,`onPanningStop`,`onPinchingStart`,`onPinching`,`onPinchingStop`,`onZoomChange`]),S=__assign$1({},x);return S.options&&S.options.limitToWrapper&&(S.options.limitToBounds=!0),import_react$24.createElement(StateProvider,{defaultValues:deleteUndefinedProps({positionX:n,positionY:a,scale:o}),dynamicValues:deleteUndefinedProps(getValidPropsFromObject(S)),onWheelStart:s,onWheel:l,onWheelStop:u,onPanningStart:d,onPanning:f,onPanningStop:m,onPinchingStart:h,onPinching:v,onPinchingStop:y,onZoomChange:b},t)};function styleInject(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>`u`)){var a=document.head||document.getElementsByTagName(`head`)[0],o=document.createElement(`style`);o.type=`text/css`,n===`top`&&a.firstChild?a.insertBefore(o,a.firstChild):a.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var css=`.TransformComponent-module_container__3NwNd {
729
+ `,circularDashKeyframe)),CircularProgress=import_react$24.forwardRef(function(e,t){let n=useDefaultProps({props:e,name:`MuiCircularProgress`}),{className:a,color:o=`primary`,disableShrink:s=!1,size:l=40,style:u,thickness:d=3.6,value:f=0,variant:m=`indeterminate`}=n,h=_objectWithoutPropertiesLoose$3(n,_excluded$2),v=_extends$3({},n,{color:o,disableShrink:s,size:l,thickness:d,value:f,variant:m}),y=useUtilityClasses$2(v),b={},x={},S={};if(m===`determinate`){let e=2*Math.PI*((SIZE-d)/2);b.strokeDasharray=e.toFixed(3),S[`aria-valuenow`]=Math.round(f),b.strokeDashoffset=`${((100-f)/100*e).toFixed(3)}px`,x.transform=`rotate(-90deg)`}return(0,import_jsx_runtime.jsx)(CircularProgressRoot,_extends$3({className:clsx$1(y.root,a),style:_extends$3({width:l,height:l},x,u),ownerState:v,ref:t,role:`progressbar`},S,h,{children:(0,import_jsx_runtime.jsx)(CircularProgressSVG,{className:y.svg,ownerState:v,viewBox:`${SIZE/2} ${SIZE/2} ${SIZE} ${SIZE}`,children:(0,import_jsx_runtime.jsx)(CircularProgressCircle,{className:y.circle,style:b,ownerState:v,cx:SIZE,cy:SIZE,r:(SIZE-d)/2,fill:`none`,strokeWidth:d})})}))});function DayAndProgressContainer({dayCount:e,experience:t,itemsSold:n}){let a=levelAchieved(t),o=scaleNumber(t,experienceNeededForLevel(a),experienceNeededForLevel(a+1),0,100),s=experienceNeededForLevel(a+1)-t,l=a+1;return(0,import_jsx_runtime.jsxs)(`h2`,{className:`day-and-progress-container`,children:[(0,import_jsx_runtime.jsxs)(`span`,{children:[`Day `,integerString(e),`, level:`]}),(0,import_jsx_runtime.jsx)(Tooltip,{arrow:!0,placement:`top`,title:EXPERIENCE_GAUGE_TOOLTIP_LABEL`${s}${l}`,children:(0,import_jsx_runtime.jsxs)(Box,{children:[(0,import_jsx_runtime.jsx)(CircularProgress,{value:o,variant:`determinate`}),(0,import_jsx_runtime.jsx)(`span`,{className:`current-level`,children:integerString(a)})]})})]})}DayAndProgressContainer.propTypes={dayCount:import_prop_types$1.number.isRequired,experience:import_prop_types$1.number.isRequired,itemsSold:import_prop_types$1.object.isRequired};function Consumer$15(e){return(0,import_jsx_runtime.jsx)(FarmhandContext.Consumer,{children:({gameState:t,handlers:n})=>(0,import_jsx_runtime.jsx)(DayAndProgressContainer,{...t,...n,...e})})}var FarmNameDisplay=({farmName:e,handleFarmNameUpdate:t})=>{let[n,a]=(0,import_react$24.useState)(e);return(0,import_react$24.useEffect)(()=>{a(e)},[e,a]),(0,import_jsx_runtime.jsxs)(`h2`,{className:`farm-name`,children:[(0,import_jsx_runtime.jsx)(TextField,{variant:`standard`,inputProps:{maxLength:12},onChange:({target:{value:e}})=>{a(e)},onBlur:({target:{value:e}})=>{t(e)},placeholder:`Farm Name`,value:n}),` `,`Farm`]})},OnlineControls=({activePlayers:e,handleActivePlayerButtonClick:t,handleChatRoomOpenStateChange:n,handleOnlineToggleChange:a,handleRoomChange:o,isChatAvailable:s,isOnline:l,room:u})=>{let[d,f]=(0,import_react$24.useState)(u);(0,import_react$24.useEffect)(()=>{f(u)},[u,f]);let m=()=>{n(!0)},h=()=>{o(d)},v=e=>{h(),a(e)};return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(FormControl,{variant:`standard`,className:`online-control-container`,component:`fieldset`,children:[(0,import_jsx_runtime.jsx)(FormGroup,{className:`toggle-container`,children:(0,import_jsx_runtime.jsx)(FormControlLabel,{control:(0,import_jsx_runtime.jsx)(Switch,{color:`primary`,checked:l,onChange:(e,t)=>{v(t)},name:`play-online`}),label:`Play online`})}),(0,import_jsx_runtime.jsx)(TextField,{className:`room-name`,inputProps:{maxLength:25},label:`Room name`,onChange:({target:{value:e}})=>{f(e)},onKeyUp:({key:e})=>{e===`Enter`&&h()},value:d,variant:`outlined`})]}),e&&(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(Button,{color:`primary`,onClick:t,variant:`contained`,children:[`Connected players: `,integerString(e)]}),s?(0,import_jsx_runtime.jsx)(Button,{variant:`contained`,color:`primary`,onClick:m,children:`Open chat`}):(0,import_jsx_runtime.jsxs)(Typography,{className:`chat-placeholder`,children:[`Chat is available for online rooms other than "`,`global`,`"`]})]})]})},{FARMERS_LOG,PRICE_EVENTS,STATS,ACHIEVEMENTS,ACCOUNTING,SETTINGS,ONLINE_PEERS,KEYBINDINGS}=dialogView,dialogTriggerTextMap={[FARMERS_LOG]:`Open Farmer's Log (l)`,[PRICE_EVENTS]:`See Price Events (e)`,[STATS]:`View your stats (s)`,[ACHIEVEMENTS]:`View Achievements (a)`,[ACCOUNTING]:`View Bank Account (b)`,[SETTINGS]:`View Settings (comma)`},dialogTitleMap={[FARMERS_LOG]:`Farmer's Log`,[PRICE_EVENTS]:`Price Events`,[STATS]:`Farm Stats`,[ACHIEVEMENTS]:`Achievements`,[ACCOUNTING]:`Bank Account`,[SETTINGS]:`Settings`,[ONLINE_PEERS]:`Active Players`,[KEYBINDINGS]:`Keyboard Shortcuts`},dialogContentMap={[FARMERS_LOG]:(0,import_jsx_runtime.jsx)(Consumer$20,{}),[PRICE_EVENTS]:(0,import_jsx_runtime.jsx)(Consumer$18,{}),[STATS]:(0,import_jsx_runtime.jsx)(Consumer$16,{}),[ACHIEVEMENTS]:(0,import_jsx_runtime.jsx)(Consumer$21,{}),[ACCOUNTING]:(0,import_jsx_runtime.jsx)(Consumer$23,{}),[SETTINGS]:(0,import_jsx_runtime.jsx)(Consumer$17,{}),[ONLINE_PEERS]:(0,import_jsx_runtime.jsx)(Consumer$19,{}),[KEYBINDINGS]:(0,import_jsx_runtime.jsx)(KeybindingsView,{})},Navigation=({activePlayers:e,blockInput:t,currentDialogView:n,farmName:a,handleActivePlayerButtonClick:o,handleChatRoomOpenStateChange:s,handleClickDialogViewButton:l,handleCloseDialogView:u,handleDialogViewExited:d,handleFarmNameUpdate:f,handleOnlineToggleChange:m,handleRoomChange:h,handleViewChange:v,inventory:y,inventoryLimit:b,isChatAvailable:x,isDialogViewOpen:S,isOnline:C,room:T,stageFocus:E,viewList:D,currentDialogViewLowerCase:O=(n||``).toLowerCase(),modalTitleId:k=`${O}-modal-title`,modalContentId:j=`${O}-modal-content`})=>(0,import_jsx_runtime.jsxs)(Header,{className:`Navigation`,sx:{flexDirection:`column`,flexShrink:0,display:`flex`,"& .version":{fontFamily:`"Francois One", sans-serif`,textAlign:`center`},"& .farm-name":{lineHeight:`1.3em`,margin:`0.25em 0`,"& .MuiInput-root":{background:`none`,margin:0,"& input":{fontFamily:`"Francois One"`,paddingLeft:`0.5em`,paddingRight:`0.5em`,textAlign:`center`}}},"& .online-control-container":{alignItems:`center`,display:`flex`,flexDirection:`row`,margin:`1em 0`,"& .toggle-container":{minWidth:`155px`}},"& .button-array":{marginLeft:`3em`,marginRight:`3em`,[`@media (max-width: ${breakpoints.smallPhone}px)`]:{marginLeft:`2em`,marginRight:`2em`}},"& .current-level":{alignItems:`center`,bottom:0,display:`flex`,justifyContent:`center`,left:0,position:`absolute`,right:0,top:0,userSelect:`none`},"& h1":{fontSize:`3em`,fontWeight:`bold`,[`@media (max-width: ${breakpoints.smallPhone}px)`]:{fontSize:`2.5em`}},"& button":{fontSize:`1.3em`,margin:`0.3em`,minWidth:`56px`},"& h1, & h2, & h3":{textAlign:`center`},"& .day-and-progress-container":{alignItems:`center`,display:`flex`,fontSize:`1.5em`,margin:`0.5em auto`,"& .MuiBox-root":{display:`inline-flex`,marginLeft:`0.5em`,position:`relative`}},"& .inventory-info":{fontSize:`1em`},"& .MuiSelect-select":{padding:`1em`},"& .chat-placeholder":{fontSize:`0.75em`,padding:`0.5em 0`,textAlign:`center`}},children:[(0,import_jsx_runtime.jsx)(`h1`,{children:`Farmhand`}),(0,import_jsx_runtime.jsxs)(`p`,{className:`version`,children:[`v`,`1.23.1`]}),(0,import_jsx_runtime.jsx)(FarmNameDisplay,{farmName:a,handleFarmNameUpdate:f}),(0,import_jsx_runtime.jsx)(Consumer$15,{}),(0,import_jsx_runtime.jsx)(OnlineControls,{activePlayers:e,handleActivePlayerButtonClick:o,handleChatRoomOpenStateChange:s,handleOnlineToggleChange:m,handleRoomChange:h,isChatAvailable:x,isOnline:C,room:T}),b>-1&&(0,import_jsx_runtime.jsxs)(H3,{className:(0,import_classnames.default)(`inventory-info`,{"is-inventory-full":!doesInventorySpaceRemain({inventory:y,inventoryLimit:b})}),sx:{color:doesInventorySpaceRemain({inventory:y,inventoryLimit:b})?void 0:colors.error},children:[`Inventory: `,integerString(inventorySpaceConsumed(y)),` /`,` `,integerString(b)]}),(0,import_jsx_runtime.jsx)(Select,{variant:`standard`,className:`view-select`,onChange:v,value:E,children:D.map((e,t)=>(0,import_jsx_runtime.jsxs)(MenuItem,{key:e,value:e,children:[t+1,`: `,STAGE_TITLE_MAP[e]]}))}),(0,import_jsx_runtime.jsx)(`div`,{className:`button-array`,children:[{dialogView:FARMERS_LOG,Icon:import_Book.default},{dialogView:PRICE_EVENTS,Icon:import_FlashOn.default},{dialogView:STATS,Icon:import_Assessment.default},{dialogView:ACHIEVEMENTS,Icon:import_Beenhere.default},{dialogView:ACCOUNTING,Icon:import_AccountBalance.default},{dialogView:SETTINGS,Icon:import_Settings.default}].map(({dialogView:e,Icon:t})=>(0,import_jsx_runtime.jsx)(Tooltip,{arrow:!0,key:e,placement:`top`,title:dialogTriggerTextMap[e],children:(0,import_jsx_runtime.jsx)(Fab,{"aria-label":dialogTriggerTextMap[e],color:`primary`,onClick:()=>l(e),children:(0,import_jsx_runtime.jsx)(t,{})})}))}),(0,import_jsx_runtime.jsxs)(Dialog,{className:(0,import_classnames.default)(`Farmhand`,{"block-input":t}),fullWidth:!0,maxWidth:`xs`,onClose:u,open:S,TransitionProps:{onExited:d},"aria-describedby":k,"aria-labelledby":j,children:[(0,import_jsx_runtime.jsx)(DialogTitle,{id:k,children:n?dialogTitleMap[n]:``}),(0,import_jsx_runtime.jsx)(DialogContent,{id:j,children:n?dialogContentMap[n]:null}),(0,import_jsx_runtime.jsx)(DialogActions,{children:(0,import_jsx_runtime.jsx)(Button,{onClick:u,color:`primary`,autoFocus:!0,children:`Close`})})]})]});Navigation.propTypes={activePlayers:import_prop_types$1.number,blockInput:import_prop_types$1.bool.isRequired,farmName:import_prop_types$1.string.isRequired,handleClickDialogViewButton:import_prop_types$1.func.isRequired,handleChatRoomOpenStateChange:import_prop_types$1.func.isRequired,handleActivePlayerButtonClick:import_prop_types$1.func.isRequired,handleCloseDialogView:import_prop_types$1.func.isRequired,handleDialogViewExited:import_prop_types$1.func.isRequired,handleFarmNameUpdate:import_prop_types$1.func.isRequired,handleOnlineToggleChange:import_prop_types$1.func.isRequired,handleRoomChange:import_prop_types$1.func.isRequired,handleViewChange:import_prop_types$1.func.isRequired,inventory:import_prop_types$1.array.isRequired,inventoryLimit:import_prop_types$1.number.isRequired,isChatAvailable:import_prop_types$1.bool.isRequired,isDialogViewOpen:import_prop_types$1.bool.isRequired,isOnline:import_prop_types$1.bool.isRequired,stageFocus:import_prop_types$1.string.isRequired,viewList:import_prop_types$1.array.isRequired};function Consumer$14(e){return(0,import_jsx_runtime.jsx)(FarmhandContext.Consumer,{children:({gameState:t,handlers:n})=>(0,import_jsx_runtime.jsx)(Navigation,{...t,...n,...e})})}var getNotificationKey=({message:e,severity:t})=>`${t}:${e}`,snackbarProviderContentCallback=(e,{message:t,onClick:n,severity:a})=>(0,import_jsx_runtime.jsx)(Alert,{elevation:3,key:e,onClick:n,severity:a,style:{cursor:n?`pointer`:`default`},children:(0,import_jsx_runtime.jsx)(import_react_markdown.default,{source:t})}),NotificationSystem=({enqueueSnackbar:e,latestNotification:t})=>((0,import_react$24.useEffect)(()=>{t&&e(t,{key:getNotificationKey(t),autoHideDuration:NOTIFICATION_DURATION,preventDuplicate:!0})},[e,t]),null);NotificationSystem.propTypes={latestNotification:(0,import_prop_types$1.shape)({message:import_prop_types$1.string.isRequired,onClick:import_prop_types$1.func,severity:import_prop_types$1.string.isRequired})};var NotificationSystem_default=withSnackbar(function(e){return(0,import_jsx_runtime.jsx)(FarmhandContext.Consumer,{children:({gameState:t,handlers:n})=>(0,import_jsx_runtime.jsx)(NotificationSystem,{...t,...n,...e})})}),require_ZoomIn=__commonJSMin((e=>{var t=require_interopRequireDefault();Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(require_createSvgIcon()),a=require_jsx_runtime();e.default=(0,n.default)([(0,a.jsx)(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14`},`0`),(0,a.jsx)(`path`,{d:`M12 10h-2v2H9v-2H7V9h2V7h1v2h2z`},`1`)],`ZoomIn`)})),require_ZoomOut=__commonJSMin((e=>{var t=require_interopRequireDefault();Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(require_createSvgIcon()),a=require_jsx_runtime();e.default=(0,n.default)((0,a.jsx)(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z`}),`ZoomOut`)}));function areArraysEqual(e,t,n=(e,t)=>e===t){return e.length===t.length&&e.every((e,a)=>n(e,t[a]))}init_extends(),init_esm(),init_extractEventHandlers();var INTENTIONAL_DRAG_COUNT_THRESHOLD=2;function asc(e,t){return e-t}function findClosest(e,t){var n;let{index:a}=e.reduce((e,n,a)=>{let o=Math.abs(t-n);return e===null||o<e.distance||o===e.distance?{distance:o,index:a}:e},null)??{};return a}function trackFinger(e,t){if(t.current!==void 0&&e.changedTouches){let n=e;for(let e=0;e<n.changedTouches.length;e+=1){let a=n.changedTouches[e];if(a.identifier===t.current)return{x:a.clientX,y:a.clientY}}return!1}return{x:e.clientX,y:e.clientY}}function valueToPercent(e,t,n){return(e-t)*100/(n-t)}function percentToValue(e,t,n){return(n-t)*e+t}function getDecimalPrecision(e){if(Math.abs(e)<1){let t=e.toExponential().split(`e-`),n=t[0].split(`.`)[1];return(n?n.length:0)+parseInt(t[1],10)}let t=e.toString().split(`.`)[1];return t?t.length:0}function roundValueToStep(e,t,n){let a=Math.round((e-n)/t)*t+n;return Number(a.toFixed(getDecimalPrecision(t)))}function setValueIndex({values:e,newValue:t,index:n}){let a=e.slice();return a[n]=t,a.sort(asc)}function focusThumb({sliderRef:e,activeIndex:t,setActive:n}){var a,o;let s=ownerDocument(e.current);if(!((a=e.current)!=null&&a.contains(s.activeElement))||Number(s==null||(o=s.activeElement)==null?void 0:o.getAttribute(`data-index`))!==t){var l;(l=e.current)==null||l.querySelector(`[type="range"][data-index="${t}"]`).focus()}n&&n(t)}function areValuesEqual(e,t){return typeof e==`number`&&typeof t==`number`?e===t:typeof e==`object`&&typeof t==`object`&&areArraysEqual(e,t)}var axisProps={horizontal:{offset:e=>({left:`${e}%`}),leap:e=>({width:`${e}%`})},"horizontal-reverse":{offset:e=>({right:`${e}%`}),leap:e=>({width:`${e}%`})},vertical:{offset:e=>({bottom:`${e}%`}),leap:e=>({height:`${e}%`})}},Identity$1=e=>e,cachedSupportsTouchActionNone;function doesSupportTouchActionNone(){return cachedSupportsTouchActionNone===void 0&&(cachedSupportsTouchActionNone=typeof CSS<`u`&&typeof CSS.supports==`function`?CSS.supports(`touch-action`,`none`):!0),cachedSupportsTouchActionNone}function useSlider(e){let{"aria-labelledby":t,defaultValue:n,disabled:a=!1,disableSwap:o=!1,isRtl:s=!1,marks:l=!1,max:u=100,min:d=0,name:f,onChange:m,onChangeCommitted:h,orientation:v=`horizontal`,rootRef:y,scale:b=Identity$1,step:x=1,shiftStep:S=10,tabIndex:C,value:T}=e,E=import_react$24.useRef(void 0),[D,O]=import_react$24.useState(-1),[k,j]=import_react$24.useState(-1),[M,N]=import_react$24.useState(!1),F=import_react$24.useRef(0),[I,L]=useControlled({controlled:T,default:n??d,name:`Slider`}),R=m&&((e,t,n)=>{let a=e.nativeEvent||e,o=new a.constructor(a.type,a);Object.defineProperty(o,"target",{writable:!0,value:{value:t,name:f}}),m(o,t,n)}),z=Array.isArray(I),B=z?I.slice().sort(asc):[I];B=B.map(e=>e==null?d:clamp$1(e,d,u));let V=l===!0&&x!==null?[...Array(Math.floor((u-d)/x)+1)].map((e,t)=>({value:d+x*t})):l||[],H=V.map(e=>e.value),{isFocusVisibleRef:U,onBlur:W,onFocus:G,ref:ee}=useIsFocusVisible(),[te,K]=import_react$24.useState(-1),q=import_react$24.useRef(null),ne=useForkRef(y,useForkRef(ee,q)),re=e=>t=>{var n;let a=Number(t.currentTarget.getAttribute(`data-index`));G(t),U.current===!0&&K(a),j(a),e==null||(n=e.onFocus)==null||n.call(e,t)},J=e=>t=>{var n;W(t),U.current===!1&&K(-1),j(-1),e==null||(n=e.onBlur)==null||n.call(e,t)},ie=(e,t)=>{let n=Number(e.currentTarget.getAttribute(`data-index`)),a=B[n],s=H.indexOf(a),l=t;if(V&&x==null){let e=H[H.length-1];l=l>e?e:l<H[0]?H[0]:l<a?H[s-1]:H[s+1]}if(l=clamp$1(l,d,u),z){o&&(l=clamp$1(l,B[n-1]||-1/0,B[n+1]||1/0));let e=l;l=setValueIndex({values:B,newValue:l,index:n});let t=n;o||(t=l.indexOf(e)),focusThumb({sliderRef:q,activeIndex:t})}L(l),K(n),R&&!areValuesEqual(l,I)&&R(e,l,n),h&&h(e,l)},ae=e=>t=>{var n;if(x!==null){let e=Number(t.currentTarget.getAttribute(`data-index`)),n=B[e],a=null;(t.key===`ArrowLeft`||t.key===`ArrowDown`)&&t.shiftKey||t.key===`PageDown`?a=Math.max(n-S,d):((t.key===`ArrowRight`||t.key===`ArrowUp`)&&t.shiftKey||t.key===`PageUp`)&&(a=Math.min(n+S,u)),a!==null&&(ie(t,a),t.preventDefault())}e==null||(n=e.onKeyDown)==null||n.call(e,t)};useEnhancedEffect$1(()=>{if(a&&q.current.contains(document.activeElement)){var e;(e=document.activeElement)==null||e.blur()}},[a]),a&&D!==-1&&O(-1),a&&te!==-1&&K(-1);let oe=e=>t=>{var n;(n=e.onChange)==null||n.call(e,t),ie(t,t.target.valueAsNumber)},se=import_react$24.useRef(void 0),ce=v;s&&v===`horizontal`&&(ce+=`-reverse`);let Y=({finger:e,move:t=!1})=>{let{current:n}=q,{width:a,height:s,bottom:l,left:f}=n.getBoundingClientRect(),m;m=ce.indexOf(`vertical`)===0?(l-e.y)/s:(e.x-f)/a,ce.indexOf(`-reverse`)!==-1&&(m=1-m);let h;if(h=percentToValue(m,d,u),x)h=roundValueToStep(h,x,d);else{let e=findClosest(H,h);h=H[e]}h=clamp$1(h,d,u);let v=0;if(z){v=t?se.current:findClosest(B,h),o&&(h=clamp$1(h,B[v-1]||-1/0,B[v+1]||1/0));let e=h;h=setValueIndex({values:B,newValue:h,index:v}),o&&t||(v=h.indexOf(e),se.current=v)}return{newValue:h,activeIndex:v}},le=useEventCallback$1(e=>{let t=trackFinger(e,E);if(!t)return;if(F.current+=1,e.type===`mousemove`&&e.buttons===0){ue(e);return}let{newValue:n,activeIndex:a}=Y({finger:t,move:!0});focusThumb({sliderRef:q,activeIndex:a,setActive:O}),L(n),!M&&F.current>INTENTIONAL_DRAG_COUNT_THRESHOLD&&N(!0),R&&!areValuesEqual(n,I)&&R(e,n,a)}),ue=useEventCallback$1(e=>{let t=trackFinger(e,E);if(N(!1),!t)return;let{newValue:n}=Y({finger:t,move:!0});O(-1),e.type===`touchend`&&j(-1),h&&h(e,n),E.current=void 0,X()}),de=useEventCallback$1(e=>{if(a)return;doesSupportTouchActionNone()||e.preventDefault();let t=e.changedTouches[0];t!=null&&(E.current=t.identifier);let n=trackFinger(e,E);if(n!==!1){let{newValue:t,activeIndex:a}=Y({finger:n});focusThumb({sliderRef:q,activeIndex:a,setActive:O}),L(t),R&&!areValuesEqual(t,I)&&R(e,t,a)}F.current=0;let o=ownerDocument(q.current);o.addEventListener(`touchmove`,le,{passive:!0}),o.addEventListener(`touchend`,ue,{passive:!0})}),X=import_react$24.useCallback(()=>{let e=ownerDocument(q.current);e.removeEventListener(`mousemove`,le),e.removeEventListener(`mouseup`,ue),e.removeEventListener(`touchmove`,le),e.removeEventListener(`touchend`,ue)},[ue,le]);import_react$24.useEffect(()=>{let{current:e}=q;return e.addEventListener(`touchstart`,de,{passive:doesSupportTouchActionNone()}),()=>{e.removeEventListener(`touchstart`,de),X()}},[X,de]),import_react$24.useEffect(()=>{a&&X()},[a,X]);let fe=e=>t=>{var n;if((n=e.onMouseDown)==null||n.call(e,t),a||t.defaultPrevented||t.button!==0)return;t.preventDefault();let o=trackFinger(t,E);if(o!==!1){let{newValue:e,activeIndex:n}=Y({finger:o});focusThumb({sliderRef:q,activeIndex:n,setActive:O}),L(e),R&&!areValuesEqual(e,I)&&R(t,e,n)}F.current=0;let s=ownerDocument(q.current);s.addEventListener(`mousemove`,le,{passive:!0}),s.addEventListener(`mouseup`,ue)},pe=valueToPercent(z?B[0]:d,d,u),me=valueToPercent(B[B.length-1],d,u)-pe,he=(e={})=>{let t=extractEventHandlers(e),n=_extends$3({},t,{onMouseDown:fe(t||{})});return _extends$3({},e,{ref:ne},n)},ge=e=>t=>{var n;(n=e.onMouseOver)==null||n.call(e,t);let a=Number(t.currentTarget.getAttribute(`data-index`));j(a)},Z=e=>t=>{var n;(n=e.onMouseLeave)==null||n.call(e,t),j(-1)};return{active:D,axis:ce,axisProps,dragging:M,focusedThumbIndex:te,getHiddenInputProps:(n={})=>{var o;let l=extractEventHandlers(n),m=_extends$3({},l,{onChange:oe(l||{}),onFocus:re(l||{}),onBlur:J(l||{}),onKeyDown:ae(l||{})});return _extends$3({tabIndex:C,"aria-labelledby":t,"aria-orientation":v,"aria-valuemax":b(u),"aria-valuemin":b(d),name:f,type:`range`,min:e.min,max:e.max,step:e.step===null&&e.marks?`any`:e.step??void 0,disabled:a},n,m,{style:_extends$3({},visuallyHidden,{direction:s?`rtl`:`ltr`,width:`100%`,height:`100%`})})},getRootProps:he,getThumbProps:(e={})=>{let t=extractEventHandlers(e);return _extends$3({},e,t,{onMouseOver:ge(t||{}),onMouseLeave:Z(t||{})})},marks:V,open:k,range:z,rootRef:ne,trackLeap:me,trackOffset:pe,values:B,getThumbStyle:e=>({pointerEvents:D!==-1&&D!==e?`none`:void 0})}}init_isHostComponent();var shouldSpreadAdditionalProps=e=>!e||!isHostComponent(e);init_generateUtilityClasses(),init_generateUtilityClass();function getSliderUtilityClass(e){return generateUtilityClass(`MuiSlider`,e)}var sliderClasses=generateUtilityClasses(`MuiSlider`,`root.active.colorPrimary.colorSecondary.colorError.colorInfo.colorSuccess.colorWarning.disabled.dragging.focusVisible.mark.markActive.marked.markLabel.markLabelActive.rail.sizeSmall.thumb.thumbColorPrimary.thumbColorSecondary.thumbColorError.thumbColorSuccess.thumbColorInfo.thumbColorWarning.track.trackInverted.trackFalse.thumbSizeSmall.valueLabel.valueLabelOpen.valueLabelCircle.valueLabelLabel.vertical`.split(`.`));init_clsx();var useValueLabelClasses=e=>{let{open:t}=e;return{offset:clsx$1(t&&sliderClasses.valueLabelOpen),circle:sliderClasses.valueLabelCircle,label:sliderClasses.valueLabelLabel}};function SliderValueLabel$1(e){let{children:t,className:n,value:a}=e,o=useValueLabelClasses(e);return t?import_react$24.cloneElement(t,{className:clsx$1(t.props.className)},(0,import_jsx_runtime.jsxs)(import_react$24.Fragment,{children:[t.props.children,(0,import_jsx_runtime.jsx)(`span`,{className:clsx$1(o.offset,n),"aria-hidden":!0,children:(0,import_jsx_runtime.jsx)(`span`,{className:o.circle,children:(0,import_jsx_runtime.jsx)(`span`,{className:o.label,children:a})})})]})):null}init_objectWithoutPropertiesLoose(),init_extends(),init_clsx(),init_composeClasses(),init_useSlotProps(),init_isHostComponent(),init_styled(),init_DefaultPropsProvider(),init_slotShouldForwardProp(),init_capitalize();var _excluded$1=`aria-label.aria-valuetext.aria-labelledby.component.components.componentsProps.color.classes.className.disableSwap.disabled.getAriaLabel.getAriaValueText.marks.max.min.name.onChange.onChangeCommitted.orientation.shiftStep.size.step.scale.slotProps.slots.tabIndex.track.value.valueLabelDisplay.valueLabelFormat`.split(`.`);function Identity(e){return e}var SliderRoot=styled$1(`span`,{name:`MuiSlider`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,t[`color${capitalize_default(n.color)}`],n.size!==`medium`&&t[`size${capitalize_default(n.size)}`],n.marked&&t.marked,n.orientation===`vertical`&&t.vertical,n.track===`inverted`&&t.trackInverted,n.track===!1&&t.trackFalse]}})(({theme:e})=>{var t;return{borderRadius:12,boxSizing:`content-box`,display:`inline-block`,position:`relative`,cursor:`pointer`,touchAction:`none`,WebkitTapHighlightColor:`transparent`,"@media print":{colorAdjust:`exact`},[`&.${sliderClasses.disabled}`]:{pointerEvents:`none`,cursor:`default`,color:(e.vars||e).palette.grey[400]},[`&.${sliderClasses.dragging}`]:{[`& .${sliderClasses.thumb}, & .${sliderClasses.track}`]:{transition:`none`}},variants:[...Object.keys((e.vars??e).palette).filter(t=>{var n;return(e.vars??e).palette[t].main}).map(t=>({props:{color:t},style:{color:(e.vars||e).palette[t].main}})),{props:{orientation:`horizontal`},style:{height:4,width:`100%`,padding:`13px 0`,"@media (pointer: coarse)":{padding:`20px 0`}}},{props:{orientation:`horizontal`,size:`small`},style:{height:2}},{props:{orientation:`horizontal`,marked:!0},style:{marginBottom:20}},{props:{orientation:`vertical`},style:{height:`100%`,width:4,padding:`0 13px`,"@media (pointer: coarse)":{padding:`0 20px`}}},{props:{orientation:`vertical`,size:`small`},style:{width:2}},{props:{orientation:`vertical`,marked:!0},style:{marginRight:44}}]}}),SliderRail=styled$1(`span`,{name:`MuiSlider`,slot:`Rail`,overridesResolver:(e,t)=>t.rail})({display:`block`,position:`absolute`,borderRadius:`inherit`,backgroundColor:`currentColor`,opacity:.38,variants:[{props:{orientation:`horizontal`},style:{width:`100%`,height:`inherit`,top:`50%`,transform:`translateY(-50%)`}},{props:{orientation:`vertical`},style:{height:`100%`,width:`inherit`,left:`50%`,transform:`translateX(-50%)`}},{props:{track:`inverted`},style:{opacity:1}}]}),SliderTrack=styled$1(`span`,{name:`MuiSlider`,slot:`Track`,overridesResolver:(e,t)=>t.track})(({theme:e})=>{var t;return{display:`block`,position:`absolute`,borderRadius:`inherit`,border:`1px solid currentColor`,backgroundColor:`currentColor`,transition:e.transitions.create([`left`,`width`,`bottom`,`height`],{duration:e.transitions.duration.shortest}),variants:[{props:{size:`small`},style:{border:`none`}},{props:{orientation:`horizontal`},style:{height:`inherit`,top:`50%`,transform:`translateY(-50%)`}},{props:{orientation:`vertical`},style:{width:`inherit`,left:`50%`,transform:`translateX(-50%)`}},{props:{track:!1},style:{display:`none`}},...Object.keys((e.vars??e).palette).filter(t=>{var n;return(e.vars??e).palette[t].main}).map(t=>({props:{color:t,track:`inverted`},style:_extends$3({},e.vars?{backgroundColor:e.vars.palette.Slider[`${t}Track`],borderColor:e.vars.palette.Slider[`${t}Track`]}:_extends$3({backgroundColor:(0,import_colorManipulator.lighten)(e.palette[t].main,.62),borderColor:(0,import_colorManipulator.lighten)(e.palette[t].main,.62)},e.applyStyles(`dark`,{backgroundColor:(0,import_colorManipulator.darken)(e.palette[t].main,.5)}),e.applyStyles(`dark`,{borderColor:(0,import_colorManipulator.darken)(e.palette[t].main,.5)})))}))]}}),SliderThumb=styled$1(`span`,{name:`MuiSlider`,slot:`Thumb`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.thumb,t[`thumbColor${capitalize_default(n.color)}`],n.size!==`medium`&&t[`thumbSize${capitalize_default(n.size)}`]]}})(({theme:e})=>{var t;return{position:`absolute`,width:20,height:20,boxSizing:`border-box`,borderRadius:`50%`,outline:0,backgroundColor:`currentColor`,display:`flex`,alignItems:`center`,justifyContent:`center`,transition:e.transitions.create([`box-shadow`,`left`,`bottom`],{duration:e.transitions.duration.shortest}),"&::before":{position:`absolute`,content:`""`,borderRadius:`inherit`,width:`100%`,height:`100%`,boxShadow:(e.vars||e).shadows[2]},"&::after":{position:`absolute`,content:`""`,borderRadius:`50%`,width:42,height:42,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`},[`&.${sliderClasses.disabled}`]:{"&:hover":{boxShadow:`none`}},variants:[{props:{size:`small`},style:{width:12,height:12,"&::before":{boxShadow:`none`}}},{props:{orientation:`horizontal`},style:{top:`50%`,transform:`translate(-50%, -50%)`}},{props:{orientation:`vertical`},style:{left:`50%`,transform:`translate(-50%, 50%)`}},...Object.keys((e.vars??e).palette).filter(t=>{var n;return(e.vars??e).palette[t].main}).map(t=>({props:{color:t},style:{[`&:hover, &.${sliderClasses.focusVisible}`]:_extends$3({},e.vars?{boxShadow:`0px 0px 0px 8px rgba(${e.vars.palette[t].mainChannel} / 0.16)`}:{boxShadow:`0px 0px 0px 8px ${(0,import_colorManipulator.alpha)(e.palette[t].main,.16)}`},{"@media (hover: none)":{boxShadow:`none`}}),[`&.${sliderClasses.active}`]:_extends$3({},e.vars?{boxShadow:`0px 0px 0px 14px rgba(${e.vars.palette[t].mainChannel} / 0.16)`}:{boxShadow:`0px 0px 0px 14px ${(0,import_colorManipulator.alpha)(e.palette[t].main,.16)}`})}}))]}}),SliderValueLabel=styled$1(SliderValueLabel$1,{name:`MuiSlider`,slot:`ValueLabel`,overridesResolver:(e,t)=>t.valueLabel})(({theme:e})=>_extends$3({zIndex:1,whiteSpace:`nowrap`},e.typography.body2,{fontWeight:500,transition:e.transitions.create([`transform`],{duration:e.transitions.duration.shortest}),position:`absolute`,backgroundColor:(e.vars||e).palette.grey[600],borderRadius:2,color:(e.vars||e).palette.common.white,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0.25rem 0.75rem`,variants:[{props:{orientation:`horizontal`},style:{transform:`translateY(-100%) scale(0)`,top:`-10px`,transformOrigin:`bottom center`,"&::before":{position:`absolute`,content:`""`,width:8,height:8,transform:`translate(-50%, 50%) rotate(45deg)`,backgroundColor:`inherit`,bottom:0,left:`50%`},[`&.${sliderClasses.valueLabelOpen}`]:{transform:`translateY(-100%) scale(1)`}}},{props:{orientation:`vertical`},style:{transform:`translateY(-50%) scale(0)`,right:`30px`,top:`50%`,transformOrigin:`right center`,"&::before":{position:`absolute`,content:`""`,width:8,height:8,transform:`translate(-50%, -50%) rotate(45deg)`,backgroundColor:`inherit`,right:-8,top:`50%`},[`&.${sliderClasses.valueLabelOpen}`]:{transform:`translateY(-50%) scale(1)`}}},{props:{size:`small`},style:{fontSize:e.typography.pxToRem(12),padding:`0.25rem 0.5rem`}},{props:{orientation:`vertical`,size:`small`},style:{right:`20px`}}]})),SliderMark=styled$1(`span`,{name:`MuiSlider`,slot:`Mark`,shouldForwardProp:e=>slotShouldForwardProp(e)&&e!==`markActive`,overridesResolver:(e,t)=>{let{markActive:n}=e;return[t.mark,n&&t.markActive]}})(({theme:e})=>({position:`absolute`,width:2,height:2,borderRadius:1,backgroundColor:`currentColor`,variants:[{props:{orientation:`horizontal`},style:{top:`50%`,transform:`translate(-1px, -50%)`}},{props:{orientation:`vertical`},style:{left:`50%`,transform:`translate(-50%, 1px)`}},{props:{markActive:!0},style:{backgroundColor:(e.vars||e).palette.background.paper,opacity:.8}}]})),SliderMarkLabel=styled$1(`span`,{name:`MuiSlider`,slot:`MarkLabel`,shouldForwardProp:e=>slotShouldForwardProp(e)&&e!==`markLabelActive`,overridesResolver:(e,t)=>t.markLabel})(({theme:e})=>_extends$3({},e.typography.body2,{color:(e.vars||e).palette.text.secondary,position:`absolute`,whiteSpace:`nowrap`,variants:[{props:{orientation:`horizontal`},style:{top:30,transform:`translateX(-50%)`,"@media (pointer: coarse)":{top:40}}},{props:{orientation:`vertical`},style:{left:36,transform:`translateY(50%)`,"@media (pointer: coarse)":{left:44}}},{props:{markLabelActive:!0},style:{color:(e.vars||e).palette.text.primary}}]})),useUtilityClasses$1=e=>{let{disabled:t,dragging:n,marked:a,orientation:o,track:s,classes:l,color:u,size:d}=e;return composeClasses({root:[`root`,t&&`disabled`,n&&`dragging`,a&&`marked`,o===`vertical`&&`vertical`,s===`inverted`&&`trackInverted`,s===!1&&`trackFalse`,u&&`color${capitalize_default(u)}`,d&&`size${capitalize_default(d)}`],rail:[`rail`],track:[`track`],mark:[`mark`],markActive:[`markActive`],markLabel:[`markLabel`],markLabelActive:[`markLabelActive`],valueLabel:[`valueLabel`],thumb:[`thumb`,t&&`disabled`,d&&`thumbSize${capitalize_default(d)}`,u&&`thumbColor${capitalize_default(u)}`],active:[`active`],disabled:[`disabled`],focusVisible:[`focusVisible`]},getSliderUtilityClass,l)},Forward=({children:e})=>e,Slider=import_react$24.forwardRef(function(e,t){var n,a,o,s,l,u,d,f,m,h,v,y,b,x,S,C,T,E,D,O,k,j,M,N;let F=useDefaultProps({props:e,name:`MuiSlider`}),I=useRtl(),{"aria-label":L,"aria-valuetext":R,"aria-labelledby":z,component:B=`span`,components:V={},componentsProps:H={},color:U=`primary`,classes:W,className:G,disableSwap:ee=!1,disabled:te=!1,getAriaLabel:K,getAriaValueText:q,marks:ne=!1,max:re=100,min:J=0,orientation:ie=`horizontal`,shiftStep:ae=10,size:oe=`medium`,step:se=1,scale:ce=Identity,slotProps:Y,slots:le,track:ue=`normal`,valueLabelDisplay:de=`off`,valueLabelFormat:X=Identity}=F,fe=_objectWithoutPropertiesLoose$3(F,_excluded$1),pe=_extends$3({},F,{isRtl:I,max:re,min:J,classes:W,disabled:te,disableSwap:ee,orientation:ie,marks:ne,color:U,size:oe,step:se,shiftStep:ae,scale:ce,track:ue,valueLabelDisplay:de,valueLabelFormat:X}),{axisProps:me,getRootProps:he,getHiddenInputProps:ge,getThumbProps:Z,open:_e,active:Q,axis:$,focusedThumbIndex:ve,range:ye,dragging:be,marks:xe,values:Se,trackOffset:Ce,trackLeap:we,getThumbStyle:Te}=useSlider(_extends$3({},pe,{rootRef:t}));pe.marked=xe.length>0&&xe.some(e=>e.label),pe.dragging=be,pe.focusedThumbIndex=ve;let Ee=useUtilityClasses$1(pe),De=le?.root??V.Root??SliderRoot,Oe=le?.rail??V.Rail??SliderRail,ke=le?.track??V.Track??SliderTrack,Ae=le?.thumb??V.Thumb??SliderThumb,je=le?.valueLabel??V.ValueLabel??SliderValueLabel,Me=le?.mark??V.Mark??SliderMark,Ne=le?.markLabel??V.MarkLabel??SliderMarkLabel,Pe=le?.input??V.Input??`input`,Fe=Y?.root??H.root,Ie=Y?.rail??H.rail,Le=Y?.track??H.track,Re=Y?.thumb??H.thumb,ze=Y?.valueLabel??H.valueLabel,Be=Y?.mark??H.mark,Ve=Y?.markLabel??H.markLabel,He=Y?.input??H.input,Ue=useSlotProps({elementType:De,getSlotProps:he,externalSlotProps:Fe,externalForwardedProps:fe,additionalProps:_extends$3({},shouldSpreadAdditionalProps(De)&&{as:B}),ownerState:_extends$3({},pe,Fe?.ownerState),className:[Ee.root,G]}),We=useSlotProps({elementType:Oe,externalSlotProps:Ie,ownerState:pe,className:Ee.rail}),Ge=useSlotProps({elementType:ke,externalSlotProps:Le,additionalProps:{style:_extends$3({},me[$].offset(Ce),me[$].leap(we))},ownerState:_extends$3({},pe,Le?.ownerState),className:Ee.track}),Ke=useSlotProps({elementType:Ae,getSlotProps:Z,externalSlotProps:Re,ownerState:_extends$3({},pe,Re?.ownerState),className:Ee.thumb}),qe=useSlotProps({elementType:je,externalSlotProps:ze,ownerState:_extends$3({},pe,ze?.ownerState),className:Ee.valueLabel}),Je=useSlotProps({elementType:Me,externalSlotProps:Be,ownerState:pe,className:Ee.mark}),Ye=useSlotProps({elementType:Ne,externalSlotProps:Ve,ownerState:pe,className:Ee.markLabel}),Xe=useSlotProps({elementType:Pe,getSlotProps:ge,externalSlotProps:He,ownerState:pe});return(0,import_jsx_runtime.jsxs)(De,_extends$3({},Ue,{children:[(0,import_jsx_runtime.jsx)(Oe,_extends$3({},We)),(0,import_jsx_runtime.jsx)(ke,_extends$3({},Ge)),xe.filter(e=>e.value>=J&&e.value<=re).map((e,t)=>{let n=valueToPercent(e.value,J,re),a=me[$].offset(n),o;return o=ue===!1?Se.indexOf(e.value)!==-1:ue===`normal`&&(ye?e.value>=Se[0]&&e.value<=Se[Se.length-1]:e.value<=Se[0])||ue===`inverted`&&(ye?e.value<=Se[0]||e.value>=Se[Se.length-1]:e.value>=Se[0]),(0,import_jsx_runtime.jsxs)(import_react$24.Fragment,{children:[(0,import_jsx_runtime.jsx)(Me,_extends$3({"data-index":t},Je,!isHostComponent(Me)&&{markActive:o},{style:_extends$3({},a,Je.style),className:clsx$1(Je.className,o&&Ee.markActive)})),e.label==null?null:(0,import_jsx_runtime.jsx)(Ne,_extends$3({"aria-hidden":!0,"data-index":t},Ye,!isHostComponent(Ne)&&{markLabelActive:o},{style:_extends$3({},a,Ye.style),className:clsx$1(Ee.markLabel,Ye.className,o&&Ee.markLabelActive),children:e.label}))]},t)}),Se.map((e,t)=>{let n=valueToPercent(e,J,re),a=me[$].offset(n),o=de===`off`?Forward:je;return(0,import_jsx_runtime.jsx)(o,_extends$3({},!isHostComponent(o)&&{valueLabelFormat:X,valueLabelDisplay:de,value:typeof X==`function`?X(ce(e),t):X,index:t,open:_e===t||Q===t||de===`on`,disabled:te},qe,{children:(0,import_jsx_runtime.jsx)(Ae,_extends$3({"data-index":t},Ke,{className:clsx$1(Ee.thumb,Ke.className,Q===t&&Ee.active,ve===t&&Ee.focusVisible),style:_extends$3({},a,Te(t),Ke.style),children:(0,import_jsx_runtime.jsx)(Pe,_extends$3({"data-index":t,"aria-label":K?K(t):L,"aria-valuenow":ce(e),"aria-labelledby":z,"aria-valuetext":q?q(ce(e),t):R,value:Se[t]},Xe))}))}),t)})]}))}),import_ZoomIn=__toESM(require_ZoomIn()),import_ZoomOut=__toESM(require_ZoomOut()),extendStatics$1=function(e,t){return extendStatics$1=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},extendStatics$1(e,t)};function __extends$1(e,t){extendStatics$1(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var __assign$1=function(){return __assign$1=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var o in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},__assign$1.apply(this,arguments)};function __rest$1(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var o=0,a=Object.getOwnPropertySymbols(e);o<a.length;o++)t.indexOf(a[o])<0&&Object.prototype.propertyIsEnumerable.call(e,a[o])&&(n[a[o]]=e[a[o]]);return n}var initialState={wrapperComponent:null,contentComponent:null,previousScale:1,scale:1,positionX:0,positionY:0,options:{disabled:!1,transformEnabled:!0,minPositionX:null,maxPositionX:null,minPositionY:null,maxPositionY:null,minScale:1,maxScale:8,limitToBounds:!0,limitToWrapper:!1,centerContent:!0,wrapperClass:``,contentClass:``},wheel:{disabled:!1,step:5,wheelEnabled:!0,touchPadEnabled:!0,limitsOnWheel:!1},pan:{disabled:!1,panAnimationType:`linear`,lockAxisX:!1,lockAxisY:!1,velocity:!0,velocityEqualToMove:!0,velocitySensitivity:2,velocityActiveScale:1,velocityMinSpeed:1,velocityBaseTime:1600,velocityAnimationType:`easeOutQuart`,padding:!0,paddingSize:30,panReturnAnimationTime:400,panReturnAnimationType:`easeOut`,disableOnTarget:[]},pinch:{disabled:!1},zoomIn:{disabled:!1,step:20,animation:!0,animationType:`easeOut`,animationTime:200},zoomOut:{disabled:!1,step:20,animation:!0,animationType:`easeOut`,animationTime:200},doubleClick:{disabled:!1,step:20,mode:`zoomIn`,animation:!0,animationType:`easeOut`,animationTime:200},reset:{disabled:!1,animation:!0,animationType:`easeOut`,animationTime:200},scalePadding:{disabled:!1,size:.2,animationTime:200,animationType:`easeOut`}},roundNumber=function(e,t){return Number(e.toFixed(t))},checkIsNumber=function(e,t){return typeof e==`number`?e:t},boundLimiter=function(e,t,n,a){return roundNumber(a?e<t?t:e>n?n:e:e,2)},calculateBoundingArea=function(e,t,n,a,o,s,l){var u=e>t?n*(l?1:.5):0,d=a>o?s*(l?1:.5):0;return{minPositionX:e-t-u,maxPositionX:u,minPositionY:a-o-d,maxPositionY:d}},getDistance=function(e,t){return Math.sqrt((e.pageX-t.pageX)**2+(e.pageY-t.pageY)**2)},deleteUndefinedProps=function(e){var t=__assign$1({},e);return Object.keys(t).forEach(function(e){return t[e]===void 0&&delete t[e]}),t},handleCallback=function(e,t){e&&typeof e==`function`&&e(t)},handleWheelStop=function(e,t,n){var a=n.scale,o=n.options,s=o.maxScale,l=o.minScale;return e?a<s||a>l||Math.sign(e.deltaY)!==Math.sign(t.deltaY)||e.deltaY>0&&e.deltaY<t.deltaY||e.deltaY<0&&e.deltaY>t.deltaY||Math.sign(e.deltaY)!==Math.sign(t.deltaY):!1},mergeProps=function(e,t){return Object.keys(e).reduce(function(n,a){return typeof t[a]==`object`&&t[a]!==null?n[a]=__assign$1(__assign$1({},e[a]),t[a]):n[a]=t[a]===void 0?e[a]:t[a],n},{})};function getWindowScaleY(e){return e?window.innerHeight/e.offsetHeight:0}function getWindowScaleX(e){return e?window.innerWidth/e.offsetWidth:0}var easeOut=function(e){return-Math.cos(e*Math.PI)/2+.5},linear=function(e){return e},easeInQuad=function(e){return e*e},easeOutQuad=function(e){return e*(2-e)},easeInOutQuad=function(e){return e<.5?2*e*e:-1+(4-2*e)*e},easeInCubic=function(e){return e*e*e},easeOutCubic=function(e){return--e*e*e+1},easeInOutCubic=function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart=function(e){return e*e*e*e},easeOutQuart=function(e){return 1- --e*e*e*e},easeInOutQuart=function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint=function(e){return e*e*e*e*e},easeOutQuint=function(e){return 1+--e*e*e*e*e},easeInOutQuint=function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e},availableAnimations={easeOut,linear,easeInQuad,easeOutQuad,easeInOutQuad,easeInCubic,easeOutCubic,easeInOutCubic,easeInQuart,easeOutQuart,easeInOutQuart,easeInQuint,easeOutQuint,easeInOutQuint};function handleDisableAnimation(){this.mounted&&(this.animation&&cancelAnimationFrame(this.animation),this.animate=!1,this.animation=!1,this.velocity=!1)}function animate(e,t,n){var a=this;if(this.mounted){var o=new Date().getTime(),s=1;handleDisableAnimation.call(this),this.animation=function(){if(!(!a.animation||!a.mounted)){var l=new Date().getTime()-o,u=l/t,d=availableAnimations[e],f=d(u);l>=t?(n(s),a.animation=null):(n(f),requestAnimationFrame(a.animation))}},requestAnimationFrame(this.animation)}}function animateComponent(e){var t=this,n=e.targetState,a=e.speed,o=e.type,s=this.stateProvider,l=s.scale,u=s.positionX,d=s.positionY,f=n.scale-l,m=n.positionX-u,h=n.positionY-d;a===0?(this.stateProvider.previousScale=this.stateProvider.scale,this.stateProvider.scale=n.scale,this.stateProvider.positionX=n.positionX,this.stateProvider.positionY=n.positionY,this.applyTransformation()):animate.call(this,o,a,function(e){t.stateProvider.previousScale=t.stateProvider.scale,t.stateProvider.scale=l+f*e,t.stateProvider.positionX=u+m*e,t.stateProvider.positionY=d+h*e,t.applyTransformation()})}function checkZoomBounds(e,t,n,a,o){var s=t-(o?a:0);return!isNaN(n)&&e>=n?n:!isNaN(t)&&e<=s?s:e}function checkPositionBounds(e,t,n,a,o,s){var l=n.minPositionX,u=n.minPositionY,d=n.maxPositionX,f=n.maxPositionY,m=s?o*s.offsetWidth/100:0,h=s?o*s.offsetHeight/100:0;return{x:boundLimiter(e,l-m,d+m,a),y:boundLimiter(t,u-h,f+h,a)}}function getDelta(e,t){return checkIsNumber(t,e?e.deltaY<0?1:-1:0)}function wheelMousePosition(e,t,n){var a=t.getBoundingClientRect(),o=(e.clientX-a.left)/n,s=(e.clientY-a.top)/n;return(isNaN(o)||isNaN(s))&&console.error(`No mouse or touch offset found`),{mouseX:o,mouseY:s}}function getComponentsSizes(e,t,n){var a=e.offsetWidth,o=e.offsetHeight,s=t.offsetWidth,l=t.offsetHeight,u=s*n,d=l*n;return{wrapperWidth:a,wrapperHeight:o,newContentWidth:u,newDiffWidth:a-u,newContentHeight:d,newDiffHeight:o-d}}function handleCalculatePositions(e,t,n,a,o){var s=this.stateProvider,l=s.scale,u=s.positionX,d=s.positionY,f=s.options.transformEnabled,m=n-l;return typeof e!=`number`||typeof t!=`number`?console.error(`Mouse X and Y position were not provided!`):f?checkPositionBounds(u-e*m,d-t*m,a,o,0,null):{newPositionX:u,newPositionY:d}}function getClientPosition(e){var t=e.touches;return t&&t.length===1?{clientX:t[0].clientX,clientY:t[0].clientY}:t?null:{clientX:e.clientX,clientY:e.clientY}}function handlePanning(e){var t=this.stateProvider,n=t.scale,a=t.positionX,o=t.positionY,s=t.options,l=s.limitToBounds,u=s.minScale,d=t.pan,f=d.lockAxisX,m=d.lockAxisY,h=d.padding,v=d.paddingSize,y=t.wrapperComponent;if(this.startCoords){var b=this.startCoords,x=b.x,S=b.y,C=getClientPosition(e);if(!C)return console.error(`Cannot find mouse client positions`);var T=C.clientX,E=C.clientY,D=T-x,O=E-S,k=f?a:D,j=m?o:O,M=h&&n>=u?v:0;if(!(k===a&&j===o)){var N=checkPositionBounds(k,j,this.bounds,l,M,y);handlePaddingAnimation.call(this,N.x,N.y)}}}function handlePanningAnimation(){var e=this.stateProvider,t=e.scale,n=e.options.minScale,a=e.pan,o=a.disabled,s=a.padding,l=a.panReturnAnimationTime,u=a.panReturnAnimationType;if(!(o||t<n||!s)){var d=handlePanToBounds.call(this);animateComponent.call(this,{targetState:d,speed:l,type:u})}}function handlePanToBounds(){var e=this.stateProvider,t=e.positionX,n=e.positionY,a=e.scale,o=e.options,s=o.disabled,l=o.limitToBounds,u=o.limitToWrapper,d=this.state.wrapperComponent;if(!s){var f=this.bounds,m=f.maxPositionX,h=f.minPositionX,v=f.maxPositionY,y=f.minPositionY,b=t>m||t<h,x=n>v||n<y,S=t>m?d.offsetWidth:this.stateProvider.minPositionX||0,C=n>v?d.offsetHeight:this.stateProvider.minPositionY||0,T=S,E=C,D=handleCalculatePositions.call(this,T,E,a,this.bounds,l||u),O=D.x,k=D.y;return{scale:a,positionX:b?O:t,positionY:x?k:n}}}function handlePaddingAnimation(e,t){this.stateProvider.pan.padding&&(this.stateProvider.positionX=e,this.stateProvider.positionY=t,this.applyTransformation())}function handleCalculateZoom(e,t,n,a,o){var s=this.stateProvider,l=s.scale,u=s.options,d=u.maxScale,f=u.minScale,m=s.scalePadding,h=m.size,v=m.disabled,y=s.wrapperComponent,b=null;if(o){var x=window.innerWidth*1e-4,S=e<0?30:20;b=l+(t-t*x)*e*(l/S)}else{var C=2-window.innerWidth/y.offsetWidth,x=Math.max(.2,Math.min(.99,C)),S=20;b=l+t*e*((l-l*x)/S)}if(a)return b;var T=!n&&!v;return checkZoomBounds(roundNumber(b,3),f,d,h,T)}function handleCalculateBounds(e,t){var n=this.stateProvider,a=n.wrapperComponent,o=n.contentComponent,s=getComponentsSizes(a,o,e),l=s.wrapperWidth,u=s.wrapperHeight,d=s.newContentWidth,f=s.newDiffWidth,m=s.newContentHeight,h=s.newDiffHeight,v=calculateBoundingArea(l,d,f,u,m,h,t);return this.bounds=v,v}function handleWheelZoom(e){var t=this.stateProvider,n=t.scale,a=t.contentComponent,o=t.options.limitToBounds,s=t.scalePadding,l=s.size,u=s.disabled,d=t.wheel,f=d.step,m=d.limitsOnWheel;e.preventDefault(),e.stopPropagation();var h=getDelta(e,null),v=handleCalculateZoom.call(this,h,f,!e.ctrlKey);if(n!==v){var y=handleCalculateBounds.call(this,v,!m),b=wheelMousePosition(e,a,n),x=b.mouseX,S=b.mouseY,C=o&&(u||l===0||m),T=handleCalculatePositions.call(this,x,S,v,y,C),E=T.x,D=T.y;this.bounds=y,this.stateProvider.previousScale=n,this.stateProvider.scale=v,this.stateProvider.positionX=E,this.stateProvider.positionY=D,this.applyTransformation()}}function handleZoomToPoint(e,t,n,a,o){var s=this.stateProvider,l=s.contentComponent,u=s.options,d=u.disabled,f=u.minScale,m=u.maxScale,h=u.limitToBounds,v=u.limitToWrapper;if(!(d||e)){var y=checkZoomBounds(roundNumber(t,2),f,m,null,null),b=handleCalculateBounds.call(this,y,v),x=n,S=a;if(o){var C=wheelMousePosition(o,l,t);x=C.mouseX,S=C.mouseY}var T=handleCalculatePositions.call(this,x,S,y,b,h);return{scale:y,positionX:T.x,positionY:T.y}}}function handlePaddingAnimation$1(){var e=this.stateProvider,t=e.scale,n=e.wrapperComponent,a=e.options,o=a.minScale,s=a.limitToBounds,l=e.scalePadding,u=l.disabled,d=l.animationTime,f=l.animationType,m=u||t>=o;if((t>=1||s)&&handlePanningAnimation.call(this),!m){var h=n.offsetWidth/2,v=n.offsetHeight/2,y=handleZoomToPoint.call(this,!1,o,h,v,null);animateComponent.call(this,{targetState:y,speed:d,type:f})}}function handleDoubleClick(e){e.preventDefault(),e.stopPropagation();var t=this.stateProvider,n=t.contentComponent,a=t.scale,o=t.doubleClick,s=o.disabled,l=o.mode,u=o.step,d=o.animationTime,f=o.animationType;if(l===`reset`)return resetTransformations.call(this,e,d);var m=l===`zoomOut`?-1:1,h=handleCalculateZoom.call(this,m,u,void 0,void 0,!0),v=wheelMousePosition(e,n,a),y=v.mouseX,b=v.mouseY,x=handleZoomToPoint.call(this,s,h,y,b);if(x.scale!==a){var S=getButtonAnimationTime(handleCalculateZoom.call(this,m,u,!0,void 0,!0),h,d);animateComponent.call(this,{targetState:x,speed:S,type:f})}}function handleZoomControls(e,t){var n=this.stateProvider,a=n.scale,o=n.positionX,s=n.positionY,l=n.wrapperComponent,u=n.zoomIn,d=n.zoomOut,f=l.offsetWidth,m=l.offsetHeight,h=(f/2-o)/a,v=(m/2-s)/a,y=handleCalculateZoom.call(this,e,t,void 0,void 0,!0),b=y>a,x=b?u.animationTime:d.animationTime,S=b?u.animationType:d.animationType,C=b?u.disabled:d.disabled,T=handleZoomToPoint.call(this,C,y,h,v);if(T.scale!==a){var E=getButtonAnimationTime(handleCalculateZoom.call(this,e,t,!0,void 0,!0),y,x);animateComponent.call(this,{targetState:T,speed:E,type:S})}}function resetTransformations(e){var t=this.props.defaultValues,n=t.defaultScale,a=t.defaultPositionX,o=t.defaultPositionY,s=this.stateProvider,l=s.scale,u=s.positionX,d=s.positionY,f=s.reset,m=s.options,h=m.disabled,v=m.limitToBounds,y=m.centerContent,b=m.limitToWrapper;if(!(h||f.disabled)&&!(l===n&&u===a&&d===o)){var x=typeof e==`number`?e:f.animationTime,S=checkIsNumber(n,initialState.scale),C=checkIsNumber(a,initialState.positionX),T=checkIsNumber(o,initialState.positionY);if(v&&!b||y){var E=handleCalculateBounds.call(this,S,b);C=E.minPositionX,T=E.minPositionY}var D={scale:S,positionX:C,positionY:T};animateComponent.call(this,{targetState:D,speed:x,type:f.animationType})}}function getButtonAnimationTime(e,t,n){return t/e*n}function round(e,t){var n=10**t;return Math.round(e*n)/n}function getCurrentDistance(e){return getDistance(e.touches[0],e.touches[1])}function checkIfInfinite(e){return e===1/0||e===-1/0}function calculatePinchZoom(e,t){var n=this.stateProvider,a=n.options,o=a.minScale,s=a.maxScale,l=n.scalePadding,u=l.size,d=l.disabled;if(typeof t!=`number`||typeof e!=`number`)return console.error(`Pinch touches distance was not provided`);if(!(e<0))return checkZoomBounds(roundNumber(e/t*this.pinchStartScale,2),o,s,u,!d)}function calculateMidpoint(e,t,n){var a=n.getBoundingClientRect(),o=e.touches,s=round(o[0].clientX-a.left,5),l=round(o[0].clientY-a.top,5),u=round(o[1].clientX-a.left,5),d=round(o[1].clientY-a.top,5);return{mouseX:(s+u)/2/t,mouseY:(l+d)/2/t}}function handleZoomPinch(e){var t=this.stateProvider,n=t.scale,a=t.options,o=a.limitToBounds,s=a.limitToWrapper,l=t.scalePadding,u=l.disabled,d=l.size,f=t.wheel.limitsOnWheel,m=t.pinch,h=this.state.contentComponent;if(!(m.disabled||this.stateProvider.options.disabled)&&(e.cancelable&&(e.preventDefault(),e.stopPropagation()),this.pinchStartDistance!==null)){var v=calculateMidpoint(e,n,h),y=v.mouseX,b=v.mouseY;if(!(checkIfInfinite(y)||checkIfInfinite(b))){var x=getCurrentDistance(e),S=calculatePinchZoom.call(this,x,this.pinchStartDistance);if(!(checkIfInfinite(S)||S===n)){var C=handleCalculateBounds.call(this,S,s),T=o&&(u||d===0||f),E=handleCalculatePositions.call(this,y,b,S,C,T),D=E.x,O=E.y;this.lastDistance=x,this.stateProvider.positionX=D,this.stateProvider.positionY=O,this.stateProvider.scale=S,this.stateProvider.previousScale=n,this.applyTransformation()}}}}var throttleTime=30;function velocityTimeSpeed(e,t){return this.stateProvider.pan.velocityEqualToMove?t-t/Math.max(1,e):t}function handleEnableVelocity(){this.setState({startAnimation:!1})}function handleFireVelocity(){this.setState({startAnimation:!0})}function animateVelocity(){var e=this,t=this.stateProvider,n=t.positionX,a=t.positionY,o=t.options.limitToBounds,s=t.pan,l=s.velocityBaseTime,u=s.lockAxisX,d=s.lockAxisY,f=s.velocityAnimationType,m=s.panReturnAnimationTime,h=s.panReturnAnimationType,v=s.padding,y=s.paddingSize,b=t.wrapperComponent;if(this.mounted){if(!this.velocity||!this.bounds)return handleDisableAnimation.call(this);var x=this.bounds,S=x.maxPositionX,C=x.minPositionX,T=x.maxPositionY,E=x.minPositionY,D=this.velocity,O=D.velocityX,k=D.velocityY,j=D.velocity,M=velocityTimeSpeed.call(this,j,l);if(!M){handlePanningAnimation.call(this);return}var N=O,F=k,I=M>m?M:m,L=v?y:0,R=b?L*b.offsetWidth/100:0,z=b?L*b.offsetHeight/100:0,B=S+R,V=C-R,H=T+z,U=E-z,W=checkPositionBounds(n,a,this.bounds,o,L,b),G=new Date().getTime();animate.call(this,f,I,function(t){var s=new Date().getTime()-G,l=s/m,f=availableAnimations[h],v=f(l);(s>m||v>1||v===1/0||v===-1/0)&&(v=1);var y=getPosition(u,N,t,v,C,S,o,n,W.x,V,B),b=getPosition(d,F,t,v,E,T,o,a,W.y,U,H);(n!==y||a!==b)&&(e.stateProvider.positionX=y,e.stateProvider.positionY=b,e.applyTransformation())})}}function calculateVelocityStart(e){var t=this,n=this.stateProvider,a=n.scale,o=n.options.disabled,s=n.pan,l=s.velocity,u=s.velocitySensitivity,d=s.velocityActiveScale,f=s.velocityMinSpeed,m=n.wrapperComponent;if(!(!l||d>=a||o)){handleEnableVelocity.call(this);var h=Date.now();if(this.lastMousePosition){var v=getClientPosition(e);if(!v)return console.error(`No mouse or touch position detected`);var y=v.clientX,b=v.clientY,x=y-this.lastMousePosition.clientX,S=b-this.lastMousePosition.clientY,C=h-this.velocityTime,T=2-m.offsetWidth/window.innerWidth,E=2-m.offsetHeight/window.innerHeight,D=20*Math.max(f,Math.min(2,T)),O=20*Math.max(f,Math.min(2,E)),k=x/C*u*a*D,j=S/C*u*a*O,M=x*x+S*S,N=Math.sqrt(M)/C*u;if(this.velocity&&N<this.velocity.velocity&&this.throttle)return;this.velocity={velocityX:k,velocityY:j,velocity:N},this.throttle&&clearTimeout(this.throttle),this.throttle=setTimeout(function(){t.mounted&&(t.throttle=!1)},throttleTime)}var F=getClientPosition(e);this.lastMousePosition=F,this.velocityTime=h}}function getPosition(e,t,n,a,o,s,l,u,d,f,m){if(l){if(d>o&&u>s){var h=d-(d-s)*a;return h>m?m:h<s?s:h}if(d<o&&u<o){var h=d-(d-o)*a;return h<f?f:h>o?o:h}}return e?d:boundLimiter(u+t*n,o,s,l)}function makePassiveEventOption(e){return e}var propsList=`previousScale.scale.positionX.positionY.defaultPositionX.defaultPositionY.defaultScale.onWheelStart.onWheel.onWheelStop.onPanningStart.onPanning.onPanningStop.onPinchingStart.onPinching.onPinchingStop.onZoomChange.options.wheel.scalePadding.pan.pinch.zoomIn.zoomOut.doubleClick.reset`.split(`.`),getValidPropsFromObject=function(e){return Object.keys(e).reduce(function(t,n){return propsList.includes(n)&&(t[n]=e[n]),t},{})},Context=import_react$24.createContext({}),wheelStopEventTimer=null,wheelStopEventTime=180,wheelAnimationTimer=null,wheelAnimationTime=100,StateProvider=function(e){__extends$1(t,e);function t(){var t=e!==null&&e.apply(this,arguments)||this;return t.mounted=!0,t.state={wrapperComponent:void 0,contentComponent:void 0},t.stateProvider=__assign$1(__assign$1(__assign$1(__assign$1({},initialState),mergeProps(initialState,t.props.dynamicValues)),t.props.defaultValues),{previousScale:t.props.dynamicValues.scale||t.props.defaultValues.scale||initialState.scale}),t.windowToWrapperScaleX=0,t.windowToWrapperScaleY=0,t.startCoords=null,t.isDown=!1,t.pinchStartDistance=null,t.lastDistance=null,t.pinchStartScale=null,t.distance=null,t.bounds=null,t.velocityTime=null,t.lastMousePosition=null,t.velocity=null,t.offsetX=null,t.offsetY=null,t.throttle=!1,t.previousWheelEvent=null,t.lastScale=null,t.animate=null,t.animation=null,t.maxBounds=null,t.handleWheel=function(e){var n=t.stateProvider,a=n.scale,o=n.wheel,s=o.disabled,l=o.wheelEnabled,u=o.touchPadEnabled,d=t.props,f=d.onWheelStart,m=d.onWheel,h=d.onWheelStop,v=t.state,y=v.wrapperComponent,b=v.contentComponent;t.isDown||s||t.stateProvider.options.disabled||!y||!b||!l&&!e.ctrlKey||!u&&e.ctrlKey||(wheelStopEventTimer||(t.lastScale=a,handleDisableAnimation.call(t),handleCallback(f,t.getCallbackProps())),handleWheelZoom.call(t,e),handleCallback(m,t.getCallbackProps()),t.applyTransformation(null,null,null),t.previousWheelEvent=e,handleWheelStop(t.previousWheelEvent,e,t.stateProvider)&&(clearTimeout(wheelStopEventTimer),wheelStopEventTimer=setTimeout(function(){t.mounted&&(handleCallback(h,t.getCallbackProps()),wheelStopEventTimer=null)},wheelStopEventTime)),t.animate=!1,t.lastScale=t.stateProvider.scale,clearTimeout(wheelAnimationTimer),wheelAnimationTimer=setTimeout(function(){t.mounted&&handlePaddingAnimation$1.call(t,e)},wheelAnimationTime))},t.checkPanningTarget=function(e){var n=t.stateProvider.pan.disableOnTarget;return n.map(function(e){return e.toUpperCase()}).includes(e.target.tagName)||n.find(function(t){return e.target.classList.value.includes(t)})},t.checkIsPanningActive=function(e){var n=t.stateProvider.pan.disabled,a=t.state,o=a.wrapperComponent,s=a.contentComponent;return!t.isDown||n||t.stateProvider.options.disabled||e.touches&&(e.touches.length!==1||Math.abs(t.startCoords.x-e.touches[0].clientX)<1||Math.abs(t.startCoords.y-e.touches[0].clientY)<1)||!o||!s},t.handleSetUpPanning=function(e,n){var a=t.stateProvider,o=a.positionX,s=a.positionY;t.isDown=!0,t.startCoords={x:e-o,y:n-s},handleCallback(t.props.onPanningStart,t.getCallbackProps())},t.handleStartPanning=function(e){var n=t.stateProvider,a=n.wrapperComponent,o=n.scale,s=n.options,l=s.minScale,u=s.maxScale,d=s.limitToWrapper,f=n.pan.disabled,m=e.target,h=e.touches;f||t.stateProvider.options.disabled||a&&!a.contains(m)||t.checkPanningTarget(e)||o<l||o>u||(handleDisableAnimation.call(t),t.bounds=handleCalculateBounds.call(t,o,d),h&&h.length===1&&t.handleSetUpPanning(h[0].clientX,h[0].clientY),h||t.handleSetUpPanning(e.clientX,e.clientY))},t.handlePanning=function(e){t.isDown&&e.preventDefault(),!t.checkIsPanningActive(e)&&(e.stopPropagation(),calculateVelocityStart.call(t,e),handlePanning.call(t,e),handleCallback(t.props.onPanning,t.getCallbackProps()))},t.handleStopPanning=function(){if(t.isDown){t.isDown=!1,t.animate=!1,t.animation=!1,handleFireVelocity.call(t),handleCallback(t.props.onPanningStop,t.getCallbackProps());var e=t.stateProvider,n=e.pan.velocity,a=e.scale;t.velocity&&n&&a>1?animateVelocity.call(t):handlePanningAnimation.call(t)}},t.handlePinchStart=function(e){var n=t.stateProvider.scale;e.preventDefault(),e.stopPropagation(),handleDisableAnimation.call(t);var a=getDistance(e.touches[0],e.touches[1]);t.pinchStartDistance=a,t.lastDistance=a,t.pinchStartScale=n,t.isDown=!1,handleCallback(t.props.onPinchingStart,t.getCallbackProps())},t.handlePinch=function(e){t.isDown=!1,handleZoomPinch.call(t,e),handleCallback(t.props.onPinching,t.getCallbackProps())},t.handlePinchStop=function(){typeof t.pinchStartScale==`number`&&(t.isDown=!1,t.velocity=null,t.lastDistance=null,t.pinchStartScale=null,t.pinchStartDistance=null,handlePaddingAnimation$1.call(t),handleCallback(t.props.onPinchingStop,t.getCallbackProps()))},t.handleTouchStart=function(e){var n=t.stateProvider,a=n.wrapperComponent,o=n.contentComponent,s=n.scale,l=n.options,u=l.disabled,d=l.minScale,f=e.touches;if(!(u||!a||!o||s<d)){if(handleDisableAnimation.call(t),f&&f.length===1)return t.handleStartPanning(e);if(f&&f.length===2)return t.handlePinchStart(e)}},t.handleTouch=function(e){var n=t.stateProvider,a=n.pan,o=n.pinch;if(!n.options.disabled){if(!a.disabled&&e.touches.length===1)return t.handlePanning(e);if(!o.disabled&&e.touches.length===2)return t.handlePinch(e)}},t.handleTouchStop=function(){t.handleStopPanning(),t.handlePinchStop()},t.zoomIn=function(e){var n=t.stateProvider,a=n.zoomIn,o=a.disabled,s=a.step,l=n.options,u=t.state,d=u.wrapperComponent,f=u.contentComponent;if(!e)throw Error(`Zoom in function requires event prop`);o||l.disabled||!d||!f||handleZoomControls.call(t,1,s)},t.zoomOut=function(e){var n=t.stateProvider,a=n.zoomOut,o=a.disabled,s=a.step,l=n.options,u=t.state,d=u.wrapperComponent,f=u.contentComponent;if(!e)throw Error(`Zoom out function requires event prop`);o||l.disabled||!d||!f||handleZoomControls.call(t,-1,s)},t.handleDbClick=function(e){var n=t.stateProvider,a=n.options,o=n.doubleClick,s=o.disabled,l=o.step,u=t.state,d=u.wrapperComponent,f=u.contentComponent;if(!e)throw Error(`Double click function requires event prop`);s||a.disabled||!d||!f||handleDoubleClick.call(t,e,1,l)},t.setScale=function(e,n,a){n===void 0&&(n=200),a===void 0&&(a=`easeOut`);var o=t.stateProvider,s=o.positionX,l=o.positionY,u=o.scale,d=o.options.disabled,f=t.state,m=f.wrapperComponent,h=f.contentComponent;if(!(d||!m||!h)){var v={positionX:s,positionY:l,scale:isNaN(e)?u:e};animateComponent.call(t,{targetState:v,speed:n,type:a})}},t.setPositionX=function(e,n,a){n===void 0&&(n=200),a===void 0&&(a=`easeOut`);var o=t.stateProvider,s=o.positionX,l=o.positionY,u=o.scale,d=o.options,f=d.disabled,m=d.transformEnabled,h=t.state,v=h.wrapperComponent,y=h.contentComponent;if(!(f||!m||!v||!y)){var b={positionX:isNaN(e)?s:e,positionY:l,scale:u};animateComponent.call(t,{targetState:b,speed:n,type:a})}},t.setPositionY=function(e,n,a){n===void 0&&(n=200),a===void 0&&(a=`easeOut`);var o=t.stateProvider,s=o.positionX,l=o.scale,u=o.positionY,d=o.options,f=d.disabled,m=d.transformEnabled,h=t.state,v=h.wrapperComponent,y=h.contentComponent;if(!(f||!m||!v||!y)){var b={positionX:s,positionY:isNaN(e)?u:e,scale:l};animateComponent.call(t,{targetState:b,speed:n,type:a})}},t.setTransform=function(e,n,a,o,s){o===void 0&&(o=200),s===void 0&&(s=`easeOut`);var l=t.stateProvider,u=l.positionX,d=l.positionY,f=l.scale,m=l.options,h=m.disabled,v=m.transformEnabled,y=t.state,b=y.wrapperComponent,x=y.contentComponent;if(!(h||!v||!b||!x)){var S={positionX:isNaN(e)?u:e,positionY:isNaN(n)?d:n,scale:isNaN(a)?f:a};animateComponent.call(t,{targetState:S,speed:o,type:s})}},t.resetTransform=function(){var e=t.stateProvider.options,n=e.disabled,a=e.transformEnabled;n||!a||resetTransformations.call(t)},t.setDefaultState=function(){t.animation=null,t.stateProvider=__assign$1(__assign$1(__assign$1({},t.stateProvider),{scale:initialState.scale,positionX:initialState.positionX,positionY:initialState.positionY}),t.props.defaultValues),t.forceUpdate()},t.setWrapperComponent=function(e){t.setState({wrapperComponent:e})},t.setContentComponent=function(e){t.setState({contentComponent:e},function(){var n=t.stateProvider,a=n.wrapperComponent,o=n.options,s=o.centerContent,l=o.limitToBounds,u=o.limitToWrapper,d=n.scale,f=t.props.defaultValues,m=f.positionX,h=f.positionY;if(l&&!u||s&&!m&&!h){var v=`translate(25%, 25%) scale(`+d+`)`;e.style.transform=v,e.style.WebkitTransform=v,t.forceUpdate();var y=new Date().getTime(),b=2e3,x=setInterval(function(){if(a.offsetWidth){var e=handleCalculateBounds.call(t,d,!1);t.stateProvider.positionX=e.minPositionX,t.stateProvider.positionY=e.minPositionY,t.applyTransformation(null,null,null),clearInterval(x),x=null}else new Date().getTime()-y>b&&(clearInterval(x),x=null)},20)}else t.applyTransformation(null,null,null)})},t.applyTransformation=function(e,n,a){if(t.mounted){var o=t.state.contentComponent,s=t.props.onZoomChange,l=t.stateProvider,u=l.previousScale,d=l.scale,f=l.positionX,m=l.positionY;if(!o)return console.error(`There is no content component`);var h=`translate(`+(n||f)+`px, `+(a||m)+`px) scale(`+(e||d)+`)`;o.style.transform=h,o.style.WebkitTransform=h,t.forceUpdate(),s&&u!==d&&handleCallback(s,t.getCallbackProps())}},t.getCallbackProps=function(){return getValidPropsFromObject(t.stateProvider)},t}return t.prototype.componentDidMount=function(){var e=makePassiveEventOption(!1);window.addEventListener(`mousedown`,this.handleStartPanning,e),window.addEventListener(`mousemove`,this.handlePanning,e),window.addEventListener(`mouseup`,this.handleStopPanning,e)},t.prototype.componentWillUnmount=function(){var e=makePassiveEventOption(!1);window.removeEventListener(`mousedown`,this.handleStartPanning,e),window.removeEventListener(`mousemove`,this.handlePanning,e),window.removeEventListener(`mouseup`,this.handleStopPanning,e),handleDisableAnimation.call(this)},t.prototype.componentDidUpdate=function(e,t){var n=this.state,a=n.wrapperComponent,o=n.contentComponent,s=this.props.dynamicValues;if(!t.contentComponent&&o&&(this.stateProvider.contentComponent=o),!t.wrapperComponent&&a&&a!==void 0){this.stateProvider.wrapperComponent=a,this.windowToWrapperScaleX=getWindowScaleX(a),this.windowToWrapperScaleY=getWindowScaleY(a);var l=makePassiveEventOption(!1);a.addEventListener(`wheel`,this.handleWheel,l),a.addEventListener(`dblclick`,this.handleDbClick,l),a.addEventListener(`touchstart`,this.handleTouchStart,l),a.addEventListener(`touchmove`,this.handleTouch,l),a.addEventListener(`touchend`,this.handleTouchStop,l)}(a&&o||e.dynamicValues!==s)&&(this.maxBounds=handleCalculateBounds.call(this,this.stateProvider.scale,this.stateProvider.options.limitToWrapper)),e.dynamicValues&&e.dynamicValues!==s&&(this.animation=null,this.stateProvider=__assign$1(__assign$1({},this.stateProvider),mergeProps(this.stateProvider,s)),this.applyTransformation(null,null,null))},t.prototype.render=function(){var e=this.state,t=e.wrapperComponent,n=e.contentComponent,a={loaded:!!(t&&n),state:this.getCallbackProps(),dispatch:{setScale:this.setScale,setPositionX:this.setPositionX,setPositionY:this.setPositionY,zoomIn:this.zoomIn,zoomOut:this.zoomOut,setTransform:this.setTransform,resetTransform:this.resetTransform,setDefaultState:this.setDefaultState},nodes:{setWrapperComponent:this.setWrapperComponent,setContentComponent:this.setContentComponent}},o=this.props.children,s=typeof o==`function`?o(__assign$1(__assign$1({},a.state),a.dispatch)):o;return import_react$24.createElement(Context.Provider,{value:a},s)},t}(import_react$24.Component),TransformWrapper=function(e){var t=e.children,n=e.defaultPositionX,a=e.defaultPositionY,o=e.defaultScale,s=e.onWheelStart,l=e.onWheel,u=e.onWheelStop,d=e.onPanningStart,f=e.onPanning,m=e.onPanningStop,h=e.onPinchingStart,v=e.onPinching,y=e.onPinchingStop,b=e.onZoomChange,x=__rest$1(e,[`children`,`defaultPositionX`,`defaultPositionY`,`defaultScale`,`onWheelStart`,`onWheel`,`onWheelStop`,`onPanningStart`,`onPanning`,`onPanningStop`,`onPinchingStart`,`onPinching`,`onPinchingStop`,`onZoomChange`]),S=__assign$1({},x);return S.options&&S.options.limitToWrapper&&(S.options.limitToBounds=!0),import_react$24.createElement(StateProvider,{defaultValues:deleteUndefinedProps({positionX:n,positionY:a,scale:o}),dynamicValues:deleteUndefinedProps(getValidPropsFromObject(S)),onWheelStart:s,onWheel:l,onWheelStop:u,onPanningStart:d,onPanning:f,onPanningStop:m,onPinchingStart:h,onPinching:v,onPinchingStop:y,onZoomChange:b},t)};function styleInject(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>`u`)){var a=document.head||document.getElementsByTagName(`head`)[0],o=document.createElement(`style`);o.type=`text/css`,n===`top`&&a.firstChild?a.insertBefore(o,a.firstChild):a.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var css=`.TransformComponent-module_container__3NwNd {
730
730
  position: relative;
731
731
  width: fit-content;
732
732
  height: fit-content;
@@ -840,5 +840,5 @@ Keg contents take time to reach maturity before they can be sold. After they rea
840
840
 
841
841
  Kegs that contain fermented crops compound in value at a rate of ${KEG_INTEREST_RATE}% a day but have an increasing chance of spoiling.
842
842
 
843
- Kegs that contain wine compound in value at a rate of ${WINE_INTEREST_RATE}% for up to ${integerString(100)} days and never spoil.`})})})})})]})};CellarInventoryTabPanel.propTypes={currentTab:import_prop_types$1.number.isRequired,index:import_prop_types$1.number.isRequired};function getCropsAvailableToFerment(e){return Object.keys(e.items).reduce((e,t)=>{let n=getFinalCropItemFromSeedItem(itemsMap[t]);return n&&Number.isFinite(n.daysToFerment)&&e.push(n),e},[])}var FermentationRecipe=({item:e})=>{let{gameState:{inventory:t,cellarInventory:n,purchasedCellar:a},handlers:{handleMakeFermentationRecipeClick:o}}=(0,import_react$24.useContext)(FarmhandContext),[s,l]=(0,import_react$24.useState)(1),u=getInventoryQuantityMap(t),d=FERMENTED_CROP_NAME`${e}`,{space:f}=PURCHASEABLE_CELLARS.get(a)??{space:0};(0,import_react$24.useEffect)(()=>{l(Math.min(getMaxYieldOfFermentationRecipe(e,t,n,f),Math.max(1,s)))},[n,f,t,e,s]);let m=s>0&&cellarService.doesCellarSpaceRemain(n,a),h=()=>{m&&o(e,s)},v=getMaxYieldOfFermentationRecipe(e,t,n,f),y=cellarService.getItemInstancesInCellar(n,e);return(0,import_jsx_runtime.jsxs)(Card,{className:`FermentationRecipe`,sx:{position:`relative`,"& .MuiCardHeader-avatar img":{width:`3em`,filter:`drop-shadow(1px 1px 2px rgba(255, 0, 131, 0.63))`}},children:[(0,import_jsx_runtime.jsx)(CardHeader,{title:d,avatar:(0,import_jsx_runtime.jsx)(`img`,{src:items[e.id],alt:d}),subheader:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(`p`,{children:[`Days to ferment: `,e.daysToFerment]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`Units of `,itemsMap[e.id].name,` in inventory:`,` `,integerString(u[e.id]??0)]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`Units of`,` `,itemsMap.salt.name,` `,`required: `,getSaltRequirementsForFermentationRecipe(e),` `,`(available:`,` `,(0,import_jsx_runtime.jsx)(AnimatedNumber,{number:u[itemsMap.salt.id]??0,formatter:integerString}),`)`]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`In cellar: `,integerString(y??0)]})]})}),(0,import_jsx_runtime.jsxs)(CardActions,{children:[(0,import_jsx_runtime.jsx)(Button,{className:`make-recipe`,color:`primary`,disabled:!m||!s,onClick:h,variant:`contained`,children:`Make`}),(0,import_jsx_runtime.jsx)(QuantityInput,{handleSubmit:h,handleUpdateNumber:l,maxQuantity:v,setQuantity:l,value:s})]})]})};FermentationRecipe.propTypes={item:import_prop_types$1.object.isRequired};var totalFermentableItems=Object.keys(fermentableItemsMap).length,FermentationRecipeList=()=>{let{gameState:{levelEntitlements:e}}=(0,import_react$24.useContext)(FarmhandContext),t=getCropsAvailableToFerment(e),[n,a]=(0,import_react$24.useState)(``),o=n.toLowerCase().split(` `).filter(e=>e.length>0),s=t.filter(e=>{let t=e,n=`${FERMENTED_CROP_NAME}${t.name}`.toLowerCase();return o.every(e=>n.includes(e)||t.name.toLowerCase().includes(e))}),l=s.length;return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(`h3`,{children:[`Available Fermentation Recipes (`,l,` /`,` `,totalFermentableItems,`)`]}),t.length>0&&(0,import_jsx_runtime.jsx)(SearchBar,{placeholder:`Search fermentation recipes...`,onSearch:a}),s.length>0&&(0,import_jsx_runtime.jsx)(`ul`,{className:`card-list`,children:s.map(e=>(0,import_jsx_runtime.jsx)(`li`,{children:(0,import_jsx_runtime.jsx)(FermentationRecipe,{item:e})},e.id))})]})};FermentationRecipeList.propTypes={};var FermentationTabPanel=({index:e,currentTab:t})=>(0,import_jsx_runtime.jsxs)(TabPanel,{value:t,index:e,children:[(0,import_jsx_runtime.jsx)(FermentationRecipeList,{}),(0,import_jsx_runtime.jsx)(Divider,{}),(0,import_jsx_runtime.jsx)(`ul`,{className:`card-list`,children:(0,import_jsx_runtime.jsx)(`li`,{children:(0,import_jsx_runtime.jsx)(Card,{children:(0,import_jsx_runtime.jsx)(CardContent,{children:(0,import_jsx_runtime.jsx)(import_react_markdown.default,{linkTarget:`_blank`,className:`markdown`,source:`Some items can be fermented and become much more valuable over time.`})})})})})]});FermentationTabPanel.propTypes={currentTab:import_prop_types$1.number.isRequired,index:import_prop_types$1.number.isRequired};var getGrapesSold=e=>Object.entries(e).reduce((e,[t,n])=>{let a=itemsMap[t];return(n||0)>0&&isGrape(a)&&e.push(a),e},[]);function getWineVarietiesAvailableToMake(e){return getGrapesSold(e).map(({variety:e})=>e)}var WineRecipe=({wineVariety:e})=>{let{gameState:{cellarInventory:t,inventory:n,purchasedCellar:a},handlers:{handleMakeWineClick:o}}=(0,import_react$24.useContext)(FarmhandContext),[s,l]=(0,import_react$24.useState)(1),u=grapeVarietyNameMap[e],d=grapeVarietyToGrapeItemMap[e],{space:f}=PURCHASEABLE_CELLARS.get(a)??{space:0},m=getInventoryQuantityMap(n);if((0,import_react$24.useEffect)(()=>{d&&l(Math.min(wineService.getMaxWineYield({grape:d,inventory:n,cellarInventory:t,cellarSize:f}),Math.max(1,s)))},[t,f,d,n,s,e]),!d)return null;let h=itemsMap[d.wineId];if(!h)return null;let v=m[d.id]??0,y=m[yeast.id]??0,b=s>0&&v>=50&&cellarService.doesCellarSpaceRemain(t,a),x=!b||!s,S=cellarService.getItemInstancesInCellar(t,h),C=wineService.getMaxWineYield({grape:d,inventory:n,cellarInventory:t,cellarSize:f}),T=()=>{b&&o(d,s)};return(0,import_jsx_runtime.jsxs)(Card,{className:`WineRecipe`,sx:{position:`relative`},children:[(0,import_jsx_runtime.jsx)(CardHeader,{title:u,avatar:(0,import_jsx_runtime.jsx)(`img`,{src:wines[e],alt:u}),subheader:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(`p`,{children:[`Days to mature:`,` `,integerString(wineService.getDaysToMature(e))]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`Units of `,d.name,` required:`,` `,integerString(50),` (available:`,` `,integerString(v),`)`]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`Units of `,yeast.name,` required:`,` `,integerString(getYeastRequiredForWine(e)*s),` `,`(available: `,integerString(y),`)`]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`In cellar: `,integerString(S??0)]})]})}),(0,import_jsx_runtime.jsxs)(CardActions,{children:[(0,import_jsx_runtime.jsx)(Button,{color:`primary`,variant:`contained`,disabled:x,onClick:T,children:`Make`}),(0,import_jsx_runtime.jsx)(QuantityInput,{handleSubmit:T,handleUpdateNumber:l,maxQuantity:C,setQuantity:l,value:s})]})]})};WineRecipe.propTypes={wineVariety:(0,import_prop_types$1.oneOf)(Object.keys(grapeVariety))};var totalGrapeVarieties=Object.keys(grapeVariety).length,WineRecipeList=()=>{let{gameState:{itemsSold:e}}=(0,import_react$24.useContext)(FarmhandContext),t=getWineVarietiesAvailableToMake(e),[n,a]=(0,import_react$24.useState)(``),o=t.filter(e=>e.toLowerCase().includes(n.toLowerCase())),s=o.length;return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(`h3`,{children:[`Available Wine Recipes (`,s,` /`,` `,totalGrapeVarieties,`)`]}),t.length>0&&(0,import_jsx_runtime.jsx)(SearchBar,{placeholder:`Search wine varieties...`,onSearch:a}),(0,import_jsx_runtime.jsx)(`ul`,{className:`card-list`,children:o.map(e=>(0,import_jsx_runtime.jsx)(`li`,{children:(0,import_jsx_runtime.jsx)(WineRecipe,{wineVariety:e})},e))})]})},WinemakingTabPanel=({index:e,currentTab:t})=>(0,import_jsx_runtime.jsxs)(TabPanel,{value:t,index:e,children:[(0,import_jsx_runtime.jsx)(WineRecipeList,{}),(0,import_jsx_runtime.jsx)(Divider,{}),(0,import_jsx_runtime.jsx)(`ul`,{className:`card-list`,children:(0,import_jsx_runtime.jsx)(`li`,{children:(0,import_jsx_runtime.jsx)(Card,{children:(0,import_jsx_runtime.jsx)(CardContent,{children:(0,import_jsx_runtime.jsx)(import_react_markdown.default,{linkTarget:`_blank`,className:`markdown`,source:`Grapes can be made into wine. Wine becomes very valuable in time and never spoils.`})})})})})]});WinemakingTabPanel.propTypes={currentTab:import_prop_types$1.number.isRequired,index:import_prop_types$1.number.isRequired};var CELLAR_TAB_LABELS=[`Cellar Inventory`,`Fermentation`,`Winemaking`],Cellar=()=>{let[e,t]=useTabQueryParam(CELLAR_TAB_LABELS);return(0,import_jsx_runtime.jsxs)(Div,{className:`Cellar`,sx:centerTabsSx,children:[(0,import_jsx_runtime.jsx)(Tabs,{value:e,onChange:(e,n)=>t(n),"aria-label":`Cellar tabs`,children:CELLAR_TAB_LABELS.map((e,t)=>(0,import_jsx_runtime.jsx)(Tab,{label:e,...a11yProps(t)},e))}),(0,import_jsx_runtime.jsx)(CellarInventoryTabPanel,{index:0,currentTab:e}),(0,import_jsx_runtime.jsx)(FermentationTabPanel,{index:1,currentTab:e}),(0,import_jsx_runtime.jsx)(WinemakingTabPanel,{index:2,currentTab:e})]})};Cellar.propTypes={};var brown_dot_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAk0lEQVRoge2UoRGAMBAECZYS8HRDw5QSnxKig88gfgaxl59befPi12wZzz22idr6dp3HPEvu5UtgJXb6gb9YgCaPQG3980B9d4VoLECTU0ClMJHdFaKxAE0eAcXCRHZXiMYCNDkFVAoT2V0hGgvQ5BFQLExkd4VoLECTU0ClMJHdFaKxAE0eAcXCRHZXiMYCNMsLvBG5ypkvoIETAAAAAElFTkSuQmCC`,floorboard_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAAAwCAYAAAD+WvNWAAAAAXNSR0IArs4c6QAAAUxJREFUeJzt3TFuwkAQheEFjSUQoo1EKJIid8oFuFMuwEVyjYgCCrBEayEiuQgtASNBXvDMmv8rt9nR7pPG24x7X/PZT0LryqpKk/HYuwxZ37sA5I0AQWJlVXnX8LC6cPY2rL9/LeyLQTpdAy6hhUFCgCAhQJDYvhicLTatAU3OPqIRW7RHDi0MEgIECQGCpPEjGrFFujObTl68a8CRdblKOd0JLQwSAgQJAYKEAEFCgCCxdbnyrgEncroTexoVrW643dWp7T1xP7QwSAgQJAQIEgIECQGCxLa7uvVNPfbEfdjb67N3DY0Wy02KWlvu/vNsaWGQECBICBAkBAiS3ufHOwOm8GdhX2FeeP3dhhYGCQGChABBQoAgIUCQ2GK58a4hHM7kelfPB4o2lwYx0MIgIUCQECBICBAkNw2YijTYCDFYF345lKOu/O7pAEBLR2y+MLyqAAAAAElFTkSuQmCC`,jack_o_lantern_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAA4UlEQVRYR+2VMQ6DMAxFYe4R2LsxdOopuHBv0KkDW/ceoTOVK/0qhICd8K0wNBNyIv3nH5PfTrdhaiqu9vAAz9f768+5O7n4tOmAt7h0tAAIRde+mVbMACCoCTCv4wcQio+Pe9NfrjOOuMaCWACIEBYgUjU3AM1+7LsCVL0CdBjaLrV4JugOiEjVvwCdhxDoMlWzzop27vhZoHWwd//vgLsDWqK6AmjiyTjeO1S5cU51oOQhowGUxjkdIDfO6QDWGcIz7wKQE+cuAOKCNc5pAKVxTgWIISxxTgewDiHOVQf4AHx92LXFZzetAAAAAElFTkSuQmCC`,winter_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAQdJREFUeJztmcERgyAUBZ9pIjVRUa5UldT0K/BITnhKZpgYXYG3Bei6oyCwxFrKPb9EEznpTI/ISZK06PEsp931YkROcweQpBstQNMcoH4zo9EUoD78iBGaAtTR+Qqzxb/xIEgL0DgALUDTTYCjZiAPgrQAjQPQAjQOcNSFe1k3eBagBWgcgBagcYBeRuujmP4NWGIt2zQ44pbXN7aDkaucDFH4E/Cf4OQ4AC1A4wC0AI0D0AI0DkAL0DgALUDjALQAze4AkVM3hyCfmP4N8H4ALUDjALQAjQPQAjQOQAvQOAAtQDNEgD3rkSECSL+fbHstQAvQOAAtQOMAtACNA9ACFWJjNXLSG2nxQbKUEorlAAAAAElFTkSuQmCC`,yellow_dot_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAx0lEQVRoQ+2WwQ3AIAwDYRVW6dx9dg1GKf1WlEcTAUks94maBHzGIt/taqn7aj1TKUe/nDyu59EBPjt3vMADWMMhATcEPCbMnySkhdxYyHoj2vm0kFa5WXVDApESiRaaZQVtHxLQKjerDodApOR5v5FwCMzy5O4+JLBb8X4eJoFIiYRJwNrXkvkkIFFrxb84BCIlD99CK7ys7YlzB7QKWNdhEoiUSJgErH0tmU8CErVW/ItDIFLy8C20wsvanjh3QKuAdV14Ag9MlnJUFzG78wAAAABJRU5ErkJgggAA`,lavender_dot_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAyUlEQVRoQ+2WwRGAIAwEQw0WYf/l+LQAPzaAXwd5mAyQ5OZ8MiaB2+OGcp+1SvNdh8i2t6siEddL7wDfrcdd4QG82ZBAGAIRE+ZPEtJCYSzkvRHrfFrIqtyoui6BTIlEC42ygrUPCViVG1WHQyBT8rzfSDgERnlydR8SWK14Ow+TQKZEwiTg7WvNfBLQqDXjXxwCmZKHb6EZXrb2xLkDVgW86zAJZEokTALevtbMJwGNWjP+xSGQKXn4FprhZWtPnDtgVcC7Lj2BB3XCNohEy6k2AAAAAElFTkSuQmCC`,grass_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABp0lEQVRoQ92Y63HDMAyD5RE6QMfLCp2qi2SODtARkmt7yTmuJIAEeHbiv+LrIyjZ8vJxbpe28/P91drbe66IZQ2gBMql//Ni8o5sZAAm+RqOtd/aUQCzLo4CsAXdYrP2rN2DAhkAZXQcvjSAI1lFjBIAVn4H0K4ADtASALaz7EkzO8V+ARydYItWD4ptrVMAJ5gz1roJ0xFyJnXGogGiclcVOasjvYl7xT4VgGPTOmKkFXAkd8S4AyD50fqoGNZvZjdbex0Ah5xsDFYVJp60B7KFZP16d4pdAJjOsu8gCaCXRO1uFE6+E28TPj1AtIOqinCEqjuqfpIcEiCiIgRAwaoVmt3GftZKAdxwvXjL6bNdsv8lj6BOKYB6wqAGWUaISYLmOBrDcqVUkiLfyN75t4lZZ9YOFauO2SEBItDyMcp+NTJFZVSlATLBoz6Za2UpANN11mb0zUQDsIlYu6g6o81uAcgUk/HpQewG4Hq50b9V2NHI2ClqHAIgA33zgSOkdMcxJij/6wMo8lb5rlWBCkSLQJKjeIy/BIASoHUHgHQfUAtEANH1K9JWO4Tg58LYAAAAAElFTkSuQmCC`,forest_floor_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAWRJREFUaIHlWTkSgzAMNH6AO16V/78inT+QVDREYB2rg8mWjBHs6rBkb+M1Pu2Euc823uP8uCQ69RD583OfMFsUSAJIcMXQEjUTQCms9bqZQHauqAl4xzYXagIZylOi/RCIUlbzHUq0HwJRyqK+415GD3h5NoyAl2dVBO7URCjNsXGs2ahe6ElwD6GVmlaPpfdC1twISWLPvaV7u7g57y0d7WK02it78BBCq72yF7aRecF9oJGGlHQ9SUBiBJ1D0vXuQ/0K0I0sY8qCbmR3xiQNViTYScxRKmPMLFlGJZ6En0pEtx7wUwmvMLoShl2Fss+BroRhVyGOsqWrEAfWMqzBf55KVEIZApD7gcxKA7kfoIxkl88Velv8pFaZKOK9OVWIqMbOlMQaldFtuYmARmVUW36QZBOolswHyWUSn1+oBrck1kDj5TI7cVMKyb6lfMxQb5m0rtZIiEFO5tAfk8wJ0jD6AhfOowgv6la0AAAAAElFTkSuQmCC`,Stage=({dayCount:e,field:t,isMenuOpen:n=!0,stageFocus:a,useAlternateEndDayButtonPosition:o=!1,viewTitle:s})=>{let l=(0,import_react$24.useRef)(null);(0,import_react$24.useEffect)(()=>{if(l.current){let e=l.current,{style:t}=e;e.scrollTop=0,t.overflow=`hidden`,setTimeout(()=>t.overflow=``,0)}},[a]);let u={[stageFocusType.HOME]:isOctober()?jack_o_lantern_bg_default:isDecember()?winter_bg_default:brown_dot_bg_default,[stageFocusType.SHOP]:yellow_dot_bg_default,[stageFocusType.WORKSHOP]:lavender_dot_bg_default,[stageFocusType.CELLAR]:floorboard_default,[stageFocusType.FIELD]:grass_default,[stageFocusType.COW_PEN]:grass_default,[stageFocusType.FOREST]:forest_floor_default}[a],d=[stageFocusType.FIELD,stageFocusType.COW_PEN,stageFocusType.FOREST].includes(a);return(0,import_jsx_runtime.jsxs)(Div,{className:(0,import_classnames.default)(`Stage`,{"is-october":isOctober(),"is-december":isDecember()}),"data-stage-focus":a,role:`main`,ref:l,sx:t=>({flex:2,imageRendering:`pixelated`,marginLeft:0,overflow:`auto`,padding:`1.5em 1.5em 0`,position:`relative`,zIndex:0,transition:t.transitions.create(`margin-left`,{duration:t.transitions.duration.enteringScreen,easing:t.transitions.easing.easeOut}),"& .stage-background":{backgroundSize:`96px`,bottom:0,left:0,pointerEvents:`none`,position:`fixed`,right:0,top:0,zIndex:-1,...u?{backgroundImage:`url(${u})`}:{},...d?{backgroundSize:`30%`,filter:seasonFilterMap[getCurrentSeason(e)],[`@media (min-width: ${breakpoints.md}px)`]:{backgroundSize:`10%`}}:{},...a===stageFocusType.CELLAR?{backgroundSize:`288px 96px`}:{}},"& h3":{textAlign:`center`},"& h2":{fontSize:`1.2em`},"& .view-title":{fontSize:`2.5em`,marginBottom:`0.6em`,textAlign:`center`,[`@media (min-width: ${breakpoints.largePhone}px)`]:{display:`none`}},"& section":{padding:`0.5em 0`,[`@media (max-width: ${breakpoints.sm}px)`]:{fontSize:`1em`}},...o?{paddingTop:`4em`,[`@media (max-width: ${breakpoints.smallPhone}px)`]:{paddingTop:`4.5em`}}:{},...n?{transitionProperty:`padding, margin-left`,[`@media (max-width: ${breakpoints.sm}px)`]:{padding:0},"& > *":{opacity:1,transition:t.transitions.create(`opacity`,{duration:t.transitions.duration.enteringScreen,easing:t.transitions.easing.easeOut}),[`@media (max-width: ${breakpoints.sm}px)`]:{opacity:0}}}:{marginLeft:`-${layout.sidebarWidth}`,transition:t.transitions.create(`margin-left`,{duration:t.transitions.duration.leavingScreen,easing:t.transitions.easing.sharp}),[`@media (max-width: ${breakpoints.smallPhone}px)`]:{marginLeft:`-${layout.narrowSidebarWidth}px`}}}),children:[(0,import_jsx_runtime.jsx)(`div`,{className:`stage-background`}),(0,import_jsx_runtime.jsx)(`h2`,{className:`view-title`,children:s}),a===stageFocusType.HOME&&(0,import_jsx_runtime.jsx)(Consumer$7,{}),a===stageFocusType.FIELD&&(0,import_jsx_runtime.jsx)(Consumer$10,{columns:t[0].length,rows:t.length}),a===stageFocusType.FOREST&&(0,import_jsx_runtime.jsx)(Forest,{}),a===stageFocusType.SHOP&&(0,import_jsx_runtime.jsx)(Consumer$4,{}),a===stageFocusType.COW_PEN&&(0,import_jsx_runtime.jsx)(Consumer$6,{}),a===stageFocusType.WORKSHOP&&(0,import_jsx_runtime.jsx)(Consumer$1,{}),a===stageFocusType.CELLAR&&(0,import_jsx_runtime.jsx)(Cellar,{}),(0,import_jsx_runtime.jsx)(`div`,{className:`spacer`})]})};Stage.propTypes={dayCount:import_prop_types$1.number.isRequired,field:(0,import_prop_types$1.arrayOf)(import_prop_types$1.array).isRequired,isMenuOpen:import_prop_types$1.bool,stageFocus:import_prop_types$1.string.isRequired,useAlternateEndDayButtonPosition:import_prop_types$1.bool,viewTitle:import_prop_types$1.string.isRequired};function Consumer(e){return(0,import_jsx_runtime.jsx)(FarmhandContext.Consumer,{children:({gameState:t,handlers:n})=>(0,import_jsx_runtime.jsx)(Stage,{...t,...n,...e})})}var scriptRel=`modulepreload`,assetsURL=function(e,t){return new URL(e,t).href},seen={},__vitePreload=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),o=document.querySelector(`meta[property=csp-nonce]`),s=o?.nonce||o?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}a=l(t.map(t=>{if(t=assetsURL(t,n),t=u(t),t in seen)return;seen[t]=!0;let a=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let o=e[n];if(o.href===t&&(!a||o.rel===`stylesheet`))return}let o=document.createElement(`link`);if(o.rel=a?`stylesheet`:scriptRel,a||(o.as=`script`),o.crossOrigin=``,o.href=t,s&&o.setAttribute(`nonce`,s),document.head.appendChild(o),a)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function o(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return a.then(t=>{for(let e of t||[])e.status===`rejected`&&o(e.reason);return e().catch(o)})},autoUpdateMode=`false`,selfDestroying=`false`,auto=autoUpdateMode===`true`,autoDestroy=selfDestroying===`true`;function registerSW(e={}){let{immediate:t=!1,onNeedReload:n,onNeedRefresh:a,onOfflineReady:o,onRegistered:s,onRegisteredSW:l,onRegisterError:u}=e,d,f,m,h=async(e=!0)=>{await f,auto||m?.()};async function v(){if(`serviceWorker`in navigator){if(d=await __vitePreload(async()=>{let{Workbox:e}=await import(`./workbox-window.prod.es5-Bd17z0YL.js`);return{Workbox:e}},[],import.meta.url).then(({Workbox:e})=>new e(`./service-worker.js`,{scope:`./`,type:`classic`})).catch(e=>{u?.(e)}),!d)return;if(m=()=>{d?.messageSkipWaiting()},!autoDestroy)if(auto)d.addEventListener(`activated`,e=>{(e.isUpdate||e.isExternal)&&(n?n():window.location.reload())}),d.addEventListener(`installed`,e=>{e.isUpdate||o?.()});else{let e=!1,t=()=>{e=!0,d?.addEventListener(`controlling`,e=>{e.isUpdate&&(n?n():window.location.reload())}),a?.()};d.addEventListener(`installed`,n=>{n.isUpdate===void 0?n.isExternal===void 0?!e&&o?.():n.isExternal?t():!e&&o?.():n.isUpdate||o?.()}),d.addEventListener(`waiting`,t)}d.register({immediate:t}).then(e=>{l?l(`./service-worker.js`,e):s?.(e)}).catch(e=>{u?.(e)})}}return f=v(),h}function useRegisterSW(e={}){let{immediate:t=!0,onNeedReload:n,onNeedRefresh:a,onOfflineReady:o,onRegistered:s,onRegisteredSW:l,onRegisterError:u}=e,[d,f]=(0,import_react$24.useState)(!1),[m,h]=(0,import_react$24.useState)(!1),[v]=(0,import_react$24.useState)(()=>registerSW({immediate:t,onNeedReload:n,onOfflineReady(){h(!0),o?.()},onNeedRefresh(){f(!0),a?.()},onRegistered:s,onRegisteredSW:l,onRegisterError:u}));return{needRefresh:[d,f],offlineReady:[m,h],updateServiceWorker:v}}var UpdateNotifier=()=>{let{handlers:{handleGameUpdateAvailable:e}}=(0,import_react$24.useContext)(FarmhandContext),{needRefresh:[t],updateServiceWorker:n}=useRegisterSW();return(0,import_react$24.useEffect)(()=>{t&&(e(n),window.addEventListener(`beforeunload`,()=>{n(!0)}))},[t,e,n]),null},commonFetchConfig={mode:`cors`,cache:`no-cache`,credentials:`same-origin`,headers:{"Content-Type":`application/json`},redirect:`follow`,referrerPolicy:`no-referrer`};async function getData(e=``,t={}){let n=new URLSearchParams;return Object.keys(t).forEach(e=>n.append(encodeURIComponent(e),encodeURIComponent(t[e]))),(await fetch(`${e}?${n}`,{...commonFetchConfig,method:`GET`})).json()}async function postData(e=``,t={}){return(await fetch(e,{...commonFetchConfig,method:`POST`,body:JSON.stringify(t)})).json()}var createNewField=()=>Array(10).fill(void 0).map(()=>[,,,,,,].fill(null)),createNewForest=()=>[,].fill(void 0).map(()=>[,,,,].fill(null)),doesMenuObstructStage=()=>window.innerWidth<BREAKPOINTS.MD,getAvailableShopInventory=memoize(e=>inventory.filter(({id:t})=>!(unlockableItems.hasOwnProperty(t)&&!e.items.hasOwnProperty(t)))),getPeerMetadata=e=>{let t=PEER_METADATA_STATE_KEYS.reduce((t,n)=>(t[n]=e[n],t),{});return Object.assign(t,{cowOfferedForTrade:e.cowInventory.find(({id:t})=>t===e.cowIdOfferedForTrade)}),t},getViewList=({isForestUnlocked:e,purchasedCellar:t,purchasedCowPen:n,showHomeScreen:a})=>{let{CELLAR:o,COW_PEN:s,HOME:l,WORKSHOP:u,FOREST:d}=stageFocusType,f=[...STANDARD_VIEW_LIST];return a&&f.unshift(l),e&&f.push(d),n&&f.push(s),f.push(u),t&&f.push(o),f},getValidatedStageFocusFromHash=e=>{let t=getHashQueryParams().get(VIEW_QUERY_PARAM_NAME);if(!t)return;let n=getLevelEntitlements(levelAchieved(e.experience)).stageFocusType[stageFocusType.FOREST];return getViewList({isForestUnlocked:n,purchasedCellar:e.purchasedCellar,purchasedCowPen:e.purchasedCowPen,showHomeScreen:e.showHomeScreen}).find(e=>e===t)},sleep=e=>new Promise(t=>setTimeout(t,e)),{PLANT}=fieldMode,{MULCH}=itemType,FarmhandService=class{static computePlayerInventory=memoize((e,t)=>e.map(({quantity:e,id:n})=>({quantity:e,...itemsMap[n],value:getItemCurrentValue(itemsMap[n],t)})));static getFieldToolInventory=memoize(e=>e.filter(({id:e})=>{let t=itemsMap[e];return typeof t.enablesFieldMode==`string`&&t.enablesFieldMode!==PLANT&&t.type!==MULCH}).map(({id:e,quantity:t})=>({...itemsMap[e],quantity:t})));static getPlantableCropInventory=memoize(e=>e.filter(({id:e})=>itemsMap[e].isPlantableCrop).map(({id:e,quantity:t})=>({...itemsMap[e],quantity:t})));static getMulchInventory=memoize(e=>e.filter(({id:e})=>itemsMap[e]?.type===MULCH).map(({id:e,quantity:t})=>({...itemsMap[e],quantity:t})));static getPlantableTreeInventory=memoize(e=>e.filter(({id:e})=>itemsMap[e]?.isPlantableTree).map(({id:e,quantity:t})=>({...itemsMap[e],quantity:t})));static applyPriceEvents=(e,t,n)=>{let a={...e};return Object.keys(t).forEach(e=>{a[e]=.5}),Object.keys(n).forEach(e=>{a[e]=1.5}),a}},itemIds=Object.keys(itemsMap),getInventoryQuantities=e=>{let t={};for(let e of itemIds)t[e]=0;for(let{id:n,quantity:a}of e)t[n]=a;return t},useFarmhandNavigation=(e,t)=>({openDialogView:(0,import_react$24.useCallback)(t=>{e(e=>({...e,currentDialogView:t,isDialogViewOpen:!0}))},[e]),closeDialogView:(0,import_react$24.useCallback)(()=>{e(e=>({...e,isDialogViewOpen:!1}))},[e]),focusNextView:(0,import_react$24.useCallback)(()=>{document.activeElement?.getAttribute(`role`)!==`tab`&&e(e=>{let n=t.indexOf(e.stageFocus);return{...e,stageFocus:t[(n+1)%t.length]}})},[e,t]),focusPreviousView:(0,import_react$24.useCallback)(()=>{document.activeElement?.getAttribute(`role`)!==`tab`&&e(e=>{let n=t.indexOf(e.stageFocus),a=n===0?t.length-1:(n-1)%t.length;return{...e,stageFocus:t[a]}})},[e,t])}),{floor,random,sin}=Math,libName=`Trystero`,alloc=(e,t)=>Array(e).fill(void 0).map(t),charSet=`0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`,genId=e=>alloc(e,()=>charSet[floor(random()*62)]??``).join(``),selfId=genId(20),all=Promise.all.bind(Promise),isBrowser=typeof window<`u`,{entries,fromEntries,keys,values}=Object,noOp=()=>{},candidateType=`candidate`,resetTimer=e=>(e!==null&&clearTimeout(e),null),mkErr=e=>Error(`${libName}: ${e}`),toErrorMessage=(e,t)=>e instanceof Error&&e.message?e.message:typeof e==`string`&&e?e:toJson(e??t),toError=(e,t)=>e instanceof Error?e:mkErr(toErrorMessage(e,t)),encoder=new TextEncoder,decoder=new TextDecoder,encodeBytes=e=>encoder.encode(e),decodeBytes=e=>decoder.decode(e),toHex=e=>e.reduce((e,t)=>e+t.toString(16).padStart(2,`0`),``),topicPath=(...e)=>e.join(`@`),shuffle=(e,t)=>{let n=[...e],a=()=>{let e=sin(t++)*1e4;return e-floor(e)},o=n.length;for(;o;){let e=floor(a()*o--),t=n[o];n[o]=n[e],n[e]=t}return n},getRelays=(e,t,n,a=!1)=>e.relayConfig?.urls||(a?shuffle(t,strToNum(e.appId)):t).slice(0,e.relayConfig?.redundancy??n),toJson=JSON.stringify,fromJson=e=>{try{return JSON.parse(e)}catch{throw mkErr(`failed to parse JSON: ${e}`)}},strToNum=(e,t=2**53-1)=>e.split(``).reduce((e,t)=>e+t.charCodeAt(0),0)%t,defaultRetryMs=3333,socketRetryPeriods={},reconnectionLockingPromise=null,resolver=null,pauseRelayReconnection=()=>{reconnectionLockingPromise||=new Promise(e=>{resolver=e}).finally(()=>{resolver=null,reconnectionLockingPromise=null})},resumeRelayReconnection=()=>{resolver?.()},makeSocket=(e,t)=>{let n={},a=()=>{let o=new WebSocket(e);o.onclose=()=>{if(reconnectionLockingPromise){reconnectionLockingPromise.then(a);return}socketRetryPeriods[e]??=defaultRetryMs,setTimeout(a,socketRetryPeriods[e]),socketRetryPeriods[e]*=2},o.onmessage=e=>t(String(e.data)),n.socket=o,n.url=o.url,n.ready=new Promise(t=>o.onopen=()=>{t(n),socketRetryPeriods[e]=defaultRetryMs}),n.send=e=>{o.readyState===1&&o.send(e)}};return a(),n},createRelayManager=e=>{let t={},n=new WeakMap,a=e=>{let t=n.get(e);if(!t)throw mkErr(`relay bookkeeping missing registration for relay client`);return t};return{register:(e,a)=>(t[e]=a,n.set(a,e),a),keyOf:a,scoped:()=>{let e={},t=t=>e[t]??={};return{forKey:t,forRelay:e=>t(a(e))}},getSockets:()=>fromEntries(entries(t).flatMap(([t,n])=>{let a=e(n);return a?[[t,a]]:[]}))}},watchOnline=()=>{if(isBrowser){let e=new AbortController;return addEventListener(`online`,resumeRelayReconnection,{signal:e.signal}),addEventListener(`offline`,pauseRelayReconnection,{signal:e.signal}),()=>e.abort()}return noOp},algo=`AES-GCM`,strToSha1={},pack=e=>btoa(String.fromCharCode.apply(null,Array.from(new Uint8Array(e)))),unpack=e=>{let t=atob(e);return new Uint8Array(t.length).map((e,n)=>t.charCodeAt(n)).buffer},hashWith=async(e,t)=>new Uint8Array(await crypto.subtle.digest(e,encodeBytes(t))),sha1=async e=>strToSha1[e]??=Array.from(await hashWith(`SHA-1`,e)).map(e=>e.toString(36)).join(``),genKey=async(e,t,n)=>crypto.subtle.importKey(`raw`,await crypto.subtle.digest({name:`SHA-256`},encodeBytes(`${e}:${t}:${n}`)),{name:algo},!1,[`encrypt`,`decrypt`]),deriveRoomNamespace=async(e,t)=>toHex(await hashWith(`SHA-256`,`${libName}:${e}:${t}`)),joinChar=`$`,ivJoinChar=`,`,encrypt=async(e,t)=>{let n=crypto.getRandomValues(new Uint8Array(16));return n.join(ivJoinChar)+joinChar+pack(await crypto.subtle.encrypt({name:algo,iv:n},await e,encodeBytes(t)))},decrypt=async(e,t)=>{let[n,a]=t.split(joinChar);return decodeBytes(await crypto.subtle.decrypt({name:algo,iv:new Uint8Array(n?.split(ivJoinChar).map(Number)??[])},await e,unpack(a??``)))},offerTtl=57333,offerLeaseTtlMs=18e4,poolSize=20,OfferPool=class{pool=[];pooled=new Set;leased=new Map;recycling=new Set;cleanupTimer=null;active=!1;constructor(e){this.makeOffer=e}get isActive(){return this.active}warmup(){this.pool=[],this.pooled.clear(),alloc(poolSize,this.makeOffer).forEach(e=>this.push(e)),this.active=!0,this.cleanupTimer=setInterval(()=>{this.pool=this.pool.filter(e=>e.isDead?(this.pooled.delete(e),!1):!0)},offerTtl)}push(e){e.isDead||this.pooled.has(e)||this.leased.has(e)||(this.pool.push(e),this.pooled.add(e))}shift(e){let t=[];for(;t.length<e&&this.pool.length>0;){let e=this.pool.shift();if(!e)break;this.pooled.delete(e),t.push(e)}return t}claimLeased(e){let t=this.leased.get(e);t&&(resetTimer(t),this.leased.delete(e))}recycle(e){if(!(e.isDead||this.recycling.has(e))){if(e.connection.remoteDescription){e.destroy();return}if(!this.active){e.destroy();return}this.recycling.add(e),e.setHandlers({connect:noOp,close:noOp,error:noOp}),e.getOffer(!0).then(t=>{if(!t||t.type!==`offer`||e.isDead||!this.active){e.destroy();return}this.push(e)}).catch(()=>e.destroy()).finally(()=>this.recycling.delete(e))}}reclaimLeased(e){let t=this.leased.get(e);t&&(resetTimer(t),this.leased.delete(e),this.recycle(e))}lease(e){this.claimLeased(e),this.leased.set(e,setTimeout(()=>{this.leased.delete(e),this.recycle(e)},offerLeaseTtlMs))}checkout(e,t,n){let a=this.shift(e),o=Math.max(0,e-a.length);o>0&&a.push(...alloc(o,this.makeOffer));let s=async(e,a=!1)=>{try{let a=await n(e);return t?(this.lease(e),{peer:e,offer:a,claim:()=>this.claimLeased(e),reclaim:()=>this.reclaimLeased(e)}):{peer:e,offer:a}}catch(t){if(this.claimLeased(e),this.pooled.delete(e),e.destroy(),!a)return s(this.makeOffer(),!0);throw t}};return all(a.map(e=>s(e)))}getOffers(e,t){return this.checkout(e,!0,t)}destroy(){this.active=!1,this.cleanupTimer&&=(clearInterval(this.cleanupTimer),null),this.pool.forEach(e=>e.destroy()),this.pool=[],this.pooled.clear(),this.leased.forEach((e,t)=>{resetTimer(e),t.destroy()}),this.leased.clear(),this.recycling.forEach(e=>e.destroy()),this.recycling.clear()}},overlapRoomPasswordErr=mkErr(`incorrect password for overlapping room`),createPasswordHandshake=(e,t,n)=>{let a=a=>hashWith(`SHA-256`,`${a}:${e}:${t}:${n}`).then(toHex),o=async(t,n,o)=>{if(!e)return;if(o){let e=genId(36);await t({__trystero_pw:`challenge`,c:e});let{data:o}=await n();if(!o||typeof o!=`object`||o.__trystero_pw!==`response`||typeof o.h!=`string`)throw overlapRoomPasswordErr;let s=await a(e);if(o.h!==s)throw overlapRoomPasswordErr;return}let{data:s}=await n();if(!s||typeof s!=`object`||s.__trystero_pw!==`challenge`||typeof s.c!=`string`)throw overlapRoomPasswordErr;await t({__trystero_pw:`response`,h:await a(s.c)})};return{run:o,compose:t=>e||t?async(e,n,a,s)=>{await o(n,a,s),await t?.(e,n,a,s)}:void 0}},iceTimeout=15e3,disconnectedCloseDelayMs=5e3,iceStateEvent=`icegatheringstatechange`,offerType=`offer`,answerType=`answer`,outOfRangePattern=/out of range/i,rewriteMdnsCandidatesToLoopback=e=>e.replace(/ (\S+\.local) (\d+) typ host/g,` 127.0.0.1 $2 typ host`),peer_default=(e,{trickleIce:t,rtcConfig:n,rtcPolyfill:a,turnConfig:o,_test_only_mdnsHostFallbackToLoopback:s})=>{let l=new(a??RTCPeerConnection)({iceServers:defaultIceServers.concat(o??[]),...n}),u={},d=[],f=[],m=t!==!1,h=[],v=[],y=!1,b=!1,x=null,S=null,C=!1,T=()=>S=resetTimer(S),E=()=>{C||(C=!0,T(),u.close?.())},D=e=>{u.signal?u.signal(e):d.push(e)},O=e=>{let t=u.signal;u.signal=n=>{t?.(n),e(n)},d.length>0&&d.splice(0).forEach(e=>u.signal?.(e))},k=e=>s?rewriteMdnsCandidatesToLoopback(e):e,j=e=>{if(!s||typeof e.candidate!=`string`)return e;let t=rewriteMdnsCandidatesToLoopback(e.candidate);return t===e.candidate?e:{...e,candidate:t}},M=e=>({type:e.localDescription?.type??offerType,sdp:k(e.localDescription?.sdp??``)}),N=()=>{let e=l.remoteDescription?.sdp;return e?e.match(/a=ice-ufrag:([^\s]+)/)?.[1]??null:null},F=()=>(l.remoteDescription?.sdp?.match(/^m=/gm)??[]).length,I=e=>{if(!l.remoteDescription)return!1;let t=F();if(typeof e.sdpMLineIndex==`number`&&t>0&&e.sdpMLineIndex>=t)return!1;let n=N();return!(n&&e.usernameFragment&&e.usernameFragment!==n)},L=async e=>{try{return await l.addIceCandidate(e),!0}catch(t){if(t instanceof Error&&outOfRangePattern.test(t.message)&&typeof e.sdpMLineIndex==`number`)return!1;throw t}},R=async()=>{if(!l.remoteDescription||h.length===0)return;let e=h.splice(0),t=[];for(let n of e){if(!I(n)){t.push(n);continue}await L(n)||t.push(n)}t.length>0&&h.push(...t)},z=async e=>{if(I(e)){await L(e)||h.push(e);return}h.push(e)},B=e=>{e.binaryType=`arraybuffer`,e.bufferedAmountLowThreshold=65535,e.onmessage=e=>{let t=e.data;u.data?u.data(t):f.push(t)},e.onopen=()=>u.connect?.(),e.onclose=E,e.onerror=({error:e})=>u.error?.(toError(e,`data channel error`))},V=async e=>{let t=null;try{await Promise.race([new Promise(t=>{let n=()=>{e.iceGatheringState===`complete`&&(e.removeEventListener(iceStateEvent,n),t())};e.addEventListener(iceStateEvent,n),n()}),new Promise(e=>{t=setTimeout(e,iceTimeout)})])}finally{resetTimer(t)}return M(e)},H=async()=>{let e=m?M(l):await V(l);return D(e),e};e?(x=l.createDataChannel(`data`),B(x)):l.ondatachannel=({channel:e})=>{x=e,B(e)};let U=async(e=!1)=>{if(l.connectionState!==`closed`)try{return y=!0,e&&(l.signalingState!==`stable`&&l.signalingState!==`closed`&&l.localDescription?.type===offerType&&await l.setLocalDescription({type:`rollback`}),typeof l.restartIce==`function`&&l.restartIce()),await l.setLocalDescription(e?await l.createOffer({iceRestart:!0}):void 0),await H()}catch(e){u.error?.(toError(e,`failed to create local offer`))}finally{y=!1}};l.onnegotiationneeded=async()=>U(!1),l.onicecandidate=({candidate:e})=>{if(!m||!e)return;let t=j(typeof e.toJSON==`function`?e.toJSON():{candidate:e.candidate,sdpMid:e.sdpMid,sdpMLineIndex:e.sdpMLineIndex,usernameFragment:e.usernameFragment});D({type:candidateType,sdp:JSON.stringify(t)})},l.onconnectionstatechange=()=>{if(l.connectionState===`connected`||l.connectionState===`connecting`){T();return}if(l.connectionState===`disconnected`){S||=setTimeout(()=>{S=null,l.connectionState===`disconnected`&&E()},disconnectedCloseDelayMs);return}(l.connectionState===`failed`||l.connectionState===`closed`)&&E()},l.ontrack=e=>{let t=e.streams[0];if(t){if(!u.track&&!u.stream){v.push({track:e.track,stream:t});return}u.track?.(e.track,t),u.stream?.(t)}},l.onremovestream=e=>u.stream?.(e.stream);let W=e?new Promise(e=>O(t=>{t.type===offerType&&e(t)})):Promise.resolve();return e&&queueMicrotask(()=>{!y&&l.signalingState===`stable`&&!l.localDescription&&l.connectionState!==`closed`&&l.onnegotiationneeded?.(new Event(`negotiationneeded`))}),{created:Date.now(),connection:l,get channel(){return x},get isDead(){return l.connectionState===`closed`},getOffer:async(t=!1)=>{if(e)return t?U(!0):l.localDescription?.type===offerType?m?M(l):V(l):W},async signal(t){if(t.type===`candidate`){try{let e=JSON.parse(t.sdp);e&&typeof e==`object`&&await z(j(e))}catch(e){u.error?.(toError(e,`failed to parse remote candidate`))}return}if(!(x?.readyState===`open`&&!t.sdp?.includes(`a=rtpmap`)))try{let n={...t,sdp:k(t.sdp)};if(t.type===offerType){if(y||l.signalingState!==`stable`&&!b){if(e)return;await all([l.setLocalDescription({type:`rollback`}),l.setRemoteDescription(n)])}else await l.setRemoteDescription(n);return await R(),await l.setLocalDescription(),await H()}if(t.type===answerType){b=!0;try{await l.setRemoteDescription(n),await R()}finally{b=!1}}}catch(e){u.error?.(toError(e,`failed to apply remote signal`))}},sendData:e=>x?.send(e),destroy:()=>{T(),x?.close(),l.close(),y=!1,b=!1,E()},setHandlers:e=>{let{signal:t,...n}=e;Object.assign(u,n),u.data&&f.length>0&&f.splice(0).forEach(e=>u.data?.(e)),t&&O(t),(u.track||u.stream)&&v.length>0&&v.splice(0).forEach(({track:e,stream:t})=>{u.track?.(e,t),u.stream?.(t)})},offerPromise:W,addStream:e=>e.getTracks().forEach(t=>l.addTrack(t,e)),removeStream:e=>l.getSenders().filter(t=>t.track&&e.getTracks().includes(t.track)).forEach(e=>l.removeTrack(e)),addTrack:(e,t)=>l.addTrack(e,t),removeTrack:e=>{let t=l.getSenders().find(t=>t.track===e);t&&l.removeTrack(t)},replaceTrack:(e,t)=>{let n=l.getSenders().find(t=>t.track===e);if(n)return n.replaceTrack(t)}}},defaultIceServers=[...alloc(3,(e,t)=>`stun:stun${t||``}.l.google.com:19302`),`stun:stun.cloudflare.com:3478`].map(e=>({urls:e})),TypedArray=Object.getPrototypeOf(Uint8Array),typeByteLimit=32,typeIndex=0,nonceIndex=32,tagIndex=34,progressIndex=35,payloadIndex=36,chunkSize=16*2**10-payloadIndex,oneByteMax=255,twoByteMax=65535,buffLowEvent=`bufferedamountlow`,channelCloseEvent=`close`,channelErrorEvent=`error`,unloadEvent=`beforeunload`,defaultHandshakeTimeoutMs=1e4,backpressureWaitTimeoutMs=1e4,internalNs=e=>`@_`+e,beforeUnloadRoomCleanups=new Set,cleanupActiveRoomsOnBeforeUnload=()=>beforeUnloadRoomCleanups.forEach(e=>e()),registerBeforeUnloadCleanup=e=>(beforeUnloadRoomCleanups.add(e),beforeUnloadRoomCleanups.size===1&&addEventListener(unloadEvent,cleanupActiveRoomsOnBeforeUnload),()=>{beforeUnloadRoomCleanups.delete(e),beforeUnloadRoomCleanups.size||removeEventListener(unloadEvent,cleanupActiveRoomsOnBeforeUnload)}),toByteArray=e=>e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength),toHandshakeErrorMessage=e=>{let t=toErrorMessage(e,`unknown error`);return t.startsWith(`handshake `)?t:`handshake failed: ${t}`},waitForBufferedAmountLow=(e,t=backpressureWaitTimeoutMs)=>e.readyState!==`open`||e.bufferedAmount<=e.bufferedAmountLowThreshold?Promise.resolve(e.readyState===`open`):new Promise(n=>{let a=!1,o=null,s=t=>{a||(a=!0,e.removeEventListener(buffLowEvent,l),e.removeEventListener(channelCloseEvent,u),e.removeEventListener(channelErrorEvent,u),resetTimer(o),n(t))},l=()=>s(!0),u=()=>s(!1);if(e.addEventListener(buffLowEvent,l),e.addEventListener(channelCloseEvent,u),e.addEventListener(channelErrorEvent,u),o=setTimeout(()=>s(!1),t),e.readyState!==`open`){s(!1);return}e.bufferedAmount<=e.bufferedAmountLowThreshold&&s(!0)}),room_default=(e,t,n,{onPeerHandshake:a,onHandshakeError:o,handshakeTimeoutMs:s=defaultHandshakeTimeoutMs}={})=>{let l={},u={},d={},f={},m={},h={},v={},y={},b={},x={},S=new WeakMap,C=new WeakMap,T={onPeerJoin:noOp,onPeerLeave:noOp,onPeerStream:noOp,onPeerTrack:noOp},E=noOp,D=(e,t,{includePending:n=!1}={})=>(e?Array.isArray(e)?e:[e]:keys(n?l:u)).flatMap(e=>{let a=n?l[e]:u[e];return a?[Promise.resolve(t(e,a))]:(console.warn(`${libName}: no peer with id ${e} found`),[])}),O=(e,t,n,a,o,s={})=>{let l={k:t,...s,...n===void 0?{}:{m:n}};return D(e,async(e,t)=>{await a(l,e),o(t)})},k=e=>t=>{let n=e.get(t);return n||(n=genId(20),e.set(t,n)),n},j=k(S),M=k(C),N=e=>l[e]??null,F=(e,t,n,a)=>{u[e]&&(N(e)?.__trysteroSetRemoteStreamByKey?.(t,n),typeof n.id==`string`&&N(e)?.__trysteroSetRemoteStreamById?.(n.id,n),T.onPeerStream(n,e,a))},I=(e,t,n,a,o)=>{u[e]&&(N(e)?.__trysteroSetRemoteTrackByKey?.(t,n,a),typeof a.id==`string`&&N(e)?.__trysteroSetRemoteStreamById?.(a.id,a),typeof n.id==`string`&&N(e)?.__trysteroSetRemoteTrackById?.(n.id,n,a),T.onPeerTrack(n,a,e,o))},L=(e,t=mkErr(`peer disconnected`))=>{let n=d[e],a=toError(t,`peer disconnected`);n&&(resetTimer(n.handshakeTimer),n.pendingHandshakePayloads.length=0,n.handshakeWaiters.splice(0).forEach(e=>e.reject(a)),delete d[e]),delete l[e],delete u[e],delete h[e],y[e]?.splice(0).forEach(e=>e.reject(a)),delete y[e],delete b[e],delete x[e]},R=(e,n,a)=>{let o=l[e];if(!o||n&&o!==n)return;let s=!!u[e];L(e,a),o.destroy(),s&&T.onPeerLeave(e),t(e)},z=(e,t={})=>{let n=m[e];if(f[e]&&n){let a=f[e].options;if(a.sendToPending!==!!t.sendToPending||a.receiveWhilePending!==!!t.receiveWhilePending)throw mkErr(`action type "${e}" cannot be redefined`);return n}if(!e)throw mkErr(`action type argument is required`);let a=encodeBytes(e);if(a.byteLength>typeByteLimit)throw mkErr(`action type string "${e}" (${a.byteLength}b) exceeds byte limit (${typeByteLimit}). Hint: choose a shorter name.`);let o={sendToPending:!!t.sendToPending,receiveWhilePending:!!t.receiveWhilePending},s=new Uint8Array(typeByteLimit);s.set(a);let d=0;return f[e]={onComplete:noOp,onProgress:noOp,setOnComplete:t=>{f[e].onComplete=t;let n=v[e];n?.length&&(delete v[e],n.forEach(({payload:e,peerId:n,metadata:a})=>t(e,n,a)))},setOnProgress:t=>{f[e].onProgress=t},send:async(e,t,n,a)=>{let f=typeof e;if(f===`undefined`)throw mkErr(`action data cannot be undefined`);let m=f!==`string`,h=e instanceof Blob,v=h||e instanceof ArrayBuffer||e instanceof TypedArray,y=n!==void 0,b=v?toByteArray(h?await e.arrayBuffer():e):encodeBytes(m?toJson(e):e),x=y?encodeBytes(toJson(n)):null,S=Math.ceil(b.byteLength/chunkSize)+ +!!y||1,C=alloc(S,(e,t)=>{let n=t===S-1,a=!!(y&&t===0),o=new Uint8Array(payloadIndex+(a?x?.byteLength??0:n?b.byteLength-chunkSize*(S-(y?2:1)):chunkSize));return o.set(s),o.set([d>>8,d&oneByteMax],nonceIndex),o.set([Number(n)|Number(a)<<1|Number(v)<<2|Number(m)<<3],tagIndex),o.set([Math.round((t+1)/S*oneByteMax)],progressIndex),o.set(y?a?x??new Uint8Array:b.subarray((t-1)*chunkSize,t*chunkSize):b.subarray(t*chunkSize,(t+1)*chunkSize),payloadIndex),o});return d=d+1&twoByteMax,await all(D(t,async(e,t)=>{let{channel:s}=t,d=0;for(;d<S;){let f=C[d];if(!f||s&&s.bufferedAmount>s.bufferedAmountLowThreshold&&!await waitForBufferedAmountLow(s))break;let m=o.sendToPending?l[e]:u[e];if(!m||m!==t)break;t.sendData(f),d++;let h=f[progressIndex]??oneByteMax;a?.(h/oneByteMax,e,n)}},{includePending:o.sendToPending})),[]},options:o},m[e]=[f[e].send,f[e].setOnComplete,f[e].setOnProgress]},B=e=>z(e),V=(e,t)=>{let n=d[e];if(!n)return;let a=new Uint8Array(t),o=decodeBytes(a.subarray(typeIndex,nonceIndex)).replaceAll(`\0`,``),s=f[o];if(!n.isActive&&!s?.options.receiveWhilePending)return;let l=(a[nonceIndex]??0)<<8|(a[33]??0),u=a[tagIndex]??0,m=a[progressIndex]??0,y=a.subarray(payloadIndex),b=!!(u&1),x=!!(u&2),S=!!(u&4),C=!!(u&8);h[e]??={},h[e][o]??={};let T=h[e][o][l]??={chunks:[]};if(x?T.meta=fromJson(decodeBytes(y)):T.chunks.push(y),s?.onProgress(m/oneByteMax,e,T.meta),!b)return;let E=new Uint8Array(T.chunks.reduce((e,t)=>e+t.byteLength,0));if(T.chunks.reduce((e,t)=>(E.set(t,e),e+t.byteLength),0),delete h[e][o][l],S)s?s.onComplete(E,e,T.meta):(v[o]??=[]).push({payload:E,peerId:e,...T.meta===void 0?{}:{metadata:T.meta}});else{let t=decodeBytes(E),n=C?fromJson(t):t;s?s.onComplete(n,e,T.meta):(v[o]??=[]).push({payload:n,peerId:e,...T.meta===void 0?{}:{metadata:T.meta}})}},H=async()=>{await ie(``),await new Promise(e=>setTimeout(e,99)),entries(l).forEach(([e,t])=>{t.destroy(),L(e,mkErr(`room left`))}),E(),n()},[U,W]=z(internalNs(`ping`)),[G,ee]=z(internalNs(`pong`)),[te,K]=z(internalNs(`signal`)),[q,ne]=z(internalNs(`stream`)),[re,J]=z(internalNs(`track`)),[ie,ae]=z(internalNs(`leave`),{sendToPending:!0,receiveWhilePending:!0}),[oe,se]=z(internalNs(`hsdata`),{sendToPending:!0,receiveWhilePending:!0}),[ce,Y]=z(internalNs(`hsready`),{sendToPending:!0,receiveWhilePending:!0}),le=(e,t)=>{let n=d[e];!n||t&&n.peer!==t||n.isActive||!n.didLocalHandshakePass||!n.didReceiveRemoteReady||(n.isActive=!0,u[e]=n.peer,n.handshakeTimer=resetTimer(n.handshakeTimer),T.onPeerJoin(e))},ue=(e,t,n)=>{let a=d[e];if(!a||a.peer!==t)return;let s=toHandshakeErrorMessage(n);o?.(e,s),R(e,t,mkErr(s))},de=(e,t)=>{let n=d[e];!n||n.peer!==t||n.isActive||(n.didLocalHandshakePass=!0,ce(``,e).catch(n=>ue(e,t,mkErr(`failed sending handshake readiness: ${toErrorMessage(n,`unknown send failure`)}`))),le(e,t))},X=(e,t)=>{let n=d[e];if(!n||n.peer!==t)return;n.handshakeTimer=setTimeout(()=>ue(e,t,mkErr(`handshake timed out after ${s}ms`)),s);let o=async(t,n)=>{await oe(t,e,n)},l=()=>new Promise((n,a)=>{let o=d[e];if(!o||o.peer!==t){a(mkErr(`peer disconnected during handshake`));return}let s=o.pendingHandshakePayloads.shift();if(s){n(s);return}o.handshakeWaiters.push({resolve:n,reject:e=>a(e)})}),u=selfId<e;Promise.resolve(a?.(e,o,l,u)).then(()=>de(e,t)).catch(n=>ue(e,t,toError(n,`handshake failed`)))},fe=e=>e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.k==`string`?{key:e.k,...typeof e.s==`string`?{streamId:e.s}:{},...typeof e.t==`string`?{trackId:e.t}:{},...Object.hasOwn(e,`m`)?{metadata:e.m}:{}}:null;return W((e,t)=>G(``,t)),ee((e,t)=>{let n=y[t];(n?.shift())?.resolve(),n&&!n.length&&delete y[t]}),K((e,t)=>{u[t]&&l[t]?.signal(e)}),ne((e,t)=>{if(!u[t])return;let n=fe(e);if(!n)return;let a=N(t),o=a?.__trysteroGetRemoteStreamByKey?.(n.key)??(n.streamId?a?.__trysteroGetRemoteStreamById?.(n.streamId):void 0);if(o){F(t,n.key,o,n.metadata);return}(b[t]??=[]).push(n)}),J((e,t)=>{if(!u[t])return;let n=fe(e);if(!n)return;let a=N(t),o=a?.__trysteroGetRemoteTrackByKey?.(n.key)??(n.trackId?a?.__trysteroGetRemoteTrackById?.(n.trackId):void 0);if(o){I(t,n.key,o.track,o.stream,n.metadata);return}(x[t]??=[]).push(n)}),ae((e,t)=>R(t,void 0,mkErr(`peer left room`))),se((e,t,n)=>{let a=d[t];if(!a||a.isActive)return;let o=n===void 0?{data:e}:{data:e,metadata:n},s=a.handshakeWaiters.shift();if(s){s.resolve(o);return}a.pendingHandshakePayloads.push(o)}),Y((e,t)=>{let n=d[t];!n||n.isActive||(n.didReceiveRemoteReady=!0,le(t))}),e((e,t)=>{let n=l[t];if(n){if(n===e)return;n.destroy(),L(t,mkErr(`peer replaced`))}l[t]=e,d[t]={peer:e,isActive:!1,didLocalHandshakePass:!1,didReceiveRemoteReady:!1,handshakeTimer:null,pendingHandshakePayloads:[],handshakeWaiters:[]},e.setHandlers({data:e=>V(t,e),stream:e=>{if(!u[t])return;let n=b[t]?.shift();n&&F(t,n.key,e,n.metadata)},track:(e,n)=>{if(!u[t])return;let a=x[t]?.shift();a&&I(t,a.key,e,n,a.metadata)},signal:e=>{u[t]&&te(e,t)},close:()=>R(t,e,mkErr(`peer disconnected`)),error:n=>{console.error(`${libName} peer error:`,n),R(t,e,n)}}),X(t,e)}),isBrowser&&(E=registerBeforeUnloadCleanup(()=>H().catch(noOp))),{makeAction:B,leave:H,ping:async e=>{if(!u[e])throw mkErr(`no active peer with id ${e}`);let t=Date.now();return await new Promise((t,n)=>{let a=y[e]??=[],o=()=>{let t=y[e];if(!t)return;let n=t.indexOf(s);n>-1&&t.splice(n,1),t.length||delete y[e]},s={resolve:()=>{o(),t()},reject:e=>{o(),n(e)}};a.push(s),U(``,e).catch(e=>s.reject(toError(e,`peer disconnected`)))}),Date.now()-t},getPeers:()=>fromEntries(entries(u).map(([e,t])=>[e,t.connection])),addStream:(e,t,n)=>O(t,j(e),n,q,t=>t.addStream(e),{s:e.id}),removeStream:(e,t)=>{D(t,(t,n)=>n.removeStream(e))},addTrack:(e,t,n,a)=>O(n,M(e),a,re,n=>n.addTrack(e,t),{s:t.id,t:e.id}),removeTrack:(e,t)=>{D(t,(t,n)=>n.removeTrack(e))},replaceTrack:(e,t,n,a)=>O(n,M(t),a,re,n=>n.replaceTrack(e,t),{t:e.id}),onPeerJoin:e=>{T.onPeerJoin=e,keys(u).forEach(t=>e(t))},onPeerLeave:e=>T.onPeerLeave=e,onPeerStream:e=>T.onPeerStream=e,onPeerTrack:e=>T.onPeerTrack=e}},roomFrameVersion=1,roomPresenceFrameVersion=2,wrapRoomFrame=(e,t)=>{let n=encodeBytes(e),a=new Uint8Array(3+n.byteLength+t.byteLength);return a[0]=roomFrameVersion,a[1]=n.byteLength>>>8&255,a[2]=n.byteLength&255,a.set(n,3),a.set(t,3+n.byteLength),a},wrapRoomPresenceFrame=(e,t)=>{let n=encodeBytes(e),a=new Uint8Array(4+n.byteLength);return a[0]=roomPresenceFrameVersion,a[1]=Number(t),a[2]=n.byteLength>>>8&255,a[3]=n.byteLength&255,a.set(n,4),a},unwrapFrame=e=>{let t=new Uint8Array(e);if(t.byteLength<3)return null;if(t[0]===roomFrameVersion){let e=(t[1]??0)<<8|(t[2]??0),n=3+e;return e<=0||t.byteLength<n?null:{type:`room`,roomToken:decodeBytes(t.subarray(3,n)),payload:t.subarray(n).slice().buffer}}if(t[0]!==roomPresenceFrameVersion||t.byteLength<4)return null;let n=(t[2]??0)<<8|(t[3]??0),a=4+n;return n<=0||t.byteLength<a?null:{type:`presence`,roomToken:decodeBytes(t.subarray(4,a)),isPresent:t[1]===1}},isPeerUnderlyingStale=e=>{let{connection:t,channel:n}=e;return e.isDead||t.connectionState===`closed`||t.connectionState===`failed`||t.iceConnectionState===`closed`||t.iceConnectionState===`failed`||n?.readyState===`closing`||n?.readyState===`closed`},getConnectedPeerHealth=e=>{if(isPeerUnderlyingStale(e))return`stale`;let{channel:t}=e;return!t||t.readyState!==`open`?`transient`:`live`},SharedPeerManager=class{byApp={};roomPresenceHandlers={};getMap(e){return this.byApp[e]??={}}get(e,t){return this.byApp[e]?.[t]}isPeerStale(e){return isPeerUnderlyingStale(e)}getHealth(e){return this.isPeerStale(e)?`stale`:`live`}setRoomPresenceHandler(e,t){return this.roomPresenceHandlers[e]=t,()=>{this.roomPresenceHandlers[e]===t&&delete this.roomPresenceHandlers[e]}}sendRoomPresence(e,t,n){e.isClosing||e.peer.isDead||e.peer.sendData(wrapRoomPresenceFrame(t,n))}clear(e,t,{destroyPeer:n}){let a=this.byApp[e],o=a?.[t];if(!o||o.isClosing)return;o.idleTimer=resetTimer(o.idleTimer),o.isClosing=!0,n&&!o.peer.isDead&&o.peer.destroy();let s=values(o.bindings);o.bindings={},o.bindingsByToken={},o.controlRoomId=null,delete a[t],s.forEach(e=>{e.handlers.close?.(),e.pendingData.length=0,e.pendingSendData.length=0,e.pendingTracks.length=0}),o.remoteStreamsByKey.clear(),o.remoteStreamsById.clear(),o.remoteTracksByKey.clear(),o.remoteTracksById.clear(),o.pendingDataByToken.clear(),o.remoteRoomTokens.clear(),keys(a).length===0&&delete this.byApp[e]}register(e,t,n,a){let o=this.getMap(e),s=o[t];if(s){if(s.idleTimer=resetTimer(s.idleTimer),s.peer===n)return s;this.clear(e,t,{destroyPeer:!0})}let l={appId:e,peerId:t,peer:n,bindings:{},bindingsByToken:{},pendingDataByToken:new Map,remoteRoomTokens:new Set,idleTimer:null,controlRoomId:null,streamOwners:new Map,trackOwners:new Map,remoteStreamsByKey:new Map,remoteStreamsById:new Map,remoteTracksByKey:new Map,remoteTracksById:new Map,idleMs:a,isClosing:!1};return n.setHandlers({data:e=>this.dispatchData(l,e),signal:e=>this.dispatchSignal(l,e),close:()=>this.clear(e,t,{destroyPeer:!1}),error:n=>{console.error(`${libName} peer error:`,n),this.clear(e,t,{destroyPeer:!1})},track:(e,t)=>this.dispatchTrack(l,e,t)}),o[t]=l,l}bind(e,t,n,{onDetach:a}){let o=n.bindings[e];if(o)return n.idleTimer=resetTimer(n.idleTimer),{proxy:o.proxy,isNew:!1};let s={roomId:e,roomToken:null,roomTokenPromise:t,handlers:{},pendingData:[],pendingSendData:[],pendingTracks:[],detach:noOp,proxy:{}},l=()=>{n.bindings[e]&&(this.pruneRoomOwnership(n,e),delete n.bindings[e],s.roomToken&&n.bindingsByToken[s.roomToken]===s&&delete n.bindingsByToken[s.roomToken],n.controlRoomId===e&&(n.controlRoomId=keys(n.bindings)[0]??null),a(),this.scheduleIdleTimer(n))},u={created:n.peer.created,get connection(){return n.peer.connection},get channel(){return n.peer.channel},get isDead(){return n.peer.isDead},getOffer:e=>n.peer.getOffer(e),signal:e=>n.peer.signal(e),sendData:e=>{if(!s.roomToken){s.pendingSendData.push(e);return}n.peer.sendData(wrapRoomFrame(s.roomToken,e))},destroy:()=>l(),setHandlers:e=>{let{signal:t,...n}=e;Object.assign(s.handlers,n),t&&(s.handlers.signal=t),this.flushBindingQueues(s)},offerPromise:n.peer.offerPromise,addStream:t=>{let a=n.streamOwners.get(t)??new Set,o=a.size===0;a.add(e),n.streamOwners.set(t,a),o&&n.peer.addStream(t)},removeStream:t=>{let a=n.streamOwners.get(t);a&&(a.delete(e),a.size===0&&(n.streamOwners.delete(t),n.peer.removeStream(t)))},addTrack:(t,a)=>{let o=n.trackOwners.get(t)??{stream:a,rooms:new Set},s=o.rooms.size===0;return o.stream=a,o.rooms.add(e),n.trackOwners.set(t,o),s?n.peer.addTrack(t,a):n.peer.connection.getSenders().find(e=>e.track===t)??n.peer.addTrack(t,a)},removeTrack:t=>{let a=n.trackOwners.get(t);a&&(a.rooms.delete(e),a.rooms.size===0&&(n.trackOwners.delete(t),n.peer.removeTrack(t)))},replaceTrack:(e,t)=>{let a=n.trackOwners.get(e);if(a){n.trackOwners.delete(e);let o=n.trackOwners.get(t)??{stream:a.stream,rooms:new Set};a.rooms.forEach(e=>o.rooms.add(e)),n.trackOwners.set(t,o)}return n.peer.replaceTrack(e,t)},__trysteroGetRemoteStreamByKey:e=>n.remoteStreamsByKey.get(e),__trysteroSetRemoteStreamByKey:(e,t)=>void n.remoteStreamsByKey.set(e,t),__trysteroGetRemoteStreamById:e=>n.remoteStreamsById.get(e),__trysteroSetRemoteStreamById:(e,t)=>void n.remoteStreamsById.set(e,t),__trysteroGetRemoteTrackByKey:e=>n.remoteTracksByKey.get(e),__trysteroSetRemoteTrackByKey:(e,t,a)=>void n.remoteTracksByKey.set(e,{track:t,stream:a}),__trysteroGetRemoteTrackById:e=>n.remoteTracksById.get(e),__trysteroSetRemoteTrackById:(e,t,a)=>void n.remoteTracksById.set(e,{track:t,stream:a})};return s.proxy=u,s.detach=l,n.bindings[e]=s,n.controlRoomId??=e,n.idleTimer=resetTimer(n.idleTimer),t.then(t=>{if(n.isClosing||n.bindings[e]!==s)return;s.roomToken=t,n.bindingsByToken[t]=s;let a=n.pendingDataByToken.get(t);a?.length&&(s.pendingData.push(...a),n.pendingDataByToken.delete(t)),s.pendingSendData.splice(0).forEach(e=>n.peer.sendData(wrapRoomFrame(t,e))),this.flushBindingQueues(s)}),{proxy:u,isNew:!0}}pruneRoomOwnership(e,t){e.streamOwners.forEach((n,a)=>{n.delete(t),n.size===0&&(e.streamOwners.delete(a),e.peer.removeStream(a))}),e.trackOwners.forEach((n,a)=>{n.rooms.delete(t),n.rooms.size===0&&(e.trackOwners.delete(a),e.peer.removeTrack(a))})}scheduleIdleTimer(e){e.isClosing||keys(e.bindings).length>0||(e.idleTimer=resetTimer(e.idleTimer),e.idleTimer=setTimeout(()=>{let t=this.byApp[e.appId]?.[e.peerId];!t||keys(t.bindings).length>0||this.clear(e.appId,e.peerId,{destroyPeer:!0})},e.idleMs))}getSignalBinding(e){if(e.controlRoomId){let t=e.bindings[e.controlRoomId];if(t?.handlers.signal)return t}let t=values(e.bindings).find(e=>!!e.handlers.signal);return t?(e.controlRoomId=t.roomId,t):null}flushBindingQueues(e){let{handlers:t}=e;t.data&&e.pendingData.length>0&&e.pendingData.splice(0).forEach(e=>t.data?.(e)),(t.track||t.stream)&&e.pendingTracks.length&&e.pendingTracks.splice(0).forEach(({track:e,stream:n})=>{t.track?.(e,n),t.stream?.(n)})}dispatchData(e,t){let n=unwrapFrame(t);if(!n)return;if(n.type===`presence`){n.isPresent?e.remoteRoomTokens.add(n.roomToken):e.remoteRoomTokens.delete(n.roomToken),this.roomPresenceHandlers[e.appId]?.(e.peerId,n.roomToken,n.isPresent);return}let a=e.bindingsByToken[n.roomToken];if(!a){let t=e.pendingDataByToken.get(n.roomToken)??[];t.push(n.payload),e.pendingDataByToken.set(n.roomToken,t);return}a.handlers.data?a.handlers.data(n.payload):a.pendingData.push(n.payload)}dispatchSignal(e,t){this.getSignalBinding(e)?.handlers.signal?.(t)}dispatchTrack(e,t,n){values(e.bindings).forEach(e=>{if(e.handlers.track||e.handlers.stream){e.handlers.track?.(t,n),e.handlers.stream?.(n);return}e.pendingTracks.push({track:t,stream:n})})}},offerPostAnswerTtlMs=23333,offerIdSize=12,disconnectedPeerGraceMs=7533,answeringTtlMs=23333,legacyCandidateKey=`__legacy__`,offerRelayPlaceholder=`offer-placeholder`,publishCipheredSignalingMessage=(e,t,n,a,o,s)=>{e.toCipher(t).then(t=>{e.isLeaving()||!s()||a(n,toJson(o(t.sdp)))})},makeState=()=>({status:`idle`,offerPeer:null,offerId:null,offerSdp:null,offerInitPromise:null,offerAnswered:!1,offerRelays:[],offerSignalRelays:[],offerSignalBacklog:[],offerRelayTimers:[],offerExpiryTimer:null,connectedPeer:null,connectedPeerUnhealthySinceMs:null,answeringExpiryTimer:null,answeringPeer:null,pendingCandidates:{}}),getState=(e,t)=>e[t]??=makeState(),updateStatus=e=>{e.connectedPeer?e.status=`connected`:e.answeringPeer?e.status=`answering`:e.offerPeer||e.offerRelays.some(Boolean)?e.status=`offering`:e.status=`idle`},clearAnswering=(e,t)=>{e.answeringPeer===t&&(e.answeringExpiryTimer=resetTimer(e.answeringExpiryTimer),e.answeringPeer=null,updateStatus(e))},clearConnectedPeer=(e,t,n)=>{e.connectedPeer&&(e.connectedPeer.isDead||e.connectedPeer.destroy(),e.connectedPeer=null,e.connectedPeerUnhealthySinceMs=null,updateStatus(e))},clearOfferRelay=(e,t)=>{e.offerRelayTimers[t]=resetTimer(e.offerRelayTimers[t]),e.offerRelays[t]&&(e.offerRelays[t]=void 0,updateStatus(e))},clearOfferRelayIfPlaceholder=(e,t)=>{e?.offerRelays[t]===offerRelayPlaceholder&&clearOfferRelay(e,t)},hasRemoteDescription=e=>{if(e.isDead||e.connection.connectionState===`closed`)return!0;try{return!!e.connection.remoteDescription}catch{return!0}},resetOfferState=(e,t)=>{let n=e.offerAnswered;e.offerExpiryTimer=resetTimer(e.offerExpiryTimer),e.offerInitPromise=null,e.offerRelays.forEach((t,n)=>clearOfferRelay(e,n)),e.offerRelays=[],e.offerSignalRelays=[],e.offerRelayTimers=[],e.offerSignalBacklog=[],e.offerPeer&&e.offerPeer!==e.connectedPeer&&(n||hasRemoteDescription(e.offerPeer)?e.offerPeer.isDead||e.offerPeer.destroy():t.recycle(e.offerPeer)),e.offerPeer=null,e.offerId=null,e.offerSdp=null,e.offerAnswered=!1,updateStatus(e)},scheduleAnsweringExpiry=(e,t,n,a)=>{resetTimer(t.answeringExpiryTimer),t.answeringExpiryTimer=setTimeout(()=>{let t=e.peerStates[n];!t||t.connectedPeer||t.answeringPeer!==a||(a.destroy(),clearAnswering(t,a))},answeringTtlMs)},flushBufferedCandidates=async(e,t,n)=>{let a=n?[n,legacyCandidateKey]:[legacyCandidateKey];for(let n of a){let a=e.pendingCandidates[n];if(a?.length){delete e.pendingCandidates[n];for(let e of a)await t.signal(e)}}},scheduleOfferExpiry=(e,t,n,a=offerTtl)=>{resetTimer(t.offerExpiryTimer);let o=t.offerId;t.offerExpiryTimer=setTimeout(()=>{let t=e.peerStates[n];!t||t.connectedPeer||t.offerId!==o||resetOfferState(t,e.offerPool)},a)},ensureOffer=(e,t,n,a)=>t.offerPeer&&t.offerId&&t.offerSdp?Promise.resolve({peer:t.offerPeer,offer:t.offerSdp,offerId:t.offerId}):(t.offerInitPromise||=(async()=>{let o=(await e.offerPool.checkout(1,!1,e.encryptOffer))[0];if(!o)throw mkErr(`failed to allocate offer peer`);let{peer:s,offer:l}=o;t.offerPeer=s,t.offerId=genId(offerIdSize),t.offerSdp=l,t.offerAnswered=!1,t.offerSignalBacklog=[],updateStatus(t);let u=()=>{t.offerPeer===s&&!t.connectedPeer&&resetOfferState(t,e.offerPool),e.disconnectPeer(s,n)};return s.setHandlers({connect:()=>e.connectPeer(s,n,a),signal:e=>{t.offerPeer===s&&(t.offerSignalBacklog.push(e),t.offerSignalRelays.forEach(t=>t?.(e)))},close:u,error:u}),scheduleOfferExpiry(e,t,n),{peer:s,offer:l,offerId:t.offerId}})().finally(()=>t.offerInitPromise=null),t.offerInitPromise),handleAnnouncement=async(e,t,n,a,o)=>{if(a){e.attachSharedPeerToRoom(n,a);return}let s=e.peerStates[n];if(!s||s.connectedPeer||s.answeringPeer||s.offerAnswered){clearOfferRelayIfPlaceholder(s,t);return}if(s.offerRelays[t]!==offerRelayPlaceholder)return;let[l,u]=await all([sha1(topicPath(e.rootTopicPlaintext,n)),ensureOffer(e,s,n,t)]);if(e.isLeaving())return;if(s.connectedPeer||s.answeringPeer||s.offerAnswered||s.offerRelays[t]!==offerRelayPlaceholder){clearOfferRelayIfPlaceholder(s,t);return}s.offerRelayTimers[t]=resetTimer(s.offerRelayTimers[t]),s.offerRelays[t]=!0,updateStatus(s),s.offerRelayTimers[t]=setTimeout(()=>prunePendingOffer(e,n,t),(e.announceIntervals[t]??e.announceIntervalMs)*.9);let d=!1;s.offerSignalRelays[t]=t=>{d&&(e.isLeaving()||s.connectedPeer||s.offerPeer!==u.peer||s.offerId!==u.offerId||t.type!==`candidate`||publishCipheredSignalingMessage(e,t,l,o,e=>({peerId:selfId,offerId:u.offerId,candidate:e}),()=>!s.connectedPeer&&s.offerPeer===u.peer&&s.offerId===u.offerId))},o(l,toJson({peerId:selfId,offerId:u.offerId,offer:u.offer})),d=!0,s.offerSignalBacklog.forEach(e=>s.offerSignalRelays[t]?.(e))},handleOffer=async(e,t,n,a,o,s,l)=>{let u=getState(e.peerStates,n);if(u.answeringPeer||u.offerAnswered)return;let d=!!(u.offerPeer||u.offerRelays.some(Boolean));if((d||s)&&selfId<n)return;d&&resetOfferState(u,e.offerPool);let f=e.initPeer(!1,e.config);u.answeringPeer=f,scheduleAnsweringExpiry(e,u,n,f),updateStatus(u);let m=()=>{clearAnswering(u,f),e.disconnectPeer(f,n)};f.setHandlers({connect:()=>e.connectPeer(f,n,t),close:m,error:m});let h;try{h=await e.toPlain({type:`offer`,sdp:a})}catch{clearAnswering(u,f),e.onJoinError?.({error:`incorrect room password when decrypting offer`,appId:e.appId,peerId:n,roomId:e.roomId});return}if(f.isDead){clearAnswering(u,f);return}let v=await sha1(topicPath(e.rootTopicPlaintext,n));e.isLeaving()||(f.setHandlers({signal:t=>{e.isLeaving()||u.answeringPeer!==f||f.isDead||t.type!==`answer`&&t.type!==`candidate`||publishCipheredSignalingMessage(e,t,v,l,e=>{let n={peerId:selfId};return t.type===`answer`?n.answer=e:n.candidate=e,o&&(n.offerId=o),n},()=>u.answeringPeer===f&&!f.isDead)}}),await f.signal(h),await flushBufferedCandidates(u,f,o))},handleCandidate=async(e,t,n,a,o)=>{let s;try{s=await e.toPlain({type:candidateType,sdp:n})}catch{return}let l=getState(e.peerStates,t),u=a&&l?.offerPeer&&l.offerId===a?l.offerPeer:null,d=l?.answeringPeer??null,f=!a&&l?.offerPeer?l.offerPeer:null,m=o&&!o.isDead?o:u??d??f;if(!m||m.isDead){let e=a??legacyCandidateKey;(l.pendingCandidates[e]??=[]).push(s);return}m.signal(s)},handleAnswer=async(e,t,n,a,o,s)=>{let l;try{l=await e.toPlain({type:`answer`,sdp:a})}catch{e.onJoinError?.({error:`incorrect room password when decrypting answer`,appId:e.appId,peerId:n,roomId:e.roomId});return}if(s)e.offerPool.claimLeased(s),s.setHandlers({connect:()=>e.connectPeer(s,n,t),close:()=>e.disconnectPeer(s,n)}),s.signal(l);else{let t=e.peerStates[n];if(!t||!t.offerPeer||t.offerAnswered||o&&t.offerId&&o!==t.offerId||t.offerPeer.isDead)return;t.offerAnswered=!0,scheduleOfferExpiry(e,t,n,offerPostAnswerTtlMs),t.offerPeer.signal(l)}},prunePendingOffer=(e,t,n)=>{let a=e.peerStates[t];!a||a.connectedPeer||a.offerRelays[n]&&clearOfferRelay(a,n)},createSignalHandler=e=>t=>async(n,a,o)=>{if(e.isLeaving())return;let s=typeof a==`string`?fromJson(a):a,l=typeof s.peerId==`string`?s.peerId:``,u=s.offer,d=s.answer,f=s.candidate,m=s.offerId,h=s.peer,v=s.hasOutgoingOffer===!0;if(l===selfId)return;let y=e.peerStates[l],b=y?.connectedPeer;if(b&&y){let e=getConnectedPeerHealth(b);if(e===`live`){y.connectedPeerUnhealthySinceMs=null;return}if(e===`stale`)clearConnectedPeer(y,l,`message-from-stale-peer`);else{let e=Date.now(),t=y.connectedPeerUnhealthySinceMs??e;if(y.connectedPeerUnhealthySinceMs=t,e-t<disconnectedPeerGraceMs)return;clearConnectedPeer(y,l,`message-from-prolonged-disconnect`)}}let x=e.sharedPeers.get(e.appId,l);x&&e.sharedPeers.getHealth(x.peer)===`stale`&&(e.sharedPeers.clear(e.appId,l,{destroyPeer:!0}),x=void 0);let S=!!(l&&!u&&!d&&!f),[C,T]=await all([e.rootTopicP,e.selfTopicP]);if(!e.isLeaving()&&!(n!==C&&n!==T)){if(S&&!x){let n=getState(e.peerStates,l),a=selfId<l;if(n.answeringPeer||n.connectedPeer||n.offerAnswered)return;if(!a&&!n.offerPeer){let t=await sha1(topicPath(e.rootTopicPlaintext,l));!e.isLeaving()&&!n.connectedPeer&&o(t,toJson({peerId:selfId}));return}if(n.offerRelays[t])return;n.offerRelays[t]=offerRelayPlaceholder,updateStatus(n)}if(x&&(u||d||f)){if(x.bindings[e.roomId])return;e.attachSharedPeerToRoom(l,x);return}if(S)return handleAnnouncement(e,t,l,x,o);if(u)return handleOffer(e,t,l,u,m,v,o);if(f)return handleCandidate(e,l,f,m,h);if(d)return handleAnswer(e,t,l,d,m,h)}},announceIntervalMs=5333,announceWarmupIntervalsMs=[233,533,1333],sharedPeerIdleMsDefault=123333,strategy_default=({init:e,subscribe:t,announce:n})=>{let a={},o={},s={},l={},u=new SharedPeerManager,d=()=>values(a).some(e=>keys(e).length>0),f=e=>o[e]??={},m=e=>s[e]??={},h=(e,t,n)=>{u.getHealth(e.peer)===`live`&&u.sendRoomPresence(e,t,n)},v=(e,t)=>{entries(o[e]??{}).forEach(([n,a])=>{let{roomToken:s,roomTokenPromise:l}=a;if(s){h(t,s,!0);return}l.then(s=>{o[e]?.[n]===a&&a.roomToken===s&&(u.get(e,t.peerId)!==t||t.isClosing||h(t,s,!0))})})},y=(e,t,n)=>values(u.getMap(e)).forEach(e=>h(e,t,n)),b=e=>{l[e]||(l[e]=u.setRoomPresenceHandler(e,(t,n,a)=>{if(!a)return;let l=u.get(e,t),d=s[e]?.[n];!l||!d||o[e]?.[d]?.attachSharedPeerToRoom(t,l)}))},x=e=>{a[e]&&keys(a[e]).length>0||(l[e]?.(),delete l[e],delete o[e],delete s[e])},S=!1,C=[],T=null,E=noOp;return(l,h,D)=>{if(!l)throw mkErr(`requires a config map as the first argument`);if(D&&typeof D!=`object`)throw mkErr(`third argument must be a callbacks object`);let{appId:O}=l,k=D?.onJoinError,j=D?.onPeerHandshake,M=D?.handshakeTimeoutMs;if(!O)throw mkErr(`config map is missing appId field`);if(!h)throw mkErr(`roomId argument required`);if(M!==void 0&&(!Number.isFinite(M)||M<=0))throw mkErr(`handshakeTimeoutMs must be a positive number`);if(a[O]?.[h])return a[O][h];b(O);let N=topicPath(libName,O,h),F=sha1(N),I=sha1(topicPath(N,selfId)),L=genKey(l.password??``,O,h),R=deriveRoomNamespace(O,h),z=l._test_only_sharedPeerIdleMs??sharedPeerIdleMsDefault,B=!1,V=e=>async t=>({type:t.type,sdp:await e(L,t.sdp)}),H=V(decrypt),U=V(encrypt),W=u.getMap(O);T||=new OfferPool(()=>peer_default(!0,l));let G=T,ee=async e=>{let t=await e.getOffer(Date.now()-e.created>offerTtl);if(!t||t.type!==`offer`)throw mkErr(`failed to get offer for peer`);return(await U(t)).sdp},te=(e,t)=>{let n=getState(K.peerStates,e);n.answeringExpiryTimer=resetTimer(n.answeringExpiryTimer),n.answeringPeer=null;let{proxy:a,isNew:o}=u.bind(h,R,t,{onDetach:()=>{let n=K.peerStates[e];n?.connectedPeer===t.peer&&(n.connectedPeer=null,n.connectedPeerUnhealthySinceMs=null,updateStatus(n))}});n.connectedPeer=t.peer,n.connectedPeerUnhealthySinceMs=null,updateStatus(n),o&&ie(a,e),resetOfferState(n,G)},K={appId:O,roomId:h,config:l,peerStates:{},rootTopicPlaintext:N,rootTopicP:F,selfTopicP:I,toPlain:H,toCipher:U,isLeaving:()=>B,onJoinError:k,sharedPeers:u,offerPool:G,encryptOffer:ee,initPeer:peer_default,connectPeer:(e,t,n)=>{if(B){e.destroy();return}let a=getState(K.peerStates,t);if(a.connectedPeer){let n=W[t];if(n&&a.connectedPeer===n.peer&&n.bindings[h])return;a.connectedPeer!==e&&!e.isDead&&e.destroy();return}let o=W[t];if(o&&u.getHealth(o.peer)===`stale`&&(u.clear(O,t,{destroyPeer:!0}),o=void 0),o&&o.peer!==e){e.isDead||e.destroy(),te(t,o);return}let s=!o;o||=u.register(O,t,e,z),te(t,o),s&&v(O,o)},disconnectPeer:(e,t)=>{if(B)return;let n=K.peerStates[t];n?.connectedPeer===e&&clearConnectedPeer(n,t,`close-event`)},attachSharedPeerToRoom:te,announceIntervals:[],announceIntervalMs},q=createSignalHandler(K);if(!S){let t=e(l);G.warmup(),C=(Array.isArray(t)?t:[t]).map(e=>Promise.resolve(e)),S=!0,E=l.relayConfig?.manualReconnection?noOp:watchOnline()}K.announceIntervals=C.map(()=>announceIntervalMs);let ne=C.map(()=>0),re=[],J=C.map(async(e,n)=>t(await e,await F,await I,q(n),e=>G.getOffers(e,ee)));all([F,I]).then(([e,t])=>{if(B)return;let a=async(o,s)=>{if(B)return;let l=await n(o,e,t);if(B)return;typeof l==`number`&&(K.announceIntervals[s]=l);let u=ne[s]??0;ne[s]=u+1;let d=K.announceIntervals[s]??announceIntervalMs,f=announceWarmupIntervalsMs[u];re[s]=setTimeout(()=>{a(o,s)},typeof f==`number`?Math.min(d,f):d)};J.forEach(async(e,t)=>{if(await e,B)return;let n=await C[t];n&&!B&&a(n,t)})});let ie=noOp,{compose:ae}=createPasswordHandshake(l.password??``,O,h),oe=ae(j),se={...oe?{onPeerHandshake:oe}:{},...M===void 0?{}:{handshakeTimeoutMs:M},onHandshakeError:(e,t)=>k?.({error:t.replace(/^handshake failed: /,``),appId:O,peerId:e,roomId:h})};a[O]??={};let ce=f(O),Y=room_default(e=>ie=e,e=>{if(B)return;let t=K.peerStates[e];t?.connectedPeer&&(t.connectedPeer=null,updateStatus(t))},()=>{B=!0,ie=noOp;let e=o[O]?.[h];e?.roomToken&&(y(O,e.roomToken,!1),delete s[O]?.[e.roomToken],s[O]&&!keys(s[O]).length&&delete s[O]),o[O]&&(delete o[O][h],keys(o[O]).length||delete o[O]),entries(K.peerStates).forEach(([e,t])=>{if(t.answeringExpiryTimer=resetTimer(t.answeringExpiryTimer),t.connectedPeer&&!t.connectedPeer.isDead){let n=W[e];(!n||n.peer!==t.connectedPeer)&&t.connectedPeer.destroy()}t.answeringPeer&&!t.answeringPeer.isDead&&t.answeringPeer.destroy(),resetOfferState(t,G),t.connectedPeer=null,t.answeringPeer=null,updateStatus(t)}),a[O]&&(delete a[O][h],keys(a[O]).length===0&&delete a[O]),re.forEach(resetTimer),J.forEach(async e=>{(await e)()}),!d()&&(S=!1,G.destroy(),T=null,E(),x(O))},se),le={roomToken:null,roomTokenPromise:R,attachSharedPeerToRoom:te};return ce[h]=le,R.then(e=>{B||o[O]?.[h]!==le||(le.roomToken=e,m(O)[e]=h,values(W).forEach(t=>{t.remoteRoomTokens.has(e)&&te(t.peerId,t)}),y(O,e,!0))}),a[O][h]=Y}},relayManager=createRelayManager(e=>e.socket),topicToInfoHash={},infoHashToTopic={},announceIntervals=relayManager.scoped(),announceFns=relayManager.scoped(),subscriptionTokens=relayManager.scoped(),trackerAnnounceMs={},handledSignals={},msgHandlers=relayManager.scoped(),roomOutstandingOffers={},roomOfferGenerationPromises={},roomSubscriberCounts={},trackerAction=`announce`,hashLimit=20,offerPoolSize=3,defaultAnnounceMs=1e4,maxAnnounceMs=2e4,offerRetentionMs=12e4,signalDedupeWindowMs=4e3,defaultRedundancy=3,getInfoHash=async e=>{if(topicToInfoHash[e])return topicToInfoHash[e];let t=(await sha1(e)).slice(0,hashLimit);return topicToInfoHash[e]=t,infoHashToTopic[t]=e,t},send=async(e,t,n)=>e.send(toJson({action:trackerAction,info_hash:await getInfoHash(t),peer_id:selfId,...n})),warn=(e,t,n=!1)=>console.warn(`${libName}: torrent tracker ${n?`failure`:`warning`} from ${e} - ${t}`),getRoomOutstandingOffers=e=>roomOutstandingOffers[e]??={},deleteRoomOfferBookkeeping=e=>{delete roomOutstandingOffers[e],delete roomOfferGenerationPromises[e]},claimOutstandingOffer=(e,t)=>{let n=roomOutstandingOffers[e],a=n?.[t];if(a)return delete n[t],a.claim?.(),!keys(n).length&&!roomSubscriberCounts[e]&&deleteRoomOfferBookkeeping(e),a},reclaimOutstandingOffer=(e,t)=>{let n=roomOutstandingOffers[e],a=n?.[t];a&&(delete n[t],a.reclaim?.(),!keys(n).length&&!roomSubscriberCounts[e]&&deleteRoomOfferBookkeeping(e))},reclaimAllOutstandingOffers=e=>{keys(getRoomOutstandingOffers(e)).forEach(t=>reclaimOutstandingOffer(e,t)),deleteRoomOfferBookkeeping(e)},pruneOutstandingOffers=e=>{let t=Date.now();entries(getRoomOutstandingOffers(e)).forEach(([n,a])=>{t-a.createdAt>offerRetentionMs&&reclaimOutstandingOffer(e,n)})},ensureOutstandingOffers=async(e,t)=>{for(;roomOfferGenerationPromises[e];)await roomOfferGenerationPromises[e];let n=(async()=>{pruneOutstandingOffers(e);let n=getRoomOutstandingOffers(e),a=keys(n).length,o=Math.max(0,offerPoolSize-a);o>0&&(await t(o)).forEach(e=>{n[genId(hashLimit)]={...e,createdAt:Date.now()}})})().finally(()=>{roomOfferGenerationPromises[e]===n&&delete roomOfferGenerationPromises[e]});return roomOfferGenerationPromises[e]=n,await n,getRoomOutstandingOffers(e)},joinRoomStrategy=strategy_default({init:e=>getRelays(e,defaultRelayUrls,defaultRedundancy).map(e=>{let t=relayManager.register(e,makeSocket(e,n=>{let a=fromJson(n),o=a[`failure reason`],s=a[`warning message`],{interval:l}=a,u=a.info_hash?infoHashToTopic[a.info_hash]:void 0;if(o){warn(t.url,o,!0);return}if(s&&warn(t.url,s),l&&l*1e3>(trackerAnnounceMs[t.url]??defaultAnnounceMs)&&u&&announceFns.forKey(e)[u]){let n=Math.min(l*1e3,maxAnnounceMs),a=announceIntervals.forKey(e),o=announceFns.forKey(e);a[u]&&clearInterval(a[u]),trackerAnnounceMs[t.url]=n;let s=o[u];s&&(a[u]=setInterval(()=>{s()},n))}if((a.offer||a.answer)&&u&&a.offer_id){if(a.peer_id===selfId)return;let t=`${u}:${a.offer?`offer`:`answer`}:${a.offer_id}:${a.peer_id??``}`,n=Date.now(),o=handledSignals[t];if(typeof o==`number`&&n-o<signalDedupeWindowMs)return;handledSignals[t]=n,entries(handledSignals).forEach(([e,t])=>{n-t>signalDedupeWindowMs*6&&delete handledSignals[e]}),msgHandlers.forKey(e)[u]?.(a)}}));return t.ready}),subscribe:(e,t,n,a,o)=>{let s=msgHandlers.forRelay(e),l=announceFns.forRelay(e),u=announceIntervals.forRelay(e),d=subscriptionTokens.forRelay(e),f=Symbol(t);d[t]=f,roomSubscriberCounts[t]=(roomSubscriberCounts[t]??0)+1;let m=n=>{if(n.offer&&n.peer_id&&n.offer_id)a(t,{offer:n.offer.sdp,peerId:n.peer_id,hasOutgoingOffer:keys(getRoomOutstandingOffers(t)).length>0},(a,o)=>void send(e,t,{answer:{type:`answer`,sdp:fromJson(o).answer},offer_id:n.offer_id,to_peer_id:n.peer_id}));else if(n.answer&&n.offer_id&&n.peer_id){let e=claimOutstandingOffer(t,n.offer_id);e&&a(t,{answer:n.answer.sdp,peerId:n.peer_id,peer:e.peer},()=>{})}};s[t]=m;let h=async()=>{d[t]===f&&send(e,t,{numwant:offerPoolSize,offers:entries(await ensureOutstandingOffers(t,o)).map(([e,{offer:t}])=>({offer_id:e,offer:{type:`offer`,sdp:t}}))})};return trackerAnnounceMs[e.url]=defaultAnnounceMs,l[t]=h,u[t]=setInterval(h,trackerAnnounceMs[e.url]),h(),()=>{if(roomSubscriberCounts[t]=Math.max(0,(roomSubscriberCounts[t]??1)-1),roomSubscriberCounts[t]||delete roomSubscriberCounts[t],d[t]!==f){roomSubscriberCounts[t]||reclaimAllOutstandingOffers(t);return}let e=u[t];e&&(clearInterval(e),delete u[t]),s[t]===m&&delete s[t],l[t]===h&&delete l[t],delete d[t],roomSubscriberCounts[t]||reclaimAllOutstandingOffers(t)}},announce:e=>trackerAnnounceMs[e.url]}),joinRoom=(e,t,n)=>joinRoomStrategy({...e,trickleIce:e.trickleIce??!1},t,n),getRelaySockets=relayManager.getSockets,defaultRelayUrls=[`tracker.webtorrent.dev`,`tracker.openwebtorrent.com`,`tracker.btorrent.xyz`,`tracker.files.fm:7073/announce`].map(e=>`wss://`+e),require_lodash_throttle=__commonJSMin(((e,t)=>{var n=`Expected a function`,a=NaN,o=`[object Symbol]`,s=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,d=/^0o[0-7]+$/i,f=parseInt,m={}.Object===Object&&{},h=typeof self==`object`&&self&&self.Object===Object&&self,v=m||h||Function(`return this`)(),y=Object.prototype.toString,b=Math.max,x=Math.min,S=function(){return v.Date.now()};function C(e,t,a){var o,s,l,u,d,f,m=0,h=!1,v=!1,y=!0;if(typeof e!=`function`)throw TypeError(n);t=k(t)||0,E(a)&&(h=!!a.leading,v=`maxWait`in a,l=v?b(k(a.maxWait)||0,t):l,y=`trailing`in a?!!a.trailing:y);function C(t){var n=o,a=s;return o=s=void 0,m=t,u=e.apply(a,n),u}function T(e){return m=e,d=setTimeout(j,t),h?C(e):u}function D(e){var n=e-f,a=e-m,o=t-n;return v?x(o,l-a):o}function O(e){var n=e-f,a=e-m;return f===void 0||n>=t||n<0||v&&a>=l}function j(){var e=S();if(O(e))return M(e);d=setTimeout(j,D(e))}function M(e){return d=void 0,y&&o?C(e):(o=s=void 0,u)}function N(){d!==void 0&&clearTimeout(d),m=0,o=f=s=d=void 0}function F(){return d===void 0?u:M(S())}function I(){var e=S(),n=O(e);if(o=arguments,s=this,f=e,n){if(d===void 0)return T(f);if(v)return d=setTimeout(j,t),C(f)}return d===void 0&&(d=setTimeout(j,t)),u}return I.cancel=N,I.flush=F,I}function T(e,t,a){var o=!0,s=!0;if(typeof e!=`function`)throw TypeError(n);return E(a)&&(o=`leading`in a?!!a.leading:o,s=`trailing`in a?!!a.trailing:s),C(e,t,{leading:o,maxWait:t,trailing:s})}function E(e){var t=typeof e;return!!e&&(t==`object`||t==`function`)}function D(e){return!!e&&typeof e==`object`}function O(e){return typeof e==`symbol`||D(e)&&y.call(e)==`[object Symbol]`}function k(e){if(typeof e==`number`)return e;if(O(e))return a;if(E(e)){var t=typeof e.valueOf==`function`?e.valueOf():e;e=E(t)?t+``:t}if(typeof e!=`string`)return e===0?e:+e;e=e.replace(s,``);var n=u.test(e);return n||d.test(e)?f(e.slice(2),n?2:8):l.test(e)?a:+e}t.exports=T})),import_lodash_throttle=__toESM(require_lodash_throttle()),endpoints={getMarketData:`https://farmhand.vercel.app/api/get-market-data`,postDayResults:`https://farmhand.vercel.app/api/post-day-results`},features=Object.keys({BASE_URL:`./`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_API_ROOT:`https://farmhand.vercel.app/`,VITE_FARMHAND_PACKAGE_VERSION:`1.23.0`,VITE_NAME:`@jeremyckahn/farmhand`,VITE_TURN_CREDENTIAL:``,VITE_TURN_USERNAME:``}).reduce((e,t)=>{let n=t.match(/VITE_ENABLE_(.*)/);return n&&(e[n[1]]=!0),e},{}),searchParams=new URLSearchParams(import_window.default.location?.search);for(let e of searchParams.keys()){let t=e.match(/enable_(.*)/);t&&(features[t[1]]=!0)}var rtcConfig={iceServers:[{urls:`stun:stun.relay.metered.ca:80`}]},handlePeerMetadataRequest=(e,t,n)=>{e.updatePeer(e,t,n)},handleCowTradeRequest=async(e,{cowOffered:t,cowRequested:n},a)=>{let o=!1;e.setState(e=>{let{allowCustomPeerCowNames:s,cowIdOfferedForTrade:l,cowsTraded:u,cowInventory:d,playerId:f,isAwaitingCowTradeRequest:m,peers:h,sendCowAccept:v,sendCowReject:y}=e;if(!v||!y)return console.error(`Peer connection not set up correctly`),null;let b=d.find(({id:e})=>e===l);if(m||n.id!==l||!b)return y({reason:cowTradeRejectionReason.REQUESTED_COW_UNAVAILABLE},a),null;let x={...t,timesTraded:t.originalOwnerId===f?t.timesTraded:t.timesTraded+1},[,S]=Object.entries(h).find(([,e])=>e?.playerId===x.ownerId)??[];return S?(e=changeCowAutomaticHugState(e,b,!1),e=removeCowFromInventory(e,b),e=addCowToInventory(e,{...x,ownerId:f}),e=showNotification(e,COW_TRADED_NOTIFICATION(``,b,t,f,s),`success`),v({...b,isUsingHuggingMachine:!1},a),o=!0,{...e,cowIdOfferedForTrade:x.id,cowsTraded:x.originalOwnerId===f?u:u+1,isAwaitingCowTradeRequest:!0,selectedCowId:x.id,peers:{...h,[a]:{...S,cowOfferedForTrade:{...b,ownerId:S.playerId}}}}):(console.error(`No data for peer ${x.ownerId}`),null)},async()=>{o&&(await sleep(750),await e.persistState(),e.showNotification(PROGRESS_SAVED_MESSAGE,`info`),e.setState(()=>({isAwaitingCowTradeRequest:!1})))})},handleCowTradeRequestAccept=(e,t,n)=>{let a=!1;e.setState(e=>{let{allowCustomPeerCowNames:o,cowIdOfferedForTrade:s,cowInventory:l,cowsTraded:u,cowTradeTimeoutId:d,playerId:f,peers:m}=e,h=l.find(({id:e})=>e===s);if(!h)return console.error(`handleCowTradeRequestAccept: cow with ID ${s} is no longer available`),e=showNotification(e,UNKNOWN_COW_TRADE_FAILURE,`error`),{...e,isAwaitingCowTradeRequest:!1};let[,v]=Object.entries(m).find(([,e])=>{let{playerId:n}=e;return n===t.ownerId})||[],y=t.originalOwnerId===f,b={...t,timesTraded:y?t.timesTraded:t.timesTraded+1};return e=removeCowFromInventory(e,h),e=addCowToInventory(e,{...b,ownerId:f}),e=showNotification(e,COW_TRADED_NOTIFICATION(``,h,b,f,o),`success`),y||(e=addExperience(e,EXPERIENCE_VALUES.COW_TRADED)),d&&clearTimeout(d),a=!0,{...e,cowsTraded:b.originalOwnerId===f?u:u+1,cowTradeTimeoutId:null,isAwaitingCowTradeRequest:!1,cowIdOfferedForTrade:b.id,selectedCowId:b.id,peers:{...m,[n]:{...v,cowOfferedForTrade:{...h,ownerId:v.playerId}}}}},async()=>{a&&(await e.persistState(),e.showNotification(PROGRESS_SAVED_MESSAGE,`info`))})},handleCowTradeRequestReject=(e,{reason:t})=>{let{cowTradeTimeoutId:n}=e.state;typeof n==`number`&&clearTimeout(n),e.setState({cowTradeTimeoutId:null,isAwaitingCowTradeRequest:!1}),e.showNotification(REQUESTED_COW_TRADE_UNAVAILABLE,`error`)},relayRedundancy=4,useFarmhandNetwork=(e,t,n,a,o,s,l,u)=>{let{hasBooted:d,isOnline:f,room:m,redirect:h,heartbeatTimeoutId:v,peerRoom:y,sendPeerMetadata:b}=e,x=(0,import_react$24.useCallback)(e=>(0,import_lodash_throttle.default)((...n)=>{e(...n),t(e=>({...e,pendingPeerMessages:[]}))},5e3,{trailing:!0}),[t]),S=(0,import_react$24.useCallback)(()=>{typeof a.current?.state?.cowTradeTimeoutId==`number`&&(n.current.showNotification(REQUESTED_COW_TRADE_UNAVAILABLE,`error`),console.error(`Cow trade request timed out`),t(e=>({...e,cowTradeTimeoutId:null,isAwaitingCowTradeRequest:!1})))},[t,n,a]),C=(0,import_react$24.useCallback)(o=>{let{cowIdOfferedForTrade:s,cowInventory:l,peers:u,sendCowTradeRequest:d}=a.current?.state??e;if(!d)return;let{ownerId:f}=o,[m]=Object.entries(u).find(([,e])=>e?.playerId===f)??[];if(!m){console.error(`Owner not found for cow ${JSON.stringify(o)}`);return}if(l.find(({id:e})=>e===o.id)){console.error(`Cow ID ${o.id} is already in inventory`),n.current.showNotification(COW_ALREADY_OWNED,`error`);return}let h=l.find(({id:e})=>e===s);if(!h){console.error(`Cow ID ${s} not found`);return}let v=setTimeout(S,COW_TRADE_TIMEOUT);d({cowOffered:{...h,isUsingHuggingMachine:!1},cowRequested:o},m),t(e=>({...e,cowTradeTimeoutId:v,isAwaitingCowTradeRequest:!0}))},[t,S,n,a]),T=(0,import_react$24.useCallback)(()=>{t(e=>(clearTimeout(e.heartbeatTimeoutId??-1),e));let e=import_window.default.setTimeout(()=>{t(e=>({...e,money:moneyTotal(e.money,e.activePlayers??0)})),T()},HEARTBEAT_INTERVAL_PERIOD);t(t=>({...t,heartbeatTimeoutId:e}))},[t]),E=(0,import_react$24.useCallback)(async()=>{let{isOnline:e,priceCrashes:o,priceSurges:s,room:l,playerId:u,peerRoom:d}=a.current.state;if(e){n.current.showNotification(CONNECTING_TO_SERVER,`info`);try{t(e=>({...e,isAwaitingNetworkRequest:!0,peers:{}})),d?.leave();let{valueAdjustments:e}=await getData(endpoints.getMarketData,{farmId:u,room:l});T(),t(t=>({...t,activePlayers:1,peerRoom:joinRoom({appId:`@jeremyckahn/farmhand`,rtcConfig},l),valueAdjustments:FarmhandService.applyPriceEvents(e,o,s)})),n.current.showNotification(CONNECTED_TO_ROOM(``,l),`success`)}catch(e){n.current.showNotification(SERVER_ERROR,`error`),console.error(e),t(e=>({...e,redirect:withCurrentHashQuery(`/`),cowIdOfferedForTrade:``}))}t(e=>({...e,isAwaitingNetworkRequest:!1,isAwaitingCowTradeRequest:!1}))}},[T,n,a,t]),D=(0,import_react$24.useCallback)((e,t)=>{n.current.prependPendingPeerMessage(e,t)},[n]);return(0,import_react$24.useEffect)(()=>{if(!d||!o)return;let e=decodeURIComponent(s),S=l.startsWith(`/online`),C=!!h&&h!==o.redirect;if(!C&&(S!==f||e!==m)?t(t=>({...t,isOnline:S,redirect:``,room:e})):h&&!C&&S===f&&e===m&&t(e=>({...e,redirect:``})),(f!==o.isOnline||m!==o.room)&&(f&&E(),!f&&typeof v==`number`&&(clearTimeout(v),t(e=>({...e,activePlayers:null,heartbeatTimeoutId:null,peerRoom:null})))),f===!1&&o.isOnline===!0&&n.current.showNotification(DISCONNECTED_FROM_SERVER,`info`),y!==o.peerRoom)if(y){y.onPeerJoin(e=>n.current.addPeer(e)),y.onPeerLeave(e=>n.current.removePeer(e));let[e,o]=y.makeAction(`peerMetadata`);o((...e)=>handlePeerMetadataRequest(a.current,e[0],e[1]));let[s,l]=y.makeAction(`cowTrade`);l((...e)=>handleCowTradeRequest(a.current,e[0],e[1]));let[d,f]=y.makeAction(`cowAccept`);f((...e)=>handleCowTradeRequestAccept(a.current,e[0],e[1]));let[m,h]=y.makeAction(`cowReject`);h((...e)=>handleCowTradeRequestReject(a.current,e[0])),t(t=>({...t,getCowAccept:f,getCowReject:h,getCowTradeRequest:l,getPeerMetadata:o,pendingPeerMessages:[],sendCowAccept:d,sendCowReject:m,sendCowTradeRequest:s,sendPeerMetadata:x(e)})),e(u)}else o.peerRoom?.leave(),t(e=>({...e,peers:{},sendPeerMetadata:null}));b?.(u)},[d,f,m,h,v,y,b,o,s,l,E,x,u,n,a,t]),{syncToRoom:E,scheduleHeartbeat:T,wrapSendPeerMetadata:x,tradeForPeerCow:C,handleCowTradeTimeout:S,messagePeers:D}},computeMarketPositions=(e,t,n)=>n.reduce((n,{id:a,quantity:o})=>{let s=e[a]||0,l=t[a]||0;return itemsMap[a].doesPriceFluctuate&&s!==o&&(o<s||o<l?n[a]=-1:(o>s||o>l)&&(n[a]=1)),n},{}),useFarmhandDayAdvancement=(e,t,n,a,o)=>{let s=(0,import_react$24.useCallback)(async()=>{await n.localforage?.clear(),a.current.showNotification(DATA_DELETED)},[n.localforage,a]),l=(0,import_react$24.useCallback)((e,t={})=>n.localforage?.setItem(`state`,reduceByPersistedKeys({...e,...t})),[n.localforage]),u=(0,import_react$24.useCallback)(async()=>{let n=[],a=null;t(e=>({...e,isAwaitingNetworkRequest:!0}));let o;if(e.current.isOnline){let{inventory:s,room:l,todaysPurchases:u,todaysStartingInventory:d}=e.current,f=computeMarketPositions(d,u,s);try{o=(await postData(endpoints.postDayResults,{positions:f,room:l})).valueAdjustments,Object.keys(f).length&&(n.push({message:POSITIONS_POSTED_NOTIFICATION(``,`You`,f),severity:`info`}),a=POSITIONS_POSTED_NOTIFICATION(``,``,f))}catch(e){n.push({message:SERVER_ERROR,severity:`error`}),t(e=>({...e,redirect:withCurrentHashQuery(`/`),cowIdOfferedForTrade:``,isAwaitingNetworkRequest:!1})),console.error(e)}}return{broadcastedPositionMessage:a,serverMessages:n,serverValueAdjustments:o}},[e,t]);return{clearPersistedData:s,persistState:l,updateServerForNextDay:u,incrementDay:(0,import_react$24.useCallback)(async(n=!1)=>{if(e.current.isWaitingForDayToCompleteIncrementing&&!n)return;n||t(e=>({...e,isWaitingForDayToCompleteIncrementing:!0}));let{broadcastedPositionMessage:a,serverMessages:s,serverValueAdjustments:l}=await u();t(e=>{let t=computeStateForNextDay(e,n),u=[...s,...t.newDayNotifications];return t.valueAdjustments=FarmhandService.applyPriceEvents(l??t.valueAdjustments,t.priceCrashes,t.priceSurges),t.isAwaitingNetworkRequest=!1,t.isWaitingForDayToCompleteIncrementing=!0,t.newDayNotifications=[],t.todaysNotifications=[],o.current={state:t,pendingNotifications:u,broadcastedPositionMessage:a,isFirstDay:n},t})},[e,u,t,o])}},useFarmhandNotifications=(e,t)=>({showInventoryFullNotifications:(0,import_react$24.useCallback)((e,n)=>{inventorySpaceRemaining(e)>0&&inventorySpaceRemaining(n)<=0&&t.current.showNotification(INVENTORY_FULL_NOTIFICATION,`warning`)},[t]),showRecipeLearnedNotifications:(0,import_react$24.useCallback)(({learnedRecipes:n})=>{let a=[];Object.keys(e.learnedRecipes).forEach(e=>{n.hasOwnProperty(e)||a.push(recipesMap[e])}),a.length>1?t.current.showNotification(RECIPES_LEARNED(``,a)):a.length===1&&t.current.showNotification(RECIPE_LEARNED(``,a[0]))},[e.learnedRecipes,t])}),FarmhandReducers=class e extends import_react$24.Component{addCowToInventory(...e){throw Error(`Unimplemented`)}addPeer(...e){throw Error(`Unimplemented`)}adjustLoan(...e){throw Error(`Unimplemented`)}changeCowAutomaticHugState(...e){throw Error(`Unimplemented`)}changeCowBreedingPenResident(...e){throw Error(`Unimplemented`)}changeCowName(...e){throw Error(`Unimplemented`)}clearPlot(...e){throw Error(`Unimplemented`)}chopForestPlot(...e){throw Error(`Unimplemented`)}computeStateForNextDay(...e){throw Error(`Unimplemented`)}fertilizePlot(...e){throw Error(`Unimplemented`)}forRange(...e){throw Error(`Unimplemented`)}harvestForestPlot(...e){throw Error(`Unimplemented`)}harvestPlot(...e){throw Error(`Unimplemented`)}hugCow(...e){throw Error(`Unimplemented`)}makeRecipe(...e){throw Error(`Unimplemented`)}makeFermentationRecipe(...e){throw Error(`Unimplemented`)}makeWine(...e){throw Error(`Unimplemented`)}modifyCow(...e){throw Error(`Unimplemented`)}mulchForestPlot(...e){throw Error(`Unimplemented`)}offerCow(...e){throw Error(`Unimplemented`)}plantInPlot(...e){throw Error(`Unimplemented`)}plantTreeInPlot(...e){throw Error(`Unimplemented`)}prependPendingPeerMessage(...e){throw Error(`Unimplemented`)}purchaseCombine(...e){throw Error(`Unimplemented`)}purchaseComposter(...e){throw Error(`Unimplemented`)}purchaseCow(...e){throw Error(`Unimplemented`)}purchaseCowPen(...e){throw Error(`Unimplemented`)}purchaseCellar(...e){throw Error(`Unimplemented`)}purchaseField(...e){throw Error(`Unimplemented`)}purchaseForest(...e){throw Error(`Unimplemented`)}purchaseItem(...e){throw Error(`Unimplemented`)}purchaseSmelter(...e){throw Error(`Unimplemented`)}purchaseStorageExpansion(...e){throw Error(`Unimplemented`)}purchaseWoodChipper(...e){throw Error(`Unimplemented`)}removeCowFromInventory(...e){throw Error(`Unimplemented`)}removeKegFromCellar(...e){throw Error(`Unimplemented`)}removePeer(...e){throw Error(`Unimplemented`)}selectCow(...e){throw Error(`Unimplemented`)}sellCow(...e){throw Error(`Unimplemented`)}sellItem(...e){throw Error(`Unimplemented`)}sellKeg(...e){throw Error(`Unimplemented`)}setLightningRod(...e){throw Error(`Unimplemented`)}setScarecrow(...e){throw Error(`Unimplemented`)}setSprinkler(...e){throw Error(`Unimplemented`)}showNotification(...e){throw Error(`Unimplemented`)}updatePeer(...e){throw Error(`Unimplemented`)}upgradeTool(...e){throw Error(`Unimplemented`)}waterAllPlots(...e){throw Error(`Unimplemented`)}waterField(...e){throw Error(`Unimplemented`)}waterPlot(...e){throw Error(`Unimplemented`)}withdrawCow(...e){throw Error(`Unimplemented`)}constructor(t){super(t);let n=Object.getOwnPropertyNames(e.prototype).filter(e=>e!==`constructor`);for(let e of n){let t=reducers_exports[e];t&&(this[e]=(...e)=>{this.setState(n=>t(n,...e))})}}},useFarmhandReducers=e=>(0,import_react$24.useMemo)(()=>{let t={};Object.assign(t,reducers_exports);let n=Object.getOwnPropertyNames(FarmhandReducers.prototype).filter(e=>e!==`constructor`);for(let a of n){let n=reducers_exports[a];typeof n==`function`&&(t[a]=(...t)=>{e(e=>{let a=n(e,...t);return!a||a===e?e:{...a}})})}return t},[e]),usePrevious=e=>{let t=(0,import_react$24.useRef)();return(0,import_react$24.useEffect)(()=>{t.current=e},[e]),t.current},{CLEANUP,HARVEST,MINE,WATER}=fieldMode,useFarmhand=e=>{let{features:t,match:{path:n=``,params:{room:a}={}}={}}=e,o=(0,import_react$24.useCallback)(()=>({activePlayers:null,allowCustomPeerCowNames:!1,cellarInventory:[],currentDialogView:dialogView.NONE,completedAchievements:{},cowForSale:generateCow(),cowBreedingPen:{cowId1:null,cowId2:null,daysUntilBirth:-1},cowColorsPurchased:{},cowIdOfferedForTrade:``,cowInventory:[],cowsSold:{},cowsTraded:0,cowTradeTimeoutId:-1,cropsHarvested:{},dayCount:0,experience:0,farmName:`Unnamed`,field:createNewField(),fieldMode:fieldMode.OBSERVE,forest:createNewForest(),treesChopped:0,treeFruitsHarvested:{},mulchApplied:{},getCowAccept:noop$3,getCowReject:noop$3,getCowTradeRequest:noop$3,getPeerMetadata:noop$3,hasBooted:!1,hasProducedRainbowFertilizer:!1,heartbeatTimeoutId:null,historicalDailyLosses:[],historicalDailyRevenue:[],historicalValueAdjustments:[],hoveredPlotRangeSize:0,playerId:v4(),inventory:[{id:scarecrow.id,quantity:1}],inventoryLimit:100,isAwaitingCowTradeRequest:!1,isAwaitingNetworkRequest:!1,isCombineEnabled:!1,isMenuOpen:!doesMenuObstructStage(),itemsSold:{},cellarItemsSold:{},isChatOpen:!1,isDialogViewOpen:!1,isOnline:n.startsWith(`/online`)??!1,isWaitingForDayToCompleteIncrementing:!1,learnedRecipes:{},loanBalance:500,loansTakenOut:1,money:500,latestNotification:null,newDayNotifications:[],notificationLog:[],peers:{},peerRoom:null,pendingPeerMessages:[],latestPeerMessages:[],sendPeerMetadata:null,selectedCowId:``,selectedForestItemId:``,selectedItemId:``,priceCrashes:{},priceSurges:{},profitabilityStreak:0,recipesMade:{},record7dayProfitAverage:0,recordProfitabilityStreak:0,recordSingleDayProfit:0,revenue:0,redirect:``,room:decodeURIComponent(e.match?.params?.room||`global`),sendCowAccept:noop$3,sendCowReject:noop$3,purchasedCombine:0,purchasedComposter:0,purchasedCowPen:0,purchasedCellar:0,purchasedField:0,purchasedForest:0,purchasedSmelter:0,purchasedWoodChipper:0,sendCowTradeRequest:noop$3,showHomeScreen:!0,showNotifications:!0,stageFocus:stageFocusType.HOME,todaysNotifications:[],todaysLosses:0,todaysPurchases:{},todaysRevenue:0,todaysStartingInventory:{},toolLevels:{[toolType.AXE]:toolLevel.UNAVAILABLE,[toolType.HOE]:toolLevel.DEFAULT,[toolType.PICKER_POLE]:toolLevel.UNAVAILABLE,[toolType.SCYTHE]:toolLevel.DEFAULT,[toolType.SHOVEL]:toolLevel.UNAVAILABLE,[toolType.WATERING_CAN]:toolLevel.DEFAULT},useAlternateEndDayButtonPosition:!1,valueAdjustments:{},version:`1.23.0`}),[n,e.match?.params?.room]),[s,l]=(0,import_react$24.useState)(o),u=(0,import_react$24.useRef)(s);u.current=s;let d=a===void 0?s.room:a,f=(0,import_react$24.useRef)(null),m=(0,import_react$24.useRef)(!1),h=useFarmhandReducers(l),v=(0,import_react$24.useRef)(h);v.current=h;let y=usePrevious(s),b=STAGE_TITLE_MAP[s.stageFocus],x=FarmhandService.getFieldToolInventory(s.inventory),S=FarmhandService.computePlayerInventory(s.inventory,s.valueAdjustments),C=FarmhandService.getPlantableCropInventory(s.inventory),T=FarmhandService.getPlantableTreeInventory(s.inventory),E=FarmhandService.getMulchInventory(s.inventory),D=(0,import_react$24.useMemo)(()=>getLevelEntitlements(levelAchieved(s.experience)),[s.experience]),O=(0,import_react$24.useMemo)(()=>getAvailableShopInventory(D),[D]),k=D.stageFocusType[stageFocusType.FOREST],j=s.isOnline&&s.room!==`global`,M=(0,import_react$24.useMemo)(()=>getViewList({isForestUnlocked:k,purchasedCellar:s.purchasedCellar,purchasedCowPen:s.purchasedCowPen,showHomeScreen:s.showHomeScreen}),[s.showHomeScreen,k,s.purchasedCowPen,s.purchasedCellar]),N=(0,import_react$24.useMemo)(()=>getPeerMetadata(s),[s]),F=s.isAwaitingNetworkRequest||s.isAwaitingCowTradeRequest||s.isWaitingForDayToCompleteIncrementing,I=(0,import_react$24.useRef)(null),{openDialogView:L,closeDialogView:R,focusNextView:z,focusPreviousView:B}=useFarmhandNavigation(l,M),V=(0,import_react$24.useRef)(!0),H=(0,import_react$24.useRef)(!1);(0,import_react$24.useEffect)(()=>{if(s.hasBooted){if(H.current){H.current=!1,setHashQueryParam(VIEW_QUERY_PARAM_NAME,s.stageFocus);return}if(V.current){V.current=!1,setHashQueryParam(VIEW_QUERY_PARAM_NAME,s.stageFocus);return}setHashQueryParam(VIEW_QUERY_PARAM_NAME,s.stageFocus,`push`),removeHashQueryParam(`tab`)}},[s.stageFocus,s.hasBooted]),(0,import_react$24.useEffect)(()=>{let e=()=>{let e=getValidatedStageFocusFromHash(u.current)??stageFocusType.HOME;e!==u.current.stageFocus&&(H.current=!0,l(t=>({...t,stageFocus:e})))};return import_window.default.addEventListener(`popstate`,e),()=>import_window.default.removeEventListener(`popstate`,e)},[]);let{syncToRoom:U,scheduleHeartbeat:W,tradeForPeerCow:G,handleCowTradeTimeout:ee,messagePeers:te}=useFarmhandNetwork(s,l,v,I,y,d,n,N),{clearPersistedData:K,persistState:q,updateServerForNextDay:ne,incrementDay:re}=useFarmhandDayAdvancement(u,l,e,v,f),{showInventoryFullNotifications:J,showRecipeLearnedNotifications:ie}=useFarmhandNotifications(s,v);I.current=(0,import_react$24.useMemo)(()=>({state:s,props:e,viewTitle:b,fieldToolInventory:x,mulchInventory:E,playerInventory:S,plantableCropInventory:C,plantableTreeInventory:T,viewList:M,levelEntitlements:D,shopInventory:O,peerMetadata:N,isInputBlocked:F,isChatAvailable:j,isForestUnlocked:k,setState:(e,t)=>{l(n=>{let a=typeof e==`function`?e(n):e;if(a==null)return n;let o={...n,...a};return t&&setTimeout(t,0),o})},...v.current,purchaseItem:(e,t)=>v.current.purchaseItem(e,t),sellItem:(e,t)=>v.current.sellItem(e,t),showNotification:(e,t,n)=>v.current.showNotification(e,t,n),prependPendingPeerMessage:(e,t)=>v.current.prependPendingPeerMessage(e,t),forRange:(e,t,n,a,o)=>v.current.forRange(e,t,n,a,o),createInitialState:o,getData,postData,tradeForPeerCow:G,handleCowTradeTimeout:ee,clearPersistedData:K,syncToRoom:U,scheduleHeartbeat:W,showInventoryFullNotifications:J,showRecipeLearnedNotifications:ie,persistState:(e={})=>q(I.current?.state??s,e),updateServerForNextDay:ne,incrementDay:re,openDialogView:L,closeDialogView:R,focusNextView:z,focusPreviousView:B,messagePeers:te}),[s,e,b,x,E,S,C,T,M,D,O,N,F,j,k,G,ee,K,U,W,J,ie,q,ne,re,L,R,z,B,te,o]);let ae=(0,import_react$24.useMemo)(()=>{let e={debounced:{}};return Object.keys(ui_events_default).forEach(t=>{let n=t;e[n]=(...e)=>ui_events_default[n].apply(I.current,e),e.debounced[n]=(0,import_lodash_debounce.default)(e[n],50)}),e},[]),oe=(0,import_react$24.useMemo)(()=>{let e={incrementDay:`shift+c`,nextView:`right`,openAccounting:`b`,openAchievements:`a`,openLog:`l`,openPriceEvents:`e`,openStats:`s`,openSettings:`,`,openKeybindings:`shift+?`,previousView:`left`,toggleMenu:`m`};return nullArray(9).forEach((t,n)=>{e[`numberKey${n+1}`]=String(n+1)}),e},[]),se=(0,import_react$24.useMemo)(()=>{let e={incrementDay:()=>re(),nextView:z,openAccounting:()=>L(dialogView.ACCOUNTING),openAchievements:()=>L(dialogView.ACHIEVEMENTS),openLog:()=>L(dialogView.FARMERS_LOG),openPriceEvents:()=>L(dialogView.PRICE_EVENTS),openStats:()=>L(dialogView.STATS),openSettings:()=>L(dialogView.SETTINGS),openKeybindings:()=>L(dialogView.KEYBINDINGS),previousView:B,selectHoe:()=>ae.handleFieldModeSelect(CLEANUP),selectScythe:()=>ae.handleFieldModeSelect(HARVEST),selectWateringCan:()=>ae.handleFieldModeSelect(WATER),selectShovel:()=>{s.toolLevels[toolType.SHOVEL]!==toolLevel.UNAVAILABLE&&ae.handleFieldModeSelect(MINE)},toggleMenu:()=>ae.handleMenuToggle()};return nullArray(9).forEach((t,n)=>{e[`numberKey${n+1}`]=()=>{let e=M[n];typeof e==`string`&&l(t=>({...t,stageFocus:stageFocusType[e]}))}}),e},[re,z,L,B,ae,s.toolLevels,M,K]);(0,import_react$24.useEffect)(()=>{if(m.current)return;m.current=!0,Object.defineProperty(import_window.default,"farmhand",{get:()=>I.current,configurable:!0});let t=!0;return(async()=>{let n=await e.localforage?.getItem(`state`);if(t){if(n){let e=transformStateDataForImport({...o(),...n}),{isCombineEnabled:t,newDayNotifications:a}=e,s=getValidatedStageFocusFromHash(e);l(t=>({...t,...e,...s&&{stageFocus:s},newDayNotifications:[],hasBooted:!0})),a.forEach(({message:e,severity:t})=>{setTimeout(()=>v.current.showNotification(e,t),0)}),t&&v.current.forRange(harvestPlot,1/0,0,0)}else{await re(!0),l(e=>({...e,historicalValueAdjustments:[]})),v.current.showNotification(LOAN_INCREASED(``,500),`info`);let e=getValidatedStageFocusFromHash(u.current);l(t=>({...t,...e&&{stageFocus:e},hasBooted:!0}))}U()}})(),()=>{t=!1}},[o,re,e.localforage,U]);let ce=(0,import_react$24.useRef)(import_window.default.innerWidth);(0,import_react$24.useEffect)(()=>{let e=()=>{let{innerWidth:e}=import_window.default,t=e!==ce.current;ce.current=e,t&&l(e=>{let t=!doesMenuObstructStage();return e.isMenuOpen===t?e:{...e,isMenuOpen:t}})};return import_window.default.addEventListener(`resize`,e),()=>import_window.default.removeEventListener(`resize`,e)},[]),(0,import_react$24.useEffect)(()=>{if(!s.hasBooted||!f.current)return;let t=!0,{state:n,pendingNotifications:a,broadcastedPositionMessage:o,isFirstDay:u}=f.current;return f.current=null,(async()=>{try{if(await e.localforage?.setItem(`state`,reduceByPersistedKeys({...n,...u&&{historicalValueAdjustments:[]},newDayNotifications:a})),!t)return;if([...a].concat(u?[]:[{message:PROGRESS_SAVED_MESSAGE,severity:`info`}]).forEach(({message:e,severity:t})=>v.current.showNotification(e,t)),n.isCombineEnabled){if(n.stageFocus===stageFocusType.FIELD&&await sleep(1e3),!t)return;v.current.forRange(harvestPlot,1/0,0,0)}}catch(e){console.error(e),t&&v.current.showNotification(JSON.stringify(e),`error`)}finally{t&&(l(e=>({...e,isWaitingForDayToCompleteIncrementing:!1})),o&&v.current.prependPendingPeerMessage(o))}})(),()=>{t=!1}},[s.dayCount,s.hasBooted,e.localforage,l]),(0,import_react$24.useEffect)(()=>()=>{u.current.heartbeatTimeoutId&&clearTimeout(u.current.heartbeatTimeoutId),u.current.peerRoom?.leave()},[]),(0,import_react$24.useEffect)(()=>{!s.hasBooted||!y||(updateAchievements(s,y)!==s&&l(e=>{let t=updateAchievements(e,y);return t===e?e:t}),s.stageFocus===stageFocusType.COW_PEN&&y.stageFocus!==stageFocusType.COW_PEN&&l(e=>({...e,selectedCowId:``})),s.stageFocus!==y.stageFocus&&s.isMenuOpen&&l(e=>{let t=!doesMenuObstructStage();return e.isMenuOpen===t?e:{...e,isMenuOpen:t}}),s.money<y.money&&l(e=>({...e,todaysLosses:moneyTotal(e.todaysLosses,s.money-y.money)})),J(y,s),ie(y))},[s,y,J,ie]);let Y=s.redirect;return{gameState:{...s,blockInput:F,features:t??{},fieldToolInventory:x,mulchInventory:E,isChatAvailable:j,levelEntitlements:D,plantableCropInventory:C,plantableTreeInventory:T,playerInventory:S,playerInventoryQuantities:getInventoryQuantities(s.inventory),shopInventory:O,viewList:M,viewTitle:b},handlers:ae,isInputBlocked:F,keyMap:oe,keyHandlers:se,redirect:Y,state:s,viewList:M,focusPreviousView:B,focusNextView:z,isChatAvailable:j}},emptyObject=Object.freeze({}),Farmhand=e=>{let{gameState:t,handlers:n,isInputBlocked:a,keyMap:o,keyHandlers:s,redirect:l,state:u,viewList:d,focusPreviousView:f,focusNextView:m,isChatAvailable:h}=useFarmhand(e);return(0,import_jsx_runtime.jsx)(import_index_es.GlobalHotKeys,{allowChanges:!0,keyMap:a?emptyObject:o,handlers:a?emptyObject:s,children:(0,import_jsx_runtime.jsxs)(ThemeProvider,{theme:mui_theme_default,children:[(0,import_jsx_runtime.jsx)(CssBaseline,{}),(0,import_jsx_runtime.jsxs)(SnackbarProvider,{anchorOrigin:{vertical:`top`,horizontal:`right`},classes:{containerRoot:`Farmhand notification-container`},content:snackbarProviderContentCallback,maxSnack:4,children:[l&&(0,import_jsx_runtime.jsx)(Redirect,{to:l}),(0,import_jsx_runtime.jsxs)(FarmhandContext.Provider,{value:{gameState:t,handlers:n},children:[(0,import_jsx_runtime.jsxs)(Div,{className:(0,import_classnames.default)(`Farmhand farmhand-root fill`,u.isMenuOpen?`menu-open`:`menu-closed`,{"use-alternate-end-day-button-position":u.useAlternateEndDayButtonPosition,"block-input":a,"has-booted":u.hasBooted}),sx:e=>({...fillSx,display:`flex`,paddingTop:`3.5em`,position:`fixed`,touchAction:`manipulation`,opacity:+!!u.hasBooted,transform:u.hasBooted?`scale(1)`:`scale(0)`,transition:`opacity, transform 200ms`,...a&&{"& button, & input":{filter:`contrast(65%)`,pointerEvents:`none`}},[`@media (min-width: ${breakpoints.smallPhone}px) and (orientation: landscape)`]:{paddingTop:`3em`},[`@media (min-width: ${breakpoints.sm}px)`]:{paddingTop:`4em`},"& .sidebar-wrapper":{display:`flex`},"& .bottom-controls":{alignItems:`center`,bottom:`1em`,display:`flex`,flexFlow:`column`,justifyContent:`center`,left:`50%`,opacity:.85,position:`fixed`,transition:e.transitions.create(`left`,{duration:e.transitions.duration.enteringScreen,easing:e.transitions.easing.easeOut}),width:0,zIndex:20,[`@media (max-width: ${breakpoints.mediumPhone}px)`]:{bottom:`0.5em`},"& .MuiMobileStepper-root":{background:`none`},"& .fab-buttons":{display:`flex`,flexFlow:`row`,"& button":{margin:`0.5em`,position:`relative`,[`@media (max-width: ${breakpoints.mediumPhone}px)`]:{margin:`0.25em 0.5em`},"@media (max-width: 320px)":{margin:`0.25em 0.1em`}}},...u.isMenuOpen&&{"@media (orientation: landscape)":{left:`calc(50vw + ${layout.sidebarWidth} / 2)`}}},"& .end-day":{position:`fixed`,top:`5em`,right:`1em`,[`@media (min-width: ${breakpoints.sm}px)`]:{right:`1.25em`,top:`5.5em`},...u.useAlternateEndDayButtonPosition&&{right:`auto`,left:`1em`}},"& .menu-button":{transition:e.transitions.create(`transform`,{duration:e.transitions.duration.shorter}),transform:u.isMenuOpen?`rotate(-90deg)`:`rotate(0deg)`}}),children:[(0,import_jsx_runtime.jsx)(UpdateNotifier,{}),(0,import_jsx_runtime.jsx)(Consumer$29,{}),(0,import_jsx_runtime.jsxs)(Drawer,{className:`sidebar-wrapper`,open:t.isMenuOpen,variant:`persistent`,role:`complementary`,PaperProps:{className:`sidebar`,sx:{backgroundImage:`url(${blue_stripe_bg_default})`,boxSizing:`border-box`,overflow:`auto`,padding:`1em 1em 0`,position:`relative`,width:layout.sidebarWidth,zIndex:20,[`@media (max-width: ${breakpoints.smallPhone}px)`]:{width:layout.narrowSidebarWidth},"& .button-array":{display:`flex`,flexWrap:`wrap`,margin:`0.5em 0`}}},children:[(0,import_jsx_runtime.jsx)(Consumer$14,{}),(0,import_jsx_runtime.jsx)(Consumer$24,{}),(0,import_jsx_runtime.jsx)(`div`,{className:`spacer`})]}),(0,import_jsx_runtime.jsx)(Consumer,{}),(0,import_jsx_runtime.jsxs)(`div`,{className:`bottom-controls`,children:[(0,import_jsx_runtime.jsx)(MobileStepper,{variant:`dots`,steps:d.length,position:`static`,activeStep:d.indexOf(u.stageFocus),className:``,backButton:null,nextButton:null}),(0,import_jsx_runtime.jsxs)(`div`,{className:`fab-buttons buttons`,children:[(0,import_jsx_runtime.jsx)(Fab,{"aria-label":`Previous view`,color:`primary`,onClick:f,children:(0,import_jsx_runtime.jsx)(import_KeyboardArrowLeft.default,{})}),(0,import_jsx_runtime.jsx)(Fab,{className:(0,import_classnames.default)(`menu-button`,{"is-open":u.isMenuOpen}),color:`primary`,"aria-label":`Open drawer`,onClick:()=>n.handleMenuToggle(),children:(0,import_jsx_runtime.jsx)(import_Menu.default,{})}),(0,import_jsx_runtime.jsx)(Fab,{"aria-label":`Next view`,color:`primary`,onClick:m,children:(0,import_jsx_runtime.jsx)(import_KeyboardArrowRight.default,{})})]})]}),(0,import_jsx_runtime.jsx)(Tooltip,{placement:`left`,title:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(`p`,{children:`End the day to save your progress and advance the game.`}),(0,import_jsx_runtime.jsx)(`p`,{children:`(shift + c)`})]}),children:(0,import_jsx_runtime.jsx)(Fab,{"aria-label":`End the day to save your progress and advance the game.`,className:`end-day`,color:`error`,onClick:n.handleClickEndDayButton,sx:{zIndex:Z_INDEX.END_DAY_BUTTON},children:(0,import_jsx_runtime.jsx)(import_Hotel.default,{})})})]}),h?(0,import_jsx_runtime.jsx)(ChatRoom,{}):null,(0,import_jsx_runtime.jsx)(NotificationSystem_default,{})]})]})]})})};Farmhand.defaultProps={features:{},localforage:import_localforage.default.createInstance({name:`farmhand`,description:`Persisted game data for Farmhand`}),match:{path:``,params:{}}},Farmhand.propTypes={features:import_prop_types$1.object,history:import_prop_types$1.object,location:import_prop_types$1.object,match:import_prop_types$1.object.isRequired};var FarmhandRoute=e=>(0,import_jsx_runtime.jsx)(Farmhand,{...e,features});import_react_dom.render((0,import_jsx_runtime.jsx)(HashRouter,{hashType:`noslash`,children:(0,import_jsx_runtime.jsx)(Route,{path:[`/online/:room`,`/online`,`/`],component:FarmhandRoute})}),document.getElementById(`root`));
844
- //# sourceMappingURL=index-wJ4_E2CN.js.map
843
+ Kegs that contain wine compound in value at a rate of ${WINE_INTEREST_RATE}% for up to ${integerString(100)} days and never spoil.`})})})})})]})};CellarInventoryTabPanel.propTypes={currentTab:import_prop_types$1.number.isRequired,index:import_prop_types$1.number.isRequired};function getCropsAvailableToFerment(e){return Object.keys(e.items).reduce((e,t)=>{let n=getFinalCropItemFromSeedItem(itemsMap[t]);return n&&Number.isFinite(n.daysToFerment)&&e.push(n),e},[])}var FermentationRecipe=({item:e})=>{let{gameState:{inventory:t,cellarInventory:n,purchasedCellar:a},handlers:{handleMakeFermentationRecipeClick:o}}=(0,import_react$24.useContext)(FarmhandContext),[s,l]=(0,import_react$24.useState)(1),u=getInventoryQuantityMap(t),d=FERMENTED_CROP_NAME`${e}`,{space:f}=PURCHASEABLE_CELLARS.get(a)??{space:0};(0,import_react$24.useEffect)(()=>{l(Math.min(getMaxYieldOfFermentationRecipe(e,t,n,f),Math.max(1,s)))},[n,f,t,e,s]);let m=s>0&&cellarService.doesCellarSpaceRemain(n,a),h=()=>{m&&o(e,s)},v=getMaxYieldOfFermentationRecipe(e,t,n,f),y=cellarService.getItemInstancesInCellar(n,e);return(0,import_jsx_runtime.jsxs)(Card,{className:`FermentationRecipe`,sx:{position:`relative`,"& .MuiCardHeader-avatar img":{width:`3em`,filter:`drop-shadow(1px 1px 2px rgba(255, 0, 131, 0.63))`}},children:[(0,import_jsx_runtime.jsx)(CardHeader,{title:d,avatar:(0,import_jsx_runtime.jsx)(`img`,{src:items[e.id],alt:d}),subheader:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(`p`,{children:[`Days to ferment: `,e.daysToFerment]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`Units of `,itemsMap[e.id].name,` in inventory:`,` `,integerString(u[e.id]??0)]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`Units of`,` `,itemsMap.salt.name,` `,`required: `,getSaltRequirementsForFermentationRecipe(e),` `,`(available:`,` `,(0,import_jsx_runtime.jsx)(AnimatedNumber,{number:u[itemsMap.salt.id]??0,formatter:integerString}),`)`]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`In cellar: `,integerString(y??0)]})]})}),(0,import_jsx_runtime.jsxs)(CardActions,{children:[(0,import_jsx_runtime.jsx)(Button,{className:`make-recipe`,color:`primary`,disabled:!m||!s,onClick:h,variant:`contained`,children:`Make`}),(0,import_jsx_runtime.jsx)(QuantityInput,{handleSubmit:h,handleUpdateNumber:l,maxQuantity:v,setQuantity:l,value:s})]})]})};FermentationRecipe.propTypes={item:import_prop_types$1.object.isRequired};var totalFermentableItems=Object.keys(fermentableItemsMap).length,FermentationRecipeList=()=>{let{gameState:{levelEntitlements:e}}=(0,import_react$24.useContext)(FarmhandContext),t=getCropsAvailableToFerment(e),[n,a]=(0,import_react$24.useState)(``),o=n.toLowerCase().split(` `).filter(e=>e.length>0),s=t.filter(e=>{let t=e,n=`${FERMENTED_CROP_NAME}${t.name}`.toLowerCase();return o.every(e=>n.includes(e)||t.name.toLowerCase().includes(e))}),l=s.length;return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(`h3`,{children:[`Available Fermentation Recipes (`,l,` /`,` `,totalFermentableItems,`)`]}),t.length>0&&(0,import_jsx_runtime.jsx)(SearchBar,{placeholder:`Search fermentation recipes...`,onSearch:a}),s.length>0&&(0,import_jsx_runtime.jsx)(`ul`,{className:`card-list`,children:s.map(e=>(0,import_jsx_runtime.jsx)(`li`,{children:(0,import_jsx_runtime.jsx)(FermentationRecipe,{item:e})},e.id))})]})};FermentationRecipeList.propTypes={};var FermentationTabPanel=({index:e,currentTab:t})=>(0,import_jsx_runtime.jsxs)(TabPanel,{value:t,index:e,children:[(0,import_jsx_runtime.jsx)(FermentationRecipeList,{}),(0,import_jsx_runtime.jsx)(Divider,{}),(0,import_jsx_runtime.jsx)(`ul`,{className:`card-list`,children:(0,import_jsx_runtime.jsx)(`li`,{children:(0,import_jsx_runtime.jsx)(Card,{children:(0,import_jsx_runtime.jsx)(CardContent,{children:(0,import_jsx_runtime.jsx)(import_react_markdown.default,{linkTarget:`_blank`,className:`markdown`,source:`Some items can be fermented and become much more valuable over time.`})})})})})]});FermentationTabPanel.propTypes={currentTab:import_prop_types$1.number.isRequired,index:import_prop_types$1.number.isRequired};var getGrapesSold=e=>Object.entries(e).reduce((e,[t,n])=>{let a=itemsMap[t];return(n||0)>0&&isGrape(a)&&e.push(a),e},[]);function getWineVarietiesAvailableToMake(e){return getGrapesSold(e).map(({variety:e})=>e)}var WineRecipe=({wineVariety:e})=>{let{gameState:{cellarInventory:t,inventory:n,purchasedCellar:a},handlers:{handleMakeWineClick:o}}=(0,import_react$24.useContext)(FarmhandContext),[s,l]=(0,import_react$24.useState)(1),u=grapeVarietyNameMap[e],d=grapeVarietyToGrapeItemMap[e],{space:f}=PURCHASEABLE_CELLARS.get(a)??{space:0},m=getInventoryQuantityMap(n);if((0,import_react$24.useEffect)(()=>{d&&l(Math.min(wineService.getMaxWineYield({grape:d,inventory:n,cellarInventory:t,cellarSize:f}),Math.max(1,s)))},[t,f,d,n,s,e]),!d)return null;let h=itemsMap[d.wineId];if(!h)return null;let v=m[d.id]??0,y=m[yeast.id]??0,b=s>0&&v>=50&&cellarService.doesCellarSpaceRemain(t,a),x=!b||!s,S=cellarService.getItemInstancesInCellar(t,h),C=wineService.getMaxWineYield({grape:d,inventory:n,cellarInventory:t,cellarSize:f}),T=()=>{b&&o(d,s)};return(0,import_jsx_runtime.jsxs)(Card,{className:`WineRecipe`,sx:{position:`relative`},children:[(0,import_jsx_runtime.jsx)(CardHeader,{title:u,avatar:(0,import_jsx_runtime.jsx)(`img`,{src:wines[e],alt:u}),subheader:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(`p`,{children:[`Days to mature:`,` `,integerString(wineService.getDaysToMature(e))]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`Units of `,d.name,` required:`,` `,integerString(50),` (available:`,` `,integerString(v),`)`]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`Units of `,yeast.name,` required:`,` `,integerString(getYeastRequiredForWine(e)*s),` `,`(available: `,integerString(y),`)`]}),(0,import_jsx_runtime.jsxs)(`p`,{children:[`In cellar: `,integerString(S??0)]})]})}),(0,import_jsx_runtime.jsxs)(CardActions,{children:[(0,import_jsx_runtime.jsx)(Button,{color:`primary`,variant:`contained`,disabled:x,onClick:T,children:`Make`}),(0,import_jsx_runtime.jsx)(QuantityInput,{handleSubmit:T,handleUpdateNumber:l,maxQuantity:C,setQuantity:l,value:s})]})]})};WineRecipe.propTypes={wineVariety:(0,import_prop_types$1.oneOf)(Object.keys(grapeVariety))};var totalGrapeVarieties=Object.keys(grapeVariety).length,WineRecipeList=()=>{let{gameState:{itemsSold:e}}=(0,import_react$24.useContext)(FarmhandContext),t=getWineVarietiesAvailableToMake(e),[n,a]=(0,import_react$24.useState)(``),o=t.filter(e=>e.toLowerCase().includes(n.toLowerCase())),s=o.length;return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(`h3`,{children:[`Available Wine Recipes (`,s,` /`,` `,totalGrapeVarieties,`)`]}),t.length>0&&(0,import_jsx_runtime.jsx)(SearchBar,{placeholder:`Search wine varieties...`,onSearch:a}),(0,import_jsx_runtime.jsx)(`ul`,{className:`card-list`,children:o.map(e=>(0,import_jsx_runtime.jsx)(`li`,{children:(0,import_jsx_runtime.jsx)(WineRecipe,{wineVariety:e})},e))})]})},WinemakingTabPanel=({index:e,currentTab:t})=>(0,import_jsx_runtime.jsxs)(TabPanel,{value:t,index:e,children:[(0,import_jsx_runtime.jsx)(WineRecipeList,{}),(0,import_jsx_runtime.jsx)(Divider,{}),(0,import_jsx_runtime.jsx)(`ul`,{className:`card-list`,children:(0,import_jsx_runtime.jsx)(`li`,{children:(0,import_jsx_runtime.jsx)(Card,{children:(0,import_jsx_runtime.jsx)(CardContent,{children:(0,import_jsx_runtime.jsx)(import_react_markdown.default,{linkTarget:`_blank`,className:`markdown`,source:`Grapes can be made into wine. Wine becomes very valuable in time and never spoils.`})})})})})]});WinemakingTabPanel.propTypes={currentTab:import_prop_types$1.number.isRequired,index:import_prop_types$1.number.isRequired};var CELLAR_TAB_LABELS=[`Cellar Inventory`,`Fermentation`,`Winemaking`],Cellar=()=>{let[e,t]=useTabQueryParam(CELLAR_TAB_LABELS);return(0,import_jsx_runtime.jsxs)(Div,{className:`Cellar`,sx:centerTabsSx,children:[(0,import_jsx_runtime.jsx)(Tabs,{value:e,onChange:(e,n)=>t(n),"aria-label":`Cellar tabs`,children:CELLAR_TAB_LABELS.map((e,t)=>(0,import_jsx_runtime.jsx)(Tab,{label:e,...a11yProps(t)},e))}),(0,import_jsx_runtime.jsx)(CellarInventoryTabPanel,{index:0,currentTab:e}),(0,import_jsx_runtime.jsx)(FermentationTabPanel,{index:1,currentTab:e}),(0,import_jsx_runtime.jsx)(WinemakingTabPanel,{index:2,currentTab:e})]})};Cellar.propTypes={};var brown_dot_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAk0lEQVRoge2UoRGAMBAECZYS8HRDw5QSnxKig88gfgaxl59befPi12wZzz22idr6dp3HPEvu5UtgJXb6gb9YgCaPQG3980B9d4VoLECTU0ClMJHdFaKxAE0eAcXCRHZXiMYCNDkFVAoT2V0hGgvQ5BFQLExkd4VoLECTU0ClMJHdFaKxAE0eAcXCRHZXiMYCNMsLvBG5ypkvoIETAAAAAElFTkSuQmCC`,floorboard_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAAAwCAYAAAD+WvNWAAAAAXNSR0IArs4c6QAAAUxJREFUeJzt3TFuwkAQheEFjSUQoo1EKJIid8oFuFMuwEVyjYgCCrBEayEiuQgtASNBXvDMmv8rt9nR7pPG24x7X/PZT0LryqpKk/HYuwxZ37sA5I0AQWJlVXnX8LC6cPY2rL9/LeyLQTpdAy6hhUFCgCAhQJDYvhicLTatAU3OPqIRW7RHDi0MEgIECQGCpPEjGrFFujObTl68a8CRdblKOd0JLQwSAgQJAYKEAEFCgCCxdbnyrgEncroTexoVrW643dWp7T1xP7QwSAgQJAQIEgIECQGCxLa7uvVNPfbEfdjb67N3DY0Wy02KWlvu/vNsaWGQECBICBAkBAiS3ufHOwOm8GdhX2FeeP3dhhYGCQGChABBQoAgIUCQ2GK58a4hHM7kelfPB4o2lwYx0MIgIUCQECBICBAkNw2YijTYCDFYF345lKOu/O7pAEBLR2y+MLyqAAAAAElFTkSuQmCC`,jack_o_lantern_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAA4UlEQVRYR+2VMQ6DMAxFYe4R2LsxdOopuHBv0KkDW/ceoTOVK/0qhICd8K0wNBNyIv3nH5PfTrdhaiqu9vAAz9f768+5O7n4tOmAt7h0tAAIRde+mVbMACCoCTCv4wcQio+Pe9NfrjOOuMaCWACIEBYgUjU3AM1+7LsCVL0CdBjaLrV4JugOiEjVvwCdhxDoMlWzzop27vhZoHWwd//vgLsDWqK6AmjiyTjeO1S5cU51oOQhowGUxjkdIDfO6QDWGcIz7wKQE+cuAOKCNc5pAKVxTgWIISxxTgewDiHOVQf4AHx92LXFZzetAAAAAElFTkSuQmCC`,winter_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAQdJREFUeJztmcERgyAUBZ9pIjVRUa5UldT0K/BITnhKZpgYXYG3Bei6oyCwxFrKPb9EEznpTI/ISZK06PEsp931YkROcweQpBstQNMcoH4zo9EUoD78iBGaAtTR+Qqzxb/xIEgL0DgALUDTTYCjZiAPgrQAjQPQAjQOcNSFe1k3eBagBWgcgBagcYBeRuujmP4NWGIt2zQ44pbXN7aDkaucDFH4E/Cf4OQ4AC1A4wC0AI0D0AI0DkAL0DgALUDjALQAze4AkVM3hyCfmP4N8H4ALUDjALQAjQPQAjQOQAvQOAAtQDNEgD3rkSECSL+fbHstQAvQOAAtQOMAtACNA9ACFWJjNXLSG2nxQbKUEorlAAAAAElFTkSuQmCC`,yellow_dot_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAx0lEQVRoQ+2WwQ3AIAwDYRVW6dx9dg1GKf1WlEcTAUks94maBHzGIt/taqn7aj1TKUe/nDyu59EBPjt3vMADWMMhATcEPCbMnySkhdxYyHoj2vm0kFa5WXVDApESiRaaZQVtHxLQKjerDodApOR5v5FwCMzy5O4+JLBb8X4eJoFIiYRJwNrXkvkkIFFrxb84BCIlD99CK7ys7YlzB7QKWNdhEoiUSJgErH0tmU8CErVW/ItDIFLy8C20wsvanjh3QKuAdV14Ag9MlnJUFzG78wAAAABJRU5ErkJgggAA`,lavender_dot_bg_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAyUlEQVRoQ+2WwRGAIAwEQw0WYf/l+LQAPzaAXwd5mAyQ5OZ8MiaB2+OGcp+1SvNdh8i2t6siEddL7wDfrcdd4QG82ZBAGAIRE+ZPEtJCYSzkvRHrfFrIqtyoui6BTIlEC42ygrUPCViVG1WHQyBT8rzfSDgERnlydR8SWK14Ow+TQKZEwiTg7WvNfBLQqDXjXxwCmZKHb6EZXrb2xLkDVgW86zAJZEokTALevtbMJwGNWjP+xSGQKXn4FprhZWtPnDtgVcC7Lj2BB3XCNohEy6k2AAAAAElFTkSuQmCC`,grass_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABp0lEQVRoQ92Y63HDMAyD5RE6QMfLCp2qi2SODtARkmt7yTmuJIAEeHbiv+LrIyjZ8vJxbpe28/P91drbe66IZQ2gBMql//Ni8o5sZAAm+RqOtd/aUQCzLo4CsAXdYrP2rN2DAhkAZXQcvjSAI1lFjBIAVn4H0K4ADtASALaz7EkzO8V+ARydYItWD4ptrVMAJ5gz1roJ0xFyJnXGogGiclcVOasjvYl7xT4VgGPTOmKkFXAkd8S4AyD50fqoGNZvZjdbex0Ah5xsDFYVJp60B7KFZP16d4pdAJjOsu8gCaCXRO1uFE6+E28TPj1AtIOqinCEqjuqfpIcEiCiIgRAwaoVmt3GftZKAdxwvXjL6bNdsv8lj6BOKYB6wqAGWUaISYLmOBrDcqVUkiLfyN75t4lZZ9YOFauO2SEBItDyMcp+NTJFZVSlATLBoz6Za2UpANN11mb0zUQDsIlYu6g6o81uAcgUk/HpQewG4Hq50b9V2NHI2ClqHAIgA33zgSOkdMcxJij/6wMo8lb5rlWBCkSLQJKjeIy/BIASoHUHgHQfUAtEANH1K9JWO4Tg58LYAAAAAElFTkSuQmCC`,forest_floor_default=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAWRJREFUaIHlWTkSgzAMNH6AO16V/78inT+QVDREYB2rg8mWjBHs6rBkb+M1Pu2Euc823uP8uCQ69RD583OfMFsUSAJIcMXQEjUTQCms9bqZQHauqAl4xzYXagIZylOi/RCIUlbzHUq0HwJRyqK+415GD3h5NoyAl2dVBO7URCjNsXGs2ahe6ElwD6GVmlaPpfdC1twISWLPvaV7u7g57y0d7WK02it78BBCq72yF7aRecF9oJGGlHQ9SUBiBJ1D0vXuQ/0K0I0sY8qCbmR3xiQNViTYScxRKmPMLFlGJZ6En0pEtx7wUwmvMLoShl2Fss+BroRhVyGOsqWrEAfWMqzBf55KVEIZApD7gcxKA7kfoIxkl88Velv8pFaZKOK9OVWIqMbOlMQaldFtuYmARmVUW36QZBOolswHyWUSn1+oBrck1kDj5TI7cVMKyb6lfMxQb5m0rtZIiEFO5tAfk8wJ0jD6AhfOowgv6la0AAAAAElFTkSuQmCC`,Stage=({dayCount:e,field:t,isMenuOpen:n=!0,stageFocus:a,useAlternateEndDayButtonPosition:o=!1,viewTitle:s})=>{let l=(0,import_react$24.useRef)(null);(0,import_react$24.useEffect)(()=>{if(l.current){let e=l.current,{style:t}=e;e.scrollTop=0,t.overflow=`hidden`,setTimeout(()=>t.overflow=``,0)}},[a]);let u={[stageFocusType.HOME]:isOctober()?jack_o_lantern_bg_default:isDecember()?winter_bg_default:brown_dot_bg_default,[stageFocusType.SHOP]:yellow_dot_bg_default,[stageFocusType.WORKSHOP]:lavender_dot_bg_default,[stageFocusType.CELLAR]:floorboard_default,[stageFocusType.FIELD]:grass_default,[stageFocusType.COW_PEN]:grass_default,[stageFocusType.FOREST]:forest_floor_default}[a],d=[stageFocusType.FIELD,stageFocusType.COW_PEN,stageFocusType.FOREST].includes(a);return(0,import_jsx_runtime.jsxs)(Div,{className:(0,import_classnames.default)(`Stage`,{"is-october":isOctober(),"is-december":isDecember()}),"data-stage-focus":a,role:`main`,ref:l,sx:t=>({flex:2,imageRendering:`pixelated`,marginLeft:0,overflow:`auto`,padding:`1.5em 1.5em 0`,position:`relative`,zIndex:0,transition:t.transitions.create(`margin-left`,{duration:t.transitions.duration.enteringScreen,easing:t.transitions.easing.easeOut}),"& .stage-background":{backgroundSize:`96px`,bottom:0,left:0,pointerEvents:`none`,position:`fixed`,right:0,top:0,zIndex:-1,...u?{backgroundImage:`url(${u})`}:{},...d?{backgroundSize:`30%`,filter:seasonFilterMap[getCurrentSeason(e)],[`@media (min-width: ${breakpoints.md}px)`]:{backgroundSize:`10%`}}:{},...a===stageFocusType.CELLAR?{backgroundSize:`288px 96px`}:{}},"& h3":{textAlign:`center`},"& h2":{fontSize:`1.2em`},"& .view-title":{fontSize:`2.5em`,marginBottom:`0.6em`,textAlign:`center`,[`@media (min-width: ${breakpoints.largePhone}px)`]:{display:`none`}},"& section":{padding:`0.5em 0`,[`@media (max-width: ${breakpoints.sm}px)`]:{fontSize:`1em`}},...o?{paddingTop:`4em`,[`@media (max-width: ${breakpoints.smallPhone}px)`]:{paddingTop:`4.5em`}}:{},...n?{transitionProperty:`padding, margin-left`,[`@media (max-width: ${breakpoints.sm}px)`]:{padding:0},"& > *:not(.stage-background)":{opacity:1,transition:t.transitions.create(`opacity`,{duration:t.transitions.duration.enteringScreen,easing:t.transitions.easing.easeOut}),[`@media (max-width: ${breakpoints.sm}px)`]:{opacity:0}}}:{marginLeft:`-${layout.sidebarWidth}`,transition:t.transitions.create(`margin-left`,{duration:t.transitions.duration.leavingScreen,easing:t.transitions.easing.sharp}),[`@media (max-width: ${breakpoints.smallPhone}px)`]:{marginLeft:`-${layout.narrowSidebarWidth}px`}}}),children:[(0,import_jsx_runtime.jsx)(`div`,{className:`stage-background`}),(0,import_jsx_runtime.jsx)(`h2`,{className:`view-title`,children:s}),a===stageFocusType.HOME&&(0,import_jsx_runtime.jsx)(Consumer$7,{}),a===stageFocusType.FIELD&&(0,import_jsx_runtime.jsx)(Consumer$10,{columns:t[0].length,rows:t.length}),a===stageFocusType.FOREST&&(0,import_jsx_runtime.jsx)(Forest,{}),a===stageFocusType.SHOP&&(0,import_jsx_runtime.jsx)(Consumer$4,{}),a===stageFocusType.COW_PEN&&(0,import_jsx_runtime.jsx)(Consumer$6,{}),a===stageFocusType.WORKSHOP&&(0,import_jsx_runtime.jsx)(Consumer$1,{}),a===stageFocusType.CELLAR&&(0,import_jsx_runtime.jsx)(Cellar,{}),(0,import_jsx_runtime.jsx)(`div`,{className:`spacer`})]})};Stage.propTypes={dayCount:import_prop_types$1.number.isRequired,field:(0,import_prop_types$1.arrayOf)(import_prop_types$1.array).isRequired,isMenuOpen:import_prop_types$1.bool,stageFocus:import_prop_types$1.string.isRequired,useAlternateEndDayButtonPosition:import_prop_types$1.bool,viewTitle:import_prop_types$1.string.isRequired};function Consumer(e){return(0,import_jsx_runtime.jsx)(FarmhandContext.Consumer,{children:({gameState:t,handlers:n})=>(0,import_jsx_runtime.jsx)(Stage,{...t,...n,...e})})}var scriptRel=`modulepreload`,assetsURL=function(e,t){return new URL(e,t).href},seen={},__vitePreload=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),o=document.querySelector(`meta[property=csp-nonce]`),s=o?.nonce||o?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}a=l(t.map(t=>{if(t=assetsURL(t,n),t=u(t),t in seen)return;seen[t]=!0;let a=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let o=e[n];if(o.href===t&&(!a||o.rel===`stylesheet`))return}let o=document.createElement(`link`);if(o.rel=a?`stylesheet`:scriptRel,a||(o.as=`script`),o.crossOrigin=``,o.href=t,s&&o.setAttribute(`nonce`,s),document.head.appendChild(o),a)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function o(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return a.then(t=>{for(let e of t||[])e.status===`rejected`&&o(e.reason);return e().catch(o)})},autoUpdateMode=`false`,selfDestroying=`false`,auto=autoUpdateMode===`true`,autoDestroy=selfDestroying===`true`;function registerSW(e={}){let{immediate:t=!1,onNeedReload:n,onNeedRefresh:a,onOfflineReady:o,onRegistered:s,onRegisteredSW:l,onRegisterError:u}=e,d,f,m,h=async(e=!0)=>{await f,auto||m?.()};async function v(){if(`serviceWorker`in navigator){if(d=await __vitePreload(async()=>{let{Workbox:e}=await import(`./workbox-window.prod.es5-Bd17z0YL.js`);return{Workbox:e}},[],import.meta.url).then(({Workbox:e})=>new e(`./service-worker.js`,{scope:`./`,type:`classic`})).catch(e=>{u?.(e)}),!d)return;if(m=()=>{d?.messageSkipWaiting()},!autoDestroy)if(auto)d.addEventListener(`activated`,e=>{(e.isUpdate||e.isExternal)&&(n?n():window.location.reload())}),d.addEventListener(`installed`,e=>{e.isUpdate||o?.()});else{let e=!1,t=()=>{e=!0,d?.addEventListener(`controlling`,e=>{e.isUpdate&&(n?n():window.location.reload())}),a?.()};d.addEventListener(`installed`,n=>{n.isUpdate===void 0?n.isExternal===void 0?!e&&o?.():n.isExternal?t():!e&&o?.():n.isUpdate||o?.()}),d.addEventListener(`waiting`,t)}d.register({immediate:t}).then(e=>{l?l(`./service-worker.js`,e):s?.(e)}).catch(e=>{u?.(e)})}}return f=v(),h}function useRegisterSW(e={}){let{immediate:t=!0,onNeedReload:n,onNeedRefresh:a,onOfflineReady:o,onRegistered:s,onRegisteredSW:l,onRegisterError:u}=e,[d,f]=(0,import_react$24.useState)(!1),[m,h]=(0,import_react$24.useState)(!1),[v]=(0,import_react$24.useState)(()=>registerSW({immediate:t,onNeedReload:n,onOfflineReady(){h(!0),o?.()},onNeedRefresh(){f(!0),a?.()},onRegistered:s,onRegisteredSW:l,onRegisterError:u}));return{needRefresh:[d,f],offlineReady:[m,h],updateServiceWorker:v}}var UpdateNotifier=()=>{let{handlers:{handleGameUpdateAvailable:e}}=(0,import_react$24.useContext)(FarmhandContext),{needRefresh:[t],updateServiceWorker:n}=useRegisterSW();return(0,import_react$24.useEffect)(()=>{t&&(e(n),window.addEventListener(`beforeunload`,()=>{n(!0)}))},[t,e,n]),null},commonFetchConfig={mode:`cors`,cache:`no-cache`,credentials:`same-origin`,headers:{"Content-Type":`application/json`},redirect:`follow`,referrerPolicy:`no-referrer`};async function getData(e=``,t={}){let n=new URLSearchParams;return Object.keys(t).forEach(e=>n.append(encodeURIComponent(e),encodeURIComponent(t[e]))),(await fetch(`${e}?${n}`,{...commonFetchConfig,method:`GET`})).json()}async function postData(e=``,t={}){return(await fetch(e,{...commonFetchConfig,method:`POST`,body:JSON.stringify(t)})).json()}var createNewField=()=>Array(10).fill(void 0).map(()=>[,,,,,,].fill(null)),createNewForest=()=>[,].fill(void 0).map(()=>[,,,,].fill(null)),doesMenuObstructStage=()=>window.innerWidth<BREAKPOINTS.MD,getAvailableShopInventory=memoize(e=>inventory.filter(({id:t})=>!(unlockableItems.hasOwnProperty(t)&&!e.items.hasOwnProperty(t)))),getPeerMetadata=e=>{let t=PEER_METADATA_STATE_KEYS.reduce((t,n)=>(t[n]=e[n],t),{});return Object.assign(t,{cowOfferedForTrade:e.cowInventory.find(({id:t})=>t===e.cowIdOfferedForTrade)}),t},getViewList=({isForestUnlocked:e,purchasedCellar:t,purchasedCowPen:n,showHomeScreen:a})=>{let{CELLAR:o,COW_PEN:s,HOME:l,WORKSHOP:u,FOREST:d}=stageFocusType,f=[...STANDARD_VIEW_LIST];return a&&f.unshift(l),e&&f.push(d),n&&f.push(s),f.push(u),t&&f.push(o),f},getValidatedStageFocusFromHash=e=>{let t=getHashQueryParams().get(VIEW_QUERY_PARAM_NAME);if(!t)return;let n=getLevelEntitlements(levelAchieved(e.experience)).stageFocusType[stageFocusType.FOREST];return getViewList({isForestUnlocked:n,purchasedCellar:e.purchasedCellar,purchasedCowPen:e.purchasedCowPen,showHomeScreen:e.showHomeScreen}).find(e=>e===t)},sleep=e=>new Promise(t=>setTimeout(t,e)),{PLANT}=fieldMode,{MULCH}=itemType,FarmhandService=class{static computePlayerInventory=memoize((e,t)=>e.map(({quantity:e,id:n})=>({quantity:e,...itemsMap[n],value:getItemCurrentValue(itemsMap[n],t)})));static getFieldToolInventory=memoize(e=>e.filter(({id:e})=>{let t=itemsMap[e];return typeof t.enablesFieldMode==`string`&&t.enablesFieldMode!==PLANT&&t.type!==MULCH}).map(({id:e,quantity:t})=>({...itemsMap[e],quantity:t})));static getPlantableCropInventory=memoize(e=>e.filter(({id:e})=>itemsMap[e].isPlantableCrop).map(({id:e,quantity:t})=>({...itemsMap[e],quantity:t})));static getMulchInventory=memoize(e=>e.filter(({id:e})=>itemsMap[e]?.type===MULCH).map(({id:e,quantity:t})=>({...itemsMap[e],quantity:t})));static getPlantableTreeInventory=memoize(e=>e.filter(({id:e})=>itemsMap[e]?.isPlantableTree).map(({id:e,quantity:t})=>({...itemsMap[e],quantity:t})));static applyPriceEvents=(e,t,n)=>{let a={...e};return Object.keys(t).forEach(e=>{a[e]=.5}),Object.keys(n).forEach(e=>{a[e]=1.5}),a}},itemIds=Object.keys(itemsMap),getInventoryQuantities=e=>{let t={};for(let e of itemIds)t[e]=0;for(let{id:n,quantity:a}of e)t[n]=a;return t},useFarmhandNavigation=(e,t)=>({openDialogView:(0,import_react$24.useCallback)(t=>{e(e=>({...e,currentDialogView:t,isDialogViewOpen:!0}))},[e]),closeDialogView:(0,import_react$24.useCallback)(()=>{e(e=>({...e,isDialogViewOpen:!1}))},[e]),focusNextView:(0,import_react$24.useCallback)(()=>{document.activeElement?.getAttribute(`role`)!==`tab`&&e(e=>{let n=t.indexOf(e.stageFocus);return{...e,stageFocus:t[(n+1)%t.length]}})},[e,t]),focusPreviousView:(0,import_react$24.useCallback)(()=>{document.activeElement?.getAttribute(`role`)!==`tab`&&e(e=>{let n=t.indexOf(e.stageFocus),a=n===0?t.length-1:(n-1)%t.length;return{...e,stageFocus:t[a]}})},[e,t])}),{floor,random,sin}=Math,libName=`Trystero`,alloc=(e,t)=>Array(e).fill(void 0).map(t),charSet=`0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`,genId=e=>alloc(e,()=>charSet[floor(random()*62)]??``).join(``),selfId=genId(20),all=Promise.all.bind(Promise),isBrowser=typeof window<`u`,{entries,fromEntries,keys,values}=Object,noOp=()=>{},candidateType=`candidate`,resetTimer=e=>(e!==null&&clearTimeout(e),null),mkErr=e=>Error(`${libName}: ${e}`),toErrorMessage=(e,t)=>e instanceof Error&&e.message?e.message:typeof e==`string`&&e?e:toJson(e??t),toError=(e,t)=>e instanceof Error?e:mkErr(toErrorMessage(e,t)),encoder=new TextEncoder,decoder=new TextDecoder,encodeBytes=e=>encoder.encode(e),decodeBytes=e=>decoder.decode(e),toHex=e=>e.reduce((e,t)=>e+t.toString(16).padStart(2,`0`),``),topicPath=(...e)=>e.join(`@`),shuffle=(e,t)=>{let n=[...e],a=()=>{let e=sin(t++)*1e4;return e-floor(e)},o=n.length;for(;o;){let e=floor(a()*o--),t=n[o];n[o]=n[e],n[e]=t}return n},getRelays=(e,t,n,a=!1)=>e.relayConfig?.urls||(a?shuffle(t,strToNum(e.appId)):t).slice(0,e.relayConfig?.redundancy??n),toJson=JSON.stringify,fromJson=e=>{try{return JSON.parse(e)}catch{throw mkErr(`failed to parse JSON: ${e}`)}},strToNum=(e,t=2**53-1)=>e.split(``).reduce((e,t)=>e+t.charCodeAt(0),0)%t,defaultRetryMs=3333,socketRetryPeriods={},reconnectionLockingPromise=null,resolver=null,pauseRelayReconnection=()=>{reconnectionLockingPromise||=new Promise(e=>{resolver=e}).finally(()=>{resolver=null,reconnectionLockingPromise=null})},resumeRelayReconnection=()=>{resolver?.()},makeSocket=(e,t)=>{let n={},a=()=>{let o=new WebSocket(e);o.onclose=()=>{if(reconnectionLockingPromise){reconnectionLockingPromise.then(a);return}socketRetryPeriods[e]??=defaultRetryMs,setTimeout(a,socketRetryPeriods[e]),socketRetryPeriods[e]*=2},o.onmessage=e=>t(String(e.data)),n.socket=o,n.url=o.url,n.ready=new Promise(t=>o.onopen=()=>{t(n),socketRetryPeriods[e]=defaultRetryMs}),n.send=e=>{o.readyState===1&&o.send(e)}};return a(),n},createRelayManager=e=>{let t={},n=new WeakMap,a=e=>{let t=n.get(e);if(!t)throw mkErr(`relay bookkeeping missing registration for relay client`);return t};return{register:(e,a)=>(t[e]=a,n.set(a,e),a),keyOf:a,scoped:()=>{let e={},t=t=>e[t]??={};return{forKey:t,forRelay:e=>t(a(e))}},getSockets:()=>fromEntries(entries(t).flatMap(([t,n])=>{let a=e(n);return a?[[t,a]]:[]}))}},watchOnline=()=>{if(isBrowser){let e=new AbortController;return addEventListener(`online`,resumeRelayReconnection,{signal:e.signal}),addEventListener(`offline`,pauseRelayReconnection,{signal:e.signal}),()=>e.abort()}return noOp},algo=`AES-GCM`,strToSha1={},pack=e=>btoa(String.fromCharCode.apply(null,Array.from(new Uint8Array(e)))),unpack=e=>{let t=atob(e);return new Uint8Array(t.length).map((e,n)=>t.charCodeAt(n)).buffer},hashWith=async(e,t)=>new Uint8Array(await crypto.subtle.digest(e,encodeBytes(t))),sha1=async e=>strToSha1[e]??=Array.from(await hashWith(`SHA-1`,e)).map(e=>e.toString(36)).join(``),genKey=async(e,t,n)=>crypto.subtle.importKey(`raw`,await crypto.subtle.digest({name:`SHA-256`},encodeBytes(`${e}:${t}:${n}`)),{name:algo},!1,[`encrypt`,`decrypt`]),deriveRoomNamespace=async(e,t)=>toHex(await hashWith(`SHA-256`,`${libName}:${e}:${t}`)),joinChar=`$`,ivJoinChar=`,`,encrypt=async(e,t)=>{let n=crypto.getRandomValues(new Uint8Array(16));return n.join(ivJoinChar)+joinChar+pack(await crypto.subtle.encrypt({name:algo,iv:n},await e,encodeBytes(t)))},decrypt=async(e,t)=>{let[n,a]=t.split(joinChar);return decodeBytes(await crypto.subtle.decrypt({name:algo,iv:new Uint8Array(n?.split(ivJoinChar).map(Number)??[])},await e,unpack(a??``)))},offerTtl=57333,offerLeaseTtlMs=18e4,poolSize=20,OfferPool=class{pool=[];pooled=new Set;leased=new Map;recycling=new Set;cleanupTimer=null;active=!1;constructor(e){this.makeOffer=e}get isActive(){return this.active}warmup(){this.pool=[],this.pooled.clear(),alloc(poolSize,this.makeOffer).forEach(e=>this.push(e)),this.active=!0,this.cleanupTimer=setInterval(()=>{this.pool=this.pool.filter(e=>e.isDead?(this.pooled.delete(e),!1):!0)},offerTtl)}push(e){e.isDead||this.pooled.has(e)||this.leased.has(e)||(this.pool.push(e),this.pooled.add(e))}shift(e){let t=[];for(;t.length<e&&this.pool.length>0;){let e=this.pool.shift();if(!e)break;this.pooled.delete(e),t.push(e)}return t}claimLeased(e){let t=this.leased.get(e);t&&(resetTimer(t),this.leased.delete(e))}recycle(e){if(!(e.isDead||this.recycling.has(e))){if(e.connection.remoteDescription){e.destroy();return}if(!this.active){e.destroy();return}this.recycling.add(e),e.setHandlers({connect:noOp,close:noOp,error:noOp}),e.getOffer(!0).then(t=>{if(!t||t.type!==`offer`||e.isDead||!this.active){e.destroy();return}this.push(e)}).catch(()=>e.destroy()).finally(()=>this.recycling.delete(e))}}reclaimLeased(e){let t=this.leased.get(e);t&&(resetTimer(t),this.leased.delete(e),this.recycle(e))}lease(e){this.claimLeased(e),this.leased.set(e,setTimeout(()=>{this.leased.delete(e),this.recycle(e)},offerLeaseTtlMs))}checkout(e,t,n){let a=this.shift(e),o=Math.max(0,e-a.length);o>0&&a.push(...alloc(o,this.makeOffer));let s=async(e,a=!1)=>{try{let a=await n(e);return t?(this.lease(e),{peer:e,offer:a,claim:()=>this.claimLeased(e),reclaim:()=>this.reclaimLeased(e)}):{peer:e,offer:a}}catch(t){if(this.claimLeased(e),this.pooled.delete(e),e.destroy(),!a)return s(this.makeOffer(),!0);throw t}};return all(a.map(e=>s(e)))}getOffers(e,t){return this.checkout(e,!0,t)}destroy(){this.active=!1,this.cleanupTimer&&=(clearInterval(this.cleanupTimer),null),this.pool.forEach(e=>e.destroy()),this.pool=[],this.pooled.clear(),this.leased.forEach((e,t)=>{resetTimer(e),t.destroy()}),this.leased.clear(),this.recycling.forEach(e=>e.destroy()),this.recycling.clear()}},overlapRoomPasswordErr=mkErr(`incorrect password for overlapping room`),createPasswordHandshake=(e,t,n)=>{let a=a=>hashWith(`SHA-256`,`${a}:${e}:${t}:${n}`).then(toHex),o=async(t,n,o)=>{if(!e)return;if(o){let e=genId(36);await t({__trystero_pw:`challenge`,c:e});let{data:o}=await n();if(!o||typeof o!=`object`||o.__trystero_pw!==`response`||typeof o.h!=`string`)throw overlapRoomPasswordErr;let s=await a(e);if(o.h!==s)throw overlapRoomPasswordErr;return}let{data:s}=await n();if(!s||typeof s!=`object`||s.__trystero_pw!==`challenge`||typeof s.c!=`string`)throw overlapRoomPasswordErr;await t({__trystero_pw:`response`,h:await a(s.c)})};return{run:o,compose:t=>e||t?async(e,n,a,s)=>{await o(n,a,s),await t?.(e,n,a,s)}:void 0}},iceTimeout=15e3,disconnectedCloseDelayMs=5e3,iceStateEvent=`icegatheringstatechange`,offerType=`offer`,answerType=`answer`,outOfRangePattern=/out of range/i,rewriteMdnsCandidatesToLoopback=e=>e.replace(/ (\S+\.local) (\d+) typ host/g,` 127.0.0.1 $2 typ host`),peer_default=(e,{trickleIce:t,rtcConfig:n,rtcPolyfill:a,turnConfig:o,_test_only_mdnsHostFallbackToLoopback:s})=>{let l=new(a??RTCPeerConnection)({iceServers:defaultIceServers.concat(o??[]),...n}),u={},d=[],f=[],m=t!==!1,h=[],v=[],y=!1,b=!1,x=null,S=null,C=!1,T=()=>S=resetTimer(S),E=()=>{C||(C=!0,T(),u.close?.())},D=e=>{u.signal?u.signal(e):d.push(e)},O=e=>{let t=u.signal;u.signal=n=>{t?.(n),e(n)},d.length>0&&d.splice(0).forEach(e=>u.signal?.(e))},k=e=>s?rewriteMdnsCandidatesToLoopback(e):e,j=e=>{if(!s||typeof e.candidate!=`string`)return e;let t=rewriteMdnsCandidatesToLoopback(e.candidate);return t===e.candidate?e:{...e,candidate:t}},M=e=>({type:e.localDescription?.type??offerType,sdp:k(e.localDescription?.sdp??``)}),N=()=>{let e=l.remoteDescription?.sdp;return e?e.match(/a=ice-ufrag:([^\s]+)/)?.[1]??null:null},F=()=>(l.remoteDescription?.sdp?.match(/^m=/gm)??[]).length,I=e=>{if(!l.remoteDescription)return!1;let t=F();if(typeof e.sdpMLineIndex==`number`&&t>0&&e.sdpMLineIndex>=t)return!1;let n=N();return!(n&&e.usernameFragment&&e.usernameFragment!==n)},L=async e=>{try{return await l.addIceCandidate(e),!0}catch(t){if(t instanceof Error&&outOfRangePattern.test(t.message)&&typeof e.sdpMLineIndex==`number`)return!1;throw t}},R=async()=>{if(!l.remoteDescription||h.length===0)return;let e=h.splice(0),t=[];for(let n of e){if(!I(n)){t.push(n);continue}await L(n)||t.push(n)}t.length>0&&h.push(...t)},z=async e=>{if(I(e)){await L(e)||h.push(e);return}h.push(e)},B=e=>{e.binaryType=`arraybuffer`,e.bufferedAmountLowThreshold=65535,e.onmessage=e=>{let t=e.data;u.data?u.data(t):f.push(t)},e.onopen=()=>u.connect?.(),e.onclose=E,e.onerror=({error:e})=>u.error?.(toError(e,`data channel error`))},V=async e=>{let t=null;try{await Promise.race([new Promise(t=>{let n=()=>{e.iceGatheringState===`complete`&&(e.removeEventListener(iceStateEvent,n),t())};e.addEventListener(iceStateEvent,n),n()}),new Promise(e=>{t=setTimeout(e,iceTimeout)})])}finally{resetTimer(t)}return M(e)},H=async()=>{let e=m?M(l):await V(l);return D(e),e};e?(x=l.createDataChannel(`data`),B(x)):l.ondatachannel=({channel:e})=>{x=e,B(e)};let U=async(e=!1)=>{if(l.connectionState!==`closed`)try{return y=!0,e&&(l.signalingState!==`stable`&&l.signalingState!==`closed`&&l.localDescription?.type===offerType&&await l.setLocalDescription({type:`rollback`}),typeof l.restartIce==`function`&&l.restartIce()),await l.setLocalDescription(e?await l.createOffer({iceRestart:!0}):void 0),await H()}catch(e){u.error?.(toError(e,`failed to create local offer`))}finally{y=!1}};l.onnegotiationneeded=async()=>U(!1),l.onicecandidate=({candidate:e})=>{if(!m||!e)return;let t=j(typeof e.toJSON==`function`?e.toJSON():{candidate:e.candidate,sdpMid:e.sdpMid,sdpMLineIndex:e.sdpMLineIndex,usernameFragment:e.usernameFragment});D({type:candidateType,sdp:JSON.stringify(t)})},l.onconnectionstatechange=()=>{if(l.connectionState===`connected`||l.connectionState===`connecting`){T();return}if(l.connectionState===`disconnected`){S||=setTimeout(()=>{S=null,l.connectionState===`disconnected`&&E()},disconnectedCloseDelayMs);return}(l.connectionState===`failed`||l.connectionState===`closed`)&&E()},l.ontrack=e=>{let t=e.streams[0];if(t){if(!u.track&&!u.stream){v.push({track:e.track,stream:t});return}u.track?.(e.track,t),u.stream?.(t)}},l.onremovestream=e=>u.stream?.(e.stream);let W=e?new Promise(e=>O(t=>{t.type===offerType&&e(t)})):Promise.resolve();return e&&queueMicrotask(()=>{!y&&l.signalingState===`stable`&&!l.localDescription&&l.connectionState!==`closed`&&l.onnegotiationneeded?.(new Event(`negotiationneeded`))}),{created:Date.now(),connection:l,get channel(){return x},get isDead(){return l.connectionState===`closed`},getOffer:async(t=!1)=>{if(e)return t?U(!0):l.localDescription?.type===offerType?m?M(l):V(l):W},async signal(t){if(t.type===`candidate`){try{let e=JSON.parse(t.sdp);e&&typeof e==`object`&&await z(j(e))}catch(e){u.error?.(toError(e,`failed to parse remote candidate`))}return}if(!(x?.readyState===`open`&&!t.sdp?.includes(`a=rtpmap`)))try{let n={...t,sdp:k(t.sdp)};if(t.type===offerType){if(y||l.signalingState!==`stable`&&!b){if(e)return;await all([l.setLocalDescription({type:`rollback`}),l.setRemoteDescription(n)])}else await l.setRemoteDescription(n);return await R(),await l.setLocalDescription(),await H()}if(t.type===answerType){b=!0;try{await l.setRemoteDescription(n),await R()}finally{b=!1}}}catch(e){u.error?.(toError(e,`failed to apply remote signal`))}},sendData:e=>x?.send(e),destroy:()=>{T(),x?.close(),l.close(),y=!1,b=!1,E()},setHandlers:e=>{let{signal:t,...n}=e;Object.assign(u,n),u.data&&f.length>0&&f.splice(0).forEach(e=>u.data?.(e)),t&&O(t),(u.track||u.stream)&&v.length>0&&v.splice(0).forEach(({track:e,stream:t})=>{u.track?.(e,t),u.stream?.(t)})},offerPromise:W,addStream:e=>e.getTracks().forEach(t=>l.addTrack(t,e)),removeStream:e=>l.getSenders().filter(t=>t.track&&e.getTracks().includes(t.track)).forEach(e=>l.removeTrack(e)),addTrack:(e,t)=>l.addTrack(e,t),removeTrack:e=>{let t=l.getSenders().find(t=>t.track===e);t&&l.removeTrack(t)},replaceTrack:(e,t)=>{let n=l.getSenders().find(t=>t.track===e);if(n)return n.replaceTrack(t)}}},defaultIceServers=[...alloc(3,(e,t)=>`stun:stun${t||``}.l.google.com:19302`),`stun:stun.cloudflare.com:3478`].map(e=>({urls:e})),TypedArray=Object.getPrototypeOf(Uint8Array),typeByteLimit=32,typeIndex=0,nonceIndex=32,tagIndex=34,progressIndex=35,payloadIndex=36,chunkSize=16*2**10-payloadIndex,oneByteMax=255,twoByteMax=65535,buffLowEvent=`bufferedamountlow`,channelCloseEvent=`close`,channelErrorEvent=`error`,unloadEvent=`beforeunload`,defaultHandshakeTimeoutMs=1e4,backpressureWaitTimeoutMs=1e4,internalNs=e=>`@_`+e,beforeUnloadRoomCleanups=new Set,cleanupActiveRoomsOnBeforeUnload=()=>beforeUnloadRoomCleanups.forEach(e=>e()),registerBeforeUnloadCleanup=e=>(beforeUnloadRoomCleanups.add(e),beforeUnloadRoomCleanups.size===1&&addEventListener(unloadEvent,cleanupActiveRoomsOnBeforeUnload),()=>{beforeUnloadRoomCleanups.delete(e),beforeUnloadRoomCleanups.size||removeEventListener(unloadEvent,cleanupActiveRoomsOnBeforeUnload)}),toByteArray=e=>e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength),toHandshakeErrorMessage=e=>{let t=toErrorMessage(e,`unknown error`);return t.startsWith(`handshake `)?t:`handshake failed: ${t}`},waitForBufferedAmountLow=(e,t=backpressureWaitTimeoutMs)=>e.readyState!==`open`||e.bufferedAmount<=e.bufferedAmountLowThreshold?Promise.resolve(e.readyState===`open`):new Promise(n=>{let a=!1,o=null,s=t=>{a||(a=!0,e.removeEventListener(buffLowEvent,l),e.removeEventListener(channelCloseEvent,u),e.removeEventListener(channelErrorEvent,u),resetTimer(o),n(t))},l=()=>s(!0),u=()=>s(!1);if(e.addEventListener(buffLowEvent,l),e.addEventListener(channelCloseEvent,u),e.addEventListener(channelErrorEvent,u),o=setTimeout(()=>s(!1),t),e.readyState!==`open`){s(!1);return}e.bufferedAmount<=e.bufferedAmountLowThreshold&&s(!0)}),room_default=(e,t,n,{onPeerHandshake:a,onHandshakeError:o,handshakeTimeoutMs:s=defaultHandshakeTimeoutMs}={})=>{let l={},u={},d={},f={},m={},h={},v={},y={},b={},x={},S=new WeakMap,C=new WeakMap,T={onPeerJoin:noOp,onPeerLeave:noOp,onPeerStream:noOp,onPeerTrack:noOp},E=noOp,D=(e,t,{includePending:n=!1}={})=>(e?Array.isArray(e)?e:[e]:keys(n?l:u)).flatMap(e=>{let a=n?l[e]:u[e];return a?[Promise.resolve(t(e,a))]:(console.warn(`${libName}: no peer with id ${e} found`),[])}),O=(e,t,n,a,o,s={})=>{let l={k:t,...s,...n===void 0?{}:{m:n}};return D(e,async(e,t)=>{await a(l,e),o(t)})},k=e=>t=>{let n=e.get(t);return n||(n=genId(20),e.set(t,n)),n},j=k(S),M=k(C),N=e=>l[e]??null,F=(e,t,n,a)=>{u[e]&&(N(e)?.__trysteroSetRemoteStreamByKey?.(t,n),typeof n.id==`string`&&N(e)?.__trysteroSetRemoteStreamById?.(n.id,n),T.onPeerStream(n,e,a))},I=(e,t,n,a,o)=>{u[e]&&(N(e)?.__trysteroSetRemoteTrackByKey?.(t,n,a),typeof a.id==`string`&&N(e)?.__trysteroSetRemoteStreamById?.(a.id,a),typeof n.id==`string`&&N(e)?.__trysteroSetRemoteTrackById?.(n.id,n,a),T.onPeerTrack(n,a,e,o))},L=(e,t=mkErr(`peer disconnected`))=>{let n=d[e],a=toError(t,`peer disconnected`);n&&(resetTimer(n.handshakeTimer),n.pendingHandshakePayloads.length=0,n.handshakeWaiters.splice(0).forEach(e=>e.reject(a)),delete d[e]),delete l[e],delete u[e],delete h[e],y[e]?.splice(0).forEach(e=>e.reject(a)),delete y[e],delete b[e],delete x[e]},R=(e,n,a)=>{let o=l[e];if(!o||n&&o!==n)return;let s=!!u[e];L(e,a),o.destroy(),s&&T.onPeerLeave(e),t(e)},z=(e,t={})=>{let n=m[e];if(f[e]&&n){let a=f[e].options;if(a.sendToPending!==!!t.sendToPending||a.receiveWhilePending!==!!t.receiveWhilePending)throw mkErr(`action type "${e}" cannot be redefined`);return n}if(!e)throw mkErr(`action type argument is required`);let a=encodeBytes(e);if(a.byteLength>typeByteLimit)throw mkErr(`action type string "${e}" (${a.byteLength}b) exceeds byte limit (${typeByteLimit}). Hint: choose a shorter name.`);let o={sendToPending:!!t.sendToPending,receiveWhilePending:!!t.receiveWhilePending},s=new Uint8Array(typeByteLimit);s.set(a);let d=0;return f[e]={onComplete:noOp,onProgress:noOp,setOnComplete:t=>{f[e].onComplete=t;let n=v[e];n?.length&&(delete v[e],n.forEach(({payload:e,peerId:n,metadata:a})=>t(e,n,a)))},setOnProgress:t=>{f[e].onProgress=t},send:async(e,t,n,a)=>{let f=typeof e;if(f===`undefined`)throw mkErr(`action data cannot be undefined`);let m=f!==`string`,h=e instanceof Blob,v=h||e instanceof ArrayBuffer||e instanceof TypedArray,y=n!==void 0,b=v?toByteArray(h?await e.arrayBuffer():e):encodeBytes(m?toJson(e):e),x=y?encodeBytes(toJson(n)):null,S=Math.ceil(b.byteLength/chunkSize)+ +!!y||1,C=alloc(S,(e,t)=>{let n=t===S-1,a=!!(y&&t===0),o=new Uint8Array(payloadIndex+(a?x?.byteLength??0:n?b.byteLength-chunkSize*(S-(y?2:1)):chunkSize));return o.set(s),o.set([d>>8,d&oneByteMax],nonceIndex),o.set([Number(n)|Number(a)<<1|Number(v)<<2|Number(m)<<3],tagIndex),o.set([Math.round((t+1)/S*oneByteMax)],progressIndex),o.set(y?a?x??new Uint8Array:b.subarray((t-1)*chunkSize,t*chunkSize):b.subarray(t*chunkSize,(t+1)*chunkSize),payloadIndex),o});return d=d+1&twoByteMax,await all(D(t,async(e,t)=>{let{channel:s}=t,d=0;for(;d<S;){let f=C[d];if(!f||s&&s.bufferedAmount>s.bufferedAmountLowThreshold&&!await waitForBufferedAmountLow(s))break;let m=o.sendToPending?l[e]:u[e];if(!m||m!==t)break;t.sendData(f),d++;let h=f[progressIndex]??oneByteMax;a?.(h/oneByteMax,e,n)}},{includePending:o.sendToPending})),[]},options:o},m[e]=[f[e].send,f[e].setOnComplete,f[e].setOnProgress]},B=e=>z(e),V=(e,t)=>{let n=d[e];if(!n)return;let a=new Uint8Array(t),o=decodeBytes(a.subarray(typeIndex,nonceIndex)).replaceAll(`\0`,``),s=f[o];if(!n.isActive&&!s?.options.receiveWhilePending)return;let l=(a[nonceIndex]??0)<<8|(a[33]??0),u=a[tagIndex]??0,m=a[progressIndex]??0,y=a.subarray(payloadIndex),b=!!(u&1),x=!!(u&2),S=!!(u&4),C=!!(u&8);h[e]??={},h[e][o]??={};let T=h[e][o][l]??={chunks:[]};if(x?T.meta=fromJson(decodeBytes(y)):T.chunks.push(y),s?.onProgress(m/oneByteMax,e,T.meta),!b)return;let E=new Uint8Array(T.chunks.reduce((e,t)=>e+t.byteLength,0));if(T.chunks.reduce((e,t)=>(E.set(t,e),e+t.byteLength),0),delete h[e][o][l],S)s?s.onComplete(E,e,T.meta):(v[o]??=[]).push({payload:E,peerId:e,...T.meta===void 0?{}:{metadata:T.meta}});else{let t=decodeBytes(E),n=C?fromJson(t):t;s?s.onComplete(n,e,T.meta):(v[o]??=[]).push({payload:n,peerId:e,...T.meta===void 0?{}:{metadata:T.meta}})}},H=async()=>{await ie(``),await new Promise(e=>setTimeout(e,99)),entries(l).forEach(([e,t])=>{t.destroy(),L(e,mkErr(`room left`))}),E(),n()},[U,W]=z(internalNs(`ping`)),[G,ee]=z(internalNs(`pong`)),[te,K]=z(internalNs(`signal`)),[q,ne]=z(internalNs(`stream`)),[re,J]=z(internalNs(`track`)),[ie,ae]=z(internalNs(`leave`),{sendToPending:!0,receiveWhilePending:!0}),[oe,se]=z(internalNs(`hsdata`),{sendToPending:!0,receiveWhilePending:!0}),[ce,Y]=z(internalNs(`hsready`),{sendToPending:!0,receiveWhilePending:!0}),le=(e,t)=>{let n=d[e];!n||t&&n.peer!==t||n.isActive||!n.didLocalHandshakePass||!n.didReceiveRemoteReady||(n.isActive=!0,u[e]=n.peer,n.handshakeTimer=resetTimer(n.handshakeTimer),T.onPeerJoin(e))},ue=(e,t,n)=>{let a=d[e];if(!a||a.peer!==t)return;let s=toHandshakeErrorMessage(n);o?.(e,s),R(e,t,mkErr(s))},de=(e,t)=>{let n=d[e];!n||n.peer!==t||n.isActive||(n.didLocalHandshakePass=!0,ce(``,e).catch(n=>ue(e,t,mkErr(`failed sending handshake readiness: ${toErrorMessage(n,`unknown send failure`)}`))),le(e,t))},X=(e,t)=>{let n=d[e];if(!n||n.peer!==t)return;n.handshakeTimer=setTimeout(()=>ue(e,t,mkErr(`handshake timed out after ${s}ms`)),s);let o=async(t,n)=>{await oe(t,e,n)},l=()=>new Promise((n,a)=>{let o=d[e];if(!o||o.peer!==t){a(mkErr(`peer disconnected during handshake`));return}let s=o.pendingHandshakePayloads.shift();if(s){n(s);return}o.handshakeWaiters.push({resolve:n,reject:e=>a(e)})}),u=selfId<e;Promise.resolve(a?.(e,o,l,u)).then(()=>de(e,t)).catch(n=>ue(e,t,toError(n,`handshake failed`)))},fe=e=>e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.k==`string`?{key:e.k,...typeof e.s==`string`?{streamId:e.s}:{},...typeof e.t==`string`?{trackId:e.t}:{},...Object.hasOwn(e,`m`)?{metadata:e.m}:{}}:null;return W((e,t)=>G(``,t)),ee((e,t)=>{let n=y[t];(n?.shift())?.resolve(),n&&!n.length&&delete y[t]}),K((e,t)=>{u[t]&&l[t]?.signal(e)}),ne((e,t)=>{if(!u[t])return;let n=fe(e);if(!n)return;let a=N(t),o=a?.__trysteroGetRemoteStreamByKey?.(n.key)??(n.streamId?a?.__trysteroGetRemoteStreamById?.(n.streamId):void 0);if(o){F(t,n.key,o,n.metadata);return}(b[t]??=[]).push(n)}),J((e,t)=>{if(!u[t])return;let n=fe(e);if(!n)return;let a=N(t),o=a?.__trysteroGetRemoteTrackByKey?.(n.key)??(n.trackId?a?.__trysteroGetRemoteTrackById?.(n.trackId):void 0);if(o){I(t,n.key,o.track,o.stream,n.metadata);return}(x[t]??=[]).push(n)}),ae((e,t)=>R(t,void 0,mkErr(`peer left room`))),se((e,t,n)=>{let a=d[t];if(!a||a.isActive)return;let o=n===void 0?{data:e}:{data:e,metadata:n},s=a.handshakeWaiters.shift();if(s){s.resolve(o);return}a.pendingHandshakePayloads.push(o)}),Y((e,t)=>{let n=d[t];!n||n.isActive||(n.didReceiveRemoteReady=!0,le(t))}),e((e,t)=>{let n=l[t];if(n){if(n===e)return;n.destroy(),L(t,mkErr(`peer replaced`))}l[t]=e,d[t]={peer:e,isActive:!1,didLocalHandshakePass:!1,didReceiveRemoteReady:!1,handshakeTimer:null,pendingHandshakePayloads:[],handshakeWaiters:[]},e.setHandlers({data:e=>V(t,e),stream:e=>{if(!u[t])return;let n=b[t]?.shift();n&&F(t,n.key,e,n.metadata)},track:(e,n)=>{if(!u[t])return;let a=x[t]?.shift();a&&I(t,a.key,e,n,a.metadata)},signal:e=>{u[t]&&te(e,t)},close:()=>R(t,e,mkErr(`peer disconnected`)),error:n=>{console.error(`${libName} peer error:`,n),R(t,e,n)}}),X(t,e)}),isBrowser&&(E=registerBeforeUnloadCleanup(()=>H().catch(noOp))),{makeAction:B,leave:H,ping:async e=>{if(!u[e])throw mkErr(`no active peer with id ${e}`);let t=Date.now();return await new Promise((t,n)=>{let a=y[e]??=[],o=()=>{let t=y[e];if(!t)return;let n=t.indexOf(s);n>-1&&t.splice(n,1),t.length||delete y[e]},s={resolve:()=>{o(),t()},reject:e=>{o(),n(e)}};a.push(s),U(``,e).catch(e=>s.reject(toError(e,`peer disconnected`)))}),Date.now()-t},getPeers:()=>fromEntries(entries(u).map(([e,t])=>[e,t.connection])),addStream:(e,t,n)=>O(t,j(e),n,q,t=>t.addStream(e),{s:e.id}),removeStream:(e,t)=>{D(t,(t,n)=>n.removeStream(e))},addTrack:(e,t,n,a)=>O(n,M(e),a,re,n=>n.addTrack(e,t),{s:t.id,t:e.id}),removeTrack:(e,t)=>{D(t,(t,n)=>n.removeTrack(e))},replaceTrack:(e,t,n,a)=>O(n,M(t),a,re,n=>n.replaceTrack(e,t),{t:e.id}),onPeerJoin:e=>{T.onPeerJoin=e,keys(u).forEach(t=>e(t))},onPeerLeave:e=>T.onPeerLeave=e,onPeerStream:e=>T.onPeerStream=e,onPeerTrack:e=>T.onPeerTrack=e}},roomFrameVersion=1,roomPresenceFrameVersion=2,wrapRoomFrame=(e,t)=>{let n=encodeBytes(e),a=new Uint8Array(3+n.byteLength+t.byteLength);return a[0]=roomFrameVersion,a[1]=n.byteLength>>>8&255,a[2]=n.byteLength&255,a.set(n,3),a.set(t,3+n.byteLength),a},wrapRoomPresenceFrame=(e,t)=>{let n=encodeBytes(e),a=new Uint8Array(4+n.byteLength);return a[0]=roomPresenceFrameVersion,a[1]=Number(t),a[2]=n.byteLength>>>8&255,a[3]=n.byteLength&255,a.set(n,4),a},unwrapFrame=e=>{let t=new Uint8Array(e);if(t.byteLength<3)return null;if(t[0]===roomFrameVersion){let e=(t[1]??0)<<8|(t[2]??0),n=3+e;return e<=0||t.byteLength<n?null:{type:`room`,roomToken:decodeBytes(t.subarray(3,n)),payload:t.subarray(n).slice().buffer}}if(t[0]!==roomPresenceFrameVersion||t.byteLength<4)return null;let n=(t[2]??0)<<8|(t[3]??0),a=4+n;return n<=0||t.byteLength<a?null:{type:`presence`,roomToken:decodeBytes(t.subarray(4,a)),isPresent:t[1]===1}},isPeerUnderlyingStale=e=>{let{connection:t,channel:n}=e;return e.isDead||t.connectionState===`closed`||t.connectionState===`failed`||t.iceConnectionState===`closed`||t.iceConnectionState===`failed`||n?.readyState===`closing`||n?.readyState===`closed`},getConnectedPeerHealth=e=>{if(isPeerUnderlyingStale(e))return`stale`;let{channel:t}=e;return!t||t.readyState!==`open`?`transient`:`live`},SharedPeerManager=class{byApp={};roomPresenceHandlers={};getMap(e){return this.byApp[e]??={}}get(e,t){return this.byApp[e]?.[t]}isPeerStale(e){return isPeerUnderlyingStale(e)}getHealth(e){return this.isPeerStale(e)?`stale`:`live`}setRoomPresenceHandler(e,t){return this.roomPresenceHandlers[e]=t,()=>{this.roomPresenceHandlers[e]===t&&delete this.roomPresenceHandlers[e]}}sendRoomPresence(e,t,n){e.isClosing||e.peer.isDead||e.peer.sendData(wrapRoomPresenceFrame(t,n))}clear(e,t,{destroyPeer:n}){let a=this.byApp[e],o=a?.[t];if(!o||o.isClosing)return;o.idleTimer=resetTimer(o.idleTimer),o.isClosing=!0,n&&!o.peer.isDead&&o.peer.destroy();let s=values(o.bindings);o.bindings={},o.bindingsByToken={},o.controlRoomId=null,delete a[t],s.forEach(e=>{e.handlers.close?.(),e.pendingData.length=0,e.pendingSendData.length=0,e.pendingTracks.length=0}),o.remoteStreamsByKey.clear(),o.remoteStreamsById.clear(),o.remoteTracksByKey.clear(),o.remoteTracksById.clear(),o.pendingDataByToken.clear(),o.remoteRoomTokens.clear(),keys(a).length===0&&delete this.byApp[e]}register(e,t,n,a){let o=this.getMap(e),s=o[t];if(s){if(s.idleTimer=resetTimer(s.idleTimer),s.peer===n)return s;this.clear(e,t,{destroyPeer:!0})}let l={appId:e,peerId:t,peer:n,bindings:{},bindingsByToken:{},pendingDataByToken:new Map,remoteRoomTokens:new Set,idleTimer:null,controlRoomId:null,streamOwners:new Map,trackOwners:new Map,remoteStreamsByKey:new Map,remoteStreamsById:new Map,remoteTracksByKey:new Map,remoteTracksById:new Map,idleMs:a,isClosing:!1};return n.setHandlers({data:e=>this.dispatchData(l,e),signal:e=>this.dispatchSignal(l,e),close:()=>this.clear(e,t,{destroyPeer:!1}),error:n=>{console.error(`${libName} peer error:`,n),this.clear(e,t,{destroyPeer:!1})},track:(e,t)=>this.dispatchTrack(l,e,t)}),o[t]=l,l}bind(e,t,n,{onDetach:a}){let o=n.bindings[e];if(o)return n.idleTimer=resetTimer(n.idleTimer),{proxy:o.proxy,isNew:!1};let s={roomId:e,roomToken:null,roomTokenPromise:t,handlers:{},pendingData:[],pendingSendData:[],pendingTracks:[],detach:noOp,proxy:{}},l=()=>{n.bindings[e]&&(this.pruneRoomOwnership(n,e),delete n.bindings[e],s.roomToken&&n.bindingsByToken[s.roomToken]===s&&delete n.bindingsByToken[s.roomToken],n.controlRoomId===e&&(n.controlRoomId=keys(n.bindings)[0]??null),a(),this.scheduleIdleTimer(n))},u={created:n.peer.created,get connection(){return n.peer.connection},get channel(){return n.peer.channel},get isDead(){return n.peer.isDead},getOffer:e=>n.peer.getOffer(e),signal:e=>n.peer.signal(e),sendData:e=>{if(!s.roomToken){s.pendingSendData.push(e);return}n.peer.sendData(wrapRoomFrame(s.roomToken,e))},destroy:()=>l(),setHandlers:e=>{let{signal:t,...n}=e;Object.assign(s.handlers,n),t&&(s.handlers.signal=t),this.flushBindingQueues(s)},offerPromise:n.peer.offerPromise,addStream:t=>{let a=n.streamOwners.get(t)??new Set,o=a.size===0;a.add(e),n.streamOwners.set(t,a),o&&n.peer.addStream(t)},removeStream:t=>{let a=n.streamOwners.get(t);a&&(a.delete(e),a.size===0&&(n.streamOwners.delete(t),n.peer.removeStream(t)))},addTrack:(t,a)=>{let o=n.trackOwners.get(t)??{stream:a,rooms:new Set},s=o.rooms.size===0;return o.stream=a,o.rooms.add(e),n.trackOwners.set(t,o),s?n.peer.addTrack(t,a):n.peer.connection.getSenders().find(e=>e.track===t)??n.peer.addTrack(t,a)},removeTrack:t=>{let a=n.trackOwners.get(t);a&&(a.rooms.delete(e),a.rooms.size===0&&(n.trackOwners.delete(t),n.peer.removeTrack(t)))},replaceTrack:(e,t)=>{let a=n.trackOwners.get(e);if(a){n.trackOwners.delete(e);let o=n.trackOwners.get(t)??{stream:a.stream,rooms:new Set};a.rooms.forEach(e=>o.rooms.add(e)),n.trackOwners.set(t,o)}return n.peer.replaceTrack(e,t)},__trysteroGetRemoteStreamByKey:e=>n.remoteStreamsByKey.get(e),__trysteroSetRemoteStreamByKey:(e,t)=>void n.remoteStreamsByKey.set(e,t),__trysteroGetRemoteStreamById:e=>n.remoteStreamsById.get(e),__trysteroSetRemoteStreamById:(e,t)=>void n.remoteStreamsById.set(e,t),__trysteroGetRemoteTrackByKey:e=>n.remoteTracksByKey.get(e),__trysteroSetRemoteTrackByKey:(e,t,a)=>void n.remoteTracksByKey.set(e,{track:t,stream:a}),__trysteroGetRemoteTrackById:e=>n.remoteTracksById.get(e),__trysteroSetRemoteTrackById:(e,t,a)=>void n.remoteTracksById.set(e,{track:t,stream:a})};return s.proxy=u,s.detach=l,n.bindings[e]=s,n.controlRoomId??=e,n.idleTimer=resetTimer(n.idleTimer),t.then(t=>{if(n.isClosing||n.bindings[e]!==s)return;s.roomToken=t,n.bindingsByToken[t]=s;let a=n.pendingDataByToken.get(t);a?.length&&(s.pendingData.push(...a),n.pendingDataByToken.delete(t)),s.pendingSendData.splice(0).forEach(e=>n.peer.sendData(wrapRoomFrame(t,e))),this.flushBindingQueues(s)}),{proxy:u,isNew:!0}}pruneRoomOwnership(e,t){e.streamOwners.forEach((n,a)=>{n.delete(t),n.size===0&&(e.streamOwners.delete(a),e.peer.removeStream(a))}),e.trackOwners.forEach((n,a)=>{n.rooms.delete(t),n.rooms.size===0&&(e.trackOwners.delete(a),e.peer.removeTrack(a))})}scheduleIdleTimer(e){e.isClosing||keys(e.bindings).length>0||(e.idleTimer=resetTimer(e.idleTimer),e.idleTimer=setTimeout(()=>{let t=this.byApp[e.appId]?.[e.peerId];!t||keys(t.bindings).length>0||this.clear(e.appId,e.peerId,{destroyPeer:!0})},e.idleMs))}getSignalBinding(e){if(e.controlRoomId){let t=e.bindings[e.controlRoomId];if(t?.handlers.signal)return t}let t=values(e.bindings).find(e=>!!e.handlers.signal);return t?(e.controlRoomId=t.roomId,t):null}flushBindingQueues(e){let{handlers:t}=e;t.data&&e.pendingData.length>0&&e.pendingData.splice(0).forEach(e=>t.data?.(e)),(t.track||t.stream)&&e.pendingTracks.length&&e.pendingTracks.splice(0).forEach(({track:e,stream:n})=>{t.track?.(e,n),t.stream?.(n)})}dispatchData(e,t){let n=unwrapFrame(t);if(!n)return;if(n.type===`presence`){n.isPresent?e.remoteRoomTokens.add(n.roomToken):e.remoteRoomTokens.delete(n.roomToken),this.roomPresenceHandlers[e.appId]?.(e.peerId,n.roomToken,n.isPresent);return}let a=e.bindingsByToken[n.roomToken];if(!a){let t=e.pendingDataByToken.get(n.roomToken)??[];t.push(n.payload),e.pendingDataByToken.set(n.roomToken,t);return}a.handlers.data?a.handlers.data(n.payload):a.pendingData.push(n.payload)}dispatchSignal(e,t){this.getSignalBinding(e)?.handlers.signal?.(t)}dispatchTrack(e,t,n){values(e.bindings).forEach(e=>{if(e.handlers.track||e.handlers.stream){e.handlers.track?.(t,n),e.handlers.stream?.(n);return}e.pendingTracks.push({track:t,stream:n})})}},offerPostAnswerTtlMs=23333,offerIdSize=12,disconnectedPeerGraceMs=7533,answeringTtlMs=23333,legacyCandidateKey=`__legacy__`,offerRelayPlaceholder=`offer-placeholder`,publishCipheredSignalingMessage=(e,t,n,a,o,s)=>{e.toCipher(t).then(t=>{e.isLeaving()||!s()||a(n,toJson(o(t.sdp)))})},makeState=()=>({status:`idle`,offerPeer:null,offerId:null,offerSdp:null,offerInitPromise:null,offerAnswered:!1,offerRelays:[],offerSignalRelays:[],offerSignalBacklog:[],offerRelayTimers:[],offerExpiryTimer:null,connectedPeer:null,connectedPeerUnhealthySinceMs:null,answeringExpiryTimer:null,answeringPeer:null,pendingCandidates:{}}),getState=(e,t)=>e[t]??=makeState(),updateStatus=e=>{e.connectedPeer?e.status=`connected`:e.answeringPeer?e.status=`answering`:e.offerPeer||e.offerRelays.some(Boolean)?e.status=`offering`:e.status=`idle`},clearAnswering=(e,t)=>{e.answeringPeer===t&&(e.answeringExpiryTimer=resetTimer(e.answeringExpiryTimer),e.answeringPeer=null,updateStatus(e))},clearConnectedPeer=(e,t,n)=>{e.connectedPeer&&(e.connectedPeer.isDead||e.connectedPeer.destroy(),e.connectedPeer=null,e.connectedPeerUnhealthySinceMs=null,updateStatus(e))},clearOfferRelay=(e,t)=>{e.offerRelayTimers[t]=resetTimer(e.offerRelayTimers[t]),e.offerRelays[t]&&(e.offerRelays[t]=void 0,updateStatus(e))},clearOfferRelayIfPlaceholder=(e,t)=>{e?.offerRelays[t]===offerRelayPlaceholder&&clearOfferRelay(e,t)},hasRemoteDescription=e=>{if(e.isDead||e.connection.connectionState===`closed`)return!0;try{return!!e.connection.remoteDescription}catch{return!0}},resetOfferState=(e,t)=>{let n=e.offerAnswered;e.offerExpiryTimer=resetTimer(e.offerExpiryTimer),e.offerInitPromise=null,e.offerRelays.forEach((t,n)=>clearOfferRelay(e,n)),e.offerRelays=[],e.offerSignalRelays=[],e.offerRelayTimers=[],e.offerSignalBacklog=[],e.offerPeer&&e.offerPeer!==e.connectedPeer&&(n||hasRemoteDescription(e.offerPeer)?e.offerPeer.isDead||e.offerPeer.destroy():t.recycle(e.offerPeer)),e.offerPeer=null,e.offerId=null,e.offerSdp=null,e.offerAnswered=!1,updateStatus(e)},scheduleAnsweringExpiry=(e,t,n,a)=>{resetTimer(t.answeringExpiryTimer),t.answeringExpiryTimer=setTimeout(()=>{let t=e.peerStates[n];!t||t.connectedPeer||t.answeringPeer!==a||(a.destroy(),clearAnswering(t,a))},answeringTtlMs)},flushBufferedCandidates=async(e,t,n)=>{let a=n?[n,legacyCandidateKey]:[legacyCandidateKey];for(let n of a){let a=e.pendingCandidates[n];if(a?.length){delete e.pendingCandidates[n];for(let e of a)await t.signal(e)}}},scheduleOfferExpiry=(e,t,n,a=offerTtl)=>{resetTimer(t.offerExpiryTimer);let o=t.offerId;t.offerExpiryTimer=setTimeout(()=>{let t=e.peerStates[n];!t||t.connectedPeer||t.offerId!==o||resetOfferState(t,e.offerPool)},a)},ensureOffer=(e,t,n,a)=>t.offerPeer&&t.offerId&&t.offerSdp?Promise.resolve({peer:t.offerPeer,offer:t.offerSdp,offerId:t.offerId}):(t.offerInitPromise||=(async()=>{let o=(await e.offerPool.checkout(1,!1,e.encryptOffer))[0];if(!o)throw mkErr(`failed to allocate offer peer`);let{peer:s,offer:l}=o;t.offerPeer=s,t.offerId=genId(offerIdSize),t.offerSdp=l,t.offerAnswered=!1,t.offerSignalBacklog=[],updateStatus(t);let u=()=>{t.offerPeer===s&&!t.connectedPeer&&resetOfferState(t,e.offerPool),e.disconnectPeer(s,n)};return s.setHandlers({connect:()=>e.connectPeer(s,n,a),signal:e=>{t.offerPeer===s&&(t.offerSignalBacklog.push(e),t.offerSignalRelays.forEach(t=>t?.(e)))},close:u,error:u}),scheduleOfferExpiry(e,t,n),{peer:s,offer:l,offerId:t.offerId}})().finally(()=>t.offerInitPromise=null),t.offerInitPromise),handleAnnouncement=async(e,t,n,a,o)=>{if(a){e.attachSharedPeerToRoom(n,a);return}let s=e.peerStates[n];if(!s||s.connectedPeer||s.answeringPeer||s.offerAnswered){clearOfferRelayIfPlaceholder(s,t);return}if(s.offerRelays[t]!==offerRelayPlaceholder)return;let[l,u]=await all([sha1(topicPath(e.rootTopicPlaintext,n)),ensureOffer(e,s,n,t)]);if(e.isLeaving())return;if(s.connectedPeer||s.answeringPeer||s.offerAnswered||s.offerRelays[t]!==offerRelayPlaceholder){clearOfferRelayIfPlaceholder(s,t);return}s.offerRelayTimers[t]=resetTimer(s.offerRelayTimers[t]),s.offerRelays[t]=!0,updateStatus(s),s.offerRelayTimers[t]=setTimeout(()=>prunePendingOffer(e,n,t),(e.announceIntervals[t]??e.announceIntervalMs)*.9);let d=!1;s.offerSignalRelays[t]=t=>{d&&(e.isLeaving()||s.connectedPeer||s.offerPeer!==u.peer||s.offerId!==u.offerId||t.type!==`candidate`||publishCipheredSignalingMessage(e,t,l,o,e=>({peerId:selfId,offerId:u.offerId,candidate:e}),()=>!s.connectedPeer&&s.offerPeer===u.peer&&s.offerId===u.offerId))},o(l,toJson({peerId:selfId,offerId:u.offerId,offer:u.offer})),d=!0,s.offerSignalBacklog.forEach(e=>s.offerSignalRelays[t]?.(e))},handleOffer=async(e,t,n,a,o,s,l)=>{let u=getState(e.peerStates,n);if(u.answeringPeer||u.offerAnswered)return;let d=!!(u.offerPeer||u.offerRelays.some(Boolean));if((d||s)&&selfId<n)return;d&&resetOfferState(u,e.offerPool);let f=e.initPeer(!1,e.config);u.answeringPeer=f,scheduleAnsweringExpiry(e,u,n,f),updateStatus(u);let m=()=>{clearAnswering(u,f),e.disconnectPeer(f,n)};f.setHandlers({connect:()=>e.connectPeer(f,n,t),close:m,error:m});let h;try{h=await e.toPlain({type:`offer`,sdp:a})}catch{clearAnswering(u,f),e.onJoinError?.({error:`incorrect room password when decrypting offer`,appId:e.appId,peerId:n,roomId:e.roomId});return}if(f.isDead){clearAnswering(u,f);return}let v=await sha1(topicPath(e.rootTopicPlaintext,n));e.isLeaving()||(f.setHandlers({signal:t=>{e.isLeaving()||u.answeringPeer!==f||f.isDead||t.type!==`answer`&&t.type!==`candidate`||publishCipheredSignalingMessage(e,t,v,l,e=>{let n={peerId:selfId};return t.type===`answer`?n.answer=e:n.candidate=e,o&&(n.offerId=o),n},()=>u.answeringPeer===f&&!f.isDead)}}),await f.signal(h),await flushBufferedCandidates(u,f,o))},handleCandidate=async(e,t,n,a,o)=>{let s;try{s=await e.toPlain({type:candidateType,sdp:n})}catch{return}let l=getState(e.peerStates,t),u=a&&l?.offerPeer&&l.offerId===a?l.offerPeer:null,d=l?.answeringPeer??null,f=!a&&l?.offerPeer?l.offerPeer:null,m=o&&!o.isDead?o:u??d??f;if(!m||m.isDead){let e=a??legacyCandidateKey;(l.pendingCandidates[e]??=[]).push(s);return}m.signal(s)},handleAnswer=async(e,t,n,a,o,s)=>{let l;try{l=await e.toPlain({type:`answer`,sdp:a})}catch{e.onJoinError?.({error:`incorrect room password when decrypting answer`,appId:e.appId,peerId:n,roomId:e.roomId});return}if(s)e.offerPool.claimLeased(s),s.setHandlers({connect:()=>e.connectPeer(s,n,t),close:()=>e.disconnectPeer(s,n)}),s.signal(l);else{let t=e.peerStates[n];if(!t||!t.offerPeer||t.offerAnswered||o&&t.offerId&&o!==t.offerId||t.offerPeer.isDead)return;t.offerAnswered=!0,scheduleOfferExpiry(e,t,n,offerPostAnswerTtlMs),t.offerPeer.signal(l)}},prunePendingOffer=(e,t,n)=>{let a=e.peerStates[t];!a||a.connectedPeer||a.offerRelays[n]&&clearOfferRelay(a,n)},createSignalHandler=e=>t=>async(n,a,o)=>{if(e.isLeaving())return;let s=typeof a==`string`?fromJson(a):a,l=typeof s.peerId==`string`?s.peerId:``,u=s.offer,d=s.answer,f=s.candidate,m=s.offerId,h=s.peer,v=s.hasOutgoingOffer===!0;if(l===selfId)return;let y=e.peerStates[l],b=y?.connectedPeer;if(b&&y){let e=getConnectedPeerHealth(b);if(e===`live`){y.connectedPeerUnhealthySinceMs=null;return}if(e===`stale`)clearConnectedPeer(y,l,`message-from-stale-peer`);else{let e=Date.now(),t=y.connectedPeerUnhealthySinceMs??e;if(y.connectedPeerUnhealthySinceMs=t,e-t<disconnectedPeerGraceMs)return;clearConnectedPeer(y,l,`message-from-prolonged-disconnect`)}}let x=e.sharedPeers.get(e.appId,l);x&&e.sharedPeers.getHealth(x.peer)===`stale`&&(e.sharedPeers.clear(e.appId,l,{destroyPeer:!0}),x=void 0);let S=!!(l&&!u&&!d&&!f),[C,T]=await all([e.rootTopicP,e.selfTopicP]);if(!e.isLeaving()&&!(n!==C&&n!==T)){if(S&&!x){let n=getState(e.peerStates,l),a=selfId<l;if(n.answeringPeer||n.connectedPeer||n.offerAnswered)return;if(!a&&!n.offerPeer){let t=await sha1(topicPath(e.rootTopicPlaintext,l));!e.isLeaving()&&!n.connectedPeer&&o(t,toJson({peerId:selfId}));return}if(n.offerRelays[t])return;n.offerRelays[t]=offerRelayPlaceholder,updateStatus(n)}if(x&&(u||d||f)){if(x.bindings[e.roomId])return;e.attachSharedPeerToRoom(l,x);return}if(S)return handleAnnouncement(e,t,l,x,o);if(u)return handleOffer(e,t,l,u,m,v,o);if(f)return handleCandidate(e,l,f,m,h);if(d)return handleAnswer(e,t,l,d,m,h)}},announceIntervalMs=5333,announceWarmupIntervalsMs=[233,533,1333],sharedPeerIdleMsDefault=123333,strategy_default=({init:e,subscribe:t,announce:n})=>{let a={},o={},s={},l={},u=new SharedPeerManager,d=()=>values(a).some(e=>keys(e).length>0),f=e=>o[e]??={},m=e=>s[e]??={},h=(e,t,n)=>{u.getHealth(e.peer)===`live`&&u.sendRoomPresence(e,t,n)},v=(e,t)=>{entries(o[e]??{}).forEach(([n,a])=>{let{roomToken:s,roomTokenPromise:l}=a;if(s){h(t,s,!0);return}l.then(s=>{o[e]?.[n]===a&&a.roomToken===s&&(u.get(e,t.peerId)!==t||t.isClosing||h(t,s,!0))})})},y=(e,t,n)=>values(u.getMap(e)).forEach(e=>h(e,t,n)),b=e=>{l[e]||(l[e]=u.setRoomPresenceHandler(e,(t,n,a)=>{if(!a)return;let l=u.get(e,t),d=s[e]?.[n];!l||!d||o[e]?.[d]?.attachSharedPeerToRoom(t,l)}))},x=e=>{a[e]&&keys(a[e]).length>0||(l[e]?.(),delete l[e],delete o[e],delete s[e])},S=!1,C=[],T=null,E=noOp;return(l,h,D)=>{if(!l)throw mkErr(`requires a config map as the first argument`);if(D&&typeof D!=`object`)throw mkErr(`third argument must be a callbacks object`);let{appId:O}=l,k=D?.onJoinError,j=D?.onPeerHandshake,M=D?.handshakeTimeoutMs;if(!O)throw mkErr(`config map is missing appId field`);if(!h)throw mkErr(`roomId argument required`);if(M!==void 0&&(!Number.isFinite(M)||M<=0))throw mkErr(`handshakeTimeoutMs must be a positive number`);if(a[O]?.[h])return a[O][h];b(O);let N=topicPath(libName,O,h),F=sha1(N),I=sha1(topicPath(N,selfId)),L=genKey(l.password??``,O,h),R=deriveRoomNamespace(O,h),z=l._test_only_sharedPeerIdleMs??sharedPeerIdleMsDefault,B=!1,V=e=>async t=>({type:t.type,sdp:await e(L,t.sdp)}),H=V(decrypt),U=V(encrypt),W=u.getMap(O);T||=new OfferPool(()=>peer_default(!0,l));let G=T,ee=async e=>{let t=await e.getOffer(Date.now()-e.created>offerTtl);if(!t||t.type!==`offer`)throw mkErr(`failed to get offer for peer`);return(await U(t)).sdp},te=(e,t)=>{let n=getState(K.peerStates,e);n.answeringExpiryTimer=resetTimer(n.answeringExpiryTimer),n.answeringPeer=null;let{proxy:a,isNew:o}=u.bind(h,R,t,{onDetach:()=>{let n=K.peerStates[e];n?.connectedPeer===t.peer&&(n.connectedPeer=null,n.connectedPeerUnhealthySinceMs=null,updateStatus(n))}});n.connectedPeer=t.peer,n.connectedPeerUnhealthySinceMs=null,updateStatus(n),o&&ie(a,e),resetOfferState(n,G)},K={appId:O,roomId:h,config:l,peerStates:{},rootTopicPlaintext:N,rootTopicP:F,selfTopicP:I,toPlain:H,toCipher:U,isLeaving:()=>B,onJoinError:k,sharedPeers:u,offerPool:G,encryptOffer:ee,initPeer:peer_default,connectPeer:(e,t,n)=>{if(B){e.destroy();return}let a=getState(K.peerStates,t);if(a.connectedPeer){let n=W[t];if(n&&a.connectedPeer===n.peer&&n.bindings[h])return;a.connectedPeer!==e&&!e.isDead&&e.destroy();return}let o=W[t];if(o&&u.getHealth(o.peer)===`stale`&&(u.clear(O,t,{destroyPeer:!0}),o=void 0),o&&o.peer!==e){e.isDead||e.destroy(),te(t,o);return}let s=!o;o||=u.register(O,t,e,z),te(t,o),s&&v(O,o)},disconnectPeer:(e,t)=>{if(B)return;let n=K.peerStates[t];n?.connectedPeer===e&&clearConnectedPeer(n,t,`close-event`)},attachSharedPeerToRoom:te,announceIntervals:[],announceIntervalMs},q=createSignalHandler(K);if(!S){let t=e(l);G.warmup(),C=(Array.isArray(t)?t:[t]).map(e=>Promise.resolve(e)),S=!0,E=l.relayConfig?.manualReconnection?noOp:watchOnline()}K.announceIntervals=C.map(()=>announceIntervalMs);let ne=C.map(()=>0),re=[],J=C.map(async(e,n)=>t(await e,await F,await I,q(n),e=>G.getOffers(e,ee)));all([F,I]).then(([e,t])=>{if(B)return;let a=async(o,s)=>{if(B)return;let l=await n(o,e,t);if(B)return;typeof l==`number`&&(K.announceIntervals[s]=l);let u=ne[s]??0;ne[s]=u+1;let d=K.announceIntervals[s]??announceIntervalMs,f=announceWarmupIntervalsMs[u];re[s]=setTimeout(()=>{a(o,s)},typeof f==`number`?Math.min(d,f):d)};J.forEach(async(e,t)=>{if(await e,B)return;let n=await C[t];n&&!B&&a(n,t)})});let ie=noOp,{compose:ae}=createPasswordHandshake(l.password??``,O,h),oe=ae(j),se={...oe?{onPeerHandshake:oe}:{},...M===void 0?{}:{handshakeTimeoutMs:M},onHandshakeError:(e,t)=>k?.({error:t.replace(/^handshake failed: /,``),appId:O,peerId:e,roomId:h})};a[O]??={};let ce=f(O),Y=room_default(e=>ie=e,e=>{if(B)return;let t=K.peerStates[e];t?.connectedPeer&&(t.connectedPeer=null,updateStatus(t))},()=>{B=!0,ie=noOp;let e=o[O]?.[h];e?.roomToken&&(y(O,e.roomToken,!1),delete s[O]?.[e.roomToken],s[O]&&!keys(s[O]).length&&delete s[O]),o[O]&&(delete o[O][h],keys(o[O]).length||delete o[O]),entries(K.peerStates).forEach(([e,t])=>{if(t.answeringExpiryTimer=resetTimer(t.answeringExpiryTimer),t.connectedPeer&&!t.connectedPeer.isDead){let n=W[e];(!n||n.peer!==t.connectedPeer)&&t.connectedPeer.destroy()}t.answeringPeer&&!t.answeringPeer.isDead&&t.answeringPeer.destroy(),resetOfferState(t,G),t.connectedPeer=null,t.answeringPeer=null,updateStatus(t)}),a[O]&&(delete a[O][h],keys(a[O]).length===0&&delete a[O]),re.forEach(resetTimer),J.forEach(async e=>{(await e)()}),!d()&&(S=!1,G.destroy(),T=null,E(),x(O))},se),le={roomToken:null,roomTokenPromise:R,attachSharedPeerToRoom:te};return ce[h]=le,R.then(e=>{B||o[O]?.[h]!==le||(le.roomToken=e,m(O)[e]=h,values(W).forEach(t=>{t.remoteRoomTokens.has(e)&&te(t.peerId,t)}),y(O,e,!0))}),a[O][h]=Y}},relayManager=createRelayManager(e=>e.socket),topicToInfoHash={},infoHashToTopic={},announceIntervals=relayManager.scoped(),announceFns=relayManager.scoped(),subscriptionTokens=relayManager.scoped(),trackerAnnounceMs={},handledSignals={},msgHandlers=relayManager.scoped(),roomOutstandingOffers={},roomOfferGenerationPromises={},roomSubscriberCounts={},trackerAction=`announce`,hashLimit=20,offerPoolSize=3,defaultAnnounceMs=1e4,maxAnnounceMs=2e4,offerRetentionMs=12e4,signalDedupeWindowMs=4e3,defaultRedundancy=3,getInfoHash=async e=>{if(topicToInfoHash[e])return topicToInfoHash[e];let t=(await sha1(e)).slice(0,hashLimit);return topicToInfoHash[e]=t,infoHashToTopic[t]=e,t},send=async(e,t,n)=>e.send(toJson({action:trackerAction,info_hash:await getInfoHash(t),peer_id:selfId,...n})),warn=(e,t,n=!1)=>console.warn(`${libName}: torrent tracker ${n?`failure`:`warning`} from ${e} - ${t}`),getRoomOutstandingOffers=e=>roomOutstandingOffers[e]??={},deleteRoomOfferBookkeeping=e=>{delete roomOutstandingOffers[e],delete roomOfferGenerationPromises[e]},claimOutstandingOffer=(e,t)=>{let n=roomOutstandingOffers[e],a=n?.[t];if(a)return delete n[t],a.claim?.(),!keys(n).length&&!roomSubscriberCounts[e]&&deleteRoomOfferBookkeeping(e),a},reclaimOutstandingOffer=(e,t)=>{let n=roomOutstandingOffers[e],a=n?.[t];a&&(delete n[t],a.reclaim?.(),!keys(n).length&&!roomSubscriberCounts[e]&&deleteRoomOfferBookkeeping(e))},reclaimAllOutstandingOffers=e=>{keys(getRoomOutstandingOffers(e)).forEach(t=>reclaimOutstandingOffer(e,t)),deleteRoomOfferBookkeeping(e)},pruneOutstandingOffers=e=>{let t=Date.now();entries(getRoomOutstandingOffers(e)).forEach(([n,a])=>{t-a.createdAt>offerRetentionMs&&reclaimOutstandingOffer(e,n)})},ensureOutstandingOffers=async(e,t)=>{for(;roomOfferGenerationPromises[e];)await roomOfferGenerationPromises[e];let n=(async()=>{pruneOutstandingOffers(e);let n=getRoomOutstandingOffers(e),a=keys(n).length,o=Math.max(0,offerPoolSize-a);o>0&&(await t(o)).forEach(e=>{n[genId(hashLimit)]={...e,createdAt:Date.now()}})})().finally(()=>{roomOfferGenerationPromises[e]===n&&delete roomOfferGenerationPromises[e]});return roomOfferGenerationPromises[e]=n,await n,getRoomOutstandingOffers(e)},joinRoomStrategy=strategy_default({init:e=>getRelays(e,defaultRelayUrls,defaultRedundancy).map(e=>{let t=relayManager.register(e,makeSocket(e,n=>{let a=fromJson(n),o=a[`failure reason`],s=a[`warning message`],{interval:l}=a,u=a.info_hash?infoHashToTopic[a.info_hash]:void 0;if(o){warn(t.url,o,!0);return}if(s&&warn(t.url,s),l&&l*1e3>(trackerAnnounceMs[t.url]??defaultAnnounceMs)&&u&&announceFns.forKey(e)[u]){let n=Math.min(l*1e3,maxAnnounceMs),a=announceIntervals.forKey(e),o=announceFns.forKey(e);a[u]&&clearInterval(a[u]),trackerAnnounceMs[t.url]=n;let s=o[u];s&&(a[u]=setInterval(()=>{s()},n))}if((a.offer||a.answer)&&u&&a.offer_id){if(a.peer_id===selfId)return;let t=`${u}:${a.offer?`offer`:`answer`}:${a.offer_id}:${a.peer_id??``}`,n=Date.now(),o=handledSignals[t];if(typeof o==`number`&&n-o<signalDedupeWindowMs)return;handledSignals[t]=n,entries(handledSignals).forEach(([e,t])=>{n-t>signalDedupeWindowMs*6&&delete handledSignals[e]}),msgHandlers.forKey(e)[u]?.(a)}}));return t.ready}),subscribe:(e,t,n,a,o)=>{let s=msgHandlers.forRelay(e),l=announceFns.forRelay(e),u=announceIntervals.forRelay(e),d=subscriptionTokens.forRelay(e),f=Symbol(t);d[t]=f,roomSubscriberCounts[t]=(roomSubscriberCounts[t]??0)+1;let m=n=>{if(n.offer&&n.peer_id&&n.offer_id)a(t,{offer:n.offer.sdp,peerId:n.peer_id,hasOutgoingOffer:keys(getRoomOutstandingOffers(t)).length>0},(a,o)=>void send(e,t,{answer:{type:`answer`,sdp:fromJson(o).answer},offer_id:n.offer_id,to_peer_id:n.peer_id}));else if(n.answer&&n.offer_id&&n.peer_id){let e=claimOutstandingOffer(t,n.offer_id);e&&a(t,{answer:n.answer.sdp,peerId:n.peer_id,peer:e.peer},()=>{})}};s[t]=m;let h=async()=>{d[t]===f&&send(e,t,{numwant:offerPoolSize,offers:entries(await ensureOutstandingOffers(t,o)).map(([e,{offer:t}])=>({offer_id:e,offer:{type:`offer`,sdp:t}}))})};return trackerAnnounceMs[e.url]=defaultAnnounceMs,l[t]=h,u[t]=setInterval(h,trackerAnnounceMs[e.url]),h(),()=>{if(roomSubscriberCounts[t]=Math.max(0,(roomSubscriberCounts[t]??1)-1),roomSubscriberCounts[t]||delete roomSubscriberCounts[t],d[t]!==f){roomSubscriberCounts[t]||reclaimAllOutstandingOffers(t);return}let e=u[t];e&&(clearInterval(e),delete u[t]),s[t]===m&&delete s[t],l[t]===h&&delete l[t],delete d[t],roomSubscriberCounts[t]||reclaimAllOutstandingOffers(t)}},announce:e=>trackerAnnounceMs[e.url]}),joinRoom=(e,t,n)=>joinRoomStrategy({...e,trickleIce:e.trickleIce??!1},t,n),getRelaySockets=relayManager.getSockets,defaultRelayUrls=[`tracker.webtorrent.dev`,`tracker.openwebtorrent.com`,`tracker.btorrent.xyz`,`tracker.files.fm:7073/announce`].map(e=>`wss://`+e),require_lodash_throttle=__commonJSMin(((e,t)=>{var n=`Expected a function`,a=NaN,o=`[object Symbol]`,s=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,d=/^0o[0-7]+$/i,f=parseInt,m={}.Object===Object&&{},h=typeof self==`object`&&self&&self.Object===Object&&self,v=m||h||Function(`return this`)(),y=Object.prototype.toString,b=Math.max,x=Math.min,S=function(){return v.Date.now()};function C(e,t,a){var o,s,l,u,d,f,m=0,h=!1,v=!1,y=!0;if(typeof e!=`function`)throw TypeError(n);t=k(t)||0,E(a)&&(h=!!a.leading,v=`maxWait`in a,l=v?b(k(a.maxWait)||0,t):l,y=`trailing`in a?!!a.trailing:y);function C(t){var n=o,a=s;return o=s=void 0,m=t,u=e.apply(a,n),u}function T(e){return m=e,d=setTimeout(j,t),h?C(e):u}function D(e){var n=e-f,a=e-m,o=t-n;return v?x(o,l-a):o}function O(e){var n=e-f,a=e-m;return f===void 0||n>=t||n<0||v&&a>=l}function j(){var e=S();if(O(e))return M(e);d=setTimeout(j,D(e))}function M(e){return d=void 0,y&&o?C(e):(o=s=void 0,u)}function N(){d!==void 0&&clearTimeout(d),m=0,o=f=s=d=void 0}function F(){return d===void 0?u:M(S())}function I(){var e=S(),n=O(e);if(o=arguments,s=this,f=e,n){if(d===void 0)return T(f);if(v)return d=setTimeout(j,t),C(f)}return d===void 0&&(d=setTimeout(j,t)),u}return I.cancel=N,I.flush=F,I}function T(e,t,a){var o=!0,s=!0;if(typeof e!=`function`)throw TypeError(n);return E(a)&&(o=`leading`in a?!!a.leading:o,s=`trailing`in a?!!a.trailing:s),C(e,t,{leading:o,maxWait:t,trailing:s})}function E(e){var t=typeof e;return!!e&&(t==`object`||t==`function`)}function D(e){return!!e&&typeof e==`object`}function O(e){return typeof e==`symbol`||D(e)&&y.call(e)==`[object Symbol]`}function k(e){if(typeof e==`number`)return e;if(O(e))return a;if(E(e)){var t=typeof e.valueOf==`function`?e.valueOf():e;e=E(t)?t+``:t}if(typeof e!=`string`)return e===0?e:+e;e=e.replace(s,``);var n=u.test(e);return n||d.test(e)?f(e.slice(2),n?2:8):l.test(e)?a:+e}t.exports=T})),import_lodash_throttle=__toESM(require_lodash_throttle()),endpoints={getMarketData:`https://farmhand.vercel.app/api/get-market-data`,postDayResults:`https://farmhand.vercel.app/api/post-day-results`},features=Object.keys({BASE_URL:`./`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_API_ROOT:`https://farmhand.vercel.app/`,VITE_FARMHAND_PACKAGE_VERSION:`1.23.1`,VITE_NAME:`@jeremyckahn/farmhand`,VITE_TURN_CREDENTIAL:``,VITE_TURN_USERNAME:``}).reduce((e,t)=>{let n=t.match(/VITE_ENABLE_(.*)/);return n&&(e[n[1]]=!0),e},{}),searchParams=new URLSearchParams(import_window.default.location?.search);for(let e of searchParams.keys()){let t=e.match(/enable_(.*)/);t&&(features[t[1]]=!0)}var rtcConfig={iceServers:[{urls:`stun:stun.relay.metered.ca:80`}]},handlePeerMetadataRequest=(e,t,n)=>{e.updatePeer(e,t,n)},handleCowTradeRequest=async(e,{cowOffered:t,cowRequested:n},a)=>{let o=!1;e.setState(e=>{let{allowCustomPeerCowNames:s,cowIdOfferedForTrade:l,cowsTraded:u,cowInventory:d,playerId:f,isAwaitingCowTradeRequest:m,peers:h,sendCowAccept:v,sendCowReject:y}=e;if(!v||!y)return console.error(`Peer connection not set up correctly`),null;let b=d.find(({id:e})=>e===l);if(m||n.id!==l||!b)return y({reason:cowTradeRejectionReason.REQUESTED_COW_UNAVAILABLE},a),null;let x={...t,timesTraded:t.originalOwnerId===f?t.timesTraded:t.timesTraded+1},[,S]=Object.entries(h).find(([,e])=>e?.playerId===x.ownerId)??[];return S?(e=changeCowAutomaticHugState(e,b,!1),e=removeCowFromInventory(e,b),e=addCowToInventory(e,{...x,ownerId:f}),e=showNotification(e,COW_TRADED_NOTIFICATION(``,b,t,f,s),`success`),v({...b,isUsingHuggingMachine:!1},a),o=!0,{...e,cowIdOfferedForTrade:x.id,cowsTraded:x.originalOwnerId===f?u:u+1,isAwaitingCowTradeRequest:!0,selectedCowId:x.id,peers:{...h,[a]:{...S,cowOfferedForTrade:{...b,ownerId:S.playerId}}}}):(console.error(`No data for peer ${x.ownerId}`),null)},async()=>{o&&(await sleep(750),await e.persistState(),e.showNotification(PROGRESS_SAVED_MESSAGE,`info`),e.setState(()=>({isAwaitingCowTradeRequest:!1})))})},handleCowTradeRequestAccept=(e,t,n)=>{let a=!1;e.setState(e=>{let{allowCustomPeerCowNames:o,cowIdOfferedForTrade:s,cowInventory:l,cowsTraded:u,cowTradeTimeoutId:d,playerId:f,peers:m}=e,h=l.find(({id:e})=>e===s);if(!h)return console.error(`handleCowTradeRequestAccept: cow with ID ${s} is no longer available`),e=showNotification(e,UNKNOWN_COW_TRADE_FAILURE,`error`),{...e,isAwaitingCowTradeRequest:!1};let[,v]=Object.entries(m).find(([,e])=>{let{playerId:n}=e;return n===t.ownerId})||[],y=t.originalOwnerId===f,b={...t,timesTraded:y?t.timesTraded:t.timesTraded+1};return e=removeCowFromInventory(e,h),e=addCowToInventory(e,{...b,ownerId:f}),e=showNotification(e,COW_TRADED_NOTIFICATION(``,h,b,f,o),`success`),y||(e=addExperience(e,EXPERIENCE_VALUES.COW_TRADED)),d&&clearTimeout(d),a=!0,{...e,cowsTraded:b.originalOwnerId===f?u:u+1,cowTradeTimeoutId:null,isAwaitingCowTradeRequest:!1,cowIdOfferedForTrade:b.id,selectedCowId:b.id,peers:{...m,[n]:{...v,cowOfferedForTrade:{...h,ownerId:v.playerId}}}}},async()=>{a&&(await e.persistState(),e.showNotification(PROGRESS_SAVED_MESSAGE,`info`))})},handleCowTradeRequestReject=(e,{reason:t})=>{let{cowTradeTimeoutId:n}=e.state;typeof n==`number`&&clearTimeout(n),e.setState({cowTradeTimeoutId:null,isAwaitingCowTradeRequest:!1}),e.showNotification(REQUESTED_COW_TRADE_UNAVAILABLE,`error`)},relayRedundancy=4,useFarmhandNetwork=(e,t,n,a,o,s,l,u)=>{let{hasBooted:d,isOnline:f,room:m,redirect:h,heartbeatTimeoutId:v,peerRoom:y,sendPeerMetadata:b}=e,x=(0,import_react$24.useCallback)(e=>(0,import_lodash_throttle.default)((...n)=>{e(...n),t(e=>({...e,pendingPeerMessages:[]}))},5e3,{trailing:!0}),[t]),S=(0,import_react$24.useCallback)(()=>{typeof a.current?.state?.cowTradeTimeoutId==`number`&&(n.current.showNotification(REQUESTED_COW_TRADE_UNAVAILABLE,`error`),console.error(`Cow trade request timed out`),t(e=>({...e,cowTradeTimeoutId:null,isAwaitingCowTradeRequest:!1})))},[t,n,a]),C=(0,import_react$24.useCallback)(o=>{let{cowIdOfferedForTrade:s,cowInventory:l,peers:u,sendCowTradeRequest:d}=a.current?.state??e;if(!d)return;let{ownerId:f}=o,[m]=Object.entries(u).find(([,e])=>e?.playerId===f)??[];if(!m){console.error(`Owner not found for cow ${JSON.stringify(o)}`);return}if(l.find(({id:e})=>e===o.id)){console.error(`Cow ID ${o.id} is already in inventory`),n.current.showNotification(COW_ALREADY_OWNED,`error`);return}let h=l.find(({id:e})=>e===s);if(!h){console.error(`Cow ID ${s} not found`);return}let v=setTimeout(S,COW_TRADE_TIMEOUT);d({cowOffered:{...h,isUsingHuggingMachine:!1},cowRequested:o},m),t(e=>({...e,cowTradeTimeoutId:v,isAwaitingCowTradeRequest:!0}))},[t,S,n,a]),T=(0,import_react$24.useCallback)(()=>{t(e=>(clearTimeout(e.heartbeatTimeoutId??-1),e));let e=import_window.default.setTimeout(()=>{t(e=>({...e,money:moneyTotal(e.money,e.activePlayers??0)})),T()},HEARTBEAT_INTERVAL_PERIOD);t(t=>({...t,heartbeatTimeoutId:e}))},[t]),E=(0,import_react$24.useCallback)(async()=>{let{isOnline:e,priceCrashes:o,priceSurges:s,room:l,playerId:u,peerRoom:d}=a.current.state;if(e){n.current.showNotification(CONNECTING_TO_SERVER,`info`);try{t(e=>({...e,isAwaitingNetworkRequest:!0,peers:{}})),d?.leave();let{valueAdjustments:e}=await getData(endpoints.getMarketData,{farmId:u,room:l});T(),t(t=>({...t,activePlayers:1,peerRoom:joinRoom({appId:`@jeremyckahn/farmhand`,rtcConfig},l),valueAdjustments:FarmhandService.applyPriceEvents(e,o,s)})),n.current.showNotification(CONNECTED_TO_ROOM(``,l),`success`)}catch(e){n.current.showNotification(SERVER_ERROR,`error`),console.error(e),t(e=>({...e,redirect:withCurrentHashQuery(`/`),cowIdOfferedForTrade:``}))}t(e=>({...e,isAwaitingNetworkRequest:!1,isAwaitingCowTradeRequest:!1}))}},[T,n,a,t]),D=(0,import_react$24.useCallback)((e,t)=>{n.current.prependPendingPeerMessage(e,t)},[n]);return(0,import_react$24.useEffect)(()=>{if(!d||!o)return;let e=decodeURIComponent(s),S=l.startsWith(`/online`),C=!!h&&h!==o.redirect;if(!C&&(S!==f||e!==m)?t(t=>({...t,isOnline:S,redirect:``,room:e})):h&&!C&&S===f&&e===m&&t(e=>({...e,redirect:``})),(f!==o.isOnline||m!==o.room)&&(f&&E(),!f&&typeof v==`number`&&(clearTimeout(v),t(e=>({...e,activePlayers:null,heartbeatTimeoutId:null,peerRoom:null})))),f===!1&&o.isOnline===!0&&n.current.showNotification(DISCONNECTED_FROM_SERVER,`info`),y!==o.peerRoom)if(y){y.onPeerJoin(e=>n.current.addPeer(e)),y.onPeerLeave(e=>n.current.removePeer(e));let[e,o]=y.makeAction(`peerMetadata`);o((...e)=>handlePeerMetadataRequest(a.current,e[0],e[1]));let[s,l]=y.makeAction(`cowTrade`);l((...e)=>handleCowTradeRequest(a.current,e[0],e[1]));let[d,f]=y.makeAction(`cowAccept`);f((...e)=>handleCowTradeRequestAccept(a.current,e[0],e[1]));let[m,h]=y.makeAction(`cowReject`);h((...e)=>handleCowTradeRequestReject(a.current,e[0])),t(t=>({...t,getCowAccept:f,getCowReject:h,getCowTradeRequest:l,getPeerMetadata:o,pendingPeerMessages:[],sendCowAccept:d,sendCowReject:m,sendCowTradeRequest:s,sendPeerMetadata:x(e)})),e(u)}else o.peerRoom?.leave(),t(e=>({...e,peers:{},sendPeerMetadata:null}));b?.(u)},[d,f,m,h,v,y,b,o,s,l,E,x,u,n,a,t]),{syncToRoom:E,scheduleHeartbeat:T,wrapSendPeerMetadata:x,tradeForPeerCow:C,handleCowTradeTimeout:S,messagePeers:D}},computeMarketPositions=(e,t,n)=>n.reduce((n,{id:a,quantity:o})=>{let s=e[a]||0,l=t[a]||0;return itemsMap[a].doesPriceFluctuate&&s!==o&&(o<s||o<l?n[a]=-1:(o>s||o>l)&&(n[a]=1)),n},{}),useFarmhandDayAdvancement=(e,t,n,a,o)=>{let s=(0,import_react$24.useCallback)(async()=>{await n.localforage?.clear(),a.current.showNotification(DATA_DELETED)},[n.localforage,a]),l=(0,import_react$24.useCallback)((e,t={})=>n.localforage?.setItem(`state`,reduceByPersistedKeys({...e,...t})),[n.localforage]),u=(0,import_react$24.useCallback)(async()=>{let n=[],a=null;t(e=>({...e,isAwaitingNetworkRequest:!0}));let o;if(e.current.isOnline){let{inventory:s,room:l,todaysPurchases:u,todaysStartingInventory:d}=e.current,f=computeMarketPositions(d,u,s);try{o=(await postData(endpoints.postDayResults,{positions:f,room:l})).valueAdjustments,Object.keys(f).length&&(n.push({message:POSITIONS_POSTED_NOTIFICATION(``,`You`,f),severity:`info`}),a=POSITIONS_POSTED_NOTIFICATION(``,``,f))}catch(e){n.push({message:SERVER_ERROR,severity:`error`}),t(e=>({...e,redirect:withCurrentHashQuery(`/`),cowIdOfferedForTrade:``,isAwaitingNetworkRequest:!1})),console.error(e)}}return{broadcastedPositionMessage:a,serverMessages:n,serverValueAdjustments:o}},[e,t]);return{clearPersistedData:s,persistState:l,updateServerForNextDay:u,incrementDay:(0,import_react$24.useCallback)(async(n=!1)=>{if(e.current.isWaitingForDayToCompleteIncrementing&&!n)return;n||t(e=>({...e,isWaitingForDayToCompleteIncrementing:!0}));let{broadcastedPositionMessage:a,serverMessages:s,serverValueAdjustments:l}=await u();t(e=>{let t=computeStateForNextDay(e,n),u=[...s,...t.newDayNotifications];return t.valueAdjustments=FarmhandService.applyPriceEvents(l??t.valueAdjustments,t.priceCrashes,t.priceSurges),t.isAwaitingNetworkRequest=!1,t.isWaitingForDayToCompleteIncrementing=!0,t.newDayNotifications=[],t.todaysNotifications=[],o.current={state:t,pendingNotifications:u,broadcastedPositionMessage:a,isFirstDay:n},t})},[e,u,t,o])}},useFarmhandNotifications=(e,t)=>({showInventoryFullNotifications:(0,import_react$24.useCallback)((e,n)=>{inventorySpaceRemaining(e)>0&&inventorySpaceRemaining(n)<=0&&t.current.showNotification(INVENTORY_FULL_NOTIFICATION,`warning`)},[t]),showRecipeLearnedNotifications:(0,import_react$24.useCallback)(({learnedRecipes:n})=>{let a=[];Object.keys(e.learnedRecipes).forEach(e=>{n.hasOwnProperty(e)||a.push(recipesMap[e])}),a.length>1?t.current.showNotification(RECIPES_LEARNED(``,a)):a.length===1&&t.current.showNotification(RECIPE_LEARNED(``,a[0]))},[e.learnedRecipes,t])}),FarmhandReducers=class e extends import_react$24.Component{addCowToInventory(...e){throw Error(`Unimplemented`)}addPeer(...e){throw Error(`Unimplemented`)}adjustLoan(...e){throw Error(`Unimplemented`)}changeCowAutomaticHugState(...e){throw Error(`Unimplemented`)}changeCowBreedingPenResident(...e){throw Error(`Unimplemented`)}changeCowName(...e){throw Error(`Unimplemented`)}clearPlot(...e){throw Error(`Unimplemented`)}chopForestPlot(...e){throw Error(`Unimplemented`)}computeStateForNextDay(...e){throw Error(`Unimplemented`)}fertilizePlot(...e){throw Error(`Unimplemented`)}forRange(...e){throw Error(`Unimplemented`)}harvestForestPlot(...e){throw Error(`Unimplemented`)}harvestPlot(...e){throw Error(`Unimplemented`)}hugCow(...e){throw Error(`Unimplemented`)}makeRecipe(...e){throw Error(`Unimplemented`)}makeFermentationRecipe(...e){throw Error(`Unimplemented`)}makeWine(...e){throw Error(`Unimplemented`)}modifyCow(...e){throw Error(`Unimplemented`)}mulchForestPlot(...e){throw Error(`Unimplemented`)}offerCow(...e){throw Error(`Unimplemented`)}plantInPlot(...e){throw Error(`Unimplemented`)}plantTreeInPlot(...e){throw Error(`Unimplemented`)}prependPendingPeerMessage(...e){throw Error(`Unimplemented`)}purchaseCombine(...e){throw Error(`Unimplemented`)}purchaseComposter(...e){throw Error(`Unimplemented`)}purchaseCow(...e){throw Error(`Unimplemented`)}purchaseCowPen(...e){throw Error(`Unimplemented`)}purchaseCellar(...e){throw Error(`Unimplemented`)}purchaseField(...e){throw Error(`Unimplemented`)}purchaseForest(...e){throw Error(`Unimplemented`)}purchaseItem(...e){throw Error(`Unimplemented`)}purchaseSmelter(...e){throw Error(`Unimplemented`)}purchaseStorageExpansion(...e){throw Error(`Unimplemented`)}purchaseWoodChipper(...e){throw Error(`Unimplemented`)}removeCowFromInventory(...e){throw Error(`Unimplemented`)}removeKegFromCellar(...e){throw Error(`Unimplemented`)}removePeer(...e){throw Error(`Unimplemented`)}selectCow(...e){throw Error(`Unimplemented`)}sellCow(...e){throw Error(`Unimplemented`)}sellItem(...e){throw Error(`Unimplemented`)}sellKeg(...e){throw Error(`Unimplemented`)}setLightningRod(...e){throw Error(`Unimplemented`)}setScarecrow(...e){throw Error(`Unimplemented`)}setSprinkler(...e){throw Error(`Unimplemented`)}showNotification(...e){throw Error(`Unimplemented`)}updatePeer(...e){throw Error(`Unimplemented`)}upgradeTool(...e){throw Error(`Unimplemented`)}waterAllPlots(...e){throw Error(`Unimplemented`)}waterField(...e){throw Error(`Unimplemented`)}waterPlot(...e){throw Error(`Unimplemented`)}withdrawCow(...e){throw Error(`Unimplemented`)}constructor(t){super(t);let n=Object.getOwnPropertyNames(e.prototype).filter(e=>e!==`constructor`);for(let e of n){let t=reducers_exports[e];t&&(this[e]=(...e)=>{this.setState(n=>t(n,...e))})}}},useFarmhandReducers=e=>(0,import_react$24.useMemo)(()=>{let t={};Object.assign(t,reducers_exports);let n=Object.getOwnPropertyNames(FarmhandReducers.prototype).filter(e=>e!==`constructor`);for(let a of n){let n=reducers_exports[a];typeof n==`function`&&(t[a]=(...t)=>{e(e=>{let a=n(e,...t);return!a||a===e?e:{...a}})})}return t},[e]),usePrevious=e=>{let t=(0,import_react$24.useRef)();return(0,import_react$24.useEffect)(()=>{t.current=e},[e]),t.current},{CLEANUP,HARVEST,MINE,WATER}=fieldMode,useFarmhand=e=>{let{features:t,match:{path:n=``,params:{room:a}={}}={}}=e,o=(0,import_react$24.useCallback)(()=>({activePlayers:null,allowCustomPeerCowNames:!1,cellarInventory:[],currentDialogView:dialogView.NONE,completedAchievements:{},cowForSale:generateCow(),cowBreedingPen:{cowId1:null,cowId2:null,daysUntilBirth:-1},cowColorsPurchased:{},cowIdOfferedForTrade:``,cowInventory:[],cowsSold:{},cowsTraded:0,cowTradeTimeoutId:-1,cropsHarvested:{},dayCount:0,experience:0,farmName:`Unnamed`,field:createNewField(),fieldMode:fieldMode.OBSERVE,forest:createNewForest(),treesChopped:0,treeFruitsHarvested:{},mulchApplied:{},getCowAccept:noop$3,getCowReject:noop$3,getCowTradeRequest:noop$3,getPeerMetadata:noop$3,hasBooted:!1,hasProducedRainbowFertilizer:!1,heartbeatTimeoutId:null,historicalDailyLosses:[],historicalDailyRevenue:[],historicalValueAdjustments:[],hoveredPlotRangeSize:0,playerId:v4(),inventory:[{id:scarecrow.id,quantity:1}],inventoryLimit:100,isAwaitingCowTradeRequest:!1,isAwaitingNetworkRequest:!1,isCombineEnabled:!1,isMenuOpen:!doesMenuObstructStage(),itemsSold:{},cellarItemsSold:{},isChatOpen:!1,isDialogViewOpen:!1,isOnline:n.startsWith(`/online`)??!1,isWaitingForDayToCompleteIncrementing:!1,learnedRecipes:{},loanBalance:500,loansTakenOut:1,money:500,latestNotification:null,newDayNotifications:[],notificationLog:[],peers:{},peerRoom:null,pendingPeerMessages:[],latestPeerMessages:[],sendPeerMetadata:null,selectedCowId:``,selectedForestItemId:``,selectedItemId:``,priceCrashes:{},priceSurges:{},profitabilityStreak:0,recipesMade:{},record7dayProfitAverage:0,recordProfitabilityStreak:0,recordSingleDayProfit:0,revenue:0,redirect:``,room:decodeURIComponent(e.match?.params?.room||`global`),sendCowAccept:noop$3,sendCowReject:noop$3,purchasedCombine:0,purchasedComposter:0,purchasedCowPen:0,purchasedCellar:0,purchasedField:0,purchasedForest:0,purchasedSmelter:0,purchasedWoodChipper:0,sendCowTradeRequest:noop$3,showHomeScreen:!0,showNotifications:!0,stageFocus:stageFocusType.HOME,todaysNotifications:[],todaysLosses:0,todaysPurchases:{},todaysRevenue:0,todaysStartingInventory:{},toolLevels:{[toolType.AXE]:toolLevel.UNAVAILABLE,[toolType.HOE]:toolLevel.DEFAULT,[toolType.PICKER_POLE]:toolLevel.UNAVAILABLE,[toolType.SCYTHE]:toolLevel.DEFAULT,[toolType.SHOVEL]:toolLevel.UNAVAILABLE,[toolType.WATERING_CAN]:toolLevel.DEFAULT},useAlternateEndDayButtonPosition:!1,valueAdjustments:{},version:`1.23.1`}),[n,e.match?.params?.room]),[s,l]=(0,import_react$24.useState)(o),u=(0,import_react$24.useRef)(s);u.current=s;let d=a===void 0?s.room:a,f=(0,import_react$24.useRef)(null),m=(0,import_react$24.useRef)(!1),h=useFarmhandReducers(l),v=(0,import_react$24.useRef)(h);v.current=h;let y=usePrevious(s),b=STAGE_TITLE_MAP[s.stageFocus],x=FarmhandService.getFieldToolInventory(s.inventory),S=FarmhandService.computePlayerInventory(s.inventory,s.valueAdjustments),C=FarmhandService.getPlantableCropInventory(s.inventory),T=FarmhandService.getPlantableTreeInventory(s.inventory),E=FarmhandService.getMulchInventory(s.inventory),D=(0,import_react$24.useMemo)(()=>getLevelEntitlements(levelAchieved(s.experience)),[s.experience]),O=(0,import_react$24.useMemo)(()=>getAvailableShopInventory(D),[D]),k=D.stageFocusType[stageFocusType.FOREST],j=s.isOnline&&s.room!==`global`,M=(0,import_react$24.useMemo)(()=>getViewList({isForestUnlocked:k,purchasedCellar:s.purchasedCellar,purchasedCowPen:s.purchasedCowPen,showHomeScreen:s.showHomeScreen}),[s.showHomeScreen,k,s.purchasedCowPen,s.purchasedCellar]),N=(0,import_react$24.useMemo)(()=>getPeerMetadata(s),[s]),F=s.isAwaitingNetworkRequest||s.isAwaitingCowTradeRequest||s.isWaitingForDayToCompleteIncrementing,I=(0,import_react$24.useRef)(null),{openDialogView:L,closeDialogView:R,focusNextView:z,focusPreviousView:B}=useFarmhandNavigation(l,M),V=(0,import_react$24.useRef)(!0),H=(0,import_react$24.useRef)(!1);(0,import_react$24.useEffect)(()=>{if(s.hasBooted){if(H.current){H.current=!1,setHashQueryParam(VIEW_QUERY_PARAM_NAME,s.stageFocus);return}if(V.current){V.current=!1,setHashQueryParam(VIEW_QUERY_PARAM_NAME,s.stageFocus);return}setHashQueryParam(VIEW_QUERY_PARAM_NAME,s.stageFocus,`push`),removeHashQueryParam(`tab`)}},[s.stageFocus,s.hasBooted]),(0,import_react$24.useEffect)(()=>{let e=()=>{let e=getValidatedStageFocusFromHash(u.current)??stageFocusType.HOME;e!==u.current.stageFocus&&(H.current=!0,l(t=>({...t,stageFocus:e})))};return import_window.default.addEventListener(`popstate`,e),()=>import_window.default.removeEventListener(`popstate`,e)},[]);let{syncToRoom:U,scheduleHeartbeat:W,tradeForPeerCow:G,handleCowTradeTimeout:ee,messagePeers:te}=useFarmhandNetwork(s,l,v,I,y,d,n,N),{clearPersistedData:K,persistState:q,updateServerForNextDay:ne,incrementDay:re}=useFarmhandDayAdvancement(u,l,e,v,f),{showInventoryFullNotifications:J,showRecipeLearnedNotifications:ie}=useFarmhandNotifications(s,v);I.current=(0,import_react$24.useMemo)(()=>({state:s,props:e,viewTitle:b,fieldToolInventory:x,mulchInventory:E,playerInventory:S,plantableCropInventory:C,plantableTreeInventory:T,viewList:M,levelEntitlements:D,shopInventory:O,peerMetadata:N,isInputBlocked:F,isChatAvailable:j,isForestUnlocked:k,setState:(e,t)=>{l(n=>{let a=typeof e==`function`?e(n):e;if(a==null)return n;let o={...n,...a};return t&&setTimeout(t,0),o})},...v.current,purchaseItem:(e,t)=>v.current.purchaseItem(e,t),sellItem:(e,t)=>v.current.sellItem(e,t),showNotification:(e,t,n)=>v.current.showNotification(e,t,n),prependPendingPeerMessage:(e,t)=>v.current.prependPendingPeerMessage(e,t),forRange:(e,t,n,a,o)=>v.current.forRange(e,t,n,a,o),createInitialState:o,getData,postData,tradeForPeerCow:G,handleCowTradeTimeout:ee,clearPersistedData:K,syncToRoom:U,scheduleHeartbeat:W,showInventoryFullNotifications:J,showRecipeLearnedNotifications:ie,persistState:(e={})=>q(I.current?.state??s,e),updateServerForNextDay:ne,incrementDay:re,openDialogView:L,closeDialogView:R,focusNextView:z,focusPreviousView:B,messagePeers:te}),[s,e,b,x,E,S,C,T,M,D,O,N,F,j,k,G,ee,K,U,W,J,ie,q,ne,re,L,R,z,B,te,o]);let ae=(0,import_react$24.useMemo)(()=>{let e={debounced:{}};return Object.keys(ui_events_default).forEach(t=>{let n=t;e[n]=(...e)=>ui_events_default[n].apply(I.current,e),e.debounced[n]=(0,import_lodash_debounce.default)(e[n],50)}),e},[]),oe=(0,import_react$24.useMemo)(()=>{let e={incrementDay:`shift+c`,nextView:`right`,openAccounting:`b`,openAchievements:`a`,openLog:`l`,openPriceEvents:`e`,openStats:`s`,openSettings:`,`,openKeybindings:`shift+?`,previousView:`left`,toggleMenu:`m`};return nullArray(9).forEach((t,n)=>{e[`numberKey${n+1}`]=String(n+1)}),e},[]),se=(0,import_react$24.useMemo)(()=>{let e={incrementDay:()=>re(),nextView:z,openAccounting:()=>L(dialogView.ACCOUNTING),openAchievements:()=>L(dialogView.ACHIEVEMENTS),openLog:()=>L(dialogView.FARMERS_LOG),openPriceEvents:()=>L(dialogView.PRICE_EVENTS),openStats:()=>L(dialogView.STATS),openSettings:()=>L(dialogView.SETTINGS),openKeybindings:()=>L(dialogView.KEYBINDINGS),previousView:B,selectHoe:()=>ae.handleFieldModeSelect(CLEANUP),selectScythe:()=>ae.handleFieldModeSelect(HARVEST),selectWateringCan:()=>ae.handleFieldModeSelect(WATER),selectShovel:()=>{s.toolLevels[toolType.SHOVEL]!==toolLevel.UNAVAILABLE&&ae.handleFieldModeSelect(MINE)},toggleMenu:()=>ae.handleMenuToggle()};return nullArray(9).forEach((t,n)=>{e[`numberKey${n+1}`]=()=>{let e=M[n];typeof e==`string`&&l(t=>({...t,stageFocus:stageFocusType[e]}))}}),e},[re,z,L,B,ae,s.toolLevels,M,K]);(0,import_react$24.useEffect)(()=>{if(m.current)return;m.current=!0,Object.defineProperty(import_window.default,"farmhand",{get:()=>I.current,configurable:!0});let t=!0;return(async()=>{let n=await e.localforage?.getItem(`state`);if(t){if(n){let e=transformStateDataForImport({...o(),...n}),{isCombineEnabled:t,newDayNotifications:a}=e,s=getValidatedStageFocusFromHash(e);l(t=>({...t,...e,...s&&{stageFocus:s},newDayNotifications:[],hasBooted:!0})),a.forEach(({message:e,severity:t})=>{setTimeout(()=>v.current.showNotification(e,t),0)}),t&&v.current.forRange(harvestPlot,1/0,0,0)}else{await re(!0),l(e=>({...e,historicalValueAdjustments:[]})),v.current.showNotification(LOAN_INCREASED(``,500),`info`);let e=getValidatedStageFocusFromHash(u.current);l(t=>({...t,...e&&{stageFocus:e},hasBooted:!0}))}U()}})(),()=>{t=!1}},[o,re,e.localforage,U]);let ce=(0,import_react$24.useRef)(import_window.default.innerWidth);(0,import_react$24.useEffect)(()=>{let e=()=>{let{innerWidth:e}=import_window.default,t=e!==ce.current;ce.current=e,t&&l(e=>{let t=!doesMenuObstructStage();return e.isMenuOpen===t?e:{...e,isMenuOpen:t}})};return import_window.default.addEventListener(`resize`,e),()=>import_window.default.removeEventListener(`resize`,e)},[]),(0,import_react$24.useEffect)(()=>{if(!s.hasBooted||!f.current)return;let t=!0,{state:n,pendingNotifications:a,broadcastedPositionMessage:o,isFirstDay:u}=f.current;return f.current=null,(async()=>{try{if(await e.localforage?.setItem(`state`,reduceByPersistedKeys({...n,...u&&{historicalValueAdjustments:[]},newDayNotifications:a})),!t)return;if([...a].concat(u?[]:[{message:PROGRESS_SAVED_MESSAGE,severity:`info`}]).forEach(({message:e,severity:t})=>v.current.showNotification(e,t)),n.isCombineEnabled){if(n.stageFocus===stageFocusType.FIELD&&await sleep(1e3),!t)return;v.current.forRange(harvestPlot,1/0,0,0)}}catch(e){console.error(e),t&&v.current.showNotification(JSON.stringify(e),`error`)}finally{t&&(l(e=>({...e,isWaitingForDayToCompleteIncrementing:!1})),o&&v.current.prependPendingPeerMessage(o))}})(),()=>{t=!1}},[s.dayCount,s.hasBooted,e.localforage,l]),(0,import_react$24.useEffect)(()=>()=>{u.current.heartbeatTimeoutId&&clearTimeout(u.current.heartbeatTimeoutId),u.current.peerRoom?.leave()},[]),(0,import_react$24.useEffect)(()=>{!s.hasBooted||!y||(updateAchievements(s,y)!==s&&l(e=>{let t=updateAchievements(e,y);return t===e?e:t}),s.stageFocus===stageFocusType.COW_PEN&&y.stageFocus!==stageFocusType.COW_PEN&&l(e=>({...e,selectedCowId:``})),s.stageFocus!==y.stageFocus&&s.isMenuOpen&&l(e=>{let t=!doesMenuObstructStage();return e.isMenuOpen===t?e:{...e,isMenuOpen:t}}),s.money<y.money&&l(e=>({...e,todaysLosses:moneyTotal(e.todaysLosses,s.money-y.money)})),J(y,s),ie(y))},[s,y,J,ie]);let Y=s.redirect;return{gameState:{...s,blockInput:F,features:t??{},fieldToolInventory:x,mulchInventory:E,isChatAvailable:j,levelEntitlements:D,plantableCropInventory:C,plantableTreeInventory:T,playerInventory:S,playerInventoryQuantities:getInventoryQuantities(s.inventory),shopInventory:O,viewList:M,viewTitle:b},handlers:ae,isInputBlocked:F,keyMap:oe,keyHandlers:se,redirect:Y,state:s,viewList:M,focusPreviousView:B,focusNextView:z,isChatAvailable:j}},emptyObject=Object.freeze({}),Farmhand=e=>{let{gameState:t,handlers:n,isInputBlocked:a,keyMap:o,keyHandlers:s,redirect:l,state:u,viewList:d,focusPreviousView:f,focusNextView:m,isChatAvailable:h}=useFarmhand(e);return(0,import_jsx_runtime.jsx)(import_index_es.GlobalHotKeys,{allowChanges:!0,keyMap:a?emptyObject:o,handlers:a?emptyObject:s,children:(0,import_jsx_runtime.jsxs)(ThemeProvider,{theme:mui_theme_default,children:[(0,import_jsx_runtime.jsx)(CssBaseline,{}),(0,import_jsx_runtime.jsxs)(SnackbarProvider,{anchorOrigin:{vertical:`top`,horizontal:`right`},classes:{containerRoot:`Farmhand notification-container`},content:snackbarProviderContentCallback,maxSnack:4,children:[l&&(0,import_jsx_runtime.jsx)(Redirect,{to:l}),(0,import_jsx_runtime.jsxs)(FarmhandContext.Provider,{value:{gameState:t,handlers:n},children:[(0,import_jsx_runtime.jsxs)(Div,{className:(0,import_classnames.default)(`Farmhand farmhand-root fill`,u.isMenuOpen?`menu-open`:`menu-closed`,{"use-alternate-end-day-button-position":u.useAlternateEndDayButtonPosition,"block-input":a,"has-booted":u.hasBooted}),sx:e=>({...fillSx,display:`flex`,paddingTop:`3.5em`,position:`fixed`,touchAction:`manipulation`,opacity:+!!u.hasBooted,transform:u.hasBooted?`scale(1)`:`scale(0)`,transition:`opacity, transform 200ms`,...a&&{"& button, & input":{filter:`contrast(65%)`,pointerEvents:`none`}},[`@media (min-width: ${breakpoints.smallPhone}px) and (orientation: landscape)`]:{paddingTop:`3em`},[`@media (min-width: ${breakpoints.sm}px)`]:{paddingTop:`4em`},"& .sidebar-wrapper":{display:`flex`},"& .bottom-controls":{alignItems:`center`,bottom:`1em`,display:`flex`,flexFlow:`column`,justifyContent:`center`,left:`50%`,opacity:.85,position:`fixed`,transition:e.transitions.create(`left`,{duration:e.transitions.duration.enteringScreen,easing:e.transitions.easing.easeOut}),width:0,zIndex:20,[`@media (max-width: ${breakpoints.mediumPhone}px)`]:{bottom:`0.5em`},"& .MuiMobileStepper-root":{background:`none`},"& .fab-buttons":{display:`flex`,flexFlow:`row`,"& button":{margin:`0.5em`,position:`relative`,[`@media (max-width: ${breakpoints.mediumPhone}px)`]:{margin:`0.25em 0.5em`},"@media (max-width: 320px)":{margin:`0.25em 0.1em`}}},...u.isMenuOpen&&{"@media (orientation: landscape)":{left:`calc(50vw + ${layout.sidebarWidth} / 2)`}}},"& .end-day":{position:`fixed`,top:`5em`,right:`1em`,[`@media (min-width: ${breakpoints.sm}px)`]:{right:`1.25em`,top:`5.5em`},...u.useAlternateEndDayButtonPosition&&{right:`auto`,left:`1em`}},"& .menu-button":{transition:e.transitions.create(`transform`,{duration:e.transitions.duration.shorter}),transform:u.isMenuOpen?`rotate(-90deg)`:`rotate(0deg)`}}),children:[(0,import_jsx_runtime.jsx)(UpdateNotifier,{}),(0,import_jsx_runtime.jsx)(Consumer$29,{}),(0,import_jsx_runtime.jsxs)(Drawer,{className:`sidebar-wrapper`,open:t.isMenuOpen,variant:`persistent`,role:`complementary`,PaperProps:{className:`sidebar`,sx:{backgroundImage:`url(${blue_stripe_bg_default})`,boxSizing:`border-box`,overflow:`auto`,padding:`1em 1em 0`,position:`relative`,width:layout.sidebarWidth,zIndex:20,[`@media (max-width: ${breakpoints.smallPhone}px)`]:{width:layout.narrowSidebarWidth},"& .button-array":{display:`flex`,flexWrap:`wrap`,margin:`0.5em 0`}}},children:[(0,import_jsx_runtime.jsx)(Consumer$14,{}),(0,import_jsx_runtime.jsx)(Consumer$24,{}),(0,import_jsx_runtime.jsx)(`div`,{className:`spacer`})]}),(0,import_jsx_runtime.jsx)(Consumer,{}),(0,import_jsx_runtime.jsxs)(`div`,{className:`bottom-controls`,children:[(0,import_jsx_runtime.jsx)(MobileStepper,{variant:`dots`,steps:d.length,position:`static`,activeStep:d.indexOf(u.stageFocus),className:``,backButton:null,nextButton:null}),(0,import_jsx_runtime.jsxs)(`div`,{className:`fab-buttons buttons`,children:[(0,import_jsx_runtime.jsx)(Fab,{"aria-label":`Previous view`,color:`primary`,onClick:f,children:(0,import_jsx_runtime.jsx)(import_KeyboardArrowLeft.default,{})}),(0,import_jsx_runtime.jsx)(Fab,{className:(0,import_classnames.default)(`menu-button`,{"is-open":u.isMenuOpen}),color:`primary`,"aria-label":`Open drawer`,onClick:()=>n.handleMenuToggle(),children:(0,import_jsx_runtime.jsx)(import_Menu.default,{})}),(0,import_jsx_runtime.jsx)(Fab,{"aria-label":`Next view`,color:`primary`,onClick:m,children:(0,import_jsx_runtime.jsx)(import_KeyboardArrowRight.default,{})})]})]}),(0,import_jsx_runtime.jsx)(Tooltip,{placement:`left`,title:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(`p`,{children:`End the day to save your progress and advance the game.`}),(0,import_jsx_runtime.jsx)(`p`,{children:`(shift + c)`})]}),children:(0,import_jsx_runtime.jsx)(Fab,{"aria-label":`End the day to save your progress and advance the game.`,className:`end-day`,color:`error`,onClick:n.handleClickEndDayButton,sx:{zIndex:Z_INDEX.END_DAY_BUTTON},children:(0,import_jsx_runtime.jsx)(import_Hotel.default,{})})})]}),h?(0,import_jsx_runtime.jsx)(ChatRoom,{}):null,(0,import_jsx_runtime.jsx)(NotificationSystem_default,{})]})]})]})})};Farmhand.defaultProps={features:{},localforage:import_localforage.default.createInstance({name:`farmhand`,description:`Persisted game data for Farmhand`}),match:{path:``,params:{}}},Farmhand.propTypes={features:import_prop_types$1.object,history:import_prop_types$1.object,location:import_prop_types$1.object,match:import_prop_types$1.object.isRequired};var FarmhandRoute=e=>(0,import_jsx_runtime.jsx)(Farmhand,{...e,features});import_react_dom.render((0,import_jsx_runtime.jsx)(HashRouter,{hashType:`noslash`,children:(0,import_jsx_runtime.jsx)(Route,{path:[`/online/:room`,`/online`,`/`],component:FarmhandRoute})}),document.getElementById(`root`));
844
+ //# sourceMappingURL=index-aCJUEW1i.js.map