@kosdev-code/kos-dispense-sdk 2.1.13 → 2.1.15

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.
package/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./dispense-registration-manager-BZ5L3AWX.cjs"),o=require("./extension-utils-DUel3wIz.cjs"),e=require("./pump-provider-B0n-z7GU.cjs"),i=require("@kosdev-code/kos-ui-plugin/utilities");require("@kosdev-code/kos-ui-sdk");require("react");require("@emotion/react/jsx-runtime");require("@kosdev-code/kos-dispense-sdk");const t=i.createExtensionSchema({},{rankable:!1}),n=i.extensionPointId("cui","control","pour"),u=i.defineExtensionPoint({id:n,contributionKey:"controlPour",displayName:"Control Pour",description:"Extension point for controlled pour plugin configurations with view support",hasView:!0,isRankable:!1,schema:t,metadata:{exportName:"ControlPourExtension",category:"Dispense",tags:["pour","control","beverage"]},validate:(s,a)=>{i.validateWithSchema(t,s,a)},transform:i.createViewAwareTransform()}),d=n;exports.Assembly=r.Assembly;exports.Availability=r.Availability;exports.Board=r.Board;exports.BoardContainer=r.BoardContainer;Object.defineProperty(exports,"BoardContainerModel",{enumerable:!0,get:()=>r.BoardContainerModel});exports.CONTEXT_ASSEMBLY_DATA=r.CONTEXT_ASSEMBLY_DATA;exports.CONTEXT_ASSEMBLY_RAW_DATA=r.CONTEXT_ASSEMBLY_RAW_DATA;exports.DeviceAssembly=r.DeviceAssembly;exports.DispenseModelType=r.DispenseModelType;exports.DispenserModels=r.kosModels;exports.ExtensionType=r.ExtensionType;exports.GenericPour=r.GenericPour;exports.Holder=r.Holder;exports.HolderContainer=r.HolderContainer;exports.Ingredient=r.Ingredient;exports.IngredientContainer=r.IngredientContainer;exports.KosModelRegistry=r.KosModelRegistry;exports.Nozzle=r.Nozzle;exports.PourState=r.PourState;exports.Pump=r.Pump;exports.PumpContainer=r.PumpContainer;exports.PumpIndex=r.PumpIndex;exports.TOPIC_BOARD_LINKED=r.TOPIC_BOARD_LINKED;exports.TOPIC_BOARD_UNLINKED=r.TOPIC_BOARD_UNLINKED;exports.kosModels=r.kosModels;exports.registerDispenseModels=r.registerDispenseModels;exports.AssemblyServices=o.index;exports.AssemblyTypes=o.assembly;exports.DispenseExtensionManager=o.DispenseExtensionManager;exports.GenericPourServices=o.index$1;exports.HolderServices=o.index$2;exports.IngredientServices=o.index$3;exports.KosExtensionManager=o.KosExtensionManager;exports.NozzleServices=o.index$4;exports.PumpServices=o.index$5;exports.getFuelGaugeValue=o.getFuelGaugeValue;exports.AssemblyProvider=e.AssemblyProvider;exports.AvailabilityProvider=e.AvailabilityProvider;exports.BoardContainerProvider=e.BoardContainerProvider;exports.BoardProvider=e.BoardProvider;exports.CuiKit=e.CuiKit;exports.CuiKitWrapper=e.CuiKitWrapper;exports.DISPENSE_GROUP_BEVERAGE=e.DISPENSE_GROUP_BEVERAGE;exports.DISPENSE_GROUP_BRAND=e.DISPENSE_GROUP_BRAND;exports.DISPENSE_GROUP_FLAVOR=e.DISPENSE_GROUP_FLAVOR;exports.DeviceAssemblyProvider=e.DeviceAssemblyProvider;exports.HoldToPourIntentStrategy=e.HoldToPourIntentStrategy;exports.HoldToPourStrategy=e.HoldToPourStrategy;exports.HolderContainerProvider=e.HolderContainerProvider;exports.HolderProvider=e.HolderProvider;exports.IngredientContainerProvider=e.IngredientContainerProvider;exports.IngredientProvider=e.IngredientProvider;exports.NozzleProvider=e.NozzleProvider;exports.PourContext=e.PourContext;exports.PumpProvider=e.PumpProvider;exports.TapOrHoldIntentStrategy=e.TapOrHoldIntentStrategy;exports.TapToPourIntentStrategy=e.TapToPourIntentStrategy;exports.TapToPourStrategy=e.TapToPourStrategy;exports.initializeCuiKit=e.initializeCuiKit;exports.useAssembly=e.useAssembly;exports.useAssemblyContext=e.useAssemblyContext;exports.useAvailability=e.useAvailability;exports.useAvailabilityContext=e.useAvailabilityContext;exports.useBeverages=e.useBeverages;exports.useBoard=e.useBoard;exports.useBoardContainer=e.useBoardContainer;exports.useBoardContainerContext=e.useBoardContainerContext;exports.useBoardContext=e.useBoardContext;exports.useBrands=e.useBrands;exports.useCuiKit=e.useCuiKit;exports.useCuiKitTimers=e.useCuiKitTimers;exports.useDefaultCuiKitLifecycle=e.useDefaultCuiKitLifecycle;exports.useDeviceAssembly=e.useDeviceAssembly;exports.useDeviceAssemblyContext=e.useDeviceAssemblyContext;exports.useDispenseLifecycle=e.useDispenseLifecycle;exports.useFlavors=e.useFlavors;exports.useGenericPour=e.useGenericPour;exports.useHolder=e.useHolder;exports.useHolderContainer=e.useHolderContainer;exports.useHolderContainerContext=e.useHolderContainerContext;exports.useHolderContext=e.useHolderContext;exports.useIngredient=e.useIngredient;exports.useIngredientContainer=e.useIngredientContainer;exports.useIngredientContainerContext=e.useIngredientContainerContext;exports.useIngredientContext=e.useIngredientContext;exports.useIngredientPour=e.useIngredientPour;exports.useNozzle=e.useNozzle;exports.useNozzleContext=e.useNozzleContext;exports.useNozzlePour=e.useNozzlePour;exports.usePourTarget=e.usePourTarget;exports.usePumpContext=e.usePumpContext;exports.withAssembly=e.withAssembly;exports.withBeverage=e.withBeverage;exports.withBoard=e.withBoard;exports.withBoardContainer=e.withBoardContainer;exports.withDeviceAssembly=e.withDeviceAssembly;exports.withGenericPour=e.withGenericPour;exports.withHolder=e.withHolder;exports.withHolderContainer=e.withHolderContainer;exports.withIngredient=e.withIngredient;exports.withIngredientContainer=e.withIngredientContainer;exports.withNozzle=e.withNozzle;exports.ControlPourExtension=u;exports.EXTENSION_POINT_CONTROL_POUR=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./dispense-registration-manager-BZ5L3AWX.cjs"),o=require("./extension-utils-DUel3wIz.cjs"),e=require("./pump-provider-86479YU2.cjs"),i=require("@kosdev-code/kos-ui-plugin/utilities");require("@kosdev-code/kos-ui-sdk");require("react");require("@emotion/react/jsx-runtime");require("@kosdev-code/kos-dispense-sdk");const t=i.createExtensionSchema({},{rankable:!1}),n=i.extensionPointId("cui","control","pour"),u=i.defineExtensionPoint({id:n,contributionKey:"controlPour",displayName:"Control Pour",description:"Extension point for controlled pour plugin configurations with view support",hasView:!0,isRankable:!1,schema:t,metadata:{exportName:"ControlPourExtension",category:"Dispense",tags:["pour","control","beverage"]},validate:(s,a)=>{i.validateWithSchema(t,s,a)},transform:i.createViewAwareTransform()}),d=n;exports.Assembly=r.Assembly;exports.Availability=r.Availability;exports.Board=r.Board;exports.BoardContainer=r.BoardContainer;Object.defineProperty(exports,"BoardContainerModel",{enumerable:!0,get:()=>r.BoardContainerModel});exports.CONTEXT_ASSEMBLY_DATA=r.CONTEXT_ASSEMBLY_DATA;exports.CONTEXT_ASSEMBLY_RAW_DATA=r.CONTEXT_ASSEMBLY_RAW_DATA;exports.DeviceAssembly=r.DeviceAssembly;exports.DispenseModelType=r.DispenseModelType;exports.DispenserModels=r.kosModels;exports.ExtensionType=r.ExtensionType;exports.GenericPour=r.GenericPour;exports.Holder=r.Holder;exports.HolderContainer=r.HolderContainer;exports.Ingredient=r.Ingredient;exports.IngredientContainer=r.IngredientContainer;exports.KosModelRegistry=r.KosModelRegistry;exports.Nozzle=r.Nozzle;exports.PourState=r.PourState;exports.Pump=r.Pump;exports.PumpContainer=r.PumpContainer;exports.PumpIndex=r.PumpIndex;exports.TOPIC_BOARD_LINKED=r.TOPIC_BOARD_LINKED;exports.TOPIC_BOARD_UNLINKED=r.TOPIC_BOARD_UNLINKED;exports.kosModels=r.kosModels;exports.registerDispenseModels=r.registerDispenseModels;exports.AssemblyServices=o.index;exports.AssemblyTypes=o.assembly;exports.DispenseExtensionManager=o.DispenseExtensionManager;exports.GenericPourServices=o.index$1;exports.HolderServices=o.index$2;exports.IngredientServices=o.index$3;exports.KosExtensionManager=o.KosExtensionManager;exports.NozzleServices=o.index$4;exports.PumpServices=o.index$5;exports.getFuelGaugeValue=o.getFuelGaugeValue;exports.AssemblyProvider=e.AssemblyProvider;exports.AvailabilityProvider=e.AvailabilityProvider;exports.BoardContainerProvider=e.BoardContainerProvider;exports.BoardProvider=e.BoardProvider;exports.CuiKit=e.CuiKit;exports.CuiKitWrapper=e.CuiKitWrapper;exports.DISPENSE_GROUP_BEVERAGE=e.DISPENSE_GROUP_BEVERAGE;exports.DISPENSE_GROUP_BRAND=e.DISPENSE_GROUP_BRAND;exports.DISPENSE_GROUP_FLAVOR=e.DISPENSE_GROUP_FLAVOR;exports.DeviceAssemblyProvider=e.DeviceAssemblyProvider;exports.HoldToPourIntentStrategy=e.HoldToPourIntentStrategy;exports.HoldToPourStrategy=e.HoldToPourStrategy;exports.HolderContainerProvider=e.HolderContainerProvider;exports.HolderProvider=e.HolderProvider;exports.IngredientContainerProvider=e.IngredientContainerProvider;exports.IngredientProvider=e.IngredientProvider;exports.NozzleProvider=e.NozzleProvider;exports.PourContext=e.PourContext;exports.PumpProvider=e.PumpProvider;exports.TapOrHoldIntentStrategy=e.TapOrHoldIntentStrategy;exports.TapToPourIntentStrategy=e.TapToPourIntentStrategy;exports.TapToPourStrategy=e.TapToPourStrategy;exports.initializeCuiKit=e.initializeCuiKit;exports.useAssembly=e.useAssembly;exports.useAssemblyContext=e.useAssemblyContext;exports.useAvailability=e.useAvailability;exports.useAvailabilityContext=e.useAvailabilityContext;exports.useBeverages=e.useBeverages;exports.useBoard=e.useBoard;exports.useBoardContainer=e.useBoardContainer;exports.useBoardContainerContext=e.useBoardContainerContext;exports.useBoardContext=e.useBoardContext;exports.useBrands=e.useBrands;exports.useCuiKit=e.useCuiKit;exports.useCuiKitTimers=e.useCuiKitTimers;exports.useDefaultCuiKitLifecycle=e.useDefaultCuiKitLifecycle;exports.useDeviceAssembly=e.useDeviceAssembly;exports.useDeviceAssemblyContext=e.useDeviceAssemblyContext;exports.useDispenseLifecycle=e.useDispenseLifecycle;exports.useFlavors=e.useFlavors;exports.useGenericPour=e.useGenericPour;exports.useHolder=e.useHolder;exports.useHolderContainer=e.useHolderContainer;exports.useHolderContainerContext=e.useHolderContainerContext;exports.useHolderContext=e.useHolderContext;exports.useIngredient=e.useIngredient;exports.useIngredientContainer=e.useIngredientContainer;exports.useIngredientContainerContext=e.useIngredientContainerContext;exports.useIngredientContext=e.useIngredientContext;exports.useIngredientPour=e.useIngredientPour;exports.useNozzle=e.useNozzle;exports.useNozzleContext=e.useNozzleContext;exports.useNozzlePour=e.useNozzlePour;exports.usePourTarget=e.usePourTarget;exports.usePumpContext=e.usePumpContext;exports.withAssembly=e.withAssembly;exports.withBeverage=e.withBeverage;exports.withBoard=e.withBoard;exports.withBoardContainer=e.withBoardContainer;exports.withDeviceAssembly=e.withDeviceAssembly;exports.withGenericPour=e.withGenericPour;exports.withHolder=e.withHolder;exports.withHolderContainer=e.withHolderContainer;exports.withIngredient=e.withIngredient;exports.withIngredientContainer=e.withIngredientContainer;exports.withNozzle=e.withNozzle;exports.ControlPourExtension=u;exports.EXTENSION_POINT_CONTROL_POUR=d;
2
2
  //# sourceMappingURL=index.cjs.map
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { A as y, b as A, e as I, d as E, B as x, C as S, a as T, f as D, D as N, l as b, E as B, G as h, H as _, g as O, I as f, h as w, K as z, N as H, k as K, P as R, i as G, j as M, T as L, c as U, l as V, r as k } from "./dispense-registration-manager-CB_nSTZw.js";
2
2
  import { i as F, f as W, D as Y, a as j, b as q, c as J, K as Q, d as Z, e as $, g as ee } from "./extension-utils-CkYqorcG.js";
3
- import { A as ae, a as oe, d as re, B as te, f as ie, C as ne, G as ue, F as le, J as de, D as Pe, a4 as Ce, a5 as ce, j as pe, H as me, m as ge, I as ve, N as ye, ab as Ae, P as Ie, a6 as Ee, a7 as xe, a8 as Se, i as Te, q as De, u as Ne, r as be, b as Be, z as he, t as _e, x as Oe, e as fe, c as we, E as ze, K as He, O as Ke, L as Re, R as Ge, g as Me, M as Le, Q as Ue, a9 as Ve, T as ke, V as Xe, k as Fe, h as We, X as Ye, _ as je, n as qe, l as Je, Y as Qe, a0 as Ze, o as $e, a2 as es, a3 as ss, p as as, w as os, s as rs, v as ts, y as is, S as ns, aa as us, U as ls, W as ds, Z as Ps, $ as Cs, a1 as cs } from "./pump-provider-DodZo0It.js";
3
+ import { A as ae, a as oe, d as re, B as te, f as ie, C as ne, G as ue, F as le, J as de, D as Pe, a4 as Ce, a5 as ce, j as pe, H as me, m as ge, I as ve, N as ye, ab as Ae, P as Ie, a6 as Ee, a7 as xe, a8 as Se, i as Te, q as De, u as Ne, r as be, b as Be, z as he, t as _e, x as Oe, e as fe, c as we, E as ze, K as He, O as Ke, L as Re, R as Ge, g as Me, M as Le, Q as Ue, a9 as Ve, T as ke, V as Xe, k as Fe, h as We, X as Ye, _ as je, n as qe, l as Je, Y as Qe, a0 as Ze, o as $e, a2 as es, a3 as ss, p as as, w as os, s as rs, v as ts, y as is, S as ns, aa as us, U as ls, W as ds, Z as Ps, $ as Cs, a1 as cs } from "./pump-provider-DSyiDoPF.js";
4
4
  import { createExtensionSchema as r, extensionPointId as t, defineExtensionPoint as i, createViewAwareTransform as n, validateWithSchema as u } from "@kosdev-code/kos-ui-plugin/utilities";
5
5
  import "@kosdev-code/kos-ui-sdk";
6
6
  import "react";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kosdev-code/kos-dispense-sdk",
3
- "version": "2.1.13",
3
+ "version": "2.1.15",
4
4
  "type": "module",
5
5
  "types": "./index.d.ts",
6
6
  "main": "./index.js",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "kos": {
35
35
  "build": {
36
- "gitHash": "b11908d79cb7e6923c43abbe2d9b43b1eb3e05c5"
36
+ "gitHash": "3bb0811ca81d24afe38877523bc534b5ea6fc15e"
37
37
  }
38
38
  }
39
39
  }
@@ -1,2 +1,2 @@
1
- "use strict";var et=Object.defineProperty;var tt=(e,t,s)=>t in e?et(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var Y=(e,t,s)=>(tt(e,typeof t!="symbol"?t+"":t,s),s);const b=require("@emotion/react/jsx-runtime"),st=require("@kosdev-code/kos-dispense-sdk"),u=require("@kosdev-code/kos-ui-sdk"),o=require("react"),g=require("./dispense-registration-manager-BZ5L3AWX.cjs"),he=()=>{const e=g.Assembly.type;return u.useKosModel({modelId:e,modelType:g.Assembly.type,options:{}})};function rt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=he();return b.jsx(r,{...n,children:b.jsx(e,{...t,assembly:s})})}}const pe=()=>{const e=g.Availability.type;return u.useKosModel({modelId:e,modelType:g.Availability.type,options:{}})};function nt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=pe();return b.jsx(r,{...n,children:b.jsx(e,{...t,beverage:s})})}}const fe=e=>{const t=e;return u.useKosModel({modelId:t,modelType:g.Board.type,options:{}})};function ot(e){return t=>s=>{const{model:n,status:r,KosModelLoader:i}=fe(t);return b.jsx(i,{...r,children:b.jsx(e,{...s,board:n})})}}const ve=()=>{const e=g.BoardContainer.type;return u.useKosModel({modelId:e,modelType:g.BoardContainer.type,options:{}})};function at(e){return t=>{const{model:s,status:n,KosModelLoader:r}=ve();return b.jsx(r,{...n,children:b.jsx(e,{...t,boardContainer:s})})}}const Ce=e=>{const t=e;return u.useKosModel({modelId:t,modelType:g.Nozzle.type,options:{path:e}})},Se=o.createContext(void 0),Be=({children:e,path:t})=>{const{model:s,ready:n}=Ce(t),r=o.useMemo(()=>n&&s?{model:s}:{},[n,s]);return b.jsx(Se.Provider,{value:r,children:e})},S=()=>{const e=o.useContext(Se);if(!e)throw new Error("useNozzleContext must be used within a NozzleProvider");return e},Me=({onBeverageSelected:e,onClearBeverage:t,companionType:s})=>{const{model:n}=S(),[r,i]=o.useState([]),[a,d]=o.useState(null),C=o.useMemo(()=>s?r.map(m=>u.getKosCompanionModel(m,s)):[],[r,s]),f=o.useCallback(async m=>{d(m),await(n==null?void 0:n.setSelectedPourable({beverage:m})),e==null||e(m)},[n,e]),l=o.useCallback(async()=>{d(null),await(n==null?void 0:n.setSelectedPourable({beverage:void 0})),t==null||t()},[n,t]);return o.useEffect(()=>{const m=u.kosAutoEffect(()=>{if(!n)return;const x=n.selectedBrand;if(!x){const v=n.getGroupAvailabilityItems("beverages").filter(h=>h.visible);i(v??[]);return}const k=n.getAvailabilityByParent(x.id).filter(v=>v.visible);i(k??[])});return()=>{m()}},[n]),{beverages:r,beverageCompanions:C,selectBeverage:f,selectedBeverage:a,clearBeverage:l}},Le=({onBrandSelected:e,onBrandCleared:t,companionType:s})=>{const{model:n}=S(),[r,i]=o.useState(null),[a,d]=o.useState([]),C=o.useMemo(()=>s?a.map(m=>u.getKosCompanionModel(m,s)):[],[a,s]),f=o.useCallback(async m=>{i(m),n==null||n.setSelectedBrand(m),e==null||e(m)},[n,e]),l=o.useCallback(()=>{i(null),n==null||n.setSelectedBrand(void 0),t==null||t()},[n,t]);return o.useEffect(()=>{const m=u.kosAutoEffect(()=>{n&&d(n.visibleBrands)});return()=>{m()}},[n]),{brands:a,brandCompanions:C,selectedBrand:r,selectBrand:f,clearBrand:l}};class xe{constructor(){Y(this,"_data",new Map)}get(t){return this._data.get(t)}set(t,s){this._data.set(t,s)}remove(t){this._data.delete(t)}has(t){return this._data.has(t)}}const it=u.KosLog.createLogger({name:"HoldToPourStrategy",group:"kos-hooks"}),ge={name:"HoldToPourStrategy",async initiate(e){if(!(e!=null&&e.canPour)){it.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())}},te=u.KosLog.createLogger({name:"useNozzlePour",group:"kos-hooks"}),ye=({onPour:e,onPourCancel:t,onBeforePour:s,onBeforePourRejected:n,pourContext:r,strategy:i=ge})=>{const{model:a}=S(),[d,C]=o.useState(r||new xe),f=o.useCallback(async()=>{(s?await(s==null?void 0:s(d)):!0)?(te.debug(`[${i==null?void 0:i.name}] - Pour initiated for nozzle ${a==null?void 0:a.id}.`),i==null||i.initiate(a),e==null||e()):(te.debug(`[${i==null?void 0:i.name}] - Did not pass onBeforePour gate for nozzle ${a==null?void 0:a.id}. Cancelling pour.`),n==null||n())},[e,a,i,s,t,d,n]),l=o.useCallback(()=>{var h;te.debug(`[${i==null?void 0:i.name}] - Pour initiate ended called for nozzle ${a==null?void 0:a.id}.`),(h=i==null?void 0:i.initiateEnded)==null||h.call(i,a),t==null||t()},[t,a,i]),m=o.useCallback(()=>{te.debug(`Force cancelling pour for nozzle ${a==null?void 0:a.id}.`),a==null||a.cancelPour(),t==null||t()},[t,a]),x=o.useCallback((h,c)=>{d.set(h,c)},[d]),k=o.useCallback(h=>{d.remove(h)},[d]);return{handlers:u.usePressGesture({onPressed:f,onRelease:l}).dom,cancel:m,updatePourContext:x,removeFromPourContext:k,status:a}},He=({onFlavorSelected:e,onFlavorCleared:t,companionType:s})=>{const{model:n}=S(),r=o.useMemo(()=>(n==null?void 0:n.getGroupAvailabilityItems("flavors").filter(l=>l.visible))??[],[n]),i=o.useMemo(()=>s?r.map(l=>u.getKosCompanionModel(l,s)):[],[r,s]),[a,d]=o.useState([]),C=o.useCallback(async l=>{if(d(m=>m!=null&&m.includes(l)?[...m.filter(x=>x!==l)]:[...m??[],l]),n!=null&&n.selectedPourable){const{beverage:m}=n.selectedPourable;await n.setSelectedPourable({beverage:m,additional:a??[]})}e==null||e(l,a??[])},[n,e,a]),f=o.useCallback(async()=>{if(d([]),n!=null&&n.selectedPourable){const{beverage:l}=n.selectedPourable;n.setSelectedPourable({beverage:l}),t==null||t()}},[n,t]);return{flavors:r,flavorCompanions:i,selectFlavor:C,selectedFlavors:a,clearFlavors:f}},F="brands",X="beverages",U="flavors",N=u.KosLog.createLogger({name:"use-cui-kit"}),Ne=({initialGroup:e=F,options:t={}})=>{var Z,z,ee;const[s,n]=o.useState(e),{model:r}=S(),i=o.useRef([]),a=o.useRef(),d=o.useRef(),C=o.useCallback(p=>{n(U);const w=`/kos/dispense/${r==null?void 0:r.path}/brand/selected/`;u.EventBus.publish(w,p)},[r==null?void 0:r.path]),f=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/brand/cleared/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),l=o.useCallback(p=>{var W;n(U),(W=a.current)==null||W.call(a,"selectedBeverage",p);const w=`/kos/dispense/${r==null?void 0:r.path}/beverage/selected/`;u.EventBus.publish(w,p)},[r==null?void 0:r.path]),m=o.useCallback(()=>{var w;const p=`/kos/dispense/${r==null?void 0:r.path}/beverage/cleared/`;(w=d.current)==null||w.call(d,"selectedBeverage"),u.EventBus.publish(p,{})},[r==null?void 0:r.path]),x=o.useCallback(p=>{const w=`/kos/dispense/${r==null?void 0:r.path}/flavor/selected/`;u.EventBus.publish(w,p)},[r==null?void 0:r.path]),k=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/flavor/cleared/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),v=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/pour/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),h=o.useCallback(async p=>{const w=`/kos/dispense/${r==null?void 0:r.path}/pre/pour/`;return u.EventBus.publish(w,{}),await(L==null?void 0:L(p))||!0},[r==null?void 0:r.path]),c=o.useCallback(async()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/pre/pour/rejected/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),R=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/pour/cancel/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),{brands:B,selectBrand:I,selectedBrand:q,clearBrand:H,brandCompanions:re}=Le({companionType:(Z=t.companionTypes)==null?void 0:Z.brand,onBrandSelected:C,onBrandCleared:f}),{beverages:ne,selectBeverage:K,selectedBeverage:M,clearBeverage:A,beverageCompanions:oe}=Me({companionType:(z=t.companionTypes)==null?void 0:z.beverage,onBeverageSelected:l,onClearBeverage:m}),{clearFlavors:D,flavors:P,selectFlavor:E,selectedFlavors:_,flavorCompanions:T}=He({companionType:(ee=t.companionTypes)==null?void 0:ee.flavor,onFlavorSelected:x,onFlavorCleared:k}),[L,O]=o.useState(),G=o.useCallback(p=>{O(()=>p)},[]),V=ye({onPour:v,onPourCancel:R,onBeforePour:h,onBeforePourRejected:c});a.current=V.updatePourContext,d.current=V.removeFromPourContext;const ae=o.useCallback(()=>{switch(N.debug(`Navigating back from group: ${s}`),s){case F:A(),H();break;case X:case U:n(e),A(),H();break}},[A,H,s,e]),ie=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/home/`;u.EventBus.publish(p,{}),n(e),e===F&&(A(),H()),e===X&&A()},[A,H,e]),ce=o.useCallback(()=>{if(i.current.length===0){N.debug("No timers to pause.");return}N.debug(`Pausing ${i.current.length} timers.`),i.current.forEach(p=>{N.debug(`Pausing timer with id ${p.id}.`),p.pause()})},[]),ue=o.useCallback(()=>{if(i.current.length===0){N.debug("No timers to restart.");return}N.debug(`Restarting ${i.current.length} timers.`),i.current.forEach(p=>{N.debug(`Restarting timer with id ${p.id}.`),p.restart()})},[]);return{timers:{add:o.useCallback(p=>{if(p){if(i.current.some(w=>w.id===p.id)){N.debug(`Timer with id ${p.id} already exists.`);return}i.current.push(p)}},[]),pause:ce,restart:ue},nav:{currentGroup:s,back:ae,home:ie},pour:V,updateOnBeforePour:G,selections:{[F]:q,[X]:M,[U]:_},[F]:{models:B,companions:re,clear:H,handlers:{onSelected:I}},[X]:{models:ne,companions:oe,clear:A,handlers:{onSelected:K}},[U]:{models:P,companions:T,clear:D,handlers:{onSelected:E}}}},ct=e=>{const{model:t}=S(),[s,n]=o.useState(null),{onAmbientTimer:r,onAttractTimer:i,onResetAttractTimer:a,onResumeAttractTimer:d,defaultAttractTime:C,defaultAmbientTime:f}=e,l=o.useCallback(()=>{r&&(u.KosLog.info("Ambient timer expired. Calling callback"),r==null||r())},[r]),m=o.useCallback(()=>{i&&(u.KosLog.info("Attract timer expired. Calling callback"),i==null||i())},[i]),x=o.useCallback(()=>{s&&(s.restart(),a==null||a())},[s,a]),k=o.useCallback(()=>{s&&(s.reset(),a==null||a())},[s,a]),v=o.useCallback(()=>{s&&(s.pause(),d==null||d())},[s,d]);return o.useEffect(()=>{if(t&&C){u.KosLog.info("Nozzle is available. Creating timers");const h=u.TimerManager.createTimer("attract-timer-"+t.path,C);return C&&(h==null||h.addTimeoutAction({name:"attract-timer",remainingTime:0,action:m})),f&&(h==null||h.addTimeoutAction({name:"ambient-timer",remainingTime:f,action:l})),C&&(h==null||h.start()),n(h??null),()=>{h==null||h.reset(),n(null)}}return()=>{u.KosLog.info("Nozzle is not available. No timers to clear")}},[f,C,l,m,t]),{attractTimer:s,restart:x,pause:k,resume:v}},ut=(e,t)=>{if(t)return u.EventBus.subscribe(e,t).unsubscribe},je=({onInit:e,onBrandSelected:t,onBrandCleared:s,onBeverageCleared:n,onBeverageSelected:r,onFlavorCleared:i,onFlavorSelected:a,onReturnToHome:d,onPour:C,onPourCancel:f,onBeforePourRejected:l,onAmbientTimer:m,onAttractTimer:x,onResumeAttractTimer:k,onIdleTimeout:v,onAreYouThereTimeout:h})=>{const{model:c}=S();o.useEffect(()=>{const B=[{topic:`/kos/dispense/${c==null?void 0:c.path}/brand/selected/`,callback:t},{topic:`/kos/dispense/${c==null?void 0:c.path}/brand/cleared/`,callback:s},{topic:`/kos/dispense/${c==null?void 0:c.path}/beverage/selected/`,callback:r},{topic:`/kos/dispense/${c==null?void 0:c.path}/beverage/cleared/`,callback:n},{topic:`/kos/dispense/${c==null?void 0:c.path}/flavor/selected/`,callback:a},{topic:`/kos/dispense/${c==null?void 0:c.path}/flavor/cleared/`,callback:i},{topic:`/kos/dispense/${c==null?void 0:c.path}/pour/`,callback:C},{topic:`/kos/dispense/${c==null?void 0:c.path}/pour/cancel/`,callback:f},{topic:`/kos/dispense/${c==null?void 0:c.path}/pre/pour/rejected/`,callback:l},{topic:`/kos/dispense/${c==null?void 0:c.path}/ambient/start/`,callback:m},{topic:`/kos/dispense/${c==null?void 0:c.path}/attract/start/`,callback:x},{topic:`/kos/dispense/${c==null?void 0:c.path}/attract/resume/`,callback:k},{topic:`/kos/dispense/${c==null?void 0:c.path}/idle/timeout/`,callback:v},{topic:`/kos/dispense/${c==null?void 0:c.path}/are-you-there/timeout/`,callback:h},{topic:`/kos/dispense/${c==null?void 0:c.path}/init/`,callback:e},{topic:`/kos/dispense/${c==null?void 0:c.path}/home/`,callback:d}].map(({topic:I,callback:q})=>ut(I,q));return()=>{B.forEach(I=>I==null?void 0:I())}},[c==null?void 0:c.path,m,x,n,r,s,t,i,a,C,f,k,v,h,e,d])},y=u.KosLog.createLogger({name:"useCuiKitTimers"}),be=e=>{const{model:t}=S(),[s,n]=o.useState(null),{onAreYouThereTimer:r,onIdleTimer:i,onResetIdleTimer:a,defaultAreYouThereTime:d=10,defaultIdleTime:C=20}=e,f=o.useRef(!1),l=o.useCallback(()=>{!f.current&&r&&(u.KosLog.info("Are you there timer expired. Calling callback"),f.current=!0,r==null||r())},[r]),m=o.useCallback(()=>{y.debug("handleIdleTimer called in useCuiKitTimers, onIdleTimer exists:",!!i),i?(y.debug("Idle timer expired. Calling callback"),i==null||i()):y.debug("No onIdleTimer callback provided!")},[i]),x=o.useCallback(()=>{y.debug(`TIMER RESTART called for ${e.prefix??""}timer`),s&&(s.restart(),f.current=!1,a==null||a())},[s,a,e.prefix]),k=o.useCallback(()=>{y.debug(`TIMER PAUSE/RESET called for ${e.prefix??""}timer`),s&&(s.reset(),f.current=!1,a==null||a())},[s,a,e.prefix]);return o.useEffect(()=>{if(y.debug(`useCuiKitTimers effect triggered - nozzle: ${!!t}, path: ${t==null?void 0:t.path}, callbacks: handleIdle=${!!m}, handleAreYouThere=${!!l}`),t){y.info("Nozzle is available. Creating timers");const v=u.TimerManager.createTimer(`${e.prefix??""}idle-timer-${t.path}`,C);return y.debug(`Adding idle timer action for ${e.prefix??""}idle-timer-${t.path} with callback:`,!!m),v==null||v.addTimeoutAction({name:"idle-timer",remainingTime:0,action:m}),v==null||v.addTimeoutAction({name:"are-you-there-timer",remainingTime:d,action:l}),n(v??null),()=>{v==null||v.reset(),n(null)}}return()=>{y.info("Nozzle is not available. No timers to clear")}},[d,C,l,m,t,e.prefix]),{idleTimer:s,restart:x,pause:k}},j=u.KosLog.createLogger({name:"useDefaultCuiKitLifecycle"}),dt=({kit:e,inactivity:t,pour:s,screens:n,onBeforeAreYouThereTimer:r,areYouThereRejectionPolicy:i="pause"})=>{var w,W,Ae,Ee;const[a,d]=o.useState(!1),[C,f]=o.useState(!1),{model:l}=S(),[m,x]=o.useState(!1),k=(t==null?void 0:t.idleTimeout)??15,v=(t==null?void 0:t.areYouThereTimeoutOffset)??10,h=(s==null?void 0:s.idleTimeout)??(t==null?void 0:t.idleTimeout)??10,c=(s==null?void 0:s.areYouThereTimeoutOffset)??(t==null?void 0:t.areYouThereTimeoutOffset)??5,R=n==null?void 0:n.ambientTimeoutOffset,B=n==null?void 0:n.attractTimeout,I=o.useCallback(()=>{if(j.info("handleIdleTimeout called - navigating home and publishing event"),D(!1),e==null||e.nav.home(),l){const $=`/kos/dispense/${l.path}/idle/timeout/`;u.EventBus.publish($,{})}},[(w=e==null?void 0:e.nav)==null?void 0:w.home,l]),q=o.useCallback(()=>{j.info("handleResetIdleTimer called - resetting idle timer"),D(!1)},[]),H=o.useCallback(()=>{if(R&&(d(!0),f(!1),l)){const $=`/kos/dispense/${l.path}/ambient/start/`;u.EventBus.publish($,{})}},[R,l]),re=o.useCallback(()=>{if(B&&(f(!0),d(!1),l)){const $=`/kos/dispense/${l.path}/attract/start/`;u.EventBus.publish($,{})}},[B,l]),ne=o.useCallback(()=>{if(B&&(f(!1),d(!1),e==null||e.nav.home(),l)){const $=`/kos/dispense/${l.path}/attract/resume/`;u.EventBus.publish($,{})}},[e==null?void 0:e.nav,B,l]),{pause:K,restart:M,attractTimer:A}=ct({defaultAmbientTime:R,defaultAttractTime:B,onAmbientTimer:H,onAttractTimer:re,onResumeAttractTimer:ne});(W=e==null?void 0:e.timers)==null||W.add(A);const[oe,D]=o.useState(!1);j.info("Creating idle timer with timeout:",k,"seconds and callback:",!!I);const{pause:P,restart:E,idleTimer:_}=be({defaultAreYouThereTime:v,defaultIdleTime:k,onIdleTimer:I,onResetIdleTimer:q});j.info(`Creating pour timer with timeout: ${h} seconds and callback: ${!!I}`);const{pause:T,restart:L,idleTimer:O}=be({defaultAreYouThereTime:c,defaultIdleTime:h,onIdleTimer:I,prefix:"pour-"}),G=o.useCallback(async()=>{let $=!0;if(r)try{$=await r()}catch(de){j.error(`onBeforeAreYouThereTimer callback failed: ${de}`),$=!1}if($){if(l){const de=`/kos/dispense/${l.path}/are-you-there/timeout/`;u.EventBus.publish(de,{})}D(!0),m?T():P()}else switch(i){case"pause":m?T():P();break;case"restart":m?L():E();break}},[r,l,i,m]),V=o.useCallback(()=>{D(!1),K(),m?(L(),P()):(E(),T())},[m,P,T,E,L]);o.useEffect(()=>{_&&_.addTimeoutAction({name:"are-you-there-timer",remainingTime:v,action:G})},[_,v,G]),o.useEffect(()=>{O&&O.addTimeoutAction({name:"pour-are-you-there-timer",remainingTime:c,action:G})},[O,c,G]),(Ae=e==null?void 0:e.timers)==null||Ae.add(_),(Ee=e==null?void 0:e.timers)==null||Ee.add(O);const ae=o.useCallback(()=>{x(!1),T(),P(),K()},[P,T]),ie=o.useCallback(()=>{x(!0),j.info("restarting pour timer"),L(),K(),P()},[P,L]),ce=o.useCallback(()=>{x(!1),j.info("restarting pour timer on before pour rejected"),T(),E()},[]),ue=o.useCallback(()=>{K(),f(!1),d(!1),E()},[K,E]),Ie=o.useCallback(()=>{f(!1),d(!1),x(!1),T(),M()},[M,T]),Z=o.useCallback(()=>{f(!1),d(!1),x(!1),K(),E()},[K,E]),z=o.useCallback(()=>{f(!1),d(!1),x(!1),M(),P(),T()},[M,P,T]),ee=o.useCallback(()=>{f(!1),d(!1),M(),P()},[M,P]);je({onBrandSelected:ue,onBrandCleared:Ie,onBeverageSelected:Z,onBeverageCleared:z,onPour:ae,onPourCancel:ie,onBeforePourRejected:ce,onInit:ee});const p=m?c:v;return o.useEffect(()=>{if(l&&A){const $=`/kos/dispense/${l==null?void 0:l.path}/init/`;u.EventBus.publish($,{})}},[l,A]),{showAreYouThere:oe,clearAreYouThere:V,pauseIdleTimer:P,restartIdleTimer:E,areYouThereCountdown:p,showAmbientScreen:a,showAttractScreen:C,pauseScreenTimer:K,restartScreenTimer:M}},ke=()=>{const e=g.DeviceAssembly.type;return u.useKosModel({modelId:e,modelType:g.DeviceAssembly.type,options:{}})};function lt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=ke();return b.jsx(r,{...n,children:b.jsx(e,{...t,deviceAssembly:s})})}}const Pe=e=>{const t=e;return u.useKosModel({modelId:t,modelType:g.Holder.type,options:{}})};function mt(e,t){return s=>{const{model:n,status:r,KosModelLoader:i}=Pe(e);return b.jsx(i,{...r,children:b.jsx(t,{...s,holder:n})})}}const we=()=>{const e=g.HolderContainer.type;return u.useKosModel({modelId:e,modelType:g.HolderContainer.type,options:{}})};function bt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=we();return b.jsx(r,{...n,children:b.jsx(e,{...t,holderContainer:s})})}}const Te=()=>{const e=g.Ingredient.type;return u.useKosModel({modelId:e,modelType:g.Ingredient.type,options:{}})},le=u.KosLog.createLogger({name:"HoldToPourIntentStrategy",group:"kos-hooks"}),Re={name:"HoldToPourIntentStrategy",async initiate(e,t){if(!(e!=null&&e.canPour)){le.debug(`${e==null?void 0:e.id} cannot pour. Returning early.`);return}t?(le.debug(`performing intent: ${t}`),await(e==null?void 0:e.performIntent(t))):le.debug("no intent provided. Returning early.")},async initiateEnded(e){await(e==null?void 0:e.cancelPour())}},me=u.KosLog.createLogger({name:"useNozzlePour",group:"kos-hooks"}),ht=({onPour:e,onPourCancel:t,intentContainer:s,strategy:n=Re})=>{const r=o.useCallback(()=>{me.debug(`[${n==null?void 0:n.name}] - Pour initiated for model ${s==null?void 0:s.id}.`),n==null||n.initiate(s),e==null||e()},[e,s,n]),i=o.useCallback(()=>{var C;me.debug(`[${n==null?void 0:n.name}] - Pour initiate ended called for nozzle ${s==null?void 0:s.id}.`),(C=n==null?void 0:n.initiateEnded)==null||C.call(n,s),t==null||t()},[t,s,n]),a=o.useCallback(()=>{me.debug(`Force cancelling pour for nozzle ${s==null?void 0:s.id}.`),s==null||s.cancelPour(),t==null||t()},[t,s]);return{handlers:u.usePressGesture({onPressed:r,onRelease:i}).dom,cancel:a,status:s}};function pt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=Te();return b.jsx(r,{...n,children:b.jsx(e,{...t,ingredient:s})})}}const $e=()=>{const e=g.IngredientContainer.type;return u.useKosModel({modelId:e,modelType:g.IngredientContainer.type,options:{}})};function ft(e){return t=>{const{model:s,status:n,KosModelLoader:r}=$e();return b.jsx(r,{...n,children:b.jsx(e,{...t,ingredientContainer:s})})}}function vt(e,t){return s=>{const{model:n,status:r,KosModelLoader:i}=Ce(e);return b.jsx(i,{...r,children:b.jsx(t,{...s,nozzle:n})})}}const J=u.KosLog.createLogger({name:"usePour",group:"kos-hooks"}),Ct=({onBeforePour:e,onPour:t,onPourCancel:s,onPourAbort:n,pourTarget:r,pourContext:i,strategy:a=ge})=>{const[d,C]=o.useState(i||new xe),f=o.useCallback(async()=>{J.debug(`[${a==null?void 0:a.name}] - calling before pour for pour target ${r==null?void 0:r.id}.`),(e?await(e==null?void 0:e(d)):!0)?(J.debug(`[${a==null?void 0:a.name}] - Pour initiated for pour target ${r==null?void 0:r.id}.`),await(a==null?void 0:a.initiate(r)),t==null||t(),r!=null&&r.isPouring||n==null||n()):(J.debug(`[${a==null?void 0:a.name}] - Pour cancelled for pour target ${r==null?void 0:r.id}.`),s==null||s())},[t,e,n,r,a,d]),l=o.useCallback(async()=>{var c;J.debug(`[${a==null?void 0:a.name}] - Pour initiate ended called for pour target ${r==null?void 0:r.id}.`),await((c=a==null?void 0:a.initiateEnded)==null?void 0:c.call(a,r))||s==null||s()},[s,r,a]),m=o.useCallback(async()=>{J.debug(`Force cancelling pour for pour target ${r==null?void 0:r.id}.`),await(r==null?void 0:r.cancelPour()),s==null||s()},[s,r]),x=o.useCallback((h,c)=>{d.set(h,c)},[d]),k=o.useCallback(h=>{d.remove(h)},[d]);return{handlers:u.usePressGesture({onPressed:f,onRelease:l}).dom,cancel:m,updatePourContext:x,removeFromPourContext:k,status:r}},Q=u.KosLog.createLogger({name:"TapOrHoldIntentStrategy",group:"kos-hooks"});class xt{constructor(t){Y(this,"intent");Y(this,"name","TapOrHoldIntentStrategy");Y(this,"isHold",!1);Y(this,"disposer",null);this.intent=t}async initiate(t,s){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}s?(Q.debug(`performing intent: ${s}`),await(t==null?void 0:t.performIntent(s))):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 se=u.KosLog.createLogger({name:"TapToPourIntentStrategy",group:"kos-hooks"}),gt={name:"TapToPourIntentStrategy",async initiate(e,t){if(e!=null&&e.isPouring){se.debug(`Nozzle ${e==null?void 0:e.id} is already pouring. cancelling pour`),await e.cancelPour();return}if(!(e!=null&&e.canPour)){se.debug(`Nozzle ${e==null?void 0:e.id} cannot pour. Returning early.`);return}t?(se.debug(`performing intent: ${t}`),await(e==null?void 0:e.performIntent(t))):se.debug("no intent provided. Returning early.")},async initiateEnded(e){return!0}},Ke=u.KosLog.createLogger({name:"HoldToPourStrategy",group:"kos-hooks"}),kt={name:"TapToPourStrategy",async initiate(e){if(e!=null&&e.isPouring){Ke.debug(`Nozzle ${e==null?void 0:e.id} is already pouring. cancelling pour`),await e.cancelPour();return}if(!(e!=null&&e.canPour)){Ke.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}},De=(e,t,s)=>{const n=e;return u.useKosModel({modelId:n,modelType:st.GenericPour.type,options:{servicePathFactory:t,selectedId:s}})};function Pt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=De(t.id,t.servicePathFactory,t.itemId);return b.jsx(r,{...n,children:b.jsx(e,{...t,genericPour:s})})}}const _e=o.createContext(void 0),wt=({children:e})=>{const{model:t,ready:s}=he(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(_e.Provider,{value:n,children:e})},Tt=()=>{const e=o.useContext(_e);if(!e)throw new Error("useAssemblyContext must be used within a AssemblyProvider");return e},Oe=o.createContext(void 0),$t=({children:e})=>{const{model:t,ready:s}=pe(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Oe.Provider,{value:n,children:e})},It=()=>{const e=o.useContext(Oe);if(!e)throw new Error("useAvailabilityContext must be used within a AvailabilityProvider");return e},Ge=o.createContext(void 0),At=({children:e,id:t})=>{const{model:s,ready:n}=fe(t),r=o.useMemo(()=>n&&s?{model:s}:{},[n,s]);return b.jsx(Ge.Provider,{value:r,children:e})},Et=()=>{const e=o.useContext(Ge);if(!e)throw new Error("useBoardContext must be used within a BoardProvider");return e},Ye=o.createContext(void 0),Kt=({children:e})=>{const{model:t,ready:s}=ve(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Ye.Provider,{value:n,children:e})},St=()=>{const e=o.useContext(Ye);if(!e)throw new Error("useBoardContainerContext must be used within a BoardContainerProvider");return e},Fe=o.createContext(void 0),Ue=({children:e})=>{const{model:t,ready:s}=ke(),n=o.useMemo(()=>{if(s&&t){const i=t.nozzlePaths;return{model:t,nozzlePaths:i}}return{}},[s,t]),r=s&&t?e:null;return b.jsx(Fe.Provider,{value:n,children:r})},qe=()=>{const e=o.useContext(Fe);if(!e)throw new Error("useDeviceAssemblyContext must be used within a DeviceAssemblyProvider");return e};function Bt(){const e=o.createContext(null);return[()=>{const s=o.useContext(e);if(s===void 0)throw new Error("useDispenseKitContext must be used within a Provider");return s},e.Provider]}function Ve({children:e,provider:t,props:s,nozzleProps:n}){const r=Ne(s);return b.jsx(t,{value:r,children:e(n||{})})}function Mt({children:e,provider:t,props:s}){const{nozzlePaths:n}=qe(),r=(n==null?void 0:n.length)||0;return(n==null?void 0:n.map((a,d)=>b.jsx(Be,{path:a,children:b.jsx(Ve,{provider:t,props:s,nozzleProps:{nozzleIndex:d,nozzlePath:a,totalNozzles:r,isFirstNozzle:d===0,isLastNozzle:d===r-1},children:e})},a)))||[]}function We({provider:e,props:t}){return({children:s})=>e?b.jsx(Ue,{children:b.jsx(Mt,{provider:e,props:t,children:s})}):null}function Lt(e){const[t,s]=Bt();return[t,We({provider:s,props:e})]}const Je=o.createContext(void 0),yt=({children:e,id:t})=>{const{model:s,ready:n}=Pe(t||""),r=o.useMemo(()=>n&&s?{model:s}:{},[n,s]);return b.jsx(Je.Provider,{value:r,children:e})},Ht=()=>{const e=o.useContext(Je);if(!e)throw new Error("useHolderContext must be used within a HolderProvider");return e},Qe=o.createContext(void 0),Nt=({children:e})=>{const{model:t,ready:s}=we(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Qe.Provider,{value:n,children:e})},jt=()=>{const e=o.useContext(Qe);if(!e)throw new Error("useHolderContainerContext must be used within a HolderContainerProvider");return e},Xe=o.createContext(void 0),Rt=({children:e})=>{const{model:t,ready:s}=Te(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Xe.Provider,{value:n,children:e})},Dt=()=>{const e=o.useContext(Xe);if(!e)throw new Error("useIngredientContext must be used within a IngredientProvider");return e},Ze=o.createContext(void 0),_t=({children:e})=>{const{model:t,ready:s}=$e(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Ze.Provider,{value:n,children:e})},Ot=()=>{const e=o.useContext(Ze);if(!e)throw new Error("useIngredientContainerContext must be used within a IngredientContainerProvider");return e},Gt=()=>{const e=g.Pump.type;return u.useKosModel({modelId:e,modelType:g.Pump.type,options:{}})},ze=o.createContext(void 0),Yt=({children:e})=>{const{model:t,ready:s}=Gt(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(ze.Provider,{value:n,children:e})},Ft=()=>{const e=o.useContext(ze);if(!e)throw new Error("usePumpContext must be used within a PumpProvider");return e};exports.AssemblyProvider=wt;exports.AvailabilityProvider=$t;exports.BoardContainerProvider=Kt;exports.BoardProvider=At;exports.CuiKit=We;exports.CuiKitWrapper=Ve;exports.DISPENSE_GROUP_BEVERAGE=X;exports.DISPENSE_GROUP_BRAND=F;exports.DISPENSE_GROUP_FLAVOR=U;exports.DeviceAssemblyProvider=Ue;exports.HoldToPourIntentStrategy=Re;exports.HoldToPourStrategy=ge;exports.HolderContainerProvider=Nt;exports.HolderProvider=yt;exports.IngredientContainerProvider=_t;exports.IngredientProvider=Rt;exports.NozzleProvider=Be;exports.PourContext=xe;exports.PumpProvider=Yt;exports.TapOrHoldIntentStrategy=xt;exports.TapToPourIntentStrategy=gt;exports.TapToPourStrategy=kt;exports.initializeCuiKit=Lt;exports.useAssembly=he;exports.useAssemblyContext=Tt;exports.useAvailability=pe;exports.useAvailabilityContext=It;exports.useBeverages=Me;exports.useBoard=fe;exports.useBoardContainer=ve;exports.useBoardContainerContext=St;exports.useBoardContext=Et;exports.useBrands=Le;exports.useCuiKit=Ne;exports.useCuiKitTimers=be;exports.useDefaultCuiKitLifecycle=dt;exports.useDeviceAssembly=ke;exports.useDeviceAssemblyContext=qe;exports.useDispenseLifecycle=je;exports.useFlavors=He;exports.useGenericPour=De;exports.useHolder=Pe;exports.useHolderContainer=we;exports.useHolderContainerContext=jt;exports.useHolderContext=Ht;exports.useIngredient=Te;exports.useIngredientContainer=$e;exports.useIngredientContainerContext=Ot;exports.useIngredientContext=Dt;exports.useIngredientPour=ht;exports.useNozzle=Ce;exports.useNozzleContext=S;exports.useNozzlePour=ye;exports.usePourTarget=Ct;exports.usePumpContext=Ft;exports.withAssembly=rt;exports.withBeverage=nt;exports.withBoard=ot;exports.withBoardContainer=at;exports.withDeviceAssembly=lt;exports.withGenericPour=Pt;exports.withHolder=mt;exports.withHolderContainer=bt;exports.withIngredient=pt;exports.withIngredientContainer=ft;exports.withNozzle=vt;
2
- //# sourceMappingURL=pump-provider-B0n-z7GU.cjs.map
1
+ "use strict";var et=Object.defineProperty;var tt=(e,t,s)=>t in e?et(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var Y=(e,t,s)=>(tt(e,typeof t!="symbol"?t+"":t,s),s);const b=require("@emotion/react/jsx-runtime"),st=require("@kosdev-code/kos-dispense-sdk"),u=require("@kosdev-code/kos-ui-sdk"),o=require("react"),g=require("./dispense-registration-manager-BZ5L3AWX.cjs"),he=()=>{const e=g.Assembly.type;return u.useKosModel({modelId:e,modelType:g.Assembly.type,options:{}})};function rt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=he();return b.jsx(r,{...n,children:b.jsx(e,{...t,assembly:s})})}}const pe=()=>{const e=g.Availability.type;return u.useKosModel({modelId:e,modelType:g.Availability.type,options:{}})};function nt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=pe();return b.jsx(r,{...n,children:b.jsx(e,{...t,beverage:s})})}}const fe=e=>{const t=e;return u.useKosModel({modelId:t,modelType:g.Board.type,options:{}})};function ot(e){return t=>s=>{const{model:n,status:r,KosModelLoader:i}=fe(t);return b.jsx(i,{...r,children:b.jsx(e,{...s,board:n})})}}const ve=()=>{const e=g.BoardContainer.type;return u.useKosModel({modelId:e,modelType:g.BoardContainer.type,options:{}})};function at(e){return t=>{const{model:s,status:n,KosModelLoader:r}=ve();return b.jsx(r,{...n,children:b.jsx(e,{...t,boardContainer:s})})}}const Ce=e=>{const t=e;return u.useKosModel({modelId:t,modelType:g.Nozzle.type,options:{path:e}})},Se=o.createContext(void 0),Be=({children:e,path:t})=>{const{model:s,ready:n}=Ce(t),r=o.useMemo(()=>n&&s?{model:s}:{},[n,s]);return b.jsx(Se.Provider,{value:r,children:e})},S=()=>{const e=o.useContext(Se);if(!e)throw new Error("useNozzleContext must be used within a NozzleProvider");return e},Me=({onBeverageSelected:e,onClearBeverage:t,companionType:s})=>{const{model:n}=S(),[r,i]=o.useState([]),[a,d]=o.useState(null),C=o.useMemo(()=>s?r.map(m=>u.getKosCompanionModel(m,s)):[],[r,s]),f=o.useCallback(async m=>{d(m),await(n==null?void 0:n.setSelectedPourable({beverage:m})),e==null||e(m)},[n,e]),l=o.useCallback(async()=>{d(null),await(n==null?void 0:n.setSelectedPourable({beverage:void 0})),t==null||t()},[n,t]);return o.useEffect(()=>{const m=u.kosAutoEffect(()=>{if(!n)return;const x=n.selectedBrand;if(!x){const v=n.getGroupAvailabilityItems("beverages").filter(h=>h.visible);i(v??[]);return}const k=n.getAvailabilityByParent(x.id).filter(v=>v.visible);i(k??[])});return()=>{m()}},[n]),{beverages:r,beverageCompanions:C,selectBeverage:f,selectedBeverage:a,clearBeverage:l}},Le=({onBrandSelected:e,onBrandCleared:t,companionType:s})=>{const{model:n}=S(),[r,i]=o.useState(null),[a,d]=o.useState([]),C=o.useMemo(()=>s?a.map(m=>u.getKosCompanionModel(m,s)):[],[a,s]),f=o.useCallback(async m=>{i(m),n==null||n.setSelectedBrand(m),e==null||e(m)},[n,e]),l=o.useCallback(()=>{i(null),n==null||n.setSelectedBrand(void 0),t==null||t()},[n,t]);return o.useEffect(()=>{const m=u.kosAutoEffect(()=>{n&&d(n.visibleBrands)});return()=>{m()}},[n]),{brands:a,brandCompanions:C,selectedBrand:r,selectBrand:f,clearBrand:l}};class xe{constructor(){Y(this,"_data",new Map)}get(t){return this._data.get(t)}set(t,s){this._data.set(t,s)}remove(t){this._data.delete(t)}has(t){return this._data.has(t)}}const it=u.KosLog.createLogger({name:"HoldToPourStrategy",group:"kos-hooks"}),ge={name:"HoldToPourStrategy",async initiate(e){if(!(e!=null&&e.canPour)){it.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())}},te=u.KosLog.createLogger({name:"useNozzlePour",group:"kos-hooks"}),ye=({onPour:e,onPourCancel:t,onBeforePour:s,onBeforePourRejected:n,pourContext:r,strategy:i=ge})=>{const{model:a}=S(),[d,C]=o.useState(r||new xe),f=o.useCallback(async()=>{(s?await(s==null?void 0:s(d)):!0)?(te.debug(`[${i==null?void 0:i.name}] - Pour initiated for nozzle ${a==null?void 0:a.id}.`),i==null||i.initiate(a),e==null||e()):(te.debug(`[${i==null?void 0:i.name}] - Did not pass onBeforePour gate for nozzle ${a==null?void 0:a.id}. Cancelling pour.`),n==null||n())},[e,a,i,s,t,d,n]),l=o.useCallback(()=>{var h;te.debug(`[${i==null?void 0:i.name}] - Pour initiate ended called for nozzle ${a==null?void 0:a.id}.`),(h=i==null?void 0:i.initiateEnded)==null||h.call(i,a),t==null||t()},[t,a,i]),m=o.useCallback(()=>{te.debug(`Force cancelling pour for nozzle ${a==null?void 0:a.id}.`),a==null||a.cancelPour(),t==null||t()},[t,a]),x=o.useCallback((h,c)=>{d.set(h,c)},[d]),k=o.useCallback(h=>{d.remove(h)},[d]);return{handlers:u.usePressGesture({onPressed:f,onRelease:l}).dom,cancel:m,updatePourContext:x,removeFromPourContext:k,status:a}},He=({onFlavorSelected:e,onFlavorCleared:t,companionType:s})=>{const{model:n}=S(),r=o.useMemo(()=>(n==null?void 0:n.getGroupAvailabilityItems("flavors").filter(l=>l.visible))??[],[n]),i=o.useMemo(()=>s?r.map(l=>u.getKosCompanionModel(l,s)):[],[r,s]),[a,d]=o.useState([]),C=o.useCallback(async l=>{if(d(m=>m!=null&&m.includes(l)?[...m.filter(x=>x!==l)]:[...m??[],l]),n!=null&&n.selectedPourable){const{beverage:m}=n.selectedPourable;await n.setSelectedPourable({beverage:m,additional:a??[]})}e==null||e(l,a??[])},[n,e,a]),f=o.useCallback(async()=>{if(d([]),n!=null&&n.selectedPourable){const{beverage:l}=n.selectedPourable;n.setSelectedPourable({beverage:l}),t==null||t()}},[n,t]);return{flavors:r,flavorCompanions:i,selectFlavor:C,selectedFlavors:a,clearFlavors:f}},F="brands",X="beverages",U="flavors",N=u.KosLog.createLogger({name:"use-cui-kit"}),Ne=({initialGroup:e=F,options:t={}})=>{var Z,z,ee;const[s,n]=o.useState(e),{model:r}=S(),i=o.useRef([]),a=o.useRef(),d=o.useRef(),C=o.useCallback(p=>{n(U);const w=`/kos/dispense/${r==null?void 0:r.path}/brand/selected/`;u.EventBus.publish(w,p)},[r==null?void 0:r.path]),f=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/brand/cleared/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),l=o.useCallback(p=>{var W;n(U),(W=a.current)==null||W.call(a,"selectedBeverage",p);const w=`/kos/dispense/${r==null?void 0:r.path}/beverage/selected/`;u.EventBus.publish(w,p)},[r==null?void 0:r.path]),m=o.useCallback(()=>{var w;const p=`/kos/dispense/${r==null?void 0:r.path}/beverage/cleared/`;(w=d.current)==null||w.call(d,"selectedBeverage"),u.EventBus.publish(p,{})},[r==null?void 0:r.path]),x=o.useCallback(p=>{const w=`/kos/dispense/${r==null?void 0:r.path}/flavor/selected/`;u.EventBus.publish(w,p)},[r==null?void 0:r.path]),k=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/flavor/cleared/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),v=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/pour/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),h=o.useCallback(async p=>{const w=`/kos/dispense/${r==null?void 0:r.path}/pre/pour/`;return u.EventBus.publish(w,{}),await(L==null?void 0:L(p))||!0},[r==null?void 0:r.path]),c=o.useCallback(async()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/pre/pour/rejected/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),R=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/pour/cancel/`;u.EventBus.publish(p,{})},[r==null?void 0:r.path]),{brands:B,selectBrand:I,selectedBrand:q,clearBrand:H,brandCompanions:re}=Le({companionType:(Z=t.companionTypes)==null?void 0:Z.brand,onBrandSelected:C,onBrandCleared:f}),{beverages:ne,selectBeverage:K,selectedBeverage:M,clearBeverage:A,beverageCompanions:oe}=Me({companionType:(z=t.companionTypes)==null?void 0:z.beverage,onBeverageSelected:l,onClearBeverage:m}),{clearFlavors:D,flavors:P,selectFlavor:E,selectedFlavors:_,flavorCompanions:T}=He({companionType:(ee=t.companionTypes)==null?void 0:ee.flavor,onFlavorSelected:x,onFlavorCleared:k}),[L,O]=o.useState(),G=o.useCallback(p=>{O(()=>p)},[]),V=ye({onPour:v,onPourCancel:R,onBeforePour:h,onBeforePourRejected:c});a.current=V.updatePourContext,d.current=V.removeFromPourContext;const ae=o.useCallback(()=>{switch(N.debug(`Navigating back from group: ${s}`),s){case F:A(),H();break;case X:case U:n(e),A(),H();break}},[A,H,s,e]),ie=o.useCallback(()=>{const p=`/kos/dispense/${r==null?void 0:r.path}/home/`;u.EventBus.publish(p,{}),n(e),e===F&&(A(),H()),e===X&&A()},[A,H,e]),ce=o.useCallback(()=>{if(i.current.length===0){N.debug("No timers to pause.");return}N.debug(`Pausing ${i.current.length} timers.`),i.current.forEach(p=>{N.debug(`Pausing timer with id ${p.id}.`),p.pause()})},[]),ue=o.useCallback(()=>{if(i.current.length===0){N.debug("No timers to restart.");return}N.debug(`Restarting ${i.current.length} timers.`),i.current.forEach(p=>{N.debug(`Restarting timer with id ${p.id}.`),p.restart()})},[]);return{timers:{add:o.useCallback(p=>{if(p){if(i.current.some(w=>w.id===p.id)){N.debug(`Timer with id ${p.id} already exists.`);return}i.current.push(p)}},[]),pause:ce,restart:ue},nav:{currentGroup:s,back:ae,home:ie},pour:V,updateOnBeforePour:G,selections:{[F]:q,[X]:M,[U]:_},[F]:{models:B,companions:re,clear:H,handlers:{onSelected:I}},[X]:{models:ne,companions:oe,clear:A,handlers:{onSelected:K}},[U]:{models:P,companions:T,clear:D,handlers:{onSelected:E}}}},ct=e=>{const{model:t}=S(),[s,n]=o.useState(null),{onAmbientTimer:r,onAttractTimer:i,onResetAttractTimer:a,onResumeAttractTimer:d,defaultAttractTime:C,defaultAmbientTime:f}=e,l=o.useCallback(()=>{r&&(u.KosLog.info("Ambient timer expired. Calling callback"),r==null||r())},[r]),m=o.useCallback(()=>{i&&(u.KosLog.info("Attract timer expired. Calling callback"),i==null||i())},[i]),x=o.useCallback(()=>{s&&(s.restart(),a==null||a())},[s,a]),k=o.useCallback(()=>{s&&(s.reset(),a==null||a())},[s,a]),v=o.useCallback(()=>{s&&(s.pause(),d==null||d())},[s,d]);return o.useEffect(()=>{if(t&&C){u.KosLog.info("Nozzle is available. Creating timers");const h=u.TimerManager.createTimer("attract-timer-"+t.path,C);return C&&(h==null||h.addTimeoutAction({name:"attract-timer",remainingTime:0,action:m})),f&&(h==null||h.addTimeoutAction({name:"ambient-timer",remainingTime:f,action:l})),C&&(h==null||h.start()),n(h??null),()=>{h==null||h.reset(),n(null)}}return()=>{u.KosLog.info("Nozzle is not available. No timers to clear")}},[f,C,l,m,t]),{attractTimer:s,restart:x,pause:k,resume:v}},ut=(e,t)=>{if(t)return u.EventBus.subscribe(e,t).unsubscribe},je=({onInit:e,onBrandSelected:t,onBrandCleared:s,onBeverageCleared:n,onBeverageSelected:r,onFlavorCleared:i,onFlavorSelected:a,onReturnToHome:d,onPour:C,onPourCancel:f,onBeforePourRejected:l,onAmbientTimer:m,onAttractTimer:x,onResumeAttractTimer:k,onIdleTimeout:v,onAreYouThereTimeout:h})=>{const{model:c}=S();o.useEffect(()=>{const B=[{topic:`/kos/dispense/${c==null?void 0:c.path}/brand/selected/`,callback:t},{topic:`/kos/dispense/${c==null?void 0:c.path}/brand/cleared/`,callback:s},{topic:`/kos/dispense/${c==null?void 0:c.path}/beverage/selected/`,callback:r},{topic:`/kos/dispense/${c==null?void 0:c.path}/beverage/cleared/`,callback:n},{topic:`/kos/dispense/${c==null?void 0:c.path}/flavor/selected/`,callback:a},{topic:`/kos/dispense/${c==null?void 0:c.path}/flavor/cleared/`,callback:i},{topic:`/kos/dispense/${c==null?void 0:c.path}/pour/`,callback:C},{topic:`/kos/dispense/${c==null?void 0:c.path}/pour/cancel/`,callback:f},{topic:`/kos/dispense/${c==null?void 0:c.path}/pre/pour/rejected/`,callback:l},{topic:`/kos/dispense/${c==null?void 0:c.path}/ambient/start/`,callback:m},{topic:`/kos/dispense/${c==null?void 0:c.path}/attract/start/`,callback:x},{topic:`/kos/dispense/${c==null?void 0:c.path}/attract/resume/`,callback:k},{topic:`/kos/dispense/${c==null?void 0:c.path}/idle/timeout/`,callback:v},{topic:`/kos/dispense/${c==null?void 0:c.path}/are-you-there/timeout/`,callback:h},{topic:`/kos/dispense/${c==null?void 0:c.path}/init/`,callback:e},{topic:`/kos/dispense/${c==null?void 0:c.path}/home/`,callback:d}].map(({topic:I,callback:q})=>ut(I,q));return()=>{B.forEach(I=>I==null?void 0:I())}},[c==null?void 0:c.path,m,x,n,r,s,t,i,a,C,f,k,v,h,e,d])},y=u.KosLog.createLogger({name:"useCuiKitTimers"}),be=e=>{const{model:t}=S(),[s,n]=o.useState(null),{onAreYouThereTimer:r,onIdleTimer:i,onResetIdleTimer:a,defaultAreYouThereTime:d=10,defaultIdleTime:C=20}=e,f=o.useRef(!1),l=o.useCallback(()=>{!f.current&&r&&(u.KosLog.info("Are you there timer expired. Calling callback"),f.current=!0,r==null||r())},[r]),m=o.useCallback(()=>{y.debug("handleIdleTimer called in useCuiKitTimers, onIdleTimer exists:",!!i),i?(y.debug("Idle timer expired. Calling callback"),i==null||i()):y.debug("No onIdleTimer callback provided!")},[i]),x=o.useCallback(()=>{y.debug(`TIMER RESTART called for ${e.prefix??""}timer`),s&&(s.restart(),f.current=!1,a==null||a())},[s,a,e.prefix]),k=o.useCallback(()=>{y.debug(`TIMER PAUSE/RESET called for ${e.prefix??""}timer`),s&&(s.reset(),f.current=!1,a==null||a())},[s,a,e.prefix]);return o.useEffect(()=>{if(y.debug(`useCuiKitTimers effect triggered - nozzle: ${!!t}, path: ${t==null?void 0:t.path}, callbacks: handleIdle=${!!m}, handleAreYouThere=${!!l}`),t){y.info("Nozzle is available. Creating timers");const v=u.TimerManager.createTimer(`${e.prefix??""}idle-timer-${t.path}`,C);return y.debug(`Adding idle timer action for ${e.prefix??""}idle-timer-${t.path} with callback:`,!!m),v==null||v.addTimeoutAction({name:"idle-timer",remainingTime:0,action:m}),v==null||v.addTimeoutAction({name:"are-you-there-timer",remainingTime:d,action:l}),n(v??null),()=>{v==null||v.reset(),n(null)}}return()=>{y.info("Nozzle is not available. No timers to clear")}},[d,C,l,m,t,e.prefix]),{idleTimer:s,restart:x,pause:k}},j=u.KosLog.createLogger({name:"useDefaultCuiKitLifecycle"}),dt=({kit:e,inactivity:t,pour:s,screens:n,onBeforeAreYouThereTimer:r,areYouThereRejectionPolicy:i="pause"})=>{var w,W,Ae,Ee;const[a,d]=o.useState(!1),[C,f]=o.useState(!1),{model:l}=S(),[m,x]=o.useState(!1),k=(t==null?void 0:t.idleTimeout)??15,v=(t==null?void 0:t.areYouThereTimeoutOffset)??10,h=(s==null?void 0:s.idleTimeout)??(t==null?void 0:t.idleTimeout)??10,c=(s==null?void 0:s.areYouThereTimeoutOffset)??(t==null?void 0:t.areYouThereTimeoutOffset)??5,R=n==null?void 0:n.ambientTimeoutOffset,B=n==null?void 0:n.attractTimeout,I=o.useCallback(()=>{if(j.info("handleIdleTimeout called - navigating home and publishing event"),D(!1),e==null||e.nav.home(),l){const $=`/kos/dispense/${l.path}/idle/timeout/`;u.EventBus.publish($,{})}},[(w=e==null?void 0:e.nav)==null?void 0:w.home,l]),q=o.useCallback(()=>{j.info("handleResetIdleTimer called - resetting idle timer"),D(!1)},[]),H=o.useCallback(()=>{if(R&&(d(!0),f(!1),l)){const $=`/kos/dispense/${l.path}/ambient/start/`;u.EventBus.publish($,{})}},[R,l]),re=o.useCallback(()=>{if(B&&(f(!0),d(!1),l)){const $=`/kos/dispense/${l.path}/attract/start/`;u.EventBus.publish($,{})}},[B,l]),ne=o.useCallback(()=>{if(B&&(f(!1),d(!1),e==null||e.nav.home(),l)){const $=`/kos/dispense/${l.path}/attract/resume/`;u.EventBus.publish($,{})}},[e==null?void 0:e.nav,B,l]),{pause:K,restart:M,attractTimer:A}=ct({defaultAmbientTime:R,defaultAttractTime:B,onAmbientTimer:H,onAttractTimer:re,onResumeAttractTimer:ne});(W=e==null?void 0:e.timers)==null||W.add(A);const[oe,D]=o.useState(!1);j.info("Creating idle timer with timeout:",k,"seconds and callback:",!!I);const{pause:P,restart:E,idleTimer:_}=be({defaultAreYouThereTime:v,defaultIdleTime:k,onIdleTimer:I,onResetIdleTimer:q});j.info(`Creating pour timer with timeout: ${h} seconds and callback: ${!!I}`);const{pause:T,restart:L,idleTimer:O}=be({defaultAreYouThereTime:c,defaultIdleTime:h,onIdleTimer:I,prefix:"pour-"}),G=o.useCallback(async()=>{let $=!0;if(r)try{$=await r()}catch(de){j.error(`onBeforeAreYouThereTimer callback failed: ${de}`),$=!1}if($){if(l){const de=`/kos/dispense/${l.path}/are-you-there/timeout/`;u.EventBus.publish(de,{})}D(!0),m?T():P()}else switch(i){case"pause":m?T():P();break;case"restart":m?L():E();break}},[r,l,i,m]),V=o.useCallback(()=>{D(!1),K(),m?(L(),P()):(E(),T())},[m,P,T,E,L]);o.useEffect(()=>{_&&_.addTimeoutAction({name:"are-you-there-timer",remainingTime:v,action:G})},[_,v,G]),o.useEffect(()=>{O&&O.addTimeoutAction({name:"pour-are-you-there-timer",remainingTime:c,action:G})},[O,c,G]),(Ae=e==null?void 0:e.timers)==null||Ae.add(_),(Ee=e==null?void 0:e.timers)==null||Ee.add(O);const ae=o.useCallback(()=>{x(!1),T(),P(),K()},[P,T]),ie=o.useCallback(()=>{x(!0),j.info("restarting pour timer"),L(),K(),P()},[P,L]),ce=o.useCallback(()=>{x(!1),j.info("restarting pour timer on before pour rejected"),T(),E()},[]),ue=o.useCallback(()=>{K(),f(!1),d(!1),E()},[K,E]),Ie=o.useCallback(()=>{f(!1),d(!1),x(!1),T(),M()},[M,T]),Z=o.useCallback(()=>{f(!1),d(!1),x(!1),K(),E()},[K,E]),z=o.useCallback(()=>{f(!1),d(!1),x(!1),M(),P(),T()},[M,P,T]),ee=o.useCallback(()=>{f(!1),d(!1),M(),P()},[M,P]);je({onBrandSelected:ue,onBrandCleared:Ie,onBeverageSelected:Z,onBeverageCleared:z,onPour:ae,onPourCancel:ie,onBeforePourRejected:ce,onInit:ee});const p=m?c:v;return o.useEffect(()=>{if(l&&A){const $=`/kos/dispense/${l==null?void 0:l.path}/init/`;u.EventBus.publish($,{})}},[l,A]),{showAreYouThere:oe,clearAreYouThere:V,pauseIdleTimer:P,restartIdleTimer:E,areYouThereCountdown:p,showAmbientScreen:a,showAttractScreen:C,pauseScreenTimer:K,restartScreenTimer:M}},ke=()=>{const e=g.DeviceAssembly.type;return u.useKosModel({modelId:e,modelType:g.DeviceAssembly.type,options:{}})};function lt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=ke();return b.jsx(r,{...n,children:b.jsx(e,{...t,deviceAssembly:s})})}}const Pe=e=>{const t=e;return u.useKosModel({modelId:t,modelType:g.Holder.type,options:{}})};function mt(e,t){return s=>{const{model:n,status:r,KosModelLoader:i}=Pe(e);return b.jsx(i,{...r,children:b.jsx(t,{...s,holder:n})})}}const we=()=>{const e=g.HolderContainer.type;return u.useKosModel({modelId:e,modelType:g.HolderContainer.type,options:{}})};function bt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=we();return b.jsx(r,{...n,children:b.jsx(e,{...t,holderContainer:s})})}}const Te=()=>{const e=g.Ingredient.type;return u.useKosModel({modelId:e,modelType:g.Ingredient.type,options:{}})},le=u.KosLog.createLogger({name:"HoldToPourIntentStrategy",group:"kos-hooks"}),Re={name:"HoldToPourIntentStrategy",async initiate(e,t){if(!(e!=null&&e.canPour)){le.debug(`${e==null?void 0:e.id} cannot pour. Returning early.`);return}t?(le.debug(`performing intent: ${t}`),await(e==null?void 0:e.performIntent(t))):le.debug("no intent provided. Returning early.")},async initiateEnded(e){await(e==null?void 0:e.cancelPour())}},me=u.KosLog.createLogger({name:"useNozzlePour",group:"kos-hooks"}),ht=({onPour:e,onPourCancel:t,intentContainer:s,strategy:n=Re})=>{const r=o.useCallback(()=>{me.debug(`[${n==null?void 0:n.name}] - Pour initiated for model ${s==null?void 0:s.id}.`),n==null||n.initiate(s),e==null||e()},[e,s,n]),i=o.useCallback(()=>{var C;me.debug(`[${n==null?void 0:n.name}] - Pour initiate ended called for nozzle ${s==null?void 0:s.id}.`),(C=n==null?void 0:n.initiateEnded)==null||C.call(n,s),t==null||t()},[t,s,n]),a=o.useCallback(()=>{me.debug(`Force cancelling pour for nozzle ${s==null?void 0:s.id}.`),s==null||s.cancelPour(),t==null||t()},[t,s]);return{handlers:u.usePressGesture({onPressed:r,onRelease:i}).dom,cancel:a,status:s}};function pt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=Te();return b.jsx(r,{...n,children:b.jsx(e,{...t,ingredient:s})})}}const $e=()=>{const e=g.IngredientContainer.type;return u.useKosModel({modelId:e,modelType:g.IngredientContainer.type,options:{}})};function ft(e){return t=>{const{model:s,status:n,KosModelLoader:r}=$e();return b.jsx(r,{...n,children:b.jsx(e,{...t,ingredientContainer:s})})}}function vt(e,t){return s=>{const{model:n,status:r,KosModelLoader:i}=Ce(e);return b.jsx(i,{...r,children:b.jsx(t,{...s,nozzle:n})})}}const J=u.KosLog.createLogger({name:"usePour",group:"kos-hooks"}),Ct=({onBeforePour:e,onPour:t,onPourCancel:s,onPourAbort:n,pourTarget:r,pourContext:i,strategy:a=ge})=>{const[d,C]=o.useState(i||new xe),f=o.useCallback(async()=>{J.debug(`[${a==null?void 0:a.name}] - calling before pour for pour target ${r==null?void 0:r.id}.`),(e?await(e==null?void 0:e(d)):!0)?(J.debug(`[${a==null?void 0:a.name}] - Pour initiated for pour target ${r==null?void 0:r.id}.`),await(a==null?void 0:a.initiate(r)),t==null||t(),r!=null&&r.isPouring||n==null||n()):(J.debug(`[${a==null?void 0:a.name}] - Pour cancelled for pour target ${r==null?void 0:r.id}.`),s==null||s())},[t,e,n,r,a,d]),l=o.useCallback(async()=>{var c;J.debug(`[${a==null?void 0:a.name}] - Pour initiate ended called for pour target ${r==null?void 0:r.id}.`),await((c=a==null?void 0:a.initiateEnded)==null?void 0:c.call(a,r))||s==null||s()},[s,r,a]),m=o.useCallback(async()=>{J.debug(`Force cancelling pour for pour target ${r==null?void 0:r.id}.`),await(r==null?void 0:r.cancelPour()),s==null||s()},[s,r]),x=o.useCallback((h,c)=>{d.set(h,c)},[d]),k=o.useCallback(h=>{d.remove(h)},[d]);return{handlers:u.usePressGesture({onPressed:f,onRelease:l}).dom,cancel:m,updatePourContext:x,removeFromPourContext:k,status:r}},Q=u.KosLog.createLogger({name:"TapOrHoldIntentStrategy",group:"kos-hooks"});class xt{constructor(t){Y(this,"intent");Y(this,"name","TapOrHoldIntentStrategy");Y(this,"isHold",!1);Y(this,"disposer",null);this.intent=t}async initiate(t,s){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}s?(Q.debug(`performing intent: ${s}`),await(t==null?void 0:t.performIntent(s))):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 se=u.KosLog.createLogger({name:"TapToPourIntentStrategy",group:"kos-hooks"}),gt={name:"TapToPourIntentStrategy",async initiate(e,t){if(e!=null&&e.isPouring){se.debug(`Nozzle ${e==null?void 0:e.id} is already pouring. cancelling pour`),await e.cancelPour();return}if(!(e!=null&&e.canPour)){se.debug(`Nozzle ${e==null?void 0:e.id} cannot pour. Returning early.`);return}t?(se.debug(`performing intent: ${t}`),await(e==null?void 0:e.performIntent(t))):se.debug("no intent provided. Returning early.")},async initiateEnded(e){return!0}},Ke=u.KosLog.createLogger({name:"HoldToPourStrategy",group:"kos-hooks"}),kt={name:"TapToPourStrategy",async initiate(e){if(e!=null&&e.isPouring){Ke.debug(`Nozzle ${e==null?void 0:e.id} is already pouring. cancelling pour`),await e.cancelPour();return}if(!(e!=null&&e.canPour)){Ke.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}},De=(e,t,s)=>{const n=e;return u.useKosModel({modelId:n,modelType:st.GenericPour.type,forceUpdate:!0,options:{servicePathFactory:t,selectedId:s}})};function Pt(e){return t=>{const{model:s,status:n,KosModelLoader:r}=De(t.id,t.servicePathFactory,t.itemId);return b.jsx(r,{...n,children:b.jsx(e,{...t,genericPour:s})})}}const _e=o.createContext(void 0),wt=({children:e})=>{const{model:t,ready:s}=he(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(_e.Provider,{value:n,children:e})},Tt=()=>{const e=o.useContext(_e);if(!e)throw new Error("useAssemblyContext must be used within a AssemblyProvider");return e},Oe=o.createContext(void 0),$t=({children:e})=>{const{model:t,ready:s}=pe(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Oe.Provider,{value:n,children:e})},It=()=>{const e=o.useContext(Oe);if(!e)throw new Error("useAvailabilityContext must be used within a AvailabilityProvider");return e},Ge=o.createContext(void 0),At=({children:e,id:t})=>{const{model:s,ready:n}=fe(t),r=o.useMemo(()=>n&&s?{model:s}:{},[n,s]);return b.jsx(Ge.Provider,{value:r,children:e})},Et=()=>{const e=o.useContext(Ge);if(!e)throw new Error("useBoardContext must be used within a BoardProvider");return e},Ye=o.createContext(void 0),Kt=({children:e})=>{const{model:t,ready:s}=ve(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Ye.Provider,{value:n,children:e})},St=()=>{const e=o.useContext(Ye);if(!e)throw new Error("useBoardContainerContext must be used within a BoardContainerProvider");return e},Fe=o.createContext(void 0),Ue=({children:e})=>{const{model:t,ready:s}=ke(),n=o.useMemo(()=>{if(s&&t){const i=t.nozzlePaths;return{model:t,nozzlePaths:i}}return{}},[s,t]),r=s&&t?e:null;return b.jsx(Fe.Provider,{value:n,children:r})},qe=()=>{const e=o.useContext(Fe);if(!e)throw new Error("useDeviceAssemblyContext must be used within a DeviceAssemblyProvider");return e};function Bt(){const e=o.createContext(null);return[()=>{const s=o.useContext(e);if(s===void 0)throw new Error("useDispenseKitContext must be used within a Provider");return s},e.Provider]}function Ve({children:e,provider:t,props:s,nozzleProps:n}){const r=Ne(s);return b.jsx(t,{value:r,children:e(n||{})})}function Mt({children:e,provider:t,props:s}){const{nozzlePaths:n}=qe(),r=(n==null?void 0:n.length)||0;return(n==null?void 0:n.map((a,d)=>b.jsx(Be,{path:a,children:b.jsx(Ve,{provider:t,props:s,nozzleProps:{nozzleIndex:d,nozzlePath:a,totalNozzles:r,isFirstNozzle:d===0,isLastNozzle:d===r-1},children:e})},a)))||[]}function We({provider:e,props:t}){return({children:s})=>e?b.jsx(Ue,{children:b.jsx(Mt,{provider:e,props:t,children:s})}):null}function Lt(e){const[t,s]=Bt();return[t,We({provider:s,props:e})]}const Je=o.createContext(void 0),yt=({children:e,id:t})=>{const{model:s,ready:n}=Pe(t||""),r=o.useMemo(()=>n&&s?{model:s}:{},[n,s]);return b.jsx(Je.Provider,{value:r,children:e})},Ht=()=>{const e=o.useContext(Je);if(!e)throw new Error("useHolderContext must be used within a HolderProvider");return e},Qe=o.createContext(void 0),Nt=({children:e})=>{const{model:t,ready:s}=we(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Qe.Provider,{value:n,children:e})},jt=()=>{const e=o.useContext(Qe);if(!e)throw new Error("useHolderContainerContext must be used within a HolderContainerProvider");return e},Xe=o.createContext(void 0),Rt=({children:e})=>{const{model:t,ready:s}=Te(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Xe.Provider,{value:n,children:e})},Dt=()=>{const e=o.useContext(Xe);if(!e)throw new Error("useIngredientContext must be used within a IngredientProvider");return e},Ze=o.createContext(void 0),_t=({children:e})=>{const{model:t,ready:s}=$e(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(Ze.Provider,{value:n,children:e})},Ot=()=>{const e=o.useContext(Ze);if(!e)throw new Error("useIngredientContainerContext must be used within a IngredientContainerProvider");return e},Gt=()=>{const e=g.Pump.type;return u.useKosModel({modelId:e,modelType:g.Pump.type,options:{}})},ze=o.createContext(void 0),Yt=({children:e})=>{const{model:t,ready:s}=Gt(),n=o.useMemo(()=>s&&t?{model:t}:{},[s,t]);return b.jsx(ze.Provider,{value:n,children:e})},Ft=()=>{const e=o.useContext(ze);if(!e)throw new Error("usePumpContext must be used within a PumpProvider");return e};exports.AssemblyProvider=wt;exports.AvailabilityProvider=$t;exports.BoardContainerProvider=Kt;exports.BoardProvider=At;exports.CuiKit=We;exports.CuiKitWrapper=Ve;exports.DISPENSE_GROUP_BEVERAGE=X;exports.DISPENSE_GROUP_BRAND=F;exports.DISPENSE_GROUP_FLAVOR=U;exports.DeviceAssemblyProvider=Ue;exports.HoldToPourIntentStrategy=Re;exports.HoldToPourStrategy=ge;exports.HolderContainerProvider=Nt;exports.HolderProvider=yt;exports.IngredientContainerProvider=_t;exports.IngredientProvider=Rt;exports.NozzleProvider=Be;exports.PourContext=xe;exports.PumpProvider=Yt;exports.TapOrHoldIntentStrategy=xt;exports.TapToPourIntentStrategy=gt;exports.TapToPourStrategy=kt;exports.initializeCuiKit=Lt;exports.useAssembly=he;exports.useAssemblyContext=Tt;exports.useAvailability=pe;exports.useAvailabilityContext=It;exports.useBeverages=Me;exports.useBoard=fe;exports.useBoardContainer=ve;exports.useBoardContainerContext=St;exports.useBoardContext=Et;exports.useBrands=Le;exports.useCuiKit=Ne;exports.useCuiKitTimers=be;exports.useDefaultCuiKitLifecycle=dt;exports.useDeviceAssembly=ke;exports.useDeviceAssemblyContext=qe;exports.useDispenseLifecycle=je;exports.useFlavors=He;exports.useGenericPour=De;exports.useHolder=Pe;exports.useHolderContainer=we;exports.useHolderContainerContext=jt;exports.useHolderContext=Ht;exports.useIngredient=Te;exports.useIngredientContainer=$e;exports.useIngredientContainerContext=Ot;exports.useIngredientContext=Dt;exports.useIngredientPour=ht;exports.useNozzle=Ce;exports.useNozzleContext=S;exports.useNozzlePour=ye;exports.usePourTarget=Ct;exports.usePumpContext=Ft;exports.withAssembly=rt;exports.withBeverage=nt;exports.withBoard=ot;exports.withBoardContainer=at;exports.withDeviceAssembly=lt;exports.withGenericPour=Pt;exports.withHolder=mt;exports.withHolderContainer=bt;exports.withIngredient=pt;exports.withIngredientContainer=ft;exports.withNozzle=vt;
2
+ //# sourceMappingURL=pump-provider-86479YU2.cjs.map