@arkipay/booking-widget 0.1.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 +155 -0
- package/dist/index.cjs +1721 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +521 -0
- package/dist/index.d.ts +521 -0
- package/dist/index.js +1686 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +289 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context.tsx","../src/constants.ts","../src/utils/fields.ts","../src/hooks/use-booking.ts","../src/i18n/en.ts","../src/i18n/create-translator.ts","../../api-contracts/src/idempotency.ts","../src/lib/fetch-booking-client.ts","../src/lib/create-booking-client.ts","../src/utils/booking-timezone.ts","../src/provider.tsx","../src/hooks/use-tenant-config.ts","../src/hooks/use-providers.ts","../src/hooks/use-booking-timezones.ts","../src/utils/dates.ts","../src/components/SlotTimeDisplay.tsx","../src/components/TimezoneMismatchBanner.tsx","../src/components/ui-primitives.tsx","../src/components/BookedSummary.tsx","../src/hooks/use-services.ts","../src/components/ConfirmStep.tsx","../src/components/CustomerForm.tsx","../src/hooks/use-unavailable-dates.ts","../src/components/DatePicker.tsx","../src/components/DisabledBooking.tsx","../src/components/LegalGate.tsx","../src/components/ProviderPicker.tsx","../src/components/ServicePicker.tsx","../src/hooks/use-availability.ts","../src/components/TimeSlotPicker.tsx","../src/components/BookingWidget.tsx"],"names":["createContext","useContext","useReducer","useMemo","DEFAULT_API_URL","client","useState","useCallback","useEffect","jsxs","jsx","BotIdClient","Temporal","providerId"],"mappings":";;;;;;;;AAwDO,IAAM,cAAA,GAAiBA,oBAA0C,IAAI,CAAA;AAErE,SAAS,iBAAA,GAAyC;AACvD,EAAA,MAAM,GAAA,GAAMC,iBAAW,cAAc,CAAA;AACrC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,CAAA,qDAAA,CAAuD,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,GAAA;AACT;;;AChEO,IAAM,eAAA,GAAkB,CAAA,GAAA;;;ACsBxB,IAAM,sBAAsB,OAA4B;AAAA,EAC7D,SAAA,EAAW,CAAA,CAAA;AAAA,EACX,QAAA,EAAU,CAAA,CAAA;AAAA,EACV,KAAA,EAAO,CAAA,CAAA;AAAA,EACP,KAAA,EAAO,CAAA,CAAA;AAAA,EACP,OAAA,EAAS,CAAA,CAAA;AAAA,EACT,IAAA,EAAM,CAAA,CAAA;AAAA,EACN,KAAA,EAAO,CAAA,CAAA;AAAA,EACP,GAAA,EAAK,CAAA,CAAA;AAAA,EACL,KAAA,EAAO,CAAA,CAAA;AAAA,EACP,YAAA,EAAc,CAAA,CAAA;AAAA,EACd,YAAA,EAAc,CAAA,CAAA;AAAA,EACd,YAAA,EAAc,CAAA,CAAA;AAAA,EACd,YAAA,EAAc,CAAA,CAAA;AAAA,EACd,YAAA,EAAc,CAAA,CAAA;AAAA,EACd,QAAA,EAAU,OAAO,IAAA,KAAS,CAAA,SAAA,CAAA,GAAc,KAAK,cAAA,EAAe,CAAE,eAAA,EAAgB,CAAE,QAAA,GAAW,CAAA,GAAA;AAC7F,CAAA,CAAA;AAEA,IAAM,kBAAA,GAEF;AAAA,EACF,UAAA,EAAY,CAAA,SAAA,CAAA;AAAA,EACZ,SAAA,EAAW,CAAA,QAAA,CAAA;AAAA,EACX,KAAA,EAAO,CAAA,KAAA,CAAA;AAAA,EACP,KAAA,EAAO,CAAA,KAAA,CAAA;AAAA,EACP,OAAA,EAAS,CAAA,OAAA,CAAA;AAAA,EACT,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,EACN,KAAA,EAAO,CAAA,KAAA,CAAA;AAAA,EACP,GAAA,EAAK,CAAA,GAAA,CAAA;AAAA,EACL,KAAA,EAAO,CAAA,KAAA,CAAA;AAAA,EACP,QAAA,EAAU,CAAA,YAAA,CAAA;AAAA,EACV,QAAA,EAAU,CAAA,YAAA,CAAA;AAAA,EACV,QAAA,EAAU,CAAA,YAAA,CAAA;AAAA,EACV,QAAA,EAAU,CAAA,YAAA,CAAA;AAAA,EACV,QAAA,EAAU,CAAA,YAAA;AACZ,CAAA;AAEA,IAAM,kBAAA,GAA+D;AAAA,EACnE,UAAA,EAAY,CAAA,iBAAA,CAAA;AAAA,EACZ,SAAA,EAAW,CAAA,gBAAA,CAAA;AAAA,EACX,KAAA,EAAO,CAAA,YAAA,CAAA;AAAA,EACP,KAAA,EAAO,CAAA,YAAA,CAAA;AAAA,EACP,OAAA,EAAS,CAAA,cAAA,CAAA;AAAA,EACT,IAAA,EAAM,CAAA,WAAA,CAAA;AAAA,EACN,KAAA,EAAO,CAAA,YAAA,CAAA;AAAA,EACP,GAAA,EAAK,CAAA,UAAA,CAAA;AAAA,EACL,KAAA,EAAO,CAAA,YAAA,CAAA;AAAA,EACP,QAAA,EAAU,CAAA,eAAA,CAAA;AAAA,EACV,QAAA,EAAU,CAAA,eAAA,CAAA;AAAA,EACV,QAAA,EAAU,CAAA,eAAA,CAAA;AAAA,EACV,QAAA,EAAU,CAAA,eAAA,CAAA;AAAA,EACV,QAAA,EAAU,CAAA,eAAA;AACZ,CAAA;AAEO,SAAS,kBACd,MAAA,EAC6B;AAC7B,EAAA,OAAO,CAAC,GAAG,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AACtF;AAEO,SAAS,iBAAiB,QAAA,EAAyD;AACxF,EAAA,OAAO,mBAAmB,QAAQ,CAAA;AACpC;AAEO,SAAS,cAAc,QAAA,EAA8C;AAC1E,EAAA,OAAO,mBAAmB,QAAQ,CAAA;AACpC;AAEO,SAAS,sBAAA,CACd,QACA,MAAA,EACwB;AACxB,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,IAAW,CAAC,MAAM,QAAA,EAAU;AACrC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,KAAA,CAAM,QAAQ,CAAA;AAC3C,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,OAAO,KAAA,KAAU,CAAA,MAAA,CAAA,IAAY,KAAA,CAAM,IAAA,OAAW,CAAA,CAAA,EAAI;AACpD,MAAA,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,GAAI,CAAA,QAAA,CAAA;AAAA,IAC3B;AAAA,EACF;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,KAAa,CAAA,KAAA,CAAA,IAAW,CAAA,CAAE,OAAO,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,MAAK,EAAG;AAClF,IAAA,IAAI,CAAC,4BAAA,CAA6B,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG;AAC3D,MAAA,MAAA,CAAO,KAAA,GAAQ,CAAA,OAAA,CAAA;AAAA,IACjB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,gCAAgC,MAAA,EAA6B;AAC3E,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,MAAA,CAAO,SAAA,CAAU,IAAA,EAAK;AAAA,IACjC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,IAAA,EAAK;AAAA,IAC/B,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK;AAAA,IACzB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK,IAAK,IAAA;AAAA,IAC9B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAK,IAAK,IAAA;AAAA,IAClC,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,EAAK,IAAK,IAAA;AAAA,IAC5B,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK,IAAK,IAAA;AAAA,IAC9B,GAAA,EAAK,MAAA,CAAO,GAAA,CAAI,IAAA,EAAK,IAAK,IAAA;AAAA,IAC1B,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK,IAAK,IAAA;AAAA,IAC9B,YAAA,EAAc,MAAA,CAAO,YAAA,CAAa,IAAA,EAAK,IAAK,IAAA;AAAA,IAC5C,YAAA,EAAc,MAAA,CAAO,YAAA,CAAa,IAAA,EAAK,IAAK,IAAA;AAAA,IAC5C,YAAA,EAAc,MAAA,CAAO,YAAA,CAAa,IAAA,EAAK,IAAK,IAAA;AAAA,IAC5C,YAAA,EAAc,MAAA,CAAO,YAAA,CAAa,IAAA,EAAK,IAAK,IAAA;AAAA,IAC5C,YAAA,EAAc,MAAA,CAAO,YAAA,CAAa,IAAA,EAAK,IAAK,IAAA;AAAA,IAC5C,gBAAA,EAAkB,OAAO,QAAA,IAAY;AAAA,GACvC;AACF;AAEO,SAAS,eAAe,KAAA,EAInB;AACV,EAAA,OAAO,KAAA,CAAM,mBAAA,IAAuB,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,cAAA;AAClE;;;AChEA,IAAM,yBAAA,GAA6C,CAAA,QAAA,CAAA;AAEnD,SAAS,QAAA,CACP,iBACA,IAAA,EACc;AACd,EAAA,OAAO,EAAE,eAAA,EAAiB,GAAG,IAAA,EAAK;AACpC;AAEA,SAAS,UAAA,CAAW,OAAqB,IAAA,EAAsC;AAC7E,EAAA,OAAO,QAAA,CAAS,KAAA,CAAM,eAAA,EAAiB,IAAI,CAAA;AAC7C;AAEO,SAAS,0BACd,OAAA,EAIc;AACd,EAAA,IAAI,OAAA,EAAS,SAAA,IAAa,OAAA,CAAQ,UAAA,EAAY;AAC5C,IAAA,OAAO,SAAS,yBAAA,EAA2B;AAAA,MACzC,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,MACN,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,YAAY,OAAA,CAAQ;AAAA,KACrB,CAAA;AAAA,EACH;AACA,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,OAAO,QAAA,CAAS,2BAA2B,EAAE,IAAA,EAAM,YAAY,SAAA,EAAW,OAAA,CAAQ,WAAW,CAAA;AAAA,EAC/F;AACA,EAAA,OAAO,QAAA,CAAS,yBAAA,EAA2B,EAAE,IAAA,EAAM,WAAW,CAAA;AAChE;AAEO,SAAS,cAAA,CACd,KAAA,EACA,MAAA,EACA,YAAA,EACc;AACd,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,CAAA,OAAA,CAAA,EAAW;AACd,MAAA,OAAO,yBAAA,CAA0B;AAAA,QAC/B,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,YAAY,MAAA,CAAO;AAAA,OACpB,CAAA;AAAA,IACH;AAAA,IACA,KAAK,CAAA,qBAAA,CAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,eAAA,EAAiB,OAAO,IAAA,EAAK;AAAA,IAClD,KAAK,CAAA,cAAA,CAAA;AACH,MAAA,OAAO,UAAA,CAAW,OAAO,EAAE,IAAA,EAAM,YAAY,SAAA,EAAW,MAAA,CAAO,WAAW,CAAA;AAAA,IAC5E,KAAK,CAAA,eAAA,CAAA;AACH,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,QAAA,CAAA,EAAY;AAC7B,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,MAAA,CAAO;AAAA,OACpB,CAAA;AAAA,IACH,KAAK,CAAA,WAAA,CAAA;AACH,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAA,CAAA,EAAQ;AACzB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,MAAM,MAAA,CAAO;AAAA,OACd,CAAA;AAAA,IACH,KAAK,CAAA,WAAA,CAAA;AACH,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAA,CAAA,EAAQ;AACzB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,QAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAM,MAAA,CAAO;AAAA,OACd,CAAA;AAAA,IACH,KAAK,CAAA,YAAA,CAAA;AACH,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,QAAA,CAAA,EAAY;AAC7B,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,YAAA,IAAgB,cAAA,CAAe,YAAA,CAAa,KAAK,CAAA,EAAG;AACtD,QAAA,OAAO,WAAW,KAAA,EAAO;AAAA,UACvB,IAAA,EAAM,CAAA,KAAA,CAAA;AAAA,UACN,WAAW,KAAA,CAAM,SAAA;AAAA,UACjB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,UAAU,MAAA,CAAO;AAAA,SAClB,CAAA;AAAA,MACH;AACA,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,UAAU;AAAC,OACZ,CAAA;AAAA,IACH,KAAK,CAAA,YAAA,CAAA;AACH,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,KAAA,CAAA,EAAS;AAC1B,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,UAAU,MAAA,CAAO;AAAA,OAClB,CAAA;AAAA,IACH,KAAK,CAAA,MAAA,CAAA;AACH,MAAA,OAAO,UAAA,CAAW,OAAO,EAAE,IAAA,EAAM,UAAU,WAAA,EAAa,MAAA,CAAO,aAAa,CAAA;AAAA,IAC9E,KAAK,CAAA,IAAA,CAAA;AACH,MAAA,OAAO,SAAS,KAAK,CAAA;AAAA,IACvB;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,SAAS,KAAA,EAAmC;AACnD,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,CAAA,QAAA,CAAA;AACH,MAAA,OAAO,UAAA,CAAW,KAAA,EAAO,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,IAC9C,KAAK,CAAA,IAAA,CAAA;AACH,MAAA,OAAO,UAAA,CAAW,OAAO,EAAE,IAAA,EAAM,YAAY,SAAA,EAAW,KAAA,CAAM,WAAW,CAAA;AAAA,IAC3E,KAAK,CAAA,IAAA,CAAA;AACH,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AAAA,IACH,KAAK,CAAA,QAAA,CAAA;AACH,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,MAAM,KAAA,CAAM;AAAA,OACb,CAAA;AAAA,IACH,KAAK,CAAA,KAAA,CAAA;AACH,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,QAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAM,KAAA,CAAM;AAAA,OACb,CAAA;AAAA,IACH,KAAK,CAAA,OAAA,CAAA;AACH,MAAA,OAAO,WAAW,KAAA,EAAO;AAAA,QACvB,IAAA,EAAM,CAAA,QAAA,CAAA;AAAA,QACN,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAM,KAAA,CAAM;AAAA,OACb,CAAA;AAAA,IACH;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEO,SAAS,iBAAA,CACd,SACA,YAAA,EACA;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,gBAAA;AAAA,IACxB,CAAC,OAAA,EAAuB,MAAA,KACtB,cAAA,CAAe,OAAA,EAAS,QAAQ,YAAY,CAAA;AAAA,IAC9C,MAAA;AAAA,IACA,MAAM,0BAA0B,OAAO;AAAA,GACzC;AAEA,EAAA,OAAOC,aAAA,CAAQ,OAAO,EAAE,KAAA,EAAO,UAAS,CAAA,EAAI,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAC/D;AAEO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,YAAA,EAAc,QAAA,EAAU,YAAA,EAAc,QAAA,KAAa,iBAAA,EAAkB;AAC7E,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,QAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAiB,YAAA,CAAa;AAAA,GAChC;AACF;;;ACxQO,IAAM,SAAA,GAAY;AAAA,EACvB,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,CAAA,gBAAA,CAAA;AAAA,IACT,QAAA,EAAU,CAAA,iBAAA,CAAA;AAAA,IACV,IAAA,EAAM,CAAA,aAAA,CAAA;AAAA,IACN,IAAA,EAAM,CAAA,aAAA,CAAA;AAAA,IACN,QAAA,EAAU,CAAA,YAAA,CAAA;AAAA,IACV,KAAA,EAAO,CAAA,iBAAA,CAAA;AAAA,IACP,OAAA,EAAS,CAAA,oBAAA,CAAA;AAAA,IACT,MAAA,EAAQ,CAAA,iBAAA;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,IACN,QAAA,EAAU,CAAA,QAAA,CAAA;AAAA,IACV,OAAA,EAAS,CAAA,eAAA,CAAA;AAAA,IACT,UAAA,EAAY,CAAA,aAAA;AAAA,GACd;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,CAAA,oCAAA,CAAA;AAAA,IACP,eAAA,EAAiB,CAAA,aAAA,CAAA;AAAA,IACjB,KAAA,EAAO,CAAA,QAAA;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,CAAA,4CAAA,CAAA;AAAA,IACP,GAAA,EAAK,CAAA,sBAAA;AAAA,GACP;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,WAAA,EAAa,CAAA,WAAA,CAAA;AAAA,IACb,OAAA,EAAS,CAAA,6BAAA;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,CAAA,yCAAA,CAAA;AAAA,IACP,QAAA,EAAU,CAAA,uBAAA,CAAA;AAAA,IACV,YAAA,EAAc,CAAA,yBAAA,CAAA;AAAA,IACd,cAAA,EAAgB,CAAA,qEAAA,CAAA;AAAA,IAChB,UAAA,EAAY,CAAA,eAAA,CAAA;AAAA,IACZ,gBAAA,EAAkB,CAAA,kBAAA,CAAA;AAAA,IAClB,aAAA,EAAe,CAAA,sBAAA,CAAA;AAAA,IACf,iBAAA,EAAmB,CAAA,0BAAA;AAAA,GACrB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,CAAA,QAAA,CAAA;AAAA,IACV,YAAA,EAAc,CAAA,4BAAA;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAA,aAAA,CAAA;AAAA,IACR,KAAA,EAAO,CAAA,kBAAA,CAAA;AAAA,IACP,OAAA,EAAS,CAAA,cAAA,CAAA;AAAA,IACT,YAAA,EAAc,CAAA,0BAAA,CAAA;AAAA,IACd,WAAA,EAAa,CAAA,+BAAA,CAAA;AAAA,IACb,aAAA,EAAe,CAAA,2BAAA,CAAA;AAAA,IACf,QAAA,EAAU,CAAA,IAAA;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA,uBAAA,CAAA;AAAA,IACT,OAAA,EAAS,CAAA,OAAA,CAAA;AAAA,IACT,QAAA,EAAU,CAAA,QAAA,CAAA;AAAA,IACV,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,IACN,QAAA,EAAU,CAAA,QAAA,CAAA;AAAA,IACV,KAAA,EAAO,CAAA,qDAAA,CAAA;AAAA,IACP,QAAA,EAAU,CAAA,kEAAA;AAAA,GACZ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,SAAA,EAAW,CAAA,SAAA,CAAA;AAAA,IACX,OAAA,EAAS,CAAA,iCAAA;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,CAAA,mBAAA;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,UAAA,EAAY,CAAA,UAAA,CAAA;AAAA,IACZ,SAAA,EAAW,CAAA,SAAA,CAAA;AAAA,IACX,KAAA,EAAO,CAAA,KAAA,CAAA;AAAA,IACP,KAAA,EAAO,CAAA,KAAA,CAAA;AAAA,IACP,OAAA,EAAS,CAAA,OAAA,CAAA;AAAA,IACT,IAAA,EAAM,CAAA,IAAA,CAAA;AAAA,IACN,KAAA,EAAO,CAAA,gBAAA,CAAA;AAAA,IACP,GAAA,EAAK,CAAA,WAAA,CAAA;AAAA,IACL,KAAA,EAAO,CAAA,KAAA,CAAA;AAAA,IACP,QAAA,EAAU,CAAA,sBAAA,CAAA;AAAA,IACV,QAAA,EAAU,CAAA,0BAAA,CAAA;AAAA,IACV,QAAA,EAAU,CAAA,0BAAA,CAAA;AAAA,IACV,QAAA,EAAU,CAAA,0BAAA,CAAA;AAAA,IACV,QAAA,EAAU,CAAA,0BAAA;AAAA;AAEd;;;ACtEA,SAAS,cAAA,CAAe,KAAc,IAAA,EAAkC;AACtE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAAG,CAAA;AAC5B,EAAA,IAAI,OAAA,GAAmB,GAAA;AACvB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,YAAY,IAAA,IAAQ,OAAO,YAAY,CAAA,MAAA,CAAA,IAAY,EAAE,QAAQ,OAAA,CAAA,EAAU;AACzE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAA,GAAW,QAAoC,IAAI,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,OAAO,OAAA,KAAY,CAAA,MAAA,CAAA,GAAW,OAAA,GAAU,MAAA;AACjD;AAEA,SAAS,WAAA,CAAY,UAAkB,MAAA,EAAyB;AAC9D,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,YAAA,EAAc,CAAC,GAAG,GAAA,KAAgB;AACxD,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,OAAO,UAAU,MAAA,GAAY,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAA,GAAM,OAAO,KAAK,CAAA;AAAA,EACxD,CAAC,CAAA;AACH;AAEO,SAAS,gBAAA,CACd,QACA,qBAAA,EACkD;AAGlD,EAAA,OAAO,CAAC,KAAK,MAAA,KAAW;AACtB,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,SAAA,EAAW,GAAG,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAO,WAAA,CAAY,UAAU,MAAM,CAAA;AAAA,EACrC,CAAA;AACF;;;AClDA,IAAM,gBAAA,uBAAuB,GAAA,CAAI,CAAC,QAAQ,CAAA,GAAA,CAAA,EAAO,CAAA,KAAA,CAAA,EAAS,QAAQ,CAAC,CAAA;AAkB5D,SAAS,oBAAA,GAA+B;AAC7C,EAAA,OAAO,OAAO,UAAA,EAAW;AAC3B;AAcO,SAAS,iCAAiC,MAAA,EAAwC;AACvF,EAAA,MAAM,gBAAA,GAAmB,OAAO,WAAA,EAAY;AAC5C,EAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAC3C,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,OAAO,EAAE,iBAAA,EAAmB,oBAAA,EAAqB,EAAE;AACrD;;;ACjBA,IAAM,eAAA,GAAkB,CAAA,yBAAA,CAAA;AAQjB,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EACzC,WAAA,CACW,MAAA,EACA,IAAA,EACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAIT,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA,eAAA,CAAA;AAAA,EACd;AAAA,EANW,MAAA;AAAA,EACA,IAAA;AAMb;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACR,OAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EAEjB,YAAY,IAAA,EAA4B;AACtC,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,MAAM,CAAA,gDAAA,CAAkD,CAAA;AAAA,IACpE;AACA,IAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,cAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,MAAA,IAAU,eAAA,EAAiB,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AACjE,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AAAA,EACrB;AAAA,EAEA,MAAM,eAAA,GAAuD;AAC3D,IAAA,OAAO,IAAA,CAAK,QAAoC,CAAA,wBAAA,CAA0B,CAAA;AAAA,EAC5E;AAAA,EAEA,MAAM,YAAA,GAA4C;AAChD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAoC,CAAA,mBAAA,CAAqB,CAAA;AACjF,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,cAAc,MAAA,EAEa;AAC/B,IAAA,MAAM,KAAA,GAAQ,QAAQ,SAAA,GAAY,CAAA,WAAA,EAAc,mBAAmB,MAAA,CAAO,SAAS,CAAC,CAAA,CAAA,GAAK,CAAA,CAAA;AACzF,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA;AAAA,MACtB,uBAAuB,KAAK,CAAA;AAAA,KAC9B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,gBAAgB,MAAA,EAIK;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,MAAM,MAAA,CAAO;AAAA,KACd,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA;AAAA,MACtB,CAAA,0BAAA,EAA6B,KAAA,CAAM,QAAA,EAAU,CAAA;AAAA,KAC/C;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,oBAAoB,MAAA,EAIJ;AACpB,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,OAAO,MAAA,CAAO;AAAA,KACf,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA;AAAA,MACtB,CAAA,6BAAA,EAAgC,KAAA,CAAM,QAAA,EAAU,CAAA;AAAA,KAClD;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,kBAAkB,IAAA,EAA4D;AAClF,IAAA,OAAO,IAAA,CAAK,QAAA,CAAyB,CAAA,uBAAA,CAAA,EAA2B,IAAI,CAAA;AAAA,EACtE;AAAA,EAEQ,OAAA,GAAuB;AAC7B,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,cAAc,CAAA,CAAA;AAAA,MAC5C,MAAA,EAAQ,CAAA,gBAAA;AAAA,KACV;AACA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAA,CAAQ,SAAS,IAAA,CAAK,MAAA;AAAA,IACxB;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAc,QAAW,IAAA,EAA0B;AACjD,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,CAAA;AAC7E,IAAA,OAAO,IAAA,CAAK,UAAa,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAc,QAAA,CAAY,IAAA,EAAc,IAAA,EAA2B;AACjE,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MAChD,MAAA,EAAQ,CAAA,IAAA,CAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,GAAG,KAAK,OAAA,EAAQ;AAAA,QAChB,cAAA,EAAgB,CAAA,gBAAA,CAAA;AAAA,QAChB,GAAG,iCAAiC,CAAA,IAAA,CAAM;AAAA,OAC5C;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,UAAa,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAc,UAAa,GAAA,EAA2B;AACpD,IAAA,MAAM,UAAmB,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAC1D,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,MACJ,OAAA,KAAY,IAAA,IACZ,OAAO,OAAA,KAAY,YACnB,CAAA,KAAA,CAAA,IAAW,OAAA,IACX,OAAA,CAAQ,KAAA,KAAU,QAClB,OAAO,OAAA,CAAQ,KAAA,KAAU,CAAA,MAAA,CAAA,GACrB,QAAQ,KAAA,GACR,IAAA;AACN,MAAA,MAAM,IAAA,GACJ,GAAA,KAAQ,IAAA,IAAQ,CAAA,IAAA,CAAA,IAAU,GAAA,IAAO,OAAO,GAAA,CAAI,IAAA,KAAS,CAAA,MAAA,CAAA,GAAW,GAAA,CAAI,IAAA,GAAO,CAAA,OAAA,CAAA;AAC7E,MAAA,MAAM,OAAA,GACJ,GAAA,KAAQ,IAAA,IAAQ,CAAA,OAAA,CAAA,IAAa,GAAA,IAAO,OAAO,GAAA,CAAI,OAAA,KAAY,CAAA,MAAA,CAAA,GACvD,GAAA,CAAI,OAAA,GACJ,GAAA,CAAI,UAAA;AACV,MAAA,MAAM,IAAI,eAAA,CAAgB,GAAA,CAAI,MAAA,EAAQ,MAAM,OAAO,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACF,CAAA;;;AC3JO,SAAS,oBAAoB,IAAA,EAA2C;AAC7E,EAAA,OAAO,IAAI,cAAc,IAAI,CAAA;AAC/B;;;ACAO,SAAS,mBAAA,GAA8B;AAC5C,EAAA,IAAI,OAAO,SAAS,CAAA,SAAA,CAAA,EAAa;AAC/B,IAAA,OAAO,CAAA,GAAA,CAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA,CAAK,cAAA,EAAe,CAAE,eAAA,GAAkB,QAAA,IAAY,CAAA,GAAA,CAAA;AAC7D;AAEO,SAAS,wBAAwB,MAAA,EAK7B;AACT,EAAA,MAAM,KAAA,GAAQ,OAAO,aAAA,IAAiB,eAAA;AACtC,EAAA,IAAI,MAAA,CAAO,eAAe,KAAA,EAAO;AAC/B,IAAA,OAAO,MAAA,CAAO,qBAAA;AAAA,EAChB;AACA,EAAA,MAAM,QAAA,GAAW,OAAO,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,MAAA,CAAO,UAAU,CAAA;AACxE,EAAA,OAAO,QAAA,EAAU,YAAY,MAAA,CAAO,qBAAA;AACtC;AAEO,SAAS,wBACd,kBAAA,EACS;AACT,EAAA,OAAO,kBAAA,KAAuB,CAAA,QAAA,CAAA;AAChC;AAEO,SAAS,uBAAuB,MAAA,EAK5B;AACT,EAAA,MAAM,OAAA,GAAU,OAAO,kBAAA,IAAsB,CAAA,QAAA,CAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,OAAO,eAAA,IAAmB,CAAA,QAAA,CAAA;AAEvC,EAAA,IAAI,YAAY,CAAA,QAAA,CAAA,EAAY;AAC1B,IAAA,OAAO,MAAA,CAAO,gBAAA;AAAA,EAChB;AACA,EAAA,IAAI,YAAY,CAAA,aAAA,CAAA,EAAiB;AAC/B,IAAA,OAAO,MAAA,CAAO,gBAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA,KAAS,CAAA,QAAA,CAAA,GAAa,MAAA,CAAO,gBAAA,GAAmB,MAAA,CAAO,gBAAA;AAChE;AAEO,SAAS,4BAA4B,MAAA,EAGhC;AACV,EAAA,IAAI,CAAC,OAAO,WAAA,EAAa;AACvB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,OAAO,kBAAA,IAAsB,CAAA,QAAA,CAAA;AAC7C,EAAA,OAAO,OAAA,KAAY,cAAc,OAAA,KAAY,CAAA,aAAA,CAAA;AAC/C;AC5CA,IAAMC,gBAAAA,GAAkB,CAAA,yBAAA,CAAA;AAyBxB,SAAS,qBAAqB,KAAA,EAAwD;AACpF,EAAA,IAAI,KAAA,KAAU,CAAA,IAAA,CAAA,IAAU,KAAA,KAAU,CAAA,KAAA,CAAA,IAAW,UAAU,CAAA,MAAA,CAAA,EAAU;AAC/D,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAA,GAGP;AACA,EAAA,IAAI,OAAO,WAAW,CAAA,SAAA,CAAA,EAAa;AACjC,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AACzD,EAAA,MAAM,SAGF,EAAC;AACL,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAA,OAAA,CAAS,CAAA;AACtC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,CAAA,QAAA,CAAU,CAAA;AACxC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAA,CAAO,SAAA,GAAY,SAAA;AAAA,EACrB;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAA,CAAO,UAAA,GAAa,UAAA;AAAA,EACtB;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,cAAA;AAAA,EACA,MAAA,GAASA,gBAAAA;AAAA,EACT,MAAA;AAAA,EACA,QAAQ,EAAC;AAAA,EACT,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,CAAA,CAAE,CAAA;AAC/C,EAAA,MAAMC,QAAA,GAASF,aAAAA;AAAA,IACb,MAAM,mBAAA,CAAoB,EAAE,gBAAgB,MAAA,EAAQ,cAAA,EAAgB,QAAQ,CAAA;AAAA,IAC5E,CAAC,cAAA,EAAgB,cAAA,EAAgB,MAAM;AAAA,GACzC;AAEA,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIG,eAA4C,IAAI,CAAA;AACxF,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,eAAS,IAAI,CAAA;AACnE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAE9E,EAAA,MAAM,OAAA,GAAUH,cAAQ,MAAM;AAC5B,IAAA,MAAM,UAAU,cAAA,EAAe;AAC/B,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,oBAAoB,OAAA,CAAQ,SAAA;AAAA,MACvC,UAAA,EAAY,qBAAqB,OAAA,CAAQ;AAAA,KAC3C;AAAA,EACF,CAAA,EAAG,CAAC,iBAAA,EAAmB,gBAAgB,CAAC,CAAA;AAExC,EAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,GAAI,iBAAA,CAAkB,SAAS,YAAY,CAAA;AACjF,EAAA,MAAM,mBAAmBA,aAAAA,CAAQ,MAAM,mBAAA,EAAoB,EAAG,EAAE,CAAA;AAEhE,EAAA,MAAM,kBAAA,GAAqBI,iBAAA;AAAA,IACzB,CAAC,IAAA,KAA0B;AACzB,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,qBAAA,CAAA,EAAyB,IAAA,EAAM,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,UAAA,EAAY;AAC3C,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,QACN,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,YAAY,OAAA,CAAQ;AAAA,OACrB,CAAA;AAAA,IACH;AAAA,EACF,GAAG,CAAC,QAAA,EAAU,QAAQ,UAAA,EAAY,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEpD,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,KAAKH,QAAA,CACF,eAAA,EAAgB,CAChB,IAAA,CAAK,CAAC,MAAA,KAAW;AAChB,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,MACxB;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAiB;AACvB,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,oBAAA,CAAqB,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,CAAA,uBAAA,CAAyB,CAAA;AAAA,MACrF;AAAA,IACF,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,sBAAA,CAAuB,KAAK,CAAA;AAAA,MAC9B;AAAA,IACF,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAACA,QAAM,CAAC,CAAA;AAEX,EAAA,MAAM,cAAA,GAAiB,MAAA,IAAU,YAAA,EAAc,YAAA,CAAa,eAAA,IAAmB,CAAA,EAAA,CAAA;AAC/E,EAAA,MAAM,CAAA,GAAIF,aAAAA;AAAA,IACR,MAAM,gBAAA,CAAiB,cAAA,EAAgB,YAAA,EAAc,aAAa,eAAe,CAAA;AAAA,IACjF,CAAC,cAAA,EAAgB,YAAA,EAAc,YAAA,CAAa,eAAe;AAAA,GAC7D;AAMA,EAAA,MAAM,OAAA,GAAUA,cAAQ,MAAM;AAC5B,IAAA,MAAM,OAA+B,EAAC;AACtC,IAAA,IAAI,YAAA,EAAc,SAAS,UAAA,EAAY;AACrC,MAAA,IAAA,CAAK,CAAA,mBAAA,CAAqB,CAAA,GAAI,YAAA,CAAa,QAAA,CAAS,UAAA;AAAA,IACtD;AACA,IAAA,IAAI,KAAA,CAAM,UAAA,EAAY,IAAA,CAAK,CAAA,UAAA,CAAY,IAAI,KAAA,CAAM,UAAA;AACjD,IAAA,IAAI,KAAA,CAAM,YAAA,EAAc,IAAA,CAAK,CAAA,aAAA,CAAe,IAAI,KAAA,CAAM,YAAA;AACtD,IAAA,IAAI,KAAA,CAAM,SAAA,EAAW,IAAA,CAAK,CAAA,SAAA,CAAW,IAAI,KAAA,CAAM,SAAA;AAC/C,IAAA,IAAI,KAAA,CAAM,UAAA,EAAY,IAAA,CAAK,CAAA,UAAA,CAAY,IAAI,KAAA,CAAM,UAAA;AACjD,IAAA,IAAI,KAAA,CAAM,WAAA,EAAa,IAAA,CAAK,CAAA,WAAA,CAAa,IAAI,KAAA,CAAM,WAAA;AACnD,IAAA,IAAI,KAAA,CAAM,YAAA,EAAc,IAAA,CAAK,CAAA,YAAA,CAAc,IAAI,KAAA,CAAM,YAAA;AACrD,IAAA,IAAI,KAAA,CAAM,UAAA,EAAY,IAAA,CAAK,CAAA,UAAA,CAAY,IAAI,KAAA,CAAM,UAAA;AACjD,IAAA,IAAI,KAAA,CAAM,YAAA,EAAc,IAAA,CAAK,CAAA,WAAA,CAAa,IAAI,KAAA,CAAM,YAAA;AACpD,IAAA,IAAI,KAAA,CAAM,UAAA,EAAY,IAAA,CAAK,CAAA,SAAA,CAAW,IAAI,KAAA,CAAM,UAAA;AAChD,IAAA,IAAI,KAAA,CAAM,QAAA,EAAU,IAAA,CAAK,CAAA,cAAA,CAAgB,IAAI,KAAA,CAAM,QAAA;AACnD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG;AAAA,IACD,cAAc,QAAA,CAAS,UAAA;AAAA,IACvB,KAAA,CAAM,UAAA;AAAA,IACN,KAAA,CAAM,YAAA;AAAA,IACN,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,UAAA;AAAA,IACN,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM,YAAA;AAAA,IACN,KAAA,CAAM,UAAA;AAAA,IACN,KAAA,CAAM,YAAA;AAAA,IACN,KAAA,CAAM,UAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACP,CAAA;AAED,EAAA,MAAM,cAAc,KAAA,CAAM,WAAA,IAAe,oBAAA,CAAqB,YAAA,EAAc,SAAS,KAAK,CAAA;AAE1F,EAAA,MAAM,SAAA,GAAYA,aAAAA;AAAA,IAChB,OAAO,EAAE,GAAG,OAAA,EAAS,GAAG,KAAA,EAAM,CAAA;AAAA,IAC9B,CAAC,SAAS,KAAK;AAAA,GACjB;AAEA,EAAA,MAAM,aAAA,GAAgB,SAAA,GAAY,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAA,GAAK,CAAA,iBAAA,CAAA;AAErE,EAAA,MAAM,KAAA,GAAQA,aAAAA;AAAA,IACZ,OAAO;AAAA,cACLE,QAAA;AAAA,MACA,MAAA,EAAQ,cAAA;AAAA,MACR,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA,EAAQ,cAAA;AAAA,MACR,KAAA;AAAA,MACA,CAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAiB,YAAA,CAAa,eAAA;AAAA,MAC9B,kBAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,YAAA;AAAA,MACAA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,CAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBACEI,eAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EACtB,QAAA,EAAA;AAAA,IAAA,aAAA,mBACCC,cAAA,CAACC,kBAAA,EAAA,EAAY,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,CAAA,uBAAA,CAAA,EAA2B,MAAA,EAAQ,CAAA,IAAA,CAAA,EAAQ,CAAA,EAAG,CAAA,GAC3E,IAAA;AAAA,oBACJD,cAAA,CAAC,SAAI,SAAA,EAAW,aAAA,EAAe,cAAY,WAAA,EAAa,KAAA,EAAO,WAC5D,QAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;;;AClPO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,EAAE,YAAA,EAAc,mBAAA,EAAqB,iBAAA,KAAsB,iBAAA,EAAkB;AACnF,EAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,mBAAA,EAAqB,OAAO,iBAAA,EAAkB;AAChF;ACAO,SAAS,aAAa,SAAA,EAA+B;AAC1D,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,iBAAA,EAAkB;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIJ,cAAAA,CAA8B,EAAE,CAAA;AACxD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,MAAA,GAASC,kBAAY,YAAY;AACrC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAA,CAAQ,EAAE,CAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,YAAY,MAAM,MAAA,CAAO,aAAA,CAAc,EAAE,WAAW,CAAA;AAC1D,MAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,CAAA,wBAAA,CAA0B,CAAA;AAAA,IAC1E,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAA;AAEtB,EAAAC,gBAAU,MAAM;AACd,IAAA,KAAK,MAAA,EAAO;AAAA,EACd,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,OAAO,MAAA,EAAO;AACnD;;;ACrBO,SAAS,mBAAA,CACd,YACA,SAAA,EACA;AACA,EAAA,MAAM,EAAE,gBAAA,EAAkB,YAAA,EAAa,GAAI,iBAAA,EAAkB;AAC7D,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,eAAA,EAAgB;AACzC,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,YAAA,CAAa,SAAS,CAAA;AAE5C,EAAA,MAAM,kBAAA,GAAqB,cAAc,OAAA,CAAQ,kBAAA;AAEjD,EAAA,MAAM,gBAAA,GAAmBL,cAAQ,MAAM;AACrC,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,CAAA,GAAA,CAAA;AAAA,IACT;AACA,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,OAAO,aAAa,YAAA,CAAa,eAAA;AAAA,IACnC;AACA,IAAA,OAAO,uBAAA,CAAwB;AAAA,MAC7B,UAAA;AAAA,MACA,SAAA;AAAA,MACA,qBAAA,EAAuB,aAAa,YAAA,CAAa;AAAA,KAClD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,UAAA,EAAY,SAAA,EAAW,YAAY,CAAC,CAAA;AAExC,EAAA,MAAM,eAAA,GAAkBA,aAAAA;AAAA,IACtB,MACE,sBAAA,CAAuB;AAAA,MACrB,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,kBAAA;AAAA,MACA,iBAAiB,YAAA,CAAa;AAAA,KAC/B,CAAA;AAAA,IACH;AAAA,MACE,YAAA,CAAa,eAAA;AAAA,MACb,kBAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,cAAc,gBAAA,KAAqB,gBAAA;AACzC,EAAA,MAAM,iBAAA,GAAoBA,cAAQ,MAAM;AACtC,IAAA,IACE,CAAC,2BAAA,CAA4B;AAAA,MAC3B,WAAA;AAAA,MACA;AAAA,KACD,CAAA,EACD;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,eAAA,KAAoB,mBAAmB,gBAAA,GAAmB,gBAAA;AAAA,EACnE,GAAG,CAAC,kBAAA,EAAoB,kBAAkB,gBAAA,EAAkB,eAAA,EAAiB,WAAW,CAAC,CAAA;AAEzF,EAAA,OAAO;AAAA,IACL,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAiB,YAAA,CAAa;AAAA,GAChC;AACF;ACxEO,SAAS,YAAY,QAAA,EAAsC;AAChE,EAAA,OAAOS,iBAAA,CAAS,GAAA,CAAI,gBAAA,CAAiB,QAAQ,EAAE,WAAA,EAAY;AAC7D;AAEO,SAAS,qBAAqB,KAAA,EAA+C;AAClF,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,EAAE,IAAA,EAAM,GAAG,CAAA;AAC9B;AAEO,SAAS,gBAAgB,QAAA,EAAsC;AACpE,EAAA,OAAO,oBAAA,CAAqB,WAAA,CAAY,QAAQ,CAAC,CAAA;AACnD;AAEO,SAAS,oBAAA,CACd,OACA,sBAAA,EACoB;AACpB,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,EAAE,IAAA,EAAM,wBAAwB,CAAA;AACnD;AAEO,SAAS,eAAA,CACd,wBACA,QAAA,EACoB;AACpB,EAAA,OAAO,oBAAA,CAAqB,WAAA,CAAY,QAAQ,CAAA,EAAG,sBAAsB,CAAA;AAC3E;AAEO,SAAS,mBAAmB,IAAA,EAAkC;AACnE,EAAA,OAAO,KAAK,QAAA,EAAS;AACvB;AAUO,SAAS,aAAa,IAAA,EAA8C;AACzE,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,GAAA,EAAK,GAAG,CAAA;AAC7B;AAEO,SAAS,eAAe,IAAA,EAAkC;AAC/D,EAAA,MAAM,IAAI,IAAA,CAAK,IAAA;AACf,EAAA,MAAM,IAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,CAAA,CAAG,CAAA;AAC5C,EAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAClB;AAEO,SAAS,cAAA,CACd,OACA,YAAA,EAC+B;AAC/B,EAAA,MAAM,KAAA,GAAQ,aAAa,KAAK,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,GAAY,CAAA;AAChC,EAAA,MAAM,MAAA,GACJ,YAAA,KAAiB,CAAA,MAAA,CAAA,GAAA,CACZ,KAAA,GAAQ,CAAA,IAAK,IACd,YAAA,KAAiB,CAAA,QAAA,CAAA,GAAA,CACd,KAAA,GAAQ,CAAA,IAAK,CAAA,GACd,KAAA;AACR,EAAA,MAAM,KAAA,GAAuC,MAAM,IAAA,CAAK,EAAE,QAAQ,MAAA,EAAO,EAAG,MAAM,IAAI,CAAA;AACtF,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,OAAO,MAAA,CAAO,KAAA,KAAU,KAAA,CAAM,KAAA,EAAO;AACnC,IAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,IAAA,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,KAAM,CAAA,EAAG;AAC7B,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,aAAA,CACd,KAAA,EACA,GAAA,EACA,GAAA,EACS;AACT,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,IAAS,GAAA;AAClC;AAEO,SAAS,cAAA,CAAe,GAAA,EAAa,MAAA,EAAgB,QAAA,EAA0B;AACpF,EAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAAA,IACrC,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,IACN,MAAA,EAAQ,CAAA,OAAA,CAAA;AAAA,IACR;AAAA,GACD,CAAA,CAAE,MAAA,CAAO,IAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACzB;AAEO,SAAS,cAAA,CAAe,GAAA,EAAa,MAAA,EAAgB,QAAA,EAA0B;AACpF,EAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAAA,IACrC,OAAA,EAAS,CAAA,IAAA,CAAA;AAAA,IACT,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,IACN,KAAA,EAAO,CAAA,IAAA,CAAA;AAAA,IACP,GAAA,EAAK,CAAA,OAAA,CAAA;AAAA,IACL;AAAA,GACD,CAAA,CAAE,MAAA,CAAO,IAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AACzB;AAEO,SAAS,sBAAA,CACd,GAAA,EACA,MAAA,EACA,SAAA,EACA,WAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,SAAS,CAAC,CAAA,CAAA,EAAI,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,SAAS,CAAC,CAAA,CAAA;AACnG,EAAA,IAAI,CAAC,WAAA,IAAe,WAAA,KAAgB,SAAA,EAAW;AAC7C,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAG,OAAO,CAAA,EAAA,EAAK,eAAe,GAAA,EAAK,MAAA,EAAQ,WAAW,CAAC,CAAA,CAAA,CAAA;AAChE;AChHO,SAAS,eAAA,CAAgB;AAAA,EAC9B,GAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA,GAAU,CAAA,IAAA;AACZ,CAAA,EAMG;AACD,EAAA,MAAM,EAAE,MAAA,EAAQ,CAAA,EAAE,GAAI,iBAAA,EAAkB;AAExC,EAAA,MAAM,UACJ,OAAA,KAAY,CAAA,QAAA,CAAA,GACR,GAAG,cAAA,CAAe,GAAA,EAAK,QAAQ,eAAe,CAAC,IAAI,cAAA,CAAe,GAAA,EAAK,QAAQ,eAAe,CAAC,KAC/F,cAAA,CAAe,GAAA,EAAK,QAAQ,eAAe,CAAA;AAEjD,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,uBAAOF,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACxB;AAEA,EAAA,MAAM,cAAA,GACJ,iBAAA,KAAsB,gBAAA,GAClB,CAAA,CAAE,sBAAsB,EAAE,QAAA,EAAU,iBAAA,EAAmB,IACvD,CAAA,CAAE,CAAA,sBAAA,CAAA,EAA0B,EAAE,QAAA,EAAU,mBAAmB,CAAA;AAEjE,EAAA,uBACED,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EACd,QAAA,EAAA;AAAA,oBAAAC,cAAAA,CAAC,UAAM,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBACfD,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,MAAA,cAAA;AAAA,MAAe,IAAA;AAAA,MAAG,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,iBAAiB;AAAA,KAAA,EAClE;AAAA,GAAA,EACF,CAAA;AAEJ;ACjCO,SAAS,sBAAA,CAAuB;AAAA,EACrC,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,EAAE,CAAA,EAAG,kBAAA,EAAmB,GAAI,iBAAA,EAAkB;AAEpD,EAAA,IAAI,qBAAqB,gBAAA,EAAkB;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,wBAAwB,kBAAkB,CAAA;AAC7D,EAAA,MAAM,QAAA,GAA4B,eAAA,KAAoB,CAAA,QAAA,CAAA,GAAa,CAAA,QAAA,CAAA,GAAa,CAAA,QAAA,CAAA;AAEhF,EAAA,uBACEA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,MAAK,MAAA,EACvC,QAAA,EAAA;AAAA,oBAAAC,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yBAAA,EACV,QAAA,EAAA,CAAA,CAAE,uBAAuB,EAAE,gBAAA,EAAkB,gBAAA,EAAkB,CAAA,EAClE,CAAA;AAAA,IACC,6BACCA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,wBAAA;AAAA,QACV,OAAA,EAAS,MAAM,kBAAA,CAAmB,QAAQ,CAAA;AAAA,QAEzC,8BAAoB,CAAA,QAAA,CAAA,GAAa,CAAA,CAAE,CAAA,eAAA,CAAiB,CAAA,GAAI,EAAE,CAAA,qBAAA,CAAuB;AAAA;AAAA,KACpF,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;ACzCO,SAAS,SAAA,CAAU;AAAA,EACxB,QAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,uBACEA,cAAAA,CAAC,IAAA,EAAA,EAAG,EAAA,EAAQ,SAAA,EAAU,iBACnB,QAAA,EACH,CAAA;AAEJ;AAMO,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA,GAAU,CAAA,OAAA,CAAA;AAAA,EACV,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAW,OAAA,KAAY,CAAA,OAAA,CAAA,GAAY,CAAA,qBAAA,CAAA,GAA0B,CAAA,uBAAA,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEO,SAAS,KAAA,CAAM;AAAA,EACpB,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACED,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EACf,QAAA,EAAA;AAAA,oBAAAC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACvC,QAAA;AAAA,IACA,wBAAQA,cAAAA,CAAC,UAAK,SAAA,EAAU,gBAAA,EAAkB,iBAAM,CAAA,GAAU;AAAA,GAAA,EAC7D,CAAA;AAEJ;AAEO,SAAS,UAAU,KAAA,EAA8C;AACtE,EAAA,uBAAOA,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAY,GAAG,KAAA,EAAO,CAAA;AAChD;AAEO,SAAS,SAAS,KAAA,EAA0D;AACjF,EAAA,uBAAOA,cAAAA,CAAC,UAAA,EAAA,EAAS,SAAA,EAAU,sBAAA,EAAwB,GAAG,KAAA,EAAO,CAAA;AAC/D;AAEO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAM,EAA+B;AAClE,EAAA,uBAAOA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,YAAY,QAAA,EAAA,KAAA,EAAM,CAAA;AACxC;AAEO,SAAS,UAAA,CAAW,EAAE,OAAA,EAAQ,EAAiC;AACpE,EAAA,uBAAOA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,UAAA,EAAW,IAAA,EAAK,SAAS,QAAA,EAAA,OAAA,EAAQ,CAAA;AACvD;AC5DO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,EAAkB;AAChC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,UAAA,EAAW;AAE7B,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,KAAS,CAAA,MAAA,CAAA,GAAW,MAAM,WAAA,GAAc,MAAA;AAClE,EAAA,MAAM;AAAA,IACJ,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,mBAAA,CAAoB,WAAA,EAAa,UAAA,EAAY,aAAa,SAAS,CAAA;AAEvE,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,MAAA,CAAA,EAAU;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACED,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,mBAAA,EAAoB,mBAAgB,gBAAA,EACrD,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,gBAAA,EAAkB,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EAAE,CAAA;AAAA,oBAClDA,cAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA;AAAA,oBACxBD,eAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,eAAA,EACV,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,CAAA,gBAAA,CAAkB,CAAA;AAAA,MAAE,IAAA;AAAA,sBAAEC,cAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,YAAY,IAAA,EAAK;AAAA,KAAA,EAC3D,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,YACX,QAAA,kBAAAA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,MAAM,WAAA,CAAY,OAAA;AAAA,QACvB,eAAA;AAAA,QACA,iBAAA;AAAA,QACA,gBAAA;AAAA,QACA,OAAA,EAAS,CAAA,QAAA;AAAA;AAAA,KACX,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC5CO,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,iBAAA,EAAkB;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIJ,cAAAA,CAA6B,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,MAAA,GAASC,kBAAY,YAAY;AACrC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA,EAAa;AAC3C,MAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAClB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,CAAA,uBAAA,CAAyB,CAAA;AAAA,IACzE,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAC,gBAAU,MAAM;AACd,IAAA,KAAK,MAAA,EAAO;AAAA,EACd,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,OAAO,MAAA,EAAO;AAClD;ACbA,eAAe,qBAAA,CACb,MAAA,EACA,WAAA,EACA,SAAA,EACA,MACA,OAAA,EACwB;AACxB,EAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,eAAA,CAAgB,EAAE,UAAA,EAAY,SAAA,EAAW,MAAM,CAAA;AAC1E,IAAA,IAAI,MAAM,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,OAAA,KAAY,OAAO,CAAA,EAAG;AAClD,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,EAAE,CAAA,EAAG,QAAA,EAAU,MAAA,EAAQ,QAAA,KAAa,iBAAA,EAAkB;AAC5D,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,UAAA,EAAW;AAC7B,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,eAAA,EAAgB;AACzC,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,EAAY;AACjC,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,KAAS,CAAA,OAAA,CAAA,GAAY,MAAM,SAAA,GAAY,MAAA;AAC/D,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,YAAA,CAAa,SAAS,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,KAAS,CAAA,OAAA,CAAA,GAAY,MAAM,UAAA,GAAa,MAAA;AACjE,EAAA,MAAM;AAAA,IACJ,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,mBAAA,CAAoB,UAAA,EAAY,SAAS,CAAA;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIF,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,CAAA,OAAA,CAAA,IAAa,CAAC,YAAA,EAAc;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,KAAA;AAChB,EAAA,MAAM,OAAA,GAAU,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,QAAQ,SAAS,CAAA;AAC/D,EAAA,MAAM,QAAA,GACJ,OAAA,CAAQ,UAAA,KAAe,eAAA,GACnB,IAAA,GACA,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,OAAA,CAAQ,UAAU,CAAA;AAEvD,EAAA,eAAe,aAAA,GAAgB;AAC7B,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,IAAIO,WAAAA;AACJ,MAAA,IAAI,OAAA,CAAQ,eAAe,eAAA,EAAiB;AAC1C,QAAA,MAAM,WAAW,SAAA,CACd,MAAA,CAAO,CAAC,CAAA,KAAM,SAAS,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,EAAE,KAAK,IAAI,CAAA,CACzD,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAClB,QAAA,MAAM,WAAW,MAAM,qBAAA;AAAA,UACrB,MAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,CAAQ,SAAA;AAAA,UACR,OAAA,CAAQ,IAAA;AAAA,UACR,QAAQ,IAAA,CAAK;AAAA,SACf;AACA,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,QAAA,CAAS,CAAA,CAAE,kBAAkB,CAAC,CAAA;AAC9B,UAAA;AAAA,QACF;AACA,QAAAA,WAAAA,GAAa,QAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAAA,cAAa,OAAA,CAAQ,UAAA;AAAA,MACvB;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,iBAAA,CAAkB;AAAA,QACjD,UAAA,EAAAA,WAAAA;AAAA,QACA,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,OAAA,EAAS,QAAQ,IAAA,CAAK,OAAA;AAAA,QACtB,GAAG,+BAAA,CAAgC,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACnD,UAAU,OAAA,CAAQ;AAAA,OACnB,CAAA;AAED,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,MAAA,CAAA,EAAU,WAAA,EAAa,CAAA;AACxC,MAAA,QAAA,GAAW,WAAW,CAAA;AAAA,IACxB,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,YAAe,eAAA,IAAmB,GAAA,CAAI,MAAA,KAAW,GAAA,EAAK;AACxD,QAAA,QAAA,CAAS,CAAA,CAAE,kBAAkB,CAAC,CAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,CAAA,CAAE,eAAe,CAAC,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,uBACEJ,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,mBAAgB,iBAAA,EAC3C,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,iBAAA,EAAmB,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EAAE,CAAA;AAAA,oBACpDA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,UAAA,EAAY,QAAA,EAAA,CAAA,CAAE,iBAAiB,CAAA,EAAE,CAAA;AAAA,oBAC9CA,cAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAD,eAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA;AAAA,sBAAAA,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,CAAA,eAAA,CAAiB,CAAA,EAAE,CAAA;AAAA,wBAC1BA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,OAAA,EAAS,IAAA,IAAQ,QAAQ,SAAA,EAAU;AAAA,OAAA,EAC1C,CAAA;AAAA,sBACAD,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,CAAA,gBAAA,CAAkB,CAAA,EAAE,CAAA;AAAA,wBAC3BA,cAAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,UAAA,KAAe,eAAA,GACpB,CAAA,CAAE,CAAA,YAAA,CAAc,CAAA,GACf,QAAA,EAAU,WAAA,IAAe,OAAA,CAAQ,UAAA,EACxC;AAAA,OAAA,EACF,CAAA;AAAA,sBACAD,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,CAAA,YAAA,CAAc,CAAA,EAAE,CAAA;AAAA,wBACvBA,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,QAAQ,IAAA,CAAK,OAAA;AAAA,YAClB,eAAA;AAAA,YACA,iBAAA;AAAA,YACA,gBAAA;AAAA,YACA,OAAA,EAAS,CAAA,QAAA;AAAA;AAAA,SACX,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAD,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,CAAA,gBAAA,CAAkB,CAAA,EAAE,CAAA;AAAA,wBAC3BD,gBAAC,IAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,QAAA,CAAS,SAAA;AAAA,UAAU,GAAA;AAAA,UAAE,QAAQ,QAAA,CAAS,QAAA;AAAA,UAAS,UAAA;AAAA,UAAI,QAAQ,QAAA,CAAS;AAAA,SAAA,EAC/E;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IACC,wBAAQC,cAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,OAAO,CAAA,GAAK,IAAA;AAAA,oBAC1CD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,eAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,IAAA,CAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,UAAA,EAC9E,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EACnB,CAAA;AAAA,sBACAA,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,MAAM,KAAK,aAAA,EAAc,EAAG,QAAA,EAAU,UAAA,EACpD,uBAAa,CAAA,CAAE,CAAA,kBAAA,CAAoB,CAAA,GAAI,CAAA,CAAE,iBAAiB,CAAA,EAC7D;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AClJO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,EAAE,CAAA,EAAG,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAC1C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,UAAA,EAAW;AAC7B,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,eAAA,EAAgB;AACzC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIJ,eAA8B,mBAAmB,CAAA;AAC7E,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAiC,EAAE,CAAA;AAE/D,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,CAAA,QAAA,CAAA,IAAc,CAAC,YAAA,EAAc;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,YAAA,CAAa,UAAU,CAAA;AAExD,EAAA,SAAS,QAAA,CAAS,UAAkB,KAAA,EAAe;AACjD,IAAA,MAAM,GAAA,GAAM,iBAAiB,QAAQ,CAAA;AACrC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,EACvD;AAEA,EAAA,SAAS,YAAA,GAAe;AACtB,IAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,YAAA,CAAc,UAAA,EAAY,MAAM,CAAA;AAC1E,IAAA,SAAA,CAAU,UAAU,CAAA;AACpB,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,CAAA,EAAG;AACtC,MAAA;AAAA,IACF;AACA,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,YAAA,CAAA,EAAgB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACrD;AAEA,EAAA,uBACEG,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,mBAAgB,kBAAA,EAC3C,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,kBAAA,EAAoB,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA;AAAA,oBACtDD,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,SAAA;AAAA,QACV,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,YAAA,EAAa;AAAA,QACf,CAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACrB,YAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,KAAA,CAAM,QAAQ,CAAA;AAChD,YAAA,IAAI,CAAC,QAAA,EAAU;AACb,cAAA,OAAO,IAAA;AAAA,YACT;AACA,YAAA,MAAM,KAAA,GACJ,KAAA,CAAM,KAAA,KACL,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAA,GAAI,CAAA,CAAE,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAE,IAAI,KAAA,CAAM,QAAA,CAAA;AAC7E,YAAA,MAAM,KAAA,GAAQ,OAAO,QAAQ,CAAA;AAC7B,YAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA;AACnC,YAAA,MAAM,OAAA,GAAU,MAAM,QAAA,KAAa,CAAA,KAAA,CAAA;AACnC,YAAA,uBACEC,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,OAAO,CAAA,EAAG,KAAK,GAAG,KAAA,CAAM,QAAA,GAAW,OAAO,CAAA,CAAE,CAAA,CAAA;AAAA,gBAC5C,KAAA,EACE,KAAA,KAAU,CAAA,QAAA,CAAA,GACN,CAAA,CAAE,CAAA,iBAAA,CAAmB,IACrB,KAAA,KAAU,CAAA,OAAA,CAAA,GACR,CAAA,CAAE,CAAA,qBAAA,CAAuB,CAAA,GACzB,MAAA;AAAA,gBAGP,oCACCA,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,KAAA;AAAA,oBACA,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,MAAM,QAAA,EAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,oBACxD,IAAA,EAAM;AAAA;AAAA,oCAGRA,cAAAA;AAAA,kBAAC,SAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAM,KAAA,CAAM,QAAA,KAAa,CAAA,KAAA,CAAA,GAAU,CAAA,KAAA,CAAA,GAAU,CAAA,IAAA,CAAA;AAAA,oBAC7C,KAAA;AAAA,oBACA,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,MAAM,QAAA,EAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,oBACxD,YAAA,EAAc,KAAA,CAAM,QAAA,KAAa,CAAA,KAAA,CAAA,GAAU,CAAA,KAAA,CAAA,GAAU;AAAA;AAAA;AACvD,eAAA;AAAA,cAtBG,KAAA,CAAM;AAAA,aAwBb;AAAA,UAEJ,CAAC,CAAA;AAAA,0BACDD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,eAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,UAAS,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,MAAM,CAAA,IAAA,CAAA,EAAQ,CAAA,EAC/E,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EACnB,CAAA;AAAA,4BACAA,cAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,QAAA,EAAU,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE;AAAA,WAAA,EAC/C;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AClGO,SAAS,oBAAoB,MAAA,EAKjC;AACD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,iBAAA,EAAkB;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIJ,cAAAA,CAAmB,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,MAAA,GAASC,kBAAY,YAAY;AACrC,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,CAAC,OAAO,KAAA,EAAO;AACtC,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GACJ,MAAA,CAAO,UAAA,KAAe,eAAA,GACjB,OAAO,iBAAA,IAAqB,EAAC,GAC9B,MAAA,CAAO,UAAA,GACL,CAAC,MAAA,CAAO,UAAU,IAClB,EAAC;AAET,MAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,QAAA,QAAA,CAAS,EAAE,CAAA;AACX,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,QAC1B,WAAA,CAAY,GAAA;AAAA,UAAI,CAAC,UAAA,KACf,MAAA,CAAO,mBAAA,CAAoB;AAAA,YACzB,UAAA;AAAA,YACA,WAAW,MAAA,CAAO,SAAA;AAAA,YAClB,OAAO,MAAA,CAAO;AAAA,WACf;AAAA;AACH,OACF;AAEA,MAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,UAAA,MAAA,CAAO,IAAI,IAAI,CAAA;AAAA,QACjB;AAAA,MACF;AACA,MAAA,QAAA,CAAS,CAAC,GAAG,MAAM,CAAC,CAAA;AAAA,IACtB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,CAAA,gCAAA,CAAkC,CAAA;AAAA,IAClF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,iBAAA,EAAmB,MAAA,CAAO,SAAS,CAAC,CAAA;AAExF,EAAAC,gBAAU,MAAM;AACd,IAAA,KAAK,MAAA,EAAO;AAAA,EACd,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,OAAO,EAAE,gBAAA,EAAkB,KAAA,EAAO,OAAA,EAAS,OAAO,MAAA,EAAO;AAC3D;AC/CO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,CAAA,EAAG,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAC1C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,UAAA,EAAW;AAC7B,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,eAAA,EAAgB;AACzC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIF,cAAAA,CAAS,MAAM,YAAA,CAAa,eAAA,CAAgB,CAAA,GAAA,CAAK,CAAC,CAAC,CAAA;AAErF,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,KAAS,CAAA,IAAA,CAAA,GAAS,MAAM,SAAA,GAAY,MAAA;AAC5D,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,KAAS,CAAA,IAAA,CAAA,GAAS,MAAM,UAAA,GAAa,MAAA;AAC9D,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,YAAA,CAAa,SAAS,CAAA;AAC5C,EAAA,MAAM,iBAAA,GAAoBH,aAAAA;AAAA,IACxB,MAAM,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,IAC/B,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,EAAE,kBAAkB,gBAAA,EAAkB,eAAA,EAAiB,oBAAmB,GAC9E,mBAAA,CAAoB,YAAY,SAAS,CAAA;AAE3C,EAAA,MAAM,KAAA,GAAQ,eAAe,SAAS,CAAA;AACtC,EAAA,MAAM,EAAE,gBAAA,EAAkB,OAAA,EAAS,KAAA,KAAU,mBAAA,CAAoB;AAAA,IAC/D,SAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,CAAA,IAAA,CAAA,IAAU,CAAC,YAAA,EAAc;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,eAAA,CAAgB,gBAAgB,CAAC,CAAA;AACpE,EAAA,MAAM,OAAA,GAAU,kBAAA;AAAA,IACd,eAAA,CAAgB,YAAA,CAAa,OAAA,CAAQ,sBAAA,EAAwB,gBAAgB;AAAA,GAC/E;AACA,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,gBAAgB,CAAA;AAE5C,EAAA,MAAM,IAAA,GAAO,cAAA,CAAe,SAAA,EAAW,YAAA,CAAa,aAAa,YAAY,CAAA;AAE7E,EAAA,uBACEM,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,mBAAgB,cAAA,EAC3C,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,YAAY,CAAA,EAAE,CAAA;AAAA,oBAC9CA,cAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,UAAA,EAAY,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EAAE,CAAA;AAAA,oBAC3CD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS,MAAM,YAAA,CAAa,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,QAAA,CAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,UAC1E,YAAA,EAAW,gBAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAqB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC3CA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS,MAAM,YAAA,CAAa,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,GAAA,CAAI,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,UACrE,YAAA,EAAW,YAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,IACC,0BAAUA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAM,UAAI,CAAA,GAAK,IAAA;AAAA,IACvC,wBAAQA,cAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,OAAO,CAAA,GAAK,IAAA;AAAA,oBAC1CA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAmB,IAAA,EAAK,MAAA,EACpC,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,KAAU;AACxB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,uBAAOA,cAAAA,CAAC,MAAA,EAAA,EAA0B,WAAU,iBAAA,EAAA,EAA1B,CAAA,IAAA,EAAO,KAAK,CAAA,CAAgC,CAAA;AAAA,MAChE;AACA,MAAA,MAAM,KAAA,GAAQ,mBAAmB,GAAG,CAAA;AACpC,MAAA,MAAM,OAAA,GAAU,aAAA,CAAc,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AACrD,MAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,GAAA,CAAI,KAAK,KAAK,CAAC,OAAA;AACjD,MAAA,uBACEA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EACE,gBAAgB,CAAA,wCAAA,CAAA,GAA6C,CAAA,eAAA,CAAA;AAAA,UAE/D,QAAA,EAAU,aAAA;AAAA,UACV,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,MAAM,CAAA,WAAA,CAAA,EAAe,IAAA,EAAM,OAAO,CAAA;AAAA,UAC5D,YAAA,EAAY,KAAA;AAAA,UAEX,QAAA,EAAA,GAAA,CAAI;AAAA,SAAA;AAAA,QATA;AAAA,OAUP;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,aAAY,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,MAAM,CAAA,IAAA,CAAA,EAAQ,CAAA,EACjE,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EACnB;AAAA,GAAA,EACF,CAAA;AAEJ;AC/GO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,EAAkB;AAChC,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,eAAA,EAAgB;AAEzC,EAAA,IAAI,CAAC,YAAA,EAAc,OAAA,CAAQ,cAAA,EAAgB;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACED,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,qBAAA,EAAsB,mBAAgB,mBAAA,EACvD,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,mBAAA,EAAqB,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA;AAAA,oBACvDA,eAAC,GAAA,EAAA,EAAG,QAAA,EAAA,YAAA,CAAa,QAAQ,qBAAA,IAAyB,CAAA,CAAE,gBAAgB,CAAA,EAAE;AAAA,GAAA,EACxE,CAAA;AAEJ;ACXO,SAAS,SAAA,GAAY;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAG,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAC1C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,UAAA,EAAW;AAC7B,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,eAAA,EAAgB;AACzC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIJ,cAAAA,CAA0B,EAAE,CAAA;AAC5D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAgD,IAAI,CAAA;AAE1F,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,CAAA,KAAA,CAAA,IAAW,CAAC,YAAA,EAAc;AAC3C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAE,OAAM,GAAI,YAAA;AAElB,EAAA,SAAS,OAAO,GAAA,EAA4B;AAC1C,IAAA,WAAA,CAAY,CAAC,OAAA,MAAa,EAAE,GAAG,OAAA,EAAS,CAAC,GAAG,GAAG,CAAC,OAAA,CAAQ,GAAG,CAAA,EAAE,CAAE,CAAA;AAAA,EACjE;AAEA,EAAA,SAAS,cAAA,GAAiB;AACxB,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,YAAA,CAAA,EAAgB,QAAA,EAAU,CAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,YAAA,GACJ,WAAA,KAAgB,CAAA,MAAA,CAAA,GACZ,KAAA,CAAM,mBAAA,GACN,WAAA,KAAgB,CAAA,KAAA,CAAA,GACd,KAAA,CAAM,YAAA,GACN,WAAA,KAAgB,CAAA,OAAA,CAAA,GACd,KAAA,CAAM,cAAA,GACN,IAAA;AAEV,EAAA,uBACEG,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,mBAAgB,eAAA,EAC3C,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,eAAA,EAAiB,QAAA,EAAA,CAAA,CAAE,aAAa,CAAA,EAAE,CAAA;AAAA,oBAChDD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,mBAAA,mBACLA,eAAAA,CAAC,KAAA,EAAA,EAAM,OAAM,EAAA,EACX,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EACf,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,UAAA;AAAA,cACL,OAAA,EAAS,SAAS,MAAA,KAAW,IAAA;AAAA,cAC7B,QAAA,EAAU,MAAM,MAAA,CAAO,CAAA,MAAA,CAAQ;AAAA;AAAA,WACjC;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EAAE;AAAA,SAAA,EACjC,CAAA;AAAA,QACC,MAAM,mBAAA,mBACLA,cAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,SAAA,EAAU,OAAA,EAAS,MAAM,cAAA,CAAe,CAAA,MAAA,CAAQ,GAC7E,QAAA,EAAA,CAAA,CAAE,CAAA,cAAA,CAAgB,GACrB,CAAA,GACE;AAAA,OAAA,EACN,CAAA,GACE,IAAA;AAAA,MACH,MAAM,YAAA,mBACLD,eAAAA,CAAC,KAAA,EAAA,EAAM,OAAM,EAAA,EACX,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EACf,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,UAAA;AAAA,cACL,OAAA,EAAS,SAAS,KAAA,KAAU,IAAA;AAAA,cAC5B,QAAA,EAAU,MAAM,MAAA,CAAO,CAAA,KAAA,CAAO;AAAA;AAAA,WAChC;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EAAE;AAAA,SAAA,EAChC,CAAA;AAAA,QACC,MAAM,YAAA,mBACLA,cAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,SAAA,EAAU,OAAA,EAAS,MAAM,cAAA,CAAe,CAAA,KAAA,CAAO,GAC5E,QAAA,EAAA,CAAA,CAAE,CAAA,cAAA,CAAgB,GACrB,CAAA,GACE;AAAA,OAAA,EACN,CAAA,GACE,IAAA;AAAA,MACH,MAAM,cAAA,mBACLD,eAAAA,CAAC,KAAA,EAAA,EAAM,OAAM,EAAA,EACX,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EACf,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,UAAA;AAAA,cACL,OAAA,EAAS,SAAS,OAAA,KAAY,IAAA;AAAA,cAC9B,QAAA,EAAU,MAAM,MAAA,CAAO,CAAA,OAAA,CAAS;AAAA;AAAA,WAClC;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAAA,EAAE;AAAA,SAAA,EAClC,CAAA;AAAA,QACC,MAAM,cAAA,mBACLA,cAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,SAAA,EAAU,OAAA,EAAS,MAAM,cAAA,CAAe,CAAA,OAAA,CAAS,GAC9E,QAAA,EAAA,CAAA,CAAE,CAAA,cAAA,CAAgB,GACrB,CAAA,GACE;AAAA,OAAA,EACN,CAAA,GACE;AAAA,KAAA,EACN,CAAA;AAAA,IACC,WAAA,IAAe,+BACdD,eAAAA,CAAC,YAAO,IAAA,EAAI,IAAA,EAAC,WAAU,UAAA,EACrB,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,sBAC7CA,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA,EAC3D,QAAA,EAAA,CAAA,CAAE,CAAA,YAAA,CAAc,CAAA,EACnB;AAAA,KAAA,EACF,CAAA,GACE,IAAA;AAAA,oBACJD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,SAAS,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,IAAA,CAAA,EAAQ,CAAA,EACjE,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EACnB,CAAA;AAAA,sBACAA,cAAAA,CAAC,MAAA,EAAA,EAAO,SAAS,cAAA,EAAiB,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE;AAAA,KAAA,EAC1D;AAAA,GAAA,EACF,CAAA;AAEJ;ACtGO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,EAAE,CAAA,EAAG,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAC1C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,UAAA,EAAW;AAC7B,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,eAAA,EAAgB;AACzC,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,KAAS,CAAA,QAAA,CAAA,GAAa,MAAM,SAAA,GAAY,MAAA;AAChE,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAM,GAAI,aAAa,SAAS,CAAA;AAE5D,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,QAAA,CAAA,EAAY;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,YAAA,EAAc,OAAA,CAAQ,kBAAA,IAAsB,KAAA;AAE5D,EAAA,uBACED,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,mBAAgB,kBAAA,EAC3C,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,kBAAA,EAAoB,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA;AAAA,IACrD,0BAAUA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAM,UAAI,CAAA,GAAK,IAAA;AAAA,IACvC,wBAAQA,cAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,OAAO,CAAA,GAAK,IAAA;AAAA,oBAC1CD,eAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cAAA,EACX,QAAA,EAAA;AAAA,MAAA,OAAA,mBACCC,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,SAAA;AAAA,UACV,OAAA,EAAS,MACP,QAAA,CAAS,EAAE,MAAM,CAAA,eAAA,CAAA,EAAmB,UAAA,EAAY,iBAAiB,CAAA;AAAA,UAGnE,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EAAiB,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EAAE;AAAA;AAAA,SAEvD,CAAA,GACE,IAAA;AAAA,MACH,UAAU,GAAA,CAAI,CAAC,6BACdA,cAAAA,CAAC,QACC,QAAA,kBAAAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,SAAA;AAAA,UACV,OAAA,EAAS,MACP,QAAA,CAAS,EAAE,MAAM,CAAA,eAAA,CAAA,EAAmB,UAAA,EAAY,QAAA,CAAS,EAAA,EAAI,CAAA;AAAA,UAG/D,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,mBAAS,WAAA,EAAY;AAAA;AAAA,OACxD,EAAA,EATO,QAAA,CAAS,EAUlB,CACD;AAAA,KAAA,EACH,CAAA;AAAA,IACC,CAAC,OAAA,IAAW,SAAA,CAAU,MAAA,KAAW,KAAK,CAAC,OAAA,mBACtCA,cAAAA,CAAC,OAAE,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,CAAA,CAAE,CAAA,cAAA,CAAgB,GAAE,CAAA,GAC3C,IAAA;AAAA,oBACJA,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,aAAY,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,MAAM,CAAA,IAAA,CAAA,EAAQ,CAAA,EACjE,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EACnB;AAAA,GAAA,EACF,CAAA;AAEJ;ACxDO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,EAAE,CAAA,EAAG,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAC1C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,UAAA,EAAW;AAC7B,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,KAAU,WAAA,EAAY;AAEjD,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,OAAA,CAAA,EAAW;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACED,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,mBAAgB,iBAAA,EAC3C,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,iBAAA,EAAmB,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EAAE,CAAA;AAAA,IACnD,0BAAUA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAM,UAAI,CAAA,GAAK,IAAA;AAAA,IACvC,wBAAQA,cAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,OAAO,CAAA,GAAK,IAAA;AAAA,IACzC,CAAC,OAAA,IAAW,CAAC,KAAA,IAAS,SAAS,MAAA,KAAW,CAAA,mBACzCA,cAAAA,CAAC,OAAE,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,CAAA,CAAE,CAAA,aAAA,CAAe,GAAE,CAAA,GAC1C,IAAA;AAAA,oBACJA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cAAA,EACX,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBACbA,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAD,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,MAAM,CAAA,cAAA,CAAA,EAAkB,SAAA,EAAW,OAAA,CAAQ,EAAA,EAAI,CAAA;AAAA,QAEzE,QAAA,EAAA;AAAA,0BAAAC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,kBAAQ,IAAA,EAAK,CAAA;AAAA,UAC7C,OAAA,CAAQ,8BACPA,cAAAA,CAAC,UAAK,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAA,OAAA,CAAQ,WAAA,EAAY,CAAA,GAClD,IAAA;AAAA,0BACJA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EACb,QAAA,EAAA,CAAA,CAAE,CAAA,uBAAA,CAAA,EAA2B,EAAE,OAAA,EAAS,OAAA,CAAQ,eAAA,EAAiB,CAAA,EACpE;AAAA;AAAA;AAAA,KACF,EAAA,EAbO,OAAA,CAAQ,EAcjB,CACD,CAAA,EACH,CAAA;AAAA,oBACAA,eAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,aAAY,QAAA,EAAQ,IAAA,EACjC,QAAA,EAAA,CAAA,CAAE,CAAA,YAAA,CAAc,CAAA,EACnB;AAAA,GAAA,EACF,CAAA;AAEJ;ACvCO,SAAS,gBAAgB,MAAA,EAK7B;AACD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,iBAAA,EAAkB;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIJ,cAAAA,CAAwB,EAAE,CAAA;AACpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,MAAA,GAASC,kBAAY,YAAY;AACrC,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,CAAC,OAAO,IAAA,EAAM;AACrC,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,KAAe,eAAA,EAAiB;AAC9D,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,eAAA,CAAgB;AAAA,UACxC,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,MAAM,MAAA,CAAO;AAAA,SACd,CAAA;AACD,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,iBAAA,IAAqB,EAAC;AACzC,MAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,QAAA,QAAA,CAAS,EAAE,CAAA;AACX,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,QAC5B,GAAA,CAAI,GAAA;AAAA,UAAI,CAAC,UAAA,KACP,MAAA,CAAO,eAAA,CAAgB;AAAA,YACrB,UAAA;AAAA,YACA,WAAW,MAAA,CAAO,SAAA;AAAA,YAClB,MAAM,MAAA,CAAO;AAAA,WACd;AAAA;AACH,OACF;AAEA,MAAA,MAAM,MAAA,uBAAa,GAAA,EAAyB;AAC5C,MAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,QAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,UAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAAA,QAC/B;AAAA,MACF;AACA,MAAA,QAAA;AAAA,QACE,CAAC,GAAG,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAC;AAAA,OACxE;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,CAAA,2BAAA,CAA6B,CAAA;AAAA,IAC7E,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,iBAAA,EAAmB,MAAA,CAAO,SAAS,CAAC,CAAA;AAEvF,EAAAC,gBAAU,MAAM;AACd,IAAA,KAAK,MAAA,EAAO;AAAA,EACd,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,MAAA,EAAO;AACzC;AC/DO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,EAAE,CAAA,EAAG,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAC1C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,UAAA,EAAW;AAC7B,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,KAAS,CAAA,IAAA,CAAA,GAAS,MAAM,SAAA,GAAY,MAAA;AAC5D,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,KAAS,CAAA,IAAA,CAAA,GAAS,MAAM,UAAA,GAAa,MAAA;AAC9D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,KAAS,CAAA,IAAA,CAAA,GAAS,MAAM,IAAA,GAAO,MAAA;AAClD,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,YAAA,CAAa,SAAS,CAAA;AAC5C,EAAA,MAAM,iBAAA,GAAoBL,aAAAA,CAAQ,MAAM,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAC/E,EAAA,MAAM;AAAA,IACJ,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,mBAAA,CAAoB,UAAA,EAAY,SAAS,CAAA;AAC7C,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,KAAU,eAAA,CAAgB;AAAA,IAChD,SAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIG,eAAwB,IAAI,CAAA;AAE1E,EAAAE,gBAAU,MAAM;AACd,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,kBAAA,CAAmB,KAAA,CAAM,CAAC,CAAA,CAAG,OAAO,CAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,IACzB;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAA,CAAA,EAAQ;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,KAAY,eAAe,CAAA,IAAK,IAAA;AAErE,EAAA,uBACEC,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,mBAAgB,cAAA,EAC3C,QAAA,EAAA;AAAA,oBAAAC,eAAC,SAAA,EAAA,EAAU,EAAA,EAAG,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,YAAY,CAAA,EAAE,CAAA;AAAA,oBAC9CA,cAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,CAAA,CAAE,CAAA,iBAAA,CAAA,EAAqB,EAAE,QAAA,EAAU,eAAA,EAAiB,CAAA,EAAE,CAAA;AAAA,IAC9E,0BAAUA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAM,UAAI,CAAA,GAAK,IAAA;AAAA,IACvC,wBAAQA,cAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,OAAO,CAAA,GAAK,IAAA;AAAA,IACzC,CAAC,OAAA,IAAW,KAAA,CAAM,MAAA,KAAW,CAAA,mBAAIA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,CAAA,CAAE,CAAA,UAAA,CAAY,GAAE,CAAA,GAAO,IAAA;AAAA,oBAClFA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cAAA,EACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EACE,IAAA,CAAK,OAAA,KAAY,eAAA,GACb,CAAA,wBAAA,CAAA,GACA,CAAA,OAAA,CAAA;AAAA,QAEN,OAAA,EAAS,MAAM,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAAA,QAE9C,QAAA,kBAAAA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,KAAK,IAAA,CAAK,OAAA;AAAA,YACV,eAAA;AAAA,YACA,iBAAA;AAAA,YACA;AAAA;AAAA;AACF;AAAA,KACF,EAAA,EAhBO,IAAA,CAAK,OAiBd,CACD,CAAA,EACH,CAAA;AAAA,oBACAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,SAAS,MAAM,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,IAAA,CAAA,EAAQ,CAAA,EACjE,QAAA,EAAA,CAAA,CAAE,cAAc,CAAA,EACnB,CAAA;AAAA,sBACAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,UAAU,CAAC,QAAA;AAAA,UACX,OAAA,EAAS,MAAM,QAAA,IAAY,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA,WAAA,CAAA,EAAe,IAAA,EAAM,QAAA,EAAU,CAAA;AAAA,UAE1E,YAAE,CAAA,gBAAA,CAAkB;AAAA;AAAA;AACvB,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACrFO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,EAAE,YAAA,EAAc,mBAAA,EAAqB,iBAAA,KAAsB,iBAAA,EAAkB;AAEnF,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,0BAAAA,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAI,CAAA,EAC1B,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,0BAAAA,cAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,iBAAA,EAAmB,CAAA,EAC1C,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,YAAA,EAAc,QAAQ,cAAA,EAAgB;AACxC,IAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBACb,QAAA,kBAAAA,cAAAA,CAAC,mBAAgB,CAAA,EACnB,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBACb,QAAA,kBAAAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAC,eAAC,aAAA,EAAA,EAAc,CAAA;AAAA,oBACfA,eAAC,cAAA,EAAA,EAAe,CAAA;AAAA,oBAChBA,eAAC,UAAA,EAAA,EAAW,CAAA;AAAA,oBACZA,eAAC,cAAA,EAAA,EAAe,CAAA;AAAA,oBAChBA,eAAC,YAAA,EAAA,EAAa,CAAA;AAAA,oBACdA,eAAC,SAAA,EAAA,EAAU,CAAA;AAAA,oBACXA,eAAC,WAAA,EAAA,EAAY,CAAA;AAAA,oBACbA,eAAC,aAAA,EAAA,EAAc;AAAA,GAAA,EACjB,CAAA,EACF,CAAA;AAEJ","file":"index.cjs","sourcesContent":["import type { PublicTenantConfigResponse } from \"@ea/api-contracts\";\r\nimport { createContext, useContext } from \"react\";\r\n\r\nimport type { BookingClient } from \"./lib/create-booking-client\";\r\nimport type { TranslationKey } from \"./i18n/create-translator\";\r\nimport type { BookingAction, BookingState } from \"./hooks/use-booking\";\r\nimport type { TimeDisplayMode } from \"./utils/booking-timezone\";\r\n\r\n/**\r\n * Visual overrides for the widget. Every field is optional — anything left unset\r\n * falls through to the host's CSS design-system token, then tenant config (brand\r\n * only), then a built-in default. See `styles.css` for the full resolution order.\r\n * Each field maps directly to a `--ea-*` custom property.\r\n */\r\nexport type BookingTheme = {\r\n /** Primary / call-to-action colour → `--ea-brand`. */\r\n readonly brandColor?: string | undefined;\r\n /** Text colour on primary buttons → `--ea-on-brand`. */\r\n readonly onBrandColor?: string | undefined;\r\n /** Body text colour → `--ea-text`. */\r\n readonly textColor?: string | undefined;\r\n /** Secondary / hint text colour → `--ea-muted`. */\r\n readonly mutedColor?: string | undefined;\r\n /** Card / input border colour → `--ea-border`. */\r\n readonly borderColor?: string | undefined;\r\n /** Card / input / surface background → `--ea-surface`. */\r\n readonly surfaceColor?: string | undefined;\r\n /** Error / validation colour → `--ea-error`. */\r\n readonly errorColor?: string | undefined;\r\n /** Corner radius for cards, inputs, buttons → `--ea-radius`. */\r\n readonly borderRadius?: string | undefined;\r\n /** Font stack → `--ea-font`. */\r\n readonly fontFamily?: string | undefined;\r\n /** Max width of the widget container → `--ea-max-width`. */\r\n readonly maxWidth?: string | undefined;\r\n /** Light/dark scheme. `\"system\"` follows `prefers-color-scheme`. */\r\n readonly colorScheme?: \"light\" | \"dark\" | \"system\" | undefined;\r\n};\r\n\r\nexport type BookingContextValue = {\r\n readonly client: BookingClient;\r\n readonly apiUrl: string;\r\n readonly tenantConfig: PublicTenantConfigResponse | null;\r\n readonly tenantConfigLoading: boolean;\r\n readonly tenantConfigError: string | null;\r\n readonly locale: string;\r\n readonly theme: BookingTheme;\r\n readonly t: (key: TranslationKey, params?: Record<string, string | number>) => string;\r\n readonly bookingState: BookingState;\r\n readonly dispatch: React.Dispatch<BookingAction>;\r\n readonly customerTimezone: string;\r\n readonly timeDisplayMode: TimeDisplayMode;\r\n readonly setTimeDisplayMode: (mode: TimeDisplayMode) => void;\r\n readonly onBooked?: ((appointment: import(\"@ea/api-contracts\").AppointmentDto) => void) | undefined;\r\n};\r\n\r\nexport const BookingContext = createContext<BookingContextValue | null>(null);\r\n\r\nexport function useBookingContext(): BookingContextValue {\r\n const ctx = useContext(BookingContext);\r\n if (!ctx) {\r\n throw new Error(`useBookingContext must be used within BookingProvider`);\r\n }\r\n return ctx;\r\n}\r\n","export const ANY_PROVIDER_ID = `any` as const;\r\n\r\nexport type AnyProviderId = typeof ANY_PROVIDER_ID;\r\n","import type { PublicBookingFormFieldDto } from \"@ea/api-contracts\";\r\n\r\nimport type { TranslationKey } from \"../i18n/create-translator\";\r\n\r\nexport type CustomerFieldValues = {\r\n readonly firstName: string;\r\n readonly lastName: string;\r\n readonly email: string;\r\n readonly phone: string;\r\n readonly address: string;\r\n readonly city: string;\r\n readonly state: string;\r\n readonly zip: string;\r\n readonly notes: string;\r\n readonly customField1: string;\r\n readonly customField2: string;\r\n readonly customField3: string;\r\n readonly customField4: string;\r\n readonly customField5: string;\r\n readonly timezone: string;\r\n};\r\n\r\nexport const emptyCustomerValues = (): CustomerFieldValues => ({\r\n firstName: ``,\r\n lastName: ``,\r\n email: ``,\r\n phone: ``,\r\n address: ``,\r\n city: ``,\r\n state: ``,\r\n zip: ``,\r\n notes: ``,\r\n customField1: ``,\r\n customField2: ``,\r\n customField3: ``,\r\n customField4: ``,\r\n customField5: ``,\r\n timezone: typeof Intl !== `undefined` ? Intl.DateTimeFormat().resolvedOptions().timeZone : `UTC`,\r\n});\r\n\r\nconst FIELD_KEY_TO_VALUE: Readonly<\r\n Record<string, keyof CustomerFieldValues>\r\n> = {\r\n first_name: `firstName`,\r\n last_name: `lastName`,\r\n email: `email`,\r\n phone: `phone`,\r\n address: `address`,\r\n city: `city`,\r\n state: `state`,\r\n zip: `zip`,\r\n notes: `notes`,\r\n custom_1: `customField1`,\r\n custom_2: `customField2`,\r\n custom_3: `customField3`,\r\n custom_4: `customField4`,\r\n custom_5: `customField5`,\r\n};\r\n\r\nconst FIELD_KEY_TO_LABEL: Readonly<Record<string, TranslationKey>> = {\r\n first_name: `fields.first_name`,\r\n last_name: `fields.last_name`,\r\n email: `fields.email`,\r\n phone: `fields.phone`,\r\n address: `fields.address`,\r\n city: `fields.city`,\r\n state: `fields.state`,\r\n zip: `fields.zip`,\r\n notes: `fields.notes`,\r\n custom_1: `fields.custom_1`,\r\n custom_2: `fields.custom_2`,\r\n custom_3: `fields.custom_3`,\r\n custom_4: `fields.custom_4`,\r\n custom_5: `fields.custom_5`,\r\n};\r\n\r\nexport function visibleFormFields(\r\n fields: readonly PublicBookingFormFieldDto[],\r\n): PublicBookingFormFieldDto[] {\r\n return [...fields].filter((f) => f.display).sort((a, b) => a.sortOrder - b.sortOrder);\r\n}\r\n\r\nexport function customerValueKey(fieldKey: string): keyof CustomerFieldValues | undefined {\r\n return FIELD_KEY_TO_VALUE[fieldKey];\r\n}\r\n\r\nexport function fieldLabelKey(fieldKey: string): TranslationKey | undefined {\r\n return FIELD_KEY_TO_LABEL[fieldKey];\r\n}\r\n\r\nexport function validateCustomerFields(\r\n fields: readonly PublicBookingFormFieldDto[],\r\n values: CustomerFieldValues,\r\n): Record<string, string> {\r\n const errors: Record<string, string> = {};\r\n for (const field of fields) {\r\n if (!field.display || !field.required) {\r\n continue;\r\n }\r\n const key = customerValueKey(field.fieldKey);\r\n if (!key) {\r\n continue;\r\n }\r\n const value = values[key];\r\n if (typeof value !== `string` || value.trim() === ``) {\r\n errors[field.fieldKey] = `required`;\r\n }\r\n }\r\n if (fields.some((f) => f.fieldKey === `email` && f.display) && values.email.trim()) {\r\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(values.email.trim())) {\r\n errors.email = `invalid`;\r\n }\r\n }\r\n return errors;\r\n}\r\n\r\nexport function customerValuesToAppointmentBody(values: CustomerFieldValues) {\r\n return {\r\n firstName: values.firstName.trim(),\r\n lastName: values.lastName.trim(),\r\n email: values.email.trim(),\r\n phone: values.phone.trim() || null,\r\n address: values.address.trim() || null,\r\n city: values.city.trim() || null,\r\n state: values.state.trim() || null,\r\n zip: values.zip.trim() || null,\r\n notes: values.notes.trim() || null,\r\n customField1: values.customField1.trim() || null,\r\n customField2: values.customField2.trim() || null,\r\n customField3: values.customField3.trim() || null,\r\n customField4: values.customField4.trim() || null,\r\n customField5: values.customField5.trim() || null,\r\n customerTimezone: values.timezone || null,\r\n };\r\n}\r\n\r\nexport function needsLegalStep(legal: {\r\n displayCookieNotice: boolean;\r\n displayTerms: boolean;\r\n displayPrivacy: boolean;\r\n}): boolean {\r\n return legal.displayCookieNotice || legal.displayTerms || legal.displayPrivacy;\r\n}\r\n","import type { AppointmentDto, PublicTenantConfigResponse, TimeSlotDto } from \"@ea/api-contracts\";\r\nimport { useMemo, useReducer } from \"react\";\r\n\r\nimport { ANY_PROVIDER_ID } from \"../constants\";\r\nimport { needsLegalStep } from \"../utils/fields\";\r\nimport type { CustomerFieldValues } from \"../utils/fields\";\r\nimport type { TimeDisplayMode } from \"../utils/booking-timezone\";\r\nimport { useBookingContext } from \"../context\";\r\n\r\nexport type { TimeDisplayMode } from \"../utils/booking-timezone\";\r\nexport type ProviderSelection = string | typeof ANY_PROVIDER_ID;\r\n\r\nexport type BookingConsents = {\r\n readonly cookie?: boolean | undefined;\r\n readonly terms?: boolean | undefined;\r\n readonly privacy?: boolean | undefined;\r\n};\r\n\r\nexport type BookingStepState =\r\n | { readonly step: `service` }\r\n | { readonly step: `provider`; readonly serviceId: string }\r\n | {\r\n readonly step: `date`;\r\n readonly serviceId: string;\r\n readonly providerId: ProviderSelection;\r\n }\r\n | {\r\n readonly step: `time`;\r\n readonly serviceId: string;\r\n readonly providerId: ProviderSelection;\r\n readonly date: string;\r\n }\r\n | {\r\n readonly step: `customer`;\r\n readonly serviceId: string;\r\n readonly providerId: ProviderSelection;\r\n readonly date: string;\r\n readonly slot: TimeSlotDto;\r\n }\r\n | {\r\n readonly step: `legal`;\r\n readonly serviceId: string;\r\n readonly providerId: ProviderSelection;\r\n readonly date: string;\r\n readonly slot: TimeSlotDto;\r\n readonly customer: CustomerFieldValues;\r\n }\r\n | {\r\n readonly step: `confirm`;\r\n readonly serviceId: string;\r\n readonly providerId: ProviderSelection;\r\n readonly date: string;\r\n readonly slot: TimeSlotDto;\r\n readonly customer: CustomerFieldValues;\r\n readonly consents: BookingConsents;\r\n }\r\n | { readonly step: `booked`; readonly appointment: AppointmentDto };\r\n\r\nexport type BookingState = {\r\n readonly timeDisplayMode: TimeDisplayMode;\r\n} & BookingStepState;\r\n\r\nexport type BookingAction =\r\n | { readonly type: `select_service`; readonly serviceId: string }\r\n | { readonly type: `select_provider`; readonly providerId: ProviderSelection }\r\n | { readonly type: `select_date`; readonly date: string }\r\n | { readonly type: `select_slot`; readonly slot: TimeSlotDto }\r\n | { readonly type: `set_customer`; readonly customer: CustomerFieldValues }\r\n | { readonly type: `set_consents`; readonly consents: BookingConsents }\r\n | { readonly type: `set_time_display_mode`; readonly mode: TimeDisplayMode }\r\n | { readonly type: `booked`; readonly appointment: AppointmentDto }\r\n | { readonly type: `back` }\r\n | {\r\n readonly type: `prefill`;\r\n readonly serviceId?: string | undefined;\r\n readonly providerId?: string | undefined;\r\n };\r\n\r\nconst DEFAULT_TIME_DISPLAY_MODE: TimeDisplayMode = `business`;\r\n\r\nfunction withStep(\r\n timeDisplayMode: TimeDisplayMode,\r\n step: BookingStepState,\r\n): BookingState {\r\n return { timeDisplayMode, ...step };\r\n}\r\n\r\nfunction retainMode(state: BookingState, step: BookingStepState): BookingState {\r\n return withStep(state.timeDisplayMode, step);\r\n}\r\n\r\nexport function createInitialBookingState(\r\n prefill?: {\r\n readonly serviceId?: string | undefined;\r\n readonly providerId?: string | undefined;\r\n },\r\n): BookingState {\r\n if (prefill?.serviceId && prefill.providerId) {\r\n return withStep(DEFAULT_TIME_DISPLAY_MODE, {\r\n step: `date`,\r\n serviceId: prefill.serviceId,\r\n providerId: prefill.providerId,\r\n });\r\n }\r\n if (prefill?.serviceId) {\r\n return withStep(DEFAULT_TIME_DISPLAY_MODE, { step: `provider`, serviceId: prefill.serviceId });\r\n }\r\n return withStep(DEFAULT_TIME_DISPLAY_MODE, { step: `service` });\r\n}\r\n\r\nexport function bookingReducer(\r\n state: BookingState,\r\n action: BookingAction,\r\n tenantConfig?: PublicTenantConfigResponse | null,\r\n): BookingState {\r\n switch (action.type) {\r\n case `prefill`: {\r\n return createInitialBookingState({\r\n serviceId: action.serviceId,\r\n providerId: action.providerId,\r\n });\r\n }\r\n case `set_time_display_mode`:\r\n return { ...state, timeDisplayMode: action.mode };\r\n case `select_service`:\r\n return retainMode(state, { step: `provider`, serviceId: action.serviceId });\r\n case `select_provider`:\r\n if (state.step !== `provider`) {\r\n return state;\r\n }\r\n return retainMode(state, {\r\n step: `date`,\r\n serviceId: state.serviceId,\r\n providerId: action.providerId,\r\n });\r\n case `select_date`:\r\n if (state.step !== `date`) {\r\n return state;\r\n }\r\n return retainMode(state, {\r\n step: `time`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n date: action.date,\r\n });\r\n case `select_slot`:\r\n if (state.step !== `time`) {\r\n return state;\r\n }\r\n return retainMode(state, {\r\n step: `customer`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n date: state.date,\r\n slot: action.slot,\r\n });\r\n case `set_customer`:\r\n if (state.step !== `customer`) {\r\n return state;\r\n }\r\n if (tenantConfig && needsLegalStep(tenantConfig.legal)) {\r\n return retainMode(state, {\r\n step: `legal`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n date: state.date,\r\n slot: state.slot,\r\n customer: action.customer,\r\n });\r\n }\r\n return retainMode(state, {\r\n step: `confirm`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n date: state.date,\r\n slot: state.slot,\r\n customer: action.customer,\r\n consents: {},\r\n });\r\n case `set_consents`:\r\n if (state.step !== `legal`) {\r\n return state;\r\n }\r\n return retainMode(state, {\r\n step: `confirm`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n date: state.date,\r\n slot: state.slot,\r\n customer: state.customer,\r\n consents: action.consents,\r\n });\r\n case `booked`:\r\n return retainMode(state, { step: `booked`, appointment: action.appointment });\r\n case `back`:\r\n return backStep(state);\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction backStep(state: BookingState): BookingState {\r\n switch (state.step) {\r\n case `provider`:\r\n return retainMode(state, { step: `service` });\r\n case `date`:\r\n return retainMode(state, { step: `provider`, serviceId: state.serviceId });\r\n case `time`:\r\n return retainMode(state, {\r\n step: `date`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n });\r\n case `customer`:\r\n return retainMode(state, {\r\n step: `time`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n date: state.date,\r\n });\r\n case `legal`:\r\n return retainMode(state, {\r\n step: `customer`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n date: state.date,\r\n slot: state.slot,\r\n });\r\n case `confirm`:\r\n return retainMode(state, {\r\n step: `customer`,\r\n serviceId: state.serviceId,\r\n providerId: state.providerId,\r\n date: state.date,\r\n slot: state.slot,\r\n });\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport function useBookingReducer(\r\n initial: Parameters<typeof createInitialBookingState>[0],\r\n tenantConfig: PublicTenantConfigResponse | null,\r\n) {\r\n const [state, dispatch] = useReducer(\r\n (current: BookingState, action: BookingAction) =>\r\n bookingReducer(current, action, tenantConfig),\r\n undefined,\r\n () => createInitialBookingState(initial),\r\n );\r\n\r\n return useMemo(() => ({ state, dispatch }), [state, dispatch]);\r\n}\r\n\r\nexport function useBooking() {\r\n const { bookingState, dispatch, tenantConfig, onBooked } = useBookingContext();\r\n return {\r\n state: bookingState,\r\n dispatch,\r\n tenantConfig,\r\n onBooked,\r\n timeDisplayMode: bookingState.timeDisplayMode,\r\n };\r\n}\r\n","export const enCatalog = {\r\n steps: {\r\n service: `Choose a service`,\r\n provider: `Choose a provider`,\r\n date: `Choose a date`,\r\n time: `Choose a time`,\r\n customer: `Your details`,\r\n legal: `Legal information`,\r\n confirm: `Confirm your booking`,\r\n booked: `Booking confirmed`,\r\n },\r\n actions: {\r\n back: `Back`,\r\n continue: `Continue`,\r\n confirm: `Confirm booking`,\r\n submitting: `Booking…`,\r\n },\r\n service: {\r\n empty: `No services are available right now.`,\r\n durationMinutes: `{minutes} min`,\r\n price: `{amount}`,\r\n },\r\n provider: {\r\n empty: `No providers are available for this service.`,\r\n any: `Any available provider`,\r\n },\r\n date: {\r\n unavailable: `Unavailable`,\r\n minHint: `Earliest booking is tomorrow.`,\r\n },\r\n time: {\r\n empty: `No time slots are available on this date.`,\r\n timezone: `All times in {timezone}`,\r\n timezoneHint: `Times shown in {timezone}`,\r\n mismatchBanner: `This business uses {businessTimezone}. You are in {customerTimezone}.`,\r\n showMyTime: `Show in my time`,\r\n showBusinessTime: `Show business time`,\r\n yourTimeLabel: `Your time ({timezone})`,\r\n businessTimeLabel: `Business time ({timezone})`,\r\n },\r\n customer: {\r\n required: `Required`,\r\n invalidEmail: `Enter a valid email address.`,\r\n },\r\n legal: {\r\n cookie: `Cookie notice`,\r\n terms: `Terms & conditions`,\r\n privacy: `Privacy policy`,\r\n acceptCookie: `I accept the cookie notice`,\r\n acceptTerms: `I accept the terms & conditions`,\r\n acceptPrivacy: `I accept the privacy policy`,\r\n readMore: `Read`,\r\n },\r\n confirm: {\r\n summary: `Review your appointment`,\r\n service: `Service`,\r\n provider: `Provider`,\r\n when: `When`,\r\n customer: `Customer`,\r\n error: `We could not complete your booking. Please try again.`,\r\n conflict: `That time slot is no longer available. Please choose another time.`,\r\n },\r\n booked: {\r\n reference: `Reference`,\r\n message: `Your appointment has been booked.`,\r\n },\r\n disabled: {\r\n title: `Booking unavailable`,\r\n },\r\n fields: {\r\n first_name: `First name`,\r\n last_name: `Last name`,\r\n email: `Email`,\r\n phone: `Phone`,\r\n address: `Address`,\r\n city: `City`,\r\n state: `State / province`,\r\n zip: `Postal code`,\r\n notes: `Notes`,\r\n custom_1: `Additional information`,\r\n custom_2: `Additional information (2)`,\r\n custom_3: `Additional information (3)`,\r\n custom_4: `Additional information (4)`,\r\n custom_5: `Additional information (5)`,\r\n },\r\n} as const;\r\n\r\nexport type MessageKey = keyof typeof enCatalog;\r\n","import { enCatalog } from \"./en\";\r\n\r\ntype Catalog = typeof enCatalog;\r\ntype NestedKeyOf<T, Prefix extends string = \"\"> = T extends string\r\n ? Prefix extends \"\"\r\n ? never\r\n : Prefix\r\n : {\r\n [K in keyof T & string]: NestedKeyOf<T[K], Prefix extends \"\" ? K : `${Prefix}.${K}`>;\r\n }[keyof T & string];\r\n\r\nexport type TranslationKey = NestedKeyOf<Catalog>;\r\n\r\ntype Params = Record<string, string | number>;\r\n\r\nfunction getNestedValue(obj: unknown, path: string): string | undefined {\r\n const parts = path.split(`.`);\r\n let current: unknown = obj;\r\n for (const part of parts) {\r\n if (current === null || typeof current !== `object` || !(part in current)) {\r\n return undefined;\r\n }\r\n current = (current as Record<string, unknown>)[part];\r\n }\r\n return typeof current === `string` ? current : undefined;\r\n}\r\n\r\nfunction interpolate(template: string, params?: Params): string {\r\n if (!params) {\r\n return template;\r\n }\r\n return template.replace(/\\{(\\w+)\\}/g, (_, key: string) => {\r\n const value = params[key];\r\n return value === undefined ? `{${key}}` : String(value);\r\n });\r\n}\r\n\r\nexport function createTranslator(\r\n locale: string | undefined,\r\n tenantDefaultLanguage: string | undefined,\r\n): (key: TranslationKey, params?: Params) => string {\r\n void locale;\r\n void tenantDefaultLanguage;\r\n return (key, params) => {\r\n const template = getNestedValue(enCatalog, key);\r\n if (!template) {\r\n return key;\r\n }\r\n return interpolate(template, params);\r\n };\r\n}\r\n","const MUTATION_METHODS = new Set([`POST`, `PUT`, `PATCH`, `DELETE`]);\r\n\r\nconst SKIP_PREFIXES = [`/v1/public/`, `/v1/platform/`];\r\n\r\nconst SKIP_EXACT = new Set([`/v1/account`, `/v1/account/switch-tenant`]);\r\n\r\n/** Matches API middleware (`apps/api/src/middleware/idempotency.ts`). */\r\nexport function mutationRequiresIdempotencyKey(method: string, path: string): boolean {\r\n const normalizedMethod = method.toUpperCase();\r\n if (!MUTATION_METHODS.has(normalizedMethod)) return false;\r\n if (SKIP_EXACT.has(path)) return false;\r\n for (const prefix of SKIP_PREFIXES) {\r\n if (path.startsWith(prefix)) return false;\r\n }\r\n return true;\r\n}\r\n\r\n/** Client-generated UUID v4 for `Idempotency-Key` (required on protected mutations). */\r\nexport function createIdempotencyKey(): string {\r\n return crypto.randomUUID();\r\n}\r\n\r\n/** Headers to merge into a mutation request when the API requires an idempotency key. */\r\nexport function idempotencyHeaders(\r\n method: string,\r\n path: string,\r\n): Record<string, string> {\r\n if (!mutationRequiresIdempotencyKey(method, path)) {\r\n return {};\r\n }\r\n return { \"Idempotency-Key\": createIdempotencyKey() };\r\n}\r\n\r\n/** Idempotency-Key on any HTTP mutation (e.g. public booking); API may skip validation per path. */\r\nexport function clientMutationIdempotencyHeaders(method: string): Record<string, string> {\r\n const normalizedMethod = method.toUpperCase();\r\n if (!MUTATION_METHODS.has(normalizedMethod)) {\r\n return {};\r\n }\r\n return { \"Idempotency-Key\": createIdempotencyKey() };\r\n}\r\n","import { clientMutationIdempotencyHeaders } from \"@ea/api-contracts\";\r\n\r\nimport type {\r\n AppointmentDto,\r\n CreatePublicAppointmentBody,\r\n PublicProviderDto,\r\n PublicServiceDto,\r\n PublicTenantConfigResponse,\r\n TimeSlotDto,\r\n} from \"@ea/api-contracts\";\r\nimport {\r\n ListAvailabilitiesResponseSchema,\r\n ListPublicProvidersResponseSchema,\r\n ListPublicServicesResponseSchema,\r\n ListUnavailableDatesResponseSchema,\r\n} from \"@ea/api-contracts\";\r\nimport type { z } from \"zod\";\r\n\r\ntype ListAvailabilitiesResponse = z.infer<typeof ListAvailabilitiesResponseSchema>;\r\ntype ListPublicProvidersResponse = z.infer<typeof ListPublicProvidersResponseSchema>;\r\ntype ListPublicServicesResponse = z.infer<typeof ListPublicServicesResponseSchema>;\r\ntype ListUnavailableDatesResponse = z.infer<typeof ListUnavailableDatesResponseSchema>;\r\n\r\nconst DEFAULT_API_URL = `https://api.easyappts.com`;\r\n\r\nexport interface BookingClientOptions {\r\n readonly publishableKey: string;\r\n readonly apiUrl?: string | undefined;\r\n readonly origin?: string | undefined;\r\n}\r\n\r\nexport class BookingApiError extends Error {\r\n constructor(\r\n readonly status: number,\r\n readonly code: string,\r\n message: string,\r\n ) {\r\n super(message);\r\n this.name = `BookingApiError`;\r\n }\r\n}\r\n\r\nexport class BookingClient {\r\n private readonly baseUrl: string;\r\n private readonly publishableKey: string;\r\n private readonly origin: string | undefined;\r\n\r\n constructor(opts: BookingClientOptions) {\r\n if (!opts.publishableKey.startsWith(`pk_`)) {\r\n throw new Error(`BookingClient requires a publishable key (pk_*).`);\r\n }\r\n this.publishableKey = opts.publishableKey;\r\n this.baseUrl = (opts.apiUrl ?? DEFAULT_API_URL).replace(/\\/$/, ``);\r\n this.origin = opts.origin;\r\n }\r\n\r\n async getTenantConfig(): Promise<PublicTenantConfigResponse> {\r\n return this.getJson<PublicTenantConfigResponse>(`/v1/public/tenant-config`);\r\n }\r\n\r\n async listServices(): Promise<PublicServiceDto[]> {\r\n const body = await this.getJson<ListPublicServicesResponse>(`/v1/public/services`);\r\n return body.data;\r\n }\r\n\r\n async listProviders(params?: {\r\n serviceId?: string | undefined;\r\n }): Promise<PublicProviderDto[]> {\r\n const query = params?.serviceId ? `?serviceId=${encodeURIComponent(params.serviceId)}` : ``;\r\n const body = await this.getJson<ListPublicProvidersResponse>(\r\n `/v1/public/providers${query}`,\r\n );\r\n return body.data;\r\n }\r\n\r\n async getAvailability(params: {\r\n providerId: string;\r\n serviceId: string;\r\n date: string;\r\n }): Promise<TimeSlotDto[]> {\r\n const query = new URLSearchParams({\r\n providerId: params.providerId,\r\n serviceId: params.serviceId,\r\n date: params.date,\r\n });\r\n const body = await this.getJson<ListAvailabilitiesResponse>(\r\n `/v1/public/availabilities?${query.toString()}`,\r\n );\r\n return body.data;\r\n }\r\n\r\n async getUnavailableDates(params: {\r\n providerId: string;\r\n serviceId: string;\r\n month: string;\r\n }): Promise<string[]> {\r\n const query = new URLSearchParams({\r\n providerId: params.providerId,\r\n serviceId: params.serviceId,\r\n month: params.month,\r\n });\r\n const body = await this.getJson<ListUnavailableDatesResponse>(\r\n `/v1/public/unavailable-dates?${query.toString()}`,\r\n );\r\n return body.data;\r\n }\r\n\r\n async createAppointment(body: CreatePublicAppointmentBody): Promise<AppointmentDto> {\r\n return this.postJson<AppointmentDto>(`/v1/public/appointments`, body);\r\n }\r\n\r\n private headers(): HeadersInit {\r\n const headers: Record<string, string> = {\r\n Authorization: `Bearer ${this.publishableKey}`,\r\n Accept: `application/json`,\r\n };\r\n if (this.origin) {\r\n headers.Origin = this.origin;\r\n }\r\n return headers;\r\n }\r\n\r\n private async getJson<T>(path: string): Promise<T> {\r\n const res = await fetch(`${this.baseUrl}${path}`, { headers: this.headers() });\r\n return this.parseJson<T>(res);\r\n }\r\n\r\n private async postJson<T>(path: string, body: unknown): Promise<T> {\r\n const res = await fetch(`${this.baseUrl}${path}`, {\r\n method: `POST`,\r\n headers: {\r\n ...this.headers(),\r\n \"Content-Type\": `application/json`,\r\n ...clientMutationIdempotencyHeaders(`POST`),\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n return this.parseJson<T>(res);\r\n }\r\n\r\n private async parseJson<T>(res: Response): Promise<T> {\r\n const payload: unknown = await res.json().catch(() => null);\r\n if (!res.ok) {\r\n const err =\r\n payload !== null &&\r\n typeof payload === `object` &&\r\n `error` in payload &&\r\n payload.error !== null &&\r\n typeof payload.error === `object`\r\n ? payload.error\r\n : null;\r\n const code =\r\n err !== null && `code` in err && typeof err.code === `string` ? err.code : `unknown`;\r\n const message =\r\n err !== null && `message` in err && typeof err.message === `string`\r\n ? err.message\r\n : res.statusText;\r\n throw new BookingApiError(res.status, code, message);\r\n }\r\n return payload as T;\r\n }\r\n}\r\n","import { BookingClient, type BookingClientOptions } from \"./fetch-booking-client\";\r\n\r\n/**\r\n * Factory for the public booking API client.\r\n * Uses the local fetch implementation until `@ea/booking-sdk` exports `BookingClient`.\r\n */\r\nexport function createBookingClient(opts: BookingClientOptions): BookingClient {\r\n return new BookingClient(opts);\r\n}\r\n\r\nexport { BookingApiError } from \"./fetch-booking-client\";\r\nexport type { BookingClient, BookingClientOptions } from \"./fetch-booking-client\";\r\nexport type { AppointmentDto } from \"@ea/api-contracts\";\r\n","import type { BookingTimeDisplayDto, PublicProviderDto } from \"@ea/api-contracts\";\r\n\r\nimport { ANY_PROVIDER_ID, type AnyProviderId } from \"../constants\";\r\nimport type { ProviderSelection } from \"../hooks/use-booking\";\r\n\r\nexport type BookingTimeDisplay = BookingTimeDisplayDto;\r\nexport type TimeDisplayMode = `business` | `customer`;\r\n\r\nexport function getCustomerTimezone(): string {\r\n if (typeof Intl === `undefined`) {\r\n return `UTC`;\r\n }\r\n return Intl.DateTimeFormat().resolvedOptions().timeZone || `UTC`;\r\n}\r\n\r\nexport function resolveBusinessTimezone(params: {\r\n readonly providerId: ProviderSelection;\r\n readonly providers: readonly PublicProviderDto[];\r\n readonly tenantDefaultTimezone: string;\r\n readonly anyProviderId?: AnyProviderId | undefined;\r\n}): string {\r\n const anyId = params.anyProviderId ?? ANY_PROVIDER_ID;\r\n if (params.providerId === anyId) {\r\n return params.tenantDefaultTimezone;\r\n }\r\n const provider = params.providers.find((p) => p.id === params.providerId);\r\n return provider?.timezone ?? params.tenantDefaultTimezone;\r\n}\r\n\r\nexport function allowsTimeDisplayToggle(\r\n bookingTimeDisplay: BookingTimeDisplay | undefined,\r\n): boolean {\r\n return bookingTimeDisplay === `customer`;\r\n}\r\n\r\nexport function resolveDisplayTimezone(params: {\r\n readonly businessTimezone: string;\r\n readonly customerTimezone: string;\r\n readonly bookingTimeDisplay?: BookingTimeDisplay | undefined;\r\n readonly timeDisplayMode?: TimeDisplayMode | undefined;\r\n}): string {\r\n const setting = params.bookingTimeDisplay ?? `business`;\r\n const mode = params.timeDisplayMode ?? `business`;\r\n\r\n if (setting === `business`) {\r\n return params.businessTimezone;\r\n }\r\n if (setting === `customer_only`) {\r\n return params.customerTimezone;\r\n }\r\n return mode === `customer` ? params.customerTimezone : params.businessTimezone;\r\n}\r\n\r\nexport function shouldShowSecondaryTimezone(params: {\r\n readonly zonesDiffer: boolean;\r\n readonly bookingTimeDisplay?: BookingTimeDisplay | undefined;\r\n}): boolean {\r\n if (!params.zonesDiffer) {\r\n return false;\r\n }\r\n const setting = params.bookingTimeDisplay ?? `business`;\r\n return setting === `customer` || setting === `customer_only`;\r\n}\r\n","import type { AppointmentDto } from \"@ea/api-contracts\";\r\nimport type { PublicTenantConfigResponse } from \"@ea/api-contracts\";\r\nimport { BotIdClient } from \"botid/client\";\r\nimport {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type CSSProperties,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nimport { BookingContext, type BookingTheme } from \"./context\";\r\nimport { useBookingReducer } from \"./hooks/use-booking\";\r\nimport { createTranslator } from \"./i18n/create-translator\";\r\nimport { createBookingClient } from \"./lib/create-booking-client\";\r\nimport { getCustomerTimezone, type TimeDisplayMode } from \"./utils/booking-timezone\";\r\n\r\nconst DEFAULT_API_URL = `https://api.easyappts.com`;\r\n\r\nexport type BookingProviderProps = {\r\n readonly publishableKey: string;\r\n readonly apiUrl?: string | undefined;\r\n readonly locale?: string | undefined;\r\n readonly theme?: BookingTheme | undefined;\r\n readonly onBooked?: ((appointment: AppointmentDto) => void) | undefined;\r\n readonly initialServiceId?: string | undefined;\r\n readonly initialProviderId?: string | undefined;\r\n readonly origin?: string | undefined;\r\n /** Extra class(es) on the widget root, for host layout/positioning. */\r\n readonly className?: string | undefined;\r\n /** Inline styles on the widget root (merged after theme vars, so they win). */\r\n readonly style?: CSSProperties | undefined;\r\n /**\r\n * Vercel BotID client-side protection on the booking POST. Defaults to `true`.\r\n * Set `false` on hosts not running the Vercel BotID proxy — the API's\r\n * server-side rate limiter is still the backstop.\r\n */\r\n readonly botProtection?: boolean | undefined;\r\n readonly children: ReactNode;\r\n};\r\n\r\n/** Map the tenant's free-form `business.theme` to a widget colour scheme. */\r\nfunction normalizeColorScheme(value: string | undefined): BookingTheme[\"colorScheme\"] {\r\n if (value === `dark` || value === `light` || value === `system`) {\r\n return value;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction readUrlPrefill(): {\r\n readonly serviceId?: string | undefined;\r\n readonly providerId?: string | undefined;\r\n} {\r\n if (typeof window === `undefined`) {\r\n return {};\r\n }\r\n const params = new URLSearchParams(window.location.search);\r\n const result: {\r\n serviceId?: string | undefined;\r\n providerId?: string | undefined;\r\n } = {};\r\n const serviceId = params.get(`service`);\r\n const providerId = params.get(`provider`);\r\n if (serviceId) {\r\n result.serviceId = serviceId;\r\n }\r\n if (providerId) {\r\n result.providerId = providerId;\r\n }\r\n return result;\r\n}\r\n\r\nexport function BookingProvider({\r\n publishableKey,\r\n apiUrl = DEFAULT_API_URL,\r\n locale,\r\n theme = {},\r\n onBooked,\r\n initialServiceId,\r\n initialProviderId,\r\n origin,\r\n className,\r\n style,\r\n botProtection = true,\r\n children,\r\n}: BookingProviderProps) {\r\n const resolvedApiUrl = apiUrl.replace(/\\/$/, ``);\r\n const client = useMemo(\r\n () => createBookingClient({ publishableKey, apiUrl: resolvedApiUrl, origin }),\r\n [publishableKey, resolvedApiUrl, origin],\r\n );\r\n\r\n const [tenantConfig, setTenantConfig] = useState<PublicTenantConfigResponse | null>(null);\r\n const [tenantConfigLoading, setTenantConfigLoading] = useState(true);\r\n const [tenantConfigError, setTenantConfigError] = useState<string | null>(null);\r\n\r\n const prefill = useMemo(() => {\r\n const fromUrl = readUrlPrefill();\r\n return {\r\n serviceId: initialServiceId ?? fromUrl.serviceId,\r\n providerId: initialProviderId ?? fromUrl.providerId,\r\n };\r\n }, [initialProviderId, initialServiceId]);\r\n\r\n const { state: bookingState, dispatch } = useBookingReducer(prefill, tenantConfig);\r\n const customerTimezone = useMemo(() => getCustomerTimezone(), []);\r\n\r\n const setTimeDisplayMode = useCallback(\r\n (mode: TimeDisplayMode) => {\r\n dispatch({ type: `set_time_display_mode`, mode });\r\n },\r\n [dispatch],\r\n );\r\n\r\n useEffect(() => {\r\n if (prefill.serviceId || prefill.providerId) {\r\n dispatch({\r\n type: `prefill`,\r\n serviceId: prefill.serviceId,\r\n providerId: prefill.providerId,\r\n });\r\n }\r\n }, [dispatch, prefill.providerId, prefill.serviceId]);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n setTenantConfigLoading(true);\r\n setTenantConfigError(null);\r\n void client\r\n .getTenantConfig()\r\n .then((config) => {\r\n if (!cancelled) {\r\n setTenantConfig(config);\r\n }\r\n })\r\n .catch((err: unknown) => {\r\n if (!cancelled) {\r\n setTenantConfigError(err instanceof Error ? err.message : `Failed to load settings`);\r\n }\r\n })\r\n .finally(() => {\r\n if (!cancelled) {\r\n setTenantConfigLoading(false);\r\n }\r\n });\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [client]);\r\n\r\n const resolvedLocale = locale ?? tenantConfig?.localization.defaultLanguage ?? `en`;\r\n const t = useMemo(\r\n () => createTranslator(resolvedLocale, tenantConfig?.localization.defaultLanguage),\r\n [resolvedLocale, tenantConfig?.localization.defaultLanguage],\r\n );\r\n\r\n // Only emit the variables the caller explicitly set; everything left unset\r\n // falls through to the host's CSS token, then the default (see styles.css).\r\n // Tenant config brand is injected as `--ea-brand-fallback` so the CSS chain\r\n // can place it *below* any host token but above the built-in default.\r\n const cssVars = useMemo(() => {\r\n const vars: Record<string, string> = {};\r\n if (tenantConfig?.business.brandColor) {\r\n vars[`--ea-brand-fallback`] = tenantConfig.business.brandColor;\r\n }\r\n if (theme.brandColor) vars[`--ea-brand`] = theme.brandColor;\r\n if (theme.onBrandColor) vars[`--ea-on-brand`] = theme.onBrandColor;\r\n if (theme.textColor) vars[`--ea-text`] = theme.textColor;\r\n if (theme.mutedColor) vars[`--ea-muted`] = theme.mutedColor;\r\n if (theme.borderColor) vars[`--ea-border`] = theme.borderColor;\r\n if (theme.surfaceColor) vars[`--ea-surface`] = theme.surfaceColor;\r\n if (theme.errorColor) vars[`--ea-error`] = theme.errorColor;\r\n if (theme.borderRadius) vars[`--ea-radius`] = theme.borderRadius;\r\n if (theme.fontFamily) vars[`--ea-font`] = theme.fontFamily;\r\n if (theme.maxWidth) vars[`--ea-max-width`] = theme.maxWidth;\r\n return vars;\r\n }, [\r\n tenantConfig?.business.brandColor,\r\n theme.brandColor,\r\n theme.onBrandColor,\r\n theme.textColor,\r\n theme.mutedColor,\r\n theme.borderColor,\r\n theme.surfaceColor,\r\n theme.errorColor,\r\n theme.borderRadius,\r\n theme.fontFamily,\r\n theme.maxWidth,\r\n ]);\r\n\r\n const colorScheme = theme.colorScheme ?? normalizeColorScheme(tenantConfig?.business.theme);\r\n\r\n const rootStyle = useMemo(\r\n () => ({ ...cssVars, ...style }) as CSSProperties,\r\n [cssVars, style],\r\n );\r\n\r\n const rootClassName = className ? `ea-booking-widget ${className}` : `ea-booking-widget`;\r\n\r\n const value = useMemo(\r\n () => ({\r\n client,\r\n apiUrl: resolvedApiUrl,\r\n tenantConfig,\r\n tenantConfigLoading,\r\n tenantConfigError,\r\n locale: resolvedLocale,\r\n theme,\r\n t,\r\n bookingState,\r\n dispatch,\r\n customerTimezone,\r\n timeDisplayMode: bookingState.timeDisplayMode,\r\n setTimeDisplayMode,\r\n onBooked,\r\n }),\r\n [\r\n bookingState,\r\n client,\r\n customerTimezone,\r\n dispatch,\r\n onBooked,\r\n setTimeDisplayMode,\r\n resolvedApiUrl,\r\n resolvedLocale,\r\n t,\r\n tenantConfig,\r\n tenantConfigError,\r\n tenantConfigLoading,\r\n theme,\r\n ],\r\n );\r\n\r\n return (\r\n <BookingContext.Provider value={value}>\r\n {botProtection ? (\r\n <BotIdClient protect={[{ path: `/v1/public/appointments`, method: `POST` }]} />\r\n ) : null}\r\n <div className={rootClassName} data-theme={colorScheme} style={rootStyle}>\r\n {children}\r\n </div>\r\n </BookingContext.Provider>\r\n );\r\n}\r\n","import { useBookingContext } from \"../context\";\r\n\r\nexport function useTenantConfig() {\r\n const { tenantConfig, tenantConfigLoading, tenantConfigError } = useBookingContext();\r\n return { tenantConfig, loading: tenantConfigLoading, error: tenantConfigError };\r\n}\r\n","import type { PublicProviderDto } from \"@ea/api-contracts\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\n\r\nimport { useBookingContext } from \"../context\";\r\n\r\nexport function useProviders(serviceId: string | undefined) {\r\n const { client } = useBookingContext();\r\n const [data, setData] = useState<PublicProviderDto[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const reload = useCallback(async () => {\r\n if (!serviceId) {\r\n setData([]);\r\n return;\r\n }\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const providers = await client.listProviders({ serviceId });\r\n setData(providers);\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : `Failed to load providers`);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [client, serviceId]);\r\n\r\n useEffect(() => {\r\n void reload();\r\n }, [reload]);\r\n\r\n return { providers: data, loading, error, reload };\r\n}\r\n","import { useMemo } from \"react\";\r\n\r\nimport { useBookingContext } from \"../context\";\r\nimport { useTenantConfig } from \"./use-tenant-config\";\r\nimport { useProviders } from \"./use-providers\";\r\nimport type { ProviderSelection } from \"./use-booking\";\r\nimport {\r\n resolveBusinessTimezone,\r\n resolveDisplayTimezone,\r\n shouldShowSecondaryTimezone,\r\n} from \"../utils/booking-timezone\";\r\n\r\nexport function useBookingTimezones(\r\n providerId: ProviderSelection | undefined,\r\n serviceId: string | undefined,\r\n) {\r\n const { customerTimezone, bookingState } = useBookingContext();\r\n const { tenantConfig } = useTenantConfig();\r\n const { providers } = useProviders(serviceId);\r\n\r\n const bookingTimeDisplay = tenantConfig?.booking.bookingTimeDisplay;\r\n\r\n const businessTimezone = useMemo(() => {\r\n if (!tenantConfig) {\r\n return `UTC`;\r\n }\r\n if (providerId === undefined) {\r\n return tenantConfig.localization.defaultTimezone;\r\n }\r\n return resolveBusinessTimezone({\r\n providerId,\r\n providers,\r\n tenantDefaultTimezone: tenantConfig.localization.defaultTimezone,\r\n });\r\n }, [providerId, providers, tenantConfig]);\r\n\r\n const displayTimezone = useMemo(\r\n () =>\r\n resolveDisplayTimezone({\r\n businessTimezone,\r\n customerTimezone,\r\n bookingTimeDisplay,\r\n timeDisplayMode: bookingState.timeDisplayMode,\r\n }),\r\n [\r\n bookingState.timeDisplayMode,\r\n bookingTimeDisplay,\r\n businessTimezone,\r\n customerTimezone,\r\n ],\r\n );\r\n\r\n const zonesDiffer = customerTimezone !== businessTimezone;\r\n const secondaryTimezone = useMemo(() => {\r\n if (\r\n !shouldShowSecondaryTimezone({\r\n zonesDiffer,\r\n bookingTimeDisplay,\r\n })\r\n ) {\r\n return null;\r\n }\r\n return displayTimezone === businessTimezone ? customerTimezone : businessTimezone;\r\n }, [bookingTimeDisplay, businessTimezone, customerTimezone, displayTimezone, zonesDiffer]);\r\n\r\n return {\r\n businessTimezone,\r\n customerTimezone,\r\n displayTimezone,\r\n secondaryTimezone,\r\n zonesDiffer,\r\n bookingTimeDisplay,\r\n timeDisplayMode: bookingState.timeDisplayMode,\r\n };\r\n}\r\n","import { Temporal } from \"@js-temporal/polyfill\";\r\n\r\nexport function todayInZone(timeZone: string): Temporal.PlainDate {\r\n return Temporal.Now.zonedDateTimeISO(timeZone).toPlainDate();\r\n}\r\n\r\nexport function minBookableFromToday(today: Temporal.PlainDate): Temporal.PlainDate {\r\n return today.add({ days: 1 });\r\n}\r\n\r\nexport function minBookableDate(timeZone: string): Temporal.PlainDate {\r\n return minBookableFromToday(todayInZone(timeZone));\r\n}\r\n\r\nexport function maxBookableFromToday(\r\n today: Temporal.PlainDate,\r\n futureBookingLimitDays: number,\r\n): Temporal.PlainDate {\r\n return today.add({ days: futureBookingLimitDays });\r\n}\r\n\r\nexport function maxBookableDate(\r\n futureBookingLimitDays: number,\r\n timeZone: string,\r\n): Temporal.PlainDate {\r\n return maxBookableFromToday(todayInZone(timeZone), futureBookingLimitDays);\r\n}\r\n\r\nexport function formatCalendarDate(date: Temporal.PlainDate): string {\r\n return date.toString();\r\n}\r\n\r\nexport function parseCalendarDate(value: string): Temporal.PlainDate {\r\n return Temporal.PlainDate.from(value);\r\n}\r\n\r\nexport function addDays(date: Temporal.PlainDate, days: number): Temporal.PlainDate {\r\n return date.add({ days });\r\n}\r\n\r\nexport function startOfMonth(date: Temporal.PlainDate): Temporal.PlainDate {\r\n return date.with({ day: 1 });\r\n}\r\n\r\nexport function formatMonthKey(date: Temporal.PlainDate): string {\r\n const y = date.year;\r\n const m = String(date.month).padStart(2, `0`);\r\n return `${y}-${m}`;\r\n}\r\n\r\nexport function buildMonthDays(\r\n month: Temporal.PlainDate,\r\n firstWeekday: `sunday` | `monday` | `saturday`,\r\n): (Temporal.PlainDate | null)[] {\r\n const start = startOfMonth(month);\r\n const jsDay = start.dayOfWeek % 7;\r\n const offset =\r\n firstWeekday === `monday`\r\n ? (jsDay + 6) % 7\r\n : firstWeekday === `saturday`\r\n ? (jsDay + 1) % 7\r\n : jsDay;\r\n const cells: (Temporal.PlainDate | null)[] = Array.from({ length: offset }, () => null);\r\n let cursor = start;\r\n while (cursor.month === start.month) {\r\n cells.push(cursor);\r\n cursor = cursor.add({ days: 1 });\r\n }\r\n while (cells.length % 7 !== 0) {\r\n cells.push(null);\r\n }\r\n return cells;\r\n}\r\n\r\nexport function isSameCalendarDate(a: string, b: string): boolean {\r\n return a === b;\r\n}\r\n\r\nexport function isDateInRange(\r\n value: string,\r\n min: string,\r\n max: string,\r\n): boolean {\r\n return value >= min && value <= max;\r\n}\r\n\r\nexport function formatSlotTime(iso: string, locale: string, timeZone: string): string {\r\n return new Intl.DateTimeFormat(locale, {\r\n hour: `numeric`,\r\n minute: `2-digit`,\r\n timeZone,\r\n }).format(new Date(iso));\r\n}\r\n\r\nexport function formatSlotDate(iso: string, locale: string, timeZone: string): string {\r\n return new Intl.DateTimeFormat(locale, {\r\n weekday: `long`,\r\n year: `numeric`,\r\n month: `long`,\r\n day: `numeric`,\r\n timeZone,\r\n }).format(new Date(iso));\r\n}\r\n\r\nexport function formatSlotDateTimeDual(\r\n iso: string,\r\n locale: string,\r\n primaryTz: string,\r\n secondaryTz: string | null,\r\n): string {\r\n const primary = `${formatSlotDate(iso, locale, primaryTz)} ${formatSlotTime(iso, locale, primaryTz)}`;\r\n if (!secondaryTz || secondaryTz === primaryTz) {\r\n return primary;\r\n }\r\n return `${primary} (${formatSlotTime(iso, locale, secondaryTz)})`;\r\n}\r\n","import { useBookingContext } from \"../context\";\r\nimport { formatSlotDate, formatSlotTime } from \"../utils/dates\";\r\n\r\nexport function SlotTimeDisplay({\r\n iso,\r\n displayTimezone,\r\n secondaryTimezone,\r\n customerTimezone,\r\n variant = `time`,\r\n}: {\r\n readonly iso: string;\r\n readonly displayTimezone: string;\r\n readonly secondaryTimezone: string | null;\r\n readonly customerTimezone: string;\r\n readonly variant?: `time` | `datetime`;\r\n}) {\r\n const { locale, t } = useBookingContext();\r\n\r\n const primary =\r\n variant === `datetime`\r\n ? `${formatSlotDate(iso, locale, displayTimezone)} ${formatSlotTime(iso, locale, displayTimezone)}`\r\n : formatSlotTime(iso, locale, displayTimezone);\r\n\r\n if (!secondaryTimezone) {\r\n return <span>{primary}</span>;\r\n }\r\n\r\n const secondaryLabel =\r\n secondaryTimezone === customerTimezone\r\n ? t(`time.yourTimeLabel`, { timezone: secondaryTimezone })\r\n : t(`time.businessTimeLabel`, { timezone: secondaryTimezone });\r\n\r\n return (\r\n <span className=\"ea-slot-time-display\">\r\n <span>{primary}</span>\r\n <span className=\"ea-time-secondary\">\r\n {secondaryLabel}: {formatSlotTime(iso, locale, secondaryTimezone)}\r\n </span>\r\n </span>\r\n );\r\n}\r\n","import { useBookingContext } from \"../context\";\r\nimport {\r\n allowsTimeDisplayToggle,\r\n type BookingTimeDisplay,\r\n type TimeDisplayMode,\r\n} from \"../utils/booking-timezone\";\r\n\r\nexport function TimezoneMismatchBanner({\r\n businessTimezone,\r\n customerTimezone,\r\n timeDisplayMode,\r\n bookingTimeDisplay,\r\n}: {\r\n readonly businessTimezone: string;\r\n readonly customerTimezone: string;\r\n readonly timeDisplayMode: TimeDisplayMode;\r\n readonly bookingTimeDisplay?: BookingTimeDisplay | undefined;\r\n}) {\r\n const { t, setTimeDisplayMode } = useBookingContext();\r\n\r\n if (customerTimezone === businessTimezone) {\r\n return null;\r\n }\r\n\r\n const showToggle = allowsTimeDisplayToggle(bookingTimeDisplay);\r\n const nextMode: TimeDisplayMode = timeDisplayMode === `business` ? `customer` : `business`;\r\n\r\n return (\r\n <div className=\"ea-timezone-banner\" role=\"note\">\r\n <p className=\"ea-timezone-banner-text\">\r\n {t(`time.mismatchBanner`, { businessTimezone, customerTimezone })}\r\n </p>\r\n {showToggle ? (\r\n <button\r\n type=\"button\"\r\n className=\"ea-time-toggle ea-link\"\r\n onClick={() => setTimeDisplayMode(nextMode)}\r\n >\r\n {timeDisplayMode === `business` ? t(`time.showMyTime`) : t(`time.showBusinessTime`)}\r\n </button>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactNode } from \"react\";\r\n\r\nexport function StepTitle({\r\n children,\r\n id,\r\n}: {\r\n readonly children: ReactNode;\r\n readonly id?: string | undefined;\r\n}) {\r\n return (\r\n <h2 id={id} className=\"ea-step-title\">\r\n {children}\r\n </h2>\r\n );\r\n}\r\n\r\nexport function StepActions({ children }: { readonly children: ReactNode }) {\r\n return <div className=\"ea-step-actions\">{children}</div>;\r\n}\r\n\r\nexport function Button({\r\n variant = `primary`,\r\n ...props\r\n}: ButtonHTMLAttributes<HTMLButtonElement> & {\r\n readonly variant?: `primary` | `secondary`;\r\n}) {\r\n return (\r\n <button\r\n type=\"button\"\r\n className={variant === `primary` ? `ea-btn ea-btn-primary` : `ea-btn ea-btn-secondary`}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport function Field({\r\n label,\r\n error,\r\n children,\r\n}: {\r\n readonly label: string;\r\n readonly error?: string | undefined;\r\n readonly children: ReactNode;\r\n}) {\r\n return (\r\n <label className=\"ea-field\">\r\n <span className=\"ea-field-label\">{label}</span>\r\n {children}\r\n {error ? <span className=\"ea-field-error\">{error}</span> : null}\r\n </label>\r\n );\r\n}\r\n\r\nexport function TextInput(props: InputHTMLAttributes<HTMLInputElement>) {\r\n return <input className=\"ea-input\" {...props} />;\r\n}\r\n\r\nexport function TextArea(props: React.TextareaHTMLAttributes<HTMLTextAreaElement>) {\r\n return <textarea className=\"ea-input ea-textarea\" {...props} />;\r\n}\r\n\r\nexport function LoadingState({ label }: { readonly label: string }) {\r\n return <p className=\"ea-muted\">{label}</p>;\r\n}\r\n\r\nexport function ErrorState({ message }: { readonly message: string }) {\r\n return <p className=\"ea-error\" role=\"alert\">{message}</p>;\r\n}\r\n","import { useBookingContext } from \"../context\";\r\nimport { useBooking } from \"../hooks/use-booking\";\r\nimport { useBookingTimezones } from \"../hooks/use-booking-timezones\";\r\nimport { SlotTimeDisplay } from \"./SlotTimeDisplay\";\r\nimport { TimezoneMismatchBanner } from \"./TimezoneMismatchBanner\";\r\nimport { StepTitle } from \"./ui-primitives\";\r\n\r\nexport function BookedSummary() {\r\n const { t } = useBookingContext();\r\n const { state } = useBooking();\r\n\r\n const appointment = state.step === `booked` ? state.appointment : undefined;\r\n const {\r\n businessTimezone,\r\n customerTimezone,\r\n displayTimezone,\r\n secondaryTimezone,\r\n timeDisplayMode,\r\n bookingTimeDisplay,\r\n } = useBookingTimezones(appointment?.providerId, appointment?.serviceId);\r\n\r\n if (state.step !== `booked`) {\r\n return null;\r\n }\r\n\r\n return (\r\n <section className=\"ea-step ea-booked\" aria-labelledby=\"ea-step-booked\">\r\n <StepTitle id=\"ea-step-booked\">{t(`steps.booked`)}</StepTitle>\r\n <p>{t(`booked.message`)}</p>\r\n <p className=\"ea-booked-ref\">\r\n {t(`booked.reference`)}: <strong>{state.appointment.hash}</strong>\r\n </p>\r\n <TimezoneMismatchBanner\r\n businessTimezone={businessTimezone}\r\n customerTimezone={customerTimezone}\r\n timeDisplayMode={timeDisplayMode}\r\n bookingTimeDisplay={bookingTimeDisplay}\r\n />\r\n <p className=\"ea-muted\">\r\n <SlotTimeDisplay\r\n iso={state.appointment.startAt}\r\n displayTimezone={displayTimezone}\r\n secondaryTimezone={secondaryTimezone}\r\n customerTimezone={customerTimezone}\r\n variant={`datetime`}\r\n />\r\n </p>\r\n </section>\r\n );\r\n}\r\n","import type { PublicServiceDto } from \"@ea/api-contracts\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\n\r\nimport { useBookingContext } from \"../context\";\r\n\r\nexport function useServices() {\r\n const { client } = useBookingContext();\r\n const [data, setData] = useState<PublicServiceDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const reload = useCallback(async () => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const services = await client.listServices();\r\n setData(services);\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : `Failed to load services`);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [client]);\r\n\r\n useEffect(() => {\r\n void reload();\r\n }, [reload]);\r\n\r\n return { services: data, loading, error, reload };\r\n}\r\n","import { useState } from \"react\";\r\n\r\nimport { ANY_PROVIDER_ID } from \"../constants\";\r\nimport { useBookingContext } from \"../context\";\r\nimport { useBooking } from \"../hooks/use-booking\";\r\nimport { useBookingTimezones } from \"../hooks/use-booking-timezones\";\r\nimport { useProviders } from \"../hooks/use-providers\";\r\nimport { useServices } from \"../hooks/use-services\";\r\nimport { useTenantConfig } from \"../hooks/use-tenant-config\";\r\nimport type { BookingClient } from \"../lib/create-booking-client\";\r\nimport { BookingApiError } from \"../lib/fetch-booking-client\";\r\nimport { customerValuesToAppointmentBody } from \"../utils/fields\";\r\nimport { SlotTimeDisplay } from \"./SlotTimeDisplay\";\r\nimport { TimezoneMismatchBanner } from \"./TimezoneMismatchBanner\";\r\nimport { Button, ErrorState, StepTitle } from \"./ui-primitives\";\r\n\r\nasync function resolveProviderForAny(\r\n client: BookingClient,\r\n providerIds: readonly string[],\r\n serviceId: string,\r\n date: string,\r\n startAt: string,\r\n): Promise<string | null> {\r\n for (const providerId of providerIds) {\r\n const slots = await client.getAvailability({ providerId, serviceId, date });\r\n if (slots.some((slot) => slot.startAt === startAt)) {\r\n return providerId;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function ConfirmStep() {\r\n const { t, dispatch, client, onBooked } = useBookingContext();\r\n const { state } = useBooking();\r\n const { tenantConfig } = useTenantConfig();\r\n const { services } = useServices();\r\n const serviceId = state.step === `confirm` ? state.serviceId : undefined;\r\n const { providers } = useProviders(serviceId);\r\n const providerId = state.step === `confirm` ? state.providerId : undefined;\r\n const {\r\n businessTimezone,\r\n customerTimezone,\r\n displayTimezone,\r\n secondaryTimezone,\r\n timeDisplayMode,\r\n bookingTimeDisplay,\r\n } = useBookingTimezones(providerId, serviceId);\r\n const [submitting, setSubmitting] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n if (state.step !== `confirm` || !tenantConfig) {\r\n return null;\r\n }\r\n\r\n const confirm = state;\r\n const service = services.find((s) => s.id === confirm.serviceId);\r\n const provider =\r\n confirm.providerId === ANY_PROVIDER_ID\r\n ? null\r\n : providers.find((p) => p.id === confirm.providerId);\r\n\r\n async function handleConfirm() {\r\n setSubmitting(true);\r\n setError(null);\r\n try {\r\n let providerId: string;\r\n if (confirm.providerId === ANY_PROVIDER_ID) {\r\n const eligible = providers\r\n .filter((p) => service?.providerIds.includes(p.id) ?? true)\r\n .map((p) => p.id);\r\n const resolved = await resolveProviderForAny(\r\n client,\r\n eligible,\r\n confirm.serviceId,\r\n confirm.date,\r\n confirm.slot.startAt,\r\n );\r\n if (!resolved) {\r\n setError(t(`confirm.conflict`));\r\n return;\r\n }\r\n providerId = resolved;\r\n } else {\r\n providerId = confirm.providerId;\r\n }\r\n\r\n const appointment = await client.createAppointment({\r\n providerId,\r\n serviceId: confirm.serviceId,\r\n startAt: confirm.slot.startAt,\r\n ...customerValuesToAppointmentBody(confirm.customer),\r\n consents: confirm.consents,\r\n });\r\n\r\n dispatch({ type: `booked`, appointment });\r\n onBooked?.(appointment);\r\n } catch (err) {\r\n if (err instanceof BookingApiError && err.status === 409) {\r\n setError(t(`confirm.conflict`));\r\n } else {\r\n setError(t(`confirm.error`));\r\n }\r\n } finally {\r\n setSubmitting(false);\r\n }\r\n }\r\n\r\n return (\r\n <section className=\"ea-step\" aria-labelledby=\"ea-step-confirm\">\r\n <StepTitle id=\"ea-step-confirm\">{t(`steps.confirm`)}</StepTitle>\r\n <p className=\"ea-muted\">{t(`confirm.summary`)}</p>\r\n <TimezoneMismatchBanner\r\n businessTimezone={businessTimezone}\r\n customerTimezone={customerTimezone}\r\n timeDisplayMode={timeDisplayMode}\r\n bookingTimeDisplay={bookingTimeDisplay}\r\n />\r\n <dl className=\"ea-summary\">\r\n <div>\r\n <dt>{t(`confirm.service`)}</dt>\r\n <dd>{service?.name ?? confirm.serviceId}</dd>\r\n </div>\r\n <div>\r\n <dt>{t(`confirm.provider`)}</dt>\r\n <dd>\r\n {confirm.providerId === ANY_PROVIDER_ID\r\n ? t(`provider.any`)\r\n : (provider?.displayName ?? confirm.providerId)}\r\n </dd>\r\n </div>\r\n <div>\r\n <dt>{t(`confirm.when`)}</dt>\r\n <dd>\r\n <SlotTimeDisplay\r\n iso={confirm.slot.startAt}\r\n displayTimezone={displayTimezone}\r\n secondaryTimezone={secondaryTimezone}\r\n customerTimezone={customerTimezone}\r\n variant={`datetime`}\r\n />\r\n </dd>\r\n </div>\r\n <div>\r\n <dt>{t(`confirm.customer`)}</dt>\r\n <dd>\r\n {confirm.customer.firstName} {confirm.customer.lastName} — {confirm.customer.email}\r\n </dd>\r\n </div>\r\n </dl>\r\n {error ? <ErrorState message={error} /> : null}\r\n <div className=\"ea-step-actions\">\r\n <Button variant=\"secondary\" onClick={() => dispatch({ type: `back` })} disabled={submitting}>\r\n {t(`actions.back`)}\r\n </Button>\r\n <Button onClick={() => void handleConfirm()} disabled={submitting}>\r\n {submitting ? t(`actions.submitting`) : t(`actions.confirm`)}\r\n </Button>\r\n </div>\r\n </section>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\n\r\nimport { useBookingContext } from \"../context\";\r\nimport { useBooking } from \"../hooks/use-booking\";\r\nimport { useTenantConfig } from \"../hooks/use-tenant-config\";\r\nimport {\r\n customerValueKey,\r\n emptyCustomerValues,\r\n fieldLabelKey,\r\n validateCustomerFields,\r\n visibleFormFields,\r\n type CustomerFieldValues,\r\n} from \"../utils/fields\";\r\nimport { Button, Field, StepTitle, TextArea, TextInput } from \"./ui-primitives\";\r\n\r\nexport function CustomerForm() {\r\n const { t, dispatch } = useBookingContext();\r\n const { state } = useBooking();\r\n const { tenantConfig } = useTenantConfig();\r\n const [values, setValues] = useState<CustomerFieldValues>(emptyCustomerValues);\r\n const [errors, setErrors] = useState<Record<string, string>>({});\r\n\r\n if (state.step !== `customer` || !tenantConfig) {\r\n return null;\r\n }\r\n\r\n const fields = visibleFormFields(tenantConfig.formFields);\r\n\r\n function setField(fieldKey: string, value: string) {\r\n const key = customerValueKey(fieldKey);\r\n if (!key) {\r\n return;\r\n }\r\n setValues((current) => ({ ...current, [key]: value }));\r\n }\r\n\r\n function handleSubmit() {\r\n const nextErrors = validateCustomerFields(tenantConfig!.formFields, values);\r\n setErrors(nextErrors);\r\n if (Object.keys(nextErrors).length > 0) {\r\n return;\r\n }\r\n dispatch({ type: `set_customer`, customer: values });\r\n }\r\n\r\n return (\r\n <section className=\"ea-step\" aria-labelledby=\"ea-step-customer\">\r\n <StepTitle id=\"ea-step-customer\">{t(`steps.customer`)}</StepTitle>\r\n <form\r\n className=\"ea-form\"\r\n onSubmit={(event) => {\r\n event.preventDefault();\r\n handleSubmit();\r\n }}\r\n >\r\n {fields.map((field) => {\r\n const valueKey = customerValueKey(field.fieldKey);\r\n if (!valueKey) {\r\n return null;\r\n }\r\n const label =\r\n field.label ??\r\n (fieldLabelKey(field.fieldKey) ? t(fieldLabelKey(field.fieldKey)!) : field.fieldKey);\r\n const value = values[valueKey];\r\n const error = errors[field.fieldKey];\r\n const isNotes = field.fieldKey === `notes`;\r\n return (\r\n <Field\r\n key={field.fieldKey}\r\n label={`${label}${field.required ? ` *` : ``}`}\r\n error={\r\n error === `required`\r\n ? t(`customer.required`)\r\n : error === `invalid`\r\n ? t(`customer.invalidEmail`)\r\n : undefined\r\n }\r\n >\r\n {isNotes ? (\r\n <TextArea\r\n value={value}\r\n onChange={(e) => setField(field.fieldKey, e.target.value)}\r\n rows={3}\r\n />\r\n ) : (\r\n <TextInput\r\n type={field.fieldKey === `email` ? `email` : `text`}\r\n value={value}\r\n onChange={(e) => setField(field.fieldKey, e.target.value)}\r\n autoComplete={field.fieldKey === `email` ? `email` : undefined}\r\n />\r\n )}\r\n </Field>\r\n );\r\n })}\r\n <div className=\"ea-step-actions\">\r\n <Button variant=\"secondary\" type=\"button\" onClick={() => dispatch({ type: `back` })}>\r\n {t(`actions.back`)}\r\n </Button>\r\n <Button type=\"submit\">{t(`actions.continue`)}</Button>\r\n </div>\r\n </form>\r\n </section>\r\n );\r\n}\r\n","import { useCallback, useEffect, useState } from \"react\";\r\n\r\nimport { ANY_PROVIDER_ID } from \"../constants\";\r\nimport { useBookingContext } from \"../context\";\r\nimport type { ProviderSelection } from \"./use-booking\";\r\n\r\nexport function useUnavailableDates(params: {\r\n providerId: ProviderSelection | undefined;\r\n serviceId: string | undefined;\r\n month: string | undefined;\r\n providerIdsForAny?: readonly string[] | undefined;\r\n}) {\r\n const { client } = useBookingContext();\r\n const [dates, setDates] = useState<string[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const reload = useCallback(async () => {\r\n if (!params.serviceId || !params.month) {\r\n setDates([]);\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const providerIds =\r\n params.providerId === ANY_PROVIDER_ID\r\n ? (params.providerIdsForAny ?? [])\r\n : params.providerId\r\n ? [params.providerId]\r\n : [];\r\n\r\n if (providerIds.length === 0) {\r\n setDates([]);\r\n return;\r\n }\r\n\r\n const lists = await Promise.all(\r\n providerIds.map((providerId) =>\r\n client.getUnavailableDates({\r\n providerId,\r\n serviceId: params.serviceId!,\r\n month: params.month!,\r\n }),\r\n ),\r\n );\r\n\r\n const merged = new Set<string>();\r\n for (const list of lists) {\r\n for (const date of list) {\r\n merged.add(date);\r\n }\r\n }\r\n setDates([...merged]);\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : `Failed to load unavailable dates`);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [client, params.month, params.providerId, params.providerIdsForAny, params.serviceId]);\r\n\r\n useEffect(() => {\r\n void reload();\r\n }, [reload]);\r\n\r\n return { unavailableDates: dates, loading, error, reload };\r\n}\r\n","import { useMemo, useState } from \"react\";\r\n\r\nimport { useBookingContext } from \"../context\";\r\nimport { useBooking } from \"../hooks/use-booking\";\r\nimport { useProviders } from \"../hooks/use-providers\";\r\nimport { useTenantConfig } from \"../hooks/use-tenant-config\";\r\nimport { useUnavailableDates } from \"../hooks/use-unavailable-dates\";\r\nimport { useBookingTimezones } from \"../hooks/use-booking-timezones\";\r\nimport { TimezoneMismatchBanner } from \"./TimezoneMismatchBanner\";\r\nimport {\r\n buildMonthDays,\r\n formatCalendarDate,\r\n formatMonthKey,\r\n isDateInRange,\r\n maxBookableDate,\r\n minBookableDate,\r\n startOfMonth,\r\n} from \"../utils/dates\";\r\nimport { Button, ErrorState, LoadingState, StepTitle } from \"./ui-primitives\";\r\n\r\nexport function DatePicker() {\r\n const { t, dispatch } = useBookingContext();\r\n const { state } = useBooking();\r\n const { tenantConfig } = useTenantConfig();\r\n const [viewMonth, setViewMonth] = useState(() => startOfMonth(minBookableDate(`UTC`)));\r\n\r\n const serviceId = state.step === `date` ? state.serviceId : undefined;\r\n const providerId = state.step === `date` ? state.providerId : undefined;\r\n const { providers } = useProviders(serviceId);\r\n const providerIdsForAny = useMemo(\r\n () => providers.map((p) => p.id),\r\n [providers],\r\n );\r\n\r\n const { businessTimezone, customerTimezone, timeDisplayMode, bookingTimeDisplay } =\r\n useBookingTimezones(providerId, serviceId);\r\n\r\n const month = formatMonthKey(viewMonth);\r\n const { unavailableDates, loading, error } = useUnavailableDates({\r\n serviceId,\r\n providerId,\r\n month,\r\n providerIdsForAny,\r\n });\r\n\r\n if (state.step !== `date` || !tenantConfig) {\r\n return null;\r\n }\r\n\r\n const minDate = formatCalendarDate(minBookableDate(businessTimezone));\r\n const maxDate = formatCalendarDate(\r\n maxBookableDate(tenantConfig.booking.futureBookingLimitDays, businessTimezone),\r\n );\r\n const unavailable = new Set(unavailableDates);\r\n\r\n const days = buildMonthDays(viewMonth, tenantConfig.localization.firstWeekday);\r\n\r\n return (\r\n <section className=\"ea-step\" aria-labelledby=\"ea-step-date\">\r\n <StepTitle id=\"ea-step-date\">{t(`steps.date`)}</StepTitle>\r\n <TimezoneMismatchBanner\r\n businessTimezone={businessTimezone}\r\n customerTimezone={customerTimezone}\r\n timeDisplayMode={timeDisplayMode}\r\n bookingTimeDisplay={bookingTimeDisplay}\r\n />\r\n <p className=\"ea-muted\">{t(`date.minHint`)}</p>\r\n <div className=\"ea-calendar-nav\">\r\n <Button\r\n variant=\"secondary\"\r\n onClick={() => setViewMonth((m) => startOfMonth(m.subtract({ months: 1 })))}\r\n aria-label=\"Previous month\"\r\n >\r\n ‹\r\n </Button>\r\n <span className=\"ea-calendar-month\">{month}</span>\r\n <Button\r\n variant=\"secondary\"\r\n onClick={() => setViewMonth((m) => startOfMonth(m.add({ months: 1 })))}\r\n aria-label=\"Next month\"\r\n >\r\n ›\r\n </Button>\r\n </div>\r\n {loading ? <LoadingState label=\"…\" /> : null}\r\n {error ? <ErrorState message={error} /> : null}\r\n <div className=\"ea-calendar-grid\" role=\"grid\">\r\n {days.map((day, index) => {\r\n if (!day) {\r\n return <span key={`pad-${index}`} className=\"ea-calendar-pad\" />;\r\n }\r\n const value = formatCalendarDate(day);\r\n const inRange = isDateInRange(value, minDate, maxDate);\r\n const isUnavailable = unavailable.has(value) || !inRange;\r\n return (\r\n <button\r\n key={value}\r\n type=\"button\"\r\n className={\r\n isUnavailable ? `ea-calendar-day ea-calendar-day-disabled` : `ea-calendar-day`\r\n }\r\n disabled={isUnavailable}\r\n onClick={() => dispatch({ type: `select_date`, date: value })}\r\n aria-label={value}\r\n >\r\n {day.day}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n <Button variant=\"secondary\" onClick={() => dispatch({ type: `back` })}>\r\n {t(`actions.back`)}\r\n </Button>\r\n </section>\r\n );\r\n}\r\n","import { useBookingContext } from \"../context\";\r\nimport { useTenantConfig } from \"../hooks/use-tenant-config\";\r\nimport { StepTitle } from \"./ui-primitives\";\r\n\r\nexport function DisabledBooking() {\r\n const { t } = useBookingContext();\r\n const { tenantConfig } = useTenantConfig();\r\n\r\n if (!tenantConfig?.booking.disableBooking) {\r\n return null;\r\n }\r\n\r\n return (\r\n <section className=\"ea-step ea-disabled\" aria-labelledby=\"ea-disabled-title\">\r\n <StepTitle id=\"ea-disabled-title\">{t(`disabled.title`)}</StepTitle>\r\n <p>{tenantConfig.booking.disableBookingMessage ?? t(`disabled.title`)}</p>\r\n </section>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\n\r\nimport { useBookingContext } from \"../context\";\r\nimport { useBooking, type BookingConsents } from \"../hooks/use-booking\";\r\nimport { useTenantConfig } from \"../hooks/use-tenant-config\";\r\nimport { Button, Field, StepTitle } from \"./ui-primitives\";\r\n\r\nexport function LegalGate() {\r\n const { t, dispatch } = useBookingContext();\r\n const { state } = useBooking();\r\n const { tenantConfig } = useTenantConfig();\r\n const [consents, setConsents] = useState<BookingConsents>({});\r\n const [activeModal, setActiveModal] = useState<`cookie` | `terms` | `privacy` | null>(null);\r\n\r\n if (state.step !== `legal` || !tenantConfig) {\r\n return null;\r\n }\r\n\r\n const { legal } = tenantConfig;\r\n\r\n function toggle(key: keyof BookingConsents) {\r\n setConsents((current) => ({ ...current, [key]: !current[key] }));\r\n }\r\n\r\n function handleContinue() {\r\n dispatch({ type: `set_consents`, consents });\r\n }\r\n\r\n const modalContent =\r\n activeModal === `cookie`\r\n ? legal.cookieNoticeContent\r\n : activeModal === `terms`\r\n ? legal.termsContent\r\n : activeModal === `privacy`\r\n ? legal.privacyContent\r\n : null;\r\n\r\n return (\r\n <section className=\"ea-step\" aria-labelledby=\"ea-step-legal\">\r\n <StepTitle id=\"ea-step-legal\">{t(`steps.legal`)}</StepTitle>\r\n <div className=\"ea-legal-list\">\r\n {legal.displayCookieNotice ? (\r\n <Field label=\"\">\r\n <label className=\"ea-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n checked={consents.cookie === true}\r\n onChange={() => toggle(`cookie`)}\r\n />\r\n <span>{t(`legal.acceptCookie`)}</span>\r\n </label>\r\n {legal.cookieNoticeContent ? (\r\n <button type=\"button\" className=\"ea-link\" onClick={() => setActiveModal(`cookie`)}>\r\n {t(`legal.readMore`)}\r\n </button>\r\n ) : null}\r\n </Field>\r\n ) : null}\r\n {legal.displayTerms ? (\r\n <Field label=\"\">\r\n <label className=\"ea-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n checked={consents.terms === true}\r\n onChange={() => toggle(`terms`)}\r\n />\r\n <span>{t(`legal.acceptTerms`)}</span>\r\n </label>\r\n {legal.termsContent ? (\r\n <button type=\"button\" className=\"ea-link\" onClick={() => setActiveModal(`terms`)}>\r\n {t(`legal.readMore`)}\r\n </button>\r\n ) : null}\r\n </Field>\r\n ) : null}\r\n {legal.displayPrivacy ? (\r\n <Field label=\"\">\r\n <label className=\"ea-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n checked={consents.privacy === true}\r\n onChange={() => toggle(`privacy`)}\r\n />\r\n <span>{t(`legal.acceptPrivacy`)}</span>\r\n </label>\r\n {legal.privacyContent ? (\r\n <button type=\"button\" className=\"ea-link\" onClick={() => setActiveModal(`privacy`)}>\r\n {t(`legal.readMore`)}\r\n </button>\r\n ) : null}\r\n </Field>\r\n ) : null}\r\n </div>\r\n {activeModal && modalContent ? (\r\n <dialog open className=\"ea-modal\">\r\n <div className=\"ea-modal-body\">{modalContent}</div>\r\n <Button variant=\"secondary\" onClick={() => setActiveModal(null)}>\r\n {t(`actions.back`)}\r\n </Button>\r\n </dialog>\r\n ) : null}\r\n <div className=\"ea-step-actions\">\r\n <Button variant=\"secondary\" onClick={() => dispatch({ type: `back` })}>\r\n {t(`actions.back`)}\r\n </Button>\r\n <Button onClick={handleContinue}>{t(`actions.continue`)}</Button>\r\n </div>\r\n </section>\r\n );\r\n}\r\n","import { ANY_PROVIDER_ID } from \"../constants\";\r\nimport { useBookingContext } from \"../context\";\r\nimport { useBooking } from \"../hooks/use-booking\";\r\nimport { useProviders } from \"../hooks/use-providers\";\r\nimport { useTenantConfig } from \"../hooks/use-tenant-config\";\r\nimport { Button, ErrorState, LoadingState, StepTitle } from \"./ui-primitives\";\r\n\r\nexport function ProviderPicker() {\r\n const { t, dispatch } = useBookingContext();\r\n const { state } = useBooking();\r\n const { tenantConfig } = useTenantConfig();\r\n const serviceId = state.step === `provider` ? state.serviceId : undefined;\r\n const { providers, loading, error } = useProviders(serviceId);\r\n\r\n if (state.step !== `provider`) {\r\n return null;\r\n }\r\n\r\n const showAny = tenantConfig?.booking.displayAnyProvider ?? false;\r\n\r\n return (\r\n <section className=\"ea-step\" aria-labelledby=\"ea-step-provider\">\r\n <StepTitle id=\"ea-step-provider\">{t(`steps.provider`)}</StepTitle>\r\n {loading ? <LoadingState label=\"…\" /> : null}\r\n {error ? <ErrorState message={error} /> : null}\r\n <ul className=\"ea-card-list\">\r\n {showAny ? (\r\n <li>\r\n <button\r\n type=\"button\"\r\n className=\"ea-card\"\r\n onClick={() =>\r\n dispatch({ type: `select_provider`, providerId: ANY_PROVIDER_ID })\r\n }\r\n >\r\n <span className=\"ea-card-title\">{t(`provider.any`)}</span>\r\n </button>\r\n </li>\r\n ) : null}\r\n {providers.map((provider) => (\r\n <li key={provider.id}>\r\n <button\r\n type=\"button\"\r\n className=\"ea-card\"\r\n onClick={() =>\r\n dispatch({ type: `select_provider`, providerId: provider.id })\r\n }\r\n >\r\n <span className=\"ea-card-title\">{provider.displayName}</span>\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n {!loading && providers.length === 0 && !showAny ? (\r\n <p className=\"ea-muted\">{t(`provider.empty`)}</p>\r\n ) : null}\r\n <Button variant=\"secondary\" onClick={() => dispatch({ type: `back` })}>\r\n {t(`actions.back`)}\r\n </Button>\r\n </section>\r\n );\r\n}\r\n","import { useBooking } from \"../hooks/use-booking\";\r\nimport { useServices } from \"../hooks/use-services\";\r\nimport { useBookingContext } from \"../context\";\r\nimport { Button, ErrorState, LoadingState, StepTitle } from \"./ui-primitives\";\r\n\r\nexport function ServicePicker() {\r\n const { t, dispatch } = useBookingContext();\r\n const { state } = useBooking();\r\n const { services, loading, error } = useServices();\r\n\r\n if (state.step !== `service`) {\r\n return null;\r\n }\r\n\r\n return (\r\n <section className=\"ea-step\" aria-labelledby=\"ea-step-service\">\r\n <StepTitle id=\"ea-step-service\">{t(`steps.service`)}</StepTitle>\r\n {loading ? <LoadingState label=\"…\" /> : null}\r\n {error ? <ErrorState message={error} /> : null}\r\n {!loading && !error && services.length === 0 ? (\r\n <p className=\"ea-muted\">{t(`service.empty`)}</p>\r\n ) : null}\r\n <ul className=\"ea-card-list\">\r\n {services.map((service) => (\r\n <li key={service.id}>\r\n <button\r\n type=\"button\"\r\n className=\"ea-card\"\r\n onClick={() => dispatch({ type: `select_service`, serviceId: service.id })}\r\n >\r\n <span className=\"ea-card-title\">{service.name}</span>\r\n {service.description ? (\r\n <span className=\"ea-card-desc\">{service.description}</span>\r\n ) : null}\r\n <span className=\"ea-card-meta\">\r\n {t(`service.durationMinutes`, { minutes: service.durationMinutes })}\r\n </span>\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n <Button variant=\"secondary\" disabled>\r\n {t(`actions.back`)}\r\n </Button>\r\n </section>\r\n );\r\n}\r\n","import type { TimeSlotDto } from \"@ea/api-contracts\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\n\r\nimport { ANY_PROVIDER_ID } from \"../constants\";\r\nimport { useBookingContext } from \"../context\";\r\nimport type { ProviderSelection } from \"./use-booking\";\r\n\r\nexport function useAvailability(params: {\r\n providerId: ProviderSelection | undefined;\r\n serviceId: string | undefined;\r\n date: string | undefined;\r\n providerIdsForAny?: readonly string[] | undefined;\r\n}) {\r\n const { client } = useBookingContext();\r\n const [slots, setSlots] = useState<TimeSlotDto[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const reload = useCallback(async () => {\r\n if (!params.serviceId || !params.date) {\r\n setSlots([]);\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n if (params.providerId && params.providerId !== ANY_PROVIDER_ID) {\r\n const data = await client.getAvailability({\r\n providerId: params.providerId,\r\n serviceId: params.serviceId,\r\n date: params.date,\r\n });\r\n setSlots(data);\r\n return;\r\n }\r\n\r\n const ids = params.providerIdsForAny ?? [];\r\n if (ids.length === 0) {\r\n setSlots([]);\r\n return;\r\n }\r\n\r\n const results = await Promise.all(\r\n ids.map((providerId) =>\r\n client.getAvailability({\r\n providerId,\r\n serviceId: params.serviceId!,\r\n date: params.date!,\r\n }),\r\n ),\r\n );\r\n\r\n const merged = new Map<string, TimeSlotDto>();\r\n for (const list of results) {\r\n for (const slot of list) {\r\n merged.set(slot.startAt, slot);\r\n }\r\n }\r\n setSlots(\r\n [...merged.values()].sort((a, b) => a.startAt.localeCompare(b.startAt)),\r\n );\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : `Failed to load availability`);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [client, params.date, params.providerId, params.providerIdsForAny, params.serviceId]);\r\n\r\n useEffect(() => {\r\n void reload();\r\n }, [reload]);\r\n\r\n return { slots, loading, error, reload };\r\n}\r\n","import { useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useBookingContext } from \"../context\";\r\nimport { useAvailability } from \"../hooks/use-availability\";\r\nimport { useBooking } from \"../hooks/use-booking\";\r\nimport { useBookingTimezones } from \"../hooks/use-booking-timezones\";\r\nimport { useProviders } from \"../hooks/use-providers\";\r\nimport { SlotTimeDisplay } from \"./SlotTimeDisplay\";\r\nimport { TimezoneMismatchBanner } from \"./TimezoneMismatchBanner\";\r\nimport { Button, ErrorState, LoadingState, StepTitle } from \"./ui-primitives\";\r\n\r\nexport function TimeSlotPicker() {\r\n const { t, dispatch } = useBookingContext();\r\n const { state } = useBooking();\r\n const serviceId = state.step === `time` ? state.serviceId : undefined;\r\n const providerId = state.step === `time` ? state.providerId : undefined;\r\n const date = state.step === `time` ? state.date : undefined;\r\n const { providers } = useProviders(serviceId);\r\n const providerIdsForAny = useMemo(() => providers.map((p) => p.id), [providers]);\r\n const {\r\n businessTimezone,\r\n customerTimezone,\r\n displayTimezone,\r\n secondaryTimezone,\r\n timeDisplayMode,\r\n bookingTimeDisplay,\r\n } = useBookingTimezones(providerId, serviceId);\r\n const { slots, loading, error } = useAvailability({\r\n serviceId,\r\n providerId,\r\n date,\r\n providerIdsForAny,\r\n });\r\n const [selectedStartAt, setSelectedStartAt] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n if (slots.length > 0) {\r\n setSelectedStartAt(slots[0]!.startAt);\r\n } else {\r\n setSelectedStartAt(null);\r\n }\r\n }, [slots]);\r\n\r\n if (state.step !== `time`) {\r\n return null;\r\n }\r\n\r\n const selected = slots.find((s) => s.startAt === selectedStartAt) ?? null;\r\n\r\n return (\r\n <section className=\"ea-step\" aria-labelledby=\"ea-step-time\">\r\n <StepTitle id=\"ea-step-time\">{t(`steps.time`)}</StepTitle>\r\n <TimezoneMismatchBanner\r\n businessTimezone={businessTimezone}\r\n customerTimezone={customerTimezone}\r\n timeDisplayMode={timeDisplayMode}\r\n bookingTimeDisplay={bookingTimeDisplay}\r\n />\r\n <p className=\"ea-muted\">{t(`time.timezoneHint`, { timezone: displayTimezone })}</p>\r\n {loading ? <LoadingState label=\"…\" /> : null}\r\n {error ? <ErrorState message={error} /> : null}\r\n {!loading && slots.length === 0 ? <p className=\"ea-muted\">{t(`time.empty`)}</p> : null}\r\n <ul className=\"ea-slot-list\">\r\n {slots.map((slot) => (\r\n <li key={slot.startAt}>\r\n <button\r\n type=\"button\"\r\n className={\r\n slot.startAt === selectedStartAt\r\n ? `ea-slot ea-slot-selected`\r\n : `ea-slot`\r\n }\r\n onClick={() => setSelectedStartAt(slot.startAt)}\r\n >\r\n <SlotTimeDisplay\r\n iso={slot.startAt}\r\n displayTimezone={displayTimezone}\r\n secondaryTimezone={secondaryTimezone}\r\n customerTimezone={customerTimezone}\r\n />\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n <div className=\"ea-step-actions\">\r\n <Button variant=\"secondary\" onClick={() => dispatch({ type: `back` })}>\r\n {t(`actions.back`)}\r\n </Button>\r\n <Button\r\n disabled={!selected}\r\n onClick={() => selected && dispatch({ type: `select_slot`, slot: selected })}\r\n >\r\n {t(`actions.continue`)}\r\n </Button>\r\n </div>\r\n </section>\r\n );\r\n}\r\n","import { BookedSummary } from \"./BookedSummary\";\r\nimport { ConfirmStep } from \"./ConfirmStep\";\r\nimport { CustomerForm } from \"./CustomerForm\";\r\nimport { DatePicker } from \"./DatePicker\";\r\nimport { DisabledBooking } from \"./DisabledBooking\";\r\nimport { LegalGate } from \"./LegalGate\";\r\nimport { ProviderPicker } from \"./ProviderPicker\";\r\nimport { ServicePicker } from \"./ServicePicker\";\r\nimport { TimeSlotPicker } from \"./TimeSlotPicker\";\r\nimport { ErrorState, LoadingState } from \"./ui-primitives\";\r\nimport { useBookingContext } from \"../context\";\r\n\r\nexport function BookingWidget() {\r\n const { tenantConfig, tenantConfigLoading, tenantConfigError } = useBookingContext();\r\n\r\n if (tenantConfigLoading) {\r\n return (\r\n <div className=\"ea-booking-widget\">\r\n <LoadingState label=\"…\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (tenantConfigError) {\r\n return (\r\n <div className=\"ea-booking-widget\">\r\n <ErrorState message={tenantConfigError} />\r\n </div>\r\n );\r\n }\r\n\r\n if (tenantConfig?.booking.disableBooking) {\r\n return (\r\n <div className=\"ea-booking-widget\">\r\n <DisabledBooking />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"ea-booking-widget\">\r\n <div className=\"ea-booking-flow\">\r\n <ServicePicker />\r\n <ProviderPicker />\r\n <DatePicker />\r\n <TimeSlotPicker />\r\n <CustomerForm />\r\n <LegalGate />\r\n <ConfirmStep />\r\n <BookedSummary />\r\n </div>\r\n </div>\r\n );\r\n}\r\n"]}
|