@zorgo/next 1.0.0
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/README.md +19 -0
- package/dist/cli.d.mts +5 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.js +2 -0
- package/dist/cli.mjs +2 -0
- package/dist/components.d.mts +337 -0
- package/dist/components.d.ts +337 -0
- package/dist/components.js +1996 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +1962 -0
- package/dist/components.mjs.map +1 -0
- package/dist/index.d.mts +305 -0
- package/dist/index.d.ts +305 -0
- package/dist/index.js +2 -0
- package/dist/index.mjs +2 -0
- package/dist/seo.d.mts +30 -0
- package/dist/seo.d.ts +30 -0
- package/dist/seo.js +82 -0
- package/dist/seo.js.map +1 -0
- package/dist/seo.mjs +56 -0
- package/dist/seo.mjs.map +1 -0
- package/dist/slugs.d.mts +1 -0
- package/dist/slugs.d.ts +1 -0
- package/dist/slugs.js +47 -0
- package/dist/slugs.js.map +1 -0
- package/dist/slugs.mjs +19 -0
- package/dist/slugs.mjs.map +1 -0
- package/dist/tree/.env.gen.ts +27 -0
- package/dist/tree/README.md +0 -0
- package/dist/tree/app/api/zorgo-token/route.ts +11 -0
- package/dist/tree/app/apple-icon.tsx.gen.ts +54 -0
- package/dist/tree/app/checkout/page.tsx +10 -0
- package/dist/tree/app/components/Footer.tsx +50 -0
- package/dist/tree/app/components/Header.tsx +128 -0
- package/dist/tree/app/components/ModalHost.tsx +56 -0
- package/dist/tree/app/components/ModalRegistry.tsx +113 -0
- package/dist/tree/app/components/TestCard.tsx +35 -0
- package/dist/tree/app/components/index.ts +3 -0
- package/dist/tree/app/error.tsx +10 -0
- package/dist/tree/app/global-error.tsx +12 -0
- package/dist/tree/app/globals.css.gen.ts +123 -0
- package/dist/tree/app/icon.tsx.gen.ts +87 -0
- package/dist/tree/app/layout.tsx.gen.ts +55 -0
- package/dist/tree/app/locations/page.tsx +30 -0
- package/dist/tree/app/manifest.ts.gen.ts +39 -0
- package/dist/tree/app/menu/[slug]/ItemCustomizationClient.tsx +18 -0
- package/dist/tree/app/menu/[slug]/page.tsx +78 -0
- package/dist/tree/app/menu/page.tsx +36 -0
- package/dist/tree/app/not-found.tsx +8 -0
- package/dist/tree/app/opengraph-image.tsx.gen.ts +82 -0
- package/dist/tree/app/page.tsx +19 -0
- package/dist/tree/app/privacy/page.tsx.gen.ts +15 -0
- package/dist/tree/app/robots.ts +9 -0
- package/dist/tree/app/sitemap.ts +26 -0
- package/dist/tree/app/terms/page.tsx.gen.ts +16 -0
- package/dist/tree/gitignore +44 -0
- package/dist/tree/lib/zorgoSiteToken.ts +20 -0
- package/dist/tree/next.config.ts +14 -0
- package/dist/tree/open-next.config.ts +4 -0
- package/dist/tree/package.json.gen.ts +24 -0
- package/dist/tree/postcss.config.mjs +7 -0
- package/dist/tree/scripts/prebuild.ts +448 -0
- package/dist/tree/tsconfig.json +35 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/CookieConsent.tsx","../../../node_modules/@headlessui/react/dist/utils/env.js","../../../node_modules/@headlessui/react/dist/hooks/use-disposables.js","../../../node_modules/@headlessui/react/dist/utils/micro-task.js","../../../node_modules/@headlessui/react/dist/utils/disposables.js","../../../node_modules/@headlessui/react/dist/hooks/use-event.js","../../../node_modules/@headlessui/react/dist/hooks/use-latest-value.js","../../../node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js","../../../node_modules/@headlessui/react/dist/utils/render.js","../../../node_modules/@headlessui/react/dist/utils/class-names.js","../../../node_modules/@headlessui/react/dist/utils/match.js","../../../node_modules/@headlessui/react/dist/hooks/use-sync-refs.js","../../../node_modules/@headlessui/react/dist/hooks/use-transition.js","../../../node_modules/@headlessui/react/dist/hooks/use-flags.js","../../../node_modules/@headlessui/react/dist/internal/open-closed.js","../../../node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js","../../../node_modules/@headlessui/react/dist/hooks/use-is-mounted.js","../../../node_modules/@headlessui/react/dist/components/transition/transition.js","../src/components/Breadcrumbs.tsx","../src/components/GridMenu.tsx","../src/components/AccordionMenu.tsx","../src/components/ItemCustomizationForm.tsx","../src/components/FindLocation.tsx","../src/components/CheckoutForm.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { Transition } from \"@headlessui/react\";\nimport { useCustomer } from \"@zorgo/universal/hooks/hooks\";\n\nexport function CookieConsent() {\n\tconst { consentAnswered, setConsent } = useCustomer();\n\tconst [mounted, setMounted] = useState(false);\n\tuseEffect(() => { setMounted(true); }, []);\n\n\tif (!mounted) return null;\n\n\treturn (\n\t\t<Transition\n\t\t\tshow={!consentAnswered}\n\t\t\tenter=\"transition-opacity duration-300\"\n\t\t\tenterFrom=\"opacity-0\"\n\t\t\tenterTo=\"opacity-100\"\n\t\t\tleave=\"transition-opacity duration-200\"\n\t\t\tleaveFrom=\"opacity-100\"\n\t\t\tleaveTo=\"opacity-0\">\n\t\t\t<div\n\t\t\t\tclassName=\"fixed inset-x-0 bottom-0 z-[9999] flex flex-col items-center justify-center gap-4 bg-black/85 px-6 py-4 text-center text-sm text-white backdrop-blur md:flex-row\"\n\t\t\t\trole=\"alert\"\n\t\t\t\taria-live=\"polite\">\n\t\t\t\t<p className=\"m-0\">\n\t\t\t\t\tWe use cookies to improve your experience and collect anonymous usage\n\t\t\t\t\tdata.\n\t\t\t\t</p>\n\t\t\t\t<div className=\"flex shrink-0 flex-wrap items-center justify-center gap-2\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"whitespace-nowrap rounded-md px-4 py-2 text-sm font-medium text-zinc-500 hover:border-zinc-600 hover:bg-zinc-900 hover:text-zinc-400\"\n\t\t\t\t\t\tonClick={() => setConsent(false)}>\n\t\t\t\t\t\tReject\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"whitespace-nowrap rounded-md bg-white px-5 py-2 text-sm font-semibold text-black transition-colors hover:bg-gray-400\"\n\t\t\t\t\t\tonClick={() => setConsent(true)}>\n\t\t\t\t\t\tAccept\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Transition>\n\t);\n}\n","var i=Object.defineProperty;var d=(t,e,n)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var r=(t,e,n)=>(d(t,typeof e!=\"symbol\"?e+\"\":e,n),n);class o{constructor(){r(this,\"current\",this.detect());r(this,\"handoffState\",\"pending\");r(this,\"currentId\",0)}set(e){this.current!==e&&(this.handoffState=\"pending\",this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current===\"server\"}get isClient(){return this.current===\"client\"}detect(){return typeof window==\"undefined\"||typeof document==\"undefined\"?\"server\":\"client\"}handoff(){this.handoffState===\"pending\"&&(this.handoffState=\"complete\")}get isHandoffComplete(){return this.handoffState===\"complete\"}}let s=new o;export{s as env};\n","import{useEffect as s,useState as o}from\"react\";import{disposables as t}from'../utils/disposables.js';function p(){let[e]=o(t);return s(()=>()=>e.dispose(),[e]),e}export{p as useDisposables};\n","function t(e){typeof queueMicrotask==\"function\"?queueMicrotask(e):Promise.resolve().then(e).catch(o=>setTimeout(()=>{throw o}))}export{t as microTask};\n","import{microTask as a}from'./micro-task.js';function o(){let s=[],r={addEventListener(e,t,n,i){return e.addEventListener(t,n,i),r.add(()=>e.removeEventListener(t,n,i))},requestAnimationFrame(...e){let t=requestAnimationFrame(...e);return r.add(()=>cancelAnimationFrame(t))},nextFrame(...e){return r.requestAnimationFrame(()=>r.requestAnimationFrame(...e))},setTimeout(...e){let t=setTimeout(...e);return r.add(()=>clearTimeout(t))},microTask(...e){let t={current:!0};return a(()=>{t.current&&e[0]()}),r.add(()=>{t.current=!1})},style(e,t,n){let i=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:n}),this.add(()=>{Object.assign(e.style,{[t]:i})})},group(e){let t=o();return e(t),this.add(()=>t.dispose())},add(e){return s.includes(e)||s.push(e),()=>{let t=s.indexOf(e);if(t>=0)for(let n of s.splice(t,1))n()}},dispose(){for(let e of s.splice(0))e()}};return r}export{o as disposables};\n","import a from\"react\";import{useLatestValue as n}from'./use-latest-value.js';let o=function(t){let e=n(t);return a.useCallback((...r)=>e.current(...r),[e])};export{o as useEvent};\n","import{useRef as t}from\"react\";import{useIsoMorphicEffect as o}from'./use-iso-morphic-effect.js';function s(e){let r=t(e);return o(()=>{r.current=e},[e]),r}export{s as useLatestValue};\n","import{useEffect as f,useLayoutEffect as c}from\"react\";import{env as i}from'../utils/env.js';let n=(e,t)=>{i.isServer?f(e,t):c(e,t)};export{n as useIsoMorphicEffect};\n","import E,{Fragment as j,cloneElement as v,createElement as S,forwardRef as w,isValidElement as k,useCallback as x,useRef as M}from\"react\";import{classNames as N}from'./class-names.js';import{match as O}from'./match.js';var A=(a=>(a[a.None=0]=\"None\",a[a.RenderStrategy=1]=\"RenderStrategy\",a[a.Static=2]=\"Static\",a))(A||{}),C=(e=>(e[e.Unmount=0]=\"Unmount\",e[e.Hidden=1]=\"Hidden\",e))(C||{});function K(){let n=$();return x(r=>U({mergeRefs:n,...r}),[n])}function U({ourProps:n,theirProps:r,slot:e,defaultTag:a,features:s,visible:t=!0,name:l,mergeRefs:i}){i=i!=null?i:I;let o=P(r,n);if(t)return F(o,e,a,l,i);let y=s!=null?s:0;if(y&2){let{static:f=!1,...u}=o;if(f)return F(u,e,a,l,i)}if(y&1){let{unmount:f=!0,...u}=o;return O(f?0:1,{[0](){return null},[1](){return F({...u,hidden:!0,style:{display:\"none\"}},e,a,l,i)}})}return F(o,e,a,l,i)}function F(n,r={},e,a,s){let{as:t=e,children:l,refName:i=\"ref\",...o}=h(n,[\"unmount\",\"static\"]),y=n.ref!==void 0?{[i]:n.ref}:{},f=typeof l==\"function\"?l(r):l;\"className\"in o&&o.className&&typeof o.className==\"function\"&&(o.className=o.className(r)),o[\"aria-labelledby\"]&&o[\"aria-labelledby\"]===o.id&&(o[\"aria-labelledby\"]=void 0);let u={};if(r){let d=!1,p=[];for(let[c,T]of Object.entries(r))typeof T==\"boolean\"&&(d=!0),T===!0&&p.push(c.replace(/([A-Z])/g,g=>`-${g.toLowerCase()}`));if(d){u[\"data-headlessui-state\"]=p.join(\" \");for(let c of p)u[`data-${c}`]=\"\"}}if(b(t)&&(Object.keys(m(o)).length>0||Object.keys(m(u)).length>0))if(!k(f)||Array.isArray(f)&&f.length>1||D(f)){if(Object.keys(m(o)).length>0)throw new Error(['Passing props on \"Fragment\"!',\"\",`The current component <${a} /> is rendering a \"Fragment\".`,\"However we need to passthrough the following props:\",Object.keys(m(o)).concat(Object.keys(m(u))).map(d=>` - ${d}`).join(`\n`),\"\",\"You can apply a few solutions:\",['Add an `as=\"...\"` prop, to ensure that we render an actual element instead of a \"Fragment\".',\"Render a single element as the child so that we can forward the props onto that element.\"].map(d=>` - ${d}`).join(`\n`)].join(`\n`))}else{let d=f.props,p=d==null?void 0:d.className,c=typeof p==\"function\"?(...R)=>N(p(...R),o.className):N(p,o.className),T=c?{className:c}:{},g=P(f.props,m(h(o,[\"ref\"])));for(let R in u)R in g&&delete u[R];return v(f,Object.assign({},g,u,y,{ref:s(H(f),y.ref)},T))}return S(t,Object.assign({},h(o,[\"ref\"]),!b(t)&&y,!b(t)&&u),f)}function $(){let n=M([]),r=x(e=>{for(let a of n.current)a!=null&&(typeof a==\"function\"?a(e):a.current=e)},[]);return(...e)=>{if(!e.every(a=>a==null))return n.current=e,r}}function I(...n){return n.every(r=>r==null)?void 0:r=>{for(let e of n)e!=null&&(typeof e==\"function\"?e(r):e.current=r)}}function P(...n){var a;if(n.length===0)return{};if(n.length===1)return n[0];let r={},e={};for(let s of n)for(let t in s)t.startsWith(\"on\")&&typeof s[t]==\"function\"?((a=e[t])!=null||(e[t]=[]),e[t].push(s[t])):r[t]=s[t];if(r.disabled||r[\"aria-disabled\"])for(let s in e)/^(on(?:Click|Pointer|Mouse|Key)(?:Down|Up|Press)?)$/.test(s)&&(e[s]=[t=>{var l;return(l=t==null?void 0:t.preventDefault)==null?void 0:l.call(t)}]);for(let s in e)Object.assign(r,{[s](t,...l){let i=e[s];for(let o of i){if((t instanceof Event||(t==null?void 0:t.nativeEvent)instanceof Event)&&t.defaultPrevented)return;o(t,...l)}}});return r}function V(...n){var a;if(n.length===0)return{};if(n.length===1)return n[0];let r={},e={};for(let s of n)for(let t in s)t.startsWith(\"on\")&&typeof s[t]==\"function\"?((a=e[t])!=null||(e[t]=[]),e[t].push(s[t])):r[t]=s[t];for(let s in e)Object.assign(r,{[s](...t){let l=e[s];for(let i of l)i==null||i(...t)}});return r}function Y(n){var r;return Object.assign(w(n),{displayName:(r=n.displayName)!=null?r:n.name})}function m(n){let r=Object.assign({},n);for(let e in r)r[e]===void 0&&delete r[e];return r}function h(n,r=[]){let e=Object.assign({},n);for(let a of r)a in e&&delete e[a];return e}function H(n){return E.version.split(\".\")[0]>=\"19\"?n.props.ref:n.ref}function b(n){return n===j||n===Symbol.for(\"react.fragment\")}function D(n){return b(n.type)}export{A as RenderFeatures,C as RenderStrategy,m as compact,Y as forwardRefWithAs,b as isFragment,D as isFragmentInstance,V as mergeProps,K as useRender};\n","function t(...r){return Array.from(new Set(r.flatMap(n=>typeof n==\"string\"?n.split(\" \"):[]))).filter(Boolean).join(\" \")}export{t as classNames};\n","function u(r,n,...a){if(r in n){let e=n[r];return typeof e==\"function\"?e(...a):e}let t=new Error(`Tried to handle \"${r}\" but there is no handler defined. Only defined handlers are: ${Object.keys(n).map(e=>`\"${e}\"`).join(\", \")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}export{u as match};\n","import{useEffect as l,useRef as i}from\"react\";import{useEvent as r}from'./use-event.js';let u=Symbol();function T(t,n=!0){return Object.assign(t,{[u]:n})}function y(...t){let n=i(t);l(()=>{n.current=t},[t]);let c=r(e=>{for(let o of n.current)o!=null&&(typeof o==\"function\"?o(e):o.current=e)});return t.every(e=>e==null||(e==null?void 0:e[u]))?void 0:c}export{T as optionalRef,y as useSyncRefs};\n","var T,S;import{useRef as c,useState as b}from\"react\";import{disposables as m}from'../utils/disposables.js';import{useDisposables as g}from'./use-disposables.js';import{useFlags as y}from'./use-flags.js';import{useIsoMorphicEffect as L}from'./use-iso-morphic-effect.js';typeof process!=\"undefined\"&&typeof globalThis!=\"undefined\"&&typeof Element!=\"undefined\"&&((T=process==null?void 0:process.env)==null?void 0:T[\"NODE_ENV\"])===\"test\"&&typeof((S=Element==null?void 0:Element.prototype)==null?void 0:S.getAnimations)==\"undefined\"&&(Element.prototype.getAnimations=function(){return console.warn([\"Headless UI has polyfilled `Element.prototype.getAnimations` for your tests.\",\"Please install a proper polyfill e.g. `jsdom-testing-mocks`, to silence these warnings.\",\"\",\"Example usage:\",\"```js\",\"import { mockAnimationsApi } from 'jsdom-testing-mocks'\",\"mockAnimationsApi()\",\"```\"].join(`\n`)),[]});var A=(i=>(i[i.None=0]=\"None\",i[i.Closed=1]=\"Closed\",i[i.Enter=2]=\"Enter\",i[i.Leave=4]=\"Leave\",i))(A||{});function x(e){let r={};for(let t in e)e[t]===!0&&(r[`data-${t}`]=\"\");return r}function N(e,r,t,n){let[i,a]=b(t),{hasFlag:s,addFlag:o,removeFlag:l}=y(e&&i?3:0),u=c(!1),f=c(!1),E=g();return L(()=>{var d;if(e){if(t&&a(!0),!r){t&&o(3);return}return(d=n==null?void 0:n.start)==null||d.call(n,t),C(r,{inFlight:u,prepare(){f.current?f.current=!1:f.current=u.current,u.current=!0,!f.current&&(t?(o(3),l(4)):(o(4),l(2)))},run(){f.current?t?(l(3),o(4)):(l(4),o(3)):t?l(1):o(1)},done(){var p;f.current&&D(r)||(u.current=!1,l(7),t||a(!1),(p=n==null?void 0:n.end)==null||p.call(n,t))}})}},[e,t,r,E]),e?[i,{closed:s(1),enter:s(2),leave:s(4),transition:s(2)||s(4)}]:[t,{closed:void 0,enter:void 0,leave:void 0,transition:void 0}]}function C(e,{prepare:r,run:t,done:n,inFlight:i}){let a=m();return j(e,{prepare:r,inFlight:i}),a.nextFrame(()=>{t(),a.requestAnimationFrame(()=>{a.add(M(e,n))})}),a.dispose}function M(e,r){var a,s;let t=m();if(!e)return t.dispose;let n=!1;t.add(()=>{n=!0});let i=(s=(a=e.getAnimations)==null?void 0:a.call(e).filter(o=>o instanceof CSSTransition))!=null?s:[];return i.length===0?(r(),t.dispose):(Promise.allSettled(i.map(o=>o.finished)).then(()=>{n||r()}),t.dispose)}function j(e,{inFlight:r,prepare:t}){if(r!=null&&r.current){t();return}let n=e.style.transition;e.style.transition=\"none\",t(),e.offsetHeight,e.style.transition=n}function D(e){var t,n;return((n=(t=e.getAnimations)==null?void 0:t.call(e))!=null?n:[]).some(i=>i instanceof CSSTransition&&i.playState!==\"finished\")}export{x as transitionDataAttributes,N as useTransition};\n","import{useCallback as t,useState as b}from\"react\";function c(u=0){let[r,a]=b(u),g=t(e=>a(e),[]),s=t(e=>a(l=>l|e),[]),m=t(e=>(r&e)===e,[r]),n=t(e=>a(l=>l&~e),[]),F=t(e=>a(l=>l^e),[]);return{flags:r,setFlag:g,addFlag:s,hasFlag:m,removeFlag:n,toggleFlag:F}}export{c as useFlags};\n","import r,{createContext as l,useContext as d}from\"react\";let n=l(null);n.displayName=\"OpenClosedContext\";var i=(e=>(e[e.Open=1]=\"Open\",e[e.Closed=2]=\"Closed\",e[e.Closing=4]=\"Closing\",e[e.Opening=8]=\"Opening\",e))(i||{});function u(){return d(n)}function c({value:o,children:t}){return r.createElement(n.Provider,{value:o},t)}function s({children:o}){return r.createElement(n.Provider,{value:null},o)}export{c as OpenClosedProvider,s as ResetOpenClosedProvider,i as State,u as useOpenClosed};\n","import*as t from\"react\";import{env as f}from'../utils/env.js';function s(){let r=typeof document==\"undefined\";return\"useSyncExternalStore\"in t?(o=>o.useSyncExternalStore)(t)(()=>()=>{},()=>!1,()=>!r):!1}function l(){let r=s(),[e,n]=t.useState(f.isHandoffComplete);return e&&f.isHandoffComplete===!1&&n(!1),t.useEffect(()=>{e!==!0&&n(!0)},[e]),t.useEffect(()=>f.handoff(),[]),r?!1:e}export{l as useServerHandoffComplete};\n","import{useRef as r}from\"react\";import{useIsoMorphicEffect as t}from'./use-iso-morphic-effect.js';function f(){let e=r(!1);return t(()=>(e.current=!0,()=>{e.current=!1}),[]),e}export{f as useIsMounted};\n","\"use client\";import c,{Fragment as k,createContext as ne,useContext as q,useEffect as ge,useMemo as ie,useRef as b,useState as O}from\"react\";import{useDisposables as ve}from'../../hooks/use-disposables.js';import{useEvent as E}from'../../hooks/use-event.js';import{useIsMounted as be}from'../../hooks/use-is-mounted.js';import{useIsoMorphicEffect as D}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as Ee}from'../../hooks/use-latest-value.js';import{useServerHandoffComplete as re}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as oe}from'../../hooks/use-sync-refs.js';import{transitionDataAttributes as Se,useTransition as Re}from'../../hooks/use-transition.js';import{OpenClosedProvider as ye,State as x,useOpenClosed as se}from'../../internal/open-closed.js';import{classNames as Pe}from'../../utils/class-names.js';import{match as le}from'../../utils/match.js';import{RenderFeatures as xe,RenderStrategy as P,compact as Ne,forwardRefWithAs as J,isFragment as _e,useRender as ae}from'../../utils/render.js';function ue(e){var t;return!!(e.enter||e.enterFrom||e.enterTo||e.leave||e.leaveFrom||e.leaveTo)||!_e((t=e.as)!=null?t:de)||c.Children.count(e.children)===1}let V=ne(null);V.displayName=\"TransitionContext\";var De=(n=>(n.Visible=\"visible\",n.Hidden=\"hidden\",n))(De||{});function He(){let e=q(V);if(e===null)throw new Error(\"A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.\");return e}function Ae(){let e=q(w);if(e===null)throw new Error(\"A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.\");return e}let w=ne(null);w.displayName=\"NestingContext\";function M(e){return\"children\"in e?M(e.children):e.current.filter(({el:t})=>t.current!==null).filter(({state:t})=>t===\"visible\").length>0}function Te(e,t){let n=Ee(e),l=b([]),S=be(),R=ve(),d=E((o,i=P.Hidden)=>{let a=l.current.findIndex(({el:s})=>s===o);a!==-1&&(le(i,{[P.Unmount](){l.current.splice(a,1)},[P.Hidden](){l.current[a].state=\"hidden\"}}),R.microTask(()=>{var s;!M(l)&&S.current&&((s=n.current)==null||s.call(n))}))}),y=E(o=>{let i=l.current.find(({el:a})=>a===o);return i?i.state!==\"visible\"&&(i.state=\"visible\"):l.current.push({el:o,state:\"visible\"}),()=>d(o,P.Unmount)}),C=b([]),p=b(Promise.resolve()),h=b({enter:[],leave:[]}),g=E((o,i,a)=>{C.current.splice(0),t&&(t.chains.current[i]=t.chains.current[i].filter(([s])=>s!==o)),t==null||t.chains.current[i].push([o,new Promise(s=>{C.current.push(s)})]),t==null||t.chains.current[i].push([o,new Promise(s=>{Promise.all(h.current[i].map(([r,f])=>f)).then(()=>s())})]),i===\"enter\"?p.current=p.current.then(()=>t==null?void 0:t.wait.current).then(()=>a(i)):a(i)}),v=E((o,i,a)=>{Promise.all(h.current[i].splice(0).map(([s,r])=>r)).then(()=>{var s;(s=C.current.shift())==null||s()}).then(()=>a(i))});return ie(()=>({children:l,register:y,unregister:d,onStart:g,onStop:v,wait:p,chains:h}),[y,d,l,g,v,h,p])}let de=k,fe=xe.RenderStrategy;function Fe(e,t){var ee,te;let{transition:n=!0,beforeEnter:l,afterEnter:S,beforeLeave:R,afterLeave:d,enter:y,enterFrom:C,enterTo:p,entered:h,leave:g,leaveFrom:v,leaveTo:o,...i}=e,[a,s]=O(null),r=b(null),f=ue(e),U=oe(...f?[r,t,s]:t===null?[]:[t]),H=(ee=i.unmount)==null||ee?P.Unmount:P.Hidden,{show:u,appear:z,initial:K}=He(),[m,j]=O(u?\"visible\":\"hidden\"),Q=Ae(),{register:A,unregister:F}=Q;D(()=>A(r),[A,r]),D(()=>{if(H===P.Hidden&&r.current){if(u&&m!==\"visible\"){j(\"visible\");return}return le(m,{[\"hidden\"]:()=>F(r),[\"visible\"]:()=>A(r)})}},[m,r,A,F,u,H]);let G=re();D(()=>{if(f&&G&&m===\"visible\"&&r.current===null)throw new Error(\"Did you forget to passthrough the `ref` to the actual DOM node?\")},[r,m,G,f]);let ce=K&&!z,Y=z&&u&&K,B=b(!1),I=Te(()=>{B.current||(j(\"hidden\"),F(r))},Q),Z=E(W=>{B.current=!0;let L=W?\"enter\":\"leave\";I.onStart(r,L,_=>{_===\"enter\"?l==null||l():_===\"leave\"&&(R==null||R())})}),$=E(W=>{let L=W?\"enter\":\"leave\";B.current=!1,I.onStop(r,L,_=>{_===\"enter\"?S==null||S():_===\"leave\"&&(d==null||d())}),L===\"leave\"&&!M(I)&&(j(\"hidden\"),F(r))});ge(()=>{f&&n||(Z(u),$(u))},[u,f,n]);let pe=(()=>!(!n||!f||!G||ce))(),[,T]=Re(pe,a,u,{start:Z,end:$}),Ce=Ne({ref:U,className:((te=Pe(i.className,Y&&y,Y&&C,T.enter&&y,T.enter&&T.closed&&C,T.enter&&!T.closed&&p,T.leave&&g,T.leave&&!T.closed&&v,T.leave&&T.closed&&o,!T.transition&&u&&h))==null?void 0:te.trim())||void 0,...Se(T)}),N=0;m===\"visible\"&&(N|=x.Open),m===\"hidden\"&&(N|=x.Closed),u&&m===\"hidden\"&&(N|=x.Opening),!u&&m===\"visible\"&&(N|=x.Closing);let he=ae();return c.createElement(w.Provider,{value:I},c.createElement(ye,{value:N},he({ourProps:Ce,theirProps:i,defaultTag:de,features:fe,visible:m===\"visible\",name:\"Transition.Child\"})))}function Ie(e,t){let{show:n,appear:l=!1,unmount:S=!0,...R}=e,d=b(null),y=ue(e),C=oe(...y?[d,t]:t===null?[]:[t]);re();let p=se();if(n===void 0&&p!==null&&(n=(p&x.Open)===x.Open),n===void 0)throw new Error(\"A <Transition /> is used but it is missing a `show={true | false}` prop.\");let[h,g]=O(n?\"visible\":\"hidden\"),v=Te(()=>{n||g(\"hidden\")}),[o,i]=O(!0),a=b([n]);D(()=>{o!==!1&&a.current[a.current.length-1]!==n&&(a.current.push(n),i(!1))},[a,n]);let s=ie(()=>({show:n,appear:l,initial:o}),[n,l,o]);D(()=>{n?g(\"visible\"):!M(v)&&d.current!==null&&g(\"hidden\")},[n,v]);let r={unmount:S},f=E(()=>{var u;o&&i(!1),(u=e.beforeEnter)==null||u.call(e)}),U=E(()=>{var u;o&&i(!1),(u=e.beforeLeave)==null||u.call(e)}),H=ae();return c.createElement(w.Provider,{value:v},c.createElement(V.Provider,{value:s},H({ourProps:{...r,as:k,children:c.createElement(me,{ref:C,...r,...R,beforeEnter:f,beforeLeave:U})},theirProps:{},defaultTag:k,features:fe,visible:h===\"visible\",name:\"Transition\"})))}function Le(e,t){let n=q(V)!==null,l=se()!==null;return c.createElement(c.Fragment,null,!n&&l?c.createElement(X,{ref:t,...e}):c.createElement(me,{ref:t,...e}))}let X=J(Ie),me=J(Fe),Oe=J(Le),Ke=Object.assign(X,{Child:Oe,Root:X});export{Ke as Transition,Oe as TransitionChild};\n","\"use client\";\n\nimport Link from \"next/link\";\nimport { ChevronRight } from \"lucide-react\";\n\nfunction cn(...parts: Array<string | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport interface BreadcrumbItem {\n label: string;\n /** Omit (or leave undefined) to render the crumb as plain, non-clickable text. */\n href?: string;\n}\n\n/** Per-slot Tailwind classes for the breadcrumb trail. */\nexport type BreadcrumbsItemClasses = Partial<{\n baseContainer: string;\n crumbLink: string;\n crumbText: string;\n separator: string;\n}>;\n\n/**\n * Structural / theme defaults. Merged with `itemClasses` via\n * {@link mergeBreadcrumbsItemClasses}.\n */\nexport const BREADCRUMBS_DEFAULT_ITEM_CLASSES: Required<BreadcrumbsItemClasses> =\n {\n baseContainer: \"flex flex-row items-center gap-2 text-sm opacity-75\",\n crumbLink: \"hover:opacity-75 transition-all duration-300 underline-offset-2 hover:underline\",\n crumbText: \"font-semibold\",\n separator: \"h-4 w-4 opacity-50\",\n };\n\nexport function mergeBreadcrumbsItemClasses(\n overrides?: BreadcrumbsItemClasses,\n) {\n const d = BREADCRUMBS_DEFAULT_ITEM_CLASSES;\n return {\n baseContainer: cn(d.baseContainer, overrides?.baseContainer),\n crumbLink: cn(d.crumbLink, overrides?.crumbLink),\n crumbText: cn(d.crumbText, overrides?.crumbText),\n separator: cn(d.separator, overrides?.separator),\n };\n}\n\n/** Minimal, presentational breadcrumb trail (e.g. Menu -> Category -> Item). */\nexport function Breadcrumbs({\n items,\n itemClasses,\n}: {\n items: BreadcrumbItem[];\n itemClasses?: BreadcrumbsItemClasses;\n}) {\n const slots = mergeBreadcrumbsItemClasses(itemClasses);\n\n return (\n <nav aria-label=\"Breadcrumb\" className={slots.baseContainer}>\n {items.map((item, index) => (\n <span key={`${item.label}-${index}`} className=\"flex flex-row items-center gap-2\">\n {index > 0 && <ChevronRight className={slots.separator} />}\n {item.href ? (\n <Link href={item.href} className={slots.crumbLink}>\n {item.label}\n </Link>\n ) : (\n <span className={slots.crumbText}>{item.label}</span>\n )}\n </span>\n ))}\n </nav>\n );\n}\n","\"use client\";\n\nimport Link from \"next/link\";\nimport { useMenu } from \"@zorgo/universal/hooks/hooks\";\nimport type { Category, MenuItem } from \"@zorgo/universal/interfaces\";\nimport { menuItemSlug } from \"@zorgo/universal/utils/menuSlugs\";\n\nfunction cn(...parts: Array<string | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction money(cents: number) {\n return `$${(cents / 100).toFixed(2)}`;\n}\n\n/** Per-slot Tailwind classes for the grid menu layout. */\nexport type GridMenuItemClasses = Partial<{\n baseContainer: string;\n categoryContainer: string;\n categoryTitle: string;\n itemCardContainer: string;\n itemCard: string;\n itemCardImage: string;\n itemCardTextContainer: string;\n itemCardName: string;\n itemCardPrice: string;\n itemCardOldPrice: string;\n}>;\n\n/**\n * Structural / theme defaults. Merged with `itemClasses` via\n * {@link mergeGridMenuItemClasses}.\n */\nexport const GRID_MENU_DEFAULT_ITEM_CLASSES: Required<GridMenuItemClasses> = {\n baseContainer: \"flex flex-col gap-16\",\n categoryContainer: \"flex flex-col gap-8\",\n categoryTitle: \"text-4xl text-center font-extrabold text-primary\",\n itemCardContainer:\n \"flex flex-row flex-wrap gap-8 content-center justify-center py-4 max-w-7xl mx-auto\",\n itemCard:\n \"flex flex-col gap-4 no-underline w-60 hover:translate-y-[-2px] hover:opacity-75 transition-all duration-300\",\n itemCardImage:\n \"w-full aspect-square bg-background-recessed rounded-2xl overflow-hidden\",\n itemCardTextContainer: \"flex flex-col opacity-75 px-4 w-full\",\n itemCardName: \"text-xl font-semibold\",\n itemCardPrice: \"text-lg\",\n itemCardOldPrice: \"text-lg line-through opacity-60\",\n};\n\nexport function mergeGridMenuItemClasses(overrides?: GridMenuItemClasses) {\n const d = GRID_MENU_DEFAULT_ITEM_CLASSES;\n return {\n baseContainer: cn(d.baseContainer, overrides?.baseContainer),\n categoryContainer: cn(\n d.categoryContainer,\n overrides?.categoryContainer,\n ),\n categoryTitle: cn(d.categoryTitle, overrides?.categoryTitle),\n itemCardContainer: cn(\n d.itemCardContainer,\n overrides?.itemCardContainer,\n ),\n itemCard: cn(d.itemCard, overrides?.itemCard),\n itemCardImage: cn(d.itemCardImage, overrides?.itemCardImage),\n itemCardTextContainer: cn(\n d.itemCardTextContainer,\n overrides?.itemCardTextContainer,\n ),\n itemCardName: cn(d.itemCardName, overrides?.itemCardName),\n itemCardPrice: cn(d.itemCardPrice, overrides?.itemCardPrice),\n itemCardOldPrice: cn(d.itemCardOldPrice, overrides?.itemCardOldPrice),\n };\n}\n\nexport function GridMenu({\n items,\n categories,\n itemClasses,\n}: {\n items: MenuItem[];\n categories: Category[];\n itemClasses?: GridMenuItemClasses;\n}) {\n const { getItemImageUrl } = useMenu();\n const slots = mergeGridMenuItemClasses(itemClasses);\n\n return (\n <div className={slots.baseContainer}>\n {categories.map((category) => {\n const itemsInCategory = items.filter(\n (item) => item.category_id === category.category_id,\n );\n if (itemsInCategory.length === 0) {\n return null;\n }\n return (\n <div\n key={category.category_id}\n className={slots.categoryContainer}\n >\n <h1 className={slots.categoryTitle}>{category.name}</h1>\n\n <div className={slots.itemCardContainer}>\n {itemsInCategory.map((item) => (\n <ItemCard\n key={item.base_item_id}\n item={item}\n imageUrl={getItemImageUrl(item.image_path)}\n slots={slots}\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ItemCard({\n item,\n imageUrl,\n slots,\n}: {\n item: MenuItem;\n imageUrl?: string | null;\n slots: ReturnType<typeof mergeGridMenuItemClasses>;\n}) {\n // display_price is baked onto the variant by the SDK when a promo is live\n const variant = item.variants[0];\n const onSale =\n variant?.display_price != null && variant.display_price < variant.price;\n\n return (\n <Link\n href={`/menu/${menuItemSlug(item.name, item.base_item_id)}`}\n className={slots.itemCard}\n >\n <div className={slots.itemCardImage}>\n {imageUrl && (\n // eslint-disable-next-line @next/next/no-img-element\n <img\n src={imageUrl}\n alt={item.name}\n className=\"w-full h-full object-cover\"\n />\n )}\n </div>\n\n <div className={slots.itemCardTextContainer}>\n <p className={slots.itemCardName}>{item.name}</p>\n {variant && (\n <>\n {onSale ? (\n <>\n <p className={slots.itemCardPrice}>\n {money(variant.display_price!)}\n </p>\n <p className={slots.itemCardOldPrice}>\n {money(variant.price)}\n </p>\n </>\n ) : (\n <p className={slots.itemCardPrice}>\n {money(variant.price)}\n </p>\n )}\n </>\n )}\n </div>\n </Link>\n );\n}\n","\"use client\";\n\nimport Link from \"next/link\";\nimport { useState } from \"react\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport type { Category, MenuItem } from \"@zorgo/universal/interfaces\";\nimport { menuItemSlug } from \"@zorgo/universal/utils/menuSlugs\";\n\nfunction cn(...parts: Array<string | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction money(cents: number) {\n return `$${(cents / 100).toFixed(2)}`;\n}\n\n/** Per-slot Tailwind classes for the accordion menu layout. */\nexport type AccordionMenuItemClasses = Partial<{\n baseContainer: string;\n categoryContainer: string;\n categoryTrigger: string;\n categoryTitle: string;\n categoryIndicator: string;\n itemsContainer: string;\n itemCard: string;\n itemCardTextContainer: string;\n itemCardName: string;\n itemCardDescription: string;\n itemCardPriceContainer: string;\n itemCardPrice: string;\n itemCardOldPrice: string;\n}>;\n\n/**\n * Structural / theme defaults. Merged with `itemClasses` via\n * {@link mergeAccordionMenuItemClasses}.\n */\nexport const ACCORDION_MENU_DEFAULT_ITEM_CLASSES: Required<AccordionMenuItemClasses> =\n {\n baseContainer: \"flex flex-col gap-4\",\n categoryContainer:\n \"flex flex-col gap-4 p-4 bg-background-elevated border-3 border-foreground/[15%] rounded-xl shadow-sm\",\n categoryTrigger: \"flex flex-row items-center justify-between p-4\",\n categoryTitle: \"text-2xl font-bold\",\n categoryIndicator: \"h-8 w-8\",\n itemsContainer: \"flex-col gap-4\",\n itemCard:\n \"flex items-center justify-between gap-4 p-4 bg-background rounded-xl hover:translate-x-1 transition-all duration-300\",\n itemCardTextContainer: \"flex flex-col gap-2 opacity-75\",\n itemCardName: \"text-lg font-semibold\",\n itemCardDescription: \"text-lg opacity-75\",\n itemCardPriceContainer: \"flex flex-col gap-2 opacity-75\",\n itemCardPrice: \"text-lg font-semibold\",\n itemCardOldPrice: \"text-lg opacity-75 line-through\",\n };\n\nexport function mergeAccordionMenuItemClasses(\n overrides?: AccordionMenuItemClasses,\n) {\n const d = ACCORDION_MENU_DEFAULT_ITEM_CLASSES;\n return {\n baseContainer: cn(d.baseContainer, overrides?.baseContainer),\n categoryContainer: cn(\n d.categoryContainer,\n overrides?.categoryContainer,\n ),\n categoryTrigger: cn(d.categoryTrigger, overrides?.categoryTrigger),\n categoryTitle: cn(d.categoryTitle, overrides?.categoryTitle),\n categoryIndicator: cn(\n d.categoryIndicator,\n overrides?.categoryIndicator,\n ),\n itemsContainer: cn(d.itemsContainer, overrides?.itemsContainer),\n itemCard: cn(d.itemCard, overrides?.itemCard),\n itemCardTextContainer: cn(\n d.itemCardTextContainer,\n overrides?.itemCardTextContainer,\n ),\n itemCardName: cn(d.itemCardName, overrides?.itemCardName),\n itemCardDescription: cn(\n d.itemCardDescription,\n overrides?.itemCardDescription,\n ),\n itemCardPriceContainer: cn(\n d.itemCardPriceContainer,\n overrides?.itemCardPriceContainer,\n ),\n itemCardPrice: cn(d.itemCardPrice, overrides?.itemCardPrice),\n itemCardOldPrice: cn(d.itemCardOldPrice, overrides?.itemCardOldPrice),\n };\n}\n\nexport function AccordionMenu({\n items,\n categories,\n itemClasses,\n}: {\n items: MenuItem[];\n categories: Category[];\n itemClasses?: AccordionMenuItemClasses;\n}) {\n const slots = mergeAccordionMenuItemClasses(itemClasses);\n\n return (\n <div className={slots.baseContainer}>\n {categories.map((category) => {\n const itemsInCategory = items.filter(\n (item) => item.category_id === category.category_id,\n );\n if (itemsInCategory.length === 0) {\n return null;\n }\n return (\n <MenuCategory\n key={category.category_id}\n category={category}\n itemsInCategory={itemsInCategory}\n slots={slots}\n />\n );\n })}\n </div>\n );\n}\n\nfunction MenuCategory({\n category,\n itemsInCategory,\n slots,\n}: {\n category: Category;\n itemsInCategory: MenuItem[];\n slots: ReturnType<typeof mergeAccordionMenuItemClasses>;\n}) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n <div className={slots.categoryContainer}>\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className={slots.categoryTrigger}\n >\n <h2 className={slots.categoryTitle}>{category.name}</h2>\n {isExpanded ? (\n <ChevronUp className={slots.categoryIndicator} />\n ) : (\n <ChevronDown className={slots.categoryIndicator} />\n )}\n </button>\n <div\n className={cn(\n isExpanded ? \"flex\" : \"hidden\",\n slots.itemsContainer,\n )}\n >\n {itemsInCategory.map((item) => (\n <ItemCard\n key={item.base_item_id}\n item={item}\n slots={slots}\n />\n ))}\n </div>\n </div>\n );\n}\n\nfunction ItemCard({\n item,\n slots,\n}: {\n item: MenuItem;\n slots: ReturnType<typeof mergeAccordionMenuItemClasses>;\n}) {\n const variant = item.variants[0];\n const onSale =\n variant?.display_price != null && variant.display_price < variant.price;\n\n return (\n <Link\n href={`/menu/${menuItemSlug(item.name, item.base_item_id)}`}\n className={slots.itemCard}\n >\n <div className={slots.itemCardTextContainer}>\n <p className={slots.itemCardName}>{item.name}</p>\n {item.description && (\n <p className={slots.itemCardDescription}>\n {item.description}\n </p>\n )}\n </div>\n {variant && (\n <div className={slots.itemCardPriceContainer}>\n {onSale ? (\n <>\n <p className={slots.itemCardPrice}>\n {money(variant.display_price!)}\n </p>\n <p className={slots.itemCardOldPrice}>\n {money(variant.price)}\n </p>\n </>\n ) : (\n <p className={slots.itemCardPrice}>\n {money(variant.price)}\n </p>\n )}\n </div>\n )}\n </Link>\n );\n}\n","\"use client\";\n\nimport { Minus, Plus } from \"lucide-react\";\nimport { useItemCustomization, useMenu } from \"@zorgo/universal/hooks/hooks\";\nimport type { OrderItem } from \"@zorgo/universal/interfaces\";\nimport { Breadcrumbs } from \"./Breadcrumbs\";\n\nfunction cn(...parts: Array<string | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction money(cents: number) {\n return `$${(cents / 100).toFixed(2)}`;\n}\n\n/** Per-slot Tailwind classes for the item customization form. */\nexport type ItemCustomizationFormItemClasses = Partial<{\n baseContainer: string;\n title: string;\n description: string;\n section: string;\n sectionTitle: string;\n optionsRow: string;\n optionButton: string;\n optionButtonSelected: string;\n optionButtonUnselected: string;\n optionButtonLabel: string;\n optionButtonUpcharge: string;\n servingsRow: string;\n servingsLabel: string;\n servingsControls: string;\n incrementButton: string;\n servingsValue: string;\n ruleError: string;\n commentsTextarea: string;\n quantityRow: string;\n submitButton: string;\n notFound: string;\n}>;\n\n/**\n * Structural / theme defaults. Merged with `itemClasses` via\n * {@link mergeItemCustomizationFormItemClasses}.\n */\nexport const ITEM_CUSTOMIZATION_FORM_DEFAULT_ITEM_CLASSES: Required<ItemCustomizationFormItemClasses> =\n {\n baseContainer: \"flex flex-col gap-8\",\n title: \"text-4xl font-extrabold text-primary\",\n description: \"opacity-70 text-xl\",\n section:\n \"flex flex-col gap-2 shadow-sm rounded-xl p-4 bg-background-elevated border-3 border-foreground/[15%]\",\n sectionTitle: \"font-bold text-2xl py-4\",\n optionsRow: \"flex flex-row flex-wrap gap-2\",\n optionButton:\n \"flex flex-col items-start gap-0.5 p-3 px-4 rounded-xl border-3 text-lg hover:translate-y-[-2px] transition-all duration-300\",\n optionButtonSelected: \"bg-background-recessed border-transparent\",\n optionButtonUnselected:\n \"bg-background-elevated border-foreground/[15%]\",\n optionButtonLabel: \"font-semibold leading-tight\",\n optionButtonUpcharge: \"opacity-60\",\n servingsRow: \"flex flex-row items-center justify-between gap-4 text-xl\",\n servingsLabel: \"opacity-75\",\n servingsControls: \"flex flex-row items-center gap-2\",\n incrementButton:\n \"bg-background text-foreground w-10 h-10 rounded-xl flex items-center justify-center hover:bg-foreground hover:text-background transition-all duration-300\",\n servingsValue: \"w-8 md:w-12 font-semibold opacity-75 text-center\",\n ruleError: \"text-sm text-red-500\",\n commentsTextarea:\n \"p-4 rounded-xl border-3 border-foreground/[15%] outline-none resize-none\",\n quantityRow: \"flex flex-row items-center gap-4 text-xl\",\n submitButton:\n \"bg-primary text-primary-foreground p-4 rounded-xl text-lg font-semibold hover:bg-primary/80 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-300\",\n notFound: \"\",\n };\n\nexport function mergeItemCustomizationFormItemClasses(\n overrides?: ItemCustomizationFormItemClasses,\n) {\n const d = ITEM_CUSTOMIZATION_FORM_DEFAULT_ITEM_CLASSES;\n return {\n baseContainer: cn(d.baseContainer, overrides?.baseContainer),\n title: cn(d.title, overrides?.title),\n description: cn(d.description, overrides?.description),\n section: cn(d.section, overrides?.section),\n sectionTitle: cn(d.sectionTitle, overrides?.sectionTitle),\n optionsRow: cn(d.optionsRow, overrides?.optionsRow),\n optionButton: cn(d.optionButton, overrides?.optionButton),\n optionButtonSelected: cn(\n d.optionButtonSelected,\n overrides?.optionButtonSelected,\n ),\n optionButtonUnselected: cn(\n d.optionButtonUnselected,\n overrides?.optionButtonUnselected,\n ),\n optionButtonLabel: cn(\n d.optionButtonLabel,\n overrides?.optionButtonLabel,\n ),\n optionButtonUpcharge: cn(\n d.optionButtonUpcharge,\n overrides?.optionButtonUpcharge,\n ),\n servingsRow: cn(d.servingsRow, overrides?.servingsRow),\n servingsLabel: cn(d.servingsLabel, overrides?.servingsLabel),\n servingsControls: cn(d.servingsControls, overrides?.servingsControls),\n incrementButton: cn(d.incrementButton, overrides?.incrementButton),\n servingsValue: cn(d.servingsValue, overrides?.servingsValue),\n ruleError: cn(d.ruleError, overrides?.ruleError),\n commentsTextarea: cn(d.commentsTextarea, overrides?.commentsTextarea),\n quantityRow: cn(d.quantityRow, overrides?.quantityRow),\n submitButton: cn(d.submitButton, overrides?.submitButton),\n notFound: cn(d.notFound, overrides?.notFound),\n };\n}\n\nexport function ItemCustomizationForm({\n baseItemId,\n seed,\n editIndex,\n itemClasses,\n onSubmitSuccess,\n}: {\n baseItemId: number;\n seed?: OrderItem;\n editIndex?: number;\n itemClasses?: ItemCustomizationFormItemClasses;\n onSubmitSuccess?: () => void;\n}) {\n const slots = mergeItemCustomizationFormItemClasses(itemClasses);\n\n const {\n item,\n variant,\n variants,\n setVariant,\n ruleGroups,\n unmetRule,\n canSubmit,\n submit,\n quantity,\n setQuantity,\n comments,\n setComments,\n setComponentServings,\n price,\n salePrice,\n isEditMode,\n draft,\n } = useItemCustomization(baseItemId, seed, editIndex);\n\n const { categories } = useMenu();\n\n if (!item) {\n return <div className={slots.notFound}>Item not found.</div>;\n }\n\n const category = categories.find(\n (c) => c.category_id === item.category_id,\n );\n\n return (\n <div className={slots.baseContainer}>\n <Breadcrumbs\n items={[\n { label: \"Menu\", href: \"/menu\" },\n ...(category ? [{ label: category.name }] : []),\n { label: item.name },\n ]}\n />\n <h1 className={slots.title}>{item.name}</h1>\n {item.description && (\n <p className={slots.description}>{item.description}</p>\n )}\n\n {variants.length > 1 && (\n <div className={slots.section}>\n <h2 className={slots.sectionTitle}>Variants</h2>\n <div className={slots.optionsRow}>\n {variants.map((v) => (\n <OptionButton\n key={v.item_id}\n label={v.name}\n subtext={money(v.price)}\n selected={v.item_id === variant.item_id}\n onClick={() => setVariant(v)}\n slots={slots}\n />\n ))}\n </div>\n </div>\n )}\n\n {(variant.components?.length ?? 0) > 0 && (\n <div className={slots.section}>\n <h2 className={slots.sectionTitle}>Includes</h2>\n <div className={slots.optionsRow}>\n {variant.components!.map((component) => {\n const defaultServings =\n component.servings_per_item ?? 1;\n const servings =\n draft?.components?.find(\n (c) => c.id === component.id,\n )?.quantity_servings ?? defaultServings;\n const selected = servings > 0;\n return (\n <OptionButton\n key={component.id}\n label={component.name}\n selected={selected}\n onClick={() =>\n setComponentServings(\n component.id,\n selected ? 0 : defaultServings,\n )\n }\n slots={slots}\n />\n );\n })}\n </div>\n </div>\n )}\n\n {ruleGroups.map((rule) => (\n <div key={rule.rule_id} className={slots.section}>\n <h2 className={slots.sectionTitle}>{rule.group_name}</h2>\n\n <div className={slots.optionsRow}>\n {rule.options.map((option) => (\n <OptionButton\n key={option.key}\n label={option.name}\n subtext={\n option.upcharge > 0\n ? `+${money(option.upcharge)}`\n : undefined\n }\n selected={option.selected}\n onClick={option.toggle}\n slots={slots}\n />\n ))}\n </div>\n\n {rule.message() && (\n <p className={slots.ruleError}>{rule.message()}</p>\n )}\n </div>\n ))}\n\n <div className={slots.section}>\n <h2 className={slots.sectionTitle}>Comments</h2>\n <textarea\n value={comments}\n onChange={(e) => setComments(e.target.value)}\n placeholder=\"Special instructions...\"\n className={slots.commentsTextarea}\n rows={2}\n />\n </div>\n\n <div className={slots.section}>\n <h2 className={slots.sectionTitle}>How many?</h2>\n <div className={slots.quantityRow}>\n <button\n type=\"button\"\n className={slots.incrementButton}\n onClick={() => setQuantity((q) => Math.max(1, q - 1))}\n >\n <Minus className=\"h-4 w-4\" />\n </button>\n <p className={slots.servingsValue}>{quantity}</p>\n <button\n type=\"button\"\n className={slots.incrementButton}\n onClick={() => setQuantity((q) => q + 1)}\n >\n <Plus className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n\n <button\n type=\"button\"\n disabled={!canSubmit}\n onClick={() => {\n submit();\n onSubmitSuccess?.();\n }}\n className={slots.submitButton}\n >\n {unmetRule\n ? `Choose ${unmetRule.group_name}`\n : `${isEditMode ? \"Save changes\" : \"Add to cart\"} — ${money(salePrice ?? price)}`}\n </button>\n </div>\n );\n}\n\nfunction OptionButton({\n label,\n subtext,\n selected,\n onClick,\n slots,\n}: {\n label: string;\n subtext?: string;\n selected: boolean;\n onClick: () => void;\n slots: ReturnType<typeof mergeItemCustomizationFormItemClasses>;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n slots.optionButton,\n selected\n ? slots.optionButtonSelected\n : slots.optionButtonUnselected,\n )}\n >\n <span className={slots.optionButtonLabel}>{label}</span>\n {subtext && (\n <span className={slots.optionButtonUpcharge}>{subtext}</span>\n )}\n </button>\n );\n}\n","\"use client\";\n\nimport { useMemo, useState } from \"react\";\nimport { Search } from \"lucide-react\";\nimport type { Location } from \"@zorgo/universal/interfaces\";\n\nfunction cn(...parts: Array<string | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction searchableText(location: Location) {\n return `${location.name} ${location.address ?? \"\"}`.toLowerCase();\n}\n\n/** Rank: 0 = starts-with, 1 = includes, 2 = no match. Lower is better. */\nfunction matchRank(location: Location, query: string): number {\n const text = searchableText(location);\n const q = query.trim().toLowerCase();\n if (!q) return 0;\n if (text.startsWith(q) || location.name.toLowerCase().startsWith(q)) {\n return 0;\n }\n if (text.includes(q)) return 1;\n return 2;\n}\n\nfunction rankLocations(\n locations: Location[],\n query: string,\n pinnedLocationId?: number | null,\n): Location[] {\n const q = query.trim();\n const ranked = q\n ? [...locations].sort((a, b) => {\n const rankDiff = matchRank(a, q) - matchRank(b, q);\n if (rankDiff !== 0) return rankDiff;\n return a.name.localeCompare(b.name);\n })\n : [...locations];\n\n if (pinnedLocationId == null) return ranked;\n\n const pinnedIndex = ranked.findIndex(\n (location) => location.location_id === pinnedLocationId,\n );\n if (pinnedIndex <= 0) return ranked;\n\n const [pinned] = ranked.splice(pinnedIndex, 1);\n if (!pinned) return ranked;\n return [pinned, ...ranked];\n}\n\n/** Per-slot Tailwind classes for the find-location layout. */\nexport type FindLocationItemClasses = Partial<{\n baseContainer: string;\n searchContainer: string;\n searchIcon: string;\n searchInput: string;\n noMatchesMessage: string;\n emptyMessage: string;\n list: string;\n locationRow: string;\n locationRowSelected: string;\n locationRowUnselected: string;\n locationButton: string;\n locationName: string;\n locationAddress: string;\n selectButton: string;\n}>;\n\n/**\n * Structural / theme defaults. Merged with `itemClasses` via\n * {@link mergeFindLocationItemClasses}.\n */\nexport const FIND_LOCATION_DEFAULT_ITEM_CLASSES: Required<FindLocationItemClasses> =\n {\n baseContainer: \"flex flex-col gap-6\",\n searchContainer: \"relative flex items-center\",\n searchIcon:\n \"absolute left-4 h-5 w-5 text-foreground opacity-50 pointer-events-none\",\n searchInput:\n \"w-full rounded-xl bg-background-recessed opacity-75 py-3 pl-12 pr-4 text-lg text-foreground placeholder:opacity-50 outline-none focus:opacity-100 transition-all duration-300\",\n noMatchesMessage: \"text-center opacity-75 text-sm\",\n emptyMessage: \"text-center opacity-75 py-8\",\n list: \"flex flex-col gap-3\",\n locationRow:\n \"flex items-center justify-between gap-4 p-4 rounded-xl border-3 border-foreground/[15%] shadow-sm hover:translate-x-1 transition-all duration-300 w-full\",\n locationRowSelected: \"bg-background-elevated\",\n locationRowUnselected: \"bg-background-recessed\",\n locationButton:\n \"flex flex-col gap-1 text-left flex-1 min-w-0\",\n locationName: \"text-lg font-semibold text-foreground\",\n locationAddress: \"text-base opacity-75 whitespace-pre-line\",\n selectButton:\n \"text-lg font-semibold px-4 py-3 rounded-xl bg-primary text-primary-foreground hover:opacity-75 transition-all duration-300 shrink-0\",\n };\n\nexport function mergeFindLocationItemClasses(\n overrides?: FindLocationItemClasses,\n) {\n const d = FIND_LOCATION_DEFAULT_ITEM_CLASSES;\n return {\n baseContainer: cn(d.baseContainer, overrides?.baseContainer),\n searchContainer: cn(d.searchContainer, overrides?.searchContainer),\n searchIcon: cn(d.searchIcon, overrides?.searchIcon),\n searchInput: cn(d.searchInput, overrides?.searchInput),\n noMatchesMessage: cn(d.noMatchesMessage, overrides?.noMatchesMessage),\n emptyMessage: cn(d.emptyMessage, overrides?.emptyMessage),\n list: cn(d.list, overrides?.list),\n locationRow: cn(d.locationRow, overrides?.locationRow),\n locationRowSelected: cn(\n d.locationRowSelected,\n overrides?.locationRowSelected,\n ),\n locationRowUnselected: cn(\n d.locationRowUnselected,\n overrides?.locationRowUnselected,\n ),\n locationButton: cn(d.locationButton, overrides?.locationButton),\n locationName: cn(d.locationName, overrides?.locationName),\n locationAddress: cn(d.locationAddress, overrides?.locationAddress),\n selectButton: cn(d.selectButton, overrides?.selectButton),\n };\n}\n\nexport function FindLocation({\n locations,\n initialSelected,\n onSelect,\n itemClasses,\n}: {\n locations: Location[];\n /** Seeds the internal highlight and stays pinned at the top of the list. */\n initialSelected?: Location | null;\n onSelect: (location: Location) => void;\n itemClasses?: FindLocationItemClasses;\n}) {\n const [query, setQuery] = useState(\"\");\n const [selected, setSelected] = useState<Location | null>(\n () => initialSelected ?? null,\n );\n const slots = mergeFindLocationItemClasses(itemClasses);\n const pinnedLocationId = initialSelected?.location_id;\n\n const ranked = useMemo(\n () => rankLocations(locations, query, pinnedLocationId),\n [locations, query, pinnedLocationId],\n );\n\n const trimmedQuery = query.trim();\n const noMatches =\n trimmedQuery.length > 0 &&\n locations.every((location) => matchRank(location, trimmedQuery) === 2);\n\n return (\n <div className={slots.baseContainer}>\n <div className={slots.searchContainer}>\n <Search className={slots.searchIcon} strokeWidth={2} />\n <input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Search by name or address\"\n className={slots.searchInput}\n aria-label=\"Search locations\"\n />\n </div>\n\n {noMatches && (\n <p className={slots.noMatchesMessage}>\n No locations match “{trimmedQuery}”. Showing all\n locations anyway.\n </p>\n )}\n\n {ranked.length === 0 ? (\n <p className={slots.emptyMessage}>No locations available.</p>\n ) : (\n <ul className={slots.list}>\n {ranked.map((location) => {\n const isSelected =\n selected?.location_id === location.location_id;\n return (\n <li\n key={location.location_id}\n className={cn(\n slots.locationRow,\n isSelected\n ? slots.locationRowSelected\n : slots.locationRowUnselected,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setSelected(location)}\n aria-pressed={isSelected}\n className={slots.locationButton}\n >\n <p className={slots.locationName}>\n {location.name}\n </p>\n {location.address && (\n <p className={slots.locationAddress}>\n {location.address}\n </p>\n )}\n </button>\n {isSelected && (\n <button\n type=\"button\"\n onClick={() => onSelect(location)}\n className={slots.selectButton}\n >\n Select\n </button>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState, type ReactNode } from \"react\";\nimport Link from \"next/link\";\nimport {\n\tElements,\n\tPaymentElement,\n\tuseElements,\n\tuseStripe,\n} from \"@stripe/react-stripe-js\";\nimport { Minus, Pencil, Plus } from \"lucide-react\";\nimport {\n\tuseCart,\n\tuseCustomer,\n\tuseLocation,\n\tuseModal,\n\tusePayment,\n\tusePromotions,\n} from \"@zorgo/universal/hooks/hooks\";\nimport {\n\tDynamicFormShell,\n\tNameFields,\n\tPhoneField,\n\tEmailField,\n\tFieldError,\n\tCheckboxField,\n\tSubmitButton,\n} from \"@zorgo/universal/components/Form\";\nimport type { Customer, OrderItem } from \"@zorgo/universal/interfaces\";\n\nfunction money(cents: number) {\n\treturn `$${(cents / 100).toFixed(2)}`;\n}\n\nfunction cn(...parts: Array<string | undefined | false>) {\n\treturn parts.filter(Boolean).join(\" \");\n}\n\n/** Per-slot Tailwind classes for the checkout form. */\nexport type CheckoutFormItemClasses = Partial<{\n\tshell: string;\n\tshellInner: string;\n\tpageTitle: string;\n\tprimaryButton: string;\n\tsecondaryButton: string;\n\tincrementButton: string;\n\tsurface: string;\n\tfieldInput: string;\n\tfieldContainer: string;\n\tfieldLabel: string;\n\tfieldError: string;\n\tstatusPanel: string;\n\tstatusTitle: string;\n\tstatusMessage: string;\n\tstatusMessageError: string;\n\tstatusActions: string;\n\tstepSection: string;\n\tsectionTitle: string;\n\tcartList: string;\n\ttotals: string;\n\ttotalsRow: string;\n\ttotalsDivider: string;\n\ttotalsTotalRow: string;\n\tform: string;\n\tformActions: string;\n\tsubmitError: string;\n\tpaymentSurface: string;\n\tsteps: string;\n\tstepBadge: string;\n\tstepBadgeActive: string;\n\tstepBadgeInactive: string;\n\tstepLabel: string;\n\tstepLabelActive: string;\n\tstepLabelInactive: string;\n\tstepDivider: string;\n\tstepDividerActive: string;\n\tstepDividerInactive: string;\n\tcartLine: string;\n\tcartLineName: string;\n\tcartLineSelection: string;\n\tcartLinePrice: string;\n\tcartLineControls: string;\n\tcartLineQuantity: string;\n\tpromoApplied: string;\n\tpromoAppliedLabel: string;\n\tpromoRow: string;\n\tpromoInput: string;\n\tpromoError: string;\n}>;\n\n/**\n * Structural / theme defaults. Merged with `itemClasses` via\n * {@link mergeCheckoutFormItemClasses}.\n */\nexport const CHECKOUT_FORM_DEFAULT_ITEM_CLASSES: Required<CheckoutFormItemClasses> =\n\t{\n\t\tshell: \"\",\n\t\tshellInner: \"max-w-2xl mx-auto w-full flex flex-col gap-6\",\n\t\tpageTitle: \"text-4xl font-extrabold text-primary text-center mb-8\",\n\t\tprimaryButton:\n\t\t\t\"text-lg font-semibold px-4 py-3 rounded-xl bg-primary text-primary-foreground hover:opacity-75 transition-all duration-300 disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\tsecondaryButton:\n\t\t\t\"text-lg font-semibold px-4 py-3 rounded-xl bg-background-recessed text-foreground border-3 border-foreground/[15%] hover:opacity-75 transition-all duration-300\",\n\t\tincrementButton:\n\t\t\t\"bg-background-recessed text-foreground w-10 h-10 rounded-xl flex items-center justify-center hover:bg-foreground hover:text-background transition-all duration-300\",\n\t\tsurface:\n\t\t\t\"rounded-xl bg-background-elevated border-3 border-foreground/[15%] shadow-sm\",\n\t\tfieldInput:\n\t\t\t\"w-full bg-transparent outline-none text-lg font-semibold text-foreground placeholder:opacity-50\",\n\t\tfieldContainer:\n\t\t\t\"flex flex-col gap-1 w-full p-4 rounded-xl bg-background-elevated border-3 border-foreground/[15%]\",\n\t\tfieldLabel: \"text-xl opacity-50 text-foreground\",\n\t\tfieldError: \"text-xl text-red-500\",\n\t\tstatusPanel:\n\t\t\t\"flex flex-col gap-6 items-center text-center p-8 w-full\",\n\t\tstatusTitle: \"text-3xl font-semibold\",\n\t\tstatusMessage: \"text-xl max-w-md opacity-60\",\n\t\tstatusMessageError: \"text-xl max-w-md text-red-500\",\n\t\tstatusActions: \"w-full max-w-sm flex flex-col gap-3\",\n\t\tstepSection: \"flex flex-col gap-6\",\n\t\tsectionTitle: \"text-3xl font-semibold mt-8\",\n\t\tcartList: \"flex flex-col gap-3\",\n\t\ttotals: \"flex flex-col gap-2 p-4\",\n\t\ttotalsRow: \"flex flex-row justify-between text-xl opacity-75\",\n\t\ttotalsDivider: \"h-[2px] bg-foreground/20 rounded-xl w-full\",\n\t\ttotalsTotalRow:\n\t\t\t\"flex flex-row justify-between text-2xl font-semibold pt-2\",\n\t\tform: \"flex flex-col gap-4 w-full\",\n\t\tformActions: \"flex flex-row items-center justify-between gap-3\",\n\t\tsubmitError: \"text-sm text-red-500\",\n\t\tpaymentSurface: \"p-4\",\n\t\tsteps: \"flex flex-row items-center gap-2 w-full\",\n\t\tstepBadge:\n\t\t\t\"w-10 h-10 rounded-full flex items-center justify-center text-xl font-semibold transition-all duration-300\",\n\t\tstepBadgeActive: \"bg-foreground text-background\",\n\t\tstepBadgeInactive: \"bg-background-recessed text-foreground opacity-60\",\n\t\tstepLabel: \"text-xl transition-all duration-300\",\n\t\tstepLabelActive: \"font-semibold\",\n\t\tstepLabelInactive: \"opacity-60\",\n\t\tstepDivider: \"flex-1 h-[2px] transition-all duration-300\",\n\t\tstepDividerActive: \"bg-foreground\",\n\t\tstepDividerInactive: \"bg-foreground/15\",\n\t\tcartLine:\n\t\t\t\"flex flex-row items-start justify-between gap-4 p-4 w-full\",\n\t\tcartLineName: \"text-xl font-semibold text-foreground\",\n\t\tcartLineSelection: \"text-lg opacity-50\",\n\t\tcartLinePrice: \"text-lg font-semibold opacity-75\",\n\t\tcartLineControls:\n\t\t\t\"flex flex-col flex-col-reverse md:flex-row items-center gap-3 shrink-0\",\n\t\tcartLineQuantity: \"w-8 text-xl font-semibold text-center\",\n\t\tpromoApplied:\n\t\t\t\"flex flex-row items-center justify-between gap-4 p-4 w-full\",\n\t\tpromoAppliedLabel: \"flex-1 text-lg font-semibold\",\n\t\tpromoRow: \"flex flex-row gap-3\",\n\t\tpromoInput:\n\t\t\t\"flex-1 rounded-xl bg-background-recessed border-3 border-transparent py-3 px-4 text-lg font-semibold text-foreground placeholder:opacity-50 outline-none focus:border-foreground/15 transition-all duration-300\",\n\t\tpromoError: \"text-xl text-red-500\",\n\t};\n\nexport function mergeCheckoutFormItemClasses(\n\toverrides?: CheckoutFormItemClasses,\n) {\n\tconst d = CHECKOUT_FORM_DEFAULT_ITEM_CLASSES;\n\treturn {\n\t\tshell: cn(d.shell, overrides?.shell),\n\t\tshellInner: cn(d.shellInner, overrides?.shellInner),\n\t\tpageTitle: cn(d.pageTitle, overrides?.pageTitle),\n\t\tprimaryButton: cn(d.primaryButton, overrides?.primaryButton),\n\t\tsecondaryButton: cn(d.secondaryButton, overrides?.secondaryButton),\n\t\tincrementButton: cn(d.incrementButton, overrides?.incrementButton),\n\t\tsurface: cn(d.surface, overrides?.surface),\n\t\tfieldInput: cn(d.fieldInput, overrides?.fieldInput),\n\t\tfieldContainer: cn(d.fieldContainer, overrides?.fieldContainer),\n\t\tfieldLabel: cn(d.fieldLabel, overrides?.fieldLabel),\n\t\tfieldError: cn(d.fieldError, overrides?.fieldError),\n\t\tstatusPanel: cn(d.statusPanel, overrides?.statusPanel),\n\t\tstatusTitle: cn(d.statusTitle, overrides?.statusTitle),\n\t\tstatusMessage: cn(d.statusMessage, overrides?.statusMessage),\n\t\tstatusMessageError: cn(\n\t\t\td.statusMessageError,\n\t\t\toverrides?.statusMessageError,\n\t\t),\n\t\tstatusActions: cn(d.statusActions, overrides?.statusActions),\n\t\tstepSection: cn(d.stepSection, overrides?.stepSection),\n\t\tsectionTitle: cn(d.sectionTitle, overrides?.sectionTitle),\n\t\tcartList: cn(d.cartList, overrides?.cartList),\n\t\ttotals: cn(d.totals, overrides?.totals),\n\t\ttotalsRow: cn(d.totalsRow, overrides?.totalsRow),\n\t\ttotalsDivider: cn(d.totalsDivider, overrides?.totalsDivider),\n\t\ttotalsTotalRow: cn(d.totalsTotalRow, overrides?.totalsTotalRow),\n\t\tform: cn(d.form, overrides?.form),\n\t\tformActions: cn(d.formActions, overrides?.formActions),\n\t\tsubmitError: cn(d.submitError, overrides?.submitError),\n\t\tpaymentSurface: cn(d.paymentSurface, overrides?.paymentSurface),\n\t\tsteps: cn(d.steps, overrides?.steps),\n\t\tstepBadge: cn(d.stepBadge, overrides?.stepBadge),\n\t\tstepBadgeActive: cn(d.stepBadgeActive, overrides?.stepBadgeActive),\n\t\tstepBadgeInactive: cn(\n\t\t\td.stepBadgeInactive,\n\t\t\toverrides?.stepBadgeInactive,\n\t\t),\n\t\tstepLabel: cn(d.stepLabel, overrides?.stepLabel),\n\t\tstepLabelActive: cn(d.stepLabelActive, overrides?.stepLabelActive),\n\t\tstepLabelInactive: cn(\n\t\t\td.stepLabelInactive,\n\t\t\toverrides?.stepLabelInactive,\n\t\t),\n\t\tstepDivider: cn(d.stepDivider, overrides?.stepDivider),\n\t\tstepDividerActive: cn(\n\t\t\td.stepDividerActive,\n\t\t\toverrides?.stepDividerActive,\n\t\t),\n\t\tstepDividerInactive: cn(\n\t\t\td.stepDividerInactive,\n\t\t\toverrides?.stepDividerInactive,\n\t\t),\n\t\tcartLine: cn(d.cartLine, overrides?.cartLine),\n\t\tcartLineName: cn(d.cartLineName, overrides?.cartLineName),\n\t\tcartLineSelection: cn(\n\t\t\td.cartLineSelection,\n\t\t\toverrides?.cartLineSelection,\n\t\t),\n\t\tcartLinePrice: cn(d.cartLinePrice, overrides?.cartLinePrice),\n\t\tcartLineControls: cn(d.cartLineControls, overrides?.cartLineControls),\n\t\tcartLineQuantity: cn(d.cartLineQuantity, overrides?.cartLineQuantity),\n\t\tpromoApplied: cn(d.promoApplied, overrides?.promoApplied),\n\t\tpromoAppliedLabel: cn(\n\t\t\td.promoAppliedLabel,\n\t\t\toverrides?.promoAppliedLabel,\n\t\t),\n\t\tpromoRow: cn(d.promoRow, overrides?.promoRow),\n\t\tpromoInput: cn(d.promoInput, overrides?.promoInput),\n\t\tpromoError: cn(d.promoError, overrides?.promoError),\n\t};\n}\n\ntype Slots = ReturnType<typeof mergeCheckoutFormItemClasses>;\n\n/**\n * Full checkout flow: cart + customer details, then Stripe payment.\n * The order + payment intent are created on details submit (not on mount),\n * so the collected customer and any applied promo are baked into the charge.\n */\nexport function CheckoutForm({\n\titemClasses,\n\thomeHref = \"/\",\n\tmenuHref = \"/menu\",\n\tcheckoutHref = \"/checkout\",\n}: {\n\titemClasses?: CheckoutFormItemClasses;\n\thomeHref?: string;\n\tmenuHref?: string;\n\tcheckoutHref?: string;\n}) {\n\tconst slots = mergeCheckoutFormItemClasses(itemClasses);\n\tconst {\n\t\tclientSecret,\n\t\tstripe,\n\t\telementOptions,\n\t\tisReady,\n\t\tisLoading,\n\t\terror,\n\t\tgetReturnStatus,\n\t} = usePayment();\n\tconst { isEmpty, resetCart } = useCart();\n\tconst { currentLocation, needsLocationSelection } = useLocation({\n\t\tpromptLocationSelection: true,\n\t});\n\tconst { open } = useModal();\n\n\tconst [returnStatus, setReturnStatus] = useState<ReturnType<\n\t\ttypeof getReturnStatus\n\t> | null>(null);\n\tuseEffect(() => {\n\t\tif (window.location.search.includes(\"redirect_status\")) {\n\t\t\tconst status = getReturnStatus(window.location.href);\n\t\t\tsetReturnStatus(status);\n\t\t\tif (status.succeeded) resetCart();\n\t\t}\n\t}, []);\n\n\tif (returnStatus) {\n\t\treturn (\n\t\t\t<Shell slots={slots}>\n\t\t\t\t{returnStatus.succeeded ? (\n\t\t\t\t\t<StatusPanel\n\t\t\t\t\t\tslots={slots}\n\t\t\t\t\t\ttitle=\"You're all set\"\n\t\t\t\t\t\tmessage=\"Payment successful. Thank you!\"\n\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\thref={homeHref}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tslots.primaryButton,\n\t\t\t\t\t\t\t\t\t\"block w-full text-center\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tBack home\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<StatusPanel\n\t\t\t\t\t\tslots={slots}\n\t\t\t\t\t\ttitle=\"Payment didn't go through\"\n\t\t\t\t\t\tmessage={returnStatus.error}\n\t\t\t\t\t\ttone=\"error\"\n\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\thref={checkoutHref}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tslots.primaryButton,\n\t\t\t\t\t\t\t\t\t\"block w-full text-center\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tTry again\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</Shell>\n\t\t);\n\t}\n\n\tif (isEmpty && !isLoading && !clientSecret) {\n\t\treturn (\n\t\t\t<Shell slots={slots}>\n\t\t\t\t<StatusPanel\n\t\t\t\t\tslots={slots}\n\t\t\t\t\ttitle=\"Your cart is empty\"\n\t\t\t\t\tmessage=\"Add something from the menu to get started.\"\n\t\t\t\t\taction={\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\thref={menuHref}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tslots.primaryButton,\n\t\t\t\t\t\t\t\t\"block w-full text-center\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tBrowse the menu\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</Shell>\n\t\t);\n\t}\n\n\tif (error) {\n\t\treturn (\n\t\t\t<Shell slots={slots}>\n\t\t\t\t<StatusPanel\n\t\t\t\t\tslots={slots}\n\t\t\t\t\ttitle=\"Something went wrong\"\n\t\t\t\t\tmessage={error}\n\t\t\t\t\ttone=\"error\"\n\t\t\t\t\taction={\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\thref={menuHref}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tslots.primaryButton,\n\t\t\t\t\t\t\t\t\"block w-full text-center\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tBack to menu\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</Shell>\n\t\t);\n\t}\n\n\tif (needsLocationSelection) {\n\t\treturn (\n\t\t\t<Shell slots={slots}>\n\t\t\t\t<StatusPanel\n\t\t\t\t\tslots={slots}\n\t\t\t\t\ttitle=\"Choose a location\"\n\t\t\t\t\tmessage=\"Please choose a location to continue checkout.\"\n\t\t\t\t\taction={\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => open(\"FIND_LOCATION_MODAL\")}\n\t\t\t\t\t\t\tclassName={cn(slots.primaryButton, \"w-full\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tSelect a location\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</Shell>\n\t\t);\n\t}\n\n\tif (isReady && elementOptions) {\n\t\treturn (\n\t\t\t<Shell slots={slots}>\n\t\t\t\t<Elements\n\t\t\t\t\tkey={currentLocation?.stripe_account_id}\n\t\t\t\t\tstripe={stripe!}\n\t\t\t\t\toptions={elementOptions}\n\t\t\t\t>\n\t\t\t\t\t<PaymentStep slots={slots} checkoutHref={checkoutHref} />\n\t\t\t\t</Elements>\n\t\t\t</Shell>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Shell slots={slots}>\n\t\t\t<DetailsStep slots={slots} />\n\t\t</Shell>\n\t);\n}\n\nfunction StatusPanel({\n\ttitle,\n\tmessage,\n\taction,\n\ttone = \"default\",\n\tslots,\n}: {\n\ttitle: string;\n\tmessage?: string;\n\taction: ReactNode;\n\ttone?: \"default\" | \"error\";\n\tslots: Slots;\n}) {\n\treturn (\n\t\t<div className={cn(slots.statusPanel, slots.surface)}>\n\t\t\t<h2 className={slots.statusTitle}>{title}</h2>\n\t\t\t{message && (\n\t\t\t\t<p\n\t\t\t\t\tclassName={\n\t\t\t\t\t\ttone === \"error\"\n\t\t\t\t\t\t\t? slots.statusMessageError\n\t\t\t\t\t\t\t: slots.statusMessage\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{message}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t<div className={slots.statusActions}>{action}</div>\n\t\t</div>\n\t);\n}\n\nfunction DetailsStep({ slots }: { slots: Slots }) {\n\tconst {\n\t\titems,\n\t\tsubtotal,\n\t\tdiscount,\n\t\ttax,\n\t\tserviceFee,\n\t\ttotal,\n\t\tremoveItem,\n\t\tresetCart,\n\t} = useCart();\n\tconst { customer, setCustomer } = useCustomer();\n\tconst { startCheckout } = usePayment();\n\tconst [submitError, setSubmitError] = useState<string | undefined>();\n\n\tconst fieldContainerClass = slots.fieldContainer;\n\tconst fieldStyleProps = {\n\t\tfieldClassName: slots.fieldInput,\n\t\tcontainerClassName: fieldContainerClass,\n\t\tfieldLabelClassName: slots.fieldLabel,\n\t\tfieldErrorClassName: slots.fieldError,\n\t};\n\n\tconst handleSubmit = async (values: Record<string, unknown>) => {\n\t\tconst filledCustomer: Customer = {\n\t\t\tfirst_name: values.firstName as string,\n\t\t\tlast_name: values.lastName as string,\n\t\t\tphone: values.phone as string,\n\t\t\temail: values.email as string,\n\t\t\tallow_marketing: values.marketingConsent as boolean,\n\t\t};\n\t\tsetCustomer(filledCustomer);\n\n\t\ttry {\n\t\t\tawait startCheckout();\n\t\t} catch (err) {\n\t\t\tsetSubmitError(\n\t\t\t\terr instanceof Error ? err.message : \"Could not start payment.\",\n\t\t\t);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className={slots.stepSection}>\n\t\t\t<Steps current={1} slots={slots} />\n\n\t\t\t<h2 className={slots.sectionTitle}>Your order</h2>\n\t\t\t<div className={slots.cartList}>\n\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t<CartLine\n\t\t\t\t\t\tkey={`${item.item_id}-${index}`}\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\tonRemove={() => removeItem(index)}\n\t\t\t\t\t\tslots={slots}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t<div className={cn(slots.totals, slots.surface)}>\n\t\t\t\t<div className={slots.totalsRow}>\n\t\t\t\t\t<span>Subtotal</span>\n\t\t\t\t\t<span>{money(subtotal)}</span>\n\t\t\t\t</div>\n\t\t\t\t{discount > 0 && (\n\t\t\t\t\t<div className={slots.totalsRow}>\n\t\t\t\t\t\t<span>Discount</span>\n\t\t\t\t\t\t<span>{money(-discount)}</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<div className={slots.totalsRow}>\n\t\t\t\t\t<span>Tax</span>\n\t\t\t\t\t<span>{money(tax)}</span>\n\t\t\t\t</div>\n\n\t\t\t\t{serviceFee > 0 && (\n\t\t\t\t\t<div className={slots.totalsRow}>\n\t\t\t\t\t\t<span>Service fee</span>\n\t\t\t\t\t\t<span>{serviceFee}</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<div className={slots.totalsDivider} />\n\t\t\t\t<div className={slots.totalsTotalRow}>\n\t\t\t\t\t<span>Total</span>\n\t\t\t\t\t<span>{money(total)}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<PromoCode slots={slots} />\n\n\t\t\t<h2 className={slots.sectionTitle}>Contact information</h2>\n\n\t\t\t<DynamicFormShell onSubmit={handleSubmit} className={slots.form}>\n\t\t\t\t<NameFields\n\t\t\t\t\tfirstNameInitialValue={customer.first_name ?? \"\"}\n\t\t\t\t\tlastNameInitialValue={customer.last_name ?? \"\"}\n\t\t\t\t\tfieldClassName={slots.fieldInput}\n\t\t\t\t\tfieldLabelClassName={slots.fieldLabel}\n\t\t\t\t\tfieldErrorClassName={slots.fieldError}\n\t\t\t\t\tchildClassName={cn(\n\t\t\t\t\t\tfieldContainerClass,\n\t\t\t\t\t\t\"md:flex-1 md:min-w-0\",\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t\t<div className=\"flex flex-col w-full gap-1\">\n\t\t\t\t\t<PhoneField\n\t\t\t\t\t\tinitialValue={customer.phone ?? \"\"}\n\t\t\t\t\t\tshowError={false}\n\t\t\t\t\t\t{...fieldStyleProps}\n\t\t\t\t\t/>\n\t\t\t\t\t<FieldError name=\"phone\" className={slots.fieldError} />\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex flex-col w-full gap-1\">\n\t\t\t\t\t<EmailField\n\t\t\t\t\t\tinitialValue={customer.email ?? \"\"}\n\t\t\t\t\t\tshowError={false}\n\t\t\t\t\t\t{...fieldStyleProps}\n\t\t\t\t\t/>\n\t\t\t\t\t<FieldError name=\"email\" className={slots.fieldError} />\n\t\t\t\t</div>\n\n\t\t\t\t<CheckboxField\n\t\t\t\t\tfieldId=\"termsAccepted\"\n\t\t\t\t\trequired\n\t\t\t\t\trequiredText=\"You must agree to the terms of service to continue.\"\n\t\t\t\t\tfieldErrorClassName={slots.fieldError}\n\t\t\t\t>\n\t\t\t\t\tI have read and agree to the terms of service.\n\t\t\t\t</CheckboxField>\n\t\t\t\t<CheckboxField fieldId=\"marketingConsent\" required={false}>\n\t\t\t\t\tI consent to receive promotions via text and email.\n\t\t\t\t</CheckboxField>\n\n\t\t\t\t{submitError && (\n\t\t\t\t\t<p className={slots.submitError}>{submitError}</p>\n\t\t\t\t)}\n\n\t\t\t\t<div className={slots.formActions}>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={resetCart}\n\t\t\t\t\t\tclassName={slots.secondaryButton}\n\t\t\t\t\t>\n\t\t\t\t\t\tClear cart\n\t\t\t\t\t</button>\n\t\t\t\t\t<SubmitButton\n\t\t\t\t\t\tlabel=\"Continue to payment\"\n\t\t\t\t\t\tloadingLabel=\"Setting up...\"\n\t\t\t\t\t\tclassName={cn(\"flex-1\", slots.primaryButton)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</DynamicFormShell>\n\t\t</div>\n\t);\n}\n\nfunction PaymentStep({\n\tslots,\n\tcheckoutHref,\n}: {\n\tslots: Slots;\n\tcheckoutHref: string;\n}) {\n\tconst stripe = useStripe();\n\tconst elements = useElements();\n\tconst {\n\t\ttotal,\n\t\tclientSecret,\n\t\tsubmitPayment,\n\t\tpaymentElementOptions,\n\t\tgetReturnUrl,\n\t\tresetCheckout,\n\t} = usePayment();\n\tconst { customer } = useCustomer();\n\tconst [submitError, setSubmitError] = useState<string | undefined>();\n\n\tconst handleSubmit = async () => {\n\t\tif (!stripe || !elements || !clientSecret) return;\n\n\t\tconst { error } = await elements.submit();\n\t\tif (error) {\n\t\t\tsetSubmitError(error.message ?? \"Please check your card details.\");\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst returnUrl = `${getReturnUrl()}${checkoutHref.startsWith(\"/\") ? checkoutHref : `/${checkoutHref}`}`;\n\t\tconst result = await submitPayment(\n\t\t\tstripe,\n\t\t\telements,\n\t\t\tclientSecret,\n\t\t\treturnUrl,\n\t\t\tcustomer,\n\t\t);\n\t\tif (!result.success) setSubmitError(result.error);\n\t};\n\n\treturn (\n\t\t<div className={slots.stepSection}>\n\t\t\t<Steps current={2} slots={slots} />\n\n\t\t\t<DynamicFormShell onSubmit={handleSubmit} className={slots.form}>\n\t\t\t\t<div className={cn(slots.paymentSurface, slots.surface)}>\n\t\t\t\t\t<PaymentElement options={paymentElementOptions} />\n\t\t\t\t</div>\n\n\t\t\t\t{submitError && (\n\t\t\t\t\t<p className={slots.submitError}>{submitError}</p>\n\t\t\t\t)}\n\n\t\t\t\t<div className={slots.formActions}>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={resetCheckout}\n\t\t\t\t\t\tclassName={slots.secondaryButton}\n\t\t\t\t\t>\n\t\t\t\t\t\tBack to order\n\t\t\t\t\t</button>\n\t\t\t\t\t<SubmitButton\n\t\t\t\t\t\tlabel={`Pay ${money(total ?? 0)}`}\n\t\t\t\t\t\tloadingLabel=\"Processing...\"\n\t\t\t\t\t\tclassName={cn(\"flex-1\", slots.primaryButton)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</DynamicFormShell>\n\t\t</div>\n\t);\n}\n\nfunction Steps({ current, slots }: { current: 1 | 2; slots: Slots }) {\n\tconst labels = [\"Your details\", \"Payment\"];\n\treturn (\n\t\t<div className={slots.steps}>\n\t\t\t{labels.map((label, i) => {\n\t\t\t\tconst n = i + 1;\n\t\t\t\tconst active = n <= current;\n\t\t\t\treturn (\n\t\t\t\t\t<div key={label} className=\"contents\">\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tslots.stepBadge,\n\t\t\t\t\t\t\t\t\tactive\n\t\t\t\t\t\t\t\t\t\t? slots.stepBadgeActive\n\t\t\t\t\t\t\t\t\t\t: slots.stepBadgeInactive,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{n}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tslots.stepLabel,\n\t\t\t\t\t\t\t\t\tactive\n\t\t\t\t\t\t\t\t\t\t? slots.stepLabelActive\n\t\t\t\t\t\t\t\t\t\t: slots.stepLabelInactive,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{i < labels.length - 1 && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tslots.stepDivider,\n\t\t\t\t\t\t\t\t\tcurrent > n\n\t\t\t\t\t\t\t\t\t\t? slots.stepDividerActive\n\t\t\t\t\t\t\t\t\t\t: slots.stepDividerInactive,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nfunction CartLine({\n\titem,\n\tindex,\n\tonRemove,\n\tslots,\n}: {\n\titem: OrderItem;\n\tindex: number;\n\tonRemove: () => void;\n\tslots: Slots;\n}) {\n\tconst { open } = useModal();\n\tconst { updateItem, getItemTotal } = useCart();\n\n\t// Read straight from the store item so edits (from the pencil modal) and\n\t// quantity changes stay reactive — no local hook state to drift out of sync.\n\tconst setQuantity = (next: number) =>\n\t\tnext < 1 ? onRemove() : updateItem({ ...item, quantity: next }, index);\n\n\treturn (\n\t\t<div className={cn(slots.cartLine, slots.surface)}>\n\t\t\t<div className=\"flex flex-col gap-1 flex-1 min-w-0\">\n\t\t\t\t<p className={slots.cartLineName}>{item.name}</p>\n\t\t\t\t{(() => {\n\t\t\t\t\tconst added = (item.selections ?? [])\n\t\t\t\t\t\t.flatMap((rs) => rs.selections.map((s) => s.name));\n\t\t\t\t\tconst removed = (item.components ?? [])\n\t\t\t\t\t\t.filter((c) => c.quantity_servings === 0)\n\t\t\t\t\t\t.map((c) => c.name);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{added.length > 0 && (\n\t\t\t\t\t\t\t\t<p className={slots.cartLineSelection}>\n\t\t\t\t\t\t\t\t\tAdd {added.join(\", \")}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{removed.length > 0 && (\n\t\t\t\t\t\t\t\t<p className={slots.cartLineSelection}>\n\t\t\t\t\t\t\t\t\tRemove {removed.join(\", \")}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{item.comments && (\n\t\t\t\t\t\t\t\t<p className={slots.cartLineSelection}>\n\t\t\t\t\t\t\t\t\tComments: {item.comments}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\t\t\t\t})()}\n\t\t\t\t<p className={slots.cartLinePrice}>{money(getItemTotal(item))}</p>\n\t\t\t</div>\n\n\t\t\t<div className={slots.cartLineControls}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label=\"Edit item\"\n\t\t\t\t\tclassName={slots.incrementButton}\n\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\topen(\"EDIT_ITEM_MODAL\", {\n\t\t\t\t\t\t\tbaseItemId: item.base_item_id,\n\t\t\t\t\t\t\tseed: item,\n\t\t\t\t\t\t\teditIndex: index,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<Pencil className=\"w-5 h-5\" />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={slots.incrementButton}\n\t\t\t\t\tonClick={() => setQuantity(item.quantity - 1)}\n\t\t\t\t>\n\t\t\t\t\t<Minus className=\"w-5 h-5\" />\n\t\t\t\t</button>\n\t\t\t\t<p className={slots.cartLineQuantity}>{item.quantity}</p>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={slots.incrementButton}\n\t\t\t\t\tonClick={() => setQuantity(item.quantity + 1)}\n\t\t\t\t>\n\t\t\t\t\t<Plus className=\"w-5 h-5\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction PromoCode({ slots }: { slots: Slots }) {\n\tconst { promoCode, appliedPromo, applyPromo, removePromo, error, loading } =\n\t\tusePromotions();\n\tconst [draft, setDraft] = useState(\"\");\n\n\tif (appliedPromo) {\n\t\treturn (\n\t\t\t<div className={cn(slots.promoApplied, slots.surface)}>\n\t\t\t\t<span className={slots.promoAppliedLabel}>\n\t\t\t\t\t{appliedPromo.name} applied\n\t\t\t\t</span>\n\t\t\t\t{promoCode && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={removePromo}\n\t\t\t\t\t\tclassName={slots.secondaryButton}\n\t\t\t\t\t>\n\t\t\t\t\t\tRemove\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2 w-full\">\n\t\t\t<div className={slots.promoRow}>\n\t\t\t\t<input\n\t\t\t\t\tvalue={draft}\n\t\t\t\t\tonChange={(e) => setDraft(e.target.value)}\n\t\t\t\t\tplaceholder=\"Promo code\"\n\t\t\t\t\tclassName={slots.promoInput}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdisabled={loading || !draft.trim()}\n\t\t\t\t\tonClick={() => applyPromo(draft)}\n\t\t\t\t\tclassName={cn(slots.primaryButton, \"shrink-0\")}\n\t\t\t\t>\n\t\t\t\t\t{loading ? \"Applying…\" : \"Apply\"}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t{error && <p className={slots.promoError}>{error}</p>}\n\t\t</div>\n\t);\n}\n\nfunction Shell({\n\tchildren,\n\tslots,\n}: {\n\tchildren: ReactNode;\n\tslots: Slots;\n}) {\n\treturn (\n\t\t<div className={slots.shell}>\n\t\t\t<div className={slots.shellInner}>\n\t\t\t\t<h1 className={slots.pageTitle}>Checkout</h1>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"mappings":";;;AAEA,SAAgB,aAAAA,YAAW,YAAAC,iBAAgB;;;ACF3C,IAAI,IAAE,OAAO;AAAe,IAAI,IAAE,CAACC,IAAE,GAAEC,OAAI,KAAKD,KAAE,EAAEA,IAAE,GAAE,EAAC,YAAW,MAAG,cAAa,MAAG,UAAS,MAAG,OAAMC,GAAC,CAAC,IAAED,GAAE,CAAC,IAAEC;AAAE,IAAI,IAAE,CAACD,IAAE,GAAEC,QAAK,EAAED,IAAE,OAAO,KAAG,WAAS,IAAE,KAAG,GAAEC,EAAC,GAAEA;AAAG,IAAM,IAAN,MAAO;AAAA,EAAC,cAAa;AAAC,MAAE,MAAK,WAAU,KAAK,OAAO,CAAC;AAAE,MAAE,MAAK,gBAAe,SAAS;AAAE,MAAE,MAAK,aAAY,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,GAAE;AAAC,SAAK,YAAU,MAAI,KAAK,eAAa,WAAU,KAAK,YAAU,GAAE,KAAK,UAAQ;AAAA,EAAE;AAAA,EAAC,QAAO;AAAC,SAAK,IAAI,KAAK,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAE,KAAK;AAAA,EAAS;AAAA,EAAC,IAAI,WAAU;AAAC,WAAO,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,IAAI,WAAU;AAAC,WAAO,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,SAAQ;AAAC,WAAO,OAAO,UAAQ,eAAa,OAAO,YAAU,cAAY,WAAS;AAAA,EAAQ;AAAA,EAAC,UAAS;AAAC,SAAK,iBAAe,cAAY,KAAK,eAAa;AAAA,EAAW;AAAA,EAAC,IAAI,oBAAmB;AAAC,WAAO,KAAK,iBAAe;AAAA,EAAU;AAAC;AAAC,IAAI,IAAE,IAAI;;;ACApvB,SAAO,aAAaC,IAAE,YAAYC,UAAM;;;ACAxC,SAAS,EAAE,GAAE;AAAC,SAAO,kBAAgB,aAAW,eAAe,CAAC,IAAE,QAAQ,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,CAAAC,OAAG,WAAW,MAAI;AAAC,UAAMA;AAAA,EAAC,CAAC,CAAC;AAAC;;;ACAnF,SAASC,KAAG;AAAC,MAAIC,KAAE,CAAC,GAAEC,KAAE,EAAC,iBAAiB,GAAEC,IAAEC,IAAEC,IAAE;AAAC,WAAO,EAAE,iBAAiBF,IAAEC,IAAEC,EAAC,GAAEH,GAAE,IAAI,MAAI,EAAE,oBAAoBC,IAAEC,IAAEC,EAAC,CAAC;AAAA,EAAC,GAAE,yBAAyB,GAAE;AAAC,QAAIF,KAAE,sBAAsB,GAAG,CAAC;AAAE,WAAOD,GAAE,IAAI,MAAI,qBAAqBC,EAAC,CAAC;AAAA,EAAC,GAAE,aAAa,GAAE;AAAC,WAAOD,GAAE,sBAAsB,MAAIA,GAAE,sBAAsB,GAAG,CAAC,CAAC;AAAA,EAAC,GAAE,cAAc,GAAE;AAAC,QAAIC,KAAE,WAAW,GAAG,CAAC;AAAE,WAAOD,GAAE,IAAI,MAAI,aAAaC,EAAC,CAAC;AAAA,EAAC,GAAE,aAAa,GAAE;AAAC,QAAIA,KAAE,EAAC,SAAQ,KAAE;AAAE,WAAO,EAAE,MAAI;AAAC,MAAAA,GAAE,WAAS,EAAE,CAAC,EAAE;AAAA,IAAC,CAAC,GAAED,GAAE,IAAI,MAAI;AAAC,MAAAC,GAAE,UAAQ;AAAA,IAAE,CAAC;AAAA,EAAC,GAAE,MAAM,GAAEA,IAAEC,IAAE;AAAC,QAAIC,KAAE,EAAE,MAAM,iBAAiBF,EAAC;AAAE,WAAO,OAAO,OAAO,EAAE,OAAM,EAAC,CAACA,EAAC,GAAEC,GAAC,CAAC,GAAE,KAAK,IAAI,MAAI;AAAC,aAAO,OAAO,EAAE,OAAM,EAAC,CAACD,EAAC,GAAEE,GAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC,GAAE,MAAM,GAAE;AAAC,QAAIF,KAAEH,GAAE;AAAE,WAAO,EAAEG,EAAC,GAAE,KAAK,IAAI,MAAIA,GAAE,QAAQ,CAAC;AAAA,EAAC,GAAE,IAAI,GAAE;AAAC,WAAOF,GAAE,SAAS,CAAC,KAAGA,GAAE,KAAK,CAAC,GAAE,MAAI;AAAC,UAAIE,KAAEF,GAAE,QAAQ,CAAC;AAAE,UAAGE,MAAG,EAAE,UAAQC,MAAKH,GAAE,OAAOE,IAAE,CAAC,EAAE,CAAAC,GAAE;AAAA,IAAC;AAAA,EAAC,GAAE,UAAS;AAAC,aAAQ,KAAKH,GAAE,OAAO,CAAC,EAAE,GAAE;AAAA,EAAC,EAAC;AAAE,SAAOC;AAAC;;;AFAlwB,SAAS,IAAG;AAAC,MAAG,CAAC,CAAC,IAAEI,GAAEA,EAAC;AAAE,SAAOC,GAAE,MAAI,MAAI,EAAE,QAAQ,GAAE,CAAC,CAAC,CAAC,GAAE;AAAC;;;AGAlK,OAAO,OAAM;;;ACAb,SAAO,UAAUC,UAAM;;;ACAvB,SAAO,aAAa,GAAE,mBAAmB,SAAM;AAA8C,IAAI,IAAE,CAAC,GAAEC,OAAI;AAAC,IAAE,WAAS,EAAE,GAAEA,EAAC,IAAE,EAAE,GAAEA,EAAC;AAAC;;;ADAlC,SAASC,GAAE,GAAE;AAAC,MAAIC,KAAEC,GAAE,CAAC;AAAE,SAAO,EAAE,MAAI;AAAC,IAAAD,GAAE,UAAQ;AAAA,EAAC,GAAE,CAAC,CAAC,CAAC,GAAEA;AAAC;;;ADA/E,IAAIE,KAAE,SAASC,IAAE;AAAC,MAAI,IAAEC,GAAED,EAAC;AAAE,SAAO,EAAE,YAAY,IAAIE,OAAI,EAAE,QAAQ,GAAGA,EAAC,GAAE,CAAC,CAAC,CAAC;AAAC;;;AGA1J,OAAO,KAAG,YAAY,GAAE,gBAAgB,GAAE,iBAAiB,GAAE,cAAc,GAAE,kBAAkB,GAAE,eAAe,GAAE,UAAU,SAAM;;;ACAlI,SAASC,MAAKC,IAAE;AAAC,SAAO,MAAM,KAAK,IAAI,IAAIA,GAAE,QAAQ,CAAAC,OAAG,OAAOA,MAAG,WAASA,GAAE,MAAM,GAAG,IAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAC;;;ACAvH,SAAS,EAAEC,IAAEC,OAAKC,IAAE;AAAC,MAAGF,MAAKC,IAAE;AAAC,QAAI,IAAEA,GAAED,EAAC;AAAE,WAAO,OAAO,KAAG,aAAW,EAAE,GAAGE,EAAC,IAAE;AAAA,EAAC;AAAC,MAAIC,KAAE,IAAI,MAAM,oBAAoBH,EAAC,iEAAiE,OAAO,KAAKC,EAAC,EAAE,IAAI,OAAG,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG;AAAE,QAAM,MAAM,qBAAmB,MAAM,kBAAkBE,IAAE,CAAC,GAAEA;AAAC;;;AFAxE,IAAI,KAAG,CAAAC,QAAIA,GAAEA,GAAE,OAAK,CAAC,IAAE,QAAOA,GAAEA,GAAE,iBAAe,CAAC,IAAE,kBAAiBA,GAAEA,GAAE,SAAO,CAAC,IAAE,UAASA,KAAI,KAAG,CAAC,CAAC;AAArG,IAAuG,KAAG,QAAI,EAAE,EAAE,UAAQ,CAAC,IAAE,WAAU,EAAE,EAAE,SAAO,CAAC,IAAE,UAAS,IAAI,KAAG,CAAC,CAAC;AAAE,SAAS,IAAG;AAAC,MAAIC,KAAE,EAAE;AAAE,SAAO,EAAE,CAAAC,OAAG,EAAE,EAAC,WAAUD,IAAE,GAAGC,GAAC,CAAC,GAAE,CAACD,EAAC,CAAC;AAAC;AAAC,SAAS,EAAE,EAAC,UAASA,IAAE,YAAWC,IAAE,MAAK,GAAE,YAAWF,IAAE,UAASG,IAAE,SAAQC,KAAE,MAAG,MAAKC,IAAE,WAAUC,GAAC,GAAE;AAAC,EAAAA,KAAEA,MAAG,OAAKA,KAAE;AAAE,MAAIC,KAAE,EAAEL,IAAED,EAAC;AAAE,MAAGG,GAAE,QAAO,EAAEG,IAAE,GAAEP,IAAEK,IAAEC,EAAC;AAAE,MAAIE,KAAEL,MAAG,OAAKA,KAAE;AAAE,MAAGK,KAAE,GAAE;AAAC,QAAG,EAAC,QAAOC,KAAE,OAAG,GAAGC,GAAC,IAAEH;AAAE,QAAGE,GAAE,QAAO,EAAEC,IAAE,GAAEV,IAAEK,IAAEC,EAAC;AAAA,EAAC;AAAC,MAAGE,KAAE,GAAE;AAAC,QAAG,EAAC,SAAQC,KAAE,MAAG,GAAGC,GAAC,IAAEH;AAAE,WAAO,EAAEE,KAAE,IAAE,GAAE,EAAC,CAAC,CAAC,IAAG;AAAC,aAAO;AAAA,IAAI,GAAE,CAAC,CAAC,IAAG;AAAC,aAAO,EAAE,EAAC,GAAGC,IAAE,QAAO,MAAG,OAAM,EAAC,SAAQ,OAAM,EAAC,GAAE,GAAEV,IAAEK,IAAEC,EAAC;AAAA,IAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAEC,IAAE,GAAEP,IAAEK,IAAEC,EAAC;AAAC;AAAC,SAAS,EAAEL,IAAEC,KAAE,CAAC,GAAE,GAAEF,IAAEG,IAAE;AAAC,MAAG,EAAC,IAAGC,KAAE,GAAE,UAASC,IAAE,SAAQC,KAAE,OAAM,GAAGC,GAAC,IAAE,EAAEN,IAAE,CAAC,WAAU,QAAQ,CAAC,GAAEO,KAAEP,GAAE,QAAM,SAAO,EAAC,CAACK,EAAC,GAAEL,GAAE,IAAG,IAAE,CAAC,GAAEQ,KAAE,OAAOJ,MAAG,aAAWA,GAAEH,EAAC,IAAEG;AAAE,iBAAcE,MAAGA,GAAE,aAAW,OAAOA,GAAE,aAAW,eAAaA,GAAE,YAAUA,GAAE,UAAUL,EAAC,IAAGK,GAAE,iBAAiB,KAAGA,GAAE,iBAAiB,MAAIA,GAAE,OAAKA,GAAE,iBAAiB,IAAE;AAAQ,MAAIG,KAAE,CAAC;AAAE,MAAGR,IAAE;AAAC,QAAIS,KAAE,OAAGC,KAAE,CAAC;AAAE,aAAO,CAACC,IAAEC,EAAC,KAAI,OAAO,QAAQZ,EAAC,EAAE,QAAOY,MAAG,cAAYH,KAAE,OAAIG,OAAI,QAAIF,GAAE,KAAKC,GAAE,QAAQ,YAAW,OAAG,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;AAAE,QAAGF,IAAE;AAAC,MAAAD,GAAE,uBAAuB,IAAEE,GAAE,KAAK,GAAG;AAAE,eAAQC,MAAKD,GAAE,CAAAF,GAAE,QAAQG,EAAC,EAAE,IAAE;AAAA,IAAE;AAAA,EAAC;AAAC,MAAG,EAAET,EAAC,MAAI,OAAO,KAAK,EAAEG,EAAC,CAAC,EAAE,SAAO,KAAG,OAAO,KAAK,EAAEG,EAAC,CAAC,EAAE,SAAO,GAAG,KAAG,CAAC,EAAED,EAAC,KAAG,MAAM,QAAQA,EAAC,KAAGA,GAAE,SAAO,KAAG,EAAEA,EAAC,GAAE;AAAC,QAAG,OAAO,KAAK,EAAEF,EAAC,CAAC,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,CAAC,gCAA+B,IAAG,0BAA0BP,EAAC,kCAAiC,uDAAsD,OAAO,KAAK,EAAEO,EAAC,CAAC,EAAE,OAAO,OAAO,KAAK,EAAEG,EAAC,CAAC,CAAC,EAAE,IAAI,CAAAC,OAAG,OAAOA,EAAC,EAAE,EAAE,KAAK;AAAA,CACxuD,GAAE,IAAG,kCAAiC,CAAC,+FAA8F,0FAA0F,EAAE,IAAI,CAAAA,OAAG,OAAOA,EAAC,EAAE,EAAE,KAAK;AAAA,CACzP,CAAC,EAAE,KAAK;AAAA,CACR,CAAC;AAAA,EAAC,OAAK;AAAC,QAAIA,KAAEF,GAAE,OAAMG,KAAED,MAAG,OAAK,SAAOA,GAAE,WAAUE,KAAE,OAAOD,MAAG,aAAW,IAAI,MAAIR,GAAEQ,GAAE,GAAG,CAAC,GAAEL,GAAE,SAAS,IAAEH,GAAEQ,IAAEL,GAAE,SAAS,GAAEO,KAAED,KAAE,EAAC,WAAUA,GAAC,IAAE,CAAC,GAAE,IAAE,EAAEJ,GAAE,OAAM,EAAE,EAAEF,IAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,aAAQ,KAAKG,GAAE,MAAK,KAAG,OAAOA,GAAE,CAAC;AAAE,WAAO,EAAED,IAAE,OAAO,OAAO,CAAC,GAAE,GAAEC,IAAEF,IAAE,EAAC,KAAIL,GAAE,EAAEM,EAAC,GAAED,GAAE,GAAG,EAAC,GAAEM,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAEV,IAAE,OAAO,OAAO,CAAC,GAAE,EAAEG,IAAE,CAAC,KAAK,CAAC,GAAE,CAAC,EAAEH,EAAC,KAAGI,IAAE,CAAC,EAAEJ,EAAC,KAAGM,EAAC,GAAED,EAAC;AAAC;AAAC,SAAS,IAAG;AAAC,MAAIR,KAAE,EAAE,CAAC,CAAC,GAAEC,KAAE,EAAE,OAAG;AAAC,aAAQF,MAAKC,GAAE,QAAQ,CAAAD,MAAG,SAAO,OAAOA,MAAG,aAAWA,GAAE,CAAC,IAAEA,GAAE,UAAQ;AAAA,EAAE,GAAE,CAAC,CAAC;AAAE,SAAM,IAAI,MAAI;AAAC,QAAG,CAAC,EAAE,MAAM,CAAAA,OAAGA,MAAG,IAAI,EAAE,QAAOC,GAAE,UAAQ,GAAEC;AAAA,EAAC;AAAC;AAAC,SAAS,KAAKD,IAAE;AAAC,SAAOA,GAAE,MAAM,CAAAC,OAAGA,MAAG,IAAI,IAAE,SAAO,CAAAA,OAAG;AAAC,aAAQ,KAAKD,GAAE,MAAG,SAAO,OAAO,KAAG,aAAW,EAAEC,EAAC,IAAE,EAAE,UAAQA;AAAA,EAAE;AAAC;AAAC,SAAS,KAAKD,IAAE;AAAC,MAAID;AAAE,MAAGC,GAAE,WAAS,EAAE,QAAM,CAAC;AAAE,MAAGA,GAAE,WAAS,EAAE,QAAOA,GAAE,CAAC;AAAE,MAAIC,KAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQC,MAAKF,GAAE,UAAQG,MAAKD,GAAE,CAAAC,GAAE,WAAW,IAAI,KAAG,OAAOD,GAAEC,EAAC,KAAG,eAAaJ,KAAE,EAAEI,EAAC,MAAI,SAAO,EAAEA,EAAC,IAAE,CAAC,IAAG,EAAEA,EAAC,EAAE,KAAKD,GAAEC,EAAC,CAAC,KAAGF,GAAEE,EAAC,IAAED,GAAEC,EAAC;AAAE,MAAGF,GAAE,YAAUA,GAAE,eAAe,EAAE,UAAQC,MAAK,EAAE,uDAAsD,KAAKA,EAAC,MAAI,EAAEA,EAAC,IAAE,CAAC,CAAAC,OAAG;AAAC,QAAIC;AAAE,YAAOA,KAAED,MAAG,OAAK,SAAOA,GAAE,mBAAiB,OAAK,SAAOC,GAAE,KAAKD,EAAC;AAAA,EAAC,CAAC;AAAG,WAAQD,MAAK,EAAE,QAAO,OAAOD,IAAE,EAAC,CAACC,EAAC,EAAEC,OAAKC,IAAE;AAAC,QAAIC,KAAE,EAAEH,EAAC;AAAE,aAAQI,MAAKD,IAAE;AAAC,WAAIF,cAAa,UAAQA,MAAG,OAAK,SAAOA,GAAE,wBAAuB,UAAQA,GAAE,iBAAiB;AAAO,MAAAG,GAAEH,IAAE,GAAGC,EAAC;AAAA,IAAC;AAAA,EAAC,EAAC,CAAC;AAAE,SAAOH;AAAC;AAA4T,SAAS,EAAEa,IAAE;AAAC,MAAIC;AAAE,SAAO,OAAO,OAAO,EAAED,EAAC,GAAE,EAAC,cAAaC,KAAED,GAAE,gBAAc,OAAKC,KAAED,GAAE,KAAI,CAAC;AAAC;AAAC,SAAS,EAAEA,IAAE;AAAC,MAAIC,KAAE,OAAO,OAAO,CAAC,GAAED,EAAC;AAAE,WAAQ,KAAKC,GAAE,CAAAA,GAAE,CAAC,MAAI,UAAQ,OAAOA,GAAE,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,EAAED,IAAEC,KAAE,CAAC,GAAE;AAAC,MAAI,IAAE,OAAO,OAAO,CAAC,GAAED,EAAC;AAAE,WAAQE,MAAKD,GAAE,CAAAC,MAAK,KAAG,OAAO,EAAEA,EAAC;AAAE,SAAO;AAAC;AAAC,SAAS,EAAEF,IAAE;AAAC,SAAO,EAAE,QAAQ,MAAM,GAAG,EAAE,CAAC,KAAG,OAAKA,GAAE,MAAM,MAAIA,GAAE;AAAG;AAAC,SAAS,EAAEA,IAAE;AAAC,SAAOA,OAAI,KAAGA,OAAI,uBAAO,IAAI,gBAAgB;AAAC;AAAC,SAAS,EAAEA,IAAE;AAAC,SAAO,EAAEA,GAAE,IAAI;AAAC;;;AGHz7D,SAAO,aAAa,GAAE,UAAUG,UAAM;AAAkD,IAAIC,KAAE,uBAAO;AAAqD,SAAS,KAAKC,IAAE;AAAC,MAAIC,KAAEC,GAAEF,EAAC;AAAE,IAAE,MAAI;AAAC,IAAAC,GAAE,UAAQD;AAAA,EAAC,GAAE,CAACA,EAAC,CAAC;AAAE,MAAIG,KAAEC,GAAE,OAAG;AAAC,aAAQA,MAAKH,GAAE,QAAQ,CAAAG,MAAG,SAAO,OAAOA,MAAG,aAAWA,GAAE,CAAC,IAAEA,GAAE,UAAQ;AAAA,EAAE,CAAC;AAAE,SAAOJ,GAAE,MAAM,OAAG,KAAG,SAAO,KAAG,OAAK,SAAO,EAAEK,EAAC,EAAE,IAAE,SAAOF;AAAC;;;ACAvV,SAAO,UAAUG,IAAE,YAAYC,UAAM;;;ACA7C,SAAO,eAAeC,IAAE,YAAYC,UAAM;AAAQ,SAASC,GAAEC,KAAE,GAAE;AAAC,MAAG,CAACC,IAAEC,EAAC,IAAEJ,GAAEE,EAAC,GAAE,IAAEH,GAAE,OAAGK,GAAE,CAAC,GAAE,CAAC,CAAC,GAAEC,KAAEN,GAAE,OAAGK,GAAE,CAAAE,OAAGA,KAAE,CAAC,GAAE,CAAC,CAAC,GAAEC,KAAER,GAAE,QAAII,KAAE,OAAK,GAAE,CAACA,EAAC,CAAC,GAAEK,KAAET,GAAE,OAAGK,GAAE,CAAAE,OAAGA,KAAE,CAAC,CAAC,GAAE,CAAC,CAAC,GAAEG,KAAEV,GAAE,OAAGK,GAAE,CAAAE,OAAGA,KAAE,CAAC,GAAE,CAAC,CAAC;AAAE,SAAM,EAAC,OAAMH,IAAE,SAAQ,GAAE,SAAQE,IAAE,SAAQE,IAAE,YAAWC,IAAE,YAAWC,GAAC;AAAC;;;ADA7P,IAAI;AAAJ,IAAMC;AAAuQ,OAAO,WAAS,eAAa,OAAO,cAAY,eAAa,OAAO,WAAS,iBAAe,IAAE,WAAS,OAAK,SAAO,QAAQ,QAAM,OAAK,SAAO,EAAE,UAAU,OAAK,UAAQ,SAAQA,KAAE,WAAS,OAAK,SAAO,QAAQ,cAAY,OAAK,SAAOA,GAAE,kBAAgB,gBAAc,QAAQ,UAAU,gBAAc,WAAU;AAAC,SAAO,QAAQ,KAAK,CAAC,gFAA+E,2FAA0F,IAAG,kBAAiB,SAAQ,2DAA0D,uBAAsB,KAAK,EAAE,KAAK;AAAA,CACl3B,CAAC,GAAE,CAAC;AAAC;AAAG,IAAIC,MAAG,CAAAC,QAAIA,GAAEA,GAAE,OAAK,CAAC,IAAE,QAAOA,GAAEA,GAAE,SAAO,CAAC,IAAE,UAASA,GAAEA,GAAE,QAAM,CAAC,IAAE,SAAQA,GAAEA,GAAE,QAAM,CAAC,IAAE,SAAQA,KAAID,MAAG,CAAC,CAAC;AAAE,SAASE,GAAE,GAAE;AAAC,MAAIC,KAAE,CAAC;AAAE,WAAQC,MAAK,EAAE,GAAEA,EAAC,MAAI,SAAKD,GAAE,QAAQC,EAAC,EAAE,IAAE;AAAI,SAAOD;AAAC;AAAC,SAAS,EAAE,GAAEA,IAAEC,IAAEC,IAAE;AAAC,MAAG,CAACJ,IAAEK,EAAC,IAAEC,GAAEH,EAAC,GAAE,EAAC,SAAQI,IAAE,SAAQC,IAAE,YAAWC,GAAC,IAAEC,GAAE,KAAGV,KAAE,IAAE,CAAC,GAAEW,KAAED,GAAE,KAAE,GAAEE,KAAEF,GAAE,KAAE,GAAEG,KAAE,EAAE;AAAE,SAAO,EAAE,MAAI;AAAC,QAAIC;AAAE,QAAG,GAAE;AAAC,UAAGX,MAAGE,GAAE,IAAE,GAAE,CAACH,IAAE;AAAC,QAAAC,MAAGK,GAAE,CAAC;AAAE;AAAA,MAAM;AAAC,cAAOM,KAAEV,MAAG,OAAK,SAAOA,GAAE,UAAQ,QAAMU,GAAE,KAAKV,IAAED,EAAC,GAAEY,GAAEb,IAAE,EAAC,UAASS,IAAE,UAAS;AAAC,QAAAC,GAAE,UAAQA,GAAE,UAAQ,QAAGA,GAAE,UAAQD,GAAE,SAAQA,GAAE,UAAQ,MAAG,CAACC,GAAE,YAAUT,MAAGK,GAAE,CAAC,GAAEC,GAAE,CAAC,MAAID,GAAE,CAAC,GAAEC,GAAE,CAAC;AAAA,MAAG,GAAE,MAAK;AAAC,QAAAG,GAAE,UAAQT,MAAGM,GAAE,CAAC,GAAED,GAAE,CAAC,MAAIC,GAAE,CAAC,GAAED,GAAE,CAAC,KAAGL,KAAEM,GAAE,CAAC,IAAED,GAAE,CAAC;AAAA,MAAC,GAAE,OAAM;AAAC,YAAIQ;AAAE,QAAAJ,GAAE,WAASK,GAAEf,EAAC,MAAIS,GAAE,UAAQ,OAAGF,GAAE,CAAC,GAAEN,MAAGE,GAAE,KAAE,IAAGW,KAAEZ,MAAG,OAAK,SAAOA,GAAE,QAAM,QAAMY,GAAE,KAAKZ,IAAED,EAAC;AAAA,MAAE,EAAC,CAAC;AAAA,IAAC;AAAA,EAAC,GAAE,CAAC,GAAEA,IAAED,IAAEW,EAAC,CAAC,GAAE,IAAE,CAACb,IAAE,EAAC,QAAOO,GAAE,CAAC,GAAE,OAAMA,GAAE,CAAC,GAAE,OAAMA,GAAE,CAAC,GAAE,YAAWA,GAAE,CAAC,KAAGA,GAAE,CAAC,EAAC,CAAC,IAAE,CAACJ,IAAE,EAAC,QAAO,QAAO,OAAM,QAAO,OAAM,QAAO,YAAW,OAAM,CAAC;AAAC;AAAC,SAASY,GAAE,GAAE,EAAC,SAAQb,IAAE,KAAIC,IAAE,MAAKC,IAAE,UAASJ,GAAC,GAAE;AAAC,MAAIK,KAAEG,GAAE;AAAE,SAAOU,GAAE,GAAE,EAAC,SAAQhB,IAAE,UAASF,GAAC,CAAC,GAAEK,GAAE,UAAU,MAAI;AAAC,IAAAF,GAAE,GAAEE,GAAE,sBAAsB,MAAI;AAAC,MAAAA,GAAE,IAAIc,GAAE,GAAEf,EAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC,CAAC,GAAEC,GAAE;AAAO;AAAC,SAASc,GAAE,GAAEjB,IAAE;AAAC,MAAIG,IAAEE;AAAE,MAAIJ,KAAEK,GAAE;AAAE,MAAG,CAAC,EAAE,QAAOL,GAAE;AAAQ,MAAIC,KAAE;AAAG,EAAAD,GAAE,IAAI,MAAI;AAAC,IAAAC,KAAE;AAAA,EAAE,CAAC;AAAE,MAAIJ,MAAGO,MAAGF,KAAE,EAAE,kBAAgB,OAAK,SAAOA,GAAE,KAAK,CAAC,EAAE,OAAO,CAAAG,OAAGA,cAAa,aAAa,MAAI,OAAKD,KAAE,CAAC;AAAE,SAAOP,GAAE,WAAS,KAAGE,GAAE,GAAEC,GAAE,YAAU,QAAQ,WAAWH,GAAE,IAAI,CAAAQ,OAAGA,GAAE,QAAQ,CAAC,EAAE,KAAK,MAAI;AAAC,IAAAJ,MAAGF,GAAE;AAAA,EAAC,CAAC,GAAEC,GAAE;AAAQ;AAAC,SAASe,GAAE,GAAE,EAAC,UAAShB,IAAE,SAAQC,GAAC,GAAE;AAAC,MAAGD,MAAG,QAAMA,GAAE,SAAQ;AAAC,IAAAC,GAAE;AAAE;AAAA,EAAM;AAAC,MAAIC,KAAE,EAAE,MAAM;AAAW,IAAE,MAAM,aAAW,QAAOD,GAAE,GAAE,EAAE,cAAa,EAAE,MAAM,aAAWC;AAAC;AAAC,SAASa,GAAE,GAAE;AAAC,MAAId,IAAEC;AAAE,WAAQA,MAAGD,KAAE,EAAE,kBAAgB,OAAK,SAAOA,GAAE,KAAK,CAAC,MAAI,OAAKC,KAAE,CAAC,GAAG,KAAK,CAAAJ,OAAGA,cAAa,iBAAeA,GAAE,cAAY,UAAU;AAAC;;;AEDxkD,OAAOoB,MAAG,iBAAiBC,IAAE,cAAcC,UAAM;AAAQ,IAAIC,KAAEF,GAAE,IAAI;AAAEE,GAAE,cAAY;AAAoB,IAAIC,MAAG,QAAI,EAAE,EAAE,OAAK,CAAC,IAAE,QAAO,EAAE,EAAE,SAAO,CAAC,IAAE,UAAS,EAAE,EAAE,UAAQ,CAAC,IAAE,WAAU,EAAE,EAAE,UAAQ,CAAC,IAAE,WAAU,IAAIA,MAAG,CAAC,CAAC;AAAE,SAASC,KAAG;AAAC,SAAOH,GAAEC,EAAC;AAAC;AAAC,SAASG,GAAE,EAAC,OAAMC,IAAE,UAASC,GAAC,GAAE;AAAC,SAAOR,GAAE,cAAcG,GAAE,UAAS,EAAC,OAAMI,GAAC,GAAEC,EAAC;AAAC;;;ACAnU,YAAUC,QAAM;AAA8C,SAASC,KAAG;AAAC,MAAIC,KAAE,OAAO,YAAU;AAAY,SAAM,0BAAyBC,MAAG,CAAAC,OAAGA,GAAE,sBAAsBD,EAAC,EAAE,MAAI,MAAI;AAAA,EAAC,GAAE,MAAI,OAAG,MAAI,CAACD,EAAC,IAAE;AAAE;AAAC,SAASG,KAAG;AAAC,MAAIH,KAAED,GAAE,GAAE,CAAC,GAAEK,EAAC,IAAI,YAAS,EAAE,iBAAiB;AAAE,SAAO,KAAG,EAAE,sBAAoB,SAAIA,GAAE,KAAE,GAAI,aAAU,MAAI;AAAC,UAAI,QAAIA,GAAE,IAAE;AAAA,EAAC,GAAE,CAAC,CAAC,CAAC,GAAI,aAAU,MAAI,EAAE,QAAQ,GAAE,CAAC,CAAC,GAAEJ,KAAE,QAAG;AAAC;;;ACA7X,SAAO,UAAUK,UAAM;AAA0E,SAASC,KAAG;AAAC,MAAI,IAAEC,GAAE,KAAE;AAAE,SAAO,EAAE,OAAK,EAAE,UAAQ,MAAG,MAAI;AAAC,MAAE,UAAQ;AAAA,EAAE,IAAG,CAAC,CAAC,GAAE;AAAC;;;ACAjK,OAAOC,MAAG,YAAYC,IAAE,iBAAiB,IAAG,cAAc,GAAE,aAAa,IAAG,WAAW,IAAG,UAAUC,IAAE,YAAY,SAAM;AAAq5B,SAAS,GAAG,GAAE;AAAC,MAAIC;AAAE,SAAM,CAAC,EAAE,EAAE,SAAO,EAAE,aAAW,EAAE,WAAS,EAAE,SAAO,EAAE,aAAW,EAAE,YAAU,CAAC,GAAIA,KAAE,EAAE,OAAK,OAAKA,KAAE,EAAE,KAAGC,GAAE,SAAS,MAAM,EAAE,QAAQ,MAAI;AAAC;AAAC,IAAI,IAAE,GAAG,IAAI;AAAE,EAAE,cAAY;AAAoB,IAAI,MAAI,CAAAC,QAAIA,GAAE,UAAQ,WAAUA,GAAE,SAAO,UAASA,KAAI,MAAI,CAAC,CAAC;AAAE,SAAS,KAAI;AAAC,MAAI,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,KAAK,OAAM,IAAI,MAAM,kGAAkG;AAAE,SAAO;AAAC;AAAC,SAAS,KAAI;AAAC,MAAI,IAAE,EAAEC,EAAC;AAAE,MAAG,MAAI,KAAK,OAAM,IAAI,MAAM,kGAAkG;AAAE,SAAO;AAAC;AAAC,IAAIA,KAAE,GAAG,IAAI;AAAEA,GAAE,cAAY;AAAiB,SAASC,GAAE,GAAE;AAAC,SAAM,cAAa,IAAEA,GAAE,EAAE,QAAQ,IAAE,EAAE,QAAQ,OAAO,CAAC,EAAC,IAAGJ,GAAC,MAAIA,GAAE,YAAU,IAAI,EAAE,OAAO,CAAC,EAAC,OAAMA,GAAC,MAAIA,OAAI,SAAS,EAAE,SAAO;AAAC;AAAC,SAAS,GAAG,GAAEA,IAAE;AAAC,MAAIE,KAAEG,GAAG,CAAC,GAAEC,KAAEC,GAAE,CAAC,CAAC,GAAEC,KAAEC,GAAG,GAAE,IAAE,EAAG,GAAEC,KAAEC,GAAE,CAACA,IAAEC,KAAE,EAAE,WAAS;AAAC,QAAIC,KAAEP,GAAE,QAAQ,UAAU,CAAC,EAAC,IAAGD,GAAC,MAAIA,OAAIM,EAAC;AAAE,IAAAE,OAAI,OAAK,EAAGD,IAAE,EAAC,CAAC,EAAE,OAAO,IAAG;AAAC,MAAAN,GAAE,QAAQ,OAAOO,IAAE,CAAC;AAAA,IAAC,GAAE,CAAC,EAAE,MAAM,IAAG;AAAC,MAAAP,GAAE,QAAQO,EAAC,EAAE,QAAM;AAAA,IAAQ,EAAC,CAAC,GAAE,EAAE,UAAU,MAAI;AAAC,UAAIR;AAAE,OAACD,GAAEE,EAAC,KAAGE,GAAE,aAAWH,KAAEH,GAAE,YAAU,QAAMG,GAAE,KAAKH,EAAC;AAAA,IAAE,CAAC;AAAA,EAAE,CAAC,GAAEY,KAAEH,GAAE,CAAAA,OAAG;AAAC,QAAIC,KAAEN,GAAE,QAAQ,KAAK,CAAC,EAAC,IAAGO,GAAC,MAAIA,OAAIF,EAAC;AAAE,WAAOC,KAAEA,GAAE,UAAQ,cAAYA,GAAE,QAAM,aAAWN,GAAE,QAAQ,KAAK,EAAC,IAAGK,IAAE,OAAM,UAAS,CAAC,GAAE,MAAID,GAAEC,IAAE,EAAE,OAAO;AAAA,EAAC,CAAC,GAAEI,KAAER,GAAE,CAAC,CAAC,GAAES,KAAET,GAAE,QAAQ,QAAQ,CAAC,GAAEU,KAAEV,GAAE,EAAC,OAAM,CAAC,GAAE,OAAM,CAAC,EAAC,CAAC,GAAE,IAAEI,GAAE,CAACA,IAAEC,IAAEC,OAAI;AAAC,IAAAE,GAAE,QAAQ,OAAO,CAAC,GAAEf,OAAIA,GAAE,OAAO,QAAQY,EAAC,IAAEZ,GAAE,OAAO,QAAQY,EAAC,EAAE,OAAO,CAAC,CAACP,EAAC,MAAIA,OAAIM,EAAC,IAAGX,MAAG,QAAMA,GAAE,OAAO,QAAQY,EAAC,EAAE,KAAK,CAACD,IAAE,IAAI,QAAQ,CAAAN,OAAG;AAAC,MAAAU,GAAE,QAAQ,KAAKV,EAAC;AAAA,IAAC,CAAC,CAAC,CAAC,GAAEL,MAAG,QAAMA,GAAE,OAAO,QAAQY,EAAC,EAAE,KAAK,CAACD,IAAE,IAAI,QAAQ,CAAAN,OAAG;AAAC,cAAQ,IAAIY,GAAE,QAAQL,EAAC,EAAE,IAAI,CAAC,CAACM,IAAET,EAAC,MAAIA,EAAC,CAAC,EAAE,KAAK,MAAIJ,GAAE,CAAC;AAAA,IAAC,CAAC,CAAC,CAAC,GAAEO,OAAI,UAAQI,GAAE,UAAQA,GAAE,QAAQ,KAAK,MAAIhB,MAAG,OAAK,SAAOA,GAAE,KAAK,OAAO,EAAE,KAAK,MAAIa,GAAED,EAAC,CAAC,IAAEC,GAAED,EAAC;AAAA,EAAC,CAAC,GAAEO,KAAER,GAAE,CAACA,IAAEC,IAAEC,OAAI;AAAC,YAAQ,IAAII,GAAE,QAAQL,EAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAACP,IAAEa,EAAC,MAAIA,EAAC,CAAC,EAAE,KAAK,MAAI;AAAC,UAAIb;AAAE,OAACA,KAAEU,GAAE,QAAQ,MAAM,MAAI,QAAMV,GAAE;AAAA,IAAC,CAAC,EAAE,KAAK,MAAIQ,GAAED,EAAC,CAAC;AAAA,EAAC,CAAC;AAAE,SAAO,GAAG,OAAK,EAAC,UAASN,IAAE,UAASQ,IAAE,YAAWJ,IAAE,SAAQ,GAAE,QAAOS,IAAE,MAAKH,IAAE,QAAOC,GAAC,IAAG,CAACH,IAAEJ,IAAEJ,IAAE,GAAEa,IAAEF,IAAED,EAAC,CAAC;AAAC;AAAC,IAAI,KAAGI;AAAP,IAAS,KAAG,EAAG;AAAe,SAAS,GAAG,GAAEpB,IAAE;AAAC,MAAI,IAAG;AAAG,MAAG,EAAC,YAAWE,KAAE,MAAG,aAAYI,IAAE,YAAWE,IAAE,aAAY,GAAE,YAAWE,IAAE,OAAMI,IAAE,WAAUC,IAAE,SAAQC,IAAE,SAAQC,IAAE,OAAM,GAAE,WAAUE,IAAE,SAAQR,IAAE,GAAGC,GAAC,IAAE,GAAE,CAACC,IAAER,EAAC,IAAE,EAAE,IAAI,GAAEa,KAAEX,GAAE,IAAI,GAAEE,KAAE,GAAG,CAAC,GAAEY,KAAE,EAAG,GAAGZ,KAAE,CAACS,IAAElB,IAAEK,EAAC,IAAEL,OAAI,OAAK,CAAC,IAAE,CAACA,EAAC,CAAC,GAAEsB,MAAG,KAAGV,GAAE,YAAU,QAAM,KAAG,EAAE,UAAQ,EAAE,QAAO,EAAC,MAAKW,IAAE,QAAO,GAAE,SAAQC,GAAC,IAAE,GAAG,GAAE,CAACC,IAAEC,EAAC,IAAE,EAAEH,KAAE,YAAU,QAAQ,GAAE,IAAE,GAAG,GAAE,EAAC,UAASI,IAAE,YAAWC,GAAC,IAAE;AAAE,IAAE,MAAID,GAAET,EAAC,GAAE,CAACS,IAAET,EAAC,CAAC,GAAE,EAAE,MAAI;AAAC,QAAGI,OAAI,EAAE,UAAQJ,GAAE,SAAQ;AAAC,UAAGK,MAAGE,OAAI,WAAU;AAAC,QAAAC,GAAE,SAAS;AAAE;AAAA,MAAM;AAAC,aAAO,EAAGD,IAAE,EAAC,CAAC,QAAQ,GAAE,MAAIG,GAAEV,EAAC,GAAE,CAAC,SAAS,GAAE,MAAIS,GAAET,EAAC,EAAC,CAAC;AAAA,IAAC;AAAA,EAAC,GAAE,CAACO,IAAEP,IAAES,IAAEC,IAAEL,IAAED,EAAC,CAAC;AAAE,MAAI,IAAEhB,GAAG;AAAE,IAAE,MAAI;AAAC,QAAGG,MAAG,KAAGgB,OAAI,aAAWP,GAAE,YAAU,KAAK,OAAM,IAAI,MAAM,iEAAiE;AAAA,EAAC,GAAE,CAACA,IAAEO,IAAE,GAAEhB,EAAC,CAAC;AAAE,MAAI,KAAGe,MAAG,CAAC,GAAEK,KAAE,KAAGN,MAAGC,IAAE,IAAEjB,GAAE,KAAE,GAAEuB,KAAE,GAAG,MAAI;AAAC,MAAE,YAAUJ,GAAE,QAAQ,GAAEE,GAAEV,EAAC;AAAA,EAAE,GAAE,CAAC,GAAE,IAAEP,GAAE,OAAG;AAAC,MAAE,UAAQ;AAAG,QAAI,IAAE,IAAE,UAAQ;AAAQ,IAAAmB,GAAE,QAAQZ,IAAE,GAAE,OAAG;AAAC,YAAI,UAAQZ,MAAG,QAAMA,GAAE,IAAE,MAAI,YAAU,KAAG,QAAM,EAAE;AAAA,IAAE,CAAC;AAAA,EAAC,CAAC,GAAEyB,KAAEpB,GAAE,OAAG;AAAC,QAAI,IAAE,IAAE,UAAQ;AAAQ,MAAE,UAAQ,OAAGmB,GAAE,OAAOZ,IAAE,GAAE,OAAG;AAAC,YAAI,UAAQV,MAAG,QAAMA,GAAE,IAAE,MAAI,YAAUE,MAAG,QAAMA,GAAE;AAAA,IAAE,CAAC,GAAE,MAAI,WAAS,CAACN,GAAE0B,EAAC,MAAIJ,GAAE,QAAQ,GAAEE,GAAEV,EAAC;AAAA,EAAE,CAAC;AAAE,KAAG,MAAI;AAAC,IAAAT,MAAGP,OAAI,EAAEqB,EAAC,GAAEQ,GAAER,EAAC;AAAA,EAAE,GAAE,CAACA,IAAEd,IAAEP,EAAC,CAAC;AAAE,MAAI,KAAI,uBAAI,EAAE,CAACA,MAAG,CAACO,MAAG,CAAC,KAAG,KAAK,GAAE,CAAC,EAACuB,EAAC,IAAE,EAAG,IAAGnB,IAAEU,IAAE,EAAC,OAAM,GAAE,KAAIQ,GAAC,CAAC,GAAE,KAAG,EAAG,EAAC,KAAIV,IAAE,aAAY,KAAGrB,GAAGY,GAAE,WAAUiB,MAAGf,IAAEe,MAAGd,IAAEiB,GAAE,SAAOlB,IAAEkB,GAAE,SAAOA,GAAE,UAAQjB,IAAEiB,GAAE,SAAO,CAACA,GAAE,UAAQhB,IAAEgB,GAAE,SAAO,GAAEA,GAAE,SAAO,CAACA,GAAE,UAAQb,IAAEa,GAAE,SAAOA,GAAE,UAAQrB,IAAE,CAACqB,GAAE,cAAYT,MAAGN,EAAC,MAAI,OAAK,SAAO,GAAG,KAAK,MAAI,QAAO,GAAGgB,GAAGD,EAAC,EAAC,CAAC,GAAEE,KAAE;AAAE,EAAAT,OAAI,cAAYS,MAAGtB,GAAE,OAAMa,OAAI,aAAWS,MAAGtB,GAAE,SAAQW,MAAGE,OAAI,aAAWS,MAAGtB,GAAE,UAAS,CAACW,MAAGE,OAAI,cAAYS,MAAGtB,GAAE;AAAS,MAAI,KAAG,EAAG;AAAE,SAAOX,GAAE,cAAcE,GAAE,UAAS,EAAC,OAAM2B,GAAC,GAAE7B,GAAE,cAAcA,IAAG,EAAC,OAAMiC,GAAC,GAAE,GAAG,EAAC,UAAS,IAAG,YAAWtB,IAAE,YAAW,IAAG,UAAS,IAAG,SAAQa,OAAI,WAAU,MAAK,mBAAkB,CAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAG,GAAEzB,IAAE;AAAC,MAAG,EAAC,MAAKE,IAAE,QAAOI,KAAE,OAAG,SAAQE,KAAE,MAAG,GAAG,EAAC,IAAE,GAAEE,KAAEH,GAAE,IAAI,GAAEO,KAAE,GAAG,CAAC,GAAEC,KAAE,EAAG,GAAGD,KAAE,CAACJ,IAAEV,EAAC,IAAEA,OAAI,OAAK,CAAC,IAAE,CAACA,EAAC,CAAC;AAAE,EAAAM,GAAG;AAAE,MAAIU,KAAEO,GAAG;AAAE,MAAGrB,OAAI,UAAQc,OAAI,SAAOd,MAAGc,KAAEJ,GAAE,UAAQA,GAAE,OAAMV,OAAI,OAAO,OAAM,IAAI,MAAM,0EAA0E;AAAE,MAAG,CAACe,IAAE,CAAC,IAAE,EAAEf,KAAE,YAAU,QAAQ,GAAEiB,KAAE,GAAG,MAAI;AAAC,IAAAjB,MAAG,EAAE,QAAQ;AAAA,EAAC,CAAC,GAAE,CAACS,IAAEC,EAAC,IAAE,EAAE,IAAE,GAAEC,KAAEN,GAAE,CAACL,EAAC,CAAC;AAAE,IAAE,MAAI;AAAC,IAAAS,OAAI,SAAIE,GAAE,QAAQA,GAAE,QAAQ,SAAO,CAAC,MAAIX,OAAIW,GAAE,QAAQ,KAAKX,EAAC,GAAEU,GAAE,KAAE;AAAA,EAAE,GAAE,CAACC,IAAEX,EAAC,CAAC;AAAE,MAAIG,KAAE,GAAG,OAAK,EAAC,MAAKH,IAAE,QAAOI,IAAE,SAAQK,GAAC,IAAG,CAACT,IAAEI,IAAEK,EAAC,CAAC;AAAE,IAAE,MAAI;AAAC,IAAAT,KAAE,EAAE,SAAS,IAAE,CAACE,GAAEe,EAAC,KAAGT,GAAE,YAAU,QAAM,EAAE,QAAQ;AAAA,EAAC,GAAE,CAACR,IAAEiB,EAAC,CAAC;AAAE,MAAID,KAAE,EAAC,SAAQV,GAAC,GAAEC,KAAEE,GAAE,MAAI;AAAC,QAAIY;AAAE,IAAAZ,MAAGC,GAAE,KAAE,IAAGW,KAAE,EAAE,gBAAc,QAAMA,GAAE,KAAK,CAAC;AAAA,EAAC,CAAC,GAAEF,KAAEV,GAAE,MAAI;AAAC,QAAIY;AAAE,IAAAZ,MAAGC,GAAE,KAAE,IAAGW,KAAE,EAAE,gBAAc,QAAMA,GAAE,KAAK,CAAC;AAAA,EAAC,CAAC,GAAED,KAAE,EAAG;AAAE,SAAOrB,GAAE,cAAcE,GAAE,UAAS,EAAC,OAAMgB,GAAC,GAAElB,GAAE,cAAc,EAAE,UAAS,EAAC,OAAMI,GAAC,GAAEiB,GAAE,EAAC,UAAS,EAAC,GAAGJ,IAAE,IAAGE,IAAE,UAASnB,GAAE,cAAc,IAAG,EAAC,KAAIc,IAAE,GAAGG,IAAE,GAAG,GAAE,aAAYT,IAAE,aAAYY,GAAC,CAAC,EAAC,GAAE,YAAW,CAAC,GAAE,YAAWD,IAAE,UAAS,IAAG,SAAQH,OAAI,WAAU,MAAK,aAAY,CAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAG,GAAEjB,IAAE;AAAC,MAAIE,KAAE,EAAE,CAAC,MAAI,MAAKI,KAAEiB,GAAG,MAAI;AAAK,SAAOtB,GAAE,cAAcA,GAAE,UAAS,MAAK,CAACC,MAAGI,KAAEL,GAAE,cAAc,GAAE,EAAC,KAAID,IAAE,GAAG,EAAC,CAAC,IAAEC,GAAE,cAAc,IAAG,EAAC,KAAID,IAAE,GAAG,EAAC,CAAC,CAAC;AAAC;AAAC,IAAI,IAAE,EAAE,EAAE;AAAV,IAAY,KAAG,EAAE,EAAE;AAAnB,IAAqB,KAAG,EAAE,EAAE;AAA5B,IAA8B,KAAG,OAAO,OAAO,GAAE,EAAC,OAAM,IAAG,MAAK,EAAC,CAAC;;;AjBI5vL,SAAS,mBAAmB;AAsBxB,cAIA,YAJA;AApBG,SAAS,gBAAgB;AAC/B,QAAM,EAAE,iBAAiB,WAAW,IAAI,YAAY;AACpD,QAAM,CAAC,SAAS,UAAU,IAAImC,UAAS,KAAK;AAC5C,EAAAC,WAAU,MAAM;AAAE,eAAW,IAAI;AAAA,EAAG,GAAG,CAAC,CAAC;AAEzC,MAAI,CAAC,QAAS,QAAO;AAErB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAM,CAAC;AAAA,MACP,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SAAQ;AAAA,MACR;AAAA,QAAC;AAAA;AAAA,UACA,WAAU;AAAA,UACV,MAAK;AAAA,UACL,aAAU;AAAA,UACV;AAAA,gCAAC,OAAE,WAAU,OAAM,yFAGnB;AAAA,YACA,qBAAC,SAAI,WAAU,6DACd;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,MAAM,WAAW,KAAK;AAAA,kBAAG;AAAA;AAAA,cAEnC;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,MAAM,WAAW,IAAI;AAAA,kBAAG;AAAA;AAAA,cAElC;AAAA,eACD;AAAA;AAAA;AAAA,MACD;AAAA;AAAA,EACD;AAEF;;;AkB7CA,OAAO,UAAU;AACjB,SAAS,oBAAoB;AAyDb,SACkB,OAAAC,MADlB,QAAAC,aAAA;AAvDhB,SAAS,MAAM,OAAkC;AAC7C,SAAO,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG;AACzC;AAoBO,IAAM,mCACT;AAAA,EACI,eAAe;AAAA,EACf,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AACf;AAEG,SAAS,4BACZ,WACF;AACE,QAAMC,KAAI;AACV,SAAO;AAAA,IACH,eAAe,GAAGA,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,WAAW,GAAGA,GAAE,WAAW,WAAW,SAAS;AAAA,IAC/C,WAAW,GAAGA,GAAE,WAAW,WAAW,SAAS;AAAA,IAC/C,WAAW,GAAGA,GAAE,WAAW,WAAW,SAAS;AAAA,EACnD;AACJ;AAGO,SAAS,YAAY;AAAA,EACxB;AAAA,EACA;AACJ,GAGG;AACC,QAAM,QAAQ,4BAA4B,WAAW;AAErD,SACI,gBAAAF,KAAC,SAAI,cAAW,cAAa,WAAW,MAAM,eACzC,gBAAM,IAAI,CAAC,MAAM,UACd,gBAAAC,MAAC,UAAoC,WAAU,oCAC1C;AAAA,YAAQ,KAAK,gBAAAD,KAAC,gBAAa,WAAW,MAAM,WAAW;AAAA,IACvD,KAAK,OACF,gBAAAA,KAAC,QAAK,MAAM,KAAK,MAAM,WAAW,MAAM,WACnC,eAAK,OACV,IAEA,gBAAAA,KAAC,UAAK,WAAW,MAAM,WAAY,eAAK,OAAM;AAAA,OAP3C,GAAG,KAAK,KAAK,IAAI,KAAK,EASjC,CACH,GACL;AAER;;;ACvEA,OAAOG,WAAU;AACjB,SAAS,eAAe;AAExB,SAAS,oBAAoB;AA2FT,SA0DQ,UAtDJ,OAAAC,MAJJ,QAAAC,aAAA;AAzFpB,SAASC,OAAM,OAAkC;AAC7C,SAAO,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG;AACzC;AAEA,SAAS,MAAM,OAAe;AAC1B,SAAO,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACvC;AAoBO,IAAM,iCAAgE;AAAA,EACzE,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,mBACI;AAAA,EACJ,UACI;AAAA,EACJ,eACI;AAAA,EACJ,uBAAuB;AAAA,EACvB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,kBAAkB;AACtB;AAEO,SAAS,yBAAyB,WAAiC;AACtE,QAAMC,KAAI;AACV,SAAO;AAAA,IACH,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,mBAAmBD;AAAA,MACfC,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,mBAAmBD;AAAA,MACfC,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,UAAUD,IAAGC,GAAE,UAAU,WAAW,QAAQ;AAAA,IAC5C,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,uBAAuBD;AAAA,MACnBC,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,cAAcD,IAAGC,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,kBAAkBD,IAAGC,GAAE,kBAAkB,WAAW,gBAAgB;AAAA,EACxE;AACJ;AAEO,SAAS,SAAS;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AACJ,GAIG;AACC,QAAM,EAAE,gBAAgB,IAAI,QAAQ;AACpC,QAAM,QAAQ,yBAAyB,WAAW;AAElD,SACI,gBAAAH,KAAC,SAAI,WAAW,MAAM,eACjB,qBAAW,IAAI,CAAC,aAAa;AAC1B,UAAM,kBAAkB,MAAM;AAAA,MAC1B,CAAC,SAAS,KAAK,gBAAgB,SAAS;AAAA,IAC5C;AACA,QAAI,gBAAgB,WAAW,GAAG;AAC9B,aAAO;AAAA,IACX;AACA,WACI,gBAAAC;AAAA,MAAC;AAAA;AAAA,QAEG,WAAW,MAAM;AAAA,QAEjB;AAAA,0BAAAD,KAAC,QAAG,WAAW,MAAM,eAAgB,mBAAS,MAAK;AAAA,UAEnD,gBAAAA,KAAC,SAAI,WAAW,MAAM,mBACjB,0BAAgB,IAAI,CAAC,SAClB,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEG;AAAA,cACA,UAAU,gBAAgB,KAAK,UAAU;AAAA,cACzC;AAAA;AAAA,YAHK,KAAK;AAAA,UAId,CACH,GACL;AAAA;AAAA;AAAA,MAdK,SAAS;AAAA,IAelB;AAAA,EAER,CAAC,GACL;AAER;AAEA,SAAS,SAAS;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACJ,GAIG;AAEC,QAAM,UAAU,KAAK,SAAS,CAAC;AAC/B,QAAM,SACF,SAAS,iBAAiB,QAAQ,QAAQ,gBAAgB,QAAQ;AAEtE,SACI,gBAAAC;AAAA,IAACF;AAAA,IAAA;AAAA,MACG,MAAM,SAAS,aAAa,KAAK,MAAM,KAAK,YAAY,CAAC;AAAA,MACzD,WAAW,MAAM;AAAA,MAEjB;AAAA,wBAAAC,KAAC,SAAI,WAAW,MAAM,eACjB;AAAA,QAEG,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACG,KAAK;AAAA,YACL,KAAK,KAAK;AAAA,YACV,WAAU;AAAA;AAAA,QACd,GAER;AAAA,QAEA,gBAAAC,MAAC,SAAI,WAAW,MAAM,uBAClB;AAAA,0BAAAD,KAAC,OAAE,WAAW,MAAM,cAAe,eAAK,MAAK;AAAA,UAC5C,WACG,gBAAAA,KAAA,YACK,mBACG,gBAAAC,MAAA,YACI;AAAA,4BAAAD,KAAC,OAAE,WAAW,MAAM,eACf,gBAAM,QAAQ,aAAc,GACjC;AAAA,YACA,gBAAAA,KAAC,OAAE,WAAW,MAAM,kBACf,gBAAM,QAAQ,KAAK,GACxB;AAAA,aACJ,IAEA,gBAAAA,KAAC,OAAE,WAAW,MAAM,eACf,gBAAM,QAAQ,KAAK,GACxB,GAER;AAAA,WAER;AAAA;AAAA;AAAA,EACJ;AAER;;;AC1KA,OAAOI,WAAU;AACjB,SAAS,YAAAC,iBAAgB;AACzB,SAAS,aAAa,iBAAiB;AAEvC,SAAS,gBAAAC,qBAAoB;AA2GT,SAkFI,YAAAC,WAlFJ,OAAAC,MAyBR,QAAAC,aAzBQ;AAzGpB,SAASC,OAAM,OAAkC;AAC7C,SAAO,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG;AACzC;AAEA,SAASC,OAAM,OAAe;AAC1B,SAAO,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACvC;AAuBO,IAAM,sCACT;AAAA,EACI,eAAe;AAAA,EACf,mBACI;AAAA,EACJ,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,UACI;AAAA,EACJ,uBAAuB;AAAA,EACvB,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,eAAe;AAAA,EACf,kBAAkB;AACtB;AAEG,SAAS,8BACZ,WACF;AACE,QAAMC,KAAI;AACV,SAAO;AAAA,IACH,eAAeF,IAAGE,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,mBAAmBF;AAAA,MACfE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,iBAAiBF,IAAGE,GAAE,iBAAiB,WAAW,eAAe;AAAA,IACjE,eAAeF,IAAGE,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,mBAAmBF;AAAA,MACfE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,gBAAgBF,IAAGE,GAAE,gBAAgB,WAAW,cAAc;AAAA,IAC9D,UAAUF,IAAGE,GAAE,UAAU,WAAW,QAAQ;AAAA,IAC5C,uBAAuBF;AAAA,MACnBE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,cAAcF,IAAGE,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,qBAAqBF;AAAA,MACjBE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,wBAAwBF;AAAA,MACpBE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,eAAeF,IAAGE,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,kBAAkBF,IAAGE,GAAE,kBAAkB,WAAW,gBAAgB;AAAA,EACxE;AACJ;AAEO,SAAS,cAAc;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACJ,GAIG;AACC,QAAM,QAAQ,8BAA8B,WAAW;AAEvD,SACI,gBAAAJ,KAAC,SAAI,WAAW,MAAM,eACjB,qBAAW,IAAI,CAAC,aAAa;AAC1B,UAAM,kBAAkB,MAAM;AAAA,MAC1B,CAAC,SAAS,KAAK,gBAAgB,SAAS;AAAA,IAC5C;AACA,QAAI,gBAAgB,WAAW,GAAG;AAC9B,aAAO;AAAA,IACX;AACA,WACI,gBAAAA;AAAA,MAAC;AAAA;AAAA,QAEG;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MAHK,SAAS;AAAA,IAIlB;AAAA,EAER,CAAC,GACL;AAER;AAEA,SAAS,aAAa;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AACJ,GAIG;AACC,QAAM,CAAC,YAAY,aAAa,IAAIH,UAAS,KAAK;AAElD,SACI,gBAAAI,MAAC,SAAI,WAAW,MAAM,mBAClB;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACG,MAAK;AAAA,QACL,SAAS,MAAM,cAAc,CAAC,UAAU;AAAA,QACxC,WAAW,MAAM;AAAA,QAEjB;AAAA,0BAAAD,KAAC,QAAG,WAAW,MAAM,eAAgB,mBAAS,MAAK;AAAA,UAClD,aACG,gBAAAA,KAAC,aAAU,WAAW,MAAM,mBAAmB,IAE/C,gBAAAA,KAAC,eAAY,WAAW,MAAM,mBAAmB;AAAA;AAAA;AAAA,IAEzD;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACG,WAAWE;AAAA,UACP,aAAa,SAAS;AAAA,UACtB,MAAM;AAAA,QACV;AAAA,QAEC,0BAAgB,IAAI,CAAC,SAClB,gBAAAF;AAAA,UAACK;AAAA,UAAA;AAAA,YAEG;AAAA,YACA;AAAA;AAAA,UAFK,KAAK;AAAA,QAGd,CACH;AAAA;AAAA,IACL;AAAA,KACJ;AAER;AAEA,SAASA,UAAS;AAAA,EACd;AAAA,EACA;AACJ,GAGG;AACC,QAAM,UAAU,KAAK,SAAS,CAAC;AAC/B,QAAM,SACF,SAAS,iBAAiB,QAAQ,QAAQ,gBAAgB,QAAQ;AAEtE,SACI,gBAAAJ;AAAA,IAACL;AAAA,IAAA;AAAA,MACG,MAAM,SAASE,cAAa,KAAK,MAAM,KAAK,YAAY,CAAC;AAAA,MACzD,WAAW,MAAM;AAAA,MAEjB;AAAA,wBAAAG,MAAC,SAAI,WAAW,MAAM,uBAClB;AAAA,0BAAAD,KAAC,OAAE,WAAW,MAAM,cAAe,eAAK,MAAK;AAAA,UAC5C,KAAK,eACF,gBAAAA,KAAC,OAAE,WAAW,MAAM,qBACf,eAAK,aACV;AAAA,WAER;AAAA,QACC,WACG,gBAAAA,KAAC,SAAI,WAAW,MAAM,wBACjB,mBACG,gBAAAC,MAAAF,WAAA,EACI;AAAA,0BAAAC,KAAC,OAAE,WAAW,MAAM,eACf,UAAAG,OAAM,QAAQ,aAAc,GACjC;AAAA,UACA,gBAAAH,KAAC,OAAE,WAAW,MAAM,kBACf,UAAAG,OAAM,QAAQ,KAAK,GACxB;AAAA,WACJ,IAEA,gBAAAH,KAAC,OAAE,WAAW,MAAM,eACf,UAAAG,OAAM,QAAQ,KAAK,GACxB,GAER;AAAA;AAAA;AAAA,EAER;AAER;;;AClNA,SAAS,OAAO,YAAY;AAC5B,SAAS,sBAAsB,WAAAG,gBAAe;AAuJ/B,gBAAAC,MAsBC,QAAAC,aAtBD;AAnJf,SAASC,OAAM,OAAkC;AAC7C,SAAO,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG;AACzC;AAEA,SAASC,OAAM,OAAe;AAC1B,SAAO,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACvC;AA+BO,IAAM,+CACT;AAAA,EACI,eAAe;AAAA,EACf,OAAO;AAAA,EACP,aAAa;AAAA,EACb,SACI;AAAA,EACJ,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cACI;AAAA,EACJ,sBAAsB;AAAA,EACtB,wBACI;AAAA,EACJ,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,iBACI;AAAA,EACJ,eAAe;AAAA,EACf,WAAW;AAAA,EACX,kBACI;AAAA,EACJ,aAAa;AAAA,EACb,cACI;AAAA,EACJ,UAAU;AACd;AAEG,SAAS,sCACZ,WACF;AACE,QAAMC,KAAI;AACV,SAAO;AAAA,IACH,eAAeF,IAAGE,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,OAAOF,IAAGE,GAAE,OAAO,WAAW,KAAK;AAAA,IACnC,aAAaF,IAAGE,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,SAASF,IAAGE,GAAE,SAAS,WAAW,OAAO;AAAA,IACzC,cAAcF,IAAGE,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,YAAYF,IAAGE,GAAE,YAAY,WAAW,UAAU;AAAA,IAClD,cAAcF,IAAGE,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,sBAAsBF;AAAA,MAClBE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,wBAAwBF;AAAA,MACpBE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,mBAAmBF;AAAA,MACfE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,sBAAsBF;AAAA,MAClBE,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,aAAaF,IAAGE,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,eAAeF,IAAGE,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,kBAAkBF,IAAGE,GAAE,kBAAkB,WAAW,gBAAgB;AAAA,IACpE,iBAAiBF,IAAGE,GAAE,iBAAiB,WAAW,eAAe;AAAA,IACjE,eAAeF,IAAGE,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,WAAWF,IAAGE,GAAE,WAAW,WAAW,SAAS;AAAA,IAC/C,kBAAkBF,IAAGE,GAAE,kBAAkB,WAAW,gBAAgB;AAAA,IACpE,aAAaF,IAAGE,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,cAAcF,IAAGE,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,UAAUF,IAAGE,GAAE,UAAU,WAAW,QAAQ;AAAA,EAChD;AACJ;AAEO,SAAS,sBAAsB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAMG;AACC,QAAM,QAAQ,sCAAsC,WAAW;AAE/D,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI,qBAAqB,YAAY,MAAM,SAAS;AAEpD,QAAM,EAAE,WAAW,IAAIC,SAAQ;AAE/B,MAAI,CAAC,MAAM;AACP,WAAO,gBAAAL,KAAC,SAAI,WAAW,MAAM,UAAU,6BAAe;AAAA,EAC1D;AAEA,QAAM,WAAW,WAAW;AAAA,IACxB,CAACM,OAAMA,GAAE,gBAAgB,KAAK;AAAA,EAClC;AAEA,SACI,gBAAAL,MAAC,SAAI,WAAW,MAAM,eAClB;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACG,OAAO;AAAA,UACH,EAAE,OAAO,QAAQ,MAAM,QAAQ;AAAA,UAC/B,GAAI,WAAW,CAAC,EAAE,OAAO,SAAS,KAAK,CAAC,IAAI,CAAC;AAAA,UAC7C,EAAE,OAAO,KAAK,KAAK;AAAA,QACvB;AAAA;AAAA,IACJ;AAAA,IACA,gBAAAA,KAAC,QAAG,WAAW,MAAM,OAAQ,eAAK,MAAK;AAAA,IACtC,KAAK,eACF,gBAAAA,KAAC,OAAE,WAAW,MAAM,aAAc,eAAK,aAAY;AAAA,IAGtD,SAAS,SAAS,KACf,gBAAAC,MAAC,SAAI,WAAW,MAAM,SAClB;AAAA,sBAAAD,KAAC,QAAG,WAAW,MAAM,cAAc,sBAAQ;AAAA,MAC3C,gBAAAA,KAAC,SAAI,WAAW,MAAM,YACjB,mBAAS,IAAI,CAACO,OACX,gBAAAP;AAAA,QAAC;AAAA;AAAA,UAEG,OAAOO,GAAE;AAAA,UACT,SAASJ,OAAMI,GAAE,KAAK;AAAA,UACtB,UAAUA,GAAE,YAAY,QAAQ;AAAA,UAChC,SAAS,MAAM,WAAWA,EAAC;AAAA,UAC3B;AAAA;AAAA,QALKA,GAAE;AAAA,MAMX,CACH,GACL;AAAA,OACJ;AAAA,KAGF,QAAQ,YAAY,UAAU,KAAK,KACjC,gBAAAN,MAAC,SAAI,WAAW,MAAM,SAClB;AAAA,sBAAAD,KAAC,QAAG,WAAW,MAAM,cAAc,sBAAQ;AAAA,MAC3C,gBAAAA,KAAC,SAAI,WAAW,MAAM,YACjB,kBAAQ,WAAY,IAAI,CAAC,cAAc;AACpC,cAAM,kBACF,UAAU,qBAAqB;AACnC,cAAM,WACF,OAAO,YAAY;AAAA,UACf,CAACM,OAAMA,GAAE,OAAO,UAAU;AAAA,QAC9B,GAAG,qBAAqB;AAC5B,cAAM,WAAW,WAAW;AAC5B,eACI,gBAAAN;AAAA,UAAC;AAAA;AAAA,YAEG,OAAO,UAAU;AAAA,YACjB;AAAA,YACA,SAAS,MACL;AAAA,cACI,UAAU;AAAA,cACV,WAAW,IAAI;AAAA,YACnB;AAAA,YAEJ;AAAA;AAAA,UATK,UAAU;AAAA,QAUnB;AAAA,MAER,CAAC,GACL;AAAA,OACJ;AAAA,IAGH,WAAW,IAAI,CAAC,SACb,gBAAAC,MAAC,SAAuB,WAAW,MAAM,SACrC;AAAA,sBAAAD,KAAC,QAAG,WAAW,MAAM,cAAe,eAAK,YAAW;AAAA,MAEpD,gBAAAA,KAAC,SAAI,WAAW,MAAM,YACjB,eAAK,QAAQ,IAAI,CAAC,WACf,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEG,OAAO,OAAO;AAAA,UACd,SACI,OAAO,WAAW,IACZ,IAAIG,OAAM,OAAO,QAAQ,CAAC,KAC1B;AAAA,UAEV,UAAU,OAAO;AAAA,UACjB,SAAS,OAAO;AAAA,UAChB;AAAA;AAAA,QATK,OAAO;AAAA,MAUhB,CACH,GACL;AAAA,MAEC,KAAK,QAAQ,KACV,gBAAAH,KAAC,OAAE,WAAW,MAAM,WAAY,eAAK,QAAQ,GAAE;AAAA,SArB7C,KAAK,OAuBf,CACH;AAAA,IAED,gBAAAC,MAAC,SAAI,WAAW,MAAM,SAClB;AAAA,sBAAAD,KAAC,QAAG,WAAW,MAAM,cAAc,sBAAQ;AAAA,MAC3C,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACG,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,YAAY,EAAE,OAAO,KAAK;AAAA,UAC3C,aAAY;AAAA,UACZ,WAAW,MAAM;AAAA,UACjB,MAAM;AAAA;AAAA,MACV;AAAA,OACJ;AAAA,IAEA,gBAAAC,MAAC,SAAI,WAAW,MAAM,SAClB;AAAA,sBAAAD,KAAC,QAAG,WAAW,MAAM,cAAc,uBAAS;AAAA,MAC5C,gBAAAC,MAAC,SAAI,WAAW,MAAM,aAClB;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACG,MAAK;AAAA,YACL,WAAW,MAAM;AAAA,YACjB,SAAS,MAAM,YAAY,CAACQ,OAAM,KAAK,IAAI,GAAGA,KAAI,CAAC,CAAC;AAAA,YAEpD,0BAAAR,KAAC,SAAM,WAAU,WAAU;AAAA;AAAA,QAC/B;AAAA,QACA,gBAAAA,KAAC,OAAE,WAAW,MAAM,eAAgB,oBAAS;AAAA,QAC7C,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACG,MAAK;AAAA,YACL,WAAW,MAAM;AAAA,YACjB,SAAS,MAAM,YAAY,CAACQ,OAAMA,KAAI,CAAC;AAAA,YAEvC,0BAAAR,KAAC,QAAK,WAAU,WAAU;AAAA;AAAA,QAC9B;AAAA,SACJ;AAAA,OACJ;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACG,MAAK;AAAA,QACL,UAAU,CAAC;AAAA,QACX,SAAS,MAAM;AACX,iBAAO;AACP,4BAAkB;AAAA,QACtB;AAAA,QACA,WAAW,MAAM;AAAA,QAEhB,sBACK,UAAU,UAAU,UAAU,KAC9B,GAAG,aAAa,iBAAiB,aAAa,WAAMG,OAAM,aAAa,KAAK,CAAC;AAAA;AAAA,IACvF;AAAA,KACJ;AAER;AAEA,SAAS,aAAa;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAMG;AACC,SACI,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACG,MAAK;AAAA,MACL;AAAA,MACA,WAAWC;AAAA,QACP,MAAM;AAAA,QACN,WACM,MAAM,uBACN,MAAM;AAAA,MAChB;AAAA,MAEA;AAAA,wBAAAF,KAAC,UAAK,WAAW,MAAM,mBAAoB,iBAAM;AAAA,QAChD,WACG,gBAAAA,KAAC,UAAK,WAAW,MAAM,sBAAuB,mBAAQ;AAAA;AAAA;AAAA,EAE9D;AAER;;;ACxUA,SAAS,SAAS,YAAAS,iBAAgB;AAClC,SAAS,cAAc;AAyJX,SACI,OAAAC,MADJ,QAAAC,aAAA;AAtJZ,SAASC,OAAM,OAAkC;AAC7C,SAAO,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG;AACzC;AAEA,SAAS,eAAe,UAAoB;AACxC,SAAO,GAAG,SAAS,IAAI,IAAI,SAAS,WAAW,EAAE,GAAG,YAAY;AACpE;AAGA,SAAS,UAAU,UAAoB,OAAuB;AAC1D,QAAM,OAAO,eAAe,QAAQ;AACpC,QAAMC,KAAI,MAAM,KAAK,EAAE,YAAY;AACnC,MAAI,CAACA,GAAG,QAAO;AACf,MAAI,KAAK,WAAWA,EAAC,KAAK,SAAS,KAAK,YAAY,EAAE,WAAWA,EAAC,GAAG;AACjE,WAAO;AAAA,EACX;AACA,MAAI,KAAK,SAASA,EAAC,EAAG,QAAO;AAC7B,SAAO;AACX;AAEA,SAAS,cACL,WACA,OACA,kBACU;AACV,QAAMA,KAAI,MAAM,KAAK;AACrB,QAAM,SAASA,KACT,CAAC,GAAG,SAAS,EAAE,KAAK,CAACC,IAAGC,OAAM;AAC1B,UAAM,WAAW,UAAUD,IAAGD,EAAC,IAAI,UAAUE,IAAGF,EAAC;AACjD,QAAI,aAAa,EAAG,QAAO;AAC3B,WAAOC,GAAE,KAAK,cAAcC,GAAE,IAAI;AAAA,EACtC,CAAC,IACD,CAAC,GAAG,SAAS;AAEnB,MAAI,oBAAoB,KAAM,QAAO;AAErC,QAAM,cAAc,OAAO;AAAA,IACvB,CAAC,aAAa,SAAS,gBAAgB;AAAA,EAC3C;AACA,MAAI,eAAe,EAAG,QAAO;AAE7B,QAAM,CAAC,MAAM,IAAI,OAAO,OAAO,aAAa,CAAC;AAC7C,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,CAAC,QAAQ,GAAG,MAAM;AAC7B;AAwBO,IAAM,qCACT;AAAA,EACI,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,YACI;AAAA,EACJ,aACI;AAAA,EACJ,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,MAAM;AAAA,EACN,aACI;AAAA,EACJ,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,gBACI;AAAA,EACJ,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,cACI;AACR;AAEG,SAAS,6BACZ,WACF;AACE,QAAMC,KAAI;AACV,SAAO;AAAA,IACH,eAAeJ,IAAGI,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,iBAAiBJ,IAAGI,GAAE,iBAAiB,WAAW,eAAe;AAAA,IACjE,YAAYJ,IAAGI,GAAE,YAAY,WAAW,UAAU;AAAA,IAClD,aAAaJ,IAAGI,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,kBAAkBJ,IAAGI,GAAE,kBAAkB,WAAW,gBAAgB;AAAA,IACpE,cAAcJ,IAAGI,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,MAAMJ,IAAGI,GAAE,MAAM,WAAW,IAAI;AAAA,IAChC,aAAaJ,IAAGI,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,qBAAqBJ;AAAA,MACjBI,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,uBAAuBJ;AAAA,MACnBI,GAAE;AAAA,MACF,WAAW;AAAA,IACf;AAAA,IACA,gBAAgBJ,IAAGI,GAAE,gBAAgB,WAAW,cAAc;AAAA,IAC9D,cAAcJ,IAAGI,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,iBAAiBJ,IAAGI,GAAE,iBAAiB,WAAW,eAAe;AAAA,IACjE,cAAcJ,IAAGI,GAAE,cAAc,WAAW,YAAY;AAAA,EAC5D;AACJ;AAEO,SAAS,aAAa;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAMG;AACC,QAAM,CAAC,OAAO,QAAQ,IAAIP,UAAS,EAAE;AACrC,QAAM,CAAC,UAAU,WAAW,IAAIA;AAAA,IAC5B,MAAM,mBAAmB;AAAA,EAC7B;AACA,QAAM,QAAQ,6BAA6B,WAAW;AACtD,QAAM,mBAAmB,iBAAiB;AAE1C,QAAM,SAAS;AAAA,IACX,MAAM,cAAc,WAAW,OAAO,gBAAgB;AAAA,IACtD,CAAC,WAAW,OAAO,gBAAgB;AAAA,EACvC;AAEA,QAAM,eAAe,MAAM,KAAK;AAChC,QAAM,YACF,aAAa,SAAS,KACtB,UAAU,MAAM,CAAC,aAAa,UAAU,UAAU,YAAY,MAAM,CAAC;AAEzE,SACI,gBAAAE,MAAC,SAAI,WAAW,MAAM,eAClB;AAAA,oBAAAA,MAAC,SAAI,WAAW,MAAM,iBAClB;AAAA,sBAAAD,KAAC,UAAO,WAAW,MAAM,YAAY,aAAa,GAAG;AAAA,MACrD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACG,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,UACxC,aAAY;AAAA,UACZ,WAAW,MAAM;AAAA,UACjB,cAAW;AAAA;AAAA,MACf;AAAA,OACJ;AAAA,IAEC,aACG,gBAAAC,MAAC,OAAE,WAAW,MAAM,kBAAkB;AAAA;AAAA,MACP;AAAA,MAAa;AAAA,OAE5C;AAAA,IAGH,OAAO,WAAW,IACf,gBAAAD,KAAC,OAAE,WAAW,MAAM,cAAc,qCAAuB,IAEzD,gBAAAA,KAAC,QAAG,WAAW,MAAM,MAChB,iBAAO,IAAI,CAAC,aAAa;AACtB,YAAM,aACF,UAAU,gBAAgB,SAAS;AACvC,aACI,gBAAAC;AAAA,QAAC;AAAA;AAAA,UAEG,WAAWC;AAAA,YACP,MAAM;AAAA,YACN,aACM,MAAM,sBACN,MAAM;AAAA,UAChB;AAAA,UAEA;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAS,MAAM,YAAY,QAAQ;AAAA,gBACnC,gBAAc;AAAA,gBACd,WAAW,MAAM;AAAA,gBAEjB;AAAA,kCAAAD,KAAC,OAAE,WAAW,MAAM,cACf,mBAAS,MACd;AAAA,kBACC,SAAS,WACN,gBAAAA,KAAC,OAAE,WAAW,MAAM,iBACf,mBAAS,SACd;AAAA;AAAA;AAAA,YAER;AAAA,YACC,cACG,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAS,MAAM,SAAS,QAAQ;AAAA,gBAChC,WAAW,MAAM;AAAA,gBACpB;AAAA;AAAA,YAED;AAAA;AAAA;AAAA,QA9BC,SAAS;AAAA,MAgClB;AAAA,IAER,CAAC,GACL;AAAA,KAER;AAER;;;AC7NA,SAAS,aAAAO,YAAW,YAAAC,iBAAgC;AACpD,OAAOC,WAAU;AACjB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,SAAAC,QAAO,QAAQ,QAAAC,aAAY;AACpC;AAAA,EACC;AAAA,EACA,eAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAuQA,SA6cD,YAAAC,WA7cC,OAAAC,MAyIL,QAAAC,aAzIK;AApQP,SAASC,OAAM,OAAe;AAC7B,SAAO,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACpC;AAEA,SAASC,OAAM,OAA0C;AACxD,SAAO,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG;AACtC;AA0DO,IAAM,qCACZ;AAAA,EACC,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eACC;AAAA,EACD,iBACC;AAAA,EACD,iBACC;AAAA,EACD,SACC;AAAA,EACD,YACC;AAAA,EACD,gBACC;AAAA,EACD,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aACC;AAAA,EACD,aAAa;AAAA,EACb,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,eAAe;AAAA,EACf,gBACC;AAAA,EACD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,WACC;AAAA,EACD,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,UACC;AAAA,EACD,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,kBACC;AAAA,EACD,kBAAkB;AAAA,EAClB,cACC;AAAA,EACD,mBAAmB;AAAA,EACnB,UAAU;AAAA,EACV,YACC;AAAA,EACD,YAAY;AACb;AAEM,SAAS,6BACf,WACC;AACD,QAAMC,KAAI;AACV,SAAO;AAAA,IACN,OAAOD,IAAGC,GAAE,OAAO,WAAW,KAAK;AAAA,IACnC,YAAYD,IAAGC,GAAE,YAAY,WAAW,UAAU;AAAA,IAClD,WAAWD,IAAGC,GAAE,WAAW,WAAW,SAAS;AAAA,IAC/C,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,iBAAiBD,IAAGC,GAAE,iBAAiB,WAAW,eAAe;AAAA,IACjE,iBAAiBD,IAAGC,GAAE,iBAAiB,WAAW,eAAe;AAAA,IACjE,SAASD,IAAGC,GAAE,SAAS,WAAW,OAAO;AAAA,IACzC,YAAYD,IAAGC,GAAE,YAAY,WAAW,UAAU;AAAA,IAClD,gBAAgBD,IAAGC,GAAE,gBAAgB,WAAW,cAAc;AAAA,IAC9D,YAAYD,IAAGC,GAAE,YAAY,WAAW,UAAU;AAAA,IAClD,YAAYD,IAAGC,GAAE,YAAY,WAAW,UAAU;AAAA,IAClD,aAAaD,IAAGC,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,aAAaD,IAAGC,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,oBAAoBD;AAAA,MACnBC,GAAE;AAAA,MACF,WAAW;AAAA,IACZ;AAAA,IACA,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,aAAaD,IAAGC,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,cAAcD,IAAGC,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,UAAUD,IAAGC,GAAE,UAAU,WAAW,QAAQ;AAAA,IAC5C,QAAQD,IAAGC,GAAE,QAAQ,WAAW,MAAM;AAAA,IACtC,WAAWD,IAAGC,GAAE,WAAW,WAAW,SAAS;AAAA,IAC/C,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,gBAAgBD,IAAGC,GAAE,gBAAgB,WAAW,cAAc;AAAA,IAC9D,MAAMD,IAAGC,GAAE,MAAM,WAAW,IAAI;AAAA,IAChC,aAAaD,IAAGC,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,aAAaD,IAAGC,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,gBAAgBD,IAAGC,GAAE,gBAAgB,WAAW,cAAc;AAAA,IAC9D,OAAOD,IAAGC,GAAE,OAAO,WAAW,KAAK;AAAA,IACnC,WAAWD,IAAGC,GAAE,WAAW,WAAW,SAAS;AAAA,IAC/C,iBAAiBD,IAAGC,GAAE,iBAAiB,WAAW,eAAe;AAAA,IACjE,mBAAmBD;AAAA,MAClBC,GAAE;AAAA,MACF,WAAW;AAAA,IACZ;AAAA,IACA,WAAWD,IAAGC,GAAE,WAAW,WAAW,SAAS;AAAA,IAC/C,iBAAiBD,IAAGC,GAAE,iBAAiB,WAAW,eAAe;AAAA,IACjE,mBAAmBD;AAAA,MAClBC,GAAE;AAAA,MACF,WAAW;AAAA,IACZ;AAAA,IACA,aAAaD,IAAGC,GAAE,aAAa,WAAW,WAAW;AAAA,IACrD,mBAAmBD;AAAA,MAClBC,GAAE;AAAA,MACF,WAAW;AAAA,IACZ;AAAA,IACA,qBAAqBD;AAAA,MACpBC,GAAE;AAAA,MACF,WAAW;AAAA,IACZ;AAAA,IACA,UAAUD,IAAGC,GAAE,UAAU,WAAW,QAAQ;AAAA,IAC5C,cAAcD,IAAGC,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,mBAAmBD;AAAA,MAClBC,GAAE;AAAA,MACF,WAAW;AAAA,IACZ;AAAA,IACA,eAAeD,IAAGC,GAAE,eAAe,WAAW,aAAa;AAAA,IAC3D,kBAAkBD,IAAGC,GAAE,kBAAkB,WAAW,gBAAgB;AAAA,IACpE,kBAAkBD,IAAGC,GAAE,kBAAkB,WAAW,gBAAgB;AAAA,IACpE,cAAcD,IAAGC,GAAE,cAAc,WAAW,YAAY;AAAA,IACxD,mBAAmBD;AAAA,MAClBC,GAAE;AAAA,MACF,WAAW;AAAA,IACZ;AAAA,IACA,UAAUD,IAAGC,GAAE,UAAU,WAAW,QAAQ;AAAA,IAC5C,YAAYD,IAAGC,GAAE,YAAY,WAAW,UAAU;AAAA,IAClD,YAAYD,IAAGC,GAAE,YAAY,WAAW,UAAU;AAAA,EACnD;AACD;AASO,SAAS,aAAa;AAAA,EAC5B;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AAChB,GAKG;AACF,QAAM,QAAQ,6BAA6B,WAAW;AACtD,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,WAAW;AACf,QAAM,EAAE,SAAS,UAAU,IAAI,QAAQ;AACvC,QAAM,EAAE,iBAAiB,uBAAuB,IAAI,YAAY;AAAA,IAC/D,yBAAyB;AAAA,EAC1B,CAAC;AACD,QAAM,EAAE,KAAK,IAAI,SAAS;AAE1B,QAAM,CAAC,cAAc,eAAe,IAAIV,UAE9B,IAAI;AACd,EAAAD,WAAU,MAAM;AACf,QAAI,OAAO,SAAS,OAAO,SAAS,iBAAiB,GAAG;AACvD,YAAM,SAAS,gBAAgB,OAAO,SAAS,IAAI;AACnD,sBAAgB,MAAM;AACtB,UAAI,OAAO,UAAW,WAAU;AAAA,IACjC;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,MAAI,cAAc;AACjB,WACC,gBAAAO,KAAC,SAAM,OACL,uBAAa,YACb,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,QACC,gBAAAA;AAAA,UAACL;AAAA,UAAA;AAAA,YACA,MAAM;AAAA,YACN,WAAWQ;AAAA,cACV,MAAM;AAAA,cACN;AAAA,YACD;AAAA,YACA;AAAA;AAAA,QAED;AAAA;AAAA,IAEF,IAEA,gBAAAH;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,OAAM;AAAA,QACN,SAAS,aAAa;AAAA,QACtB,MAAK;AAAA,QACL,QACC,gBAAAA;AAAA,UAACL;AAAA,UAAA;AAAA,YACA,MAAM;AAAA,YACN,WAAWQ;AAAA,cACV,MAAM;AAAA,cACN;AAAA,YACD;AAAA,YACA;AAAA;AAAA,QAED;AAAA;AAAA,IAEF,GAEF;AAAA,EAEF;AAEA,MAAI,WAAW,CAAC,aAAa,CAAC,cAAc;AAC3C,WACC,gBAAAH,KAAC,SAAM,OACN,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,QACC,gBAAAA;AAAA,UAACL;AAAA,UAAA;AAAA,YACA,MAAM;AAAA,YACN,WAAWQ;AAAA,cACV,MAAM;AAAA,cACN;AAAA,YACD;AAAA,YACA;AAAA;AAAA,QAED;AAAA;AAAA,IAEF,GACD;AAAA,EAEF;AAEA,MAAI,OAAO;AACV,WACC,gBAAAH,KAAC,SAAM,OACN,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,OAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAK;AAAA,QACL,QACC,gBAAAA;AAAA,UAACL;AAAA,UAAA;AAAA,YACA,MAAM;AAAA,YACN,WAAWQ;AAAA,cACV,MAAM;AAAA,cACN;AAAA,YACD;AAAA,YACA;AAAA;AAAA,QAED;AAAA;AAAA,IAEF,GACD;AAAA,EAEF;AAEA,MAAI,wBAAwB;AAC3B,WACC,gBAAAH,KAAC,SAAM,OACN,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,QACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACA,MAAK;AAAA,YACL,SAAS,MAAM,KAAK,qBAAqB;AAAA,YACzC,WAAWG,IAAG,MAAM,eAAe,QAAQ;AAAA,YAC3C;AAAA;AAAA,QAED;AAAA;AAAA,IAEF,GACD;AAAA,EAEF;AAEA,MAAI,WAAW,gBAAgB;AAC9B,WACC,gBAAAH,KAAC,SAAM,OACN,0BAAAA;AAAA,MAAC;AAAA;AAAA,QAEA;AAAA,QACA,SAAS;AAAA,QAET,0BAAAA,KAAC,eAAY,OAAc,cAA4B;AAAA;AAAA,MAJlD,iBAAiB;AAAA,IAKvB,GACD;AAAA,EAEF;AAEA,SACC,gBAAAA,KAAC,SAAM,OACN,0BAAAA,KAAC,eAAY,OAAc,GAC5B;AAEF;AAEA,SAAS,YAAY;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACD,GAMG;AACF,SACC,gBAAAC,MAAC,SAAI,WAAWE,IAAG,MAAM,aAAa,MAAM,OAAO,GAClD;AAAA,oBAAAH,KAAC,QAAG,WAAW,MAAM,aAAc,iBAAM;AAAA,IACxC,WACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WACC,SAAS,UACN,MAAM,qBACN,MAAM;AAAA,QAGT;AAAA;AAAA,IACF;AAAA,IAED,gBAAAA,KAAC,SAAI,WAAW,MAAM,eAAgB,kBAAO;AAAA,KAC9C;AAEF;AAEA,SAAS,YAAY,EAAE,MAAM,GAAqB;AACjD,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,QAAQ;AACZ,QAAM,EAAE,UAAU,YAAY,IAAIF,aAAY;AAC9C,QAAM,EAAE,cAAc,IAAI,WAAW;AACrC,QAAM,CAAC,aAAa,cAAc,IAAIJ,UAA6B;AAEnE,QAAM,sBAAsB,MAAM;AAClC,QAAM,kBAAkB;AAAA,IACvB,gBAAgB,MAAM;AAAA,IACtB,oBAAoB;AAAA,IACpB,qBAAqB,MAAM;AAAA,IAC3B,qBAAqB,MAAM;AAAA,EAC5B;AAEA,QAAM,eAAe,OAAO,WAAoC;AAC/D,UAAM,iBAA2B;AAAA,MAChC,YAAY,OAAO;AAAA,MACnB,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,iBAAiB,OAAO;AAAA,IACzB;AACA,gBAAY,cAAc;AAE1B,QAAI;AACH,YAAM,cAAc;AAAA,IACrB,SAAS,KAAK;AACb;AAAA,QACC,eAAe,QAAQ,IAAI,UAAU;AAAA,MACtC;AAAA,IACD;AAAA,EACD;AAEA,SACC,gBAAAO,MAAC,SAAI,WAAW,MAAM,aACrB;AAAA,oBAAAD,KAAC,SAAM,SAAS,GAAG,OAAc;AAAA,IAEjC,gBAAAA,KAAC,QAAG,WAAW,MAAM,cAAc,wBAAU;AAAA,IAC7C,gBAAAA,KAAC,SAAI,WAAW,MAAM,UACpB,gBAAM,IAAI,CAAC,MAAM,UACjB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA,UAAU,MAAM,WAAW,KAAK;AAAA,QAChC;AAAA;AAAA,MAJK,GAAG,KAAK,OAAO,IAAI,KAAK;AAAA,IAK9B,CACA,GACF;AAAA,IAEA,gBAAAC,MAAC,SAAI,WAAWE,IAAG,MAAM,QAAQ,MAAM,OAAO,GAC7C;AAAA,sBAAAF,MAAC,SAAI,WAAW,MAAM,WACrB;AAAA,wBAAAD,KAAC,UAAK,sBAAQ;AAAA,QACd,gBAAAA,KAAC,UAAM,UAAAE,OAAM,QAAQ,GAAE;AAAA,SACxB;AAAA,MACC,WAAW,KACX,gBAAAD,MAAC,SAAI,WAAW,MAAM,WACrB;AAAA,wBAAAD,KAAC,UAAK,sBAAQ;AAAA,QACd,gBAAAA,KAAC,UAAM,UAAAE,OAAM,CAAC,QAAQ,GAAE;AAAA,SACzB;AAAA,MAED,gBAAAD,MAAC,SAAI,WAAW,MAAM,WACrB;AAAA,wBAAAD,KAAC,UAAK,iBAAG;AAAA,QACT,gBAAAA,KAAC,UAAM,UAAAE,OAAM,GAAG,GAAE;AAAA,SACnB;AAAA,MAEC,aAAa,KACb,gBAAAD,MAAC,SAAI,WAAW,MAAM,WACrB;AAAA,wBAAAD,KAAC,UAAK,yBAAW;AAAA,QACjB,gBAAAA,KAAC,UAAM,sBAAW;AAAA,SACnB;AAAA,MAED,gBAAAA,KAAC,SAAI,WAAW,MAAM,eAAe;AAAA,MACrC,gBAAAC,MAAC,SAAI,WAAW,MAAM,gBACrB;AAAA,wBAAAD,KAAC,UAAK,mBAAK;AAAA,QACX,gBAAAA,KAAC,UAAM,UAAAE,OAAM,KAAK,GAAE;AAAA,SACrB;AAAA,OACD;AAAA,IAEA,gBAAAF,KAAC,aAAU,OAAc;AAAA,IAEzB,gBAAAA,KAAC,QAAG,WAAW,MAAM,cAAc,iCAAmB;AAAA,IAEtD,gBAAAC,MAAC,oBAAiB,UAAU,cAAc,WAAW,MAAM,MAC1D;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACA,uBAAuB,SAAS,cAAc;AAAA,UAC9C,sBAAsB,SAAS,aAAa;AAAA,UAC5C,gBAAgB,MAAM;AAAA,UACtB,qBAAqB,MAAM;AAAA,UAC3B,qBAAqB,MAAM;AAAA,UAC3B,gBAAgBG;AAAA,YACf;AAAA,YACA;AAAA,UACD;AAAA;AAAA,MACD;AAAA,MACA,gBAAAF,MAAC,SAAI,WAAU,8BACd;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACA,cAAc,SAAS,SAAS;AAAA,YAChC,WAAW;AAAA,YACV,GAAG;AAAA;AAAA,QACL;AAAA,QACA,gBAAAA,KAAC,cAAW,MAAK,SAAQ,WAAW,MAAM,YAAY;AAAA,SACvD;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,8BACd;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACA,cAAc,SAAS,SAAS;AAAA,YAChC,WAAW;AAAA,YACV,GAAG;AAAA;AAAA,QACL;AAAA,QACA,gBAAAA,KAAC,cAAW,MAAK,SAAQ,WAAW,MAAM,YAAY;AAAA,SACvD;AAAA,MAEA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,SAAQ;AAAA,UACR,UAAQ;AAAA,UACR,cAAa;AAAA,UACb,qBAAqB,MAAM;AAAA,UAC3B;AAAA;AAAA,MAED;AAAA,MACA,gBAAAA,KAAC,iBAAc,SAAQ,oBAAmB,UAAU,OAAO,iEAE3D;AAAA,MAEC,eACA,gBAAAA,KAAC,OAAE,WAAW,MAAM,aAAc,uBAAY;AAAA,MAG/C,gBAAAC,MAAC,SAAI,WAAW,MAAM,aACrB;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACA,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAW,MAAM;AAAA,YACjB;AAAA;AAAA,QAED;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAM;AAAA,YACN,cAAa;AAAA,YACb,WAAWG,IAAG,UAAU,MAAM,aAAa;AAAA;AAAA,QAC5C;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAEF;AAEA,SAAS,YAAY;AAAA,EACpB;AAAA,EACA;AACD,GAGG;AACF,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,YAAY;AAC7B,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,WAAW;AACf,QAAM,EAAE,SAAS,IAAIL,aAAY;AACjC,QAAM,CAAC,aAAa,cAAc,IAAIJ,UAA6B;AAEnE,QAAM,eAAe,YAAY;AAChC,QAAI,CAAC,UAAU,CAAC,YAAY,CAAC,aAAc;AAE3C,UAAM,EAAE,MAAM,IAAI,MAAM,SAAS,OAAO;AACxC,QAAI,OAAO;AACV,qBAAe,MAAM,WAAW,iCAAiC;AACjE,YAAM;AAAA,IACP;AAEA,UAAM,YAAY,GAAG,aAAa,CAAC,GAAG,aAAa,WAAW,GAAG,IAAI,eAAe,IAAI,YAAY,EAAE;AACtG,UAAM,SAAS,MAAM;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,QAAI,CAAC,OAAO,QAAS,gBAAe,OAAO,KAAK;AAAA,EACjD;AAEA,SACC,gBAAAO,MAAC,SAAI,WAAW,MAAM,aACrB;AAAA,oBAAAD,KAAC,SAAM,SAAS,GAAG,OAAc;AAAA,IAEjC,gBAAAC,MAAC,oBAAiB,UAAU,cAAc,WAAW,MAAM,MAC1D;AAAA,sBAAAD,KAAC,SAAI,WAAWG,IAAG,MAAM,gBAAgB,MAAM,OAAO,GACrD,0BAAAH,KAAC,kBAAe,SAAS,uBAAuB,GACjD;AAAA,MAEC,eACA,gBAAAA,KAAC,OAAE,WAAW,MAAM,aAAc,uBAAY;AAAA,MAG/C,gBAAAC,MAAC,SAAI,WAAW,MAAM,aACrB;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACA,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAW,MAAM;AAAA,YACjB;AAAA;AAAA,QAED;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAO,OAAOE,OAAM,SAAS,CAAC,CAAC;AAAA,YAC/B,cAAa;AAAA,YACb,WAAWC,IAAG,UAAU,MAAM,aAAa;AAAA;AAAA,QAC5C;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAEF;AAEA,SAAS,MAAM,EAAE,SAAS,MAAM,GAAqC;AACpE,QAAM,SAAS,CAAC,gBAAgB,SAAS;AACzC,SACC,gBAAAH,KAAC,SAAI,WAAW,MAAM,OACpB,iBAAO,IAAI,CAAC,OAAOK,OAAM;AACzB,UAAMC,KAAID,KAAI;AACd,UAAM,SAASC,MAAK;AACpB,WACC,gBAAAL,MAAC,SAAgB,WAAU,YAC1B;AAAA,sBAAAA,MAAC,SAAI,WAAU,2BACd;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACA,WAAWG;AAAA,cACV,MAAM;AAAA,cACN,SACG,MAAM,kBACN,MAAM;AAAA,YACV;AAAA,YAEC,UAAAG;AAAA;AAAA,QACF;AAAA,QACA,gBAAAN;AAAA,UAAC;AAAA;AAAA,YACA,WAAWG;AAAA,cACV,MAAM;AAAA,cACN,SACG,MAAM,kBACN,MAAM;AAAA,YACV;AAAA,YAEC;AAAA;AAAA,QACF;AAAA,SACD;AAAA,MACCE,KAAI,OAAO,SAAS,KACpB,gBAAAL;AAAA,QAAC;AAAA;AAAA,UACA,WAAWG;AAAA,YACV,MAAM;AAAA,YACN,UAAUG,KACP,MAAM,oBACN,MAAM;AAAA,UACV;AAAA;AAAA,MACD;AAAA,SA/BQ,KAiCV;AAAA,EAEF,CAAC,GACF;AAEF;AAEA,SAAS,SAAS;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAKG;AACF,QAAM,EAAE,KAAK,IAAI,SAAS;AAC1B,QAAM,EAAE,YAAY,aAAa,IAAI,QAAQ;AAI7C,QAAM,cAAc,CAAC,SACpB,OAAO,IAAI,SAAS,IAAI,WAAW,EAAE,GAAG,MAAM,UAAU,KAAK,GAAG,KAAK;AAEtE,SACC,gBAAAL,MAAC,SAAI,WAAWE,IAAG,MAAM,UAAU,MAAM,OAAO,GAC/C;AAAA,oBAAAF,MAAC,SAAI,WAAU,sCACd;AAAA,sBAAAD,KAAC,OAAE,WAAW,MAAM,cAAe,eAAK,MAAK;AAAA,OAC3C,MAAM;AACP,cAAM,SAAS,KAAK,cAAc,CAAC,GACjC,QAAQ,CAAC,OAAO,GAAG,WAAW,IAAI,CAACO,OAAMA,GAAE,IAAI,CAAC;AAClD,cAAM,WAAW,KAAK,cAAc,CAAC,GACnC,OAAO,CAACC,OAAMA,GAAE,sBAAsB,CAAC,EACvC,IAAI,CAACA,OAAMA,GAAE,IAAI;AACnB,eACC,gBAAAP,MAAAF,WAAA,EACE;AAAA,gBAAM,SAAS,KACf,gBAAAE,MAAC,OAAE,WAAW,MAAM,mBAAmB;AAAA;AAAA,YACjC,MAAM,KAAK,IAAI;AAAA,aACrB;AAAA,UAEA,QAAQ,SAAS,KACjB,gBAAAA,MAAC,OAAE,WAAW,MAAM,mBAAmB;AAAA;AAAA,YAC9B,QAAQ,KAAK,IAAI;AAAA,aAC1B;AAAA,UAEA,KAAK,YACL,gBAAAA,MAAC,OAAE,WAAW,MAAM,mBAAmB;AAAA;AAAA,YAC3B,KAAK;AAAA,aACjB;AAAA,WAEF;AAAA,MAEF,GAAG;AAAA,MACH,gBAAAD,KAAC,OAAE,WAAW,MAAM,eAAgB,UAAAE,OAAM,aAAa,IAAI,CAAC,GAAE;AAAA,OAC/D;AAAA,IAEA,gBAAAD,MAAC,SAAI,WAAW,MAAM,kBACrB;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,cAAW;AAAA,UACX,WAAW,MAAM;AAAA,UACjB,SAAS,MACR,KAAK,mBAAmB;AAAA,YACvB,YAAY,KAAK;AAAA,YACjB,MAAM;AAAA,YACN,WAAW;AAAA,UACZ,CAAC;AAAA,UAGF,0BAAAA,KAAC,UAAO,WAAU,WAAU;AAAA;AAAA,MAC7B;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,WAAW,MAAM;AAAA,UACjB,SAAS,MAAM,YAAY,KAAK,WAAW,CAAC;AAAA,UAE5C,0BAAAA,KAACJ,QAAA,EAAM,WAAU,WAAU;AAAA;AAAA,MAC5B;AAAA,MACA,gBAAAI,KAAC,OAAE,WAAW,MAAM,kBAAmB,eAAK,UAAS;AAAA,MACrD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,WAAW,MAAM;AAAA,UACjB,SAAS,MAAM,YAAY,KAAK,WAAW,CAAC;AAAA,UAE5C,0BAAAA,KAACH,OAAA,EAAK,WAAU,WAAU;AAAA;AAAA,MAC3B;AAAA,OACD;AAAA,KACD;AAEF;AAEA,SAAS,UAAU,EAAE,MAAM,GAAqB;AAC/C,QAAM,EAAE,WAAW,cAAc,YAAY,aAAa,OAAO,QAAQ,IACxE,cAAc;AACf,QAAM,CAAC,OAAO,QAAQ,IAAIH,UAAS,EAAE;AAErC,MAAI,cAAc;AACjB,WACC,gBAAAO,MAAC,SAAI,WAAWE,IAAG,MAAM,cAAc,MAAM,OAAO,GACnD;AAAA,sBAAAF,MAAC,UAAK,WAAW,MAAM,mBACrB;AAAA,qBAAa;AAAA,QAAK;AAAA,SACpB;AAAA,MACC,aACA,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAW,MAAM;AAAA,UACjB;AAAA;AAAA,MAED;AAAA,OAEF;AAAA,EAEF;AAEA,SACC,gBAAAC,MAAC,SAAI,WAAU,8BACd;AAAA,oBAAAA,MAAC,SAAI,WAAW,MAAM,UACrB;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACA,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,UACxC,aAAY;AAAA,UACZ,WAAW,MAAM;AAAA;AAAA,MAClB;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,UAAU,WAAW,CAAC,MAAM,KAAK;AAAA,UACjC,SAAS,MAAM,WAAW,KAAK;AAAA,UAC/B,WAAWG,IAAG,MAAM,eAAe,UAAU;AAAA,UAE5C,oBAAU,mBAAc;AAAA;AAAA,MAC1B;AAAA,OACD;AAAA,IACC,SAAS,gBAAAH,KAAC,OAAE,WAAW,MAAM,YAAa,iBAAM;AAAA,KAClD;AAEF;AAEA,SAAS,MAAM;AAAA,EACd;AAAA,EACA;AACD,GAGG;AACF,SACC,gBAAAA,KAAC,SAAI,WAAW,MAAM,OACrB,0BAAAC,MAAC,SAAI,WAAW,MAAM,YACrB;AAAA,oBAAAD,KAAC,QAAG,WAAW,MAAM,WAAW,sBAAQ;AAAA,IACvC;AAAA,KACF,GACD;AAEF;","names":["useEffect","useState","t","n","s","o","o","o","s","r","t","n","i","o","s","t","t","s","r","t","o","t","s","r","t","r","n","r","n","a","t","a","n","r","s","t","l","i","o","y","f","u","d","p","c","T","n","r","a","i","u","t","n","i","c","o","u","c","b","t","b","c","u","r","a","s","l","m","n","F","S","A","i","x","r","t","n","a","b","s","o","l","c","u","f","E","d","C","p","D","j","M","r","l","d","n","i","u","c","o","t","t","s","r","t","o","l","n","r","f","r","c","k","b","t","c","n","w","M","s","l","b","S","f","d","o","i","a","y","C","p","h","r","v","k","U","H","u","K","m","j","A","F","Y","I","$","T","x","N","useState","useEffect","jsx","jsxs","d","Link","jsx","jsxs","cn","d","Link","useState","menuItemSlug","Fragment","jsx","jsxs","cn","money","d","ItemCard","useMenu","jsx","jsxs","cn","money","d","useMenu","c","v","q","useState","jsx","jsxs","cn","q","a","b","d","useEffect","useState","Link","Minus","Plus","useCustomer","Fragment","jsx","jsxs","money","cn","d","i","n","s","c"]}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
export * from '@zorgo/universal/hooks/hooks';
|
|
2
|
+
export * from '@zorgo/universal/components/Form';
|
|
3
|
+
|
|
4
|
+
type LocationStatus = "active" | "permanently_closed";
|
|
5
|
+
interface Location {
|
|
6
|
+
location_id: number;
|
|
7
|
+
franchise_id: number;
|
|
8
|
+
name: string;
|
|
9
|
+
address?: string;
|
|
10
|
+
force_close?: boolean;
|
|
11
|
+
status?: LocationStatus | null;
|
|
12
|
+
stripe_account_id?: string;
|
|
13
|
+
stripe_location_id?: string;
|
|
14
|
+
monday_open?: string;
|
|
15
|
+
monday_close?: string;
|
|
16
|
+
tuesday_open?: string;
|
|
17
|
+
tuesday_close?: string;
|
|
18
|
+
wednesday_open?: string;
|
|
19
|
+
wednesday_close?: string;
|
|
20
|
+
thursday_open?: string;
|
|
21
|
+
thursday_close?: string;
|
|
22
|
+
friday_open?: string;
|
|
23
|
+
friday_close?: string;
|
|
24
|
+
saturday_open?: string;
|
|
25
|
+
saturday_close?: string;
|
|
26
|
+
sunday_open?: string;
|
|
27
|
+
sunday_close?: string;
|
|
28
|
+
}
|
|
29
|
+
/** Single source for ordering channels (website, kiosk, POS). Values match DB strings. */
|
|
30
|
+
declare enum Platforms {
|
|
31
|
+
Website = "website",
|
|
32
|
+
Kiosk = "kiosk",
|
|
33
|
+
Pos = "pos",
|
|
34
|
+
KitchenDisplay = "kitchen_display"
|
|
35
|
+
}
|
|
36
|
+
interface Category {
|
|
37
|
+
category_id: number;
|
|
38
|
+
name: string;
|
|
39
|
+
is_catering?: boolean;
|
|
40
|
+
rules: Rule[];
|
|
41
|
+
active_promo_id?: number;
|
|
42
|
+
}
|
|
43
|
+
interface ItemVariant {
|
|
44
|
+
item_id: number;
|
|
45
|
+
name: string;
|
|
46
|
+
price: number;
|
|
47
|
+
components?: Component[];
|
|
48
|
+
base_item_id?: number;
|
|
49
|
+
rules?: Rule[];
|
|
50
|
+
display_price?: number;
|
|
51
|
+
active_promo_id?: number;
|
|
52
|
+
}
|
|
53
|
+
interface MenuItem {
|
|
54
|
+
base_item_id: number;
|
|
55
|
+
category_id: number;
|
|
56
|
+
franchise_id: number;
|
|
57
|
+
name: string;
|
|
58
|
+
per_person?: boolean | null;
|
|
59
|
+
image_path?: string | null;
|
|
60
|
+
variants: ItemVariant[];
|
|
61
|
+
rules: Rule[];
|
|
62
|
+
description?: string | null;
|
|
63
|
+
active_promo_id?: number;
|
|
64
|
+
is_catering?: boolean;
|
|
65
|
+
}
|
|
66
|
+
interface ScalingBehavior {
|
|
67
|
+
headcount_threshold: number;
|
|
68
|
+
starting_amount: number;
|
|
69
|
+
step_interval: number;
|
|
70
|
+
step_size: number;
|
|
71
|
+
maximum: number | null;
|
|
72
|
+
}
|
|
73
|
+
interface Component {
|
|
74
|
+
id: number;
|
|
75
|
+
servings_per_item?: number;
|
|
76
|
+
is_base?: boolean;
|
|
77
|
+
price_per_serving?: number;
|
|
78
|
+
franchise_id?: number;
|
|
79
|
+
component_type_id: number;
|
|
80
|
+
serving_weight?: number;
|
|
81
|
+
name: string;
|
|
82
|
+
item_id?: number;
|
|
83
|
+
prep_ahead?: boolean;
|
|
84
|
+
measurement_type?: "weight" | "count";
|
|
85
|
+
display_unit?: string;
|
|
86
|
+
behavior?: ScalingBehavior;
|
|
87
|
+
}
|
|
88
|
+
interface Rule {
|
|
89
|
+
rule_id?: number;
|
|
90
|
+
item_id?: number;
|
|
91
|
+
base_item_id?: number;
|
|
92
|
+
category_id?: number;
|
|
93
|
+
group_name: string;
|
|
94
|
+
min_selection: number;
|
|
95
|
+
max_selection?: number;
|
|
96
|
+
included_quantity: number;
|
|
97
|
+
items?: RuleItem[];
|
|
98
|
+
components?: RuleComponent[];
|
|
99
|
+
}
|
|
100
|
+
interface RuleItem {
|
|
101
|
+
item_id: number;
|
|
102
|
+
name: string;
|
|
103
|
+
quantity: number;
|
|
104
|
+
upcharge_price: number;
|
|
105
|
+
description?: string | null;
|
|
106
|
+
behavior?: ScalingBehavior;
|
|
107
|
+
}
|
|
108
|
+
interface RuleComponent {
|
|
109
|
+
component_id: number;
|
|
110
|
+
name: string;
|
|
111
|
+
quantity: number;
|
|
112
|
+
upcharge_price: number;
|
|
113
|
+
description?: string | null;
|
|
114
|
+
behavior?: ScalingBehavior;
|
|
115
|
+
serving_weight?: number;
|
|
116
|
+
}
|
|
117
|
+
interface CustomizationOption {
|
|
118
|
+
key: string;
|
|
119
|
+
id: number;
|
|
120
|
+
type: "item" | "component";
|
|
121
|
+
name: string;
|
|
122
|
+
description?: string | null;
|
|
123
|
+
upcharge: number;
|
|
124
|
+
selected: boolean;
|
|
125
|
+
disabled: boolean;
|
|
126
|
+
toggle: () => void;
|
|
127
|
+
}
|
|
128
|
+
interface CustomizationRule extends Rule {
|
|
129
|
+
rule_id: number;
|
|
130
|
+
max: number;
|
|
131
|
+
selectedCount: number;
|
|
132
|
+
satisfied: boolean;
|
|
133
|
+
message: () => string | null;
|
|
134
|
+
options: CustomizationOption[];
|
|
135
|
+
}
|
|
136
|
+
interface OrderItem {
|
|
137
|
+
item_id: number;
|
|
138
|
+
base_item_id: number;
|
|
139
|
+
name: string;
|
|
140
|
+
quantity: number;
|
|
141
|
+
price: number;
|
|
142
|
+
display_price?: number;
|
|
143
|
+
order_item_id?: number;
|
|
144
|
+
category_id: number;
|
|
145
|
+
category_name?: string;
|
|
146
|
+
is_catering?: boolean;
|
|
147
|
+
/** When true, each unit counts toward catering headcount minimums (menu `per_person`). */
|
|
148
|
+
per_person?: boolean | null;
|
|
149
|
+
components?: OrderComponent[];
|
|
150
|
+
selections?: RuleSelection[];
|
|
151
|
+
comments?: string;
|
|
152
|
+
status?: "removed" | "modified";
|
|
153
|
+
applied_promo_id?: number;
|
|
154
|
+
discount_amount?: number;
|
|
155
|
+
}
|
|
156
|
+
interface OrderComponent extends Component {
|
|
157
|
+
quantity_servings: number;
|
|
158
|
+
upcharge?: number;
|
|
159
|
+
rule_id?: number;
|
|
160
|
+
}
|
|
161
|
+
interface RuleSelection {
|
|
162
|
+
rule_id: number;
|
|
163
|
+
group_name?: string;
|
|
164
|
+
selections: Selection[];
|
|
165
|
+
}
|
|
166
|
+
interface Selection {
|
|
167
|
+
type: "item" | "component";
|
|
168
|
+
id: number;
|
|
169
|
+
quantity: number;
|
|
170
|
+
upcharge: number;
|
|
171
|
+
serving_price?: number;
|
|
172
|
+
name: string;
|
|
173
|
+
status?: "removed" | "modified" | "added";
|
|
174
|
+
component_type_id?: number;
|
|
175
|
+
serving_weight?: number;
|
|
176
|
+
measurement_type?: "weight" | "count";
|
|
177
|
+
display_unit?: string;
|
|
178
|
+
}
|
|
179
|
+
interface Customer {
|
|
180
|
+
customer_id?: number;
|
|
181
|
+
first_name: string;
|
|
182
|
+
last_name?: string;
|
|
183
|
+
phone: string;
|
|
184
|
+
email?: string;
|
|
185
|
+
allow_marketing?: boolean;
|
|
186
|
+
}
|
|
187
|
+
interface OrderMeta {
|
|
188
|
+
ready_at?: Date | string | null;
|
|
189
|
+
requested_minutes?: number | null;
|
|
190
|
+
is_scheduled?: boolean;
|
|
191
|
+
is_catering?: boolean;
|
|
192
|
+
is_third_party?: boolean;
|
|
193
|
+
source?: string;
|
|
194
|
+
tags?: string[];
|
|
195
|
+
name_override?: string;
|
|
196
|
+
}
|
|
197
|
+
interface Order {
|
|
198
|
+
order_id: number;
|
|
199
|
+
order_code?: string;
|
|
200
|
+
customer: Customer;
|
|
201
|
+
location_id: number;
|
|
202
|
+
location_name?: string;
|
|
203
|
+
franchise_id?: number;
|
|
204
|
+
method_id: number;
|
|
205
|
+
type_id: number;
|
|
206
|
+
time_placed: Date;
|
|
207
|
+
time_requested?: string;
|
|
208
|
+
items: OrderItem[];
|
|
209
|
+
order_status: number;
|
|
210
|
+
is_catering?: boolean;
|
|
211
|
+
promo_code?: string;
|
|
212
|
+
charges: Charge[];
|
|
213
|
+
subtotal?: number;
|
|
214
|
+
total?: number;
|
|
215
|
+
tax?: number;
|
|
216
|
+
service_fee?: number;
|
|
217
|
+
discount?: number;
|
|
218
|
+
tip?: number;
|
|
219
|
+
meta?: OrderMeta;
|
|
220
|
+
/** Single-line mailing-style address when order is delivery (e.g. "123 Main St, City, MI 48103"). */
|
|
221
|
+
delivery_address?: string;
|
|
222
|
+
revision?: number;
|
|
223
|
+
updated_at?: Date | string;
|
|
224
|
+
table_number?: number;
|
|
225
|
+
}
|
|
226
|
+
interface Charge {
|
|
227
|
+
id?: number;
|
|
228
|
+
order_id?: number;
|
|
229
|
+
total: number;
|
|
230
|
+
subtotal: number;
|
|
231
|
+
tax: number;
|
|
232
|
+
tip?: number;
|
|
233
|
+
discount?: number;
|
|
234
|
+
service_fee?: number;
|
|
235
|
+
charge_id?: string;
|
|
236
|
+
charge_status?: number;
|
|
237
|
+
created_at?: Date;
|
|
238
|
+
payment_method?: string;
|
|
239
|
+
refund_amount?: number;
|
|
240
|
+
refunded_at?: Date | string;
|
|
241
|
+
refund_id?: string;
|
|
242
|
+
drawer_session_id?: number;
|
|
243
|
+
setup_intent_id?: string;
|
|
244
|
+
stripe_payment_method_id?: string;
|
|
245
|
+
stripe_customer_id?: string;
|
|
246
|
+
}
|
|
247
|
+
interface Promotion {
|
|
248
|
+
id?: number;
|
|
249
|
+
created_at?: string;
|
|
250
|
+
/** Platforms where this promotion applies; omit, null, [], or all enum values => all platforms. Persist [] for “all”. */
|
|
251
|
+
platforms?: Platforms[] | null;
|
|
252
|
+
name: string;
|
|
253
|
+
description?: string;
|
|
254
|
+
discount_value: number;
|
|
255
|
+
promotion_type_id: number;
|
|
256
|
+
franchise_id?: number;
|
|
257
|
+
location_id: number | null;
|
|
258
|
+
customer_group_id?: number;
|
|
259
|
+
is_automatic: boolean;
|
|
260
|
+
promo_code: string | null;
|
|
261
|
+
start_date: Date | null;
|
|
262
|
+
end_date: Date | null;
|
|
263
|
+
schedule_details_json: PromotionScheduleDetails;
|
|
264
|
+
min_purchase_amount?: number | null;
|
|
265
|
+
min_purchase_quantity?: number | null;
|
|
266
|
+
discount_target_type: "category" | "item" | "item_variant" | null;
|
|
267
|
+
discount_target_ids?: number[];
|
|
268
|
+
is_active: boolean;
|
|
269
|
+
/** When true, only applies to catering orders. Uses sigmoid bulk discount when min_purchase_quantity is set. */
|
|
270
|
+
is_catering_only?: boolean | null;
|
|
271
|
+
}
|
|
272
|
+
interface PromotionScheduleDetails {
|
|
273
|
+
days?: number[];
|
|
274
|
+
interval: "weekly" | "monthly" | "daily";
|
|
275
|
+
start_time?: string;
|
|
276
|
+
end_time?: string;
|
|
277
|
+
}
|
|
278
|
+
type RecommendationStrategy = "top_items" | "discover";
|
|
279
|
+
interface RecommendationRequest {
|
|
280
|
+
userKey: string;
|
|
281
|
+
locationId: number;
|
|
282
|
+
topK?: number;
|
|
283
|
+
strategy?: RecommendationStrategy;
|
|
284
|
+
sampleSize?: number;
|
|
285
|
+
seed?: number;
|
|
286
|
+
}
|
|
287
|
+
interface RecommendationResult {
|
|
288
|
+
item: OrderItem;
|
|
289
|
+
base_item_id: number;
|
|
290
|
+
description?: string | null;
|
|
291
|
+
final_score?: number;
|
|
292
|
+
score?: number;
|
|
293
|
+
probability?: number;
|
|
294
|
+
ingredient_score?: number;
|
|
295
|
+
molecular_score?: number;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
interface Menu {
|
|
299
|
+
items: MenuItem[];
|
|
300
|
+
categories: Category[];
|
|
301
|
+
components: Component[];
|
|
302
|
+
rules: Rule[];
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export type { Category, Customer, CustomizationOption, CustomizationRule, ItemVariant, Location, Menu, MenuItem, Order, OrderComponent, OrderItem, Promotion, RecommendationRequest, RecommendationResult, RecommendationStrategy, Rule, RuleComponent, RuleItem, RuleSelection, Selection };
|