@kosdev-code/kos-dispense-sdk 2.0.42 → 2.0.44

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.
@@ -1,2 +1,2 @@
1
- "use strict";var ze=Object.defineProperty;var et=(e,t,r)=>t in e?ze(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var F=(e,t,r)=>(et(e,typeof t!="symbol"?t+"":t,r),r);const b=require("@emotion/react/jsx-runtime"),x=require("./dispense-registration-manager-DFEU9oXa.cjs"),c=require("@kosdev-code/kos-ui-sdk"),o=require("react"),le=()=>{const e=x.Assembly.type;return c.useKosModel({modelId:e,modelType:x.Assembly.type,options:{}})};function tt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=le();return b.jsx(s,{...n,children:b.jsx(e,{...t,assembly:r})})}}const me=()=>{const e=x.Availability.type;return c.useKosModel({modelId:e,modelType:x.Availability.type,options:{}})};function st(e){return t=>{const{model:r,status:n,KosModelLoader:s}=me();return b.jsx(s,{...n,children:b.jsx(e,{...t,beverage:r})})}}const be=e=>{const t=e;return c.useKosModel({modelId:t,modelType:x.Board.type,options:{}})};function rt(e){return t=>r=>{const{model:n,status:s,KosModelLoader:i}=be(t);return b.jsx(i,{...s,children:b.jsx(e,{...r,board:n})})}}const he=()=>{const e=x.BoardContainer.type;return c.useKosModel({modelId:e,modelType:x.BoardContainer.type,options:{}})};function nt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=he();return b.jsx(s,{...n,children:b.jsx(e,{...t,boardContainer:r})})}}const pe=e=>{const t=e;return c.useKosModel({modelId:t,modelType:x.Nozzle.type,options:{path:e}})},Ee=o.createContext(void 0),Ke=({children:e,path:t})=>{const{model:r,ready:n}=pe(t),s=o.useMemo(()=>n&&r?{model:r}:{},[n,r]);return b.jsx(Ee.Provider,{value:s,children:e})},E=()=>{const e=o.useContext(Ee);if(!e)throw new Error("useNozzleContext must be used within a NozzleProvider");return e},Se=({onBeverageSelected:e,onClearBeverage:t,companionType:r})=>{const{model:n}=E(),[s,i]=o.useState([]),[l,m]=o.useState(null),f=o.useMemo(()=>r?s.map(d=>c.getKosCompanionModel(d,r)):[],[s,r]),p=o.useCallback(async d=>{m(d),await(n==null?void 0:n.setSelectedPourable({beverage:d})),e==null||e(d)},[n,e]),u=o.useCallback(async()=>{m(null),await(n==null?void 0:n.setSelectedPourable({beverage:void 0})),t==null||t()},[n,t]);return o.useEffect(()=>{const d=c.kosAutoEffect(()=>{if(!n)return;const g=n.selectedBrand;if(!g){const v=n.getGroupAvailabilityItems("beverages").filter(C=>C.visible);i(v??[]);return}const T=n.getAvailabilityByParent(g.id).filter(v=>v.visible);i(T??[])});return()=>{d()}},[n]),{beverages:s,beverageCompanions:f,selectBeverage:p,selectedBeverage:l,clearBeverage:u}},Be=({onBrandSelected:e,onBrandCleared:t,companionType:r})=>{const{model:n}=E(),[s,i]=o.useState(null),[l,m]=o.useState([]),f=o.useMemo(()=>r?l.map(d=>c.getKosCompanionModel(d,r)):[],[l,r]),p=o.useCallback(async d=>{i(d),n==null||n.setSelectedBrand(d),e==null||e(d)},[n,e]),u=o.useCallback(()=>{i(null),n==null||n.setSelectedBrand(void 0),t==null||t()},[n,t]);return o.useEffect(()=>{const d=c.kosAutoEffect(()=>{n&&m(n.visibleBrands)});return()=>{d()}},[n]),{brands:l,brandCompanions:f,selectedBrand:s,selectBrand:p,clearBrand:u}},ot=c.KosLog.createLogger({name:"HoldToPourStrategy",group:"kos-hooks"}),fe={name:"HoldToPourStrategy",async initiate(e){if(!(e!=null&&e.canPour)){ot.debug(`Nozzle ${e==null?void 0:e.id} cannot pour. Returning early.`);return}await(e==null?void 0:e.pour())},async initiateEnded(e){await(e==null?void 0:e.cancelPour())}},Z=c.KosLog.createLogger({name:"useNozzlePour",group:"kos-hooks"}),Le=({onPour:e,onPourCancel:t,onBeforePour:r,onBeforePourRejected:n,strategy:s=fe})=>{const{model:i}=E(),l=o.useCallback(async()=>{(r?await(r==null?void 0:r()):!0)?(Z.debug(`[${s==null?void 0:s.name}] - Pour initiated for nozzle ${i==null?void 0:i.id}.`),s==null||s.initiate(i),e==null||e()):(Z.debug(`[${s==null?void 0:s.name}] - Did not pass onBeforePour gate for nozzle ${i==null?void 0:i.id}. Cancelling pour.`),n==null||n())},[e,i,s,r,t]),m=o.useCallback(()=>{var u;Z.debug(`[${s==null?void 0:s.name}] - Pour initiate ended called for nozzle ${i==null?void 0:i.id}.`),(u=s==null?void 0:s.initiateEnded)==null||u.call(s,i),t==null||t()},[t,i,s]),f=o.useCallback(()=>{Z.debug(`Force cancelling pour for nozzle ${i==null?void 0:i.id}.`),i==null||i.cancelPour(),t==null||t()},[t,i]);return{handlers:c.usePressGesture({onPressed:l,onRelease:m}).dom,cancel:f,status:i}},Me=({onFlavorSelected:e,onFlavorCleared:t,companionType:r})=>{const{model:n}=E(),s=o.useMemo(()=>(n==null?void 0:n.getGroupAvailabilityItems("flavors").filter(u=>u.visible))??[],[n]),i=o.useMemo(()=>r?s.map(u=>c.getKosCompanionModel(u,r)):[],[s,r]),[l,m]=o.useState([]),f=o.useCallback(async u=>{if(m(d=>d!=null&&d.includes(u)?[...d.filter(g=>g!==u)]:[...d??[],u]),n!=null&&n.selectedPourable){const{beverage:d}=n.selectedPourable;await n.setSelectedPourable({beverage:d,additional:l??[]})}e==null||e(u,l??[])},[n,e,l]),p=o.useCallback(async()=>{if(m([]),n!=null&&n.selectedPourable){const{beverage:u}=n.selectedPourable;n.setSelectedPourable({beverage:u}),t==null||t()}},[n,t]);return{flavors:s,flavorCompanions:i,selectFlavor:f,selectedFlavors:l,clearFlavors:p}},G="brands",W="beverages",_="flavors",y=c.KosLog.createLogger({name:"use-cui-kit"}),ye=({initialGroup:e=G,options:t={}})=>{var J,Q,X;const[r,n]=o.useState(e),{model:s}=E(),i=o.useRef([]),l=o.useCallback(h=>{n(_);const B=`/kos/dispense/${s==null?void 0:s.path}/brand/selected/`;c.EventBus.publish(B,h)},[s==null?void 0:s.path]),m=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/brand/cleared/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),f=o.useCallback(h=>{n(_);const B=`/kos/dispense/${s==null?void 0:s.path}/beverage/selected/`;c.EventBus.publish(B,h)},[s==null?void 0:s.path]),p=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/beverage/cleared/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),u=o.useCallback(h=>{const B=`/kos/dispense/${s==null?void 0:s.path}/flavor/selected/`;c.EventBus.publish(B,h)},[s==null?void 0:s.path]),d=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/flavor/cleared/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),g=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/pour/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),T=o.useCallback(async()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/pre/pour/`;return c.EventBus.publish(h,{}),await(M==null?void 0:M())||!0},[s==null?void 0:s.path]),v=o.useCallback(async()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/pre/pour/rejected/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),C=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/pour/cancel/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),{brands:a,selectBrand:j,selectedBrand:K,clearBrand:k,brandCompanions:Y}=Be({companionType:(J=t.companionTypes)==null?void 0:J.brand,onBrandSelected:l,onBrandCleared:m}),{beverages:ee,selectBeverage:te,selectedBeverage:se,clearBeverage:P,beverageCompanions:S}=Se({companionType:(Q=t.companionTypes)==null?void 0:Q.beverage,onBeverageSelected:f,onClearBeverage:p}),{clearFlavors:U,flavors:re,selectFlavor:R,selectedFlavors:w,flavorCompanions:A}=Me({companionType:(X=t.companionTypes)==null?void 0:X.flavor,onFlavorSelected:u,onFlavorCleared:d}),[M,$]=o.useState(),H=o.useCallback(h=>{$(()=>h)},[]),D=Le({onPour:g,onPourCancel:C,onBeforePour:T,onBeforePourRejected:v}),O=o.useCallback(()=>{switch(y.debug(`Navigating back from group: ${r}`),r){case G:P(),k();break;case W:case _:n(e),P(),k();break}},[P,k,r,e]),ne=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/home/`;c.EventBus.publish(h,{}),n(e),e===G&&(P(),k()),e===W&&P()},[P,k,e]),oe=o.useCallback(()=>{if(i.current.length===0){y.debug("No timers to pause.");return}y.debug(`Pausing ${i.current.length} timers.`),i.current.forEach(h=>{y.debug(`Pausing timer with id ${h.id}.`),h.pause()})},[]),ie=o.useCallback(()=>{if(i.current.length===0){y.debug("No timers to restart.");return}y.debug(`Restarting ${i.current.length} timers.`),i.current.forEach(h=>{y.debug(`Restarting timer with id ${h.id}.`),h.restart()})},[]);return{timers:{add:o.useCallback(h=>{if(h){if(i.current.some(B=>B.id===h.id)){y.debug(`Timer with id ${h.id} already exists.`);return}i.current.push(h)}},[]),pause:oe,restart:ie},nav:{currentGroup:r,back:O,home:ne},pour:D,updateOnBeforePour:H,selections:{[G]:K,[W]:se,[_]:w},[G]:{models:a,companions:Y,clear:k,handlers:{onSelected:j}},[W]:{models:ee,companions:S,clear:P,handlers:{onSelected:te}},[_]:{models:re,companions:A,clear:U,handlers:{onSelected:R}}}},it=e=>{const{model:t}=E(),[r,n]=o.useState(null),{onAmbientTimer:s,onAttractTimer:i,onResetAttractTimer:l,onResumeAttractTimer:m,defaultAttractTime:f,defaultAmbientTime:p}=e,u=o.useCallback(()=>{s&&(c.KosLog.info("Ambient timer expired. Calling callback"),s==null||s())},[s]),d=o.useCallback(()=>{i&&(c.KosLog.info("Attract timer expired. Calling callback"),i==null||i())},[i]),g=o.useCallback(()=>{r&&(r.restart(),l==null||l())},[r,l]),T=o.useCallback(()=>{r&&(r.reset(),l==null||l())},[r,l]),v=o.useCallback(()=>{r&&(r.pause(),m==null||m())},[r,m]);return o.useEffect(()=>{if(t&&f){c.KosLog.info("Nozzle is available. Creating timers");const C=c.TimerManager.createTimer("attract-timer-"+t.path,f);return f&&(C==null||C.addTimeoutAction({name:"attract-timer",remainingTime:0,action:d})),p&&(C==null||C.addTimeoutAction({name:"ambient-timer",remainingTime:p,action:u})),f&&(C==null||C.start()),n(C??null),()=>{C==null||C.reset(),n(null)}}return()=>{c.KosLog.info("Nozzle is not available. No timers to clear")}},[p,f,u,d,t]),{attractTimer:r,restart:g,pause:T,resume:v}},at=(e,t)=>{if(t)return c.EventBus.subscribe(e,t).unsubscribe},He=({onInit:e,onBrandSelected:t,onBrandCleared:r,onBeverageCleared:n,onBeverageSelected:s,onFlavorCleared:i,onFlavorSelected:l,onReturnToHome:m,onPour:f,onPourCancel:p,onBeforePourRejected:u,onAmbientTimer:d,onAttractTimer:g,onResumeAttractTimer:T,onIdleTimeout:v,onAreYouThereTimeout:C})=>{const{model:a}=E();o.useEffect(()=>{const K=[{topic:`/kos/dispense/${a==null?void 0:a.path}/brand/selected/`,callback:t},{topic:`/kos/dispense/${a==null?void 0:a.path}/brand/cleared/`,callback:r},{topic:`/kos/dispense/${a==null?void 0:a.path}/beverage/selected/`,callback:s},{topic:`/kos/dispense/${a==null?void 0:a.path}/beverage/cleared/`,callback:n},{topic:`/kos/dispense/${a==null?void 0:a.path}/flavor/selected/`,callback:l},{topic:`/kos/dispense/${a==null?void 0:a.path}/flavor/cleared/`,callback:i},{topic:`/kos/dispense/${a==null?void 0:a.path}/pour/`,callback:f},{topic:`/kos/dispense/${a==null?void 0:a.path}/pour/cancel/`,callback:p},{topic:`/kos/dispense/${a==null?void 0:a.path}/pre/pour/rejected/`,callback:u},{topic:`/kos/dispense/${a==null?void 0:a.path}/ambient/start/`,callback:d},{topic:`/kos/dispense/${a==null?void 0:a.path}/attract/start/`,callback:g},{topic:`/kos/dispense/${a==null?void 0:a.path}/attract/resume/`,callback:T},{topic:`/kos/dispense/${a==null?void 0:a.path}/idle/timeout/`,callback:v},{topic:`/kos/dispense/${a==null?void 0:a.path}/are-you-there/timeout/`,callback:C},{topic:`/kos/dispense/${a==null?void 0:a.path}/init/`,callback:e},{topic:`/kos/dispense/${a==null?void 0:a.path}/home/`,callback:m}].map(({topic:k,callback:Y})=>at(k,Y));return()=>{K.forEach(k=>k==null?void 0:k())}},[a==null?void 0:a.path,d,g,n,s,r,t,i,l,f,p,T,v,C,e,m])},L=c.KosLog.createLogger({name:"useCuiKitTimers"}),de=e=>{const{model:t}=E(),[r,n]=o.useState(null),{onAreYouThereTimer:s,onIdleTimer:i,onResetIdleTimer:l,defaultAreYouThereTime:m=10,defaultIdleTime:f=20}=e,p=o.useRef(!1),u=o.useCallback(()=>{!p.current&&s&&(c.KosLog.info("Are you there timer expired. Calling callback"),p.current=!0,s==null||s())},[s]),d=o.useCallback(()=>{L.debug("handleIdleTimer called in useCuiKitTimers, onIdleTimer exists:",!!i),i?(L.debug("Idle timer expired. Calling callback"),i==null||i()):L.debug("No onIdleTimer callback provided!")},[i]),g=o.useCallback(()=>{L.debug(`TIMER RESTART called for ${e.prefix??""}timer`),r&&(r.restart(),p.current=!1,l==null||l())},[r,l,e.prefix]),T=o.useCallback(()=>{L.debug(`TIMER PAUSE/RESET called for ${e.prefix??""}timer`),r&&(r.reset(),p.current=!1,l==null||l())},[r,l,e.prefix]);return o.useEffect(()=>{if(L.debug(`useCuiKitTimers effect triggered - nozzle: ${!!t}, path: ${t==null?void 0:t.path}, callbacks: handleIdle=${!!d}, handleAreYouThere=${!!u}`),t){L.info("Nozzle is available. Creating timers");const v=c.TimerManager.createTimer(`${e.prefix??""}idle-timer-${t.path}`,f);return L.debug(`Adding idle timer action for ${e.prefix??""}idle-timer-${t.path} with callback:`,!!d),v==null||v.addTimeoutAction({name:"idle-timer",remainingTime:0,action:d}),v==null||v.addTimeoutAction({name:"are-you-there-timer",remainingTime:m,action:u}),n(v??null),()=>{v==null||v.reset(),n(null)}}return()=>{L.info("Nozzle is not available. No timers to clear")}},[m,f,u,d,t,e.prefix]),{idleTimer:r,restart:g,pause:T}},N=c.KosLog.createLogger({name:"useDefaultCuiKitLifecycle"}),ct=({kit:e,inactivity:t,pour:r,screens:n,onBeforeAreYouThereTimer:s,areYouThereRejectionPolicy:i="pause"})=>{var we,Te,$e,Ie;const[l,m]=o.useState(!1),[f,p]=o.useState(!1),{model:u}=E(),[d,g]=o.useState(!1),T=(t==null?void 0:t.idleTimeout)??15,v=(t==null?void 0:t.areYouThereTimeoutOffset)??10,C=(r==null?void 0:r.idleTimeout)??(t==null?void 0:t.idleTimeout)??10,a=(r==null?void 0:r.areYouThereTimeoutOffset)??(t==null?void 0:t.areYouThereTimeoutOffset)??5,j=n==null?void 0:n.ambientTimeoutOffset,K=n==null?void 0:n.attractTimeout,k=o.useCallback(()=>{if(N.info("handleIdleTimeout called - navigating home and publishing event"),R(!1),e==null||e.nav.home(),u){const I=`/kos/dispense/${u.path}/idle/timeout/`;c.EventBus.publish(I,{})}},[(we=e==null?void 0:e.nav)==null?void 0:we.home,u]),Y=o.useCallback(()=>{N.info("handleResetIdleTimer called - resetting idle timer"),R(!1)},[]),ee=o.useCallback(()=>{if(j&&(m(!0),p(!1),u)){const I=`/kos/dispense/${u.path}/ambient/start/`;c.EventBus.publish(I,{})}},[j,u]),te=o.useCallback(()=>{if(K&&(p(!0),m(!1),u)){const I=`/kos/dispense/${u.path}/attract/start/`;c.EventBus.publish(I,{})}},[K,u]),se=o.useCallback(()=>{if(K&&(p(!1),m(!1),e==null||e.nav.home(),u)){const I=`/kos/dispense/${u.path}/attract/resume/`;c.EventBus.publish(I,{})}},[e==null?void 0:e.nav,K,u]),{pause:P,restart:S,attractTimer:U}=it({defaultAmbientTime:j,defaultAttractTime:K,onAmbientTimer:ee,onAttractTimer:te,onResumeAttractTimer:se});(Te=e==null?void 0:e.timers)==null||Te.add(U);const[re,R]=o.useState(!1);N.info("Creating idle timer with timeout:",T,"seconds and callback:",!!k);const{pause:w,restart:A,idleTimer:M}=de({defaultAreYouThereTime:v,defaultIdleTime:T,onIdleTimer:k,onResetIdleTimer:Y});N.info(`Creating pour timer with timeout: ${C} seconds and callback: ${!!k}`);const{pause:$,restart:H,idleTimer:D}=de({defaultAreYouThereTime:a,defaultIdleTime:C,onIdleTimer:k,prefix:"pour-"}),O=o.useCallback(async()=>{let I=!0;if(s)try{I=await s()}catch(ae){N.error(`onBeforeAreYouThereTimer callback failed: ${ae}`),I=!1}if(I){if(u){const ae=`/kos/dispense/${u.path}/are-you-there/timeout/`;c.EventBus.publish(ae,{})}R(!0),d?$():w()}else switch(i){case"pause":d?$():w();break;case"restart":d?H():A();break}},[s,u,i,d]),ne=o.useCallback(()=>{R(!1),P(),d?(H(),w()):(A(),$())},[d,w,$,A,H]);o.useEffect(()=>{M&&M.addTimeoutAction({name:"are-you-there-timer",remainingTime:v,action:O})},[M,v,O]),o.useEffect(()=>{D&&D.addTimeoutAction({name:"pour-are-you-there-timer",remainingTime:a,action:O})},[D,a,O]),($e=e==null?void 0:e.timers)==null||$e.add(M),(Ie=e==null?void 0:e.timers)==null||Ie.add(D);const oe=o.useCallback(()=>{g(!1),$(),w(),P()},[w,$]),ie=o.useCallback(()=>{g(!0),N.info("restarting pour timer"),H(),P(),w()},[w,H]),Pe=o.useCallback(()=>{g(!1),N.info("restarting pour timer on before pour rejected"),$(),A()},[]),J=o.useCallback(()=>{P(),p(!1),m(!1),A()},[P,A]),Q=o.useCallback(()=>{p(!1),m(!1),g(!1),$(),S()},[S,$]),X=o.useCallback(()=>{p(!1),m(!1),g(!1),P(),A()},[P,A]),h=o.useCallback(()=>{p(!1),m(!1),g(!1),S(),w(),$()},[S,w,$]),B=o.useCallback(()=>{p(!1),m(!1),S(),w()},[S,w]);He({onBrandSelected:J,onBrandCleared:Q,onBeverageSelected:X,onBeverageCleared:h,onPour:oe,onPourCancel:ie,onBeforePourRejected:Pe,onInit:B});const Ze=d?a:v;return o.useEffect(()=>{if(u&&U){const I=`/kos/dispense/${u==null?void 0:u.path}/init/`;c.EventBus.publish(I,{})}},[u,U]),{showAreYouThere:re,clearAreYouThere:ne,pauseIdleTimer:w,restartIdleTimer:A,areYouThereCountdown:Ze,showAmbientScreen:l,showAttractScreen:f,pauseScreenTimer:P,restartScreenTimer:S}},ve=()=>{const e=x.DeviceAssembly.type;return c.useKosModel({modelId:e,modelType:x.DeviceAssembly.type,options:{}})};function ut(e){return t=>{const{model:r,status:n,KosModelLoader:s}=ve();return b.jsx(s,{...n,children:b.jsx(e,{...t,deviceAssembly:r})})}}const Ce=e=>{const t=e;return c.useKosModel({modelId:t,modelType:x.Holder.type,options:{}})};function dt(e,t){return r=>{const{model:n,status:s,KosModelLoader:i}=Ce(e);return b.jsx(i,{...s,children:b.jsx(t,{...r,holder:n})})}}const ge=()=>{const e=x.HolderContainer.type;return c.useKosModel({modelId:e,modelType:x.HolderContainer.type,options:{}})};function lt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=ge();return b.jsx(s,{...n,children:b.jsx(e,{...t,holderContainer:r})})}}const xe=()=>{const e=x.Ingredient.type;return c.useKosModel({modelId:e,modelType:x.Ingredient.type,options:{}})},ce=c.KosLog.createLogger({name:"HoldToPourIntentStrategy",group:"kos-hooks"}),Ne={name:"HoldToPourIntentStrategy",async initiate(e,t){if(!(e!=null&&e.canPour)){ce.debug(`${e==null?void 0:e.id} cannot pour. Returning early.`);return}t?(ce.debug(`performing intent: ${t}`),await(e==null?void 0:e.performIntent(t))):ce.debug("no intent provided. Returning early.")},async initiateEnded(e){await(e==null?void 0:e.cancelPour())}},ue=c.KosLog.createLogger({name:"useNozzlePour",group:"kos-hooks"}),mt=({onPour:e,onPourCancel:t,intentContainer:r,strategy:n=Ne})=>{const s=o.useCallback(()=>{ue.debug(`[${n==null?void 0:n.name}] - Pour initiated for model ${r==null?void 0:r.id}.`),n==null||n.initiate(r),e==null||e()},[e,r,n]),i=o.useCallback(()=>{var f;ue.debug(`[${n==null?void 0:n.name}] - Pour initiate ended called for nozzle ${r==null?void 0:r.id}.`),(f=n==null?void 0:n.initiateEnded)==null||f.call(n,r),t==null||t()},[t,r,n]),l=o.useCallback(()=>{ue.debug(`Force cancelling pour for nozzle ${r==null?void 0:r.id}.`),r==null||r.cancelPour(),t==null||t()},[t,r]);return{handlers:c.usePressGesture({onPressed:s,onRelease:i}).dom,cancel:l,status:r}};function bt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=xe();return b.jsx(s,{...n,children:b.jsx(e,{...t,ingredient:r})})}}const ke=()=>{const e=x.IngredientContainer.type;return c.useKosModel({modelId:e,modelType:x.IngredientContainer.type,options:{}})};function ht(e){return t=>{const{model:r,status:n,KosModelLoader:s}=ke();return b.jsx(s,{...n,children:b.jsx(e,{...t,ingredientContainer:r})})}}function pt(e,t){return r=>{const{model:n,status:s,KosModelLoader:i}=pe(e);return b.jsx(i,{...s,children:b.jsx(t,{...r,nozzle:n})})}}const V=c.KosLog.createLogger({name:"usePour",group:"kos-hooks"}),ft=({onBeforePour:e,onPour:t,onPourCancel:r,onPourAbort:n,pourTarget:s,strategy:i=fe})=>{const l=o.useCallback(async()=>{V.debug(`[${i==null?void 0:i.name}] - calling before pour for pour target ${s==null?void 0:s.id}.`),(e?await(e==null?void 0:e()):!0)?(V.debug(`[${i==null?void 0:i.name}] - Pour initiated for pour target ${s==null?void 0:s.id}.`),await(i==null?void 0:i.initiate(s)),t==null||t(),s!=null&&s.isPouring||n==null||n()):(V.debug(`[${i==null?void 0:i.name}] - Pour cancelled for pour target ${s==null?void 0:s.id}.`),r==null||r())},[t,s,i]),m=o.useCallback(async()=>{var d;V.debug(`[${i==null?void 0:i.name}] - Pour initiate ended called for pour target ${s==null?void 0:s.id}.`),await((d=i==null?void 0:i.initiateEnded)==null?void 0:d.call(i,s))||r==null||r()},[r,s,i]),f=o.useCallback(async()=>{V.debug(`Force cancelling pour for pour target ${s==null?void 0:s.id}.`),await(s==null?void 0:s.cancelPour()),r==null||r()},[r,s]);return{handlers:c.usePressGesture({onPressed:l,onRelease:m}).dom,cancel:f,status:s}},q=c.KosLog.createLogger({name:"TapOrHoldIntentStrategy",group:"kos-hooks"});class vt{constructor(t){F(this,"intent");F(this,"name","TapOrHoldIntentStrategy");F(this,"isHold",!1);F(this,"disposer",null);this.intent=t}async initiate(t,r){if(this.disposer=setTimeout(()=>{this.isHold=!0},250),t!=null&&t.isPouring&&!this.isHold){q.debug("additional tap detected. cancelling pour"),await t.cancelPour();return}if(!(t!=null&&t.canPour)){q.debug(`${t==null?void 0:t.id} cannot pour. Returning early.`);return}r?(q.debug(`performing intent: ${r}`),await(t==null?void 0:t.performIntent(r))):q.debug("no intent provided. Returning early.")}async initiateEnded(t){return this.disposer&&clearTimeout(this.disposer),this.disposer=null,this.isHold?(await(t==null?void 0:t.cancelPour()),!1):(q.debug("Tap detected. don't cancel and return."),!0)}}const z=c.KosLog.createLogger({name:"TapToPourIntentStrategy",group:"kos-hooks"}),Ct={name:"TapToPourIntentStrategy",async initiate(e,t){if(e!=null&&e.isPouring){z.debug(`Nozzle ${e==null?void 0:e.id} is already pouring. cancelling pour`),await e.cancelPour();return}if(!(e!=null&&e.canPour)){z.debug(`Nozzle ${e==null?void 0:e.id} cannot pour. Returning early.`);return}t?(z.debug(`performing intent: ${t}`),await(e==null?void 0:e.performIntent(t))):z.debug("no intent provided. Returning early.")},async initiateEnded(e){return!0}},Ae=c.KosLog.createLogger({name:"HoldToPourStrategy",group:"kos-hooks"}),gt={name:"TapToPourStrategy",async initiate(e){if(e!=null&&e.isPouring){Ae.debug(`Nozzle ${e==null?void 0:e.id} is already pouring. cancelling pour`),await e.cancelPour();return}if(!(e!=null&&e.canPour)){Ae.debug(`Nozzle ${e==null?void 0:e.id} cannot pour. Returning early.`);return}await(e==null?void 0:e.pour())},async initiateEnded(e){return!0}},je=(e,t,r)=>{const n=e;return c.useKosModel({modelId:n,modelType:x.GenericPour.type,options:{servicePathFactory:t,selectedId:r}})};function xt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=je(t.id,t.servicePathFactory,t.itemId);return b.jsx(s,{...n,children:b.jsx(e,{...t,genericPour:r})})}}const Re=o.createContext(void 0),kt=({children:e})=>{const{model:t,ready:r}=le(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Re.Provider,{value:n,children:e})},Pt=()=>{const e=o.useContext(Re);if(!e)throw new Error("useAssemblyContext must be used within a AssemblyProvider");return e},De=o.createContext(void 0),wt=({children:e})=>{const{model:t,ready:r}=me(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(De.Provider,{value:n,children:e})},Tt=()=>{const e=o.useContext(De);if(!e)throw new Error("useAvailabilityContext must be used within a AvailabilityProvider");return e},Oe=o.createContext(void 0),$t=({children:e,id:t})=>{const{model:r,ready:n}=be(t),s=o.useMemo(()=>n&&r?{model:r}:{},[n,r]);return b.jsx(Oe.Provider,{value:s,children:e})},It=()=>{const e=o.useContext(Oe);if(!e)throw new Error("useBoardContext must be used within a BoardProvider");return e},Ge=o.createContext(void 0),At=({children:e})=>{const{model:t,ready:r}=he(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Ge.Provider,{value:n,children:e})},Et=()=>{const e=o.useContext(Ge);if(!e)throw new Error("useBoardContainerContext must be used within a BoardContainerProvider");return e},_e=o.createContext(void 0),Ye=({children:e})=>{const{model:t,ready:r}=ve(),n=o.useMemo(()=>{if(r&&t){const i=t.nozzlePaths;return{model:t,nozzlePaths:i}}return{}},[r,t]),s=r&&t?e:null;return b.jsx(_e.Provider,{value:n,children:s})},Ue=()=>{const e=o.useContext(_e);if(!e)throw new Error("useDeviceAssemblyContext must be used within a DeviceAssemblyProvider");return e};function Kt(){const e=o.createContext(null);return[()=>{const r=o.useContext(e);if(r===void 0)throw new Error("useDispenseKitContext must be used within a Provider");return r},e.Provider]}function Fe({children:e,provider:t,props:r,nozzleProps:n}){const s=ye(r);return b.jsx(t,{value:s,children:e(n||{})})}function St({children:e,provider:t,props:r}){const{nozzlePaths:n}=Ue(),s=(n==null?void 0:n.length)||0;return(n==null?void 0:n.map((l,m)=>b.jsx(Ke,{path:l,children:b.jsx(Fe,{provider:t,props:r,nozzleProps:{nozzleIndex:m,nozzlePath:l,totalNozzles:s,isFirstNozzle:m===0,isLastNozzle:m===s-1},children:e})},l)))||[]}function Ve({provider:e,props:t}){return({children:r})=>e?b.jsx(Ye,{children:b.jsx(St,{provider:e,props:t,children:r})}):null}function Bt(e){const[t,r]=Kt();return[t,Ve({provider:r,props:e})]}const qe=o.createContext(void 0),Lt=({children:e,id:t})=>{const{model:r,ready:n}=Ce(t||""),s=o.useMemo(()=>n&&r?{model:r}:{},[n,r]);return b.jsx(qe.Provider,{value:s,children:e})},Mt=()=>{const e=o.useContext(qe);if(!e)throw new Error("useHolderContext must be used within a HolderProvider");return e},We=o.createContext(void 0),yt=({children:e})=>{const{model:t,ready:r}=ge(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(We.Provider,{value:n,children:e})},Ht=()=>{const e=o.useContext(We);if(!e)throw new Error("useHolderContainerContext must be used within a HolderContainerProvider");return e},Je=o.createContext(void 0),Nt=({children:e})=>{const{model:t,ready:r}=xe(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Je.Provider,{value:n,children:e})},jt=()=>{const e=o.useContext(Je);if(!e)throw new Error("useIngredientContext must be used within a IngredientProvider");return e},Qe=o.createContext(void 0),Rt=({children:e})=>{const{model:t,ready:r}=ke(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Qe.Provider,{value:n,children:e})},Dt=()=>{const e=o.useContext(Qe);if(!e)throw new Error("useIngredientContainerContext must be used within a IngredientContainerProvider");return e},Ot=()=>{const e=x.Pump.type;return c.useKosModel({modelId:e,modelType:x.Pump.type,options:{}})},Xe=o.createContext(void 0),Gt=({children:e})=>{const{model:t,ready:r}=Ot(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Xe.Provider,{value:n,children:e})},_t=()=>{const e=o.useContext(Xe);if(!e)throw new Error("usePumpContext must be used within a PumpProvider");return e};exports.AssemblyProvider=kt;exports.AvailabilityProvider=wt;exports.BoardContainerProvider=At;exports.BoardProvider=$t;exports.CuiKit=Ve;exports.CuiKitWrapper=Fe;exports.DISPENSE_GROUP_BEVERAGE=W;exports.DISPENSE_GROUP_BRAND=G;exports.DISPENSE_GROUP_FLAVOR=_;exports.DeviceAssemblyProvider=Ye;exports.HoldToPourIntentStrategy=Ne;exports.HoldToPourStrategy=fe;exports.HolderContainerProvider=yt;exports.HolderProvider=Lt;exports.IngredientContainerProvider=Rt;exports.IngredientProvider=Nt;exports.NozzleProvider=Ke;exports.PumpProvider=Gt;exports.TapOrHoldIntentStrategy=vt;exports.TapToPourIntentStrategy=Ct;exports.TapToPourStrategy=gt;exports.initializeCuiKit=Bt;exports.useAssembly=le;exports.useAssemblyContext=Pt;exports.useAvailability=me;exports.useAvailabilityContext=Tt;exports.useBeverages=Se;exports.useBoard=be;exports.useBoardContainer=he;exports.useBoardContainerContext=Et;exports.useBoardContext=It;exports.useBrands=Be;exports.useCuiKit=ye;exports.useCuiKitTimers=de;exports.useDefaultCuiKitLifecycle=ct;exports.useDeviceAssembly=ve;exports.useDeviceAssemblyContext=Ue;exports.useDispenseLifecycle=He;exports.useFlavors=Me;exports.useGenericPour=je;exports.useHolder=Ce;exports.useHolderContainer=ge;exports.useHolderContainerContext=Ht;exports.useHolderContext=Mt;exports.useIngredient=xe;exports.useIngredientContainer=ke;exports.useIngredientContainerContext=Dt;exports.useIngredientContext=jt;exports.useIngredientPour=mt;exports.useNozzle=pe;exports.useNozzleContext=E;exports.useNozzlePour=Le;exports.usePourTarget=ft;exports.usePumpContext=_t;exports.withAssembly=tt;exports.withBeverage=st;exports.withBoard=rt;exports.withBoardContainer=nt;exports.withDeviceAssembly=ut;exports.withGenericPour=xt;exports.withHolder=dt;exports.withHolderContainer=lt;exports.withIngredient=bt;exports.withIngredientContainer=ht;exports.withNozzle=pt;
2
- //# sourceMappingURL=pump-provider-B7qOq1di.cjs.map
1
+ "use strict";var ze=Object.defineProperty;var et=(e,t,r)=>t in e?ze(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var F=(e,t,r)=>(et(e,typeof t!="symbol"?t+"":t,r),r);const b=require("@emotion/react/jsx-runtime"),x=require("./dispense-registration-manager-CFnZNxso.cjs"),c=require("@kosdev-code/kos-ui-sdk"),o=require("react"),le=()=>{const e=x.Assembly.type;return c.useKosModel({modelId:e,modelType:x.Assembly.type,options:{}})};function tt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=le();return b.jsx(s,{...n,children:b.jsx(e,{...t,assembly:r})})}}const me=()=>{const e=x.Availability.type;return c.useKosModel({modelId:e,modelType:x.Availability.type,options:{}})};function st(e){return t=>{const{model:r,status:n,KosModelLoader:s}=me();return b.jsx(s,{...n,children:b.jsx(e,{...t,beverage:r})})}}const be=e=>{const t=e;return c.useKosModel({modelId:t,modelType:x.Board.type,options:{}})};function rt(e){return t=>r=>{const{model:n,status:s,KosModelLoader:i}=be(t);return b.jsx(i,{...s,children:b.jsx(e,{...r,board:n})})}}const he=()=>{const e=x.BoardContainer.type;return c.useKosModel({modelId:e,modelType:x.BoardContainer.type,options:{}})};function nt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=he();return b.jsx(s,{...n,children:b.jsx(e,{...t,boardContainer:r})})}}const pe=e=>{const t=e;return c.useKosModel({modelId:t,modelType:x.Nozzle.type,options:{path:e}})},Ee=o.createContext(void 0),Ke=({children:e,path:t})=>{const{model:r,ready:n}=pe(t),s=o.useMemo(()=>n&&r?{model:r}:{},[n,r]);return b.jsx(Ee.Provider,{value:s,children:e})},E=()=>{const e=o.useContext(Ee);if(!e)throw new Error("useNozzleContext must be used within a NozzleProvider");return e},Se=({onBeverageSelected:e,onClearBeverage:t,companionType:r})=>{const{model:n}=E(),[s,i]=o.useState([]),[l,m]=o.useState(null),f=o.useMemo(()=>r?s.map(d=>c.getKosCompanionModel(d,r)):[],[s,r]),p=o.useCallback(async d=>{m(d),await(n==null?void 0:n.setSelectedPourable({beverage:d})),e==null||e(d)},[n,e]),u=o.useCallback(async()=>{m(null),await(n==null?void 0:n.setSelectedPourable({beverage:void 0})),t==null||t()},[n,t]);return o.useEffect(()=>{const d=c.kosAutoEffect(()=>{if(!n)return;const g=n.selectedBrand;if(!g){const v=n.getGroupAvailabilityItems("beverages").filter(C=>C.visible);i(v??[]);return}const T=n.getAvailabilityByParent(g.id).filter(v=>v.visible);i(T??[])});return()=>{d()}},[n]),{beverages:s,beverageCompanions:f,selectBeverage:p,selectedBeverage:l,clearBeverage:u}},Be=({onBrandSelected:e,onBrandCleared:t,companionType:r})=>{const{model:n}=E(),[s,i]=o.useState(null),[l,m]=o.useState([]),f=o.useMemo(()=>r?l.map(d=>c.getKosCompanionModel(d,r)):[],[l,r]),p=o.useCallback(async d=>{i(d),n==null||n.setSelectedBrand(d),e==null||e(d)},[n,e]),u=o.useCallback(()=>{i(null),n==null||n.setSelectedBrand(void 0),t==null||t()},[n,t]);return o.useEffect(()=>{const d=c.kosAutoEffect(()=>{n&&m(n.visibleBrands)});return()=>{d()}},[n]),{brands:l,brandCompanions:f,selectedBrand:s,selectBrand:p,clearBrand:u}},ot=c.KosLog.createLogger({name:"HoldToPourStrategy",group:"kos-hooks"}),fe={name:"HoldToPourStrategy",async initiate(e){if(!(e!=null&&e.canPour)){ot.debug(`Nozzle ${e==null?void 0:e.id} cannot pour. Returning early.`);return}await(e==null?void 0:e.pour())},async initiateEnded(e){await(e==null?void 0:e.cancelPour())}},Z=c.KosLog.createLogger({name:"useNozzlePour",group:"kos-hooks"}),Le=({onPour:e,onPourCancel:t,onBeforePour:r,onBeforePourRejected:n,strategy:s=fe})=>{const{model:i}=E(),l=o.useCallback(async()=>{(r?await(r==null?void 0:r()):!0)?(Z.debug(`[${s==null?void 0:s.name}] - Pour initiated for nozzle ${i==null?void 0:i.id}.`),s==null||s.initiate(i),e==null||e()):(Z.debug(`[${s==null?void 0:s.name}] - Did not pass onBeforePour gate for nozzle ${i==null?void 0:i.id}. Cancelling pour.`),n==null||n())},[e,i,s,r,t]),m=o.useCallback(()=>{var u;Z.debug(`[${s==null?void 0:s.name}] - Pour initiate ended called for nozzle ${i==null?void 0:i.id}.`),(u=s==null?void 0:s.initiateEnded)==null||u.call(s,i),t==null||t()},[t,i,s]),f=o.useCallback(()=>{Z.debug(`Force cancelling pour for nozzle ${i==null?void 0:i.id}.`),i==null||i.cancelPour(),t==null||t()},[t,i]);return{handlers:c.usePressGesture({onPressed:l,onRelease:m}).dom,cancel:f,status:i}},Me=({onFlavorSelected:e,onFlavorCleared:t,companionType:r})=>{const{model:n}=E(),s=o.useMemo(()=>(n==null?void 0:n.getGroupAvailabilityItems("flavors").filter(u=>u.visible))??[],[n]),i=o.useMemo(()=>r?s.map(u=>c.getKosCompanionModel(u,r)):[],[s,r]),[l,m]=o.useState([]),f=o.useCallback(async u=>{if(m(d=>d!=null&&d.includes(u)?[...d.filter(g=>g!==u)]:[...d??[],u]),n!=null&&n.selectedPourable){const{beverage:d}=n.selectedPourable;await n.setSelectedPourable({beverage:d,additional:l??[]})}e==null||e(u,l??[])},[n,e,l]),p=o.useCallback(async()=>{if(m([]),n!=null&&n.selectedPourable){const{beverage:u}=n.selectedPourable;n.setSelectedPourable({beverage:u}),t==null||t()}},[n,t]);return{flavors:s,flavorCompanions:i,selectFlavor:f,selectedFlavors:l,clearFlavors:p}},G="brands",W="beverages",_="flavors",y=c.KosLog.createLogger({name:"use-cui-kit"}),ye=({initialGroup:e=G,options:t={}})=>{var J,Q,X;const[r,n]=o.useState(e),{model:s}=E(),i=o.useRef([]),l=o.useCallback(h=>{n(_);const B=`/kos/dispense/${s==null?void 0:s.path}/brand/selected/`;c.EventBus.publish(B,h)},[s==null?void 0:s.path]),m=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/brand/cleared/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),f=o.useCallback(h=>{n(_);const B=`/kos/dispense/${s==null?void 0:s.path}/beverage/selected/`;c.EventBus.publish(B,h)},[s==null?void 0:s.path]),p=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/beverage/cleared/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),u=o.useCallback(h=>{const B=`/kos/dispense/${s==null?void 0:s.path}/flavor/selected/`;c.EventBus.publish(B,h)},[s==null?void 0:s.path]),d=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/flavor/cleared/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),g=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/pour/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),T=o.useCallback(async()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/pre/pour/`;return c.EventBus.publish(h,{}),await(M==null?void 0:M())||!0},[s==null?void 0:s.path]),v=o.useCallback(async()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/pre/pour/rejected/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),C=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/pour/cancel/`;c.EventBus.publish(h,{})},[s==null?void 0:s.path]),{brands:a,selectBrand:j,selectedBrand:K,clearBrand:k,brandCompanions:Y}=Be({companionType:(J=t.companionTypes)==null?void 0:J.brand,onBrandSelected:l,onBrandCleared:m}),{beverages:ee,selectBeverage:te,selectedBeverage:se,clearBeverage:P,beverageCompanions:S}=Se({companionType:(Q=t.companionTypes)==null?void 0:Q.beverage,onBeverageSelected:f,onClearBeverage:p}),{clearFlavors:U,flavors:re,selectFlavor:R,selectedFlavors:w,flavorCompanions:A}=Me({companionType:(X=t.companionTypes)==null?void 0:X.flavor,onFlavorSelected:u,onFlavorCleared:d}),[M,$]=o.useState(),H=o.useCallback(h=>{$(()=>h)},[]),D=Le({onPour:g,onPourCancel:C,onBeforePour:T,onBeforePourRejected:v}),O=o.useCallback(()=>{switch(y.debug(`Navigating back from group: ${r}`),r){case G:P(),k();break;case W:case _:n(e),P(),k();break}},[P,k,r,e]),ne=o.useCallback(()=>{const h=`/kos/dispense/${s==null?void 0:s.path}/home/`;c.EventBus.publish(h,{}),n(e),e===G&&(P(),k()),e===W&&P()},[P,k,e]),oe=o.useCallback(()=>{if(i.current.length===0){y.debug("No timers to pause.");return}y.debug(`Pausing ${i.current.length} timers.`),i.current.forEach(h=>{y.debug(`Pausing timer with id ${h.id}.`),h.pause()})},[]),ie=o.useCallback(()=>{if(i.current.length===0){y.debug("No timers to restart.");return}y.debug(`Restarting ${i.current.length} timers.`),i.current.forEach(h=>{y.debug(`Restarting timer with id ${h.id}.`),h.restart()})},[]);return{timers:{add:o.useCallback(h=>{if(h){if(i.current.some(B=>B.id===h.id)){y.debug(`Timer with id ${h.id} already exists.`);return}i.current.push(h)}},[]),pause:oe,restart:ie},nav:{currentGroup:r,back:O,home:ne},pour:D,updateOnBeforePour:H,selections:{[G]:K,[W]:se,[_]:w},[G]:{models:a,companions:Y,clear:k,handlers:{onSelected:j}},[W]:{models:ee,companions:S,clear:P,handlers:{onSelected:te}},[_]:{models:re,companions:A,clear:U,handlers:{onSelected:R}}}},it=e=>{const{model:t}=E(),[r,n]=o.useState(null),{onAmbientTimer:s,onAttractTimer:i,onResetAttractTimer:l,onResumeAttractTimer:m,defaultAttractTime:f,defaultAmbientTime:p}=e,u=o.useCallback(()=>{s&&(c.KosLog.info("Ambient timer expired. Calling callback"),s==null||s())},[s]),d=o.useCallback(()=>{i&&(c.KosLog.info("Attract timer expired. Calling callback"),i==null||i())},[i]),g=o.useCallback(()=>{r&&(r.restart(),l==null||l())},[r,l]),T=o.useCallback(()=>{r&&(r.reset(),l==null||l())},[r,l]),v=o.useCallback(()=>{r&&(r.pause(),m==null||m())},[r,m]);return o.useEffect(()=>{if(t&&f){c.KosLog.info("Nozzle is available. Creating timers");const C=c.TimerManager.createTimer("attract-timer-"+t.path,f);return f&&(C==null||C.addTimeoutAction({name:"attract-timer",remainingTime:0,action:d})),p&&(C==null||C.addTimeoutAction({name:"ambient-timer",remainingTime:p,action:u})),f&&(C==null||C.start()),n(C??null),()=>{C==null||C.reset(),n(null)}}return()=>{c.KosLog.info("Nozzle is not available. No timers to clear")}},[p,f,u,d,t]),{attractTimer:r,restart:g,pause:T,resume:v}},at=(e,t)=>{if(t)return c.EventBus.subscribe(e,t).unsubscribe},He=({onInit:e,onBrandSelected:t,onBrandCleared:r,onBeverageCleared:n,onBeverageSelected:s,onFlavorCleared:i,onFlavorSelected:l,onReturnToHome:m,onPour:f,onPourCancel:p,onBeforePourRejected:u,onAmbientTimer:d,onAttractTimer:g,onResumeAttractTimer:T,onIdleTimeout:v,onAreYouThereTimeout:C})=>{const{model:a}=E();o.useEffect(()=>{const K=[{topic:`/kos/dispense/${a==null?void 0:a.path}/brand/selected/`,callback:t},{topic:`/kos/dispense/${a==null?void 0:a.path}/brand/cleared/`,callback:r},{topic:`/kos/dispense/${a==null?void 0:a.path}/beverage/selected/`,callback:s},{topic:`/kos/dispense/${a==null?void 0:a.path}/beverage/cleared/`,callback:n},{topic:`/kos/dispense/${a==null?void 0:a.path}/flavor/selected/`,callback:l},{topic:`/kos/dispense/${a==null?void 0:a.path}/flavor/cleared/`,callback:i},{topic:`/kos/dispense/${a==null?void 0:a.path}/pour/`,callback:f},{topic:`/kos/dispense/${a==null?void 0:a.path}/pour/cancel/`,callback:p},{topic:`/kos/dispense/${a==null?void 0:a.path}/pre/pour/rejected/`,callback:u},{topic:`/kos/dispense/${a==null?void 0:a.path}/ambient/start/`,callback:d},{topic:`/kos/dispense/${a==null?void 0:a.path}/attract/start/`,callback:g},{topic:`/kos/dispense/${a==null?void 0:a.path}/attract/resume/`,callback:T},{topic:`/kos/dispense/${a==null?void 0:a.path}/idle/timeout/`,callback:v},{topic:`/kos/dispense/${a==null?void 0:a.path}/are-you-there/timeout/`,callback:C},{topic:`/kos/dispense/${a==null?void 0:a.path}/init/`,callback:e},{topic:`/kos/dispense/${a==null?void 0:a.path}/home/`,callback:m}].map(({topic:k,callback:Y})=>at(k,Y));return()=>{K.forEach(k=>k==null?void 0:k())}},[a==null?void 0:a.path,d,g,n,s,r,t,i,l,f,p,T,v,C,e,m])},L=c.KosLog.createLogger({name:"useCuiKitTimers"}),de=e=>{const{model:t}=E(),[r,n]=o.useState(null),{onAreYouThereTimer:s,onIdleTimer:i,onResetIdleTimer:l,defaultAreYouThereTime:m=10,defaultIdleTime:f=20}=e,p=o.useRef(!1),u=o.useCallback(()=>{!p.current&&s&&(c.KosLog.info("Are you there timer expired. Calling callback"),p.current=!0,s==null||s())},[s]),d=o.useCallback(()=>{L.debug("handleIdleTimer called in useCuiKitTimers, onIdleTimer exists:",!!i),i?(L.debug("Idle timer expired. Calling callback"),i==null||i()):L.debug("No onIdleTimer callback provided!")},[i]),g=o.useCallback(()=>{L.debug(`TIMER RESTART called for ${e.prefix??""}timer`),r&&(r.restart(),p.current=!1,l==null||l())},[r,l,e.prefix]),T=o.useCallback(()=>{L.debug(`TIMER PAUSE/RESET called for ${e.prefix??""}timer`),r&&(r.reset(),p.current=!1,l==null||l())},[r,l,e.prefix]);return o.useEffect(()=>{if(L.debug(`useCuiKitTimers effect triggered - nozzle: ${!!t}, path: ${t==null?void 0:t.path}, callbacks: handleIdle=${!!d}, handleAreYouThere=${!!u}`),t){L.info("Nozzle is available. Creating timers");const v=c.TimerManager.createTimer(`${e.prefix??""}idle-timer-${t.path}`,f);return L.debug(`Adding idle timer action for ${e.prefix??""}idle-timer-${t.path} with callback:`,!!d),v==null||v.addTimeoutAction({name:"idle-timer",remainingTime:0,action:d}),v==null||v.addTimeoutAction({name:"are-you-there-timer",remainingTime:m,action:u}),n(v??null),()=>{v==null||v.reset(),n(null)}}return()=>{L.info("Nozzle is not available. No timers to clear")}},[m,f,u,d,t,e.prefix]),{idleTimer:r,restart:g,pause:T}},N=c.KosLog.createLogger({name:"useDefaultCuiKitLifecycle"}),ct=({kit:e,inactivity:t,pour:r,screens:n,onBeforeAreYouThereTimer:s,areYouThereRejectionPolicy:i="pause"})=>{var we,Te,$e,Ie;const[l,m]=o.useState(!1),[f,p]=o.useState(!1),{model:u}=E(),[d,g]=o.useState(!1),T=(t==null?void 0:t.idleTimeout)??15,v=(t==null?void 0:t.areYouThereTimeoutOffset)??10,C=(r==null?void 0:r.idleTimeout)??(t==null?void 0:t.idleTimeout)??10,a=(r==null?void 0:r.areYouThereTimeoutOffset)??(t==null?void 0:t.areYouThereTimeoutOffset)??5,j=n==null?void 0:n.ambientTimeoutOffset,K=n==null?void 0:n.attractTimeout,k=o.useCallback(()=>{if(N.info("handleIdleTimeout called - navigating home and publishing event"),R(!1),e==null||e.nav.home(),u){const I=`/kos/dispense/${u.path}/idle/timeout/`;c.EventBus.publish(I,{})}},[(we=e==null?void 0:e.nav)==null?void 0:we.home,u]),Y=o.useCallback(()=>{N.info("handleResetIdleTimer called - resetting idle timer"),R(!1)},[]),ee=o.useCallback(()=>{if(j&&(m(!0),p(!1),u)){const I=`/kos/dispense/${u.path}/ambient/start/`;c.EventBus.publish(I,{})}},[j,u]),te=o.useCallback(()=>{if(K&&(p(!0),m(!1),u)){const I=`/kos/dispense/${u.path}/attract/start/`;c.EventBus.publish(I,{})}},[K,u]),se=o.useCallback(()=>{if(K&&(p(!1),m(!1),e==null||e.nav.home(),u)){const I=`/kos/dispense/${u.path}/attract/resume/`;c.EventBus.publish(I,{})}},[e==null?void 0:e.nav,K,u]),{pause:P,restart:S,attractTimer:U}=it({defaultAmbientTime:j,defaultAttractTime:K,onAmbientTimer:ee,onAttractTimer:te,onResumeAttractTimer:se});(Te=e==null?void 0:e.timers)==null||Te.add(U);const[re,R]=o.useState(!1);N.info("Creating idle timer with timeout:",T,"seconds and callback:",!!k);const{pause:w,restart:A,idleTimer:M}=de({defaultAreYouThereTime:v,defaultIdleTime:T,onIdleTimer:k,onResetIdleTimer:Y});N.info(`Creating pour timer with timeout: ${C} seconds and callback: ${!!k}`);const{pause:$,restart:H,idleTimer:D}=de({defaultAreYouThereTime:a,defaultIdleTime:C,onIdleTimer:k,prefix:"pour-"}),O=o.useCallback(async()=>{let I=!0;if(s)try{I=await s()}catch(ae){N.error(`onBeforeAreYouThereTimer callback failed: ${ae}`),I=!1}if(I){if(u){const ae=`/kos/dispense/${u.path}/are-you-there/timeout/`;c.EventBus.publish(ae,{})}R(!0),d?$():w()}else switch(i){case"pause":d?$():w();break;case"restart":d?H():A();break}},[s,u,i,d]),ne=o.useCallback(()=>{R(!1),P(),d?(H(),w()):(A(),$())},[d,w,$,A,H]);o.useEffect(()=>{M&&M.addTimeoutAction({name:"are-you-there-timer",remainingTime:v,action:O})},[M,v,O]),o.useEffect(()=>{D&&D.addTimeoutAction({name:"pour-are-you-there-timer",remainingTime:a,action:O})},[D,a,O]),($e=e==null?void 0:e.timers)==null||$e.add(M),(Ie=e==null?void 0:e.timers)==null||Ie.add(D);const oe=o.useCallback(()=>{g(!1),$(),w(),P()},[w,$]),ie=o.useCallback(()=>{g(!0),N.info("restarting pour timer"),H(),P(),w()},[w,H]),Pe=o.useCallback(()=>{g(!1),N.info("restarting pour timer on before pour rejected"),$(),A()},[]),J=o.useCallback(()=>{P(),p(!1),m(!1),A()},[P,A]),Q=o.useCallback(()=>{p(!1),m(!1),g(!1),$(),S()},[S,$]),X=o.useCallback(()=>{p(!1),m(!1),g(!1),P(),A()},[P,A]),h=o.useCallback(()=>{p(!1),m(!1),g(!1),S(),w(),$()},[S,w,$]),B=o.useCallback(()=>{p(!1),m(!1),S(),w()},[S,w]);He({onBrandSelected:J,onBrandCleared:Q,onBeverageSelected:X,onBeverageCleared:h,onPour:oe,onPourCancel:ie,onBeforePourRejected:Pe,onInit:B});const Ze=d?a:v;return o.useEffect(()=>{if(u&&U){const I=`/kos/dispense/${u==null?void 0:u.path}/init/`;c.EventBus.publish(I,{})}},[u,U]),{showAreYouThere:re,clearAreYouThere:ne,pauseIdleTimer:w,restartIdleTimer:A,areYouThereCountdown:Ze,showAmbientScreen:l,showAttractScreen:f,pauseScreenTimer:P,restartScreenTimer:S}},ve=()=>{const e=x.DeviceAssembly.type;return c.useKosModel({modelId:e,modelType:x.DeviceAssembly.type,options:{}})};function ut(e){return t=>{const{model:r,status:n,KosModelLoader:s}=ve();return b.jsx(s,{...n,children:b.jsx(e,{...t,deviceAssembly:r})})}}const Ce=e=>{const t=e;return c.useKosModel({modelId:t,modelType:x.Holder.type,options:{}})};function dt(e,t){return r=>{const{model:n,status:s,KosModelLoader:i}=Ce(e);return b.jsx(i,{...s,children:b.jsx(t,{...r,holder:n})})}}const ge=()=>{const e=x.HolderContainer.type;return c.useKosModel({modelId:e,modelType:x.HolderContainer.type,options:{}})};function lt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=ge();return b.jsx(s,{...n,children:b.jsx(e,{...t,holderContainer:r})})}}const xe=()=>{const e=x.Ingredient.type;return c.useKosModel({modelId:e,modelType:x.Ingredient.type,options:{}})},ce=c.KosLog.createLogger({name:"HoldToPourIntentStrategy",group:"kos-hooks"}),Ne={name:"HoldToPourIntentStrategy",async initiate(e,t){if(!(e!=null&&e.canPour)){ce.debug(`${e==null?void 0:e.id} cannot pour. Returning early.`);return}t?(ce.debug(`performing intent: ${t}`),await(e==null?void 0:e.performIntent(t))):ce.debug("no intent provided. Returning early.")},async initiateEnded(e){await(e==null?void 0:e.cancelPour())}},ue=c.KosLog.createLogger({name:"useNozzlePour",group:"kos-hooks"}),mt=({onPour:e,onPourCancel:t,intentContainer:r,strategy:n=Ne})=>{const s=o.useCallback(()=>{ue.debug(`[${n==null?void 0:n.name}] - Pour initiated for model ${r==null?void 0:r.id}.`),n==null||n.initiate(r),e==null||e()},[e,r,n]),i=o.useCallback(()=>{var f;ue.debug(`[${n==null?void 0:n.name}] - Pour initiate ended called for nozzle ${r==null?void 0:r.id}.`),(f=n==null?void 0:n.initiateEnded)==null||f.call(n,r),t==null||t()},[t,r,n]),l=o.useCallback(()=>{ue.debug(`Force cancelling pour for nozzle ${r==null?void 0:r.id}.`),r==null||r.cancelPour(),t==null||t()},[t,r]);return{handlers:c.usePressGesture({onPressed:s,onRelease:i}).dom,cancel:l,status:r}};function bt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=xe();return b.jsx(s,{...n,children:b.jsx(e,{...t,ingredient:r})})}}const ke=()=>{const e=x.IngredientContainer.type;return c.useKosModel({modelId:e,modelType:x.IngredientContainer.type,options:{}})};function ht(e){return t=>{const{model:r,status:n,KosModelLoader:s}=ke();return b.jsx(s,{...n,children:b.jsx(e,{...t,ingredientContainer:r})})}}function pt(e,t){return r=>{const{model:n,status:s,KosModelLoader:i}=pe(e);return b.jsx(i,{...s,children:b.jsx(t,{...r,nozzle:n})})}}const V=c.KosLog.createLogger({name:"usePour",group:"kos-hooks"}),ft=({onBeforePour:e,onPour:t,onPourCancel:r,onPourAbort:n,pourTarget:s,strategy:i=fe})=>{const l=o.useCallback(async()=>{V.debug(`[${i==null?void 0:i.name}] - calling before pour for pour target ${s==null?void 0:s.id}.`),(e?await(e==null?void 0:e()):!0)?(V.debug(`[${i==null?void 0:i.name}] - Pour initiated for pour target ${s==null?void 0:s.id}.`),await(i==null?void 0:i.initiate(s)),t==null||t(),s!=null&&s.isPouring||n==null||n()):(V.debug(`[${i==null?void 0:i.name}] - Pour cancelled for pour target ${s==null?void 0:s.id}.`),r==null||r())},[t,s,i]),m=o.useCallback(async()=>{var d;V.debug(`[${i==null?void 0:i.name}] - Pour initiate ended called for pour target ${s==null?void 0:s.id}.`),await((d=i==null?void 0:i.initiateEnded)==null?void 0:d.call(i,s))||r==null||r()},[r,s,i]),f=o.useCallback(async()=>{V.debug(`Force cancelling pour for pour target ${s==null?void 0:s.id}.`),await(s==null?void 0:s.cancelPour()),r==null||r()},[r,s]);return{handlers:c.usePressGesture({onPressed:l,onRelease:m}).dom,cancel:f,status:s}},q=c.KosLog.createLogger({name:"TapOrHoldIntentStrategy",group:"kos-hooks"});class vt{constructor(t){F(this,"intent");F(this,"name","TapOrHoldIntentStrategy");F(this,"isHold",!1);F(this,"disposer",null);this.intent=t}async initiate(t,r){if(this.disposer=setTimeout(()=>{this.isHold=!0},250),t!=null&&t.isPouring&&!this.isHold){q.debug("additional tap detected. cancelling pour"),await t.cancelPour();return}if(!(t!=null&&t.canPour)){q.debug(`${t==null?void 0:t.id} cannot pour. Returning early.`);return}r?(q.debug(`performing intent: ${r}`),await(t==null?void 0:t.performIntent(r))):q.debug("no intent provided. Returning early.")}async initiateEnded(t){return this.disposer&&clearTimeout(this.disposer),this.disposer=null,this.isHold?(await(t==null?void 0:t.cancelPour()),!1):(q.debug("Tap detected. don't cancel and return."),!0)}}const z=c.KosLog.createLogger({name:"TapToPourIntentStrategy",group:"kos-hooks"}),Ct={name:"TapToPourIntentStrategy",async initiate(e,t){if(e!=null&&e.isPouring){z.debug(`Nozzle ${e==null?void 0:e.id} is already pouring. cancelling pour`),await e.cancelPour();return}if(!(e!=null&&e.canPour)){z.debug(`Nozzle ${e==null?void 0:e.id} cannot pour. Returning early.`);return}t?(z.debug(`performing intent: ${t}`),await(e==null?void 0:e.performIntent(t))):z.debug("no intent provided. Returning early.")},async initiateEnded(e){return!0}},Ae=c.KosLog.createLogger({name:"HoldToPourStrategy",group:"kos-hooks"}),gt={name:"TapToPourStrategy",async initiate(e){if(e!=null&&e.isPouring){Ae.debug(`Nozzle ${e==null?void 0:e.id} is already pouring. cancelling pour`),await e.cancelPour();return}if(!(e!=null&&e.canPour)){Ae.debug(`Nozzle ${e==null?void 0:e.id} cannot pour. Returning early.`);return}await(e==null?void 0:e.pour())},async initiateEnded(e){return!0}},je=(e,t,r)=>{const n=e;return c.useKosModel({modelId:n,modelType:x.GenericPour.type,options:{servicePathFactory:t,selectedId:r}})};function xt(e){return t=>{const{model:r,status:n,KosModelLoader:s}=je(t.id,t.servicePathFactory,t.itemId);return b.jsx(s,{...n,children:b.jsx(e,{...t,genericPour:r})})}}const Re=o.createContext(void 0),kt=({children:e})=>{const{model:t,ready:r}=le(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Re.Provider,{value:n,children:e})},Pt=()=>{const e=o.useContext(Re);if(!e)throw new Error("useAssemblyContext must be used within a AssemblyProvider");return e},De=o.createContext(void 0),wt=({children:e})=>{const{model:t,ready:r}=me(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(De.Provider,{value:n,children:e})},Tt=()=>{const e=o.useContext(De);if(!e)throw new Error("useAvailabilityContext must be used within a AvailabilityProvider");return e},Oe=o.createContext(void 0),$t=({children:e,id:t})=>{const{model:r,ready:n}=be(t),s=o.useMemo(()=>n&&r?{model:r}:{},[n,r]);return b.jsx(Oe.Provider,{value:s,children:e})},It=()=>{const e=o.useContext(Oe);if(!e)throw new Error("useBoardContext must be used within a BoardProvider");return e},Ge=o.createContext(void 0),At=({children:e})=>{const{model:t,ready:r}=he(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Ge.Provider,{value:n,children:e})},Et=()=>{const e=o.useContext(Ge);if(!e)throw new Error("useBoardContainerContext must be used within a BoardContainerProvider");return e},_e=o.createContext(void 0),Ye=({children:e})=>{const{model:t,ready:r}=ve(),n=o.useMemo(()=>{if(r&&t){const i=t.nozzlePaths;return{model:t,nozzlePaths:i}}return{}},[r,t]),s=r&&t?e:null;return b.jsx(_e.Provider,{value:n,children:s})},Ue=()=>{const e=o.useContext(_e);if(!e)throw new Error("useDeviceAssemblyContext must be used within a DeviceAssemblyProvider");return e};function Kt(){const e=o.createContext(null);return[()=>{const r=o.useContext(e);if(r===void 0)throw new Error("useDispenseKitContext must be used within a Provider");return r},e.Provider]}function Fe({children:e,provider:t,props:r,nozzleProps:n}){const s=ye(r);return b.jsx(t,{value:s,children:e(n||{})})}function St({children:e,provider:t,props:r}){const{nozzlePaths:n}=Ue(),s=(n==null?void 0:n.length)||0;return(n==null?void 0:n.map((l,m)=>b.jsx(Ke,{path:l,children:b.jsx(Fe,{provider:t,props:r,nozzleProps:{nozzleIndex:m,nozzlePath:l,totalNozzles:s,isFirstNozzle:m===0,isLastNozzle:m===s-1},children:e})},l)))||[]}function Ve({provider:e,props:t}){return({children:r})=>e?b.jsx(Ye,{children:b.jsx(St,{provider:e,props:t,children:r})}):null}function Bt(e){const[t,r]=Kt();return[t,Ve({provider:r,props:e})]}const qe=o.createContext(void 0),Lt=({children:e,id:t})=>{const{model:r,ready:n}=Ce(t||""),s=o.useMemo(()=>n&&r?{model:r}:{},[n,r]);return b.jsx(qe.Provider,{value:s,children:e})},Mt=()=>{const e=o.useContext(qe);if(!e)throw new Error("useHolderContext must be used within a HolderProvider");return e},We=o.createContext(void 0),yt=({children:e})=>{const{model:t,ready:r}=ge(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(We.Provider,{value:n,children:e})},Ht=()=>{const e=o.useContext(We);if(!e)throw new Error("useHolderContainerContext must be used within a HolderContainerProvider");return e},Je=o.createContext(void 0),Nt=({children:e})=>{const{model:t,ready:r}=xe(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Je.Provider,{value:n,children:e})},jt=()=>{const e=o.useContext(Je);if(!e)throw new Error("useIngredientContext must be used within a IngredientProvider");return e},Qe=o.createContext(void 0),Rt=({children:e})=>{const{model:t,ready:r}=ke(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Qe.Provider,{value:n,children:e})},Dt=()=>{const e=o.useContext(Qe);if(!e)throw new Error("useIngredientContainerContext must be used within a IngredientContainerProvider");return e},Ot=()=>{const e=x.Pump.type;return c.useKosModel({modelId:e,modelType:x.Pump.type,options:{}})},Xe=o.createContext(void 0),Gt=({children:e})=>{const{model:t,ready:r}=Ot(),n=o.useMemo(()=>r&&t?{model:t}:{},[r,t]);return b.jsx(Xe.Provider,{value:n,children:e})},_t=()=>{const e=o.useContext(Xe);if(!e)throw new Error("usePumpContext must be used within a PumpProvider");return e};exports.AssemblyProvider=kt;exports.AvailabilityProvider=wt;exports.BoardContainerProvider=At;exports.BoardProvider=$t;exports.CuiKit=Ve;exports.CuiKitWrapper=Fe;exports.DISPENSE_GROUP_BEVERAGE=W;exports.DISPENSE_GROUP_BRAND=G;exports.DISPENSE_GROUP_FLAVOR=_;exports.DeviceAssemblyProvider=Ye;exports.HoldToPourIntentStrategy=Ne;exports.HoldToPourStrategy=fe;exports.HolderContainerProvider=yt;exports.HolderProvider=Lt;exports.IngredientContainerProvider=Rt;exports.IngredientProvider=Nt;exports.NozzleProvider=Ke;exports.PumpProvider=Gt;exports.TapOrHoldIntentStrategy=vt;exports.TapToPourIntentStrategy=Ct;exports.TapToPourStrategy=gt;exports.initializeCuiKit=Bt;exports.useAssembly=le;exports.useAssemblyContext=Pt;exports.useAvailability=me;exports.useAvailabilityContext=Tt;exports.useBeverages=Se;exports.useBoard=be;exports.useBoardContainer=he;exports.useBoardContainerContext=Et;exports.useBoardContext=It;exports.useBrands=Be;exports.useCuiKit=ye;exports.useCuiKitTimers=de;exports.useDefaultCuiKitLifecycle=ct;exports.useDeviceAssembly=ve;exports.useDeviceAssemblyContext=Ue;exports.useDispenseLifecycle=He;exports.useFlavors=Me;exports.useGenericPour=je;exports.useHolder=Ce;exports.useHolderContainer=ge;exports.useHolderContainerContext=Ht;exports.useHolderContext=Mt;exports.useIngredient=xe;exports.useIngredientContainer=ke;exports.useIngredientContainerContext=Dt;exports.useIngredientContext=jt;exports.useIngredientPour=mt;exports.useNozzle=pe;exports.useNozzleContext=E;exports.useNozzlePour=Le;exports.usePourTarget=ft;exports.usePumpContext=_t;exports.withAssembly=tt;exports.withBeverage=st;exports.withBoard=rt;exports.withBoardContainer=nt;exports.withDeviceAssembly=ut;exports.withGenericPour=xt;exports.withHolder=dt;exports.withHolderContainer=lt;exports.withIngredient=bt;exports.withIngredientContainer=ht;exports.withNozzle=pt;
2
+ //# sourceMappingURL=pump-provider-vk4pL4O3.cjs.map