"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("@viamedici-spc/configurator-ts"),l=require("@viamedici-spc/fp-ts-extensions"),g=require("jotai"),x=require("react"),gt=require("fp-ts-react-stable-hooks"),U=require("jotai/utils"),At=require("p-defer"),v=require("react/jsx-runtime"),ht=require("dyna-guid"),X=require("jotai-effect"),pt=require("jotai-xstate"),q=require("xstate"),w="ConfigurationUninitialized";function I(t){return g.atom(e=>{try{const n=t(e,i=>{const o=e(i);if(o===w)throw w;return o});return n??w}catch(n){if(n===w)return w;throw n}})}function et(t){const{guardedConfigurationAtom:e,guardedAttributesAtom:n}=t;function i(o,s){const r=o==="all"?"all":l.pipe(o,l.RA.map(u=>typeof u=="string"?u:m.GlobalAttributeIdKeyBuilder(u)));return I((u,a)=>{if(r==="all")return l.pipe(e,a,f=>f.attributes,l.RM.values(l.Ord.trivial));const c=a(n);return l.pipe(r,l.RA.map(f=>u(c(f))),s?l.RA.filterMap(l.O.fromNullable):l.identity)})}return i}const st=window.configuratorReactContexts??{AtomsContext:x.createContext(null),StoreContext:x.createContext(g.getDefaultStore())};window.configuratorReactContexts=st;const ut=st.AtomsContext,ct=st.StoreContext,B=()=>x.useContext(ut),_=()=>x.useContext(ct);function rt(t,e,n){const i=l.Eq.tuple(l.Eq.eqNullable(l.Bool.Eq),n);return(o,...s)=>{const r=B(),u=_(),a=g.useSetAtom(r.selectors.subscriberAtom,{store:u}),c=gt.useStableMemo(()=>o??!0?e(r,...s):t(r,...s),[o,s],i),f=x.useMemo(()=>a(c),[a,c]);return x.useEffect(()=>()=>{f.unsubscribe()},[f]),g.useAtomValue(c,{store:u})}}function C(t,e){const n=rt(o=>t(o.selectors),o=>e(o.suspended),l.Eq.tuple());function i(o){return n(o)}return i}function Y(t,e){const n=rt((o,s)=>t(o.selectors)(s),(o,s)=>e(o.suspended)(s),l.Eq.tuple(l.Str.Eq));function i(o,s){const r=x.useMemo(()=>typeof o=="string"?o:m.GlobalAttributeIdKeyBuilder(o),[o]);return n(s,r)}return i}function h(t){const e=U.selectAtom(t,(n,i)=>{if(n!==w)return(i==null?void 0:i.deferredPromise)!=null?(i.deferredPromise.resolve(n),{deferredPromise:null,result:i.deferredPromise.promise}):{deferredPromise:null,result:n};const o=(i==null?void 0:i.deferredPromise)??At();return{deferredPromise:o,result:o.promise}});return g.atom(n=>n(e).result)}const bt=l.Eq.union().with(t=>typeof t=="string",m.globalAttributeIdKeyEq).with(t=>typeof t=="object",m.globalAttributeIdEq),St=l.Eq.union().with(t=>t==="all",l.Str.Eq).with(t=>Array.isArray(t),l.RA.getEq(bt)),yt=rt((t,e,n)=>et(t.selectors)(e,n),(t,e,n)=>h(et(t.selectors)(e,n)),l.Eq.tuple(St,l.Eq.eqNullable(l.Bool.Eq)));function Ct(t,e,n){const i=t=="all"?e:n,o=t=="all"?void 0:e;return yt(i,t,o)}const xt=Y(t=>t.choiceAttributeAtomFamily,t=>t.choiceAttributeAtomFamily),Et=Y(t=>t.numericAttributeAtomFamily,t=>t.numericAttributeAtomFamily),vt=Y(t=>t.booleanAttributeAtomFamily,t=>t.booleanAttributeAtomFamily),wt=Y(t=>t.componentAttributeAtomFamily,t=>t.componentAttributeAtomFamily);function Dt(){const{effects:t}=B(),{addSessionListenersEffect:e,cleanupAtomFamiliesEffect:n,atomSubscriberEffect:i,atomSubscriptionCleanupEffect:o}=t;return g.useAtom(e),g.useAtom(n),g.useAtom(i),g.useAtom(o),null}const Rt=30*1e3,It=WeakRef!=null?t=>new WeakRef(t):t=>({deref:()=>t});function kt(){return g.atom(l.RM.empty)}function Ft(t){return g.atom(null,(e,n,i)=>{const o=ht.guid();m.Logger.debug("AtomSubscription:","Creating subscription with id",o);const r={unsubscribe:()=>{n(t.subscriptionsAtom,u=>{const a=u.get(i);if(a==null)return u;const c=new Map(a);c.delete(o);const f=new Map(u);return f.set(i,c),f})}};return n(t.subscriptionsAtom,u=>{const a=new Map(u.get(i)??l.RM.empty);a.set(o,It(r));const c=new Map(u);return c.set(i,a),c}),r})}function Mt(t){return X.atomEffect(e=>{const i=[...e(t.subscriptionsAtom).keys()];m.Logger.debug("AtomSubscriber:","There are",i.length,"Atoms to subscribe to.");for(const o of i)e(o)})}function qt(t){return X.atomEffect((e,n)=>{const i=setInterval(()=>{m.Logger.info("AtomSubscriptionCleanup:","Running cleanup");let o=!1;n(t.subscriptionsAtom,s=>{const r=new Map(s);for(const u of[...r.keys()]){const a=new Map(r.get(u)??l.RM.empty);for(const c of[...a.keys()]){const f=a.get(c);(f===void 0||f.deref()===void 0)&&(m.Logger.debug("AtomSubscriptionCleanup:","Deleting subscription",c,"because it got garbage collected."),a.delete(c),o=!0)}r.set(u,a),a.size===0&&(m.Logger.debug("AtomSubscriptionCleanup:","Delete Atom with 0 subscriptions."),r.delete(u),o=!0)}return m.Logger.debug("AtomSubscriptionCleanup:","There are",r.size,"Atoms with",[...r.values(),l.RA.flatten].length,"subscriptions left."),o?r:s})},Rt);return()=>{clearInterval(i)}})}const zt=q.fromPromise(({input:t})=>l.pipe(t.session,l.O.match(()=>()=>m.SessionFactory.createSession(t.sessionContext),e=>async()=>(await e.setSessionContext(t.sessionContext),e)),e=>l.TE.tryCatch(e,n=>n),l.TE.mapLeft(e=>({sessionContext:t.sessionContext,configurationError:e})))()),jt=q.setup({types:{context:{},events:{}},actors:{createOrUpdateSession:zt},guards:{shallProcess:({context:t})=>(t.sessionCreateOrUpdateError==null||t.sessionCreateOrUpdateError.sessionContext!==t.desiredSessionContext)&&(t.configurationSession==null&&t.desiredSessionContext!=null||t.configurationSession!=null&&t.configurationSession.getSessionContext()!==t.desiredSessionContext),shallDispose:({context:t})=>t.configurationSession!=null&&t.desiredSessionContext==null}}).createMachine({context:{desiredSessionContext:null,configurationSession:null,sessionCreateOrUpdateError:null},on:{Retry:{actions:[q.assign({sessionCreateOrUpdateError:()=>null})]},SessionContextChanged:{actions:[q.log("SessionContextChanged"),q.assign({desiredSessionContext:({event:t})=>t.sessionContext})]},Shutdown:{target:"#shutdown"}},initial:"Idle",states:{Idle:{always:[{target:"DisposeSession",guard:"shallDispose"},{target:"Processing",guard:"shallProcess"}]},Processing:{invoke:{src:"createOrUpdateSession",input:({context:t})=>({sessionContext:t.desiredSessionContext,session:l.O.fromNullable(t.configurationSession)}),onDone:{target:"Idle",actions:[q.enqueueActions(({event:t,enqueue:e})=>{l.E.isRight(t.output)?e.assign({configurationSession:t.output.right}):e.assign({sessionCreateOrUpdateError:t.output.left})})]}}},DisposeSession:{always:[{target:"Idle",actions:[q.enqueueActions(({enqueue:t,context:e})=>{l.TE.tryCatch(async()=>{var n;return await((n=e.configurationSession)==null?void 0:n.close())},l.identity)(),t.assign({configurationSession:()=>null,sessionCreateOrUpdateError:()=>null})})]}]},Shutdown:{type:"final",id:"shutdown",entry:[q.enqueueActions(({context:t,enqueue:e})=>{t.configurationSession&&l.TE.tryCatch(async()=>{var n;return await((n=t.configurationSession)==null?void 0:n.close())},l.identity)(),e.assign({configurationSession:()=>null,desiredSessionContext:()=>null,sessionCreateOrUpdateError:()=>null})})]}}});function Pt(){return pt.atomWithMachine(jt)}function Tt(t){return g.atom(e=>e(t.sessionManagementMachineAtom).context.configurationSession)}function Ut(t){const e=g.atom((o,s)=>{var f;const r=o(t.sessionManagementMachineAtom),u=r.matches("Processing"),a=r.context.configurationSession!=null,c=(f=r.context.sessionCreateOrUpdateError)!=null&&f.configurationError?{...r.context.sessionCreateOrUpdateError.configurationError,retry:()=>{s.setSelf()}}:null;return{isProcessing:u,hasSession:a,error:c}},(o,s)=>{s(t.sessionManagementMachineAtom,{type:"Retry"})}),n=g.atom(o=>{const{hasSession:s,error:r,isProcessing:u}=o(e);return{isInitializing:!s&&u,error:!s&&r?r:void 0}}),i=g.atom(o=>{const{hasSession:s,error:r,isProcessing:u}=o(e);return{isUpdating:s&&u,error:s&&r?r:void 0}});return{sessionInitializationAtom:n,sessionUpdatingAtom:i}}const Lt=()=>U.atomFamily(()=>g.atom()),Vt=()=>g.atom(),Bt=()=>g.atom(),Ot=()=>g.atom(),Nt=()=>g.atom();function Qt(t,e){const{attributesAtom:n,configurationAtom:i,isSatisfiedAtom:o,canResetAtom:s}=t,{configurationSessionAtom:r}=e;return X.atomEffect((u,a)=>{const c=u(r);if(!c){a(i,void 0),a(o,void 0),a(n,void 0),a(s,void 0);return}const f=c.addConfigurationChangedListener((F,M)=>{m.Logger.debug("SessionSubscription:","Received ConfigurationChanged"),a(i,F),M.isSatisfied!=null&&a(o,M.isSatisfied);const W=u.peek(n),V=W??Lt();M.attributes.added.forEach(E=>{a(V(E.key),E)}),M.attributes.changed.forEach(E=>{a(V(E.key),E)}),M.attributes.removed.forEach(E=>{a(V(m.GlobalAttributeIdKeyBuilder(E)),void 0)}),W==null&&a(n,()=>V)}),K=c.addCanResetConfigurationChangedListener(F=>{m.Logger.debug("SessionSubscription:","Received CanResetConfigurationChanged"),a(s,F)});return()=>{f.unsubscribe(),K.unsubscribe()}})}function Z(t,e,n){const i=g.atom(o=>{const s=o(t);if(!s)return;const r=g.atom();return r.onMount=u=>{const a=e(s,(...c)=>{u(c)});return()=>{u(void 0),a.unsubscribe()}},r});return g.atom(o=>{const s=o(i);if(s==null)return;const r=o(s);if(r!=null)return n(...r)})}function _t(t){return Z(t,(e,n)=>e.addStoredConfigurationChangedListener(n),e=>e)}function Kt(t){return Z(t,(e,n)=>e.addDecisionsChangedListener(n),e=>e)}function Wt(t){return Z(t,(e,n)=>e.addDecisionsChangedListener(m.DecisionKind.Explicit,n),e=>e)}function $t(t){return Z(t,(e,n)=>e.addDecisionsChangedListener(m.DecisionKind.Implicit,n),e=>e)}const Jt=()=>({sessionManagementMachineAtom:Pt(),configurationAtom:Vt(),isSatisfiedAtom:Bt(),canResetAtom:Ot(),attributesAtom:Nt(),subscriptionsAtom:kt()});function Ht(t,e){return I((n,i)=>{const o=i(t);return{canResetConfiguration:i(e),resetConfiguration:o.resetConfiguration.bind(o)}})}function Gt(t){return I((e,n)=>{const i=n(t);return{explain:i.explain.bind(i),applySolution:i.applySolution.bind(i)}})}function Xt(t){return l.pipe(t.values,l.RM.values(l.Ord.trivial),l.RA.filter(e=>{var n;return((n=e.decision)==null?void 0:n.kind)===m.DecisionKind.Explicit}),l.RA.map(e=>({type:m.AttributeType.Choice,attributeId:t.id,choiceValueId:e.id,state:null})))}const S=Symbol.for("@ts-pattern/matcher"),lt=Symbol.for("@ts-pattern/isVariadic"),J="@ts-pattern/anonymous-select-key",nt=t=>!!(t&&typeof t=="object"),$=t=>t&&!!t[S],p=(t,e,n)=>{if($(t)){const i=t[S](),{matched:o,selections:s}=i.match(e);return o&&s&&Object.keys(s).forEach(r=>n(r,s[r])),o}if(nt(t)){if(!nt(e))return!1;if(Array.isArray(t)){if(!Array.isArray(e))return!1;let i=[],o=[],s=[];for(const r of t.keys()){const u=t[r];$(u)&&u[lt]?s.push(u):s.length?o.push(u):i.push(u)}if(s.length){if(s.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(e.lengthp(c,r[f],n))&&o.every((c,f)=>p(c,u[f],n))&&(s.length===0||p(s[0],a,n))}return t.length===e.length&&t.every((r,u)=>p(r,e[u],n))}return Reflect.ownKeys(t).every(i=>{const o=t[i];return(i in e||$(s=o)&&s[S]().matcherType==="optional")&&p(o,e[i],n);var s})}return Object.is(e,t)},y=t=>{var e,n,i;return nt(t)?$(t)?(e=(n=(i=t[S]()).getSelectionKeys)==null?void 0:n.call(i))!=null?e:[]:Array.isArray(t)?N(t,y):N(Object.values(t),y):[]},N=(t,e)=>t.reduce((n,i)=>n.concat(e(i)),[]);function Yt(...t){if(t.length===1){const[e]=t;return n=>p(e,n,()=>{})}if(t.length===2){const[e,n]=t;return p(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function b(t){return Object.assign(t,{optional:()=>at(t),and:e=>A(t,e),or:e=>mt(t,e),select:e=>e===void 0?Q(t):Q(e,t)})}function it(t){return Object.assign((e=>Object.assign(e,{[Symbol.iterator](){let n=0;const i=[{value:Object.assign(e,{[lt]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var o;return(o=i[n++])!=null?o:i.at(-1)}}}}))(t),{optional:()=>it(at(t)),select:e=>it(e===void 0?Q(t):Q(e,t))})}function at(t){return b({[S]:()=>({match:e=>{let n={};const i=(o,s)=>{n[o]=s};return e===void 0?(y(t).forEach(o=>i(o,void 0)),{matched:!0,selections:n}):{matched:p(t,e,i),selections:n}},getSelectionKeys:()=>y(t),matcherType:"optional"})})}const Zt=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},te=(t,e)=>{for(const[n,i]of t.entries())if(!e(i,n))return!1;return!0};function A(...t){return b({[S]:()=>({match:e=>{let n={};const i=(o,s)=>{n[o]=s};return{matched:t.every(o=>p(o,e,i)),selections:n}},getSelectionKeys:()=>N(t,y),matcherType:"and"})})}function mt(...t){return b({[S]:()=>({match:e=>{let n={};const i=(o,s)=>{n[o]=s};return N(t,y).forEach(o=>i(o,void 0)),{matched:t.some(o=>p(o,e,i)),selections:n}},getSelectionKeys:()=>N(t,y),matcherType:"or"})})}function d(t){return{[S]:()=>({match:e=>({matched:!!t(e)})})}}function Q(...t){const e=typeof t[0]=="string"?t[0]:void 0,n=t.length===2?t[1]:typeof t[0]=="string"?void 0:t[0];return b({[S]:()=>({match:i=>{let o={[e??J]:i};return{matched:n===void 0||p(n,i,(s,r)=>{o[s]=r}),selections:o}},getSelectionKeys:()=>[e??J].concat(n===void 0?[]:y(n))})})}function D(t){return typeof t=="number"}function z(t){return typeof t=="string"}function j(t){return typeof t=="bigint"}const dt=b(d(function(t){return!0})),ee=dt,P=t=>Object.assign(b(t),{startsWith:e=>{return P(A(t,(n=e,d(i=>z(i)&&i.startsWith(n)))));var n},endsWith:e=>{return P(A(t,(n=e,d(i=>z(i)&&i.endsWith(n)))));var n},minLength:e=>P(A(t,(n=>d(i=>z(i)&&i.length>=n))(e))),length:e=>P(A(t,(n=>d(i=>z(i)&&i.length===n))(e))),maxLength:e=>P(A(t,(n=>d(i=>z(i)&&i.length<=n))(e))),includes:e=>{return P(A(t,(n=e,d(i=>z(i)&&i.includes(n)))));var n},regex:e=>{return P(A(t,(n=e,d(i=>z(i)&&!!i.match(n)))));var n}}),ne=P(d(z)),R=t=>Object.assign(b(t),{between:(e,n)=>R(A(t,((i,o)=>d(s=>D(s)&&i<=s&&o>=s))(e,n))),lt:e=>R(A(t,(n=>d(i=>D(i)&&iR(A(t,(n=>d(i=>D(i)&&i>n))(e))),lte:e=>R(A(t,(n=>d(i=>D(i)&&i<=n))(e))),gte:e=>R(A(t,(n=>d(i=>D(i)&&i>=n))(e))),int:()=>R(A(t,d(e=>D(e)&&Number.isInteger(e)))),finite:()=>R(A(t,d(e=>D(e)&&Number.isFinite(e)))),positive:()=>R(A(t,d(e=>D(e)&&e>0))),negative:()=>R(A(t,d(e=>D(e)&&e<0)))}),ie=R(d(D)),T=t=>Object.assign(b(t),{between:(e,n)=>T(A(t,((i,o)=>d(s=>j(s)&&i<=s&&o>=s))(e,n))),lt:e=>T(A(t,(n=>d(i=>j(i)&&iT(A(t,(n=>d(i=>j(i)&&i>n))(e))),lte:e=>T(A(t,(n=>d(i=>j(i)&&i<=n))(e))),gte:e=>T(A(t,(n=>d(i=>j(i)&&i>=n))(e))),positive:()=>T(A(t,d(e=>j(e)&&e>0))),negative:()=>T(A(t,d(e=>j(e)&&e<0)))}),oe=T(d(j)),se=b(d(function(t){return typeof t=="boolean"})),re=b(d(function(t){return typeof t=="symbol"})),ae=b(d(function(t){return t==null})),ue=b(d(function(t){return t!=null}));var ce={__proto__:null,matcher:S,optional:at,array:function(...t){return it({[S]:()=>({match:e=>{if(!Array.isArray(e))return{matched:!1};if(t.length===0)return{matched:!0};const n=t[0];let i={};if(e.length===0)return y(n).forEach(s=>{i[s]=[]}),{matched:!0,selections:i};const o=(s,r)=>{i[s]=(i[s]||[]).concat([r])};return{matched:e.every(s=>p(n,s,o)),selections:i}},getSelectionKeys:()=>t.length===0?[]:y(t[0])})})},set:function(...t){return b({[S]:()=>({match:e=>{if(!(e instanceof Set))return{matched:!1};let n={};if(e.size===0)return{matched:!0,selections:n};if(t.length===0)return{matched:!0};const i=(s,r)=>{n[s]=(n[s]||[]).concat([r])},o=t[0];return{matched:Zt(e,s=>p(o,s,i)),selections:n}},getSelectionKeys:()=>t.length===0?[]:y(t[0])})})},map:function(...t){return b({[S]:()=>({match:e=>{if(!(e instanceof Map))return{matched:!1};let n={};if(e.size===0)return{matched:!0,selections:n};const i=(u,a)=>{n[u]=(n[u]||[]).concat([a])};if(t.length===0)return{matched:!0};var o;if(t.length===1)throw new Error(`\`P.map\` wasn't given enough arguments. Expected (key, value), received ${(o=t[0])==null?void 0:o.toString()}`);const[s,r]=t;return{matched:te(e,(u,a)=>{const c=p(s,a,i),f=p(r,u,i);return c&&f}),selections:n}},getSelectionKeys:()=>t.length===0?[]:[...y(t[0]),...y(t[1])]})})},intersection:A,union:mt,not:function(t){return b({[S]:()=>({match:e=>({matched:!p(t,e,()=>{})}),getSelectionKeys:()=>[],matcherType:"not"})})},when:d,select:Q,any:dt,_:ee,string:ne,number:ie,bigint:oe,boolean:se,symbol:re,nullish:ae,nonNullable:ue,instanceOf:function(t){return b(d(function(e){return n=>n instanceof e}(t)))},shape:function(t){return b(d(Yt(t)))}};class le extends Error{constructor(e){let n;try{n=JSON.stringify(e)}catch{n=e}super(`Pattern matching error: no pattern matches value ${n}`),this.input=void 0,this.input=e}}const ot={matched:!1,value:void 0};function H(t){return new G(t,ot)}class G{constructor(e,n){this.input=void 0,this.state=void 0,this.input=e,this.state=n}with(...e){if(this.state.matched)return this;const n=e[e.length-1],i=[e[0]];let o;e.length===3&&typeof e[1]=="function"?o=e[1]:e.length>2&&i.push(...e.slice(1,e.length-1));let s=!1,r={};const u=(c,f)=>{s=!0,r[c]=f},a=!i.some(c=>p(c,this.input,u))||o&&!o(this.input)?ot:{matched:!0,value:n(s?J in r?r[J]:r:this.input,this.input)};return new G(this.input,a)}when(e,n){if(this.state.matched)return this;const i=!!e(this.input);return new G(this.input,i?{matched:!0,value:n(this.input,this.input)}:ot)}otherwise(e){return this.state.matched?this.state.value:e(this.input)}exhaustive(){if(this.state.matched)return this.state.value;throw new le(this.input)}run(){return this.exhaustive()}returnType(){return this}}function L(t,e){var n=0,i,o;e=e||{};function s(){var r=i,u=arguments.length,a,c;t:for(;r;){if(r.args.length!==arguments.length){r=r.next;continue}for(c=0;c{const{makeDecision:r,makeManyDecisions:u}=s(e);return{makeDecision:(a,c)=>r({type:m.AttributeType.Choice,attributeId:i.id,choiceValueId:a,state:c}),clearDecisions:()=>l.pipe(i,Xt,l.O.fromPredicate(l.RA.isNonEmpty),l.O.match(()=>()=>Promise.resolve(),a=>l.pipe(()=>u(a,{type:"KeepExistingDecisions"}),l.T.map(l.constVoid))))(),isMultiSelect:L(()=>m.AttributeInterpreter.isChoiceAttributeMultiSelect(i)),getAllowedChoiceValues:L(()=>m.AttributeInterpreter.getAllowedChoiceValues(i)),getIncludedChoiceValues:L(()=>m.AttributeInterpreter.getIncludedChoiceValues(i)),getBlockedChoiceValues:L(()=>m.AttributeInterpreter.getBlockedChoiceValues(i)),isChoiceValueAllowed:L(a=>m.ChoiceValueInterpreter.isAllowed(a)),isChoiceValueBlocked:L(a=>m.ChoiceValueInterpreter.isBlocked(a))}})}function de(t,e,n){return tt(t,n,m.AttributeRefinements.numericAttributeRefinement,m.ExplainQuestionSubject.numeric,(i,o,s)=>{const{makeDecision:r}=s(e);return{makeDecision:u=>r({type:m.AttributeType.Numeric,attributeId:i.id,state:u})}})}function fe(t,e,n){return tt(t,n,m.AttributeRefinements.booleanAttributeRefinement,m.ExplainQuestionSubject.boolean,(i,o,s)=>{const{makeDecision:r}=s(e);return{makeDecision:u=>r({type:m.AttributeType.Boolean,attributeId:i.id,state:u})}})}function ge(t,e,n){return tt(t,n,m.AttributeRefinements.componentAttributeRefinement,m.ExplainQuestionSubject.component,(i,o,s)=>{const{makeDecision:r}=s(e);return{makeDecision:u=>r({type:m.AttributeType.Component,attributeId:i.id,state:u})}})}function tt(t,e,n,i,o){return U.atomFamily(s=>I((r,u)=>{const a=u(t),c=r(a(s));if(!c||!n(c))return;const{explain:f,applySolution:K}=u(e),F=o(c,r,u);return F===w?w:{attribute:c,isMandatory:L(()=>m.AttributeInterpreter.isMandatory(c)),explain:(M,W)=>{const V=H(M.question).with(m.ExplainQuestionType.whyIsNotSatisfied,()=>m.ExplainQuestionSubject.attribute).otherwise(()=>i),E={...M,subject:V,attributeId:c.id};return H(W).with("decisions",O=>f(E,O)).with("constraints",O=>f(E,O)).with("full",O=>f(E,O)).exhaustive()},applySolution:K,...F}}))}function ft(t,e){const n=U.selectAtom(t,l.identity,e.equals);return"write"in t?g.atom(i=>i(n),(i,o,...s)=>o(t,...s)):n}const Ae=l.Eq.struct({isInitializing:l.Bool.Eq,error:l.Eq.eqNullable(l.Eq.eqStrict)});function he(t,e,n,i,o,s){const r=[e,n,i,o,s],u=g.atom(a=>{const c=l.pipe(r,l.RA.every(F=>a(F)!==w)),f=a(t);return{isInitializing:!(!f.isInitializing&&c),error:f.error}});return ft(u,Ae)}const pe=l.Eq.struct({isUpdating:l.Bool.Eq,error:l.Eq.eqNullable(l.Eq.eqStrict)});function be(t){return ft(t,pe)}function Se(t){return I((e,n)=>{const i=n(t);return{storeConfiguration:i.storeConfiguration.bind(i),restoreConfiguration:i.restoreConfiguration.bind(i)}})}function ye(t,e){const n={question:m.ExplainQuestionType.whyIsNotSatisfied,subject:m.ExplainQuestionSubject.configuration};return I((i,o)=>{const s=o(t);return{isSatisfied:o(e),explain:u=>H(u).with("full",a=>s.explain(n,a)).with("decisions",a=>s.explain(n,a)).with("constraints",a=>s.explain(n,a)).exhaustive()}})}function Ce(t){return I((e,n)=>{const i=n(t);return{reinitializeSession:i.reinitialize.bind(i)}})}function xe(t){return I((e,n)=>{const i=n(t);return{scheduleTask:i.scheduleTask.bind(i)}})}function Ee(t){return I((e,n)=>{const i=n(t);return{getDecisions:i.getDecisions.bind(i)}})}function ve(t){return I((e,n)=>{const i=n(t);return{makeDecision:i.makeDecision.bind(i),makeManyDecisions:i.makeManyDecisions.bind(i)}})}function k(t){return g.atom(e=>e(t)??w)}function we(t){const{sessionInitializationAtom:e,sessionUpdatingAtom:n}=Ut(t),i=Tt(t),o={guardedConfigurationSessionAtom:k(i),guardedConfigurationAtom:k(t.configurationAtom),guardedIsSatisfiedAtom:k(t.isSatisfiedAtom),guardedCanResetAtom:k(t.canResetAtom),guardedAttributesAtom:k(t.attributesAtom),guardedStoredConfigurationAtom:k(_t(i)),guardedDecisionsAtom:k(Kt(i)),guardedExplicitDecisionsAtom:k(Wt(i)),guardedImplicitDecisionsAtom:k($t(i))},s=ve(o.guardedConfigurationSessionAtom),r=Gt(o.guardedConfigurationSessionAtom);return{...o,configurationSessionAtom:i,sessionInitializationAtom:e,sessionUpdatingAtom:n,configurationInitializationAtom:he(e,o.guardedConfigurationSessionAtom,o.guardedConfigurationAtom,o.guardedCanResetAtom,o.guardedIsSatisfiedAtom,o.guardedAttributesAtom),configurationUpdatingAtom:be(n),makeDecisionAtom:s,explainAtom:r,decisionQueriesAtom:Ee(o.guardedConfigurationSessionAtom),taskSchedulingAtom:xe(o.guardedConfigurationSessionAtom),configurationSatisfactionAtom:ye(o.guardedConfigurationSessionAtom,o.guardedIsSatisfiedAtom),configurationStoringAtom:Se(o.guardedConfigurationSessionAtom),configurationResetAtom:Ht(o.guardedConfigurationSessionAtom,o.guardedCanResetAtom),sessionReinitializationAtom:Ce(o.guardedConfigurationSessionAtom),choiceAttributeAtomFamily:me(o.guardedAttributesAtom,s,r),numericAttributeAtomFamily:de(o.guardedAttributesAtom,s,r),booleanAttributeAtomFamily:fe(o.guardedAttributesAtom,s,r),componentAttributeAtomFamily:ge(o.guardedAttributesAtom,s,r),subscriberAtom:Ft(t)}}const De=30*1e3;function Re(t,e,n){const i=[e.choiceAttributeAtomFamily,e.booleanAttributeAtomFamily,e.numericAttributeAtomFamily,e.componentAttributeAtomFamily,n.choiceAttributeAtomFamily,n.booleanAttributeAtomFamily,n.numericAttributeAtomFamily,n.componentAttributeAtomFamily];return X.atomEffect(o=>{o(t.configurationAtom);const s=o(t.attributesAtom);if(s==null)return;m.Logger.debug("Scheduling atomFamily cleanup");const r=setTimeout(()=>{m.Logger.debug("Cleaning up atomFamilies");for(const a of[...s.getParams()]){const c=s(a);o.peek(c)==null&&(m.Logger.debug("Removing attribute from attributes family because it is nullish",a),s.remove(a))}const u=[...s.getParams()];for(const a of i)for(const c of[...a.getParams()])u.includes(c)||a.remove(c)},De);return()=>{clearTimeout(r)}})}function Ie(t,e,n){return{addSessionListenersEffect:Qt(t,e),cleanupAtomFamiliesEffect:Re(t,e,n),atomSubscriberEffect:Mt(t),atomSubscriptionCleanupEffect:qt(t)}}function ke(t){return{configurationAtom:h(t.guardedConfigurationAtom),configurationStoringAtom:h(t.configurationStoringAtom),configurationSatisfactionAtom:h(t.configurationSatisfactionAtom),storedConfigurationAtom:h(t.guardedStoredConfigurationAtom),decisionsAtom:h(t.guardedDecisionsAtom),explicitDecisionsAtom:h(t.guardedExplicitDecisionsAtom),implicitDecisionsAtom:h(t.guardedImplicitDecisionsAtom),makeDecisionAtom:h(t.makeDecisionAtom),decisionQueriesAtom:h(t.decisionQueriesAtom),configurationResetAtom:h(t.configurationResetAtom),sessionReinitializationAtom:h(t.sessionReinitializationAtom),explainAtom:h(t.explainAtom),taskSchedulingAtom:h(t.taskSchedulingAtom),choiceAttributeAtomFamily:U.atomFamily(e=>h(t.choiceAttributeAtomFamily(e))),numericAttributeAtomFamily:U.atomFamily(e=>h(t.numericAttributeAtomFamily(e))),booleanAttributeAtomFamily:U.atomFamily(e=>h(t.booleanAttributeAtomFamily(e))),componentAttributeAtomFamily:U.atomFamily(e=>h(t.componentAttributeAtomFamily(e)))}}function Fe(){const t=Jt(),e=we(t),n=ke(e);return{primitives:t,selectors:e,suspended:n,effects:Ie(t,e,n)}}const Me="The session context is null or undefined. This will dispose the session that may exist. If this was not intended, make sure you pass valid session context data.";function qe(t){const{primitives:{sessionManagementMachineAtom:e}}=B(),n=g.useSetAtom(e);return x.useEffect(()=>{n({type:"SessionContextChanged",sessionContext:t.sessionContext}),t.sessionContext||console.warn(Me)},[t.sessionContext]),x.useEffect(()=>()=>{n({type:"Shutdown"})},[]),null}function ze(t){const e=x.useMemo(()=>Fe(),[]);return v.jsx(v.Fragment,{children:v.jsx(ut.Provider,{value:e,children:v.jsx(je,{jotaiStore:t.jotaiStore,children:v.jsxs(Pe,{children:[v.jsx(qe,{sessionContext:t.sessionContext}),v.jsx(Dt,{}),t.children]})})})})}function je(t){return t.jotaiStore?v.jsx(ct.Provider,{value:t.jotaiStore,children:t.children}):v.jsx(v.Fragment,{children:t.children})}function Pe(t){const e=_();return v.jsx(g.Provider,{store:e,children:t.children})}function Te(){const{selectors:{configurationInitializationAtom:t}}=B(),e=_();return g.useAtomValue(t,{store:e})}function Ue(){const{selectors:{configurationUpdatingAtom:t}}=B(),e=_();return g.useAtomValue(t,{store:e})}const Le=C(t=>t.explainAtom,t=>t.explainAtom),Ve=C(t=>t.guardedConfigurationAtom,t=>t.configurationAtom),Be=C(t=>t.configurationSatisfactionAtom,t=>t.configurationSatisfactionAtom),Oe=C(t=>t.configurationStoringAtom,t=>t.configurationStoringAtom),Ne=C(t=>t.configurationResetAtom,t=>t.configurationResetAtom),Qe=C(t=>t.sessionReinitializationAtom,t=>t.sessionReinitializationAtom),_e=C(t=>t.taskSchedulingAtom,t=>t.taskSchedulingAtom),Ke=C(t=>t.guardedStoredConfigurationAtom,t=>t.storedConfigurationAtom),We=C(t=>t.makeDecisionAtom,t=>t.makeDecisionAtom),$e=C(t=>t.decisionQueriesAtom,t=>t.decisionQueriesAtom),Je=C(t=>t.guardedDecisionsAtom,t=>t.decisionsAtom),He=C(t=>t.guardedExplicitDecisionsAtom,t=>t.explicitDecisionsAtom),Ge=C(t=>t.guardedImplicitDecisionsAtom,t=>t.implicitDecisionsAtom);function Xe(t,e){const n=typeof t=="string"?t:void 0,i=typeof t=="boolean"?t:e,o=x.useMemo(()=>H(n).returnType().with(ce.nullish,()=>Je).with(m.DecisionKind.Explicit,()=>He).with(m.DecisionKind.Implicit,()=>Ge).exhaustive(),[n]);return i===!1?o(!1):o()}function Ye(){const{selectors:t}=B();return x.useMemo(()=>({getConfigurationInitializationAtom:t.configurationInitializationAtom,getConfigurationUpdatingAtom:t.configurationUpdatingAtom,createAttributesAtom:et(t),getChoiceAttributeAtomFamily:t.choiceAttributeAtomFamily,getNumericAttributeAtomFamily:t.numericAttributeAtomFamily,getBooleanAttributeAtomFamily:t.booleanAttributeAtomFamily,getComponentAttributeAtomFamily:t.componentAttributeAtomFamily,getConfigurationAtom:t.guardedConfigurationAtom,getConfigurationSatisfactionAtom:t.configurationSatisfactionAtom,getConfigurationStoringAtom:t.configurationStoringAtom,getMakeDecisionAtom:t.makeDecisionAtom,getDecisionQueriesAtom:t.decisionQueriesAtom,getConfigurationResetAtom:t.configurationResetAtom,getSessionReinitializationAtom:t.sessionReinitializationAtom,getExplainAtom:t.explainAtom,getTaskSchedulingAtom:t.taskSchedulingAtom,getStoredConfigurationAtom:t.guardedStoredConfigurationAtom,getDecisionsAtom:t.guardedDecisionsAtom,getExplicitDecisionsAtom:t.guardedExplicitDecisionsAtom,getImplicitDecisionsAtom:t.guardedImplicitDecisionsAtom}),[t])}exports.Configuration=ze;exports.ConfigurationUninitialized=w;exports.useAttributes=Ct;exports.useBooleanAttribute=vt;exports.useChoiceAttribute=xt;exports.useComponentAttribute=wt;exports.useConfiguration=Ve;exports.useConfigurationInitialization=Te;exports.useConfigurationReset=Ne;exports.useConfigurationSatisfaction=Be;exports.useConfigurationStoring=Oe;exports.useConfigurationUpdating=Ue;exports.useConfiguratorStore=_;exports.useDecisionQueries=$e;exports.useDecisions=Xe;exports.useExplain=Le;exports.useJotaiAtoms=Ye;exports.useMakeDecision=We;exports.useNumericAttribute=Et;exports.useSessionReinitialization=Qe;exports.useStoredConfiguration=Ke;exports.useTaskScheduling=_e;