azirid-react 0.11.3 → 0.13.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/index.ts","../src/utils/cn.ts","../src/client/index.ts","../src/i18n/es.ts","../src/i18n/en.ts","../src/i18n/index.ts","../src/styles/generated.ts","../src/utils/inject-styles.ts","../src/providers/mutations.ts","../src/providers/access-provider.tsx","../src/components/ui/button.tsx","../src/components/ui/card.tsx","../src/components/ui/field.tsx","../src/components/ui/input.tsx","../src/components/login-form.tsx","../src/components/signup-form.tsx","../src/hooks/use-password-reset.ts","../src/components/forgot-password-form.tsx","../src/components/reset-password-form.tsx","../src/components/auth-form.tsx","../src/hooks/use-referral.ts","../src/components/referral-card.tsx","../src/hooks/use-referral-stats.ts","../src/components/referral-stats.tsx","../../shared/src/utils/format-amount.ts","../src/hooks/use-plans.ts","../src/hooks/use-subscription.ts","../src/hooks/use-checkout.ts","../src/hooks/use-payment-providers.ts","../src/utils/payphone-loader.ts","../src/components/payphone-checkout.tsx","../src/components/payphone-modal.tsx","../src/components/pricing-feature-list.tsx","../src/components/pricing-card.tsx","../src/components/pricing-table.tsx","../src/components/checkout-button.tsx","../src/hooks/use-payphone-confirm.ts","../src/hooks/use-pay-button.tsx","../src/hooks/use-upload-transfer-proof.ts","../src/hooks/use-transfer-proof.ts","../src/components/pay-button-modal.tsx","../src/components/pay-button.tsx","../src/components/payphone-callback.tsx","../src/components/subscription-badge.tsx","../src/hooks/use-invoices.ts","../src/components/invoice-list.tsx","../src/hooks/use-login.ts","../src/hooks/use-signup.ts","../src/hooks/use-logout.ts","../src/hooks/use-session.ts","../src/hooks/use-magic-link.ts","../src/hooks/use-social-login.ts","../src/hooks/use-change-password.ts","../src/hooks/use-refresh.ts","../src/hooks/use-bootstrap.ts","../src/hooks/use-passkeys.ts","../src/hooks/use-payphone-checkout.ts","../src/hooks/use-transfer-payment.tsx","../src/hooks/use-branches.ts","../src/hooks/use-payment-methods.ts","../src/hooks/use-tenants.ts","../src/hooks/create-mutation-hook.ts","../src/hooks/use-form-state.ts","../src/hooks/use-password-toggle.ts","../src/index.ts"],"names":["z","twMerge","clsx","json","useQueryClient","useMutation","useCallback","createContext","useContext","QueryClient","useState","useMemo","useEffect","jsx","QueryClientProvider","cva","Slot","forwardRef","useForm","zodResolver","jsxs","Fragment","useQuery","styles","useRef","intervalLabels","PROVIDER_LABELS","PROVIDER_ICONS","error","TransferModal","statusColors","formatDate"],"mappings":";;;;;;;;;;;;;AAKO,SAAS,kBAAkB,CAAA,EAAiC;AACjE,EAAA,OAAOA,MAAE,MAAA,CAAO;AAAA,IACd,OAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,EAAE,aAAA,EAAe,CAAA,CAC1C,GAAA,CAAI,GAAG,CAAA,CAAE,aAAa,CAAA,CACtB,KAAA,CAAM,EAAE,YAAY,CAAA;AAAA,IACvB,QAAA,EAAUA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,gBAAA,EAAkB,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,gBAAgB;AAAA,GACrF,CAAA;AACH;AAEO,SAAS,mBAAmB,CAAA,EAAiC;AAClE,EAAA,OAAOA,MAAE,MAAA,CAAO;AAAA,IACd,OAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,EAAE,aAAA,EAAe,CAAA,CAC1C,GAAA,CAAI,GAAG,CAAA,CAAE,aAAa,CAAA,CACtB,KAAA,CAAM,EAAE,YAAY,CAAA;AAAA,IACvB,QAAA,EAAUA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,gBAAA,EAAkB,CAAA,CAAE,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,iBAAiB,CAAA;AAAA,IACtF,kBAAA,EAAoBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACxC,sBAAA,EAAwBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC7C,CAAA;AACH;AAGO,IAAM,WAAA,GAAcA,MAAE,MAAA,CAAO;AAAA,EAClC,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B,CAAA;AAAA,EACtC,QAAA,EAAUA,KAAA,CACP,MAAA,CAAO,EAAE,cAAA,EAAgB,iCAA8B,CAAA,CACvD,GAAA,CAAI,CAAA,EAAG,+BAA4B;AACxC,CAAC;AAKM,IAAM,YAAA,GAAeA,MAAE,MAAA,CAAO;AAAA,EACnC,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B,CAAA;AAAA,EACtC,QAAA,EAAUA,KAAA,CACP,MAAA,CAAO,EAAE,cAAA,EAAgB,iCAA8B,CAAA,CACvD,GAAA,CAAI,EAAA,EAAI,oDAAiD,CAAA;AAAA,EAC5D,kBAAA,EAAoBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,sBAAA,EAAwBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrC,CAAC;AAKM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,eAAA,EAAiBA,KAAA,CACd,MAAA,CAAO,EAAE,cAAA,EAAgB,wCAAqC,CAAA,CAC9D,GAAA,CAAI,CAAA,EAAG,sCAAmC,CAAA;AAAA,EAC7C,WAAA,EAAaA,KAAA,CACV,MAAA,CAAO,EAAE,cAAA,EAAgB,uCAAoC,CAAA,CAC7D,GAAA,CAAI,EAAA,EAAI,oDAAiD;AAC9D,CAAC;AAKM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B;AACxC,CAAC;AAIM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,yBAAyB,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,uBAAuB;AAC7F,CAAC;AAKM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,UAAUA,KAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAQ,CAAA,EAAG;AAAA,IACrC,cAAA,EAAgB;AAAA,GACjB,CAAA;AAAA,EACD,iBAAA,EAAmBA,KAAA,CAChB,MAAA,CAAO,EAAE,cAAA,EAAgB,mCAAmC,CAAA,CAC5D,GAAA,CAAI,CAAA,EAAG,iCAAiC,CAAA;AAAA,EAC3C,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B,CAAA;AAAA,EACtC,aAAA,EAAeA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,qBAAA,EAAuBA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC5C,cAAA,EAAgBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,kBAAA,EAAoBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,sBAAA,EAAwBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrC,CAAC;AAKM,SAAS,2BAA2B,CAAA,EAAiC;AAC1E,EAAA,OAAOA,MAAE,MAAA,CAAO;AAAA,IACd,OAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,EAAE,aAAA,EAAe,CAAA,CAC1C,GAAA,CAAI,GAAG,CAAA,CAAE,aAAa,CAAA,CACtB,KAAA,CAAM,EAAE,YAAY;AAAA,GACxB,CAAA;AACH;AAEO,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B;AACxC,CAAC;AAKM,SAAS,iCAAiC,CAAA,EAAiC;AAChF,EAAA,OAAOA,MACJ,MAAA,CAAO;AAAA,IACN,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,aAAA,EAAe,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,aAAa,CAAA;AAAA,IAC3E,WAAA,EAAaA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,mBAAA,EAAqB,CAAA,CAAE,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,iBAAiB,CAAA;AAAA,IAC5F,eAAA,EAAiBA,KAAA,CACd,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,uBAAA,EAAyB,CAAA,CACpD,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,uBAAuB;AAAA,GACpC,EACA,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,WAAA,KAAgB,KAAK,eAAA,EAAiB;AAAA,IAC3D,SAAS,CAAA,CAAE,iBAAA;AAAA,IACX,IAAA,EAAM,CAAC,iBAAiB;AAAA,GACzB,CAAA;AACL;AAEO,IAAM,0BAAA,GAA6BA,MACvC,MAAA,CAAO;AAAA,EACN,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,yBAAyB,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,uBAAuB,CAAA;AAAA,EAC3F,WAAA,EAAaA,KAAA,CACV,MAAA,CAAO,EAAE,cAAA,EAAgB,uCAAoC,CAAA,CAC7D,GAAA,CAAI,EAAA,EAAI,oDAAiD,CAAA;AAAA,EAC5D,eAAA,EAAiBA,KAAA,CACd,MAAA,CAAO,EAAE,cAAA,EAAgB,6BAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,2BAAwB;AACpC,CAAC,EACA,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,WAAA,KAAgB,KAAK,eAAA,EAAiB;AAAA,EAC3D,OAAA,EAAS,iCAAA;AAAA,EACT,IAAA,EAAM,CAAC,iBAAiB;AAC1B,CAAC;AAKI,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EACjD,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACzB,CAAC;AC9JM,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOC,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACEO,SAAS,YAAY,GAAA,EAAuB;AACjD,EAAA,OACE,GAAA,YAAe,KAAA,IACf,OAAQ,GAAA,CAAiB,MAAA,KAAW,aAClC,GAAA,CAAiB,MAAA,KAAW,GAAA,IAAQ,GAAA,CAAiB,MAAA,KAAW,GAAA,CAAA;AAEtE;AAGA,IAAM,QAAA,GAAW;AAAA,EACf,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,EAAA,EAAI,IAAA;AAAA,EACJ,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,mBAAA;AAAA,EACX,gBAAA,EAAkB,oBAAA;AAAA,EAClB,eAAA,EAAiB,mBAAA;AAAA,EACjB,WAAA,EAAa,cAAA;AAAA,EACb,cAAA,EAAgB,iBAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,iBAAA,EAAmB,sBAAA;AAAA,EACnB,kBAAA,EAAoB,uBAAA;AAAA,EACpB,oBAAA,EAAsB,yBAAA;AAAA,EACtB,qBAAA,EAAuB,0BAAA;AAAA,EACvB,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,mBAAA;AAAA,EACX,KAAA,EAAO,eAAA;AAAA,EACP,YAAA,EAAc,sBAAA;AAAA,EACd,QAAA,EAAU,kBAAA;AAAA,EACV,aAAA,EAAe,gBAAA;AAAA,EACf,QAAA,EAAU,kBAAA;AAAA,EACV,mBAAA,EAAqB,sBAAA;AAAA,EACrB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,cAAA,EAAgB,yBAAA;AAAA,EAChB,eAAA,EAAiB,0BAAA;AAAA,EACjB,oBAAA,EAAsB,wBAAA;AAAA,EACtB,oBAAA,EAAsB,wBAAA;AAAA,EACtB,UAAA,EAAY,cAAA;AAAA,EACZ,aAAA,EAAe,iBAAA;AAAA,EACf,WAAA,EAAa,SAAA;AAAA,EACb,QAAA,EAAU,UAAA;AAAA,EACV,cAAA,EAAgB;AAClB,CAAA;AAGO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,KAAA,EAAO,WAAA;AAAA;AAAA,EAEP,MAAA,EAAQ;AACV;AAGO,SAAS,WAAW,QAAA,EAA6B;AACtD,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACrC,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,OAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM,CAAC,GAAA,EAAK,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,MAAM,EAAE,CAAC;AAAA,GAC1E;AACF;AAGA,IAAM,KAAA,GAAQ,UAAA,CAAW,UAAA,CAAW,MAAM;AAoDnC,SAAS,kBAAA,CACd,QACA,UAAA,EACc;AACd,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAA;AAChD,EAAA,MAAM,QAAQ,MAAA,CAAO,QAAA,GAAW,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA,GAAI,KAAA;AAG9D,EAAA,MAAM,YAAA,GAAe,QAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,QAAA;AAEvB,EAAA,SAAS,MAAM,GAAA,EAA4B;AACzC,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,cAAA,KAAmB,WAAA,GAAc,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA,GAAI,IAAA;AAAA,IAC/E,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,SAAS,KAAA,CAAM,KAAa,KAAA,EAAsB;AAChD,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AAC3C,MAAA,IAAI,KAAA,EAAO,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AAAA,WACvC,cAAA,CAAe,WAAW,GAAG,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,GAA6B,IAAA;AACjC,EAAA,IAAI,YAAA,GAA8B,MAAM,YAAY,CAAA;AACpD,EAAA,IAAI,SAAA,GAA2B,MAAM,cAAc,CAAA;AAEnD,EAAA,IAAI,cAAA,GAAuC,IAAA;AAC3C,EAAA,IAAI,gBAAA,GAA4C,IAAA;AAUhD,EAAA,IAAI,OAAA,GAAmC,IAAA;AACvC,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,MAAA,OAAA,GAAU,IAAI,iBAAiB,aAAa,CAAA;AAC5C,MAAA,OAAA,CAAQ,SAAA,GAAY,CAAC,KAAA,KAAsC;AACzD,QAAA,IAAI,KAAA,CAAM,IAAA,EAAM,IAAA,KAAS,iBAAA,EAAmB;AAC1C,UAAA,WAAA,GAAc,MAAM,IAAA,CAAK,WAAA;AACzB,UAAA,IAAI,MAAM,IAAA,CAAK,YAAA,EAAc,eAAA,CAAgB,KAAA,CAAM,KAAK,YAAY,CAAA;AACpE,UAAA,IAAI,MAAM,IAAA,CAAK,SAAA,EAAW,YAAA,CAAa,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,QAC7D;AAAA,MACF,CAAA;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,SAAS,eAAA,GAAkB;AACzB,IAAA,IAAI;AACF,MAAA,OAAA,EAAS,WAAA,CAAY;AAAA,QACnB,IAAA,EAAM,iBAAA;AAAA,QACN,WAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACsB,CAAA;AAAA,IAC1B,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,SAAS,eAAe,KAAA,EAAsB;AAC5C,IAAA,WAAA,GAAc,KAAA;AAAA,EAChB;AAEA,EAAA,SAAS,cAAA,GAAiB;AACxB,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,SAAS,gBAAgB,KAAA,EAAsB;AAC7C,IAAA,YAAA,GAAe,KAAA;AACf,IAAA,KAAA,CAAM,cAAc,KAAK,CAAA;AAAA,EAC3B;AAEA,EAAA,SAAS,eAAA,GAAkB;AACzB,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,SAAS,aAAa,KAAA,EAAsB;AAC1C,IAAA,SAAA,GAAY,KAAA;AACZ,IAAA,KAAA,CAAM,gBAAgB,KAAK,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAA;AAGvB,EAAA,SAAS,YAAA,GAA8B;AACrC,IAAA,IAAI,WAAW,OAAO,SAAA;AACtB,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,SAAS,MAAA,CAAO,KAAA,CAAM,IAAI,MAAA,CAAO,CAAA,WAAA,EAAc,cAAc,CAAA,QAAA,CAAU,CAAC,CAAA;AACtF,IAAA,OAAO,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,IAAA;AAAA,EAChD;AAGA,EAAA,MAAM,eAAkC,CAAC,KAAA,CAAM,SAAS,KAAA,CAAM,SAAA,EAAW,MAAM,MAAM,CAAA;AAErF,EAAA,eAAe,sBAAsB,IAAA,EAA6C;AAChF,IAAA,MAAM,UAAA,GAAqC;AAAA,MACzC,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,MAAA,UAAA,CAAW,mBAAmB,IAAI,UAAA,CAAW,cAAA;AAAA,IAC/C;AACA,IAAA,MAAM,OAAO,YAAA,EAAa;AAC1B,IAAA,IAAI,IAAA,EAAM,UAAA,CAAW,cAAc,CAAA,GAAI,IAAA;AAGvC,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,WAAA,CAAY,IAAI,CAAA,GAAI,YAAA;AAAA,IACtB;AACA,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,WAAA,CAAY,UAAU,IAAI,IAAA,CAAK,QAAA;AAAA,IACjC;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI;AAAA,MACpD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,WAAA,EAAa,SAAA;AAAA,MACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,WAAW;AAAA,KACjC,CAAA;AAED,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,WAAA,GAAc,IAAA;AACd,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,MAAM,IAAI,MAAM,iBAAiB,CAAA;AAAA,IACnC;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAE3B,IAAA,MAAM,IAAA,GAAO,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,UAAU,GAAA,IAAO,MAAA,IAAU,GAAA,GAAM,GAAA,CAAI,IAAA,GAAO,GAAA;AAC3F,IAAA,WAAA,GAAc,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,WAAA,IAAe,IAAA;AAE7C,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,YAAA;AAC3B,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,SAAA;AAC3B,IAAA,IAAI,EAAA,kBAAoB,EAAE,CAAA;AAC1B,IAAA,IAAI,EAAA,eAAiB,EAAE,CAAA;AAGvB,IAAA,eAAA,EAAgB;AAAA,EAClB;AAOA,EAAA,SAAS,cAAc,IAAA,EAA6C;AAElE,IAAA,IAAI,MAAM,QAAA,EAAU;AAElB,MAAA,OAAO,qBAAA,CAAsB,IAAI,CAAA,CAAE,OAAA,CAAQ,MAAM;AAChC,MACjB,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,gBAAgB,OAAO,cAAA;AAG3B,IAAA,cAAA,GAAiB,qBAAA,EAAsB,CAAE,OAAA,CAAQ,MAAM;AAErD,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB,CAAC,CAAA;AAED,IAAA,OAAO,cAAA;AAAA,EACT;AAOA,EAAA,SAAS,qBAAA,GAAuC;AAC9C,IAAA,IAAI,kBAAkB,OAAO,gBAAA;AAE7B,IAAA,gBAAA,GAAmB,QAAW,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAA,CAAE,QAAQ,MAAM;AACnE,MAAA,gBAAA,GAAmB,IAAA;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,eAAe,OAAA,CAAW,MAAA,EAAgB,IAAA,EAAc,IAAA,EAA4B;AAClF,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,MAAA,CAAO;AAAA,KACZ;AAGA,IAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,MAAA,OAAA,CAAQ,mBAAmB,IAAI,UAAA,CAAW,cAAA;AAAA,IAC5C;AAGA,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,QAAA,CAAS,IAAI,CAAA;AAChD,IAAA,IAAI,WAAA,IAAe,CAAC,aAAA,EAAe;AACjC,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,IAClD;AAGA,IAAA,MAAM,OAAO,YAAA,EAAa;AAC1B,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,IAAA;AAAA,IAC5B;AAGA,IAAA,IAAI,WAAA,GAAc,IAAA;AAClB,IAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,MAAA,MAAM,WACJ,OAAO,IAAA,KAAS,YAAY,IAAA,KAAS,IAAA,GAAQ,OAAmC,EAAC;AACnF,MAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,EAAG;AACnB,QAAA,WAAA,GAAc,EAAE,GAAG,QAAA,EAAU,EAAA,EAAI,YAAA,EAAa;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,IAAI,MAAM,MAAM,KAAA,CAAM,GAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MACzC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA,EAAa,SAAA;AAAA,MACb,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,KAAK,SAAA,CAAU,WAAW,CAAA,EAAE,GAAI;AAAC,KAC1E,CAAA;AAGD,IAAA,MAAM,gBAAA,GAAmB;AAAA,MACvB,KAAA,CAAM,OAAA;AAAA,MACN,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM,MAAA;AAAA,MACN,KAAA,CAAM,SAAA;AAAA,MACN,KAAA,CAAM;AAAA,KACR;AACA,IAAA,IAAI,IAAI,MAAA,KAAW,GAAA,IAAO,CAAC,gBAAA,CAAiB,QAAA,CAAS,IAA4B,CAAA,EAAG;AAClF,MAAA,IAAI;AACF,QAAA,MAAM,aAAA,EAAc;AAAA,MACtB,CAAA,CAAA,MAAQ;AACN,QAAA,IAAI,GAAA,GAAM,iBAAA;AACV,QAAA,IAAI;AACF,UAAA,MAAMC,KAAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,UAAA,GAAA,GACEA,KAAAA,CAAK,OAAA,IACLA,KAAAA,CAAK,KAAA,EAAO,OAAA,KACX,OAAOA,KAAAA,CAAK,KAAA,KAAU,QAAA,GAAWA,KAAAA,CAAK,KAAA,GAAQ,IAAA,CAAA,IAC/C,GAAA;AAAA,QACJ,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,MAAM,IAAI,MAAM,GAAG,CAAA;AAAA,MACrB;AAGA,MAAA,MAAM,YAAA,GAAuC;AAAA,QAC3C,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG,MAAA,CAAO;AAAA,OACZ;AACA,MAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,QAAA,YAAA,CAAa,mBAAmB,IAAI,UAAA,CAAW,cAAA;AAAA,MACjD;AACA,MAAA,IAAI,WAAA,IAAe,CAAC,aAAA,EAAe;AACjC,QAAA,YAAA,CAAa,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,MACvD;AACA,MAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,YAAA,CAAa,cAAc,CAAA,GAAI,SAAA;AAAA,MACjC;AAEA,MAAA,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,QACrC,MAAA;AAAA,QACA,OAAA,EAAS,YAAA;AAAA,QACT,WAAA,EAAa,SAAA;AAAA,QACb,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,KAAK,SAAA,CAAU,WAAW,CAAA,EAAE,GAAI;AAAC,OAC1E,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,IAAI,GAAA,GAAM,CAAA,MAAA,EAAS,GAAA,CAAI,MAAM,CAAA,CAAA;AAC7B,MAAA,IAAI;AACF,QAAA,MAAMA,KAAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,QAAA,GAAA,GACEA,KAAAA,CAAK,OAAA,IACLA,KAAAA,CAAK,KAAA,EAAO,OAAA,KACX,OAAOA,KAAAA,CAAK,KAAA,KAAU,QAAA,GAAWA,KAAAA,CAAK,KAAA,GAAQ,IAAA,CAAA,IAC/C,GAAA;AAAA,MACJ,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,GAAG,CAAA;AACxB,MAAC,GAAA,CAAiB,SAAS,GAAA,CAAI,MAAA;AAChC,MAAA,MAAM,GAAA;AAAA,IACR;AAGA,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,EAAK,OAAO,MAAA;AAG/B,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,QAAQ,OAAO,IAAA,KAAS,YAAY,MAAA,IAAU,IAAA,IAAQ,UAAU,IAAA,EAAM;AACxE,MAAA,OAAO,IAAA,CAAK,IAAA;AAAA,IACd;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,CAAc,IAAA,EAAc,SAAmB,OAAA,CAAW,MAAA,EAAQ,MAAM,IAAI,CAAA;AAAA,IAClF,GAAA,EAAK,CAAc,IAAA,KAAiB,OAAA,CAAW,OAAO,IAAI,CAAA;AAAA,IAC1D,OAAO,CAAc,IAAA,EAAc,SAAmB,OAAA,CAAW,OAAA,EAAS,MAAM,IAAI,CAAA;AAAA,IACpF,GAAA,EAAK,CAAc,IAAA,KAAiB,OAAA,CAAW,UAAU,IAAI,CAAA;AAAA,IAC7D,KAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA,EAAgB,CAAC,IAAA,KAAiC,aAAA,CAAc,IAAI,CAAA;AAAA,IACpE,gBAAA,EAAkB,MAAmB,qBAAA;AAAyB,GAChE;AACF;;;ACjcO,IAAM,EAAA,GAAqB;AAAA,EAChC,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,+BAAA;AAAA,IACP,WAAA,EAAa,qDAAA;AAAA,IACb,MAAA,EAAQ,mBAAA;AAAA,IACR,UAAA,EAAY,uBAAA;AAAA,IACZ,gBAAA,EAAkB,gBAAA;AAAA,IAClB,aAAA,EAAe,eAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,gBAAA;AAAA,IACP,WAAA,EAAa,qCAAA;AAAA,IACb,MAAA,EAAQ,cAAA;AAAA,IACR,UAAA,EAAY,uBAAA;AAAA,IACZ,gBAAA,EAAkB,gBAAA;AAAA,IAClB,aAAA,EAAe,eAAA;AAAA,IACf,mBAAA,EAAqB,uBAAA;AAAA,IACrB,oBAAA,EAAsB,yBAAA;AAAA,IACtB,0BAAA,EAA4B;AAAA,GAC9B;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,KAAA,EAAO,yBAAA;AAAA,IACP,WAAA,EACE,+FAAA;AAAA,IACF,MAAA,EAAQ,eAAA;AAAA,IACR,UAAA,EAAY,uBAAA;AAAA,IACZ,gBAAA,EAAkB,gBAAA;AAAA,IAClB,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,aAAA,EAAe;AAAA,IACb,KAAA,EAAO,2BAAA;AAAA,IACP,WAAA,EAAa,iCAAA;AAAA,IACb,MAAA,EAAQ,2BAAA;AAAA,IACR,gBAAA,EAAkB,qBAAA;AAAA,IAClB,sBAAA,EAAwB,uBAAA;AAAA,IACxB,oBAAA,EAAsB,yBAAA;AAAA,IACtB,0BAAA,EAA4B;AAAA,GAC9B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,sBAAA;AAAA,IACR,KAAA,EAAO,qBAAA;AAAA,IACP,SAAA,EAAW,wBAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACd;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,SAAA,EAAW,eAAA;AAAA,EACX,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,OAAA;AAAA,IACL,mBAAA,EAAqB,8BAAA;AAAA,IACrB,UAAA,EAAY,iCAAA;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,YAAA,EAAc,wBAAA;AAAA,IACd,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,uBAAA;AAAA,IACf,UAAA,EAAY,eAAA;AAAA,IACZ,cAAA,EAAgB,uBAAA;AAAA,IAChB,UAAA,EAAY,kBAAA;AAAA,IACZ,cAAA,EAAgB,iCAAA;AAAA,IAChB,WAAA,EAAa;AAAA,GACf;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,wBAAA;AAAA,IACf,YAAA,EAAc,mCAAA;AAAA,IACd,gBAAA,EAAkB,+BAAA;AAAA,IAClB,iBAAA,EAAmB,oDAAA;AAAA,IACnB,uBAAA,EAAyB,2BAAA;AAAA,IACzB,iBAAA,EAAmB,iCAAA;AAAA,IACnB,aAAA,EAAe,uBAAA;AAAA,IACf,mBAAA,EAAqB,qCAAA;AAAA,IACrB,uBAAA,EAAyB,sCAAA;AAAA,IACzB,eAAA,EAAiB,2BAAA;AAAA,IACjB,aAAA,EAAe,sCAAA;AAAA,IACf,gBAAA,EAAkB,2BAAA;AAAA,IAClB,kBAAA,EAAoB,iCAAA;AAAA,IACpB,UAAA,EAAY;AAAA;AAEhB;;;ACpFO,IAAM,EAAA,GAAqB;AAAA,EAChC,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,yBAAA;AAAA,IACP,WAAA,EAAa,iDAAA;AAAA,IACb,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,gBAAA,EAAkB,iBAAA;AAAA,IAClB,aAAA,EAAe,UAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,qBAAA;AAAA,IACP,WAAA,EAAa,gCAAA;AAAA,IACb,MAAA,EAAQ,gBAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,gBAAA,EAAkB,iBAAA;AAAA,IAClB,aAAA,EAAe,UAAA;AAAA,IACf,mBAAA,EAAqB,oBAAA;AAAA,IACrB,oBAAA,EAAsB,kBAAA;AAAA,IACtB,0BAAA,EAA4B;AAAA,GAC9B;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,KAAA,EAAO,gBAAA;AAAA,IACP,WAAA,EAAa,oEAAA;AAAA,IACb,MAAA,EAAQ,WAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,gBAAA,EAAkB,iBAAA;AAAA,IAClB,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,aAAA,EAAe;AAAA,IACb,KAAA,EAAO,gBAAA;AAAA,IACP,WAAA,EAAa,0BAAA;AAAA,IACb,MAAA,EAAQ,gBAAA;AAAA,IACR,gBAAA,EAAkB,cAAA;AAAA,IAClB,sBAAA,EAAwB,oBAAA;AAAA,IACxB,oBAAA,EAAsB,kBAAA;AAAA,IACtB,0BAAA,EAA4B;AAAA,GAC9B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,sBAAA;AAAA,IACR,KAAA,EAAO,qBAAA;AAAA,IACP,SAAA,EAAW,wBAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACd;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,mBAAA,EAAqB,uBAAA;AAAA,IACrB,UAAA,EAAY,mBAAA;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,YAAA,EAAc,eAAA;AAAA,IACd,MAAA,EAAQ,QAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,wBAAA;AAAA,IACf,UAAA,EAAY,SAAA;AAAA,IACZ,cAAA,EAAgB,0BAAA;AAAA,IAChB,UAAA,EAAY,SAAA;AAAA,IACZ,cAAA,EAAgB,uBAAA;AAAA,IAChB,WAAA,EAAa;AAAA,GACf;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,mBAAA;AAAA,IACf,YAAA,EAAc,uBAAA;AAAA,IACd,gBAAA,EAAkB,sBAAA;AAAA,IAClB,iBAAA,EAAmB,yCAAA;AAAA,IACnB,uBAAA,EAAyB,8BAAA;AAAA,IACzB,iBAAA,EAAmB,wBAAA;AAAA,IACnB,aAAA,EAAe,mBAAA;AAAA,IACf,mBAAA,EAAqB,0BAAA;AAAA,IACrB,uBAAA,EAAyB,8BAAA;AAAA,IACzB,eAAA,EAAiB,kBAAA;AAAA,IACjB,aAAA,EAAe,uBAAA;AAAA,IACf,gBAAA,EAAkB,sBAAA;AAAA,IAClB,kBAAA,EAAoB,yBAAA;AAAA,IACpB,UAAA,EAAY;AAAA;AAEhB;;;ACjFA,IAAM,YAAA,GAAwD,EAAE,EAAA,EAAI,EAAA,EAAG;AAMhE,SAAS,eAAA,CACd,MAAA,GAA0B,IAAA,EAC1B,SAAA,EACgB;AAChB,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAM,CAAA,IAAK,YAAA,CAAa,EAAA;AAClD,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,OAAO;AAAA,IACL,OAAO,EAAE,GAAG,KAAK,KAAA,EAAO,GAAG,UAAU,KAAA,EAAM;AAAA,IAC3C,QAAQ,EAAE,GAAG,KAAK,MAAA,EAAQ,GAAG,UAAU,MAAA,EAAO;AAAA,IAC9C,gBAAgB,EAAE,GAAG,KAAK,cAAA,EAAgB,GAAG,UAAU,cAAA,EAAe;AAAA,IACtE,eAAe,EAAE,GAAG,KAAK,aAAA,EAAe,GAAG,UAAU,aAAA,EAAc;AAAA,IACnE,YAAY,EAAE,GAAG,KAAK,UAAA,EAAY,GAAG,UAAU,UAAA,EAAW;AAAA,IAC1D,QAAQ,EAAE,GAAG,KAAK,MAAA,EAAQ,GAAG,UAAU,MAAA,EAAO;AAAA,IAC9C,gBAAgB,EAAE,GAAG,KAAK,cAAA,EAAgB,GAAG,UAAU,cAAA,EAAe;AAAA,IACtE,SAAA,EAAW,SAAA,CAAU,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA,IACvC,SAAS,EAAE,GAAG,KAAK,OAAA,EAAS,GAAG,UAAU,OAAA,EAAQ;AAAA,IACjD,YAAY,EAAE,GAAG,KAAK,UAAA,EAAY,GAAG,UAAU,UAAA;AAAW,GAC5D;AACF;;;AC5BO,IAAM,GAAA,GAAM,CAAA;AAAA,g4yBAAA,CAAA;;;ACCnB,IAAM,QAAA,GAAW,sBAAA;AACjB,IAAI,QAAA,GAAW,KAAA;AAER,SAAS,YAAA,GAAe;AAC7B,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,WAAA,EAAa;AACjD,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,QAAQ,CAAA,EAAG;AACrC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,EAAA,GAAK,QAAA;AACX,EAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AACpB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAC/B,EAAA,QAAA,GAAW,IAAA;AACb;AAGO,SAAS,YAAA,GAAe;AAC7B,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,QAAA,CAAS,cAAA,CAAe,QAAQ,CAAA,EAAG,MAAA,EAAO;AAC1C,EAAA,QAAA,GAAW,KAAA;AACb;ACNO,SAAS,iBAAiB,IAAA,EAAoB;AACnD,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,GAAI,IAAA;AAEJ,EAAA,MAAM,cAAcC,yBAAA,EAAe;AAGnC,EAAA,MAAM,gBAAgBC,sBAAA,CAAY;AAAA,IAChC,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,IAAA,CAA0B,OAAO,KAAA,CAAM,KAAA,EAAO,cAAA,CAAe,IAAI,CAAC,CAAA;AAAA,IAC3E,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AACjB,MAAA,iBAAA,CAAkB,cAAA,CAAe,IAA0C,CAAC,CAAA;AAC5E,MAAA,iBAAA,CAAkB,IAA0C,CAAA;AAC5D,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,KAAA,CAAM,iBAAA,IAAoB;AAC1B,MAAA,KAAA,CAAM,iBAAiB,IAAI,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAe;AACvB,MAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AACpB,MAAA,KAAA,CAAM,OAAA,GAAU,IAAI,OAAO,CAAA;AAAA,IAC7B;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,iBAAiBA,sBAAA,CAAY;AAAA,IACjC,UAAA,EAAY,CAAC,IAAA,KAAqB;AAChC,MAAA,MAAM,EAAE,eAAA,EAAiB,CAAA,EAAG,GAAG,SAAQ,GAAI,IAAA;AAC3C,MAAA,OAAO,MAAA,CAAO,IAAA,CAA0B,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,eAAe,EAAE,GAAG,OAAA,EAAS,CAAC,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AACjB,MAAA,iBAAA,CAAkB,cAAA,CAAe,IAA0C,CAAC,CAAA;AAC5E,MAAA,iBAAA,CAAkB,IAA0C,CAAA;AAC5D,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,KAAA,CAAM,iBAAA,IAAoB;AAC1B,MAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAe;AACvB,MAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AACpB,MAAA,KAAA,CAAM,OAAA,GAAU,IAAI,OAAO,CAAA;AAAA,IAC7B;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,iBAAiBA,sBAAA,CAAY;AAAA,IACjC,YAAY,MAAM,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,IACjD,WAAW,MAAM;AACf,MAAA,YAAA,EAAa;AACb,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,KAAA,CAAM,iBAAA,IAAoB;AAC1B,MAAA,KAAA,CAAM,eAAA,IAAkB;AAAA,IAC1B;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,SAAA,GAAYC,kBAAY,YAAY;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,cAAA,EAAe;AAC5B,MAAA,iBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC3C,SAAS,GAAA,EAAK;AACZ,MAAA,YAAA,EAAa;AACb,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,KAAA,CAAM,gBAAA,IAAmB;AACzB,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,aAAa,KAAA,EAAO,iBAAA,EAAmB,YAAY,CAAC,CAAA;AAGhE,EAAA,MAAM,cAAA,GAAiBA,iBAAA;AAAA,IACrB,OAAO,QAAA,KAAqB;AAC1B,MAAA,MAAM,MAAA,CAAO,cAAA,CAAe,EAAE,QAAA,EAAU,CAAA;AACxC,MAAA,iBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAA;AACzC,MAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,UAAU,CAAC,eAAe,GAAG,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,WAAA,EAAa,iBAAiB;AAAA,GACzC;AAEA,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;AC/FA,IAAM,aAAA,GAAgBC,oBAAyC,IAAI,CAAA;AACnE,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,aAAA,GAAgBA,oBAAmC,IAAI,CAAA;AAC7D,aAAA,CAAc,WAAA,GAAc,qBAAA;AAO5B,IAAM,eAAA,GAAkBA,oBAA2C,IAAI,CAAA;AACvE,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAGvB,SAAS,eAAA,GAAgC;AAC9C,EAAA,MAAM,GAAA,GAAMC,iBAAW,aAAa,CAAA;AACpC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC5E;AACA,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,WAAA,GAAkC;AAChD,EAAA,MAAM,GAAA,GAAMA,iBAAW,eAAe,CAAA;AACtC,EAAA,OAAO,KAAK,QAAA,IAAY,IAAA;AAC1B;AAMO,SAAS,WAAA,GAA8B;AAC5C,EAAA,MAAM,GAAA,GAAMA,iBAAW,eAAe,CAAA;AACtC,EAAA,IAAI,GAAA,SAAY,GAAA,CAAI,QAAA;AACpB,EAAA,OAAO,gBAAgB,IAAI,CAAA;AAC7B;AAGA,IAAM,kBAAA,GAAqB,IAAIC,sBAAA,CAAY;AAAA,EACzC,cAAA,EAAgB;AAAA,IACd,OAAA,EAAS,EAAE,KAAA,EAAO,KAAA,EAAO,sBAAsB,KAAA;AAAM;AAEzD,CAAC,CAAA;AAGD,SAAS,mBAAA,CAAoB;AAAA,EAC3B,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAA0B,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAA6B,IAAI,CAAA;AAEjE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,IAAIA,cAAA,CAAS,KAAA,CAAM,iBAAiB,IAAI,CAAA;AAGlF,EAAA,MAAM,QAAA,GAAWC,aAAA;AAAA,IACf,MAAM,eAAA,CAAgB,KAAA,CAAM,MAAA,IAAU,IAAA,EAAM,MAAM,QAAQ,CAAA;AAAA,IAC1D,CAAC,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,QAAQ;AAAA,GAC/B;AAEA,EAAA,MAAM,aAAA,GAAgBA,aAAA,CAAQ,OAAO,EAAE,QAAA,EAAU,UAAS,CAAA,EAAI,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA;AAIlF,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,CAAM,MAAA;AAG3B,EAAA,MAAM,OAAA,GAAUA,cAAQ,MAAM;AAC5B,IAAA,IAAI,KAAA,CAAM,cAAA,KAAmB,KAAA,EAAO,OAAO,IAAA;AAC3C,IAAA,IAAI,KAAA,CAAM,cAAA,EAAgB,OAAO,KAAA,CAAM,cAAA;AAEvC,IAAA,IAAI,aAAa,OAAO,IAAA;AAExB,IAAA,IAAI,MAAA,CAAO,UAAA,EAAY,cAAA,EAAgB,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3D,MAAA,OAAO,mBAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAA,CAAM,cAAA,EAAgB,OAAO,UAAA,EAAY,cAAA,EAAgB,WAAW,CAAC,CAAA;AAEzE,EAAA,MAAM,WAAA,GAAcL,iBAAAA;AAAA,IAClB,CAAC,KAAA,KAAyB;AACxB,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,OAAA,EAAS;AAAA,UACb,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,UAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO;AAAA,SAC/B,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACnB,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,SAAS,EAAE,MAAA,EAAQ,UAAU,CAAA,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACrD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAGA,EAAA,MAAM,iBAAA,GAAoBA,iBAAAA;AAAA,IACxB,CAAC,KAAA,KAAyB;AACxB,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,MAAA,CAAO,eAAe,KAAK,CAAA;AAC3B,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,QAAQ,WAAW;AAAA,GACtB;AAMA,EAAA,MAAM,iBAAA,GAAoBA,iBAAAA;AAAA,IACxB,CAAC,IAAA,KAAkC;AACjC,MAAA,MAAM,EAAA,GAAM,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,YAAA;AAC5B,MAAA,MAAM,EAAA,GAAM,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,SAAA;AAC5B,MAAA,IAAI,EAAA,EAAI,MAAA,CAAO,eAAA,CAAgB,EAAE,CAAA;AACjC,MAAA,IAAI,EAAA,EAAI,MAAA,CAAO,YAAA,CAAa,EAAE,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAGA,EAAA,MAAM,YAAA,GAAeA,kBAAY,MAAM;AACrC,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,MAAA,CAAO,gBAAgB,IAAI,CAAA;AAC3B,IAAA,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAG9B,EAAA,MAAM,cAAA,GAAiBA,iBAAAA;AAAA,IACrB,CAAC,IAAA,KAAkC;AACjC,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,OAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,MAAA,CAAO,WAAW,QAAA,EAAS;AAAA,MACzD;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAMA,EAAAM,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,aAAA,GAAgB,MAAM,aAAA,IAAiB,IAAA;AAC7C,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,IAAA,eAAe,SAAA,GAAY;AACzB,MAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,gBAAA,EAAoC;AAElE,QAAA,IAAI,SAAA,EAAW;AAEf,QAAA,IAAI,SAAS,QAAA,EAAU;AACrB,UAAA,WAAA,CAAY,SAAS,QAAQ,CAAA;AAAA,QAC/B;AAEA,QAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,UAAA,MAAM,CAAA,GAAI,QAAA;AACV,UAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AACrB,UAAA,iBAAA,CAAmB,CAAA,CAAE,EAAA,IAAM,CAAA,CAAE,WAAsB,CAAA;AACnD,UAAA,iBAAA,CAAkB,CAAC,CAAA;AAAA,QACrB;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,UAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,IAAA,CAAK,UAAU,GAAG,CAAA;AACnE,UAAA,OAAA,CAAQ,IAAA,CAAK,qCAAqC,GAAG,CAAA;AAAA,QACvD;AAAA,MACF,CAAA,SAAE;AACA,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,SAAA,EAAU;AAEV,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,MAAM,aAAA,EAAe,iBAAA,EAAmB,iBAAiB,CAAC,CAAA;AAMtE,EAAA,MAAM,aAAA,GAAgBN,kBAAY,YAAY;AAC5C,IAAA,IAAI,CAAC,MAAA,CAAO,cAAA,EAAe,EAAG;AAK9B,IAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,OAAA,IAAW,SAAA,EAAW;AAC5D,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,IAAI;AACF,QAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AAAA,UACpB,sBAAA;AAAA,UACA,EAAE,aAAa,IAAA,EAAK;AAAA,UACpB,OAAO,IAAA,KAAS;AACd,YAAA,IAAI,CAAC,IAAA,EAAM;AACX,YAAA,QAAA,GAAW,IAAA;AACX,YAAA,MAAM,OAAO,cAAA,EAAe;AAC5B,YAAA,iBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAA;AAAA,UAC3C;AAAA,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,QAAA,IAAY,WAAA,CAAY,GAAG,CAAA,EAAG;AAChC,UAAA,YAAA,EAAa;AACb,UAAA,KAAA,CAAM,gBAAA,IAAmB;AAAA,QAC3B;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,cAAA,EAAe;AAC5B,MAAA,iBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC3C,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,WAAA,CAAY,GAAG,CAAA,EAAG;AACpB,QAAA,YAAA,EAAa;AACb,QAAA,KAAA,CAAM,gBAAA,IAAmB;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,iBAAA,EAAmB,YAAA,EAAc,KAAK,CAAC,CAAA;AAInD,EAAAM,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAA,GAAmC,IAAA;AACvC,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,QAAA,OAAA,GAAU,IAAI,iBAAiB,aAAa,CAAA;AAC5C,QAAA,OAAA,CAAQ,SAAA,GAAY,CAAC,KAAA,KAAwB;AAC3C,UAAA,IAAI,MAAM,IAAA,EAAM,IAAA,KAAS,iBAAA,IAAqB,KAAA,CAAM,KAAK,WAAA,EAAa;AACpE,YAAA,MAAA,CAAO,cAAA,CAAe,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AAC5C,YAAA,iBAAA,CAAkB,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA,UAC1C;AAAA,QACF,CAAA;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI;AACF,QAAA,OAAA,EAAS,KAAA,EAAM;AAAA,MACjB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAG9B,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAA,GAAa,MAAM,eAAA,IAAmB,GAAA;AAC5C,IAAA,IAAI,cAAc,CAAA,EAAG;AAErB,IAAA,MAAM,EAAA,GAAK,WAAA,CAAY,aAAA,EAAe,UAAU,CAAA;AAChD,IAAA,OAAO,MAAM,cAAc,EAAE,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,KAAA,CAAM,eAAA,EAAiB,aAAa,CAAC,CAAA;AAGzC,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,SAAS,sBAAA,GAAyB;AAChC,MAAA,IAAI,QAAA,CAAS,oBAAoB,SAAA,EAAW;AAC1C,QAAA,aAAA,EAAc;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,sBAAsB,CAAA;AACpE,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,kBAAA,EAAoB,sBAAsB,CAAA;AAAA,EACtF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAGlB,EAAA,MAAM,cAAA,GAAiBN,iBAAAA;AAAA,IACrB,CAAC,IAAA,KAA2C,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,WAAA;AAAA,IAC5D;AAAC,GACH;AAGA,EAAA,MAAM,EAAE,aAAA,EAAe,cAAA,EAAgB,gBAAgB,SAAA,EAAW,cAAA,KAChE,gBAAA,CAAiB;AAAA,IACf,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGH,EAAA,MAAM,KAAA,GAAQA,iBAAAA;AAAA,IACZ,CAAC,IAAA,KAA8C,aAAA,CAAc,MAAA,CAAO,IAAI,CAAA;AAAA,IACxE,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,MAAA,GAASA,iBAAAA,CAAY,CAAC,IAAA,KAAqB,cAAA,CAAe,OAAO,IAAI,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAE9F,EAAA,MAAM,MAAA,GAASA,kBAAY,MAAM,cAAA,CAAe,QAAO,EAAG,CAAC,cAAc,CAAC,CAAA;AAC1E,EAAA,MAAM,aAAaA,iBAAAA,CAAY,MAAM,SAAS,IAAI,CAAA,EAAG,EAAE,CAAA;AAEvD,EAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAY,CAAC,CAAA,KAAuB;AACpD,IAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,EACX,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQK,aAAA;AAAA,IACZ,OAAO;AAAA,MACL,IAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAiB,IAAA,KAAS,IAAA;AAAA,MAC1B,SAAA,EAAW,eAAA,IAAmB,aAAA,CAAc,SAAA,IAAa,cAAA,CAAe,SAAA;AAAA,MACxE,KAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA,EAAS,SAAA;AAAA,MACT,YAAA,EAAc,cAAA;AAAA,MACd,OAAA,EAAS,SAAA;AAAA,MACT,gBAAgB,aAAA,CAAc,SAAA;AAAA,MAC9B,iBAAiB,cAAA,CAAe,SAAA;AAAA,MAChC,eAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,sCACG,aAAA,CAAc,QAAA,EAAd,EAAuB,KAAA,EAAO,MAAA,EAC7B,yCAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,KAAA,EACtB,QAAA,kBAAAE,cAAA,CAAC,gBAAgB,QAAA,EAAhB,EAAyB,OAAO,aAAA,EAAgB,QAAA,EAAS,GAC5D,CAAA,EACF,CAAA;AAEJ;AAGO,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,YAAA,EAAa;AACb,IAAA,OAAO,MAAM,YAAA,EAAa;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASD,cAAQ,MAAM;AAC3B,IAAA,MAAM,UAAA,GAAa,MAAM,cAAA,GACrB;AAAA,MACE,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,UAAU,KAAA,CAAM;AAAA,KAClB,GACA,MAAA;AAIJ,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,CAAM,MAAA;AACvB,IAAA,MAAM,UAAU,OAAA,GAAU,EAAA,GAAK,MAAM,MAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,OAAA,GAAU,UAAA,CAAW,KAAA,GAAQ,UAAA,CAAW,MAAA;AAEzD,IAAA,OAAO,kBAAA;AAAA,MACL,EAAE,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,MAAM,YAAA,EAAuC;AAAA,MAC3E;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,cAAA,EAAgB,KAAA,CAAM,UAAU,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,MAAM,CAAC,CAAA;AAE3E,EAAA,uBACEE,cAAA,CAACC,8BAAA,EAAA,EAAoB,MAAA,EAAQ,kBAAA,EAC3B,QAAA,kBAAAD,cAAA,CAAC,uBAAoB,MAAA,EAAgB,KAAA,EAClC,QAAA,EAAA,KAAA,CAAM,QAAA,EACT,CAAA,EACF,CAAA;AAEJ;AAGO,SAAS,SAAA,GAAgC;AAC9C,EAAA,MAAM,GAAA,GAAML,iBAAW,aAAa,CAAA;AACpC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AC3aA,IAAM,cAAA,GAAiBO,0BAAA;AAAA,EACrB,ikBAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,4DAAA;AAAA,QACT,OAAA,EACE,iLAAA;AAAA,QACF,SAAA,EACE,iIAAA;AAAA,QACF,KAAA,EACE,kHAAA;AAAA,QACF,WAAA,EACE,6NAAA;AAAA,QACF,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EACE,sFAAA;AAAA,QACF,EAAA,EAAI,+MAAA;AAAA,QACJ,EAAA,EAAI,yNAAA;AAAA,QACJ,EAAA,EAAI,sFAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EACE,yHAAA;AAAA,QACF,SAAA,EACE,oFAAA;AAAA,QACF,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAGK;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUC,YAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACEH,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;AC5DA,SAAS,IAAA,CAAK;AAAA,EACZ,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,sVAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oSAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,sEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC7E,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAYA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,MAC7D,GAAG;AAAA;AAAA,GACN;AAEJ;ACxEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,aAAA,EAAc,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAClG;AAEA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACnE,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACnF;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AAC1E,EAAA,uBACEA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC9E,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,iGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAe,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAAgC;AACtF,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,yBAAA;AAAA,UACV,SAAA,EAAU,kDAAA;AAAA,UAET;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;ACjDA,SAAS,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAAkC;AAC3E,EAAA,uBACEA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6oBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACJO,IAAM,SAAA,GAAYI,gBAAA;AAAA,EACvB,CACE;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW,eAAA;AAAA,IACX,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,MAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA,GAAoB,KAAA;AAAA,IACpB,MAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,MAAM,WAAA,EAAY;AACxB,IAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,IAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,QAAA,EAAU,WAAA,IAAe,IAAI,KAAA,CAAM,KAAA,CAAA;AAC/D,IAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,GAAA,CAAI,KAAA,CAAM,WAAA;AACjD,IAAA,MAAM,UAAA,GAAa,cAAA,IAAkB,GAAA,CAAI,KAAA,CAAM,MAAA;AAE/C,IAAA,MAAM,OACJ,QAAA,KAAa,MAAA,GACX,WACE,QAAA,EAAU,OAAA,mBACZJ,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,SAAS,GAAA,EAAK,QAAA,CAAS,eAAe,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,GACnF,IAAA;AAEN,IAAA,MAAM,MAAA,GAASF,aAAAA;AAAA,MACb,MAAM,UAAA,IAAc,iBAAA,CAAkB,GAAA,CAAI,UAAU,CAAA;AAAA,MACpD,CAAC,UAAA,EAAY,GAAA,CAAI,UAAU;AAAA,KAC7B;AAEA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,IAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,SAAA,EAAU;AACtB,MAAA,QAAA,GAAW,GAAA,CAAI,KAAA;AACf,MAAA,QAAA,GAAW,GAAA,CAAI,KAAA;AACf,MAAA,UAAA,GAAa,GAAA,CAAI,cAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,EAAE,MAAA,EAAQ,YAAA;AAAa,QAChCO,qBAAA,CAAoB;AAAA,MACtB,QAAA,EAAUC,kBAAY,MAAe,CAAA;AAAA,MACrC,eAAe,EAAE,KAAA,EAAO,IAAI,QAAA,EAAU,EAAA,EAAI,GAAG,aAAA;AAAc,KAC5D,CAAA;AAED,IAAA,MAAM,QAAA,GAAWb,iBAAAA;AAAA,MACf,OAAO,MAAA,KAAuB;AAC5B,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,aAAa,MAAM,CAAA;AAAA,QAC3B,WAAW,QAAA,EAAU;AACnB,UAAA,QAAA,CAAS,MAAM,CAAA;AAAA,QACjB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAc,QAAQ;AAAA,KACzB;AAEA,IAAA,MAAM,OAAA,GAAU,mBAAmB,UAAA,IAAc,YAAA;AACjD,IAAA,MAAM,QAAQ,aAAA,IAAiB,QAAA;AAE/B,IAAA,MAAM,YAAA,GAAeK,cAAQ,MAA2B;AACtD,MAAA,IAAI,CAAC,QAAA,EAAU,YAAA,EAAc,OAAO,SAAS,EAAC;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAgB,QAAA,CAAS,YAAA;AAAA,QACzB,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,CAAA;AAElC,IAAA,uBACES,eAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,GAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,KAAA,EAAO,YAAA,EACtE,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQP,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sCAE/E,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAO,eAAA,CAAC,UAAA,EAAA,EAAW,WAAU,aAAA,EACnB,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASP,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC/C,WAAA,oBAAeA,cAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChD,CAAA;AAAA,wBAEAA,cAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,GAAA,EAAU,QAAA,EAAU,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,EAAU,IAAA,EAC1D,0CAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAU,8FAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,qCACCO,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAD,eAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,eAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAAP,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,aAC9C,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,+hBAAA;AAAA,oBACF,IAAA,EAAK;AAAA;AAAA,iBACP,EACF,CAAA;AAAA,gBACC,IAAI,MAAA,CAAO;AAAA,eAAA,EACd,CAAA;AAAA,8CACC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,aAC9C,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,6VAAA;AAAA,oBACF,IAAA,EAAK;AAAA;AAAA,iBACP,EACF,CAAA;AAAA,gBACC,IAAI,MAAA,CAAO;AAAA,eAAA,EACd;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,GAAA,CAAI,OAAO,SAAA,EAAU;AAAA,WAAA,EACxC,CAAA;AAAA,0CAGD,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,cAAAA,CAAC,cAAW,OAAA,EAAQ,gBAAA,EACjB,kBAAQ,KAAA,IAAS,GAAA,CAAI,MAAM,UAAA,EAC9B,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,gBAAA;AAAA,gBACH,IAAA,EAAK,OAAA;AAAA,gBACL,YAAA,EAAa,OAAA;AAAA,gBACb,WAAA,EAAa,MAAA,EAAQ,gBAAA,IAAoB,GAAA,CAAI,KAAA,CAAM,gBAAA;AAAA,gBACnD,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,KAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,KAAA,GAAQ,oBAAA,GAAuB,MAAA;AAAA,gBACvD,GAAG,SAAS,OAAO;AAAA;AAAA,aACtB;AAAA,YACC,MAAA,CAAO,KAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,oBAAA,EAAqB,SAAA,EAAU,0BAAA,EAClC,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,OAAA,EAChB;AAAA,WAAA,EAEJ,CAAA;AAAA,0CAEC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAO,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,8BAAAP,cAAAA,CAAC,cAAW,OAAA,EAAQ,mBAAA,EACjB,kBAAQ,QAAA,IAAY,GAAA,CAAI,MAAM,aAAA,EACjC,CAAA;AAAA,cACC,kCACCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sDACb,QAAA,EAAA,cAAA,EACH;AAAA,aAAA,EAEJ,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,mBAAA;AAAA,gBACH,IAAA,EAAK,UAAA;AAAA,gBACL,YAAA,EAAa,kBAAA;AAAA,gBACb,WAAA,EAAa,MAAA,EAAQ,mBAAA,IAAuB,GAAA,CAAI,KAAA,CAAM,mBAAA;AAAA,gBACtD,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,QAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,QAAA,GAAW,mBAAA,GAAsB,MAAA;AAAA,gBACzD,GAAG,SAAS,UAAU;AAAA;AAAA,aACzB;AAAA,YACC,MAAA,CAAO,QAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,mBAAA,EAAoB,SAAA,EAAU,0BAAA,EACjC,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,OAAA,EACnB;AAAA,WAAA,EAEJ,CAAA;AAAA,0CAEC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAO,eAAA,CAAC,UAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,OAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,cAAA,OAAA,oBACCA,eAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,2BAAA;AAAA,kBACV,KAAA,EAAM,4BAAA;AAAA,kBACN,IAAA,EAAK,MAAA;AAAA,kBACL,OAAA,EAAQ,WAAA;AAAA,kBACR,aAAA,EAAY,MAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA,oCAAAP,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,EAAA,EAAG,IAAA;AAAA,wBACH,EAAA,EAAG,IAAA;AAAA,wBACH,CAAA,EAAE,IAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY;AAAA;AAAA,qBACd;AAAA,oCACAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,eACF;AAAA,cAED;AAAA,aAAA,EACH,CAAA;AAAA,YACC,0BAAUA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,eAAe,QAAA,EAAA,MAAA,EAAO;AAAA,WAAA,EAC/D;AAAA,SAAA,EACF,GACF,CAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AC5NjB,IAAM,UAAA,GAAaI,gBAAAA;AAAA,EACxB,CACE;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW,eAAA;AAAA,IACX,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,MAAA;AAAA,IACA,iBAAA,GAAoB,KAAA;AAAA,IACpB;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,MAAM,WAAA,EAAY;AACxB,IAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,IAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,QAAA,EAAU,WAAA,IAAe,IAAI,MAAA,CAAO,KAAA,CAAA;AAChE,IAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,GAAA,CAAI,MAAA,CAAO,WAAA;AAClD,IAAA,MAAM,UAAA,GAAa,cAAA,IAAkB,GAAA,CAAI,MAAA,CAAO,MAAA;AAEhD,IAAA,MAAM,OACJ,QAAA,KAAa,MAAA,GACX,WACE,QAAA,EAAU,OAAA,mBACZJ,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,SAAS,GAAA,EAAK,QAAA,CAAS,eAAe,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,GACnF,IAAA;AAEN,IAAA,MAAM,MAAA,GAASF,aAAAA;AAAA,MACb,MAAM,UAAA,IAAc,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA;AAAA,MACrD,CAAC,UAAA,EAAY,GAAA,CAAI,UAAU;AAAA,KAC7B;AAEA,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,IAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,SAAA,EAAU;AACtB,MAAA,SAAA,GAAY,GAAA,CAAI,MAAA;AAChB,MAAA,QAAA,GAAW,GAAA,CAAI,KAAA;AACf,MAAA,UAAA,GAAa,GAAA,CAAI,eAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,EAAE,MAAA,EAAQ,YAAA;AAAa,QAChCO,qBAAAA,CAAqB;AAAA,MACvB,QAAA,EAAUC,kBAAY,MAAe,CAAA;AAAA,MACrC,aAAA,EAAe,EAAE,KAAA,EAAO,EAAA,EAAI,UAAU,EAAA;AAAG,KAC1C,CAAA;AAED,IAAA,MAAM,QAAA,GAAWb,iBAAAA;AAAA,MACf,OAAO,MAAA,KAAwB;AAC7B,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,aAAa,MAAM,CAAA;AAAA,QAC3B,WAAW,SAAA,EAAW;AACpB,UAAA,SAAA,CAAU,MAAM,CAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAc,SAAS;AAAA,KAC1B;AAEA,IAAA,MAAM,OAAA,GAAU,mBAAmB,UAAA,IAAc,YAAA;AACjD,IAAA,MAAM,QAAQ,aAAA,IAAiB,QAAA;AAE/B,IAAA,MAAM,YAAA,GAAeK,cAAQ,MAA2B;AACtD,MAAA,IAAI,CAAC,QAAA,EAAU,YAAA,EAAc,OAAO,SAAS,EAAC;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAgB,QAAA,CAAS,YAAA;AAAA,QACzB,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,CAAA;AAElC,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,KAAA,EAAO,YAAA,EACtE,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQP,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBAEhFO,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EACnB,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASP,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC/C,WAAA,oBAAeA,cAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChD,CAAA;AAAA,wBAEAA,cAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,GAAA,EAAU,QAAA,EAAU,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,EAAU,IAAA,EAC1D,QAAA,kBAAAO,gBAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAU,8FAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,iBAAA,oBACCO,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAD,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAAP,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,aAC9C,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,+hBAAA;AAAA,oBACF,IAAA,EAAK;AAAA;AAAA,iBACP,EACF,CAAA;AAAA,gBACC,IAAI,MAAA,CAAO;AAAA,eAAA,EACd,CAAA;AAAA,8BACAO,gBAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAAP,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,aAC9C,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,6VAAA;AAAA,oBACF,IAAA,EAAK;AAAA;AAAA,iBACP,EACF,CAAA;AAAA,gBACC,IAAI,MAAA,CAAO;AAAA,eAAA,EACd;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,GAAA,CAAI,OAAO,SAAA,EAAU;AAAA,WAAA,EACxC,CAAA;AAAA,0BAGFO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,cAAW,OAAA,EAAQ,iBAAA,EACjB,kBAAQ,KAAA,IAAS,GAAA,CAAI,OAAO,UAAA,EAC/B,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,iBAAA;AAAA,gBACH,IAAA,EAAK,OAAA;AAAA,gBACL,YAAA,EAAa,OAAA;AAAA,gBACb,WAAA,EAAa,MAAA,EAAQ,gBAAA,IAAoB,GAAA,CAAI,MAAA,CAAO,gBAAA;AAAA,gBACpD,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,KAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,KAAA,GAAQ,qBAAA,GAAwB,MAAA;AAAA,gBACxD,GAAG,SAAS,OAAO;AAAA;AAAA,aACtB;AAAA,YACC,MAAA,CAAO,KAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,qBAAA,EAAsB,SAAA,EAAU,0BAAA,EACnC,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,OAAA,EAChB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,cAAW,OAAA,EAAQ,oBAAA,EACjB,kBAAQ,QAAA,IAAY,GAAA,CAAI,OAAO,aAAA,EAClC,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,oBAAA;AAAA,gBACH,IAAA,EAAK,UAAA;AAAA,gBACL,YAAA,EAAa,cAAA;AAAA,gBACb,WAAA,EAAa,MAAA,EAAQ,mBAAA,IAAuB,GAAA,CAAI,MAAA,CAAO,mBAAA;AAAA,gBACvD,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,QAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,QAAA,GAAW,oBAAA,GAAuB,MAAA;AAAA,gBAC1D,GAAG,SAAS,UAAU;AAAA;AAAA,aACzB;AAAA,YACC,MAAA,CAAO,QAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,oBAAA,EAAqB,SAAA,EAAU,0BAAA,EAClC,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,OAAA,EACnB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,OAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,cAAA,OAAA,oBACCA,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,2BAAA;AAAA,kBACV,KAAA,EAAM,4BAAA;AAAA,kBACN,IAAA,EAAK,MAAA;AAAA,kBACL,OAAA,EAAQ,WAAA;AAAA,kBACR,aAAA,EAAY,MAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA,oCAAAP,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,EAAA,EAAG,IAAA;AAAA,wBACH,EAAA,EAAG,IAAA;AAAA,wBACH,CAAA,EAAE,IAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY;AAAA;AAAA,qBACd;AAAA,oCACAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,eACF;AAAA,cAED;AAAA,aAAA,EACH,CAAA;AAAA,YACC,0BAAUA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,eAAe,QAAA,EAAA,MAAA,EAAO;AAAA,WAAA,EAC/D;AAAA,SAAA,EACF,GACF,CAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AClLlB,SAAS,iBAAiB,OAAA,EAA2D;AAC1F,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,UAAUR,sBAAAA,CAAY;AAAA,IAC1B,WAAA,EAAa,CAAC,eAAA,EAAiB,gBAAA,EAAkB,SAAS,CAAA;AAAA,IAC1D,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAAK,MAAA,CAAO,KAAA,CAAM,sBAAsB,IAAI,CAAA;AAAA,IACrD,SAAA,EAAW,MAAM,OAAA,EAAS,gBAAA,IAAmB;AAAA,IAC7C,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,UAAUA,sBAAAA,CAAY;AAAA,IAC1B,WAAA,EAAa,CAAC,eAAA,EAAiB,gBAAA,EAAkB,SAAS,CAAA;AAAA,IAC1D,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAAK,MAAA,CAAO,KAAA,CAAM,sBAAsB,IAAI,CAAA;AAAA,IACrD,SAAA,EAAW,MAAM,OAAA,EAAS,gBAAA,IAAmB;AAAA,IAC7C,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,OAAA,EAAQ;AAC5B;ACpDO,IAAM,kBAAA,GAAqBY,gBAAAA;AAAA,EAChC,CACE;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW,eAAA;AAAA,IACX,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,MAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,MAAM,WAAA,EAAY;AACxB,IAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIP,eAAS,KAAK,CAAA;AAC5C,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAE9D,IAAA,MAAM,KAAA,GAAQ,SAAA,IAAa,GAAA,CAAI,cAAA,CAAe,KAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,GAAA,CAAI,cAAA,CAAe,WAAA;AAC1D,IAAA,MAAM,UAAA,GAAa,cAAA,IAAkB,GAAA,CAAI,cAAA,CAAe,MAAA;AAExD,IAAA,MAAM,OACJ,QAAA,KAAa,MAAA,GACX,WACE,QAAA,EAAU,OAAA,mBACZG,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,SAAS,GAAA,EAAK,QAAA,CAAS,eAAe,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,GACnF,IAAA;AAEN,IAAA,MAAM,MAAA,GAASF,aAAAA;AAAA,MACb,MAAM,UAAA,IAAc,0BAAA,CAA2B,GAAA,CAAI,UAAU,CAAA;AAAA,MAC7D,CAAC,UAAA,EAAY,GAAA,CAAI,UAAU;AAAA,KAC7B;AAEA,IAAA,IAAI,aAAA,GAA4D,IAAA;AAChE,IAAA,IAAI;AACF,MAAA,aAAA,GAAgB,gBAAA,CAAiB;AAAA,QAC/B,gBAAA,EAAkB,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,QACvC,OAAA,EAAS,CAAC,GAAA,KAAQ,YAAA,CAAa,IAAI,OAAO;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,EAAE,MAAA,EAAQ,YAAA;AAAa,QAChCO,qBAAAA,CAA6B;AAAA,MAC/B,QAAA,EAAUC,kBAAY,MAAe,CAAA;AAAA,MACrC,aAAA,EAAe,EAAE,KAAA,EAAO,EAAA,EAAI,GAAG,aAAA;AAAc,KAC9C,CAAA;AAED,IAAA,MAAM,QAAA,GAAWb,iBAAAA;AAAA,MACf,OAAO,MAAA,KAAgC;AACrC,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,aAAa,MAAM,CAAA;AAAA,QAC3B,WAAW,aAAA,EAAe;AACxB,UAAA,aAAA,CAAc,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,QACrC;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAc,aAAa;AAAA,KAC9B;AAEA,IAAA,MAAM,OAAA,GAAU,eAAA,IAAmB,aAAA,EAAe,OAAA,CAAQ,SAAA,IAAa,YAAA;AACvE,IAAA,MAAM,QAAQ,aAAA,IAAiB,SAAA;AAE/B,IAAA,MAAM,YAAA,GAAeK,cAAQ,MAA2B;AACtD,MAAA,IAAI,CAAC,QAAA,EAAU,YAAA,EAAc,OAAO,SAAS,EAAC;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAgB,QAAA,CAAS,YAAA;AAAA,QACzB,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,CAAA;AAElC,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,KAAA,EAAO,YAAA,EACtE,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQP,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBAEhFO,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EACnB,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASP,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC/C,WAAA,oBAAeA,cAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChD,CAAA;AAAA,wBAEAA,cAAAA,CAAC,WAAA,EAAA,EACE,QAAA,EAAA,OAAA,mBACCA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yJAAA,EACZ,QAAA,EAAA,GAAA,CAAI,cAAA,CAAe,cAAA,EACtB,oBAEAA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAA,EAAU,QAAA,EAAU,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,EAAU,IAAA,EAC1D,QAAA,kBAAAO,eAAAA,CAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAU,8FAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BAGFO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,eAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,iBAAA,EACjB,QAAA,EAAA,GAAA,CAAI,eAAe,UAAA,EACtB,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,iBAAA;AAAA,gBACH,IAAA,EAAK,OAAA;AAAA,gBACL,YAAA,EAAa,OAAA;AAAA,gBACb,WAAA,EAAa,IAAI,cAAA,CAAe,gBAAA;AAAA,gBAChC,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,KAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,KAAA,GAAQ,qBAAA,GAAwB,MAAA;AAAA,gBACxD,GAAG,SAAS,OAAO;AAAA;AAAA,aACtB;AAAA,YACC,MAAA,CAAO,KAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,qBAAA,EAAsB,SAAA,EAAU,0BAAA,EACnC,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,OAAA,EAChB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,OAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,cAAA,OAAA,oBACCA,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,2BAAA;AAAA,kBACV,KAAA,EAAM,4BAAA;AAAA,kBACN,IAAA,EAAK,MAAA;AAAA,kBACL,OAAA,EAAQ,WAAA;AAAA,kBACR,aAAA,EAAY,MAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA,oCAAAP,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,EAAA,EAAG,IAAA;AAAA,wBACH,EAAA,EAAG,IAAA;AAAA,wBACH,CAAA,EAAE,IAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY;AAAA;AAAA,qBACd;AAAA,oCACAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,eACF;AAAA,cAED;AAAA,aAAA,EACH,CAAA;AAAA,YACC,0BACCA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,eAAe,QAAA,EAAA,MAAA,EAAO;AAAA,WAAA,EAEtD;AAAA,SAAA,EACF,GACF,CAAA,EAEJ;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AC3K1B,IAAM,iBAAA,GAAoBI,gBAAAA;AAAA,EAC/B,CACE;AAAA,IACE,KAAA;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW,eAAA;AAAA,IACX,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,MAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,MAAM,WAAA,EAAY;AACxB,IAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIP,eAAwB,IAAI,CAAA;AAE9D,IAAA,MAAM,KAAA,GAAQ,SAAA,IAAa,GAAA,CAAI,aAAA,CAAc,KAAA;AAC7C,IAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,GAAA,CAAI,aAAA,CAAc,WAAA;AACzD,IAAA,MAAM,UAAA,GAAa,cAAA,IAAkB,GAAA,CAAI,aAAA,CAAc,MAAA;AAEvD,IAAA,MAAM,OACJ,QAAA,KAAa,MAAA,GACX,WACE,QAAA,EAAU,OAAA,mBACZG,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,SAAS,GAAA,EAAK,QAAA,CAAS,eAAe,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,GACnF,IAAA;AAEN,IAAA,MAAM,MAAA,GAASF,aAAAA;AAAA,MACb,MAAM,UAAA,IAAc,gCAAA,CAAiC,GAAA,CAAI,UAAU,CAAA;AAAA,MACnE,CAAC,UAAA,EAAY,GAAA,CAAI,UAAU;AAAA,KAC7B;AAEA,IAAA,IAAI,aAAA,GAA4D,IAAA;AAChE,IAAA,IAAI;AACF,MAAA,aAAA,GAAgB,gBAAA,CAAiB;AAAA,QAC/B,gBAAA,EAAkB,MAAM,SAAA,IAAY;AAAA,QACpC,OAAA,EAAS,CAAC,GAAA,KAAQ,YAAA,CAAa,IAAI,OAAO;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,EAAE,MAAA,EAAQ,YAAA;AAAa,QAChCO,qBAAAA,CAAmC;AAAA,MACrC,QAAA,EAAUC,kBAAY,MAAe,CAAA;AAAA,MACrC,eAAe,EAAE,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,iBAAiB,EAAA;AAAG,KAC9D,CAAA;AAED,IAAA,MAAM,QAAA,GAAWb,iBAAAA;AAAA,MACf,OAAO,MAAA,KAAsC;AAC3C,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,YAAA,CAAa,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,WAAA,EAAa,MAAA,CAAO,aAAa,CAAA;AAAA,QAC7E,WAAW,aAAA,EAAe;AACxB,UAAA,aAAA,CAAc,QAAQ,MAAA,CAAO;AAAA,YAC3B,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,aAAa,MAAA,CAAO;AAAA,WACrB,CAAA;AAAA,QACH;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAc,aAAa;AAAA,KAC9B;AAEA,IAAA,MAAM,OAAA,GAAU,eAAA,IAAmB,aAAA,EAAe,OAAA,CAAQ,SAAA,IAAa,YAAA;AACvE,IAAA,MAAM,QAAQ,aAAA,IAAiB,SAAA;AAE/B,IAAA,MAAM,YAAA,GAAeK,cAAQ,MAA2B;AACtD,MAAA,IAAI,CAAC,QAAA,EAAU,YAAA,EAAc,OAAO,SAAS,EAAC;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAgB,QAAA,CAAS,YAAA;AAAA,QACzB,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,CAAA;AAElC,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,KAAA,EAAO,YAAA,EACtE,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQP,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBAEhFO,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EACnB,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASP,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC/C,WAAA,oBAAeA,cAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChD,CAAA;AAAA,wBAEAA,cAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAO,eAAAA,CAAC,MAAA,EAAA,EAAK,GAAA,EAAU,QAAA,EAAU,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,EAAU,IAAA,EAC1D,QAAA,EAAA;AAAA,0BAAAP,eAAC,OAAA,EAAA,EAAM,IAAA,EAAK,UAAU,GAAG,QAAA,CAAS,OAAO,CAAA,EAAG,CAAA;AAAA,0BAC5CO,gBAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,KAAA,oBACCP,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,OAAA;AAAA,gBACL,SAAA,EAAU,8FAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,4BAGFO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAP,eAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,uBAAA,EACjB,QAAA,EAAA,GAAA,CAAI,cAAc,gBAAA,EACrB,CAAA;AAAA,8BACAA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,uBAAA;AAAA,kBACH,IAAA,EAAK,UAAA;AAAA,kBACL,YAAA,EAAa,cAAA;AAAA,kBACb,WAAA,EAAa,IAAI,aAAA,CAAc,sBAAA;AAAA,kBAC/B,QAAA,EAAU,OAAA;AAAA,kBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,WAAA;AAAA,kBACvB,kBAAA,EAAkB,MAAA,CAAO,WAAA,GAAc,sBAAA,GAAyB,MAAA;AAAA,kBAC/D,GAAG,SAAS,aAAa;AAAA;AAAA,eAC5B;AAAA,cACC,MAAA,CAAO,WAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,sBAAA,EAAuB,SAAA,EAAU,0BAAA,EACpC,QAAA,EAAA,MAAA,CAAO,WAAA,CAAY,OAAA,EACtB;AAAA,aAAA,EAEJ,CAAA;AAAA,4BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAP,eAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,2BAAA,EACjB,QAAA,EAAA,GAAA,CAAI,cAAc,oBAAA,EACrB,CAAA;AAAA,8BACAA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,2BAAA;AAAA,kBACH,IAAA,EAAK,UAAA;AAAA,kBACL,YAAA,EAAa,cAAA;AAAA,kBACb,WAAA,EAAa,IAAI,aAAA,CAAc,0BAAA;AAAA,kBAC/B,QAAA,EAAU,OAAA;AAAA,kBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,eAAA;AAAA,kBACvB,kBAAA,EACE,MAAA,CAAO,eAAA,GAAkB,0BAAA,GAA6B,MAAA;AAAA,kBAEvD,GAAG,SAAS,iBAAiB;AAAA;AAAA,eAChC;AAAA,cACC,MAAA,CAAO,eAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,0BAAA,EAA2B,SAAA,EAAU,0BAAA,EACxC,QAAA,EAAA,MAAA,CAAO,eAAA,CAAgB,OAAA,EAC1B;AAAA,aAAA,EAEJ,CAAA;AAAA,4BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,OAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gBAAA,OAAA,oBACCA,eAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,2BAAA;AAAA,oBACV,KAAA,EAAM,4BAAA;AAAA,oBACN,IAAA,EAAK,MAAA;AAAA,oBACL,OAAA,EAAQ,WAAA;AAAA,oBACR,aAAA,EAAY,MAAA;AAAA,oBAEZ,QAAA,EAAA;AAAA,sCAAAP,cAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,YAAA;AAAA,0BACV,EAAA,EAAG,IAAA;AAAA,0BACH,EAAA,EAAG,IAAA;AAAA,0BACH,CAAA,EAAE,IAAA;AAAA,0BACF,MAAA,EAAO,cAAA;AAAA,0BACP,WAAA,EAAY;AAAA;AAAA,uBACd;AAAA,sCACAA,cAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,YAAA;AAAA,0BACV,IAAA,EAAK,cAAA;AAAA,0BACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,iBACF;AAAA,gBAED;AAAA,eAAA,EACH,CAAA;AAAA,cACC,0BAAUA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,eAAe,QAAA,EAAA,MAAA,EAAO;AAAA,aAAA,EAC/D;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;ACnMzB,SAAS,QAAA,CAAS;AAAA,EACvB,IAAA,EAAM,cAAA;AAAA,EACN,YAAA;AAAA,EACA,WAAA,GAAc,OAAA;AAAA,EACd,SAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIH,eAAmB,WAAW,CAAA;AACtE,EAAA,MAAM,MAAM,WAAA,EAAY;AAExB,EAAA,MAAM,cAAc,cAAA,IAAkB,YAAA;AAEtC,EAAA,MAAM,QAAA,GAAWJ,iBAAAA;AAAA,IACf,CAAC,MAAA,KAAqB;AACpB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,MACxB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAc,MAAA,qBAC7BO,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,MAC9B,SAAA,EAAU,6DAAA;AAAA,MAET,QAAA,EAAA;AAAA;AAAA,GACH;AAGF,EAAA,MAAM,WAAA,GAAc,EAAE,SAAA,EAAW,KAAA,EAAO,IAAA,EAAK;AAE7C,EAAA,QAAQ,WAAA;AAAa,IACnB,KAAK,OAAA;AACH,MAAA,uBACEA,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,iBAAA;AAAA,UACA,aAAA;AAAA,UACC,GAAG,UAAA;AAAA,UACJ,gBACE,cAAA,GAAiB,MAAA,GAAY,QAAQ,GAAA,CAAI,UAAA,CAAW,gBAAgB,iBAAiB,CAAA;AAAA,UAEvF,MAAA,EACE,cAAA,GAAiB,MAAA,mBACfO,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,GAAA,CAAI,UAAA,CAAW,aAAA;AAAA,YAAc,GAAA;AAAA,YAAE,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,UAAA,EAAY,QAAQ;AAAA,WAAA,EAC7E;AAAA;AAAA,OAGN;AAAA,IAGJ,KAAK,QAAA;AACH,MAAA,uBACEP,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,iBAAA;AAAA,UACC,GAAG,WAAA;AAAA,UACJ,MAAA,EACE,cAAA,GAAiB,MAAA,mBACfO,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,GAAA,CAAI,UAAA,CAAW,cAAA;AAAA,YAAe,GAAA;AAAA,YAAE,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,UAAA,EAAY,OAAO;AAAA,WAAA,EAC7E;AAAA;AAAA,OAGN;AAAA,IAGJ,KAAK,iBAAA;AACH,MAAA,uBACEP,cAAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,eAAe,aAAA,GAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAM,GAAI,MAAA;AAAA,UAC/D,GAAG,mBAAA;AAAA,UACJ,MAAA,EACE,cAAA,GAAiB,MAAA,mBAAYA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,EAAa,OAAO,CAAA,EAAE;AAAA;AAAA,OAErF;AAAA,IAGJ,KAAK,gBAAA;AACH,MAAA,uBACEA,cAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,OAAO,UAAA,IAAc,EAAA;AAAA,UACpB,GAAG,kBAAA;AAAA,UACJ,MAAA,EACE,cAAA,GAAiB,MAAA,mBAAYA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,EAAa,OAAO,CAAA,EAAE;AAAA;AAAA,OAErF;AAAA;AAGR;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AC9GhB,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,QAAQS,mBAAA,CAAS;AAAA,IACrB,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAA,EAAY,IAAI,CAAA;AAAA,IAC5C,SAAS,MAAM,MAAA,CAAO,GAAA,CAAkB,MAAA,CAAO,MAAM,UAAU,CAAA;AAAA,IAC/D,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AAED,EAAA,MAAM,eAAA,GAAkBhB,kBAAY,YAAY;AAC9C,IAAA,IAAI,KAAA,CAAM,MAAM,WAAA,EAAa;AAC3B,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,KAAA,CAAM,KAAK,WAAW,CAAA;AAC1D,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAA,CAAM,IAAA,EAAM,WAAW,CAAC,CAAA;AAE5B,EAAA,OAAOK,aAAAA,CAAQ,OAAO,EAAE,GAAG,KAAA,EAAO,iBAAgB,CAAA,EAAI,CAAC,KAAA,EAAO,eAAe,CAAC,CAAA;AAChF;ACZA,IAAM,MAAA,GAAS;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,UAAA,EACE;AAAA,GACJ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,CAAA;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,WAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,QAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,eAAA,EAAiB,SAAA;AAAA,IACjB,WAAA,EAAa,SAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,GAAA,EAAK;AAAA,GACP;AAAA,EACA,SAAA,EAAW;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,SAAA,EAAW;AAAA,GACb;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,SAAA,EAAW,QAAA;AAAA,IACX,OAAA,EAAS;AAAA;AAEb,CAAA;AAEO,SAAS,YAAA,CAAa;AAAA,EAC3B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,gBAAA;AAAA,EACR,WAAA,GAAc;AAChB,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,WAAA,EAAY;AACxC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,eAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,UAAA,GAAaJ,kBAAY,YAAY;AACzC,IAAA,IAAI,CAAC,MAAM,WAAA,EAAa;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AACpD,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,IACzC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,WAAW,CAAC,CAAA;AAEtB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEc,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAC3D,QAAA,EAAA;AAAA,sBAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,OAAM,EAAG,CAAA;AAAA,sBACzFA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,QAAO,EAAG,CAAA;AAAA,sBAC1FA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,QAAO,EAAG,CAAA;AAAA,sBACzFO,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAO,EACzC,QAAA,EAAA;AAAA,wBAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG,CAAA;AAAA,wBACnEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG,CAAA;AAAA,wBACnEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG;AAAA,OAAA,EACrE;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AACvB,IAAA,uBACEO,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAC3D,QAAA,EAAA;AAAA,sBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,MAAA,CAAO,OAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAChCA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,MAAA,CAAO,cAAc,QAAA,EAAA,iDAAA,EAA+C;AAAA,KAAA,EAChF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEO,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAC3D,QAAA,EAAA;AAAA,oBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,MAAA,CAAO,OAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAChCA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,MAAA,CAAO,aAAc,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,oBAE3CO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,aAAA,EACjB,QAAA,EAAA;AAAA,sBAAAP,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAQ,IAAA;AAAA,UACR,OAAO,IAAA,CAAK,WAAA;AAAA,UACZ,OAAO,MAAA,CAAO,SAAA;AAAA,UACd,OAAA,EAAS,CAAC,CAAA,KAAO,CAAA,CAAE,OAA4B,MAAA;AAAO;AAAA,OACxD;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,UAAA;AAAA,UACT,KAAA,EAAO;AAAA,YACL,GAAG,MAAA,CAAO,UAAA;AAAA,YACV,GAAI,MAAA,GAAS,MAAA,CAAO,gBAAA,GAAmB;AAAC,WAC1C;AAAA,UAEC,mBAAS,SAAA,GAAY;AAAA;AAAA;AACxB,KAAA,EACF,CAAA;AAAA,oBAEAO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,QAAA,EACjB,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,IAAA,EACjB,QAAA,EAAA;AAAA,wBAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,SAAA,EAAY,eAAK,aAAA,EAAc,CAAA;AAAA,wBACnDA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,WAAW,QAAA,EAAA,gBAAA,EAAc;AAAA,OAAA,EAC/C,CAAA;AAAA,sBACAO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,IAAA,EACjB,QAAA,EAAA;AAAA,wBAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,SAAA,EAAY,eAAK,kBAAA,EAAmB,CAAA;AAAA,wBACxDA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,WAAW,QAAA,EAAA,WAAA,EAAS;AAAA,OAAA,EAC1C,CAAA;AAAA,sBACAO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,IAAA,EACjB,QAAA,EAAA;AAAA,wBAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,SAAA,EAAY,eAAK,gBAAA,EAAiB,CAAA;AAAA,wBACtDA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,WAAW,QAAA,EAAA,SAAA,EAAO;AAAA,OAAA,EACxC;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;ACnLpB,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,OAAOS,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAA,EAAY,OAAO,CAAA;AAAA,IAC/C,SAAS,MAAM,MAAA,CAAO,GAAA,CAAuB,MAAA,CAAO,MAAM,aAAa,CAAA;AAAA,IACvE,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AACH;ACFA,IAAM,YAAA,GAA8E;AAAA,EAClF,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,SAAA,EAAW,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC7C,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA;AACnC,CAAA;AAEA,IAAM,kBAAA,GAA0F;AAAA,EAC9F,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,MAAA,EAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA;AAClC,CAAA;AAEA,IAAMC,OAAAA,GAAS;AAAA,EACb,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EACE;AAAA,GACJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK,MAAA;AAAA,IACL,OAAA,EAAS,WAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,cAAA,EAAgB,UAAA;AAAA,IAChB,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,EAAA,EAAI;AAAA,IACF,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW,MAAA;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,aAAA,EAAe,WAAA;AAAA,IACf,aAAA,EAAe,QAAA;AAAA,IACf,YAAA,EAAc,mBAAA;AAAA,IACd,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,EAAA,EAAI;AAAA,IACF,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc,mBAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO,CAAC,EAAA,EAAY,KAAA,MAAkC;AAAA,IACpD,OAAA,EAAS,cAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,eAAA,EAAiB,EAAA;AAAA,IACjB;AAAA,GACF,CAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW,QAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU;AAAA;AAEd,CAAA;AAEA,SAAS,WAAW,OAAA,EAAyB;AAC3C,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,OAAO,CAAA,CAAE,mBAAmB,KAAA,CAAA,EAAW;AAAA,MACrD,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEO,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,KAAA,EAAM,EAAuB;AACtE,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,gBAAA,EAAiB;AAE7C,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGG,OAAAA,CAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAChE,QAAA,EAAA;AAAA,sBAAAV,eAAC,KAAA,EAAA,EAAI,KAAA,EAAOU,QAAO,MAAA,EACjB,QAAA,kBAAAV,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAGU,QAAO,QAAA,EAAU,KAAA,EAAO,SAAS,MAAA,EAAQ,MAAA,IAAU,CAAA,EACtE,CAAA;AAAA,sBACAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAO,EAC3B,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,sBACdA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,QAAA,EAAU,OAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,MAAA;AAAO,SAAA;AAAA,QAD5E;AAAA,OAGR,CAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGG,OAAAA,CAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAChE,QAAA,EAAA;AAAA,oBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAOU,OAAAA,CAAO,MAAA,EACjB,QAAA,kBAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,KAAA,EAAO,QAAA,EAAA,kBAAA,EAAgB,CAAA,EAC3C,CAAA;AAAA,IAEC,wBACCH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAOG,QAAO,UAAA,EACjB,QAAA,EAAA;AAAA,sBAAAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,OAAAA,CAAO,WAAA,EAAa,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,wBACxBV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,YAAA,EAAe,eAAK,aAAA,EAAc;AAAA,OAAA,EAC/D,CAAA;AAAA,sBACAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,QAAO,WAAA,EAAa,QAAA,EAAA;AAAA,QAAA,aAAA;AAAA,wBACpBV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,YAAA,EAAe,eAAK,kBAAA,EAAmB;AAAA,OAAA,EACxE,CAAA;AAAA,sBACAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,QAAO,WAAA,EAAa,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,wBACtBV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,YAAA,EAAe,eAAK,gBAAA,EAAiB;AAAA,OAAA,EACpE,CAAA;AAAA,sBACAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,QAAO,WAAA,EAAa,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,wBACtBV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,YAAA,EAAe,eAAK,YAAA,EAAa;AAAA,OAAA,EAChE;AAAA,KAAA,EACF,CAAA;AAAA,oBAGFH,eAAAA,CAAC,OAAA,EAAA,EAAM,KAAA,EAAOG,QAAO,KAAA,EACnB,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAAO,eAAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBAC3BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,MAAA,EAAI;AAAA,OAAA,EAC5B,CAAA,EACF,CAAA;AAAA,sBACAH,gBAAC,OAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,CAAA,CAAC,MAAM,SAAA,IAAa,IAAA,CAAK,UAAU,MAAA,KAAW,CAAA,qBAC9CP,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,QAAG,OAAA,EAAS,CAAA,EAAG,OAAOU,OAAAA,CAAO,QAAA,EAAU,+BAExC,CAAA,EACF,CAAA;AAAA,QAED,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAS;AAC7B,UAAA,MAAM,EAAA,GAAK,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACnC,UAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,IAAA,CAAK,YAAY,CAAA;AAC/C,UAAA,uBACEH,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,eAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,EAAA,EAAK,eAAK,aAAA,EAAc,CAAA;AAAA,4BAC1CV,cAAAA,CAAC,IAAA,EAAA,EAAG,OAAOU,OAAAA,CAAO,EAAA,EAChB,0BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,KAAA,CAAM,GAAG,EAAA,EAAI,EAAA,CAAG,KAAK,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,QAAO,CAAA,EAC3D,CAAA;AAAA,4BACAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAChB,QAAA,kBAAAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,QAAO,KAAA,CAAM,EAAA,CAAG,EAAA,EAAI,EAAA,CAAG,KAAK,CAAA,EACtC,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,YAAA;AAAA,cACL,IAAA,CAAK,YAAA,IAAgB,IAAA,IAAQ,CAAA,GAAA,EAAM,KAAK,YAAY,CAAA,CAAA;AAAA,aAAA,EACvD,CAAA,EACF,CAAA;AAAA,4BACAV,eAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,QAAO,EAAA,EAAK,QAAA,EAAA,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA,EAAE;AAAA,WAAA,EAAA,EAX3C,KAAK,EAYd,CAAA;AAAA,QAEJ,CAAC;AAAA,OAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;;;AClMrB,SAAS,YAAA,CAAa,QAAgB,QAAA,EAA0B;AACrE,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,KAAA,CAAA,EAAW;MACtC,KAAA,EAAO,UAAA;AACP,MAAA,QAAA;MACA,qBAAA,EAAuB,CAAA;MACvB,qBAAA,EAAuB;KACxB,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,GAAG,CAAA;EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAA,CAAK,SAAS,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACjD,EAAA;AACF;ACbO,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,OAAOD,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,OAAO,CAAA;AAAA,IAC9C,SAAS,MAAM,MAAA,CAAO,GAAA,CAAmB,MAAA,CAAO,MAAM,KAAK;AAAA,GAC5D,CAAA;AACH;ACNO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,OAAOA,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,cAAc,CAAA;AAAA,IACrD,SAAS,MAAM,MAAA,CAAO,GAAA,CAAsB,MAAA,CAAO,MAAM,YAAY,CAAA;AAAA,IACrE,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AACH;ACUO,SAAS,YAAY,OAAA,EAA8B;AACxD,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,WAAWjB,sBAAAA,CAAY;AAAA,IAC3B,UAAA,EAAY,CAAC,MAAA,KACX,MAAA,CAAO,KAAuB,MAAA,CAAO,KAAA,CAAM,UAAU,MAAM,CAAA;AAAA,IAC7D,SAAA,EAAW,CAAC,IAAA,KAAS;AAEnB,MAAA,IACE,OAAA,EAAS,iBAAA,KAAsB,KAAA,IAC/B,IAAA,CAAK,GAAA,IACL,KAAK,QAAA,KAAa,iBAAA,IAClB,IAAA,CAAK,QAAA,KAAa,UAAA,EAClB;AACA,QAAA,MAAA,CAAO,QAAA,CAAS,OAAO,IAAA,CAAK,GAAA;AAAA,MAC9B;AACA,MAAA,OAAA,EAAS,YAAY,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,QAAA,GAAWC,iBAAAA;AAAA,IACf,CAAC,MAAA,KAA2B;AAC1B,MAAA,QAAA,CAAS,OAAO,MAAM,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,OAAOK,aAAAA,CAAQ,OAAO,EAAE,GAAG,QAAA,EAAU,UAAS,CAAA,EAAI,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA;AACxE;AC9CO,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOW,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,WAAW,CAAA;AAAA,IAClD,SAAS,MAAM,MAAA,CAAO,GAAA,CAAyB,MAAA,CAAO,MAAM,SAAS;AAAA,GACtE,CAAA;AACH;;;ACXA,IAAM,YAAA,GAAe,uCAAA;AACrB,IAAM,gBAAA,GAAmB,GAAG,YAAY,CAAA,kCAAA,CAAA;AACxC,IAAM,eAAA,GAAkB,GAAG,YAAY,CAAA,iCAAA,CAAA;AAEvC,IAAI,WAAA,GAAoC,IAAA;AAExC,SAAS,QAAQ,IAAA,EAAoB;AACnC,EAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,WAAA,EAAc,IAAI,IAAI,CAAA,EAAG;AACpD,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC1C,EAAA,IAAA,CAAK,GAAA,GAAM,YAAA;AACX,EAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAChC;AAEA,SAAS,WAAW,GAAA,EAA4B;AAC9C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,MAAA,GAAS,MAAM,OAAA,EAAQ;AAC9B,IAAA,MAAA,CAAO,UAAU,MACf,MAAA;AAAA,MACE,IAAI,KAAA;AAAA,QACF,CAAA,iCAAA,EAAoC,GAAG,CAAA,mDAAA,EACe,YAAY,CAAA,8CAAA;AAAA;AAEpE,KACF;AACF,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;AAEO,SAAS,eAAA,GAAiC;AAC/C,EAAA,IAAI,aAAa,OAAO,WAAA;AAExB,EAAA,WAAA,GAAA,CAAe,YAAY;AACzB,IAAA,OAAA,CAAQ,gBAAgB,CAAA;AACxB,IAAA,MAAM,WAAW,eAAe,CAAA;AAAA,EAClC,CAAA,GAAG,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AAElB,IAAA,WAAA,GAAc,IAAA;AACd,IAAA,MAAM,GAAA;AAAA,EACR,CAAC,CAAA;AAED,EAAA,OAAO,WAAA;AACT;AChCO,SAAS,sBAAA,CAAuB;AAAA,EACrC,MAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,WAAA,GAAcE,aAAO,KAAK,CAAA;AAEhC,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,YAAY,OAAA,EAAS;AACzB,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAEtB,IAAA,eAAA,EAAgB,CACb,KAAK,MAAM;AACV,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,IAAI,OAAO,MAAA,CAAO,iBAAA,KAAsB,WAAA,EAAa;AACnD,UAAA,OAAA,GAAU,IAAI,KAAA,CAAM,mCAAmC,CAAC,CAAA;AACxD,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,OAAO,iBAAA,CAAkB;AAAA,UAC3B,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,qBAAqB,MAAA,CAAO,mBAAA;AAAA,UAC5B,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,kBAAkB,MAAA,CAAO,gBAAA;AAAA,UACzB,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,WAAW,MAAA,CAAO;AAAA,SACnB,CAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AAErB,QAAA,OAAA,IAAU;AAAA,MACZ,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,MAAA,OAAA,GAAU,IAAI,KAAA,CAAM,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,6BAA6B,CAAC,CAAA;AAAA,IACzF,CAAC,CAAA;AAAA,EACL,GAAG,CAAC,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AAE1C,EAAA,uBAAOC,cAAAA,CAAC,KAAA,EAAA,EAAI,EAAA,EAAI,WAAA,EAAa,CAAA;AAC/B;ACnDO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAQ,OAAA,EAAQ,EAAuB;AACrE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIH,eAAwB,IAAI,CAAA;AAEtD,EAAA,uBACEG,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,YAAA,EAAc,SAAS,OAAA,EACjC,QAAA,kBAAAO,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,SAAA,EAAW,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EACvD,QAAA,EAAA;AAAA,oBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,UAAA,EAAY,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,IAE9B,KAAA,oBAASA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,SAAA,EAAU,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAElEA,cAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,WAAA,EAAY,kBAAA;AAAA,QACZ,OAAA,EAAS,CAAC,GAAA,KAAQ,QAAA,CAAS,IAAI,OAAO;AAAA;AAAA,KACxC;AAAA,oBAEAA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,cAAc,QAAA,EAAA,yDAAA,EAAuD,CAAA;AAAA,oBAE/EA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,QAAA,EAE5D;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,IAAM,YAAA,GAA8B;AAAA,EAClC,QAAA,EAAU,OAAA;AAAA,EACV,KAAA,EAAO,CAAA;AAAA,EACP,eAAA,EAAiB,iBAAA;AAAA,EACjB,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB,QAAA;AAAA,EAChB,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA;AAEA,IAAM,SAAA,GAA2B;AAAA,EAC/B,eAAA,EAAiB,MAAA;AAAA,EACjB,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU,OAAA;AAAA,EACV,KAAA,EAAO,KAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,UAAA,GAA4B;AAAA,EAChC,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,YAAA;AAAA,EACR,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,YAAA,GAA8B;AAAA,EAClC,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,YAAA,GAA8B;AAAA,EAClC,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,WAAA,GAA6B;AAAA,EACjC,OAAA,EAAS,OAAA;AAAA,EACT,KAAA,EAAO,MAAA;AAAA,EACP,SAAA,EAAW,MAAA;AAAA,EACX,OAAA,EAAS,MAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,eAAA,EAAiB,SAAA;AAAA,EACjB,KAAA,EAAO,SAAA;AAAA,EACP,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA;ACpFA,IAAMU,OAAAA,GAAS;AAAA,EACb,YAAA,EAAc;AAAA,IACZ,SAAA,EAAW,MAAA;AAAA,IACX,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,YAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,OAAA,EAAS,OAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,UAAA,EAAY;AAAA;AAEhB,CAAA;AAEO,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAS,EAA4B;AACxE,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,GAAG,OAAO,IAAA;AAE/C,EAAA,uBACEV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,cACf,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,sBACtBH,eAAAA,CAAC,IAAA,EAAA,EAAW,KAAA,EAAOG,QAAO,WAAA,EACxB,QAAA,EAAA;AAAA,oBAAAV,eAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,QAAO,SAAA,EAAW,aAAA,EAAY,QAAO,QAAA,EAAA,QAAA,EAElD,CAAA;AAAA,IACC;AAAA,GAAA,EAAA,EAJM,CAKT,CACD,CAAA,EACH,CAAA;AAEJ;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AClCjC,IAAM,cAAA,GAA0D;AAAA,EAC9D,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU;AACZ,CAAA;AAEA,IAAMA,OAAAA,GAAS;AAAA,EACb,IAAA,EAAM,CAAC,aAAA,MAA2C;AAAA,IAChD,MAAA,EAAQ,gBAAgB,mBAAA,GAAsB,mBAAA;AAAA,IAC9C,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,QAAA,EAAU;AAAA,GACZ,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,QAAA,EAAU,UAAA;AAAA,IACV,GAAA,EAAK,OAAA;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,kBAAA;AAAA,IACX,eAAA,EAAiB,SAAA;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAA,EAAS,UAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,MAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,UAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,aAAA,EAAe;AAAA,IACb,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,YAAA,EAAc,CAAC,aAAA,MAA2C;AAAA,IACxD,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,gBAAgB,mBAAA,GAAsB,MAAA;AAAA,IAC9C,eAAA,EAAiB,gBAAgB,SAAA,GAAY,SAAA;AAAA,IAC7C,KAAA,EAAO,gBAAgB,SAAA,GAAY,SAAA;AAAA,IACnC,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,MAAA,EAAQ,gBAAgB,SAAA,GAAY,SAAA;AAAA,IACpC,UAAA,EAAY;AAAA,GACd;AACF,CAAA;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAOG,OAAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAClC,QAAA,EAAA;AAAA,IAAA,aAAA,oBAAiBV,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,OAAAA,CAAO,cAAc,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,oBAEhEV,cAAAA,CAAC,IAAA,EAAA,EAAG,OAAOU,OAAAA,CAAO,QAAA,EAAW,eAAK,IAAA,EAAK,CAAA;AAAA,IACtC,IAAA,CAAK,+BAAeV,cAAAA,CAAC,OAAE,KAAA,EAAOU,OAAAA,CAAO,eAAA,EAAkB,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY,CAAA;AAAA,oBAEzEH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAOG,QAAO,QAAA,EACjB,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,OAAAA,CAAO,WAAA,EAAc,uBAAa,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA,EAAE,CAAA;AAAA,sBAC3EV,eAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,QAAO,aAAA,EAAgB,QAAA,EAAA,cAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,EAAE;AAAA,KAAA,EACpE,CAAA;AAAA,IAEC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA,oBAAKV,cAAAA,CAAC,kBAAA,EAAA,EAAmB,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,CAAA;AAAA,oBAE3FA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,QAC5B,UAAU,aAAA,IAAiB,iBAAA;AAAA,QAC3B,KAAA,EAAO;AAAA,UACL,GAAGU,OAAAA,CAAO,YAAA,CAAa,aAAa,CAAA;AAAA,UACpC,GAAI,qBAAqB,CAAC,aAAA,GAAgB,EAAE,OAAA,EAAS,GAAA,KAAQ;AAAC,SAChE;AAAA,QAEC,0BAAgB,cAAA,GAAiB;AAAA;AAAA;AACpC,GAAA,EACF,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AC9F1B,IAAMA,OAAAA,GAAS;AAAA,EACb,IAAA,EAAM,CAAC,OAAA,MAAoC;AAAA,IACzC,OAAA,EAAS,MAAA;AAAA,IACT,mBAAA,EAAqB,UAAU,OAAO,CAAA,MAAA,CAAA;AAAA,IACtC,GAAA,EAAK,MAAA;AAAA,IACL,UAAA,EACE;AAAA,GACJ,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,eAAA,EAAiB,oBAAA;AAAA,IACjB,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO,KAAA;AAAA,IACP,SAAA,EAAW,MAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,cAAA,EAAgB,eAAA;AAAA,IAChB,OAAA,EAAS,OAAA;AAAA,IACT,YAAA,EAAc,mBAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY,GAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,WAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,WAAA,EAAa;AAAA,IACX,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,mBAAA;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW;AAAA;AAEf,CAAA;AAMA,IAAM,eAAA,GAAuD;AAAA,EAC3D,MAAA,EAAQ,mBAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAEA,IAAM,cAAA,GAAsD;AAAA,EAC1D,MAAA,EAAQ,WAAA;AAAA,EACR,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,WAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,uBACEV,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAOU,OAAAA,CAAO,OAAA,EAAS,SAAS,OAAA,EACnC,QAAA,kBAAAH,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAOG,QAAO,KAAA,EAAO,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAC1D,QAAA,EAAA;AAAA,oBAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,YAAY,QAAA,EAAA,uBAAA,EAAqB,CAAA;AAAA,oBACnDV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,OAAM,EAChE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,sBACdO,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,QAClC,QAAA,EAAU,SAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,KAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAS,WAAA;AAAA,UACT,MAAA,EAAQ,mBAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,eAAA,EAAiB,MAAA;AAAA,UACjB,MAAA,EAAQ,YAAY,aAAA,GAAgB,SAAA;AAAA,UACpC,QAAA,EAAU,MAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,SAAA;AAAA,UACP,UAAA,EAAY;AAAA,SACd;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAP,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAO,EAClD,QAAA,EAAA,cAAA,CAAe,CAAA,CAAE,QAAQ,CAAA,EAC5B,CAAA;AAAA,0BACAA,eAAC,MAAA,EAAA,EAAM,QAAA,EAAA,eAAA,CAAgB,EAAE,QAAQ,CAAA,IAAK,EAAE,QAAA,EAAS;AAAA;AAAA,OAAA;AAAA,MAtB5C,CAAA,CAAE;AAAA,KAwBV,CAAA,EACH,CAAA;AAAA,oBACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAOU,OAAAA,CAAO,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,QAAA,EAEnE;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAMA,IAAME,eAAAA,GAA0D;AAAA,EAC9D,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU;AACZ,CAAA;AAEA,SAAS,aAAA,CAAc,EAAE,IAAA,EAAM,OAAA,EAAQ,EAAoD;AACzF,EAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AAEzB,EAAA,uBACEZ,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAOU,OAAAA,CAAO,OAAA,EAAS,SAAS,OAAA,EACnC,QAAA,kBAAAH,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAOG,QAAO,KAAA,EAAO,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAC1D,QAAA,EAAA;AAAA,oBAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,YAAY,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,oBAC7CH,eAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAOG,QAAO,aAAA,EAAe,QAAA,EAAA;AAAA,MAAA,4CAAA;AAAA,sBACYV,cAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,MAAM,IAAA,EAAK;AAAA,KAAA,EACrE,CAAA;AAAA,oBAGAO,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,QAAA;AAAA,UACX,OAAA,EAAS,MAAA;AAAA,UACT,eAAA,EAAiB,SAAA;AAAA,UACjB,YAAA,EAAc,KAAA;AAAA,UACd,YAAA,EAAc;AAAA,SAChB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAP,cAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,UAAU,MAAA,EAAQ,UAAA,EAAY,KAAK,KAAA,EAAO,SAAA,IACrD,QAAA,EAAA,IAAA,CAAK,IAAA,GAAO,aAAa,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,GAAI,EAAA,EACpE,CAAA;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,QAAQ,KAAA,EAAO,SAAA,IACpC,QAAA,EAAA,IAAA,CAAK,IAAA,EAAM,WACPY,eAAAA,CAAe,IAAA,CAAK,KAAK,QAAuC,CAAA,IAAK,KACtE,EAAA,EACN;AAAA;AAAA;AAAA,KACF;AAAA,IAGC,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA,oBAChDL,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,sBAAAP,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,MAAA;AAAA,YACV,UAAA,EAAY,GAAA;AAAA,YACZ,KAAA,EAAO,SAAA;AAAA,YACP,YAAA,EAAc;AAAA,WAChB;AAAA,UACD,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,MACC,MAAA,CAAO,QAAQ,WAAW,CAAA,CACxB,OAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,EACnB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,qBACfO,eAAAA,CAAC,KAAA,EAAA,EAAc,KAAA,EAAOG,OAAAA,CAAO,aAAA,EAC3B,QAAA,EAAA;AAAA,wBAAAV,eAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,OAAAA,CAAO,eAAA,EACjB,cAAI,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,EACtE,CAAA;AAAA,wBACAV,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,OAAAA,CAAO,iBAAkB,QAAA,EAAA,KAAA,EAAM;AAAA,OAAA,EAAA,EAJpC,GAKV,CACD;AAAA,KAAA,EACL,CAAA;AAAA,IAID,IAAA,CAAK,wCACJV,cAAAA,CAAC,SAAI,KAAA,EAAOU,OAAAA,CAAO,YAAA,EAAe,QAAA,EAAA,IAAA,CAAK,oBAAA,EAAqB,CAAA;AAAA,oBAG9DV,cAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,MAAA;AAAA,UACV,KAAA,EAAO,SAAA;AAAA,UACP,MAAA,EAAQ;AAAA,SACV;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAGD;AAAA,oBAEAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAOU,OAAAA,CAAO,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,OAAA,EAEnE;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAMO,SAAS,YAAA,CAAa;AAAA,EAC3B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,YAAA,KAAiB,QAAA,EAAS;AAC1D,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,eAAA,EAAgB;AAC/C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,mBAAA,EAAoB;AAChD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIb,eAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAA6B,IAAI,CAAA;AACvE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhE,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,eAAA,KAAoB,WAAA,CAAY;AAAA,IAC3D,iBAAA,EAAmB,IAAA;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,IAAI,IAAA,CAAK,aAAa,iBAAA,EAAmB;AACvC,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,KAAa,UAAA,IAAc,KAAK,YAAA,EAAc;AAC5D,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,EAAgB,QAAA,KAAkC;AACpE,IAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,WAAW,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAsB;AAC1C,IAAA,IAAI,cAAc,MAAA,KAAW,IAAA,CAAK,EAAA,IAAM,YAAA,CAAa,WAAW,QAAA,EAAU;AAE1E,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACrC,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAW,SAAA,GAAY,CAAC,CAAA,EAAG,QAAA;AACjC,IAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,IAAI,QAAA,EAAU,UAAA,EAAY,WAAW,CAAA;AAAA,EAC/D,CAAA;AAEA,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,uBACEG,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG,GAAG,OAAM,EACnE,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACvCH,eAAAA,CAAC,KAAA,EAAA,EAAY,KAAA,EAAOG,QAAO,YAAA,EACzB,QAAA,EAAA;AAAA,sBAAAV,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ;AAAA;AACV;AAAA,OACF;AAAA,sBACAV,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ;AAAA;AACV;AAAA,OACF;AAAA,sBACAV,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,sBACAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,WAAW,MAAA,EAAO,EAC7B,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,sBACdA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ;AAAA;AACV,SAAA;AAAA,QALK;AAAA,OAOR,CAAA,EACH,CAAA;AAAA,sBACAV,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,MAAA;AAAA,YACP,MAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAW;AAAA;AACb;AAAA;AACF,KAAA,EAAA,EA1CQ,CA2CV,CACD,CAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,WAAA,GAAc,KAAA,GAAQ,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,IAAI,EAAC;AAEpF,EAAA,uBACEH,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAR,eAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG,GAAG,KAAA,EAAM,EACnE,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,MAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,KAAW,IAAA,CAAK,EAAA,IAAM,aAAa,MAAA,KAAW,QAAA;AAElF,MAAA,uBACEV,cAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UAEC,IAAA;AAAA,UACA,aAAA;AAAA,UACA,iBAAA,EAAmB,eAAA;AAAA,UACnB,QAAA,EAAU;AAAA,SAAA;AAAA,QAJL,IAAA,CAAK;AAAA,OAKZ;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IAEC,qBAAqB,WAAA,IAAe,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,qBACnEA,cAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,SAAA,EAAW,eAAA;AAAA,QACX,UAAU,CAAC,QAAA,KAAa,UAAA,CAAW,WAAA,CAAY,IAAI,QAAQ,CAAA;AAAA,QAC3D,SAAS,MAAM;AACb,UAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,UAAA,cAAA,CAAe,IAAI,CAAA;AAAA,QACrB;AAAA;AAAA,KACF;AAAA,IAGD,YAAA,oBAAgBA,cAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,cAAc,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,CAAA,EAAG,CAAA;AAAA,IAEzF,YAAA,EAAc,gCACbA,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,QAAQ,YAAA,CAAa,YAAA;AAAA,QACrB,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI;AAAA;AAAA;AACrC,GAAA,EAEJ,CAAA;AAEJ;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;ACna3B,IAAM,YAAA,GAA8B;AAAA,EAClC,OAAA,EAAS,WAAA;AAAA,EACT,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,MAAA;AAAA,EACR,eAAA,EAAiB,SAAA;AAAA,EACjB,KAAA,EAAO,SAAA;AAAA,EACP,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,wBAAA;AAAA,EACZ,UAAA,EACE;AACJ,CAAA;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,MAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,EAAE,UAAU,SAAA,EAAU,GAAI,YAAY,EAAE,iBAAA,EAAmB,MAAM,CAAA;AAEvE,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAG,YAAA;AAAA,QACH,GAAG,KAAA;AAAA,QACH,GAAI,YAAY,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,aAAA,KAAkB;AAAC,OAC7D;AAAA,MACA,QAAA,EAAU,SAAA;AAAA,MACV,SAAS,MAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AAAA,MAExD,QAAA,EAAA,SAAA,GAAY,eAAgB,QAAA,IAAY;AAAA;AAAA,GAC3C;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;ACnCtB,SAAS,mBAAmB,OAAA,EAAqC;AACtE,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOR,sBAAAA,CAAY;AAAA,IACjB,UAAA,EAAY,CAAC,MAAA,KACX,MAAA,CAAO,KAA4B,MAAA,CAAO,KAAA,CAAM,iBAAiB,MAAM,CAAA;AAAA,IACzE,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACwBA,IAAMqB,gBAAAA,GAAuD;AAAA,EAC3D,MAAA,EAAQ,mBAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAEA,IAAMC,eAAAA,GAAsD;AAAA,EAC1D,MAAA,EAAQ,WAAA;AAAA,EACR,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,WAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAEA,IAAM,eAAA,GAAkB,kBAAA;AAIjB,SAAS,YAAA,CAAa;AAAA,EAC3B,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA4C;AAC1C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIjB,eAA0B,MAAM,CAAA;AAC5D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAqC,IAAI,CAAA;AACzF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAsC,IAAI,CAAA;AACtF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACnE,EAAA,MAAM,wBAAA,GAA2Bc,aAAO,KAAK,CAAA;AAC7C,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,SAAA,EAAU;AAGtC,EAAA,MAAM,MAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GACd,IAAI,eAAA,CAAgB,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAC1C,IAAI,eAAA,EAAgB;AAC1B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAClC,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAC3D,EAAA,MAAM,kBAAA,GAAqB,CAAC,EAAE,UAAA,IAAc,kBAAA,CAAA;AAG5C,EAAA,MAAM;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,SAAA,EAAW;AAAA,MACT,mBAAA,EAAoB;AAExB,EAAA,MAAM,SAAA,GAAY,gBAAgB,EAAC;AAEnC,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,kBAAA,EAAoB;AACxB,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,SAAA,CAAU,mBAAmB,CAAA;AAAA,IAC/B,CAAA,MAAA,IAAW,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,WAAW,mBAAA,EAAqB;AACjE,MAAA,SAAA,CAAU,OAAO,CAAA;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,gBAAA,EAAkB,UAAU,MAAA,EAAQ,MAAA,EAAQ,kBAAkB,CAAC,CAAA;AAGnE,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,SAAA,KAAc,WAAA,CAAY;AAAA,IACtD,iBAAA,EAAmB,KAAA;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,IAAI,IAAA,CAAK,QAAA,KAAa,UAAA,IAAc,IAAA,CAAK,YAAA,EAAc;AACrD,QAAA,iBAAA,CAAkB,KAAK,YAAY,CAAA;AACnC,QAAA,SAAA,CAAU,YAAY,CAAA;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,aAAa,iBAAA,EAAmB;AACvC,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA,SAAA,GAAY,IAAI,CAAA;AAChB,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,KAAK,GAAA,EAAK;AACZ,QAAA,SAAA,CAAU,aAAa,CAAA;AACvB,QAAA,MAAA,CAAO,QAAA,CAAS,OAAO,IAAA,CAAK,GAAA;AAC5B,QAAA;AAAA,MACF;AAEA,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAA,MAAM,QAAA,GAAWN,iBAAAA;AAAA,IACf,CAAC,QAAA,KAAkC;AACjC,MAAA,mBAAA,CAAoB,QAAQ,CAAA;AAC5B,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,MAAM,UAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GAAI,EAAA;AAEvE,MAAA,UAAA,CAAW;AAAA,QACT,QAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,iBAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA,EAAY,UAAA;AAAA,QACZ,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,UAAU,iBAAiB;AAAA,GAC5D;AAGA,EAAA,MAAM,EAAE,MAAA,EAAQ,eAAA,EAAgB,GAAI,kBAAA,CAAmB;AAAA,IACrD,SAAA,EAAW,CAAC,IAAA,KAAgC;AAC1C,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,KAAW,WAAA,IAAe,KAAK,MAAA,KAAW,mBAAA;AACnE,MAAA,SAAA,CAAU,WAAA,GAAc,YAAY,OAAO,CAAA;AAE3C,MAAA,MAAM,QAAA,GAA6B;AAAA,QACjC,QAAA,EAAU,UAAA;AAAA,QACV,GAAI,gBAAgB;AAAC,OACvB;AACA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,SAAA,GAAY,QAAQ,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,IAAI,KAAA,CAAM,uBAAuB,CAAC,CAAA;AAAA,MAC9C;AAAA,IACF,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAAM,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,kBAAA,IAAsB,wBAAA,CAAyB,OAAA,IAAW,eAAA,EAAiB;AAChF,IAAA,wBAAA,CAAyB,OAAA,GAAU,IAAA;AACnC,IAAA,mBAAA,CAAoB,UAAU,CAAA;AAC9B,IAAA,SAAA,CAAU,YAAY,CAAA;AACtB,IAAA,eAAA,CAAgB,EAAE,EAAA,EAAI,MAAA,CAAO,UAAU,CAAA,EAAG,mBAAA,EAAqB,oBAAqB,CAAA;AAAA,EACtF,GAAG,CAAC,kBAAA,EAAoB,iBAAiB,UAAA,EAAY,kBAAA,EAAoB,eAAe,CAAC,CAAA;AAGzF,EAAA,MAAM,cAAA,GAAiBN,iBAAAA;AAAA,IACrB,CAAC,GAAA,KAAe;AACd,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAGA,EAAA,MAAM,gBAAA,GAAmBK,cAAQ,MAAM;AACrC,IAAA,OAAO,SAAS,qBAAA,GAAwB;AACtC,MAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,kBAAA,EAAoB,OAAO,IAAA;AAEzD,MAAA,uBACEE,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,OAAM,EAChE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,sBACdO,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,KAAA,EAAO,MAAA;AAAA,YACP,OAAA,EAAS,WAAA;AAAA,YACT,MAAA,EAAQ,mBAAA;AAAA,YACR,YAAA,EAAc,KAAA;AAAA,YACd,eAAA,EAAiB,gBAAA,KAAqB,CAAA,CAAE,QAAA,GAAW,SAAA,GAAY,MAAA;AAAA,YAC/D,MAAA,EAAQ,YAAY,aAAA,GAAgB,SAAA;AAAA,YACpC,QAAA,EAAU,MAAA;AAAA,YACV,UAAA,EAAY,GAAA;AAAA,YACZ,KAAA,EAAO,SAAA;AAAA,YACP,UAAA,EAAY;AAAA,WACd;AAAA,UACA,OAAA,EAAS,MAAM,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,UAClC,QAAA,EAAU,SAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAO,EAClD,QAAA,EAAAc,eAAAA,CAAe,CAAA,CAAE,QAAQ,CAAA,EAC5B,CAAA;AAAA,4BACAd,cAAAA,CAAC,MAAA,EAAA,EAAM,UAAAa,gBAAAA,CAAgB,CAAA,CAAE,QAAQ,CAAA,EAAE;AAAA;AAAA,SAAA;AAAA,QAtB9B,CAAA,CAAE;AAAA,OAwBV,CAAA,EACH,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF,GAAG,CAAC,SAAA,EAAW,kBAAkB,SAAA,EAAW,QAAA,EAAU,kBAAkB,CAAC,CAAA;AAGzE,EAAA,MAAM,eAAA,GAAkBf,cAAQ,MAAM;AACpC,IAAA,OAAO,SAAS,oBAAA,GAAuB;AACrC,MAAA,IAAI,CAAC,YAAA,IAAgB,YAAA,CAAa,QAAA,KAAa,mBAAmB,OAAO,IAAA;AAEzE,MAAA,MAAM,cAAc,YAAA,CAAa,WAAA;AACjC,MAAA,MAAM,OAAO,YAAA,CAAa,IAAA;AAC1B,MAAA,MAAM,SAAU,YAAA,CAAqB,MAAA;AAIrC,MAAA,MAAM,aAAA,GAAgB,IAAA,GAClB,YAAA,CAAa,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAQ,CAAA,GACvC,MAAA,GACE,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,GAC3C,EAAA;AAEN,MAAA,uBACES,gBAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,aAAA,oBACCA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,YAAA,EAAc;AAAA,aAChB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,cACC,IAAA,EAAM,IAAA,oBACLA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,eAAK,IAAA,EAAK,CAAA;AAAA,cAEhE,MAAA,EAAQ,WAAA,oBACPA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,iBAAO,WAAA,EAAY;AAAA;AAAA;AAAA,SAE5E;AAAA,QAGD,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA,oBAChDO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,0BAAAP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,KAAA,EAAO,SAAA;AAAA,gBACP,YAAA,EAAc;AAAA,eAChB;AAAA,cACD,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,UACC,OAAO,OAAA,CAAQ,WAAW,EACxB,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,EACnB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,sBACfO,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,MAAA;AAAA,gBACT,cAAA,EAAgB,eAAA;AAAA,gBAChB,OAAA,EAAS,OAAA;AAAA,gBACT,YAAA,EAAc,mBAAA;AAAA,gBACd,QAAA,EAAU;AAAA,eACZ;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,IACnB,QAAA,EAAA,GAAA,CAAI,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,EACtE,CAAA;AAAA,gCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,aAAA;AAAA,YAZtD;AAAA,WAcR;AAAA,SAAA,EACL,CAAA;AAAA,QAGD,YAAA,CAAa,wCACZA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,QAAA,EAAU,MAAA;AAAA,cACV,KAAA,EAAO,SAAA;AAAA,cACP,UAAA,EAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA,YAAA,CAAa;AAAA;AAAA;AAChB,OAAA,EAEJ,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAGjB,EAAA,MAAM,cAAA,GAAiBF,cAAQ,MAAM;AACnC,IAAA,OAAO,SAAS,mBAAA,GAAsB;AACpC,MAAA,IAAI,CAAC,cAAA,IAAkB,kBAAA,EAAoB,OAAO,IAAA;AAElD,MAAA,OAAO,sBAAA,CAAuB;AAAA,QAC5B,MAAA,EAAQ,cAAA;AAAA,QACR,WAAA,EAAa,eAAA;AAAA,QACb,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,kBAAA,EAAoB,cAAc,CAAC,CAAA;AAEvD,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AACF;AChWO,SAAS,uBACd,OAAA,EAC8B;AAC9B,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAID,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,MAAA,GAASJ,iBAAAA;AAAA,IACb,OAAO,IAAA,KAAqD;AAC1D,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AAEF,QAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,IAAA;AAAA,UAC7B,OAAO,KAAA,CAAM,mBAAA;AAAA,UACb;AAAA,YACE,aAAa,IAAA,CAAK,IAAA;AAAA,YAClB,UAAU,IAAA,CAAK;AAAA;AACjB,SACF;AAGA,QAAA,MAAM,SAAA,GAAY,MAAM,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW;AAAA,UACjD,MAAA,EAAQ,KAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,IAAA,CAAK,IAAA,EAAK;AAAA,UACrC,IAAA,EAAM;AAAA,SACP,CAAA;AAED,QAAA,IAAI,CAAC,UAAU,EAAA,EAAI;AACjB,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,SAAA,CAAU,MAAM,CAAA,CAAE,CAAA;AAAA,QACtD;AAEA,QAAA,YAAA,CAAa,UAAU,SAAS,CAAA;AAChC,QAAA,OAAA,EAAS,YAAY,SAAS,CAAA;AAC9B,QAAA,OAAO,SAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,MAAMsB,SAAQ,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,eAAe,CAAA;AACpE,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,OAAA,EAAS,UAAUA,MAAK,CAAA;AACxB,QAAA,MAAMA,MAAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,MAAM,KAAA,GAAQtB,kBAAY,MAAM;AAC9B,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,cAAA,CAAe,KAAK,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAOK,aAAAA;AAAA,IACL,OAAO,EAAE,MAAA,EAAQ,WAAA,EAAa,SAAA,EAAW,OAAO,KAAA,EAAM,CAAA;AAAA,IACtD,CAAC,MAAA,EAAQ,WAAA,EAAa,SAAA,EAAW,OAAO,KAAK;AAAA,GAC/C;AACF;AClEO,SAAS,uBAAuB,OAAA,EAAmC;AACxE,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,cAAcP,yBAAAA,EAAe;AAEnC,EAAA,MAAM,WAAWC,sBAAAA,CAAY;AAAA,IAC3B,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAAoB,MAAA,CAAO,KAAA,CAAM,qBAAqB,IAAI,CAAA;AAAA,IACnE,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,KAAK,YAAY,iBAAA,CAAkB,EAAE,UAAU,CAAC,gBAAgB,GAAG,CAAA;AACnE,MAAA,OAAA,EAAS,YAAY,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,MAAA,GAASC,iBAAAA;AAAA,IACb,CAAC,IAAA,KAAkC;AACjC,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,OAAOK,aAAAA,CAAQ,OAAO,EAAE,GAAG,QAAA,EAAU,QAAO,CAAA,EAAI,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AACpE;AAEO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOW,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,gBAAgB,CAAA;AAAA,IAC3B,SAAS,MAAM,MAAA,CAAO,GAAA,CAAqB,MAAA,CAAO,MAAM,cAAc;AAAA,GACvE,CAAA;AACH;AC5BA,IAAMI,gBAAAA,GAA2E;AAAA,EAC/E,MAAA,EAAQ,EAAE,EAAA,EAAI,mBAAA,EAAqB,IAAI,iCAAA,EAA4B;AAAA,EACnE,MAAA,EAAQ,EAAE,EAAA,EAAI,QAAA,EAAU,IAAI,QAAA,EAAS;AAAA,EACrC,QAAA,EAAU,EAAE,EAAA,EAAI,UAAA,EAAY,IAAI,UAAA,EAAW;AAAA,EAC3C,KAAA,EAAO,EAAE,EAAA,EAAI,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,EAClC,eAAA,EAAiB,EAAE,EAAA,EAAI,eAAA,EAAiB,IAAI,wBAAA;AAC9C,CAAA;AAEA,IAAMC,eAAAA,GAAsD;AAAA,EAC1D,MAAA,EAAQ,WAAA;AAAA,EACR,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,WAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAIA,IAAM,WAAA,GAA6C;AAAA,EACjD,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO,CAAA;AAAA,IACP,eAAA,EAAiB,iBAAA;AAAA,IACjB,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,MAAA,EAAQ,IAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,eAAA,EAAiB,MAAA;AAAA,IACjB,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO,KAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,MAAA;AAAA,IACjB,MAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY,wBAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,OAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW,MAAA;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY;AAAA;AAEhB,CAAA;AAYO,SAAS,aAAA,CAAc;AAAA,EAC5B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,uBACEd,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,WAAA,CAAY,OAAA,EAAS,SAAS,OAAA,EACxC,QAAA,kBAAAO,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAO,YAAY,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAC9D,QAAA,EAAA;AAAA,oBAAAP,eAAC,IAAA,EAAA,EAAG,KAAA,EAAO,YAAY,KAAA,EAAQ,QAAA,EAAA,MAAA,EAAQ,uBAAuB,uBAAA,EAAwB,CAAA;AAAA,oBAEtFA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,KAAK,KAAA,EAAM,EAChE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,MAAA,MAAM,KAAA,GAAQa,gBAAAA,CAAgB,CAAA,CAAE,QAAQ,CAAA;AACxC,MAAA,uBACEN,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAO,WAAA,CAAY,cAAA;AAAA,UACnB,OAAA,EAAS,MAAM,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,UAClC,QAAA,EAAU,SAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAO,EAClD,QAAA,EAAAc,eAAAA,CAAe,CAAA,CAAE,QAAQ,CAAA,EAC5B,CAAA;AAAA,4BACAd,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAO,EAAA,IAAM,EAAE,QAAA,EAAS;AAAA;AAAA,SAAA;AAAA,QAT1B,CAAA,CAAE;AAAA,OAUT;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBAEAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,KAAA,EAAO,WAAA,CAAY,YAAA,EAAc,OAAA,EAAS,OAAA,EAC7D,QAAA,EAAA,MAAA,EAAQ,MAAA,IAAU,QAAA,EACrB;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAaA,IAAM,mBAAA,GAAsB,iDAAA;AAC5B,IAAM,gBAAA,GAAmB,EAAA;AAElB,SAASgB,eAAc,EAAE,IAAA,EAAM,OAAA,EAAS,gBAAA,EAAkB,QAAO,EAAuB;AAC7F,EAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AACzB,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,SAAU,IAAA,CAAa,MAAA;AAI7B,EAAA,MAAM,aAAA,GAAgB,IAAA,GAClB,YAAA,CAAa,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAQ,CAAA,GACvC,MAAA,GACE,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,GAC3C,EAAA;AAEN,EAAA,MAAM,MAAA,GAAS,IAAA,EAAM,MAAA,IAAU,MAAA,EAAQ,MAAA,IAAU,CAAA;AACjD,EAAA,MAAM,QAAA,GAAW,IAAA,EAAM,QAAA,IAAY,MAAA,EAAQ,QAAA,IAAY,KAAA;AACvD,EAAA,MAAM,WAAW,MAAA,EAAQ,EAAA;AAEzB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAInB,eAAuB,SAAS,CAAA;AACxD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAsB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,YAAA,GAAec,aAAyB,IAAI,CAAA;AAElD,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAY,GAAI,sBAAA,CAAuB;AAAA,IACrD,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,IAAI,OAAO,CAAA;AAC3B,MAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,IACjB;AAAA,GACD,CAAA;AAED,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,YAAA,KAAiB,sBAAA,CAAuB;AAAA,IACjE,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,MAAA,OAAA,CAAQ,WAAW,CAAA;AACnB,MAAA,gBAAA,GAAmB,KAAK,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,IAAI,OAAO,CAAA;AAC3B,MAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,IACjB;AAAA,GACD,CAAA;AAED,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA2C;AACnE,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,IAAA,CAAK,IAAA,GAAO,gBAAA,GAAmB,IAAA,GAAO,IAAA,EAAM;AAC9C,MAAA,eAAA,CAAgB,CAAA,kBAAA,EAAqB,gBAAgB,CAAA,QAAA,CAAU,CAAA;AAC/D,MAAA;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAClC,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,MAAA,aAAA,CAAc,GAAG,CAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,WAAW,CAAA;AACnB,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,YAAY,CAAA;AAExC,MAAA,OAAA,CAAQ,YAAY,CAAA;AACpB,MAAA,MAAA,CAAO;AAAA,QACL,QAAA;AAAA,QACA,SAAS,MAAA,CAAO,SAAA;AAAA,QAChB,UAAU,YAAA,CAAa,IAAA;AAAA,QACvB,UAAU,YAAA,CAAa,IAAA;AAAA,QACvB,MAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,SAAS,CAAA;AACjB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA;AAEA,EAAA,MAAM,eAAe,WAAA,IAAe,YAAA;AAEpC,EAAA,uBACEX,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAA,CAAY,SAAS,OAAA,EAAS,YAAA,GAAe,MAAA,GAAY,OAAA,EACnE,QAAA,kBAAAO,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,GAAG,WAAA,CAAY,MAAM,SAAA,EAAW,MAAA,EAAQ,WAAW,MAAA,EAAO;AAAA,MACnE,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,MAElC,QAAA,EAAA;AAAA,wBAAAP,eAAC,IAAA,EAAA,EAAG,KAAA,EAAO,YAAY,KAAA,EAAQ,QAAA,EAAA,MAAA,EAAQ,gBAAgB,eAAA,EAAgB,CAAA;AAAA,QAGtE,iCACCO,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,YAAA,EAAc;AAAA,aAChB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,cACC,IAAA,EAAM,IAAA,oBAAQA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,eAAK,IAAA,EAAK,CAAA;AAAA,cAC7E,MAAA,EAAQ,WAAA,oBACPA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,iBAAO,WAAA,EAAY;AAAA;AAAA;AAAA,SAE5E;AAAA,QAID,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA,oBAChDO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,0BAAAP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,KAAA,EAAO,SAAA;AAAA,gBACP,YAAA,EAAc;AAAA,eAChB;AAAA,cAEC,kBAAQ,WAAA,IAAe;AAAA;AAAA,WAC1B;AAAA,UACC,OAAO,OAAA,CAAQ,WAAW,EACxB,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,EACnB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,sBACfO,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,MAAA;AAAA,gBACT,cAAA,EAAgB,eAAA;AAAA,gBAChB,OAAA,EAAS,OAAA;AAAA,gBACT,YAAA,EAAc,mBAAA;AAAA,gBACd,QAAA,EAAU;AAAA,eACZ;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,IACnB,QAAA,EAAA,GAAA,CAAI,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,EACtE,CAAA;AAAA,gCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,aAAA;AAAA,YAZtD;AAAA,WAcR;AAAA,SAAA,EACL,CAAA;AAAA,QAID,IAAA,CAAK,wCACJA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,QAAA,EAAU,MAAA;AAAA,cACV,KAAA,EAAO,SAAA;AAAA,cACP,UAAA,EAAY,GAAA;AAAA,cACZ,YAAA,EAAc;AAAA,aAChB;AAAA,YAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,SACR;AAAA,QAID,IAAA,KAAS,8BACRO,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,YAAA,EAAc;AAAA,aAChB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAP,cAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,UAAU,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAM,EAAI,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,8BACjEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,EAAA,MAAA,EAAQ,kBAAkB,8BAAA,EAC7B,CAAA;AAAA,8BACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAY,EACjE,QAAA,EAAA,MAAA,EAAQ,sBACP,+EAAA,EACJ;AAAA;AAAA;AAAA,SACF,mBAEAO,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,0BAAAP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,KAAA,EAAO,SAAA;AAAA,gBACP,YAAA,EAAc;AAAA,eAChB;AAAA,cAEC,kBAAQ,WAAA,IAAe;AAAA;AAAA,WAC1B;AAAA,0BAGAA,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,YAAA;AAAA,cACL,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAQ,mBAAA;AAAA,cACR,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAO;AAAA,cACzB,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,UAGC,CAAC,+BACAO,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,MAAA;AAAA,gBACP,OAAA,EAAS,WAAA;AAAA,gBACT,MAAA,EAAQ,oBAAA;AAAA,gBACR,YAAA,EAAc,KAAA;AAAA,gBACd,eAAA,EAAiB,SAAA;AAAA,gBACjB,MAAA,EAAQ,SAAA;AAAA,gBACR,SAAA,EAAW,QAAA;AAAA,gBACX,UAAA,EAAY;AAAA,eACd;AAAA,cACA,OAAA,EAAS,MAAM,YAAA,CAAa,OAAA,EAAS,KAAA,EAAM;AAAA,cAE3C,QAAA,EAAA;AAAA,gCAAAP,cAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,UAAU,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAM,EAAI,QAAA,EAAA,WAAA,EAAe,CAAA;AAAA,gCACvEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAC/D,QAAA,EAAA,MAAA,EAAQ,cAAc,sBAAA,EACzB,CAAA;AAAA,gCACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,SAAA,EAAW,KAAA,EAAM,EAChE,QAAA,EAAA,MAAA,EAAQ,mBAAmB,kCAAA,EAC9B;AAAA;AAAA;AAAA,8BAGFO,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,MAAA,EAAQ,mBAAA;AAAA,gBACR,YAAA,EAAc,KAAA;AAAA,gBACd,OAAA,EAAS,MAAA;AAAA,gBACT,eAAA,EAAiB;AAAA,eACnB;AAAA,cAGC,QAAA,EAAA;AAAA,gBAAA,UAAA,oBACCP,cAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,GAAA,EAAK,UAAA;AAAA,oBACL,GAAA,EAAI,wBAAA;AAAA,oBACJ,KAAA,EAAO;AAAA,sBACL,KAAA,EAAO,MAAA;AAAA,sBACP,SAAA,EAAW,OAAA;AAAA,sBACX,SAAA,EAAW,SAAA;AAAA,sBACX,YAAA,EAAc,KAAA;AAAA,sBACd,YAAA,EAAc;AAAA;AAChB;AAAA,iBACF;AAAA,gBAID,YAAA,CAAa,IAAA,KAAS,iBAAA,oBACrBO,eAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO;AAAA,sBACL,OAAA,EAAS,MAAA;AAAA,sBACT,UAAA,EAAY,QAAA;AAAA,sBACZ,GAAA,EAAK,KAAA;AAAA,sBACL,OAAA,EAAS,MAAA;AAAA,sBACT,eAAA,EAAiB,SAAA;AAAA,sBACjB,YAAA,EAAc,KAAA;AAAA,sBACd,YAAA,EAAc;AAAA,qBAChB;AAAA,oBAEA,QAAA,EAAA;AAAA,sCAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,IAAW,QAAA,EAAA,WAAA,EAAe,CAAA;AAAA,sCACnDA,cAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO;AAAA,4BACL,QAAA,EAAU,MAAA;AAAA,4BACV,KAAA,EAAO,SAAA;AAAA,4BACP,UAAA,EAAY,GAAA;AAAA,4BACZ,QAAA,EAAU,QAAA;AAAA,4BACV,YAAA,EAAc,UAAA;AAAA,4BACd,UAAA,EAAY;AAAA,2BACd;AAAA,0BAEC,QAAA,EAAA,YAAA,CAAa;AAAA;AAAA;AAChB;AAAA;AAAA,iBACF;AAAA,gCAIFO,eAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO;AAAA,sBACL,OAAA,EAAS,MAAA;AAAA,sBACT,cAAA,EAAgB,eAAA;AAAA,sBAChB,UAAA,EAAY;AAAA,qBACd;AAAA,oBAEA,QAAA,EAAA;AAAA,sCAAAA,eAAAA,CAAC,UAAK,KAAA,EAAO,EAAE,UAAU,MAAA,EAAQ,KAAA,EAAO,WAAU,EAC/C,QAAA,EAAA;AAAA,wBAAA,YAAA,CAAa,IAAA;AAAA,wBAAK,IAAA;AAAA,wBAAA,CAAI,YAAA,CAAa,IAAA,GAAO,IAAA,GAAO,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,wBAAE;AAAA,uBAAA,EACrE,CAAA;AAAA,sCACAP,cAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAK,QAAA;AAAA,0BACL,KAAA,EAAO;AAAA,4BACL,QAAA,EAAU,MAAA;AAAA,4BACV,KAAA,EAAO,SAAA;AAAA,4BACP,UAAA,EAAY,MAAA;AAAA,4BACZ,MAAA,EAAQ,MAAA;AAAA,4BACR,MAAA,EAAQ,SAAA;AAAA,4BACR,UAAA,EAAY,SAAA;AAAA,4BACZ,OAAA,EAAS;AAAA,2BACX;AAAA,0BACA,SAAS,MAAM;AACb,4BAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,4BAAA,aAAA,CAAc,IAAI,CAAA;AAClB,4BAAA,IAAI,YAAA,CAAa,OAAA,EAAS,YAAA,CAAa,OAAA,CAAQ,KAAA,GAAQ,EAAA;AAAA,0BACzD,CAAA;AAAA,0BACA,QAAA,EAAU,YAAA;AAAA,0BAET,kBAAQ,UAAA,IAAc;AAAA;AAAA;AACzB;AAAA;AAAA;AACF;AAAA;AAAA,WACF;AAAA,UAID,gCACCA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW,KAAA;AAAA,gBACX,OAAA,EAAS,UAAA;AAAA,gBACT,eAAA,EAAiB,SAAA;AAAA,gBACjB,YAAA,EAAc,KAAA;AAAA,gBACd,QAAA,EAAU,MAAA;AAAA,gBACV,KAAA,EAAO;AAAA,eACT;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BAIFA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,OAAA;AAAA,gBACT,KAAA,EAAO,MAAA;AAAA,gBACP,SAAA,EAAW,MAAA;AAAA,gBACX,OAAA,EAAS,MAAA;AAAA,gBACT,MAAA,EAAQ,MAAA;AAAA,gBACR,YAAA,EAAc,KAAA;AAAA,gBACd,eAAA,EACE,CAAC,YAAA,IAAgB,YAAA,GAAe,SAAA,GAAY,SAAA;AAAA,gBAC9C,KAAA,EAAO,MAAA;AAAA,gBACP,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,MAAA,EAAQ,CAAC,YAAA,IAAgB,YAAA,GAAe,aAAA,GAAgB,SAAA;AAAA,gBACxD,UAAA,EAAY;AAAA,eACd;AAAA,cACA,OAAA,EAAS,YAAA;AAAA,cACT,QAAA,EAAU,CAAC,YAAA,IAAgB,YAAA;AAAA,cAE1B,QAAA,EAAA,WAAA,GACI,MAAA,EAAQ,SAAA,IAAa,cAAA,GACtB,eACG,MAAA,EAAQ,UAAA,IAAc,eAAA,GACvB,IAAA,KAAS,OAAA,GACN,MAAA,EAAQ,KAAA,IAAS,OAAA,GACjB,QAAQ,WAAA,IAAe;AAAA;AAAA,WAClC;AAAA,UAEC,IAAA,KAAS,2BACRA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAO;AAAA,gBACL,GAAG,WAAA,CAAY,YAAA;AAAA,gBACf,SAAA,EAAW;AAAA,eACb;AAAA,cACA,OAAA,EAAS,WAAA;AAAA,cAER,kBAAQ,QAAA,IAAY;AAAA;AAAA;AACvB,SAAA,EAEJ,CAAA;AAAA,wBAGFA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAO,WAAA,CAAY,YAAA;AAAA,YACnB,OAAA,EAAS,OAAA;AAAA,YACT,QAAA,EAAU,YAAA;AAAA,YAET,mBAAS,WAAA,GAAe,MAAA,EAAQ,IAAA,IAAQ,MAAA,GAAW,QAAQ,MAAA,IAAU;AAAA;AAAA;AACxE;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AC5gBO,SAAS,SAAA,CAAU;AAAA,EACxB,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,UAAW,QAAA,EAAkB,OAAA;AACnC,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIH,eAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhE,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,YAAA,CAAa;AAAA,IACf,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,IAAI,IAAA,CAAK,aAAa,iBAAA,EAAmB;AACvC,QAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,QAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,aAAa,UAAA,EAAY;AAChC,QAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAE1C,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,UAAA,CAAW,SAAA,CAAU,CAAC,CAAA,CAAE,QAAQ,CAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,QAAA,KAAkC;AACpD,IAAA,gBAAA,GAAmB,QAAQ,CAAA;AAC3B,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,aAAa,QAAA,IAAY,SAAA,IAAa,WAAW,mBAAA,IAAwB,CAAC,UAAU,CAAC,QAAA;AAE3F,EAAA,uBACEU,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAR,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,QAAA,EAAU,MAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,MAAA;AAAA,UACP,eAAA,EAAiB,aAAa,SAAA,GAAY,SAAA;AAAA,UAC1C,MAAA,EAAQ,MAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,MAAA,EAAQ,aAAa,aAAA,GAAgB,SAAA;AAAA,UACrC,UAAA,EAAY,mEAAA;AAAA,UACZ,GAAG;AAAA,SACL;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,QAAA,EAAU,UAAA;AAAA,QAET,sBAAa,OAAA,EAAS,UAAA,IAAc,eAAA,GAAoB,QAAA,IAAY,SAAS,GAAA,IAAO;AAAA;AAAA,KACvF;AAAA,IAGC,iBAAA,IAAqB,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,qBACpDA,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAAA,QACzC,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,IAID,iBAAA,IAAqB,YAAA,IAAgB,YAAA,CAAa,QAAA,KAAa,qCAC9DA,cAAAA;AAAA,MAACgB,cAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,YAAA;AAAA,QACN,SAAS,MAAM;AACb,UAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,UAAA,SAAA,GAAY,YAAY,CAAA;AAAA,QAC1B,CAAA;AAAA,QACA,gBAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,IAID,WAAW,YAAA,IAAgB,YAAA,EAAc,aAAa,UAAA,IAAc,YAAA,CAAa,gCAChFhB,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,QAAQ,YAAA,CAAa,YAAA;AAAA,QACrB,SAAS,MAAM;AACb,UAAA,SAAA,GAAY,YAAY,CAAA;AAAA,QAC1B;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;ACxIO,SAAS,iBAAiB,EAAE,SAAA,EAAW,OAAA,EAAS,SAAA,EAAW,OAAM,EAA0B;AAChG,EAAA,MAAM,EAAE,QAAQ,SAAA,EAAW,SAAA,EAAW,SAAS,KAAA,EAAO,IAAA,KAAS,kBAAA,CAAmB;AAAA,IAChF,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,SAAA,EAAU;AACtC,EAAA,MAAM,MAAA,GAASW,aAAO,KAAK,CAAA;AAE3B,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,MAAA,CAAO,WAAW,eAAA,EAAiB;AACvC,IAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAEjB,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AACzD,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAC1B,IAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAE5D,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,mBAAA,EAAqB;AAEjC,IAAA,MAAA,CAAO,EAAE,EAAA,EAAI,MAAA,CAAO,EAAE,CAAA,EAAG,qBAAqB,CAAA;AAAA,EAChD,CAAA,EAAG,CAAC,MAAA,EAAQ,eAAe,CAAC,CAAA;AAE5B,EAAA,uBACEQ,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,GAAG,KAAA,EAAM,EAChF,QAAA,EAAA;AAAA,IAAA,SAAA,oBACCA,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAP,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,SAAA,EAAW,QAAA,EAAA,4BAAA,EAA0B,CAAA;AAAA,sBAC/CA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,cAAc,QAAA,EAAA,gCAAA,EAA8B;AAAA,KAAA,EACxD,CAAA;AAAA,IAGD,SAAA,IAAa,IAAA,oBACZA,cAAAA,CAAC,SACE,QAAA,EAAA,IAAA,CAAK,MAAA,KAAW,WAAA,IAAe,IAAA,CAAK,MAAA,KAAW,mBAAA,mBAC9CO,eAAAA,CAAAC,qBAAA,EACE,QAAA,EAAA;AAAA,sBAAAR,cAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,GAAG,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,sBAChEA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,cAAc,QAAA,EAAA,+CAAA,EAA6C;AAAA,KAAA,EACvE,CAAA,mBAEAO,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAR,cAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,GAAG,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,uBAAA,EAAqB,CAAA;AAAA,sBACnEA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,cAAc,QAAA,EAAA,oCAAA,EAAkC;AAAA,KAAA,EAC5D,CAAA,EAEJ,CAAA;AAAA,IAGD,OAAA,oBACCO,eAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAP,cAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,GAAG,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,6BAAA,EAA2B,CAAA;AAAA,sBACzEA,cAAAA,CAAC,GAAA,EAAA,EAAE,OAAO,YAAA,EAAe,QAAA,EAAA,KAAA,EAAO,WAAW,mBAAA,EAAoB;AAAA,KAAA,EACjE;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,IAAM,SAAA,GAA2B;AAAA,EAC/B,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,YAAA,GAA8B;AAAA,EAClC,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;ACtEA,IAAM,YAAA,GAGF;AAAA,EACF,QAAQ,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,QAAA,EAAS;AAAA,EAC3D,UAAU,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,OAAA,EAAQ;AAAA,EAC5D,UAAU,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,UAAA,EAAW;AAAA,EAC/D,UAAU,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,UAAA,EAAW;AAAA,EAC/D,QAAQ,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,QAAA,EAAS;AAAA,EAC3D,YAAY,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,YAAA;AACxD,CAAA;AAEA,IAAMU,OAAAA,GAAS;AAAA,EACb,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,aAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,UAAA,EACE;AAAA,GACJ;AAAA,EACA,GAAA,EAAK,CAAC,KAAA,MAAkC;AAAA,IACtC,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,KAAA;AAAA,IACjB,UAAA,EAAY;AAAA,GACd,CAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc,QAAA;AAAA,IACd,eAAA,EAAiB;AAAA;AAErB,CAAA;AAEO,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAW,KAAA,EAAM,EAA2B;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,SAAA,KAAc,eAAA,EAAgB;AAE1D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAOV,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,CAAA;AAAA,EAC9E;AAEA,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,uBACEV,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,GAAGU,OAAAA,CAAO,KAAA;AAAA,UACV,eAAA,EAAiB,SAAA;AAAA,UACjB,KAAA,EAAO,SAAA;AAAA,UACP,GAAG;AAAA,SACL;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAEJ;AAEA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,YAAA,CAAa,MAAM,CAAA;AAE/C,EAAA,uBACEH,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAGG,OAAAA,CAAO,KAAA;AAAA,QACV,iBAAiB,MAAA,CAAO,EAAA;AAAA,QACxB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,GAAG;AAAA,OACL;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,UAAK,KAAA,EAAOU,OAAAA,CAAO,IAAI,MAAA,CAAO,KAAK,CAAA,EAAG,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,QACzD,aAAa,IAAA,CAAK,IAAA;AAAA,QAAK,QAAA;AAAA,QAAW,MAAA,CAAO;AAAA;AAAA;AAAA,GAC5C;AAEJ;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;ACtFzB,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,OAAOD,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,UAAU,CAAA;AAAA,IACjD,SAAS,MAAM,MAAA,CAAO,GAAA,CAAsB,MAAA,CAAO,MAAM,QAAQ,CAAA;AAAA,IACjE,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AACH;ACDA,IAAMQ,aAAAA,GAAgF;AAAA,EACpF,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,IAAA,EAAM,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EACxC,MAAA,EAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC1C,QAAA,EAAU,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA;AACpC,CAAA;AAEA,SAASC,YAAW,OAAA,EAAyB;AAC3C,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,OAAO,CAAA,CAAE,mBAAmB,KAAA,CAAA,EAAW;AAAA,MACrD,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEA,IAAMR,OAAAA,GAAS;AAAA,EACb,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EACE;AAAA,GACJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,cAAA,EAAgB,UAAA;AAAA,IAChB,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,EAAA,EAAI;AAAA,IACF,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW,MAAA;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,aAAA,EAAe,WAAA;AAAA,IACf,aAAA,EAAe,QAAA;AAAA,IACf,YAAA,EAAc,mBAAA;AAAA,IACd,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,EAAA,EAAI;AAAA,IACF,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc,mBAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO,CAAC,EAAA,EAAY,KAAA,MAAkC;AAAA,IACpD,OAAA,EAAS,cAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,eAAA,EAAiB,EAAA;AAAA,IACjB;AAAA,GACF,CAAA;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,SAAA;AAAA,IACP,cAAA,EAAgB,MAAA;AAAA,IAChB,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW,QAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU;AAAA;AAEd,CAAA;AAEO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,KAAA,EAAM,EAAqB;AAClE,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,KAAc,WAAA,EAAY;AAElD,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGG,OAAAA,CAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAChE,QAAA,EAAA;AAAA,sBAAAV,eAAC,KAAA,EAAA,EAAI,KAAA,EAAOU,QAAO,MAAA,EACjB,QAAA,kBAAAV,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAGU,QAAO,QAAA,EAAU,KAAA,EAAO,SAAS,MAAA,EAAQ,MAAA,IAAU,CAAA,EACtE,CAAA;AAAA,sBACAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAO,EAC3B,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,sBACdA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,QAAA,EAAU,OAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,MAAA;AAAO,SAAA;AAAA,QAD5E;AAAA,OAGR,CAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGG,OAAAA,CAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAChE,QAAA,EAAA;AAAA,oBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAOU,OAAAA,CAAO,MAAA,EACjB,QAAA,kBAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,KAAA,EAAO,QAAA,EAAA,UAAA,EAAQ,CAAA,EACnC,CAAA;AAAA,oBAEAH,eAAAA,CAAC,OAAA,EAAA,EAAM,KAAA,EAAOG,QAAO,KAAA,EACnB,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAAO,eAAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBAC1BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,SAAA,EAAO;AAAA,OAAA,EAC/B,CAAA,EACF,CAAA;AAAA,sBACAH,gBAAC,OAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,CAAA,CAAC,YAAY,QAAA,CAAS,MAAA,KAAW,CAAA,qBACjCP,eAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAS,CAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,QAAA,EAAU,8BAExC,CAAA,EACF,CAAA;AAAA,QAED,QAAA,EAAU,GAAA,CAAI,CAAC,OAAA,KAAY;AAC1B,UAAA,MAAM,EAAA,GAAKO,aAAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AACtC,UAAA,uBACEV,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,QAAG,KAAA,EAAOU,OAAAA,CAAO,IAAK,QAAA,EAAAQ,WAAAA,CAAW,OAAA,CAAQ,SAAS,CAAA,EAAE,CAAA;AAAA,4BACrDlB,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,EAAA,EAAK,QAAA,EAAA,YAAA,CAAa,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA,EAAE,CAAA;AAAA,4BACtEV,cAAAA,CAAC,IAAA,EAAA,EAAG,OAAOU,OAAAA,CAAO,EAAA,EAChB,0BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,KAAA,CAAM,GAAG,EAAA,EAAI,EAAA,CAAG,KAAK,CAAA,EAAI,QAAA,EAAA,OAAA,CAAQ,QAAO,CAAA,EAC9D,CAAA;AAAA,4BACAV,eAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,QAAO,EAAA,EACf,QAAA,EAAA,OAAA,CAAQ,6BACPV,cAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,MAAM,OAAA,CAAQ,UAAA;AAAA,gBACd,MAAA,EAAO,QAAA;AAAA,gBACP,GAAA,EAAI,qBAAA;AAAA,gBACJ,OAAOU,OAAAA,CAAO,IAAA;AAAA,gBACf,QAAA,EAAA;AAAA;AAAA,aAED,mBAEAV,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,QAAA,EAAO,CAAA,EAE9C;AAAA,WAAA,EAAA,EAnBO,QAAQ,EAoBjB,CAAA;AAAA,QAEJ,CAAC;AAAA,OAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;ACxInB,SAAS,SAAS,OAAA,EAA2C;AAClE,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,SAAA,EAAU;AAEpC,EAAA,MAAM,KAAA,GAAQP,iBAAAA;AAAA,IACZ,CAAC,IAAA,KAAoB;AACnB,MAAA,aAAA,CAAc,OAAO,IAAA,EAAM;AAAA,QACzB,WAAW,OAAA,EAAS,SAAA;AAAA,QACpB,SAAS,OAAA,EAAS;AAAA,OACnB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,OAAA,EAAS,SAAA,EAAW,SAAS,OAAO;AAAA,GACtD;AAEA,EAAA,OAAOK,aAAAA,CAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAA,EAAe,EAAE,KAAA,EAAO,CAAA,EAAG,CAAC,aAAA,EAAe,KAAK,CAAC,CAAA;AAC1F;ACpBO,SAAS,UAAU,OAAA,EAA6C;AACrE,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,SAAA,EAAU;AAErC,EAAA,MAAM,MAAA,GAASL,iBAAAA;AAAA,IACb,CAAC,IAAA,KAAqB;AACpB,MAAA,cAAA,CAAe,OAAO,IAAA,EAAM;AAAA,QAC1B,WAAW,OAAA,EAAS,SAAA;AAAA,QACpB,SAAS,OAAA,EAAS;AAAA,OACnB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,OAAA,EAAS,SAAA,EAAW,SAAS,OAAO;AAAA,GACvD;AAEA,EAAA,OAAOK,aAAAA,CAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,cAAA,EAAgB,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAC,cAAA,EAAgB,MAAM,CAAC,CAAA;AAC9F;AChBO,SAAS,UAAU,OAAA,EAA6C;AACrE,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,SAAA,EAAU;AAErC,EAAA,MAAM,MAAA,GAASL,kBAAY,MAAM;AAC/B,IAAA,cAAA,CAAe,OAAO,MAAA,EAAW;AAAA,MAC/B,WAAW,OAAA,EAAS,SAAA;AAAA,MACpB,SAAS,OAAA,EAAS;AAAA,KACnB,CAAA;AAAA,EACH,GAAG,CAAC,cAAA,EAAgB,SAAS,SAAA,EAAW,OAAA,EAAS,OAAO,CAAC,CAAA;AAEzD,EAAA,OAAOK,aAAAA,CAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,cAAA,EAAgB,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAC,cAAA,EAAgB,MAAM,CAAC,CAAA;AAC9F;ACHO,SAAS,WAAW,OAAA,EAA+C;AACxE,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,SAAA,EAAU;AAEtC,EAAA,MAAM,QAAQW,mBAAAA,CAAS;AAAA,IACrB,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAS,CAAA;AAAA,IACrC,SAAS,MAAM,MAAA,CAAO,GAAA,CAAc,MAAA,CAAO,MAAM,EAAE,CAAA;AAAA,IACnD,KAAA,EAAO,KAAA;AAAA;AAAA,IAEP,OAAA,EAAA,CAAU,OAAA,EAAS,OAAA,IAAW,IAAA,KAAS,CAAC,eAAA;AAAA,IACxC,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,oBAAA,EAAsB,SAAS,oBAAA,IAAwB;AAAA,GACxD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,eAAA,EAAiB,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,IAAA,KAAS;AAAA,GACrD;AACF;ACVO,SAAS,aAAa,OAAA,EAAmD;AAC9E,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,UAAUjB,sBAAAA,CAAY;AAAA,IAC1B,WAAA,EAAa,CAAC,eAAA,EAAiB,YAAA,EAAc,SAAS,CAAA;AAAA,IACtD,UAAA,EAAY,CAAC,IAAA,KAA+B,MAAA,CAAO,KAAK,MAAA,CAAO,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAA,IAC3F,SAAA,EAAW,MAAM,OAAA,EAAS,gBAAA,IAAmB;AAAA,IAC7C,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,SAASA,sBAAAA,CAAY;AAAA,IACzB,WAAA,EAAa,CAAC,eAAA,EAAiB,YAAA,EAAc,QAAQ,CAAA;AAAA,IACrD,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAA0B,MAAA,CAAO,KAAA,CAAM,iBAAiB,IAAI,CAAA;AAAA,IACrE,WAAW,OAAA,EAAS,eAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAC3B;ACnCO,SAAS,eAAe,OAAA,EAAuD;AACpF,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,sBAAAA,CAAY;AAAA,IACjB,WAAA,EAAa,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IAC7C,UAAA,EAAY,OAAO,IAAA,KAA0B;AAC3C,MAAA,MAAM,IAAA,GAAgC,EAAE,GAAG,IAAA,EAAK;AAEhD,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,UAAA,CAAW,QAAA;AAAA,MACpC;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA,CAA0B,MAAA,CAAO,KAAA,CAAM,aAAa,IAAI,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACdO,SAAS,kBAAkB,OAAA,EAA6D;AAC7F,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,sBAAAA,CAAY;AAAA,IACjB,WAAA,EAAa,CAAC,eAAA,EAAiB,iBAAiB,CAAA;AAAA,IAChD,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAA2B,MAAA,CAAO,KAAA,CAAM,gBAAgB,IAAI,CAAA;AAAA,IACrE,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACZO,SAAS,WAAW,OAAA,EAA+C;AACxE,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,sBAAAA,CAAY;AAAA,IACjB,WAAA,EAAa,CAAC,eAAA,EAAiB,SAAS,CAAA;AAAA,IACxC,YAAY,YAAY;AACtB,MAAA,MAAM,OAAO,cAAA,EAAe;AAG5B,MAAA,OAAO,EAAE,WAAA,EAAa,MAAA,CAAO,cAAA,EAAe,EAAE;AAAA,IAChD,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,OAAA,EAAS,YAAY,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACbO,SAAS,aAAa,OAAA,EAAmD;AAC9E,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,QAAQiB,mBAAAA,CAAS;AAAA,IACrB,QAAA,EAAU,CAAC,eAAA,EAAiB,WAAW,CAAA;AAAA,IACvC,SAAS,YAAY;AACnB,MAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAwB,MAAA,CAAO,MAAM,SAAS,CAAA;AAE5E,MAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,QAAA,MAAA,CAAO,cAAA,CAAe,SAAS,WAAW,CAAA;AAC1C,QAAA,OAAA,EAAS,kBAAkB,QAAQ,CAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,OAAA,EAAS,iBAAA,IAAoB;AAAA,MAC/B;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAS,SAAS,OAAA,IAAW,IAAA;AAAA,IAC7B,SAAA,EAAW,QAAA;AAAA,IACX,oBAAA,EAAsB;AAAA,GACvB,CAAA;AAED,EAAA,MAAM,eAAA,GACJ,MAAM,SAAA,IAAa,KAAA,CAAM,SAAS,MAAA,IAAa,KAAA,CAAM,KAAK,aAAA,KAAkB,IAAA;AAE9E,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH;AAAA,GACF;AACF;ACeO,SAAS,YAAY,OAAA,EAAiD;AAC3E,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,cAAclB,yBAAAA,EAAe;AAEnC,EAAA,MAAM,OAAOkB,mBAAAA,CAAS;AAAA,IACpB,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,CAAA;AAAA,IACtC,SAAS,MAAM,MAAA,CAAO,GAAA,CAAmB,MAAA,CAAO,MAAM,QAAQ,CAAA;AAAA,IAC9D,OAAA,EAAS,SAAS,WAAA,IAAe;AAAA,GAClC,CAAA;AAED,EAAA,MAAM,gBAAgBjB,sBAAAA,CAAY;AAAA,IAChC,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,gBAAgB,CAAA;AAAA,IAC3D,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAAmC,MAAA,CAAO,KAAA,CAAM,sBAAsB,IAAI,CAAA;AAAA,IACnF,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,iBAAiBA,sBAAAA,CAAY;AAAA,IACjC,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,iBAAiB,CAAA;AAAA,IAC5D,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAA0B,MAAA,CAAO,KAAA,CAAM,uBAAuB,IAAI,CAAA;AAAA,IAC3E,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,GAAG,CAAA;AACzE,MAAA,OAAA,EAAS,iBAAA,IAAoB;AAAA,IAC/B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,WAAWA,sBAAAA,CAAY;AAAA,IAC3B,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,UAAU,CAAA;AAAA,IACrD,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAA0B,MAAA,CAAO,KAAA,CAAM,UAAU,IAAI,CAAA;AAAA,IAC9D,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,GAAG,CAAA;AACzE,MAAA,OAAA,EAAS,iBAAA,IAAoB;AAAA,IAC/B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,SAASA,sBAAAA,CAAY;AAAA,IACzB,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,QAAQ,CAAA;AAAA,IACnD,UAAA,EAAY,CAAC,SAAA,KACX,MAAA,CAAO,IAAA;AAAA,MACL,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,QAAQ,IAAI,SAAS,CAAA,OAAA;AAAA,KACvC;AAAA,IACF,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,GAAG,CAAA;AACzE,MAAA,OAAA,EAAS,kBAAkB,IAAI,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,QAAQA,sBAAAA,CAAY;AAAA,IACxB,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,OAAO,CAAA;AAAA,IAClD,UAAA,EAAY,OAAO,IAAA,KAA2B;AAC5C,MAAA,MAAM,IAAA,GAAgC,EAAE,GAAG,IAAA,EAAK;AAEhD,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,UAAA,CAAW,QAAA;AAAA,MACpC;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA,CAA0B,MAAA,CAAO,KAAA,CAAM,cAAc,IAAI,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,WAAW,OAAA,EAAS,cAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,aAAaA,sBAAAA,CAAY;AAAA,IAC7B,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,aAAa,CAAA;AAAA,IACxD,UAAA,EAAY,OAAO,IAAA,KAAwC;AACzD,MAAA,MAAM,OAAgC,EAAC;AAEvC,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,UAAA,CAAW,QAAA;AAAA,MACpC;AAEA,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,MAC1B;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA,CAAgC,MAAA,CAAO,KAAA,CAAM,mBAAmB,IAAI,CAAA;AAAA,IACpF,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,cAAcA,sBAAAA,CAAY;AAAA,IAC9B,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,cAAc,CAAA;AAAA,IACzD,UAAA,EAAY,OAAO,IAAA,KAAiC;AAClD,MAAA,MAAM,IAAA,GAAgC,EAAE,GAAG,IAAA,EAAK;AAEhD,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,UAAA,CAAW,QAAA;AAAA,MACpC;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA,CAA0B,MAAA,CAAO,KAAA,CAAM,oBAAoB,IAAI,CAAA;AAAA,IAC/E,CAAA;AAAA,IACA,WAAW,OAAA,EAAS,cAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;AC7JA,IAAM,YAAA,GAAe,oBAAA;AAEd,SAAS,mBAAA,CAAoB;AAAA,EAClC,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA0D;AACxD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIK,eAAiC,MAAM,CAAA;AACnE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAsC,IAAI,CAAA;AAClF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACnE,EAAA,MAAM,iBAAA,GAAoBc,aAAO,KAAK,CAAA;AACtC,EAAA,MAAM,gBAAA,GAAmBA,aAAO,KAAK,CAAA;AACrC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,SAAA,EAAU;AAGtC,EAAA,MAAM,MAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GACd,IAAI,eAAA,CAAgB,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAC1C,IAAI,eAAA,EAAgB;AAC1B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAClC,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,CAAC,EAAE,UAAA,IAAc,kBAAA,CAAA;AAGpC,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,CAAY;AAAA,IAC/B,iBAAA,EAAmB,KAAA;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,IAAI,IAAA,CAAK,QAAA,KAAa,UAAA,IAAc,IAAA,CAAK,YAAA,EAAc;AACrD,QAAA,eAAA,CAAgB,KAAK,YAAY,CAAA;AACjC,QAAA,SAAA,CAAU,OAAO,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,UAAA,IAAc,kBAAkB,OAAA,EAAS;AAC7C,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,IAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,IAAA,QAAA,CAAS;AAAA,MACP,QAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,UAAA,EAAY,OAAO,QAAA,CAAS,IAAA;AAAA,MAC5B,SAAA,EAAW,OAAO,QAAA,CAAS;AAAA,KAC5B,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAA,EAAU,QAAA,EAAU,UAAU,CAAC,CAAA;AAGnC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,kBAAA,CAAmB;AAAA,IAC7C,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,SAAA,CAAU,KAAK,MAAA,KAAW,WAAA,IAAe,KAAK,MAAA,KAAW,mBAAA,GACrD,cACA,WAAW,CAAA;AACf,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,IAAc,gBAAA,CAAiB,OAAA,IAAW,eAAA,EAAiB;AAChE,IAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,IAAA,SAAA,CAAU,YAAY,CAAA;AACtB,IAAA,OAAA,CAAQ,EAAE,EAAA,EAAI,MAAA,CAAO,UAAU,CAAA,EAAG,mBAAA,EAAqB,oBAAqB,CAAA;AAAA,EAC9E,GAAG,CAAC,UAAA,EAAY,iBAAiB,UAAA,EAAY,kBAAA,EAAoB,OAAO,CAAC,CAAA;AAGzE,EAAA,MAAM,cAAA,GAAiBN,iBAAAA;AAAA,IACrB,CAAC,GAAA,KAAe;AACd,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,cAAA,GAAiBK,cAAQ,MAAM;AACnC,IAAA,OAAO,SAAS,mBAAA,GAAsB;AACpC,MAAA,IAAI,CAAC,YAAA,IAAgB,UAAA,EAAY,OAAO,IAAA;AAExC,MAAA,OAAO,sBAAA,CAAuB;AAAA,QAC5B,MAAA,EAAQ,YAAA;AAAA,QACR,WAAA,EAAa,YAAA;AAAA,QACb,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,UAAA,EAAY,cAAc,CAAC,CAAA;AAE7C,EAAA,OAAO,EAAE,cAAA,EAAgB,MAAA,EAAQ,QAAA,EAAU,OAAO,YAAA,EAAa;AACjE;AC9EO,SAAS,kBAAA,CAAmB;AAAA,EACjC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAwD;AACtD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,eAAgC,MAAM,CAAA;AAClE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACnE,EAAA,MAAM,iBAAA,GAAoBc,aAAO,KAAK,CAAA;AAEtC,EAAA,MAAM,WAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GAAI,EAAA;AAGvE,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,CAAY;AAAA,IAC/B,iBAAA,EAAmB,KAAA;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC/B,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,IAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,IAAA,QAAA,CAAS;AAAA,MACP,QAAA;AAAA,MACA,QAAA,EAAU,iBAAA;AAAA,MACV,UAAA,EAAY,WAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAC,CAAA;AAGpC,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAY,GAAI,sBAAA,CAAuB;AAAA,IACrD,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,YAAA,KAAiB,sBAAA,CAAuB;AAAA,IACjE,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,MAAA,SAAA,CAAU,WAAW,CAAA;AACrB,MAAA,gBAAA,GAAmB,KAAK,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAA,MAAM,WAAA,GAAcN,iBAAAA;AAAA,IAClB,CAAC,IAAA,KAA0B;AACzB,MAAA,IAAI,CAAC,cAAc,MAAA,EAAQ;AAC3B,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,MAAA,CAAO;AAAA,QACL,QAAA,EAAW,aAAa,MAAA,CAAe,EAAA;AAAA,QACvC,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,OAAO,IAAA,CAAK;AAAA,OACb,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,QAAQ,YAAY;AAAA,GACvB;AAEA,EAAA,MAAM,oBAAA,GAAuBA,iBAAAA;AAAA,IAC3B,OAAO,MAAY,KAAA,KAAmB;AACpC,MAAA,IAAI,CAAC,cAAc,MAAA,EAAQ;AAC3B,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,WAAW,CAAA;AACrB,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAI,CAAA;AAEhC,QAAA,SAAA,CAAU,YAAY,CAAA;AACtB,QAAA,MAAM,SAAS,YAAA,CAAa,MAAA;AAC5B,QAAA,MAAA,CAAO;AAAA,UACL,UAAU,MAAA,CAAO,EAAA;AAAA,UACjB,SAAS,MAAA,CAAO,SAAA;AAAA,UAChB,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,YAAA,CAAa,MAAM,MAAA,IAAU,CAAA;AAAA,UACtD,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY,YAAA,CAAa,MAAM,QAAA,IAAY,KAAA;AAAA,UAC5D;AAAA,SACD,CAAA;AAAA,MACH,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,MAAA,EAAQ,YAAY;AAAA,GAC/B;AAGA,EAAA,MAAM,eAAA,GAAkBK,cAAQ,MAAM;AACpC,IAAA,OAAO,SAAS,oBAAA,GAA4C;AAC1D,MAAA,IAAI,CAAC,cAAc,OAAO,IAAA;AAE1B,MAAA,MAAM,cAAc,YAAA,CAAa,WAAA;AACjC,MAAA,MAAM,OAAO,YAAA,CAAa,IAAA;AAC1B,MAAA,MAAM,SAAS,YAAA,CAAa,MAAA;AAI5B,MAAA,MAAM,aAAA,GAAgB,IAAA,GAClB,YAAA,CAAa,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAQ,CAAA,GACvC,MAAA,GACE,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,GAC3C,EAAA;AAEN,MAAA,uBACES,gBAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,aAAA,oBACCA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,YAAA,EAAc;AAAA,aAChB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,cACC,IAAA,EAAM,IAAA,oBACLA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,eAAK,IAAA,EAAK,CAAA;AAAA,cAEhE,MAAA,EAAQ,WAAA,oBACPA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,iBAAO,WAAA,EAAY;AAAA;AAAA;AAAA,SAE5E;AAAA,QAGD,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA,oBAChDO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,0BAAAP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,KAAA,EAAO,SAAA;AAAA,gBACP,YAAA,EAAc;AAAA,eAChB;AAAA,cACD,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,UACC,OAAO,OAAA,CAAQ,WAAW,EACxB,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,EACnB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,sBACfO,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,MAAA;AAAA,gBACT,cAAA,EAAgB,eAAA;AAAA,gBAChB,OAAA,EAAS,OAAA;AAAA,gBACT,YAAA,EAAc,mBAAA;AAAA,gBACd,QAAA,EAAU;AAAA,eACZ;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,IACnB,QAAA,EAAA,GAAA,CAAI,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,EACtE,CAAA;AAAA,gCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,aAAA;AAAA,YAZtD;AAAA,WAcR;AAAA,SAAA,EACL,CAAA;AAAA,QAGD,YAAA,CAAa,wCACZA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,QAAA,EAAU,MAAA;AAAA,cACV,KAAA,EAAO,SAAA;AAAA,cACP,UAAA,EAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA,YAAA,CAAa;AAAA;AAAA;AAChB,OAAA,EAEJ,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,OAAO;AAAA,IACL,eAAA;AAAA,IACA,oBAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AACF;ACnQO,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOS,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,CAAA;AAAA,IACtC,SAAS,MAAM,MAAA,CAAO,GAAA,CAAc,MAAA,CAAO,MAAM,QAAQ;AAAA,GAC1D,CAAA;AACH;ACPO,SAAS,kBAAkB,QAAA,EAAmB;AACnD,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,IAAA,GAAO,QAAA,GACT,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA,UAAA,EAAa,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA,GACvE,MAAA,CAAO,KAAA,CAAM,cAAA;AAEjB,EAAA,OAAOA,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,iBAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,IAC/D,OAAA,EAAS,MAAM,MAAA,CAAO,GAAA,CAAqB,IAAI;AAAA,GAChD,CAAA;AACH;ACXO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAS,CAAA;AAAA,IACrC,SAAS,MAAM,MAAA,CAAO,GAAA,CAAsB,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IACpE,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AACH;AAEO,SAAS,iBAAiB,QAAA,EAAkB;AACjD,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,UAAU,SAAS,CAAA;AAAA,IAC1D,OAAA,EAAS,MACP,MAAA,CAAO,GAAA,CAAwB,CAAA,EAAG,OAAO,KAAA,CAAM,WAAW,CAAA,CAAA,EAAI,QAAQ,CAAA,QAAA,CAAU,CAAA;AAAA,IAClF,SAAS,CAAC,CAAC,OAAO,cAAA,EAAe,IAAK,CAAC,CAAC;AAAA,GACzC,CAAA;AACH;AAEO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,cAAclB,yBAAAA,EAAe;AAEnC,EAAA,MAAM,YAAA,GAAe,OAAO,QAAA,KAAqB;AAC/C,IAAA,MAAM,MAAA,CAAO,cAAA,CAAe,EAAE,QAAA,EAAU,CAAA;AACxC,IAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,UAAU,CAAC,eAAe,GAAG,CAAA;AAAA,EACrE,CAAA;AAEA,EAAA,OAAO,EAAE,YAAA,EAAa;AACxB;ACeO,SAAS,mBACd,MAAA,EACqF;AACrF,EAAA,OAAO,SAAS,qBACd,OAAA,EACyC;AACzC,IAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,IAAA,OAAOC,sBAAAA,CAAY;AAAA,MACjB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,YAAY,CAAC,KAAA,KAAkB,MAAA,CAAO,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MAC9D,WAAW,OAAA,EAAS,SAAA;AAAA,MACpB,SAAS,OAAA,EAAS;AAAA,KACnB,CAAA;AAAA,EACH,CAAA;AACF;AC5DA,SAAS,iBAAiB,QAAA,EAAoC;AAC5D,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACrC,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,IAC1B,SAAS,KAAA,CAAM;AAAA,GACjB,CAAE,CAAA;AACJ;AAEO,SAAS,YAAA,CACd,aAAA,EACA,MAAA,EACA,QAAA,EACkB;AAClB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIK,eAAY,aAAa,CAAA;AACrD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAuB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,UAAA,GAAac,aAAO,IAAI,CAAA;AAE9B,EAAA,MAAM,YAAA,GAAelB,iBAAAA;AAAA,IACnB,CAAC,KAAA,KAAmB,CAAC,CAAA,KAA2C;AAC9D,MAAA,MAAM,IAAA,GAAO,EAAE,GAAG,MAAA,EAAQ,CAAC,KAAK,GAAG,CAAA,CAAE,MAAA,CAAO,KAAA,EAAM;AAClD,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,KAAU,KAAK,CAAC,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,aAAA,GAAgBA,iBAAAA,CAAY,CAAC,KAAA,EAAgB,KAAA,KAAkB;AACnE,IAAA,SAAA,CAAU,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,KAAA,EAAM,CAAO,CAAA;AACtD,IAAA,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,KAAU,KAAK,CAAC,CAAA;AAAA,EAC/D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeA,iBAAAA;AAAA,IACnB,OAAO,CAAA,KAAiB;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AACtC,MAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,QAAA,SAAA,CAAU,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAC,CAAA;AACxC,QAAA;AAAA,MACF;AACA,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,MAAM,CAAA;AAAA,MACvB,CAAA,SAAE;AACA,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,MAAA,EAAQ,QAAQ;AAAA,GAC3B;AAEA,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM;AAC9B,IAAA,SAAA,CAAU,aAAa,CAAA;AACvB,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,cAAc,YAAA,EAAc,YAAA,EAAc,eAAe,KAAA,EAAM;AAC1F;AC7DO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAII,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,MAAA,GAASJ,iBAAAA,CAAY,MAAM,UAAA,CAAW,CAAC,MAAM,CAAC,CAAC,CAAA,EAAG,EAAE,CAAA;AAC1D,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,OAAA,GAAW,SAAoB,UAAA,EAAqB;AACtF;;;ACoFO,IAAM,WAAA,GAAsB","file":"index.cjs","sourcesContent":["import { z } from 'zod'\nimport type { AccessMessages } from '../types'\n\n// ─── Schema Factories (locale-aware) ─────────────────────────\n\nexport function createLoginSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n password: z.string({ required_error: v.passwordRequired }).min(1, v.passwordRequired),\n })\n}\n\nexport function createSignupSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n password: z.string({ required_error: v.passwordRequired }).min(10, v.passwordMinLength),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n })\n}\n\n// ─── Login ───────────────────────────────────────────────────\nexport const loginSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n password: z\n .string({ required_error: 'La contraseña es requerida' })\n .min(1, 'La contraseña es requerida'),\n})\n\nexport type LoginInput = z.infer<typeof loginSchema>\n\n// ─── Signup ──────────────────────────────────────────────────\nexport const signupSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n password: z\n .string({ required_error: 'La contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n})\n\nexport type SignupInput = z.infer<typeof signupSchema>\n\n// ─── Change Password ─────────────────────────────────────────\nexport const changePasswordSchema = z.object({\n currentPassword: z\n .string({ required_error: 'La contraseña actual es requerida' })\n .min(1, 'La contraseña actual es requerida'),\n newPassword: z\n .string({ required_error: 'La nueva contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n})\n\nexport type ChangePasswordInput = z.infer<typeof changePasswordSchema>\n\n// ─── Magic Link ──────────────────────────────────────────────\nexport const magicLinkRequestSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n})\n\nexport type MagicLinkRequestInput = z.infer<typeof magicLinkRequestSchema>\n\nexport const magicLinkVerifySchema = z.object({\n token: z.string({ required_error: 'El token es requerido' }).min(1, 'El token es requerido'),\n})\n\nexport type MagicLinkVerifyInput = z.infer<typeof magicLinkVerifySchema>\n\n// ─── Social Login ────────────────────────────────────────────\nexport const socialLoginSchema = z.object({\n provider: z.enum(['google', 'github'], {\n required_error: 'El proveedor es requerido',\n }),\n providerAccountId: z\n .string({ required_error: 'El ID de proveedor es requerido' })\n .min(1, 'El ID de proveedor es requerido'),\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n emailVerified: z.boolean().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n createUserIfNotExists: z.boolean().optional(),\n turnstileToken: z.string().optional(),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n})\n\nexport type SocialLoginInput = z.infer<typeof socialLoginSchema>\n\n// ─── Forgot Password (request reset) ────────────────────────\nexport function createForgotPasswordSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n })\n}\n\nexport const forgotPasswordSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n})\n\nexport type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>\n\n// ─── Reset Password (confirm reset) ─────────────────────────\nexport function createResetPasswordConfirmSchema(v: AccessMessages['validation']) {\n return z\n .object({\n token: z.string({ required_error: v.tokenRequired }).min(1, v.tokenRequired),\n newPassword: z.string({ required_error: v.newPasswordRequired }).min(10, v.passwordMinLength),\n confirmPassword: z\n .string({ required_error: v.confirmPasswordRequired })\n .min(1, v.confirmPasswordRequired),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: v.passwordsMismatch,\n path: ['confirmPassword'],\n })\n}\n\nexport const resetPasswordConfirmSchema = z\n .object({\n token: z.string({ required_error: 'El token es requerido' }).min(1, 'El token es requerido'),\n newPassword: z\n .string({ required_error: 'La nueva contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n confirmPassword: z\n .string({ required_error: 'Confirma tu contraseña' })\n .min(1, 'Confirma tu contraseña'),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: 'Las contraseñas no coinciden',\n path: ['confirmPassword'],\n })\n\nexport type ResetPasswordConfirmInput = z.infer<typeof resetPasswordConfirmSchema>\n\n// ─── Passkey Register Start ──────────────────────────────────\nexport const passkeyRegisterStartSchema = z.object({\n deviceName: z.string().optional(),\n})\n\nexport type PasskeyRegisterStartInput = z.infer<typeof passkeyRegisterStartSchema>\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","// ─── ApiError ────────────────────────────────────────────────\n/** Error thrown by the API client — carries the HTTP status code. */\nexport interface ApiError extends Error {\n status: number\n}\n\n/** Check if an error is an API auth error (401/403). */\nexport function isAuthError(err: unknown): boolean {\n return (\n err instanceof Error &&\n typeof (err as ApiError).status === 'number' &&\n ((err as ApiError).status === 401 || (err as ApiError).status === 403)\n )\n}\n\n// ─── Path suffixes (appended to basePath) ───────────────────\nconst SUFFIXES = {\n login: 'login',\n signup: 'signup',\n logout: 'logout',\n me: 'me',\n refresh: 'refresh',\n bootstrap: 'session/bootstrap',\n magicLinkRequest: 'magic-link/request',\n magicLinkVerify: 'magic-link/verify',\n socialLogin: 'social/login',\n changePassword: 'password/change',\n passkeyLogin: 'passkeys/login',\n passkeyLoginStart: 'passkeys/login/start',\n passkeyLoginVerify: 'passkeys/login/verify',\n passkeyRegisterStart: 'passkeys/register/start',\n passkeyRegisterVerify: 'passkeys/register/verify',\n passkeys: 'passkeys',\n providers: 'billing/providers',\n plans: 'billing/plans',\n subscription: 'billing/subscription',\n checkout: 'billing/checkout',\n billingPortal: 'billing/portal',\n invoices: 'billing/invoices',\n uploadTransferProof: 'billing/upload-proof',\n submitTransferProof: 'billing/transfer-proof',\n transferProofs: 'billing/transfer-proofs',\n payphoneConfirm: 'billing/payphone/confirm',\n passwordResetRequest: 'password/reset/request',\n passwordResetConfirm: 'password/reset/confirm',\n referralMe: 'referrals/me',\n referralStats: 'referrals/stats',\n userTenants: 'tenants',\n branches: 'branches',\n paymentMethods: 'payment-methods',\n} as const\n\n/** Base paths for each mode */\nexport const BASE_PATHS = {\n /** Proxy mode (Next.js): requests go to the same origin via route handler */\n proxy: '/api/auth',\n /** Direct mode: requests go straight to the Azirid API */\n direct: '/v1/users/auth',\n} as const\n\n/** Build full path map from a basePath */\nexport function buildPaths(basePath: string): AuthPaths {\n const bp = basePath.replace(/\\/$/, '')\n return Object.fromEntries(\n Object.entries(SUFFIXES).map(([key, suffix]) => [key, `${bp}/${suffix}`]),\n ) as unknown as AuthPaths\n}\n\n/** Default paths (direct mode — backward compatible) */\nconst PATHS = buildPaths(BASE_PATHS.direct)\n\nexport type AuthPaths = { [K in keyof typeof SUFFIXES]: string }\n\n// ─── Client config ───────────────────────────────────────────\nexport interface AccessClientConfig {\n /** Base URL of the Azirid API (empty string for proxy mode) */\n baseUrl: string\n /**\n * Base path for auth endpoints.\n * - Proxy mode: '/api/auth' (matches Next.js route handler)\n * - Direct mode: '/v1/users/auth' (matches API routes)\n * @default '/v1/users/auth'\n */\n basePath?: string\n /** Extra headers (e.g. Authorization) */\n headers?: Record<string, string>\n}\n\nexport interface AccessClient {\n /** HTTP methods */\n post: <T = unknown>(path: string, body?: unknown) => Promise<T>\n get: <T = unknown>(path: string) => Promise<T>\n patch: <T = unknown>(path: string, body?: unknown) => Promise<T>\n del: <T = unknown>(path: string) => Promise<T>\n /** Resolved paths */\n paths: AuthPaths\n /** Base URL */\n baseUrl: string\n /** App context */\n appContext?: {\n publishableKey: string\n tenantId?: string\n }\n /** Manually set the access token (used by refresh/bootstrap) */\n setAccessToken: (token: string | null) => void\n /** Get the current access token */\n getAccessToken: () => string | null\n /** Store refresh token received from the API body (cross-origin support) */\n setRefreshToken: (token: string | null) => void\n /** Get the current in-memory refresh token */\n getRefreshToken: () => string | null\n /** Store CSRF token received from the API body (cross-origin support) */\n setCsrfToken: (token: string | null) => void\n /** Get the current CSRF token (from memory or cookie) */\n getCsrfToken: () => string | null\n /** Deduplicated refresh — safe to call from multiple places concurrently */\n refreshSession: (opts?: { tenantId?: string }) => Promise<void>\n /** Deduplicated bootstrap — safe to call from Strict Mode double-mounts */\n bootstrapSession: <T = unknown>() => Promise<T>\n}\n\nexport function createAccessClient(\n config: AccessClientConfig,\n appContext?: AccessClient['appContext'],\n): AccessClient {\n const baseUrl = config.baseUrl.replace(/\\/$/, '')\n const paths = config.basePath ? buildPaths(config.basePath) : PATHS\n\n // sessionStorage keys (per-tab, survives page refresh)\n const storageKeyRt = '__azrt'\n const storageKeyCsrf = '__azxc'\n\n function ssGet(key: string): string | null {\n try {\n return typeof sessionStorage !== 'undefined' ? sessionStorage.getItem(key) : null\n } catch {\n return null\n }\n }\n function ssSet(key: string, value: string | null) {\n try {\n if (typeof sessionStorage === 'undefined') return\n if (value) sessionStorage.setItem(key, value)\n else sessionStorage.removeItem(key)\n } catch {\n /* SSR or private browsing */\n }\n }\n\n let accessToken: string | null = null\n let refreshToken: string | null = ssGet(storageKeyRt)\n let csrfToken: string | null = ssGet(storageKeyCsrf)\n let isRefreshing = false\n let refreshPromise: Promise<void> | null = null\n let bootstrapPromise: Promise<unknown> | null = null\n\n // ── Cross-tab token sync via BroadcastChannel ──────────────\n type TokenMessage = {\n type: 'token-refreshed'\n accessToken: string | null\n refreshToken: string | null\n csrfToken: string | null\n }\n\n let channel: BroadcastChannel | null = null\n try {\n if (typeof BroadcastChannel !== 'undefined') {\n channel = new BroadcastChannel('azirid-auth')\n channel.onmessage = (event: MessageEvent<TokenMessage>) => {\n if (event.data?.type === 'token-refreshed') {\n accessToken = event.data.accessToken\n if (event.data.refreshToken) setRefreshToken(event.data.refreshToken)\n if (event.data.csrfToken) setCsrfToken(event.data.csrfToken)\n }\n }\n }\n } catch {\n // BroadcastChannel not available (SSR, old browsers)\n }\n\n function broadcastTokens() {\n try {\n channel?.postMessage({\n type: 'token-refreshed',\n accessToken,\n refreshToken,\n csrfToken,\n } satisfies TokenMessage)\n } catch {\n // ignore\n }\n }\n\n function setAccessToken(token: string | null) {\n accessToken = token\n }\n\n function getAccessToken() {\n return accessToken\n }\n\n function setRefreshToken(token: string | null) {\n refreshToken = token\n ssSet(storageKeyRt, token)\n }\n\n function getRefreshToken() {\n return refreshToken\n }\n\n function setCsrfToken(token: string | null) {\n csrfToken = token\n ssSet(storageKeyCsrf, token)\n }\n\n const csrfCookieName = '_axc'\n\n /** Read CSRF token: prefer in-memory (cross-origin), fallback to cookie (same-origin) */\n function getCsrfToken(): string | null {\n if (csrfToken) return csrfToken\n if (typeof document === 'undefined') return null\n const match = document.cookie.match(new RegExp(`(?:^|;\\\\s*)${csrfCookieName}=([^;]*)`))\n return match ? decodeURIComponent(match[1]) : null\n }\n\n // Paths that rely on refresh token (not Bearer JWT)\n const sessionPaths: readonly string[] = [paths.refresh, paths.bootstrap, paths.logout]\n\n async function refreshTokensInternal(opts?: { tenantId?: string }): Promise<void> {\n const reqHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n reqHeaders['X-Publishable-Key'] = appContext.publishableKey\n }\n const csrf = getCsrfToken()\n if (csrf) reqHeaders['X-CSRF-Token'] = csrf\n\n // Send refresh token in body for cross-origin support\n const bodyPayload: Record<string, string> = {}\n if (refreshToken) {\n bodyPayload['rt'] = refreshToken\n }\n if (opts?.tenantId) {\n bodyPayload['tenantId'] = opts.tenantId\n }\n\n const res = await fetch(`${baseUrl}${paths.refresh}`, {\n method: 'POST',\n headers: reqHeaders,\n credentials: 'include',\n body: JSON.stringify(bodyPayload),\n })\n\n if (!res.ok) {\n accessToken = null\n setRefreshToken(null)\n setCsrfToken(null)\n throw new Error('Session expired')\n }\n\n const raw = await res.json()\n // Unwrap API envelope { data, meta } → extract data payload\n const json = raw && typeof raw === 'object' && 'data' in raw && 'meta' in raw ? raw.data : raw\n accessToken = json.at ?? json.accessToken ?? null\n // Update tokens from body (dual delivery) — persisted to sessionStorage\n const rt = json.rt ?? json.refreshToken\n const xc = json.xc ?? json.csrfToken\n if (rt) setRefreshToken(rt)\n if (xc) setCsrfToken(xc)\n\n // Notify other tabs about the new tokens\n broadcastTokens()\n }\n\n /**\n * Deduplicated refresh: if a refresh is already in flight, all callers\n * await the same promise instead of firing a second request with the\n * same (soon-to-be-revoked) token.\n */\n function refreshTokens(opts?: { tenantId?: string }): Promise<void> {\n // If switching tenant, bypass deduplication cache to force a new request\n if (opts?.tenantId) {\n isRefreshing = true\n return refreshTokensInternal(opts).finally(() => {\n isRefreshing = false\n })\n }\n\n if (refreshPromise) return refreshPromise\n\n isRefreshing = true\n refreshPromise = refreshTokensInternal().finally(() => {\n isRefreshing = false\n refreshPromise = null\n })\n\n return refreshPromise\n }\n\n /**\n * Deduplicated bootstrap: if a bootstrap is already in flight (e.g. React 18\n * Strict Mode double-mount), all callers await the same promise instead of\n * firing a second request that would rotate the token and invalidate the first.\n */\n function deduplicatedBootstrap<T>(): Promise<T> {\n if (bootstrapPromise) return bootstrapPromise as Promise<T>\n\n bootstrapPromise = request<T>('POST', paths.bootstrap).finally(() => {\n bootstrapPromise = null\n })\n\n return bootstrapPromise as Promise<T>\n }\n\n async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n\n // Publishable key header for public endpoints\n if (appContext?.publishableKey) {\n headers['X-Publishable-Key'] = appContext.publishableKey\n }\n\n // Only send Bearer token on endpoints that use JWT guard (not session-based)\n const isSessionPath = sessionPaths.includes(path)\n if (accessToken && !isSessionPath) {\n headers['Authorization'] = `Bearer ${accessToken}`\n }\n\n // CSRF token (from memory or cookie)\n const csrf = getCsrfToken()\n if (csrf) {\n headers['X-CSRF-Token'] = csrf\n }\n\n // For session paths (refresh/bootstrap/logout), inject refresh token into body\n let requestBody = body\n if (isSessionPath && refreshToken) {\n const existing =\n typeof body === 'object' && body !== null ? (body as Record<string, unknown>) : {}\n if (!existing['rt']) {\n requestBody = { ...existing, rt: refreshToken }\n }\n }\n\n let res = await fetch(`${baseUrl}${path}`, {\n method,\n headers,\n credentials: 'include',\n ...(requestBody !== undefined ? { body: JSON.stringify(requestBody) } : {}),\n })\n\n // Auto-refresh on 401 (skip for auth endpoints that don't use JWT)\n const skipRefreshPaths = [\n paths.refresh,\n paths.login,\n paths.signup,\n paths.bootstrap,\n paths.logout,\n ]\n if (res.status === 401 && !skipRefreshPaths.includes(path as typeof paths.refresh)) {\n try {\n await refreshTokens()\n } catch {\n let msg = 'Session expired'\n try {\n const json = await res.json()\n msg =\n json.message ||\n json.error?.message ||\n (typeof json.error === 'string' ? json.error : null) ||\n msg\n } catch {\n // ignore parse errors\n }\n throw new Error(msg)\n }\n\n // Retry the original request with the new token\n const retryHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n retryHeaders['X-Publishable-Key'] = appContext.publishableKey\n }\n if (accessToken && !isSessionPath) {\n retryHeaders['Authorization'] = `Bearer ${accessToken}`\n }\n const retryCsrf = getCsrfToken()\n if (retryCsrf) {\n retryHeaders['X-CSRF-Token'] = retryCsrf\n }\n\n res = await fetch(`${baseUrl}${path}`, {\n method,\n headers: retryHeaders,\n credentials: 'include',\n ...(requestBody !== undefined ? { body: JSON.stringify(requestBody) } : {}),\n })\n }\n\n if (!res.ok) {\n let msg = `Error ${res.status}`\n try {\n const json = await res.json()\n msg =\n json.message ||\n json.error?.message ||\n (typeof json.error === 'string' ? json.error : null) ||\n msg\n } catch {\n // ignore parse errors\n }\n const err = new Error(msg)\n ;(err as ApiError).status = res.status\n throw err\n }\n\n // Handle 204 No Content\n if (res.status === 204) return undefined as T\n\n // Unwrap API envelope { data, meta } → return inner data\n const json = await res.json()\n if (json && typeof json === 'object' && 'data' in json && 'meta' in json) {\n return json.data as T\n }\n return json as T\n }\n\n return {\n post: <T = unknown>(path: string, body?: unknown) => request<T>('POST', path, body),\n get: <T = unknown>(path: string) => request<T>('GET', path),\n patch: <T = unknown>(path: string, body?: unknown) => request<T>('PATCH', path, body),\n del: <T = unknown>(path: string) => request<T>('DELETE', path),\n paths,\n baseUrl,\n appContext,\n setAccessToken,\n getAccessToken,\n setRefreshToken,\n getRefreshToken,\n setCsrfToken,\n getCsrfToken,\n refreshSession: (opts?: { tenantId?: string }) => refreshTokens(opts),\n bootstrapSession: <T = unknown>() => deduplicatedBootstrap<T>(),\n }\n}\n\nexport { PATHS }\n","import type { AccessMessages } from '../types'\n\nexport const es: AccessMessages = {\n login: {\n title: 'Inicia sesión en tu cuenta',\n description: 'Ingresa tus credenciales para acceder al dashboard.',\n submit: 'Iniciar sesión',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: '••••••••',\n },\n signup: {\n title: 'Crea tu cuenta',\n description: 'Ingresa tus datos para registrarte.',\n submit: 'Crear cuenta',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: 'Mín. 10 caracteres',\n confirmPasswordLabel: 'Confirmar contraseña',\n confirmPasswordPlaceholder: 'Repite tu contraseña',\n },\n forgotPassword: {\n title: 'Recuperar contraseña',\n description:\n 'Ingresa tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.',\n submit: 'Enviar enlace',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n successMessage: 'Revisa tu correo electrónico para restablecer tu contraseña.',\n },\n resetPassword: {\n title: 'Restablecer contraseña',\n description: 'Ingresa tu nueva contraseña.',\n submit: 'Restablecer contraseña',\n newPasswordLabel: 'Nueva contraseña',\n newPasswordPlaceholder: 'Mín. 10 caracteres',\n confirmPasswordLabel: 'Confirmar contraseña',\n confirmPasswordPlaceholder: 'Repite tu contraseña',\n },\n social: {\n google: 'Continuar con Google',\n apple: 'Continuar con Apple',\n separator: 'o continuar con correo',\n comingSoon: 'Próximamente',\n },\n passwordToggle: {\n show: 'Ver',\n hide: 'Ocultar',\n },\n securedBy: 'Protegido por',\n billing: {\n pay: 'Pagar',\n selectPaymentMethod: 'Selecciona método de pago',\n creditCard: 'Tarjeta de crédito/débito',\n paypal: 'PayPal',\n payphone: 'Payphone',\n bankTransfer: 'Transferencia bancaria',\n cancel: 'Cancelar',\n processing: 'Procesando...',\n },\n navigation: {\n noAccountText: '¿No tienes cuenta?',\n signUpLink: 'Regístrate',\n hasAccountText: '¿Ya tienes cuenta?',\n signInLink: 'Inicia sesión',\n forgotPassword: '¿Olvidaste tu contraseña?',\n backToLogin: 'Volver a iniciar sesión',\n },\n validation: {\n emailRequired: 'El correo es requerido',\n emailInvalid: 'Correo electrónico inválido',\n passwordRequired: 'La contraseña es requerida',\n passwordMinLength: 'La contraseña debe tener al menos 10 caracteres',\n confirmPasswordRequired: 'Confirma tu contraseña',\n passwordsMismatch: 'Las contraseñas no coinciden',\n tokenRequired: 'El token es requerido',\n newPasswordRequired: 'La nueva contraseña es requerida',\n currentPasswordRequired: 'La contraseña actual es requerida',\n mfaCodeRequired: 'El código es requerido',\n mfaCodeLength: 'El código debe tener 6 dígitos',\n providerRequired: 'El proveedor es requerido',\n providerIdRequired: 'El ID de proveedor es requerido',\n urlInvalid: 'URL inválida',\n },\n}\n","import type { AccessMessages } from '../types'\n\nexport const en: AccessMessages = {\n login: {\n title: 'Sign in to your account',\n description: 'Enter your credentials to access the dashboard.',\n submit: 'Sign in',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: '••••••••',\n },\n signup: {\n title: 'Create your account',\n description: 'Enter your details to sign up.',\n submit: 'Create account',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: 'Min. 10 characters',\n confirmPasswordLabel: 'Confirm password',\n confirmPasswordPlaceholder: 'Repeat your password',\n },\n forgotPassword: {\n title: 'Reset password',\n description: \"Enter your email and we'll send you a link to reset your password.\",\n submit: 'Send link',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n successMessage: 'Check your email to reset your password.',\n },\n resetPassword: {\n title: 'Reset password',\n description: 'Enter your new password.',\n submit: 'Reset password',\n newPasswordLabel: 'New password',\n newPasswordPlaceholder: 'Min. 10 characters',\n confirmPasswordLabel: 'Confirm password',\n confirmPasswordPlaceholder: 'Repeat your password',\n },\n social: {\n google: 'Continue with Google',\n apple: 'Continue with Apple',\n separator: 'or continue with email',\n comingSoon: 'Coming soon',\n },\n passwordToggle: {\n show: 'Show',\n hide: 'Hide',\n },\n securedBy: 'Secured by',\n billing: {\n pay: 'Pay',\n selectPaymentMethod: 'Select payment method',\n creditCard: 'Credit/Debit Card',\n paypal: 'PayPal',\n payphone: 'Payphone',\n bankTransfer: 'Bank Transfer',\n cancel: 'Cancel',\n processing: 'Processing...',\n },\n navigation: {\n noAccountText: \"Don't have an account?\",\n signUpLink: 'Sign up',\n hasAccountText: 'Already have an account?',\n signInLink: 'Sign in',\n forgotPassword: 'Forgot your password?',\n backToLogin: 'Back to sign in',\n },\n validation: {\n emailRequired: 'Email is required',\n emailInvalid: 'Invalid email address',\n passwordRequired: 'Password is required',\n passwordMinLength: 'Password must be at least 10 characters',\n confirmPasswordRequired: 'Please confirm your password',\n passwordsMismatch: 'Passwords do not match',\n tokenRequired: 'Token is required',\n newPasswordRequired: 'New password is required',\n currentPasswordRequired: 'Current password is required',\n mfaCodeRequired: 'Code is required',\n mfaCodeLength: 'Code must be 6 digits',\n providerRequired: 'Provider is required',\n providerIdRequired: 'Provider ID is required',\n urlInvalid: 'Invalid URL',\n },\n}\n","import type { AccessMessages, SupportedLocale } from '../types'\nimport { es } from './es'\nimport { en } from './en'\n\nconst dictionaries: Record<SupportedLocale, AccessMessages> = { es, en }\n\n/**\n * Resolve the messages dictionary for a given locale.\n * Optional overrides are shallow-merged per section.\n */\nexport function resolveMessages(\n locale: SupportedLocale = 'es',\n overrides?: Partial<AccessMessages>,\n): AccessMessages {\n const base = dictionaries[locale] ?? dictionaries.es\n if (!overrides) return base\n\n return {\n login: { ...base.login, ...overrides.login },\n signup: { ...base.signup, ...overrides.signup },\n forgotPassword: { ...base.forgotPassword, ...overrides.forgotPassword },\n resetPassword: { ...base.resetPassword, ...overrides.resetPassword },\n navigation: { ...base.navigation, ...overrides.navigation },\n social: { ...base.social, ...overrides.social },\n passwordToggle: { ...base.passwordToggle, ...overrides.passwordToggle },\n securedBy: overrides.securedBy ?? base.securedBy,\n billing: { ...base.billing, ...overrides.billing },\n validation: { ...base.validation, ...overrides.validation },\n }\n}\n\nexport { es, en }\n","// Auto-generated — do not edit.\nexport const css = \"/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-azirid] *,[data-azirid] :before,[data-azirid] :after,[data-azirid] ::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-content:\\\"\\\"}}[data-azirid]{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-blue-500:oklch(62.3% .214 259.815);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-medium:500;--leading-snug:1.375;--radius-md:calc(var(--aa-radius) - 2px);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--aa-font-sans,ui-sans-serif, system-ui, sans-serif);--default-mono-font-family:var(--font-mono)}.\\\\@container\\\\/card-header{container:card-header/inline-size}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.start{inset-inline-start:var(--spacing)}.z-10{z-index:10}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mr-2{margin-right:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.w-4{width:calc(var(--spacing) * 4)}.w-auto{width:auto}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.auto-rows-min{grid-auto-rows:min-content}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.rounded-\\\\[min\\\\(var\\\\(--radius-md\\\\)\\\\,10px\\\\)\\\\]{border-radius:min(var(--radius-md), 10px)}.rounded-\\\\[min\\\\(var\\\\(--radius-md\\\\)\\\\,12px\\\\)\\\\]{border-radius:min(var(--radius-md), 12px)}.rounded-lg{border-radius:var(--aa-radius)}.rounded-md{border-radius:calc(var(--aa-radius) - 2px)}.rounded-xl{border-radius:calc(var(--aa-radius) + 4px)}.rounded-t-xl{border-top-left-radius:calc(var(--aa-radius) + 4px);border-top-right-radius:calc(var(--aa-radius) + 4px)}.rounded-b-xl{border-bottom-right-radius:calc(var(--aa-radius) + 4px);border-bottom-left-radius:calc(var(--aa-radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--aa-border)}.border-destructive,.border-destructive\\\\/50{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\\\/50{border-color:color-mix(in oklab, var(--aa-destructive) 50%, transparent)}}.border-green-200{border-color:var(--color-green-200)}.border-input{border-color:var(--aa-input)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--aa-background)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--aa-border)}.bg-card{background-color:var(--aa-card)}.bg-destructive,.bg-destructive\\\\/10{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\\\/10{background-color:color-mix(in oklab, var(--aa-destructive) 10%, transparent)}}.bg-green-50{background-color:var(--color-green-50)}.bg-muted,.bg-muted\\\\/50{background-color:var(--aa-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\\\/50{background-color:color-mix(in oklab, var(--aa-muted) 50%, transparent)}}.bg-primary{background-color:var(--aa-primary)}.bg-secondary{background-color:var(--aa-secondary)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-clip-padding{background-clip:padding-box}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\\\[0\\\\.8rem\\\\]{font-size:.8rem}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.whitespace-nowrap{white-space:nowrap}.text-card-foreground{color:var(--aa-card-foreground)}.text-destructive{color:var(--aa-destructive)}.text-green-800{color:var(--color-green-800)}.text-muted-foreground{color:var(--aa-muted-foreground)}.text-primary{color:var(--aa-primary)}.text-primary-foreground{color:var(--aa-primary-foreground)}.text-secondary-foreground{color:var(--aa-secondary-foreground)}.uppercase{text-transform:uppercase}.underline-offset-4{text-underline-offset:4px}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-foreground,.ring-foreground\\\\/10{--tw-ring-color:var(--aa-foreground)}@supports (color:color-mix(in lab, red, red)){.ring-foreground\\\\/10{--tw-ring-color:color-mix(in oklab, var(--aa-foreground) 10%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-\\\\[disabled\\\\=true\\\\]\\\\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\\\\[disabled\\\\=true\\\\]\\\\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:p-3:is(:where(.group\\\\/card)[data-size=sm] *){padding:calc(var(--spacing) * 3)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:px-3:is(:where(.group\\\\/card)[data-size=sm] *){padding-inline:calc(var(--spacing) * 3)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:text-sm:is(:where(.group\\\\/card)[data-size=sm] *){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.peer-disabled\\\\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\\\\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.file\\\\:inline-flex::file-selector-button{display:inline-flex}.file\\\\:h-6::file-selector-button{height:calc(var(--spacing) * 6)}.file\\\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\\\:bg-transparent::file-selector-button{background-color:#0000}.file\\\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\\\:text-foreground::file-selector-button{color:var(--aa-foreground)}.placeholder\\\\:text-muted-foreground::placeholder{color:var(--aa-muted-foreground)}.after\\\\:absolute:after{content:var(--tw-content);position:absolute}.after\\\\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing) * 0)}.after\\\\:top-1\\\\/2:after{content:var(--tw-content);top:50%}.after\\\\:z-0:after{content:var(--tw-content);z-index:0}.after\\\\:flex:after{content:var(--tw-content);display:flex}.after\\\\:items-center:after{content:var(--tw-content);align-items:center}.after\\\\:border-t:after{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.after\\\\:border-border:after{content:var(--tw-content);border-color:var(--aa-border)}@media (hover:hover){.hover\\\\:bg-destructive\\\\/20:hover{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-destructive\\\\/20:hover{background-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.hover\\\\:bg-muted:hover{background-color:var(--aa-muted)}.hover\\\\:bg-secondary\\\\/80:hover{background-color:var(--aa-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-secondary\\\\/80:hover{background-color:color-mix(in oklab, var(--aa-secondary) 80%, transparent)}}.hover\\\\:text-foreground:hover{color:var(--aa-foreground)}.hover\\\\:underline:hover{text-decoration-line:underline}}.focus-visible\\\\:border-destructive\\\\/40:focus-visible{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:border-destructive\\\\/40:focus-visible{border-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.focus-visible\\\\:border-ring:focus-visible{border-color:var(--aa-ring)}.focus-visible\\\\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:var(--aa-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-ring) 50%, transparent)}}.disabled\\\\:pointer-events-none:disabled{pointer-events:none}.disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:bg-input\\\\/50:disabled{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.disabled\\\\:bg-input\\\\/50:disabled{background-color:color-mix(in oklab, var(--aa-input) 50%, transparent)}}.disabled\\\\:opacity-50:disabled{opacity:.5}:where([data-slot=button-group]) .in-data-\\\\[slot\\\\=button-group\\\\]\\\\:rounded-lg{border-radius:var(--aa-radius)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-1\\\\.5:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 1.5)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-2:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 2)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-3:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 3)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-1\\\\.5:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 1.5)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-2:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 2)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-3:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 3)}.has-data-\\\\[slot\\\\=card-action\\\\]\\\\:grid-cols-\\\\[1fr_auto\\\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\\\\[slot\\\\=card-description\\\\]\\\\:grid-rows-\\\\[auto_auto\\\\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-data-\\\\[slot\\\\=card-footer\\\\]\\\\:pb-0:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}.has-\\\\[\\\\>img\\\\:first-child\\\\]\\\\:pt-0:has(>img:first-child){padding-top:calc(var(--spacing) * 0)}.aria-expanded\\\\:bg-muted[aria-expanded=true]{background-color:var(--aa-muted)}.aria-expanded\\\\:bg-secondary[aria-expanded=true]{background-color:var(--aa-secondary)}.aria-expanded\\\\:text-foreground[aria-expanded=true]{color:var(--aa-foreground)}.aria-expanded\\\\:text-secondary-foreground[aria-expanded=true]{color:var(--aa-secondary-foreground)}.aria-invalid\\\\:border-destructive[aria-invalid=true]{border-color:var(--aa-destructive)}.aria-invalid\\\\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.data-horizontal\\\\:h-px[data-horizontal]{height:1px}.data-horizontal\\\\:w-full[data-horizontal]{width:100%}.data-vertical\\\\:w-px[data-vertical]{width:1px}.data-vertical\\\\:self-stretch[data-vertical]{align-self:stretch}.data-\\\\[size\\\\=sm\\\\]\\\\:gap-3[data-size=sm]{gap:calc(var(--spacing) * 3)}.data-\\\\[size\\\\=sm\\\\]\\\\:py-3[data-size=sm]{padding-block:calc(var(--spacing) * 3)}.data-\\\\[size\\\\=sm\\\\]\\\\:has-data-\\\\[slot\\\\=card-footer\\\\]\\\\:pb-0[data-size=sm]:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}@media (min-width:48rem){.md\\\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\\\\:border-green-800:is(.dark *){border-color:var(--color-green-800)}.dark\\\\:border-input:is(.dark *){border-color:var(--aa-input)}.dark\\\\:bg-destructive\\\\/20:is(.dark *){background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-destructive\\\\/20:is(.dark *){background-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.dark\\\\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\\\\:bg-input\\\\/30:is(.dark *){background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-input\\\\/30:is(.dark *){background-color:color-mix(in oklab, var(--aa-input) 30%, transparent)}}.dark\\\\:text-green-200:is(.dark *){color:var(--color-green-200)}@media (hover:hover){.dark\\\\:hover\\\\:bg-destructive\\\\/30:is(.dark *):hover{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-destructive\\\\/30:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-destructive) 30%, transparent)}}.dark\\\\:hover\\\\:bg-input\\\\/50:is(.dark *):hover{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-input\\\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-input) 50%, transparent)}}.dark\\\\:hover\\\\:bg-muted\\\\/50:is(.dark *):hover{background-color:var(--aa-muted)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-muted\\\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-muted) 50%, transparent)}}}.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.dark\\\\:disabled\\\\:bg-input\\\\/80:is(.dark *):disabled{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:disabled\\\\:bg-input\\\\/80:is(.dark *):disabled{background-color:color-mix(in oklab, var(--aa-input) 80%, transparent)}}.dark\\\\:aria-invalid\\\\:border-destructive\\\\/50:is(.dark *)[aria-invalid=true]{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:border-destructive\\\\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--aa-destructive) 50%, transparent)}}.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.\\\\[\\\\&_a\\\\]\\\\:underline a{text-decoration-line:underline}.\\\\[\\\\&_a\\\\]\\\\:underline-offset-4 a{text-underline-offset:4px}@media (hover:hover){.\\\\[\\\\&_a\\\\]\\\\:hover\\\\:text-primary a:hover{color:var(--aa-primary)}}.\\\\[\\\\&_svg\\\\]\\\\:pointer-events-none svg{pointer-events:none}.\\\\[\\\\&_svg\\\\]\\\\:shrink-0 svg{flex-shrink:0}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3\\\\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\\\[\\\\.border-b\\\\]\\\\:pb-4.border-b{padding-bottom:calc(var(--spacing) * 4)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:\\\\[\\\\.border-b\\\\]\\\\:pb-3:is(:where(.group\\\\/card)[data-size=sm] *).border-b{padding-bottom:calc(var(--spacing) * 3)}@media (hover:hover){.\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80:is(a):hover{background-color:var(--aa-primary)}@supports (color:color-mix(in lab, red, red)){.\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80:is(a):hover{background-color:color-mix(in oklab, var(--aa-primary) 80%, transparent)}}}:is(.\\\\*\\\\:\\\\[img\\\\:first-child\\\\]\\\\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:calc(var(--aa-radius) + 4px);border-top-right-radius:calc(var(--aa-radius) + 4px)}:is(.\\\\*\\\\:\\\\[img\\\\:last-child\\\\]\\\\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:calc(var(--aa-radius) + 4px);border-bottom-left-radius:calc(var(--aa-radius) + 4px)}[data-azirid]{--aa-radius:.625rem;--aa-background:oklch(100% 0 0);--aa-foreground:oklch(14.5% 0 0);--aa-card:oklch(100% 0 0);--aa-card-foreground:oklch(14.5% 0 0);--aa-popover:oklch(100% 0 0);--aa-popover-foreground:oklch(14.5% 0 0);--aa-primary:oklch(20.5% 0 0);--aa-primary-foreground:oklch(98.5% 0 0);--aa-secondary:oklch(97% 0 0);--aa-secondary-foreground:oklch(20.5% 0 0);--aa-muted:oklch(97% 0 0);--aa-muted-foreground:oklch(55.6% 0 0);--aa-accent:oklch(97% 0 0);--aa-accent-foreground:oklch(20.5% 0 0);--aa-destructive:oklch(57.7% .245 27.325);--aa-border:oklch(92.2% 0 0);--aa-input:oklch(92.2% 0 0);--aa-ring:oklch(70.8% 0 0);--aa-font-sans:ui-sans-serif, system-ui, sans-serif}@layer base{[data-azirid]{font-family:var(--aa-font-sans);color:var(--aa-foreground);background-color:var(--aa-background);-webkit-text-size-adjust:100%;tab-size:4;-webkit-font-smoothing:antialiased;line-height:1.5}[data-azirid] *,[data-azirid] :before,[data-azirid] :after{box-sizing:border-box;border:0 solid;border-color:var(--aa-border);margin:0;padding:0}[data-azirid] hr{height:0;color:inherit;border-top-width:1px}[data-azirid] h1,[data-azirid] h2,[data-azirid] h3,[data-azirid] h4,[data-azirid] h5,[data-azirid] h6{font-size:inherit;font-weight:inherit}[data-azirid] a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}[data-azirid] b,[data-azirid] strong{font-weight:bolder}[data-azirid] code,[data-azirid] kbd,[data-azirid] samp,[data-azirid] pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}[data-azirid] small{font-size:80%}[data-azirid] table{text-indent:0;border-color:inherit;border-collapse:collapse}[data-azirid] button,[data-azirid] input,[data-azirid] optgroup,[data-azirid] select,[data-azirid] textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}[data-azirid] button,[data-azirid] select{text-transform:none}[data-azirid] button,[data-azirid] input[type=button],[data-azirid] input[type=reset],[data-azirid] input[type=submit]{-webkit-appearance:button;background-color:#0000;background-image:none}[data-azirid] :-moz-focusring{outline:auto}[data-azirid] ::-moz-focus-inner{border-style:none;padding:0}[data-azirid] :-moz-ui-invalid{box-shadow:none}[data-azirid] progress{vertical-align:baseline}[data-azirid] ::-webkit-inner-spin-button{height:auto}[data-azirid] ::-webkit-outer-spin-button{height:auto}[data-azirid] [type=search]{-webkit-appearance:textfield;outline-offset:-2px}[data-azirid] ::-webkit-search-decoration{-webkit-appearance:none}[data-azirid] ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[data-azirid] summary{display:list-item}[data-azirid] ol,[data-azirid] ul,[data-azirid] menu{margin:0;padding:0;list-style:none}[data-azirid] textarea{resize:vertical}[data-azirid] ::placeholder{opacity:1;color:currentColor}@supports (color:color-mix(in lab, red, red)){[data-azirid] ::placeholder{color:color-mix(in oklch, currentColor 50%, transparent)}}[data-azirid] img,[data-azirid] svg,[data-azirid] video,[data-azirid] canvas,[data-azirid] audio,[data-azirid] iframe,[data-azirid] embed,[data-azirid] object{vertical-align:middle;display:block}[data-azirid] img,[data-azirid] video{max-width:100%;height:auto}[data-azirid] [hidden]:not([hidden=until-found]){display:none}}@property --tw-rotate-x{syntax:\\\"*\\\";inherits:false}@property --tw-rotate-y{syntax:\\\"*\\\";inherits:false}@property --tw-rotate-z{syntax:\\\"*\\\";inherits:false}@property --tw-skew-x{syntax:\\\"*\\\";inherits:false}@property --tw-skew-y{syntax:\\\"*\\\";inherits:false}@property --tw-border-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\\\"*\\\";inherits:false}@property --tw-font-weight{syntax:\\\"*\\\";inherits:false}@property --tw-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\\\"*\\\";inherits:false}@property --tw-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\\\"*\\\";inherits:false}@property --tw-inset-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\\\"*\\\";inherits:false}@property --tw-ring-offset-width{syntax:\\\"<length>\\\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\\\"*\\\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-content{syntax:\\\"*\\\";inherits:false;initial-value:\\\"\\\"}@keyframes spin{to{transform:rotate(360deg)}}\"\n","import { css } from '../styles/generated'\n\nconst STYLE_ID = 'azirid-access-styles'\nlet injected = false\n\nexport function injectStyles() {\n if (injected || typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) {\n injected = true\n return\n }\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = css\n document.head.appendChild(style)\n injected = true\n}\n\n/** Remove injected styles from the DOM (useful when embedding in host apps). */\nexport function removeStyles() {\n if (typeof document === 'undefined') return\n document.getElementById(STYLE_ID)?.remove()\n injected = false\n}\n","import { useCallback } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport type { AccessClient } from '../client'\nimport type { AuthSuccessResponse, AziridProviderProps, SignupData } from '../types'\n\nexport interface MutationDeps {\n client: AccessClient\n props: AziridProviderProps\n setUser: (user: AuthSuccessResponse['user'] | null) => void\n setError: (error: string | null) => void\n updateAccessToken: (token: string | null) => void\n saveSessionTokens: (data: Record<string, unknown>) => void\n normalizeToken: (data: Record<string, unknown>) => string\n withAppContext: (body: Record<string, unknown>) => Record<string, unknown>\n clearSession: () => void\n}\n\nexport function useAuthMutations(deps: MutationDeps) {\n const {\n client,\n props,\n setUser,\n setError,\n updateAccessToken,\n saveSessionTokens,\n normalizeToken,\n withAppContext,\n clearSession,\n } = deps\n\n const queryClient = useQueryClient()\n\n // ─── Login ─────────────────────────────────────────────────\n const loginMutation = useMutation({\n mutationFn: (data: { email: string; password: string }) =>\n client.post<AuthSuccessResponse>(client.paths.login, withAppContext(data)),\n onSuccess: (data) => {\n setUser(data.user)\n updateAccessToken(normalizeToken(data as unknown as Record<string, unknown>))\n saveSessionTokens(data as unknown as Record<string, unknown>)\n setError(null)\n props.onAuthStateChange?.()\n props.onLoginSuccess?.(data)\n },\n onError: (err: Error) => {\n setError(err.message)\n props.onError?.(err.message)\n },\n })\n\n // ─── Signup ────────────────────────────────────────────────\n const signupMutation = useMutation({\n mutationFn: (data: SignupData) => {\n const { confirmPassword: _, ...payload } = data as SignupData & { confirmPassword?: string }\n return client.post<AuthSuccessResponse>(client.paths.signup, withAppContext({ ...payload }))\n },\n onSuccess: (data) => {\n setUser(data.user)\n updateAccessToken(normalizeToken(data as unknown as Record<string, unknown>))\n saveSessionTokens(data as unknown as Record<string, unknown>)\n setError(null)\n props.onAuthStateChange?.()\n props.onSignupSuccess?.(data)\n },\n onError: (err: Error) => {\n setError(err.message)\n props.onError?.(err.message)\n },\n })\n\n // ─── Logout ────────────────────────────────────────────────\n const logoutMutation = useMutation({\n mutationFn: () => client.post(client.paths.logout),\n onSettled: () => {\n clearSession()\n setError(null)\n queryClient.clear()\n props.onAuthStateChange?.()\n props.onLogoutSuccess?.()\n },\n })\n\n // ─── Refresh ───────────────────────────────────────────────\n const refreshFn = useCallback(async () => {\n try {\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n } catch (err) {\n clearSession()\n queryClient.clear()\n props.onSessionExpired?.()\n throw err\n }\n }, [client, queryClient, props, updateAccessToken, clearSession])\n\n // ─── Switch Tenant ─────────────────────────────────────────\n const switchTenantFn = useCallback(\n async (tenantId: string) => {\n await client.refreshSession({ tenantId })\n updateAccessToken(client.getAccessToken())\n await queryClient.invalidateQueries({ queryKey: ['azirid-access'] })\n },\n [client, queryClient, updateAccessToken],\n )\n\n return {\n loginMutation,\n signupMutation,\n logoutMutation,\n refreshFn,\n switchTenantFn,\n }\n}\n","import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { createAccessClient, isAuthError, BASE_PATHS, type AccessClient } from '../client'\nimport type {\n AziridContextValue,\n AccessMessages,\n AziridProviderProps,\n AppBranding,\n AuthUser,\n BootstrapResponse,\n SignupData,\n} from '../types'\nimport { resolveMessages } from '../i18n'\nimport { injectStyles, removeStyles } from '../utils/inject-styles'\nimport { useAuthMutations } from './mutations'\n\n// ─── Contexts ────────────────────────────────────────────────\nconst AziridContext = createContext<AziridContextValue | null>(null)\nAziridContext.displayName = 'AziridContext'\n\nconst ClientContext = createContext<AccessClient | null>(null)\nClientContext.displayName = 'AccessClientContext'\n\ninterface BrandingContextValue {\n branding: AppBranding | null\n messages: AccessMessages\n}\n\nconst BrandingContext = createContext<BrandingContextValue | null>(null)\nBrandingContext.displayName = 'BrandingContext'\n\n/** Access the raw API client for custom calls */\nexport function useAccessClient(): AccessClient {\n const ctx = useContext(ClientContext)\n if (!ctx) {\n throw new Error('useAccessClient must be used within an <AziridProvider>.')\n }\n return ctx\n}\n\n/**\n * Get the current app branding from bootstrap.\n * Returns null when no branding is configured.\n */\nexport function useBranding(): AppBranding | null {\n const ctx = useContext(BrandingContext)\n return ctx?.branding ?? null\n}\n\n/**\n * Get resolved i18n messages for the current locale.\n * Falls back to Spanish (es) if no provider is found.\n */\nexport function useMessages(): AccessMessages {\n const ctx = useContext(BrandingContext)\n if (ctx) return ctx.messages\n return resolveMessages('es')\n}\n\n// Default query client\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false, refetchOnWindowFocus: false },\n },\n})\n\n// ─── Inner Provider ──────────────────────────────────────────\nfunction AziridProviderInner({\n children,\n client,\n props,\n}: {\n children: React.ReactNode\n client: AccessClient\n props: AziridProviderProps\n}) {\n const [user, setUser] = useState<AuthUser | null>(null)\n const [accessToken, setAccessToken] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [branding, setBranding] = useState<AppBranding | null>(null)\n // Start as true when autoBootstrap is enabled — prevents flash of login form on F5.\n const [isBootstrapping, setIsBootstrapping] = useState(props.autoBootstrap ?? true)\n\n // ─── Branding & i18n ────────────────────────────────────────\n const messages = useMemo(\n () => resolveMessages(props.locale ?? 'es', props.messages),\n [props.locale, props.messages],\n )\n\n const brandingValue = useMemo(() => ({ branding, messages }), [branding, messages])\n\n // ─── Proxy mode detection ───────────────────────────────────\n // Proxy mode when no apiUrl is provided (requests go to same-origin route handler)\n const isProxyMode = !props.apiUrl\n\n // ─── Session Sync (cookie for server components/actions) ────\n const syncUrl = useMemo(() => {\n if (props.sessionSyncUrl === false) return null\n if (props.sessionSyncUrl) return props.sessionSyncUrl\n // In proxy mode: cookies flow through the proxy as first-party — no sync needed.\n if (isProxyMode) return null\n // Cross-origin direct (dev or legacy): sync to local cookie\n if (client.appContext?.publishableKey?.startsWith('pk_dev')) {\n return '/api/auth/session'\n }\n return null\n }, [props.sessionSyncUrl, client.appContext?.publishableKey, isProxyMode])\n\n const syncSession = useCallback(\n (token: string | null) => {\n if (!syncUrl) return\n if (token) {\n fetch(syncUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ token }),\n }).catch(() => {})\n } else {\n fetch(syncUrl, { method: 'DELETE' }).catch(() => {})\n }\n },\n [syncUrl],\n )\n\n /** Sync access token with the client and local cookie */\n const updateAccessToken = useCallback(\n (token: string | null) => {\n setAccessToken(token)\n client.setAccessToken(token)\n syncSession(token)\n },\n [client, syncSession],\n )\n\n /**\n * Save session tokens from API response body.\n * Handles both obfuscated (rt/xc) and explicit (refreshToken/csrfToken) keys.\n */\n const saveSessionTokens = useCallback(\n (data: Record<string, unknown>) => {\n const rt = (data.rt ?? data.refreshToken) as string | undefined\n const xc = (data.xc ?? data.csrfToken) as string | undefined\n if (rt) client.setRefreshToken(rt)\n if (xc) client.setCsrfToken(xc)\n },\n [client],\n )\n\n /** Clear all session state */\n const clearSession = useCallback(() => {\n setUser(null)\n updateAccessToken(null)\n client.setRefreshToken(null)\n client.setCsrfToken(null)\n }, [client, updateAccessToken])\n\n /** Inject tenantId (appId/environment resolved by PublishableKeyGuard via header) */\n const withAppContext = useCallback(\n (body: Record<string, unknown>) => {\n if (client.appContext?.tenantId) {\n return { ...body, tenantId: client.appContext.tenantId }\n }\n return body\n },\n [client],\n )\n\n // ─── Bootstrap ──────────────────────────────────────────────\n // Uses client.bootstrapSession() which deduplicates concurrent calls.\n // In React 18 Strict Mode (dev), the effect runs twice but both calls\n // await the SAME promise — only one HTTP request is made.\n useEffect(() => {\n const autoBootstrap = props.autoBootstrap ?? true\n if (!autoBootstrap) return\n\n let cancelled = false\n\n async function bootstrap() {\n setIsBootstrapping(true)\n try {\n const response = await client.bootstrapSession<BootstrapResponse>()\n\n if (cancelled) return\n\n if (response.branding) {\n setBranding(response.branding)\n }\n\n if (response.authenticated) {\n const r = response as unknown as Record<string, unknown>\n setUser(response.user)\n updateAccessToken((r.at ?? r.accessToken) as string)\n saveSessionTokens(r)\n }\n } catch (err) {\n if (typeof console !== 'undefined') {\n const msg = err instanceof Error ? err.message : JSON.stringify(err)\n console.warn('[azirid-access] bootstrap failed:', msg)\n }\n } finally {\n if (!cancelled) {\n setIsBootstrapping(false)\n }\n }\n }\n\n bootstrap()\n\n return () => {\n cancelled = true\n }\n }, [client, props.autoBootstrap, updateAccessToken, saveSessionTokens])\n\n // ─── Silent Token Refresh (shared logic) ───────────────────\n // Uses client.refreshSession() which deduplicates concurrent calls.\n // If two triggers fire at the same time (e.g. timer + visibilitychange),\n // only ONE request is sent; the second caller awaits the same promise.\n const silentRefresh = useCallback(async () => {\n if (!client.getAccessToken()) return\n\n // Use Web Locks API to prevent multiple tabs from refreshing simultaneously.\n // If another tab is already refreshing, this tab skips and waits for the\n // BroadcastChannel message with updated tokens.\n if (typeof navigator !== 'undefined' && 'locks' in navigator) {\n let acquired = false\n try {\n await navigator.locks.request(\n 'azirid-token-refresh',\n { ifAvailable: true },\n async (lock) => {\n if (!lock) return // Another tab holds the lock — skip refresh\n acquired = true\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n },\n )\n } catch (err) {\n if (acquired && isAuthError(err)) {\n clearSession()\n props.onSessionExpired?.()\n }\n }\n return\n }\n\n // Fallback for browsers without Web Locks\n try {\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n } catch (err) {\n if (isAuthError(err)) {\n clearSession()\n props.onSessionExpired?.()\n }\n }\n }, [client, updateAccessToken, clearSession, props])\n\n // ─── Cross-tab Token Sync ─────────────────────────────────\n // When another tab refreshes tokens, sync the React state here.\n useEffect(() => {\n let channel: BroadcastChannel | null = null\n try {\n if (typeof BroadcastChannel !== 'undefined') {\n channel = new BroadcastChannel('azirid-auth')\n channel.onmessage = (event: MessageEvent) => {\n if (event.data?.type === 'token-refreshed' && event.data.accessToken) {\n client.setAccessToken(event.data.accessToken)\n updateAccessToken(event.data.accessToken)\n }\n }\n }\n } catch {\n // BroadcastChannel not available\n }\n return () => {\n try {\n channel?.close()\n } catch {\n // ignore\n }\n }\n }, [client, updateAccessToken])\n\n // ─── Periodic Token Refresh ────────────────────────────────\n useEffect(() => {\n const intervalMs = props.refreshInterval ?? 50_000\n if (intervalMs <= 0) return\n\n const id = setInterval(silentRefresh, intervalMs)\n return () => clearInterval(id)\n }, [props.refreshInterval, silentRefresh])\n\n // ─── Refresh on Tab Visibility ─────────────────────────────\n useEffect(() => {\n function handleVisibilityChange() {\n if (document.visibilityState === 'visible') {\n silentRefresh()\n }\n }\n\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => document.removeEventListener('visibilitychange', handleVisibilityChange)\n }, [silentRefresh])\n\n /** Normalize accessToken from API response (obfuscated \"at\" or \"accessToken\") */\n const normalizeToken = useCallback(\n (data: Record<string, unknown>): string => (data.at ?? data.accessToken) as string,\n [],\n )\n\n // ─── Mutations (extracted) ─────────────────────────────────\n const { loginMutation, signupMutation, logoutMutation, refreshFn, switchTenantFn } =\n useAuthMutations({\n client,\n props,\n setUser,\n setError,\n updateAccessToken,\n saveSessionTokens,\n normalizeToken,\n withAppContext,\n clearSession,\n })\n\n // ─── Actions ───────────────────────────────────────────────\n const login = useCallback(\n (data: { email: string; password: string }) => loginMutation.mutate(data),\n [loginMutation],\n )\n\n const signup = useCallback((data: SignupData) => signupMutation.mutate(data), [signupMutation])\n\n const logout = useCallback(() => logoutMutation.mutate(), [logoutMutation])\n const clearError = useCallback(() => setError(null), [])\n\n const setUserFn = useCallback((u: AuthUser | null) => {\n setUser(u)\n }, [])\n\n const value = useMemo<AziridContextValue>(\n () => ({\n user,\n accessToken,\n isAuthenticated: user !== null,\n isLoading: isBootstrapping || loginMutation.isPending || signupMutation.isPending,\n error,\n login,\n signup,\n logout,\n clearError,\n refresh: refreshFn,\n switchTenant: switchTenantFn,\n setUser: setUserFn,\n isLoginPending: loginMutation.isPending,\n isSignupPending: signupMutation.isPending,\n isBootstrapping,\n loginMutation,\n signupMutation,\n logoutMutation,\n }),\n [\n user,\n accessToken,\n error,\n login,\n signup,\n logout,\n clearError,\n refreshFn,\n switchTenantFn,\n setUserFn,\n loginMutation,\n signupMutation,\n logoutMutation,\n isBootstrapping,\n ],\n )\n\n return (\n <ClientContext.Provider value={client}>\n <AziridContext.Provider value={value}>\n <BrandingContext.Provider value={brandingValue}>{children}</BrandingContext.Provider>\n </AziridContext.Provider>\n </ClientContext.Provider>\n )\n}\n\n// ─── Public Provider ─────────────────────────────────────────\nexport function AziridProvider(props: AziridProviderProps) {\n useEffect(() => {\n injectStyles()\n return () => removeStyles()\n }, [])\n\n const client = useMemo(() => {\n const appContext = props.publishableKey\n ? {\n publishableKey: props.publishableKey,\n tenantId: props.tenantId,\n }\n : undefined\n\n // Proxy mode (no apiUrl): requests go to same-origin /api/auth/*\n // Direct mode (apiUrl set): requests go straight to the Azirid API\n const isProxy = !props.apiUrl\n const baseUrl = isProxy ? '' : props.apiUrl!.replace(/\\/$/, '')\n const basePath = isProxy ? BASE_PATHS.proxy : BASE_PATHS.direct\n\n return createAccessClient(\n { baseUrl, basePath, headers: props.fetchOptions as Record<string, string> },\n appContext,\n )\n }, [props.publishableKey, props.tenantId, props.fetchOptions, props.apiUrl])\n\n return (\n <QueryClientProvider client={defaultQueryClient}>\n <AziridProviderInner client={client} props={props}>\n {props.children}\n </AziridProviderInner>\n </QueryClientProvider>\n )\n}\n\n// ─── Hook ────────────────────────────────────────────────────\nexport function useAzirid(): AziridContextValue {\n const ctx = useContext(AziridContext)\n if (!ctx) {\n throw new Error(\n 'useAzirid must be used within an <AziridProvider>. ' +\n 'Wrap your app (or the relevant subtree) with <AziridProvider>.',\n )\n }\n return ctx\n}\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Slot } from 'radix-ui'\n\nimport { cn } from '../../utils/cn'\n\nconst buttonVariants = cva(\n \"cursor-pointer focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost:\n 'hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground',\n destructive:\n 'bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default:\n 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-8',\n 'icon-xs':\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm':\n 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',\n 'icon-lg': 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : 'button'\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction Card({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<'div'> & { size?: 'default' | 'sm' }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n 'ring-foreground/10 bg-card text-card-foreground group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n 'text-base leading-snug font-medium group-data-[size=sm]/card:text-sm',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn('px-4 group-data-[size=sm]/card:px-3', className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n 'bg-muted/50 flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"field-group\" className={cn('flex flex-col gap-6', className)} {...props} />\n}\n\nfunction Field({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"field\" className={cn('grid gap-3', className)} {...props} />\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<'label'>) {\n return (\n <label\n data-slot=\"field-label\"\n className={cn('text-sm leading-none font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-description\"\n className={cn(\n 'text-muted-foreground [&_a]:hover:text-primary text-sm [&_a]:underline [&_a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({ className, children, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-separator\"\n className={cn(\n 'after:border-border relative text-center text-sm after:absolute after:inset-0 after:top-1/2 after:z-0 after:flex after:items-center after:border-t',\n className,\n )}\n {...props}\n >\n <span\n data-slot=\"field-separator-content\"\n className=\"bg-card text-muted-foreground relative z-10 px-2\"\n >\n {children}\n </span>\n </div>\n )\n}\n\nexport { FieldGroup, Field, FieldLabel, FieldDescription, FieldSeparator }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 file:text-foreground placeholder:text-muted-foreground h-8 w-full min-w-0 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import { forwardRef, useCallback, useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { LoginFormProps } from '../types'\nimport { createLoginSchema, type LoginInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useAzirid, useBranding, useMessages } from '../providers/access-provider'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel, FieldSeparator } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const LoginForm = forwardRef<HTMLFormElement, LoginFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n forgotPassword,\n showSocialButtons = false,\n labels,\n defaultValues,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n\n const title = titleProp ?? (branding?.displayName || msg.login.title)\n const description = descriptionProp ?? msg.login.description\n const submitText = submitTextProp ?? msg.login.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createLoginSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let ctxLogin: ((data: LoginInput) => void) | undefined\n let ctxError: string | null = null\n let ctxLoading = false\n\n try {\n const ctx = useAzirid()\n ctxLogin = ctx.login\n ctxError = ctx.error\n ctxLoading = ctx.isLoginPending\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<LoginInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', password: '', ...defaultValues },\n })\n\n const onSubmit = useCallback(\n async (values: LoginInput) => {\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (ctxLogin) {\n ctxLogin(values)\n }\n },\n [onSubmitProp, ctxLogin],\n )\n\n const loading = externalLoading ?? ctxLoading ?? isSubmitting\n const error = externalError ?? ctxError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n {showSocialButtons && (\n <>\n <Field>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.apple}\n </Button>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.google}\n </Button>\n </Field>\n <FieldSeparator>{msg.social.separator}</FieldSeparator>\n </>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-login-email\">\n {labels?.email ?? msg.login.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-login-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={labels?.emailPlaceholder ?? msg.login.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-login-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-login-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <div className=\"flex items-center\">\n <FieldLabel htmlFor=\"aa-login-password\">\n {labels?.password ?? msg.login.passwordLabel}\n </FieldLabel>\n {forgotPassword && (\n <span className=\"ml-auto text-sm underline-offset-4 hover:underline\">\n {forgotPassword}\n </span>\n )}\n </div>\n <Input\n id=\"aa-login-password\"\n type=\"password\"\n autoComplete=\"current-password\"\n placeholder={labels?.passwordPlaceholder ?? msg.login.passwordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.password}\n aria-describedby={errors.password ? 'aa-login-pass-err' : undefined}\n {...register('password')}\n />\n {errors.password && (\n <p id=\"aa-login-pass-err\" className=\"text-destructive text-xs\">\n {errors.password.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nLoginForm.displayName = 'LoginForm'\n","import { forwardRef, useCallback, useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { SignupFormProps } from '../types'\nimport { createSignupSchema, type SignupInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useAzirid, useBranding, useMessages } from '../providers/access-provider'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel, FieldSeparator } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const SignupForm = forwardRef<HTMLFormElement, SignupFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n showSocialButtons = false,\n labels,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n\n const title = titleProp ?? (branding?.displayName || msg.signup.title)\n const description = descriptionProp ?? msg.signup.description\n const submitText = submitTextProp ?? msg.signup.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createSignupSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let ctxSignup: ((data: SignupInput) => void) | undefined\n let ctxError: string | null = null\n let ctxLoading = false\n\n try {\n const ctx = useAzirid()\n ctxSignup = ctx.signup as (data: SignupInput) => void\n ctxError = ctx.error\n ctxLoading = ctx.isSignupPending\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<SignupInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', password: '' },\n })\n\n const onSubmit = useCallback(\n async (values: SignupInput) => {\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (ctxSignup) {\n ctxSignup(values)\n }\n },\n [onSubmitProp, ctxSignup],\n )\n\n const loading = externalLoading ?? ctxLoading ?? isSubmitting\n const error = externalError ?? ctxError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n {showSocialButtons && (\n <>\n <Field>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.apple}\n </Button>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.google}\n </Button>\n </Field>\n <FieldSeparator>{msg.social.separator}</FieldSeparator>\n </>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-signup-email\">\n {labels?.email ?? msg.signup.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-signup-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={labels?.emailPlaceholder ?? msg.signup.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-signup-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-signup-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <FieldLabel htmlFor=\"aa-signup-password\">\n {labels?.password ?? msg.signup.passwordLabel}\n </FieldLabel>\n <Input\n id=\"aa-signup-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={labels?.passwordPlaceholder ?? msg.signup.passwordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.password}\n aria-describedby={errors.password ? 'aa-signup-pass-err' : undefined}\n {...register('password')}\n />\n {errors.password && (\n <p id=\"aa-signup-pass-err\" className=\"text-destructive text-xs\">\n {errors.password.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nSignupForm.displayName = 'SignupForm'\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface PasswordResetRequestData {\n email: string\n}\n\nexport interface PasswordResetConfirmData {\n token: string\n newPassword: string\n}\n\nexport interface UsePasswordResetOptions {\n /** Callback after reset email sent */\n onRequestSuccess?: () => void\n /** Callback after password successfully reset */\n onConfirmSuccess?: () => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UsePasswordResetReturn {\n /** Request a password reset email */\n request: UseMutationResult<unknown, Error, PasswordResetRequestData>\n /** Confirm the password reset with token + new password */\n confirm: UseMutationResult<unknown, Error, PasswordResetConfirmData>\n}\n\n/**\n * Standalone hook for password reset flow. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const passwordReset = usePasswordReset({\n * onRequestSuccess: () => toast.success(\"Check your email\"),\n * onConfirmSuccess: () => router.push(\"/login\"),\n * });\n *\n * // Step 1: request reset\n * passwordReset.request.mutate({ email: \"user@test.com\" });\n *\n * // Step 2: confirm with token from URL\n * passwordReset.confirm.mutate({ token: \"abc\", newPassword: \"newPass123!\" });\n * ```\n */\nexport function usePasswordReset(options?: UsePasswordResetOptions): UsePasswordResetReturn {\n const client = useAccessClient()\n\n const request = useMutation({\n mutationKey: ['azirid-access', 'password-reset', 'request'],\n mutationFn: (data: PasswordResetRequestData) =>\n client.post(client.paths.passwordResetRequest, data),\n onSuccess: () => options?.onRequestSuccess?.(),\n onError: options?.onError,\n })\n\n const confirm = useMutation({\n mutationKey: ['azirid-access', 'password-reset', 'confirm'],\n mutationFn: (data: PasswordResetConfirmData) =>\n client.post(client.paths.passwordResetConfirm, data),\n onSuccess: () => options?.onConfirmSuccess?.(),\n onError: options?.onError,\n })\n\n return { request, confirm }\n}\n","import { forwardRef, useCallback, useMemo, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { ForgotPasswordFormProps } from '../types'\nimport { createForgotPasswordSchema, type ForgotPasswordInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useBranding, useMessages } from '../providers/access-provider'\nimport { usePasswordReset } from '../hooks/use-password-reset'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const ForgotPasswordForm = forwardRef<HTMLFormElement, ForgotPasswordFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n defaultValues,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n const [success, setSuccess] = useState(false)\n const [hookError, setHookError] = useState<string | null>(null)\n\n const title = titleProp ?? msg.forgotPassword.title\n const description = descriptionProp ?? msg.forgotPassword.description\n const submitText = submitTextProp ?? msg.forgotPassword.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createForgotPasswordSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let passwordReset: ReturnType<typeof usePasswordReset> | null = null\n try {\n passwordReset = usePasswordReset({\n onRequestSuccess: () => setSuccess(true),\n onError: (err) => setHookError(err.message),\n })\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<ForgotPasswordInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', ...defaultValues },\n })\n\n const onSubmit = useCallback(\n async (values: ForgotPasswordInput) => {\n setHookError(null)\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (passwordReset) {\n passwordReset.request.mutate(values)\n }\n },\n [onSubmitProp, passwordReset],\n )\n\n const loading = externalLoading ?? passwordReset?.request.isPending ?? isSubmitting\n const error = externalError ?? hookError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n {success ? (\n <div className=\"rounded-md border border-green-200 bg-green-50 px-4 py-3 text-center text-sm text-green-800 dark:border-green-800 dark:bg-green-950 dark:text-green-200\">\n {msg.forgotPassword.successMessage}\n </div>\n ) : (\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-forgot-email\">\n {msg.forgotPassword.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-forgot-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={msg.forgotPassword.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-forgot-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-forgot-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && (\n <FieldDescription className=\"text-center\">{footer}</FieldDescription>\n )}\n </Field>\n </FieldGroup>\n </form>\n )}\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nForgotPasswordForm.displayName = 'ForgotPasswordForm'\n","import { forwardRef, useCallback, useMemo, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { ResetPasswordFormProps } from '../types'\nimport { createResetPasswordConfirmSchema, type ResetPasswordConfirmInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useBranding, useMessages } from '../providers/access-provider'\nimport { usePasswordReset } from '../hooks/use-password-reset'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldGroup, FieldLabel, FieldDescription } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const ResetPasswordForm = forwardRef<HTMLFormElement, ResetPasswordFormProps>(\n (\n {\n token,\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n onSuccess,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n const [hookError, setHookError] = useState<string | null>(null)\n\n const title = titleProp ?? msg.resetPassword.title\n const description = descriptionProp ?? msg.resetPassword.description\n const submitText = submitTextProp ?? msg.resetPassword.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createResetPasswordConfirmSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let passwordReset: ReturnType<typeof usePasswordReset> | null = null\n try {\n passwordReset = usePasswordReset({\n onConfirmSuccess: () => onSuccess?.(),\n onError: (err) => setHookError(err.message),\n })\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<ResetPasswordConfirmInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { token, newPassword: '', confirmPassword: '' },\n })\n\n const onSubmit = useCallback(\n async (values: ResetPasswordConfirmInput) => {\n setHookError(null)\n if (onSubmitProp) {\n await onSubmitProp({ token: values.token, newPassword: values.newPassword })\n } else if (passwordReset) {\n passwordReset.confirm.mutate({\n token: values.token,\n newPassword: values.newPassword,\n })\n }\n },\n [onSubmitProp, passwordReset],\n )\n\n const loading = externalLoading ?? passwordReset?.confirm.isPending ?? isSubmitting\n const error = externalError ?? hookError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <input type=\"hidden\" {...register('token')} />\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-reset-new-password\">\n {msg.resetPassword.newPasswordLabel}\n </FieldLabel>\n <Input\n id=\"aa-reset-new-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={msg.resetPassword.newPasswordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.newPassword}\n aria-describedby={errors.newPassword ? 'aa-reset-newpass-err' : undefined}\n {...register('newPassword')}\n />\n {errors.newPassword && (\n <p id=\"aa-reset-newpass-err\" className=\"text-destructive text-xs\">\n {errors.newPassword.message}\n </p>\n )}\n </Field>\n\n <Field>\n <FieldLabel htmlFor=\"aa-reset-confirm-password\">\n {msg.resetPassword.confirmPasswordLabel}\n </FieldLabel>\n <Input\n id=\"aa-reset-confirm-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={msg.resetPassword.confirmPasswordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.confirmPassword}\n aria-describedby={\n errors.confirmPassword ? 'aa-reset-confirmpass-err' : undefined\n }\n {...register('confirmPassword')}\n />\n {errors.confirmPassword && (\n <p id=\"aa-reset-confirmpass-err\" className=\"text-destructive text-xs\">\n {errors.confirmPassword.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nResetPasswordForm.displayName = 'ResetPasswordForm'\n","import { useState, useCallback } from 'react'\nimport type { AuthView, AuthFormProps } from '../types'\nimport { useMessages } from '../providers/access-provider'\nimport { LoginForm } from './login-form'\nimport { SignupForm } from './signup-form'\nimport { ForgotPasswordForm } from './forgot-password-form'\nimport { ResetPasswordForm } from './reset-password-form'\n\nexport function AuthForm({\n view: controlledView,\n onViewChange,\n defaultView = 'login',\n className,\n style,\n logo,\n showSocialButtons,\n hideNavigation,\n resetToken,\n defaultValues,\n loginProps,\n signupProps,\n forgotPasswordProps,\n resetPasswordProps,\n}: AuthFormProps) {\n const [internalView, setInternalView] = useState<AuthView>(defaultView)\n const msg = useMessages()\n\n const currentView = controlledView ?? internalView\n\n const navigate = useCallback(\n (target: AuthView) => {\n if (onViewChange) {\n onViewChange(target)\n } else {\n setInternalView(target)\n }\n },\n [onViewChange],\n )\n\n const navLink = (text: string, target: AuthView) => (\n <button\n type=\"button\"\n onClick={() => navigate(target)}\n className=\"text-primary font-medium underline-offset-4 hover:underline\"\n >\n {text}\n </button>\n )\n\n const sharedProps = { className, style, logo }\n\n switch (currentView) {\n case 'login':\n return (\n <LoginForm\n {...sharedProps}\n showSocialButtons={showSocialButtons}\n defaultValues={defaultValues}\n {...loginProps}\n forgotPassword={\n hideNavigation ? undefined : navLink(msg.navigation.forgotPassword, 'forgot-password')\n }\n footer={\n hideNavigation ? undefined : (\n <span>\n {msg.navigation.noAccountText} {navLink(msg.navigation.signUpLink, 'signup')}\n </span>\n )\n }\n />\n )\n\n case 'signup':\n return (\n <SignupForm\n {...sharedProps}\n showSocialButtons={showSocialButtons}\n {...signupProps}\n footer={\n hideNavigation ? undefined : (\n <span>\n {msg.navigation.hasAccountText} {navLink(msg.navigation.signInLink, 'login')}\n </span>\n )\n }\n />\n )\n\n case 'forgot-password':\n return (\n <ForgotPasswordForm\n {...sharedProps}\n defaultValues={defaultValues ? { email: defaultValues.email } : undefined}\n {...forgotPasswordProps}\n footer={\n hideNavigation ? undefined : <span>{navLink(msg.navigation.backToLogin, 'login')}</span>\n }\n />\n )\n\n case 'reset-password':\n return (\n <ResetPasswordForm\n {...sharedProps}\n token={resetToken ?? ''}\n {...resetPasswordProps}\n footer={\n hideNavigation ? undefined : <span>{navLink(msg.navigation.backToLogin, 'login')}</span>\n }\n />\n )\n }\n}\n\nAuthForm.displayName = 'AuthForm'\n","import { useCallback, useMemo } from 'react'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ReferralInfo } from '../types'\n\nexport function useReferral() {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'referral', 'me'],\n queryFn: () => client.get<ReferralInfo>(client.paths.referralMe),\n enabled: !!client.getAccessToken(),\n })\n\n const copyToClipboard = useCallback(async () => {\n if (query.data?.referralUrl) {\n await navigator.clipboard.writeText(query.data.referralUrl)\n return true\n }\n return false\n }, [query.data?.referralUrl])\n\n return useMemo(() => ({ ...query, copyToClipboard }), [query, copyToClipboard])\n}\n","import { useCallback, useState } from 'react'\nimport type { CSSProperties } from 'react'\nimport { useReferral } from '../hooks/use-referral'\n\nexport interface ReferralCardProps {\n className?: string\n style?: CSSProperties\n title?: string\n description?: string\n}\n\nconst styles = {\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n title: {\n margin: '0 0 4px 0',\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n description: {\n margin: '0 0 16px 0',\n fontSize: '14px',\n color: '#6b7280',\n } satisfies CSSProperties,\n codeContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '16px',\n } satisfies CSSProperties,\n codeInput: {\n flex: 1,\n padding: '10px 12px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#f9fafb',\n fontSize: '14px',\n fontFamily: 'monospace',\n color: '#374151',\n outline: 'none',\n } satisfies CSSProperties,\n copyButton: {\n padding: '10px 16px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n color: '#374151',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n transition: 'background-color 0.15s',\n } satisfies CSSProperties,\n copyButtonCopied: {\n backgroundColor: '#ecfdf5',\n borderColor: '#a7f3d0',\n color: '#065f46',\n } satisfies CSSProperties,\n statsRow: {\n display: 'flex',\n gap: '24px',\n } satisfies CSSProperties,\n stat: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '2px',\n } satisfies CSSProperties,\n statValue: {\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n statLabel: {\n fontSize: '12px',\n color: '#6b7280',\n } satisfies CSSProperties,\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '8px',\n animation: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',\n } satisfies CSSProperties,\n emptyMessage: {\n fontSize: '14px',\n color: '#9ca3af',\n textAlign: 'center' as const,\n padding: '12px 0',\n } satisfies CSSProperties,\n}\n\nexport function ReferralCard({\n className,\n style,\n title = 'Refer a Friend',\n description = 'Share your referral link and earn rewards for every friend who signs up.',\n}: ReferralCardProps) {\n const { data, isLoading } = useReferral()\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(async () => {\n if (!data?.referralUrl) return\n try {\n await navigator.clipboard.writeText(data.referralUrl)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // Clipboard API not available\n }\n }, [data?.referralUrl])\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <div style={{ ...styles.skeleton, height: '20px', width: '140px', marginBottom: '8px' }} />\n <div style={{ ...styles.skeleton, height: '14px', width: '260px', marginBottom: '16px' }} />\n <div style={{ ...styles.skeleton, height: '42px', width: '100%', marginBottom: '16px' }} />\n <div style={{ display: 'flex', gap: '24px' }}>\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n </div>\n </div>\n )\n }\n\n if (!data?.referralCode) {\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <h3 style={styles.title}>{title}</h3>\n <p style={styles.emptyMessage}>Referral program is not available at this time.</p>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <h3 style={styles.title}>{title}</h3>\n <p style={styles.description}>{description}</p>\n\n <div style={styles.codeContainer}>\n <input\n type=\"text\"\n readOnly\n value={data.referralUrl}\n style={styles.codeInput}\n onClick={(e) => (e.target as HTMLInputElement).select()}\n />\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...styles.copyButton,\n ...(copied ? styles.copyButtonCopied : {}),\n }}\n >\n {copied ? 'Copied!' : 'Copy'}\n </button>\n </div>\n\n <div style={styles.statsRow}>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.totalReferred}</span>\n <span style={styles.statLabel}>Total Referred</span>\n </div>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.completedReferrals}</span>\n <span style={styles.statLabel}>Completed</span>\n </div>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.pendingReferrals}</span>\n <span style={styles.statLabel}>Pending</span>\n </div>\n </div>\n </div>\n )\n}\n\nReferralCard.displayName = 'ReferralCard'\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ReferralStatsData } from '../types'\n\nexport function useReferralStats() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'referral', 'stats'],\n queryFn: () => client.get<ReferralStatsData>(client.paths.referralStats),\n enabled: !!client.getAccessToken(),\n })\n}\n","import type { CSSProperties } from 'react'\nimport { useReferralStats } from '../hooks/use-referral-stats'\nimport type { ReferralItem } from '../types'\n\nexport interface ReferralStatsProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusColors: Record<ReferralItem['status'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n COMPLETED: { bg: '#d1fae5', color: '#065f46' },\n EXPIRED: { bg: '#fee2e2', color: '#991b1b' },\n}\n\nconst rewardStatusColors: Record<ReferralItem['rewardStatus'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n GRANTED: { bg: '#d1fae5', color: '#065f46' },\n EXPIRED: { bg: '#fee2e2', color: '#991b1b' },\n FAILED: { bg: '#fee2e2', color: '#991b1b' },\n}\n\nconst styles = {\n container: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n header: {\n padding: '16px 24px',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n title: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n summaryRow: {\n display: 'flex',\n gap: '24px',\n padding: '12px 24px',\n backgroundColor: '#f9fafb',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n summaryItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: '#6b7280',\n } satisfies CSSProperties,\n summaryValue: {\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n fontSize: '14px',\n } satisfies CSSProperties,\n th: {\n padding: '12px 24px',\n textAlign: 'left' as const,\n fontSize: '12px',\n fontWeight: 500,\n color: '#6b7280',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: '#f9fafb',\n } satisfies CSSProperties,\n td: {\n padding: '12px 24px',\n borderBottom: '1px solid #f3f4f6',\n color: '#374151',\n } satisfies CSSProperties,\n badge: (bg: string, color: string): CSSProperties => ({\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: bg,\n color,\n }),\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n height: '14px',\n } satisfies CSSProperties,\n emptyRow: {\n padding: '24px',\n textAlign: 'center' as const,\n color: '#9ca3af',\n fontSize: '14px',\n } satisfies CSSProperties,\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nexport function ReferralStats({ className, style }: ReferralStatsProps) {\n const { data, isLoading } = useReferralStats()\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <div style={{ ...styles.skeleton, width: '140px', height: '18px' }} />\n </div>\n <div style={{ padding: '24px' }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{ ...styles.skeleton, width: '100%', height: '16px', marginBottom: '16px' }}\n />\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <h3 style={styles.title}>Referral History</h3>\n </div>\n\n {data && (\n <div style={styles.summaryRow}>\n <span style={styles.summaryItem}>\n Total: <span style={styles.summaryValue}>{data.totalReferred}</span>\n </span>\n <span style={styles.summaryItem}>\n Completed: <span style={styles.summaryValue}>{data.completedReferrals}</span>\n </span>\n <span style={styles.summaryItem}>\n Pending: <span style={styles.summaryValue}>{data.pendingReferrals}</span>\n </span>\n <span style={styles.summaryItem}>\n Rewards: <span style={styles.summaryValue}>{data.totalRewards}</span>\n </span>\n </div>\n )}\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>Email</th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Reward</th>\n <th style={styles.th}>Date</th>\n </tr>\n </thead>\n <tbody>\n {(!data?.referrals || data.referrals.length === 0) && (\n <tr>\n <td colSpan={4} style={styles.emptyRow}>\n No referrals yet.\n </td>\n </tr>\n )}\n {data?.referrals.map((item) => {\n const sc = statusColors[item.status]\n const rc = rewardStatusColors[item.rewardStatus]\n return (\n <tr key={item.id}>\n <td style={styles.td}>{item.referredEmail}</td>\n <td style={styles.td}>\n <span style={styles.badge(sc.bg, sc.color)}>{item.status}</span>\n </td>\n <td style={styles.td}>\n <span style={styles.badge(rc.bg, rc.color)}>\n {item.rewardStatus}\n {item.rewardAmount != null && ` ($${item.rewardAmount})`}\n </span>\n </td>\n <td style={styles.td}>{formatDate(item.createdAt)}</td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n\nReferralStats.displayName = 'ReferralStats'\n","/**\n * Format a minor-unit amount (e.g. cents) into a locale-aware currency string.\n *\n * @param amount - The amount in minor units (e.g. 1500 = $15.00)\n * @param currency - ISO 4217 currency code (e.g. \"USD\", \"EUR\")\n */\nexport function formatAmount(amount: number, currency: string): string {\n try {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }).format(amount / 100)\n } catch {\n return `${currency} ${(amount / 100).toFixed(2)}`\n }\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BillingPlan } from '../types'\n\nexport function usePlans() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'plans'],\n queryFn: () => client.get<BillingPlan[]>(client.paths.plans),\n })\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { UserSubscription } from '../types'\n\nexport function useSubscription() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'subscription'],\n queryFn: () => client.get<UserSubscription>(client.paths.subscription),\n enabled: !!client.getAccessToken(),\n })\n}\n","import { useCallback, useMemo } from 'react'\nimport { useMutation } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { CheckoutResponse, PaymentProviderType } from '../types'\n\nexport interface CheckoutParams {\n planId?: string\n intentId?: string\n branchId?: string\n merchantAccountId?: string\n successUrl: string\n cancelUrl: string\n provider?: PaymentProviderType\n}\n\nexport interface UseCheckoutOptions {\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n redirectOnSuccess?: boolean\n}\n\nexport function useCheckout(options?: UseCheckoutOptions) {\n const client = useAccessClient()\n\n const mutation = useMutation({\n mutationFn: (params: CheckoutParams) =>\n client.post<CheckoutResponse>(client.paths.checkout, params),\n onSuccess: (data) => {\n // Only redirect for card providers (not MANUAL_TRANSFER or PAYPHONE)\n if (\n options?.redirectOnSuccess !== false &&\n data.url &&\n data.provider !== 'MANUAL_TRANSFER' &&\n data.provider !== 'PAYPHONE'\n ) {\n window.location.href = data.url\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const checkout = useCallback(\n (params: CheckoutParams) => {\n mutation.mutate(params)\n },\n [mutation],\n )\n\n return useMemo(() => ({ ...mutation, checkout }), [mutation, checkout])\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AvailableProvider } from '../types'\n\nexport function usePaymentProviders() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'providers'],\n queryFn: () => client.get<AvailableProvider[]>(client.paths.providers),\n })\n}\n","const PAYPHONE_CDN = 'https://cdn.payphonetodoesposible.com'\nconst PAYPHONE_CSS_URL = `${PAYPHONE_CDN}/box/v1.1/payphone-payment-box.css`\nconst PAYPHONE_JS_URL = `${PAYPHONE_CDN}/box/v1.1/payphone-payment-box.js`\n\nlet loadPromise: Promise<void> | null = null\n\nfunction loadCss(href: string): void {\n if (document.querySelector(`link[href=\"${href}\"]`)) return\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n document.head.appendChild(link)\n}\n\nfunction loadScript(src: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve()\n return\n }\n const script = document.createElement('script')\n script.src = src\n script.onload = () => resolve()\n script.onerror = () =>\n reject(\n new Error(\n `Failed to load Payphone SDK from ${src}. ` +\n `If your app uses a Content-Security-Policy, add \"${PAYPHONE_CDN}\" ` +\n `to both script-src and style-src directives.`,\n ),\n )\n document.head.appendChild(script)\n })\n}\n\nexport function loadPayphoneSdk(): Promise<void> {\n if (loadPromise) return loadPromise\n\n loadPromise = (async () => {\n loadCss(PAYPHONE_CSS_URL)\n await loadScript(PAYPHONE_JS_URL)\n })().catch((err) => {\n // Reset so the next call retries instead of returning the cached rejection\n loadPromise = null\n throw err\n })\n\n return loadPromise\n}\n","import { useEffect, useRef } from 'react'\nimport { loadPayphoneSdk } from '../utils/payphone-loader'\nimport type { PayphoneWidgetConfig } from '../types'\n\ndeclare global {\n interface Window {\n PPaymentButtonBox: new (config: Record<string, unknown>) => {\n render: (containerId: string) => void\n }\n }\n}\n\n/**\n * Internal widget renderer — loads Payphone SDK and mounts PPaymentButtonBox.\n * Used by usePayphoneCheckout, usePayButton hooks and PayphoneModal component.\n */\nexport function PayphoneWidgetRenderer({\n config,\n containerId,\n onReady,\n onError,\n}: {\n config: PayphoneWidgetConfig\n containerId: string\n onReady?: () => void\n onError?: (error: Error) => void\n}) {\n const initialized = useRef(false)\n\n useEffect(() => {\n if (initialized.current) return\n initialized.current = true\n\n loadPayphoneSdk()\n .then(() => {\n requestAnimationFrame(() => {\n if (typeof window.PPaymentButtonBox === 'undefined') {\n onError?.(new Error('Payphone SDK failed to initialize'))\n return\n }\n\n new window.PPaymentButtonBox({\n token: config.token,\n clientTransactionId: config.clientTransactionId,\n amount: config.amount,\n amountWithoutTax: config.amountWithoutTax,\n currency: config.currency,\n storeId: config.storeId,\n reference: config.reference,\n }).render(containerId)\n\n onReady?.()\n })\n })\n .catch((err) => {\n onError?.(new Error(err instanceof Error ? err.message : 'Failed to load Payphone SDK'))\n })\n }, [config, containerId, onReady, onError])\n\n return <div id={containerId} />\n}\n","import { useState, type CSSProperties } from 'react'\nimport { PayphoneWidgetRenderer } from './payphone-checkout'\nimport type { PayphoneWidgetConfig } from '../types'\n\nexport interface PayphoneModalProps {\n config: PayphoneWidgetConfig\n onClose: () => void\n}\n\nexport function PayphoneModal({ config, onClose }: PayphoneModalProps) {\n const [error, setError] = useState<string | null>(null)\n\n return (\n <div style={overlayStyle} onClick={onClose}>\n <div style={cardStyle} onClick={(e) => e.stopPropagation()}>\n <h2 style={titleStyle}>Payphone</h2>\n\n {error && <p style={{ ...messageStyle, color: '#ef4444' }}>{error}</p>}\n\n <PayphoneWidgetRenderer\n config={config}\n containerId=\"pp-button-azirid\"\n onError={(err) => setError(err.message)}\n />\n\n <p style={warningStyle}>Do not close this window until the payment is complete.</p>\n\n <button type=\"button\" style={cancelStyle} onClick={onClose}>\n Cancel\n </button>\n </div>\n </div>\n )\n}\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n}\n\nconst cardStyle: CSSProperties = {\n backgroundColor: '#fff',\n borderRadius: '12px',\n padding: '24px',\n maxWidth: '480px',\n width: '90%',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n}\n\nconst titleStyle: CSSProperties = {\n fontSize: '18px',\n fontWeight: 700,\n color: '#111827',\n margin: '0 0 16px 0',\n textAlign: 'center',\n}\n\nconst messageStyle: CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n textAlign: 'center',\n margin: '12px 0',\n}\n\nconst warningStyle: CSSProperties = {\n fontSize: '12px',\n color: '#d97706',\n textAlign: 'center',\n margin: '16px 0 0 0',\n}\n\nconst cancelStyle: CSSProperties = {\n display: 'block',\n width: '100%',\n marginTop: '12px',\n padding: '10px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n fontFamily: 'inherit',\n}\n","import type { CSSProperties } from 'react'\n\nexport interface PricingFeatureListProps {\n features: string[]\n}\n\nconst styles = {\n featuresList: {\n listStyle: 'none',\n padding: 0,\n margin: '0 0 24px 0',\n flex: 1,\n } satisfies CSSProperties,\n featureItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '14px',\n color: '#374151',\n } satisfies CSSProperties,\n checkmark: {\n color: '#10b981',\n fontSize: '16px',\n fontWeight: 700,\n flexShrink: 0,\n } satisfies CSSProperties,\n}\n\nexport function PricingFeatureList({ features }: PricingFeatureListProps) {\n if (!features || features.length === 0) return null\n\n return (\n <ul style={styles.featuresList}>\n {features.map((feature, i) => (\n <li key={i} style={styles.featureItem}>\n <span style={styles.checkmark} aria-hidden=\"true\">\n &#10003;\n </span>\n {feature}\n </li>\n ))}\n </ul>\n )\n}\n\nPricingFeatureList.displayName = 'PricingFeatureList'\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { PricingFeatureList } from './pricing-feature-list'\nimport type { BillingPlan } from '../types'\n\nexport interface PricingCardProps {\n plan: BillingPlan\n isCurrentPlan: boolean\n isCheckoutPending: boolean\n onSelect: (plan: BillingPlan) => void\n}\n\nconst intervalLabels: Record<BillingPlan['interval'], string> = {\n MONTHLY: '/mo',\n YEARLY: '/yr',\n ONE_TIME: '',\n}\n\nconst styles = {\n card: (isCurrentPlan: boolean): CSSProperties => ({\n border: isCurrentPlan ? '2px solid #6366f1' : '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }),\n currentBadge: {\n position: 'absolute' as const,\n top: '-12px',\n left: '50%',\n transform: 'translateX(-50%)',\n backgroundColor: '#6366f1',\n color: '#ffffff',\n fontSize: '12px',\n fontWeight: 600,\n padding: '2px 12px',\n borderRadius: '9999px',\n whiteSpace: 'nowrap' as const,\n } satisfies CSSProperties,\n planName: {\n margin: '0 0 4px 0',\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n planDescription: {\n margin: '0 0 16px 0',\n fontSize: '14px',\n color: '#6b7280',\n lineHeight: '1.5',\n } satisfies CSSProperties,\n priceRow: {\n display: 'flex',\n alignItems: 'baseline',\n gap: '4px',\n marginBottom: '20px',\n } satisfies CSSProperties,\n priceAmount: {\n fontSize: '36px',\n fontWeight: 700,\n color: '#111827',\n lineHeight: 1,\n } satisfies CSSProperties,\n priceInterval: {\n fontSize: '16px',\n color: '#6b7280',\n } satisfies CSSProperties,\n selectButton: (isCurrentPlan: boolean): CSSProperties => ({\n width: '100%',\n padding: '12px 24px',\n borderRadius: '8px',\n border: isCurrentPlan ? '1px solid #d1d5db' : 'none',\n backgroundColor: isCurrentPlan ? '#ffffff' : '#111827',\n color: isCurrentPlan ? '#6b7280' : '#ffffff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: isCurrentPlan ? 'default' : 'pointer',\n transition: 'background-color 0.15s',\n }),\n}\n\nexport function PricingCard({\n plan,\n isCurrentPlan,\n isCheckoutPending,\n onSelect,\n}: PricingCardProps) {\n return (\n <div style={styles.card(isCurrentPlan)}>\n {isCurrentPlan && <span style={styles.currentBadge}>Current Plan</span>}\n\n <h3 style={styles.planName}>{plan.name}</h3>\n {plan.description && <p style={styles.planDescription}>{plan.description}</p>}\n\n <div style={styles.priceRow}>\n <span style={styles.priceAmount}>{formatAmount(plan.amount, plan.currency)}</span>\n <span style={styles.priceInterval}>{intervalLabels[plan.interval]}</span>\n </div>\n\n {plan.features && plan.features.length > 0 && <PricingFeatureList features={plan.features} />}\n\n <button\n type=\"button\"\n onClick={() => onSelect(plan)}\n disabled={isCurrentPlan || isCheckoutPending}\n style={{\n ...styles.selectButton(isCurrentPlan),\n ...(isCheckoutPending && !isCurrentPlan ? { opacity: 0.6 } : {}),\n }}\n >\n {isCurrentPlan ? 'Current Plan' : 'Subscribe'}\n </button>\n </div>\n )\n}\n\nPricingCard.displayName = 'PricingCard'\n","import { useState, type CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { usePlans } from '../hooks/use-plans'\nimport { useSubscription } from '../hooks/use-subscription'\nimport { useCheckout } from '../hooks/use-checkout'\nimport { usePaymentProviders } from '../hooks/use-payment-providers'\nimport { PayphoneModal } from './payphone-modal'\nimport { PricingCard } from './pricing-card'\nimport type {\n AvailableProvider,\n BillingPlan,\n CheckoutResponse,\n PaymentProviderType,\n} from '../types'\n\nexport interface PricingTableProps {\n className?: string\n style?: CSSProperties\n successUrl: string\n cancelUrl: string\n columns?: number\n onPlanSelect?: (plan: BillingPlan) => void\n}\n\nconst styles = {\n grid: (columns: number): CSSProperties => ({\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: '24px',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n }),\n skeletonCard: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n } satisfies CSSProperties,\n skeletonLine: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n marginBottom: '12px',\n } satisfies CSSProperties,\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n } satisfies CSSProperties,\n modal: {\n backgroundColor: '#ffffff',\n borderRadius: '16px',\n padding: '32px',\n maxWidth: '480px',\n width: '90%',\n maxHeight: '80vh',\n overflow: 'auto',\n } satisfies CSSProperties,\n modalTitle: {\n margin: '0 0 8px 0',\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n modalSubtitle: {\n margin: '0 0 24px 0',\n fontSize: '14px',\n color: '#6b7280',\n } satisfies CSSProperties,\n bankDetailRow: {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '8px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '14px',\n } satisfies CSSProperties,\n bankDetailLabel: {\n color: '#6b7280',\n fontWeight: 500,\n } satisfies CSSProperties,\n bankDetailValue: {\n color: '#111827',\n fontWeight: 600,\n fontFamily: 'monospace',\n } satisfies CSSProperties,\n instructions: {\n margin: '16px 0',\n padding: '12px 16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n fontSize: '14px',\n color: '#374151',\n lineHeight: '1.5',\n } satisfies CSSProperties,\n closeButton: {\n width: '100%',\n padding: '12px 24px',\n borderRadius: '8px',\n border: '1px solid #d1d5db',\n backgroundColor: '#ffffff',\n color: '#374151',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n marginTop: '16px',\n } satisfies CSSProperties,\n}\n\n/* ------------------------------------------------------------------ */\n/* Provider Selection Modal */\n/* ------------------------------------------------------------------ */\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, string> = {\n STRIPE: 'Credit/Debit Card',\n PAYPAL: 'PayPal',\n PAYPHONE: 'Payphone',\n NUVEI: 'Nuvei',\n MANUAL_TRANSFER: 'Bank Transfer',\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\nfunction ProviderSelectModal({\n providers,\n isPending,\n onSelect,\n onClose,\n}: {\n providers: AvailableProvider[]\n isPending: boolean\n onSelect: (provider: PaymentProviderType) => void\n onClose: () => void\n}) {\n return (\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <h2 style={styles.modalTitle}>Select payment method</h2>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => (\n <button\n key={p.provider}\n type=\"button\"\n onClick={() => onSelect(p.provider)}\n disabled={isPending}\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#fff',\n cursor: isPending ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n fontFamily: 'inherit',\n }}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{PROVIDER_LABELS[p.provider] ?? p.provider}</span>\n </button>\n ))}\n </div>\n <button type=\"button\" style={styles.closeButton} onClick={onClose}>\n Cancel\n </button>\n </div>\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* Manual Transfer Modal */\n/* ------------------------------------------------------------------ */\n\nconst intervalLabels: Record<BillingPlan['interval'], string> = {\n MONTHLY: '/mo',\n YEARLY: '/yr',\n ONE_TIME: '',\n}\n\nfunction TransferModal({ data, onClose }: { data: CheckoutResponse; onClose: () => void }) {\n const bankDetails = data.bankDetails as Record<string, string> | null\n\n return (\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <h2 style={styles.modalTitle}>Manual Transfer</h2>\n <p style={styles.modalSubtitle}>\n Transfer the amount below to subscribe to <strong>{data.plan?.name}</strong>\n </p>\n\n {/* Amount */}\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {data.plan ? formatAmount(data.plan.amount, data.plan.currency) : ''}\n </div>\n <div style={{ fontSize: '14px', color: '#6b7280' }}>\n {data.plan?.interval\n ? (intervalLabels[data.plan.interval as keyof typeof intervalLabels] ?? '')\n : ''}\n </div>\n </div>\n\n {/* Bank Details */}\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div key={key} style={styles.bankDetailRow}>\n <span style={styles.bankDetailLabel}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={styles.bankDetailValue}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Instructions */}\n {data.transferInstructions && (\n <div style={styles.instructions}>{data.transferInstructions}</div>\n )}\n\n <p\n style={{\n fontSize: '13px',\n color: '#9ca3af',\n margin: '12px 0 0 0',\n }}\n >\n After completing the transfer, submit your proof of payment. Your subscription will be\n activated once the transfer is verified.\n </p>\n\n <button type=\"button\" style={styles.closeButton} onClick={onClose}>\n Close\n </button>\n </div>\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* PricingTable */\n/* ------------------------------------------------------------------ */\n\nexport function PricingTable({\n className,\n style,\n successUrl,\n cancelUrl,\n columns = 3,\n onPlanSelect,\n}: PricingTableProps) {\n const { data: plans, isLoading: plansLoading } = usePlans()\n const { data: subscription } = useSubscription()\n const { data: providers } = usePaymentProviders()\n const [transferData, setTransferData] = useState<CheckoutResponse | null>(null)\n const [payphoneData, setPayphoneData] = useState<CheckoutResponse | null>(null)\n const [pendingPlan, setPendingPlan] = useState<BillingPlan | null>(null)\n const [showProviderModal, setShowProviderModal] = useState(false)\n\n const { checkout, isPending: checkoutPending } = useCheckout({\n redirectOnSuccess: true,\n onSuccess: (data) => {\n setShowProviderModal(false)\n setPendingPlan(null)\n if (data.provider === 'MANUAL_TRANSFER') {\n setTransferData(data)\n } else if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setPayphoneData(data)\n }\n },\n })\n\n const doCheckout = (planId: string, provider: PaymentProviderType) => {\n checkout({ planId, provider, successUrl, cancelUrl })\n }\n\n const handleSelect = (plan: BillingPlan) => {\n if (subscription?.planId === plan.id && subscription.status === 'ACTIVE') return\n\n if (onPlanSelect) {\n onPlanSelect(plan)\n return\n }\n\n // If multiple providers, show selection modal\n if (providers && providers.length > 1) {\n setPendingPlan(plan)\n setShowProviderModal(true)\n return\n }\n\n // Single provider — checkout directly\n const provider = providers?.[0]?.provider\n checkout({ planId: plan.id, provider, successUrl, cancelUrl })\n }\n\n if (plansLoading) {\n return (\n <div className={className} style={{ ...styles.grid(columns), ...style }}>\n {Array.from({ length: columns }).map((_, i) => (\n <div key={i} style={styles.skeletonCard}>\n <div\n style={{\n ...styles.skeletonLine,\n width: '60%',\n height: '20px',\n }}\n />\n <div\n style={{\n ...styles.skeletonLine,\n width: '80%',\n height: '14px',\n }}\n />\n <div\n style={{\n ...styles.skeletonLine,\n width: '40%',\n height: '36px',\n marginTop: '8px',\n }}\n />\n <div style={{ marginTop: '16px' }}>\n {[1, 2, 3].map((j) => (\n <div\n key={j}\n style={{\n ...styles.skeletonLine,\n width: '90%',\n height: '14px',\n }}\n />\n ))}\n </div>\n <div\n style={{\n ...styles.skeletonLine,\n width: '100%',\n height: '44px',\n marginTop: '16px',\n }}\n />\n </div>\n ))}\n </div>\n )\n }\n\n const sortedPlans = plans ? [...plans].sort((a, b) => a.sortOrder - b.sortOrder) : []\n\n return (\n <>\n <div className={className} style={{ ...styles.grid(columns), ...style }}>\n {sortedPlans.map((plan) => {\n const isCurrentPlan = subscription?.planId === plan.id && subscription.status === 'ACTIVE'\n\n return (\n <PricingCard\n key={plan.id}\n plan={plan}\n isCurrentPlan={isCurrentPlan}\n isCheckoutPending={checkoutPending}\n onSelect={handleSelect}\n />\n )\n })}\n </div>\n\n {showProviderModal && pendingPlan && providers && providers.length > 1 && (\n <ProviderSelectModal\n providers={providers}\n isPending={checkoutPending}\n onSelect={(provider) => doCheckout(pendingPlan.id, provider)}\n onClose={() => {\n setShowProviderModal(false)\n setPendingPlan(null)\n }}\n />\n )}\n\n {transferData && <TransferModal data={transferData} onClose={() => setTransferData(null)} />}\n\n {payphoneData?.widgetConfig && (\n <PayphoneModal\n config={payphoneData.widgetConfig}\n onClose={() => setPayphoneData(null)}\n />\n )}\n </>\n )\n}\n\nPricingTable.displayName = 'PricingTable'\n","import type { CSSProperties, ReactNode } from 'react'\nimport { useCheckout } from '../hooks/use-checkout'\n\nexport interface CheckoutButtonProps {\n planId: string\n successUrl: string\n cancelUrl: string\n className?: string\n style?: CSSProperties\n children?: ReactNode\n}\n\nconst defaultStyle: CSSProperties = {\n padding: '12px 24px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n}\n\nexport function CheckoutButton({\n planId,\n successUrl,\n cancelUrl,\n className,\n style,\n children,\n}: CheckoutButtonProps) {\n const { checkout, isPending } = useCheckout({ redirectOnSuccess: true })\n\n return (\n <button\n type=\"button\"\n className={className}\n style={{\n ...defaultStyle,\n ...style,\n ...(isPending ? { opacity: 0.6, cursor: 'not-allowed' } : {}),\n }}\n disabled={isPending}\n onClick={() => checkout({ planId, successUrl, cancelUrl })}\n >\n {isPending ? 'Loading...' : (children ?? 'Subscribe')}\n </button>\n )\n}\n\nCheckoutButton.displayName = 'CheckoutButton'\n","import { useMutation } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface PayphoneConfirmParams {\n id: number\n clientTransactionId: string\n}\n\nexport interface PayphoneConfirmResult {\n status: 'confirmed' | 'cancelled' | 'already_confirmed'\n intentId: string\n}\n\nexport interface UsePayphoneConfirmOptions {\n onSuccess?: (data: PayphoneConfirmResult) => void\n onError?: (error: Error) => void\n}\n\nexport function usePayphoneConfirm(options?: UsePayphoneConfirmOptions) {\n const client = useAccessClient()\n\n return useMutation({\n mutationFn: (params: PayphoneConfirmParams) =>\n client.post<PayphoneConfirmResult>(client.paths.payphoneConfirm, params),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { usePaymentProviders } from './use-payment-providers'\nimport { usePayphoneConfirm } from './use-payphone-confirm'\nimport type { PayphoneConfirmResult } from './use-payphone-confirm'\nimport { PayphoneWidgetRenderer } from '../components/payphone-checkout'\nimport { useAzirid } from '../providers/access-provider'\nimport { formatAmount } from '@azirid/shared'\nimport type {\n AvailableProvider,\n CheckoutResponse,\n PaymentProviderType,\n PayphoneWidgetConfig,\n} from '../types'\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type PayButtonStatus =\n | 'idle'\n | 'loading_providers'\n | 'ready'\n | 'processing'\n | 'redirecting'\n | 'success'\n | 'error'\n\nexport interface UsePayButtonOptions {\n intentId?: string\n planId?: string\n branchId?: string\n merchantAccountId?: string\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n}\n\nexport interface UsePayButtonReturn {\n providers: AvailableProvider[]\n checkout: (provider: PaymentProviderType) => void\n ProviderSelector: () => ReactElement | null\n TransferDetails: () => ReactElement | null\n PayphoneWidget: () => ReactElement | null\n status: PayButtonStatus\n selectedProvider: PaymentProviderType | null\n checkoutData: CheckoutResponse | null\n isPending: boolean\n error: Error | null\n}\n\n// ─── Provider display config ────────────────────────────────\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, string> = {\n STRIPE: 'Credit/Debit Card',\n PAYPAL: 'PayPal',\n PAYPHONE: 'Payphone',\n NUVEI: 'Nuvei',\n MANUAL_TRANSFER: 'Bank Transfer',\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\nconst PP_CONTAINER_ID = 'pp-paybtn-azirid'\n\n// ─── Hook ───────────────────────────────────────────────────\n\nexport function usePayButton({\n intentId,\n planId,\n branchId,\n merchantAccountId,\n onSuccess,\n onError,\n}: UsePayButtonOptions): UsePayButtonReturn {\n const [status, setStatus] = useState<PayButtonStatus>('idle')\n const [selectedProvider, setSelectedProvider] = useState<PaymentProviderType | null>(null)\n const [checkoutData, setCheckoutData] = useState<CheckoutResponse | null>(null)\n const [payphoneConfig, setPayphoneConfig] = useState<PayphoneWidgetConfig | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const payphoneConfirmTriggered = useRef(false)\n const { isBootstrapping } = useAzirid()\n\n // Detect Payphone callback params\n const params =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams()\n const callbackId = params.get('id')\n const callbackClientTxId = params.get('clientTransactionId')\n const isPayphoneCallback = !!(callbackId && callbackClientTxId)\n\n // ── Load providers ─────────────────────────────────────────\n const {\n data: providerList,\n isLoading: providersLoading,\n } = usePaymentProviders()\n\n const providers = providerList ?? []\n\n useEffect(() => {\n if (isPayphoneCallback) return\n if (providersLoading) {\n setStatus('loading_providers')\n } else if (providers.length > 0 && status === 'loading_providers') {\n setStatus('ready')\n }\n }, [providersLoading, providers.length, status, isPayphoneCallback])\n\n // ── Checkout ───────────────────────────────────────────────\n const { checkout: doCheckout, isPending } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n setCheckoutData(data)\n\n if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setPayphoneConfig(data.widgetConfig)\n setStatus('processing')\n return\n }\n\n if (data.provider === 'MANUAL_TRANSFER') {\n setStatus('success')\n onSuccess?.(data)\n return\n }\n\n // Redirect-based providers (Stripe, PayPal, Nuvei)\n if (data.url) {\n setStatus('redirecting')\n window.location.href = data.url\n return\n }\n\n setStatus('success')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n const checkout = useCallback(\n (provider: PaymentProviderType) => {\n setSelectedProvider(provider)\n setStatus('processing')\n setCurrentError(null)\n\n const currentUrl =\n typeof window !== 'undefined' ? window.location.href.split('?')[0] : ''\n\n doCheckout({\n intentId,\n planId,\n branchId,\n merchantAccountId,\n provider,\n successUrl: currentUrl,\n cancelUrl: currentUrl,\n })\n },\n [doCheckout, intentId, planId, branchId, merchantAccountId],\n )\n\n // ── Payphone confirmation ──────────────────────────────────\n const { mutate: confirmPayphone } = usePayphoneConfirm({\n onSuccess: (data: PayphoneConfirmResult) => {\n const isConfirmed = data.status === 'confirmed' || data.status === 'already_confirmed'\n setStatus(isConfirmed ? 'success' : 'error')\n\n const response: CheckoutResponse = {\n provider: 'PAYPHONE',\n ...(checkoutData ?? {}),\n }\n if (isConfirmed) {\n onSuccess?.(response)\n } else {\n onError?.(new Error('Payment was cancelled'))\n }\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (!isPayphoneCallback || payphoneConfirmTriggered.current || isBootstrapping) return\n payphoneConfirmTriggered.current = true\n setSelectedProvider('PAYPHONE')\n setStatus('processing')\n confirmPayphone({ id: Number(callbackId), clientTransactionId: callbackClientTxId! })\n }, [isPayphoneCallback, isBootstrapping, callbackId, callbackClientTxId, confirmPayphone])\n\n // ── SDK error handler ──────────────────────────────────────\n const handleSdkError = useCallback(\n (err: Error) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n [onError],\n )\n\n // ── ProviderSelector component ─────────────────────────────\n const ProviderSelector = useMemo(() => {\n return function ProviderSelectorInner() {\n if (providers.length === 0 || isPayphoneCallback) return null\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => (\n <button\n key={p.provider}\n type=\"button\"\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: selectedProvider === p.provider ? '#f3f4f6' : '#fff',\n cursor: isPending ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n fontFamily: 'inherit',\n }}\n onClick={() => checkout(p.provider)}\n disabled={isPending}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{PROVIDER_LABELS[p.provider]}</span>\n </button>\n ))}\n </div>\n )\n }\n }, [providers, selectedProvider, isPending, checkout, isPayphoneCallback])\n\n // ── TransferDetails component ──────────────────────────────\n const TransferDetails = useMemo(() => {\n return function TransferDetailsInner() {\n if (!checkoutData || checkoutData.provider !== 'MANUAL_TRANSFER') return null\n\n const bankDetails = checkoutData.bankDetails as Record<string, string> | null\n const plan = checkoutData.plan\n const intent = (checkoutData as any).intent as\n | { id: string; amount: number; currency: string; description?: string }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div>\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>\n )}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {checkoutData.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n }}\n >\n {checkoutData.transferInstructions}\n </div>\n )}\n </div>\n )\n }\n }, [checkoutData])\n\n // ── PayphoneWidget component ───────────────────────────────\n const PayphoneWidget = useMemo(() => {\n return function PayphoneWidgetInner() {\n if (!payphoneConfig || isPayphoneCallback) return null\n\n return PayphoneWidgetRenderer({\n config: payphoneConfig,\n containerId: PP_CONTAINER_ID,\n onError: handleSdkError,\n })\n }\n }, [payphoneConfig, isPayphoneCallback, handleSdkError])\n\n return {\n providers,\n checkout,\n ProviderSelector,\n TransferDetails,\n PayphoneWidget,\n status,\n selectedProvider,\n checkoutData,\n isPending,\n error: currentError,\n }\n}\n","import { useCallback, useMemo, useState } from 'react'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { UploadTransferProofResponse } from '../types'\n\nexport interface UseUploadTransferProofOptions {\n onSuccess?: (result: UploadTransferProofResponse) => void\n onError?: (error: Error) => void\n}\n\nexport interface UseUploadTransferProofReturn {\n upload: (file: File) => Promise<UploadTransferProofResponse>\n isUploading: boolean\n publicUrl: string | null\n error: Error | null\n reset: () => void\n}\n\nexport function useUploadTransferProof(\n options?: UseUploadTransferProofOptions,\n): UseUploadTransferProofReturn {\n const client = useAccessClient()\n const [isUploading, setIsUploading] = useState(false)\n const [publicUrl, setPublicUrl] = useState<string | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n const upload = useCallback(\n async (file: File): Promise<UploadTransferProofResponse> => {\n setIsUploading(true)\n setError(null)\n\n try {\n // 1. Request presigned URL from API\n const presigned = await client.post<UploadTransferProofResponse>(\n client.paths.uploadTransferProof,\n {\n contentType: file.type,\n fileSize: file.size,\n },\n )\n\n // 2. Upload file directly to S3\n const uploadRes = await fetch(presigned.uploadUrl, {\n method: 'PUT',\n headers: { 'Content-Type': file.type },\n body: file,\n })\n\n if (!uploadRes.ok) {\n throw new Error(`Upload failed: ${uploadRes.status}`)\n }\n\n setPublicUrl(presigned.publicUrl)\n options?.onSuccess?.(presigned)\n return presigned\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Upload failed')\n setError(error)\n options?.onError?.(error)\n throw error\n } finally {\n setIsUploading(false)\n }\n },\n [client, options],\n )\n\n const reset = useCallback(() => {\n setPublicUrl(null)\n setError(null)\n setIsUploading(false)\n }, [])\n\n return useMemo(\n () => ({ upload, isUploading, publicUrl, error, reset }),\n [upload, isUploading, publicUrl, error, reset],\n )\n}\n","import { useCallback, useMemo } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { SubmitTransferProofData, TransferProof } from '../types'\n\nexport interface UseTransferProofOptions {\n onSuccess?: (data: TransferProof) => void\n onError?: (error: Error) => void\n}\n\nexport function useSubmitTransferProof(options?: UseTransferProofOptions) {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const mutation = useMutation({\n mutationFn: (data: SubmitTransferProofData) =>\n client.post<TransferProof>(client.paths.submitTransferProof, data),\n onSuccess: (data) => {\n void queryClient.invalidateQueries({ queryKey: ['transferProofs'] })\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const submit = useCallback(\n (data: SubmitTransferProofData) => {\n mutation.mutate(data)\n },\n [mutation],\n )\n\n return useMemo(() => ({ ...mutation, submit }), [mutation, submit])\n}\n\nexport function useTransferProofs() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['transferProofs'],\n queryFn: () => client.get<TransferProof[]>(client.paths.transferProofs),\n })\n}\n","import { useRef, useState, type CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { useUploadTransferProof } from '../hooks/use-upload-transfer-proof'\nimport { useSubmitTransferProof } from '../hooks/use-transfer-proof'\nimport type {\n AvailableProvider,\n CheckoutResponse,\n PaymentProviderType,\n TransferProof,\n} from '../types'\n\n// ─── Constants ───────────────────────────────────────────────\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, { en: string; es: string }> = {\n STRIPE: { en: 'Credit/Debit Card', es: 'Tarjeta de crédito/débito' },\n PAYPAL: { en: 'PayPal', es: 'PayPal' },\n PAYPHONE: { en: 'Payphone', es: 'Payphone' },\n NUVEI: { en: 'Nuvei', es: 'Nuvei' },\n MANUAL_TRANSFER: { en: 'Bank Transfer', es: 'Transferencia bancaria' },\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\n// ─── Styles ──────────────────────────────────────────────────\n\nconst modalStyles: Record<string, CSSProperties> = {\n overlay: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n card: {\n backgroundColor: '#fff',\n borderRadius: '12px',\n padding: '24px',\n maxWidth: '420px',\n width: '90%',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n },\n title: {\n fontSize: '18px',\n fontWeight: 700,\n color: '#111827',\n margin: '0 0 20px 0',\n textAlign: 'center',\n },\n providerButton: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#fff',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n transition: 'background-color 0.15s',\n fontFamily: 'inherit',\n },\n cancelButton: {\n display: 'block',\n width: '100%',\n marginTop: '16px',\n padding: '10px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n fontFamily: 'inherit',\n },\n}\n\n// ─── ProviderModal ───────────────────────────────────────────\n\nexport interface ProviderModalProps {\n providers: AvailableProvider[]\n isPending: boolean\n onSelect: (provider: PaymentProviderType) => void\n onClose: () => void\n labels?: Record<string, string>\n}\n\nexport function ProviderModal({\n providers,\n isPending,\n onSelect,\n onClose,\n labels,\n}: ProviderModalProps) {\n return (\n <div style={modalStyles.overlay} onClick={onClose}>\n <div style={modalStyles.card} onClick={(e) => e.stopPropagation()}>\n <h2 style={modalStyles.title}>{labels?.selectPaymentMethod ?? 'Select payment method'}</h2>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => {\n const label = PROVIDER_LABELS[p.provider]\n return (\n <button\n key={p.provider}\n type=\"button\"\n style={modalStyles.providerButton}\n onClick={() => onSelect(p.provider)}\n disabled={isPending}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{label?.en ?? p.provider}</span>\n </button>\n )\n })}\n </div>\n\n <button type=\"button\" style={modalStyles.cancelButton} onClick={onClose}>\n {labels?.cancel ?? 'Cancel'}\n </button>\n </div>\n </div>\n )\n}\n\n// ─── TransferModal ───────────────────────────────────────────\n\nexport interface TransferModalProps {\n data: CheckoutResponse\n onClose: () => void\n onProofSubmitted?: (proof: TransferProof) => void\n labels?: Record<string, string>\n}\n\ntype TransferStep = 'details' | 'uploading' | 'submitting' | 'submitted' | 'error'\n\nconst ACCEPTED_FILE_TYPES = 'image/png,image/jpeg,image/webp,application/pdf'\nconst MAX_FILE_SIZE_MB = 10\n\nexport function TransferModal({ data, onClose, onProofSubmitted, labels }: TransferModalProps) {\n const bankDetails = data.bankDetails as Record<string, string> | null\n const plan = data.plan\n const intent = (data as any).intent as\n | { id: string; amount: number; currency: string; description?: string }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n const amount = plan?.amount ?? intent?.amount ?? 0\n const currency = plan?.currency ?? intent?.currency ?? 'USD'\n const intentId = intent?.id\n\n const [step, setStep] = useState<TransferStep>('details')\n const [selectedFile, setSelectedFile] = useState<File | null>(null)\n const [previewUrl, setPreviewUrl] = useState<string | null>(null)\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const { upload, isUploading } = useUploadTransferProof({\n onError: (err) => {\n setErrorMessage(err.message)\n setStep('error')\n },\n })\n\n const { submit, isPending: isSubmitting } = useSubmitTransferProof({\n onSuccess: (proof) => {\n setStep('submitted')\n onProofSubmitted?.(proof)\n },\n onError: (err) => {\n setErrorMessage(err.message)\n setStep('error')\n },\n })\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (!file) return\n\n if (file.size > MAX_FILE_SIZE_MB * 1024 * 1024) {\n setErrorMessage(`File size exceeds ${MAX_FILE_SIZE_MB}MB limit`)\n return\n }\n\n setSelectedFile(file)\n setErrorMessage(null)\n\n if (file.type.startsWith('image/')) {\n const url = URL.createObjectURL(file)\n setPreviewUrl(url)\n } else {\n setPreviewUrl(null)\n }\n }\n\n const handleSubmit = async () => {\n if (!selectedFile) return\n\n try {\n setStep('uploading')\n const result = await upload(selectedFile)\n\n setStep('submitting')\n submit({\n intentId,\n fileUrl: result.publicUrl,\n fileName: selectedFile.name,\n fileType: selectedFile.type,\n amount,\n currency,\n })\n } catch {\n // Error already handled by onError callbacks\n }\n }\n\n const handleRetry = () => {\n setStep('details')\n setErrorMessage(null)\n }\n\n const isProcessing = isUploading || isSubmitting\n\n return (\n <div style={modalStyles.overlay} onClick={isProcessing ? undefined : onClose}>\n <div\n style={{ ...modalStyles.card, maxHeight: '90vh', overflowY: 'auto' }}\n onClick={(e) => e.stopPropagation()}\n >\n <h2 style={modalStyles.title}>{labels?.bankTransfer ?? 'Bank Transfer'}</h2>\n\n {/* Amount display */}\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {/* Bank details */}\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n {labels?.bankDetails ?? 'Bank Details'}\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Transfer instructions */}\n {data.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n marginBottom: '16px',\n }}\n >\n {data.transferInstructions}\n </div>\n )}\n\n {/* ── Upload section ────────────────────────────────────── */}\n {step === 'submitted' ? (\n <div\n style={{\n textAlign: 'center',\n padding: '20px',\n backgroundColor: '#f0fdf4',\n borderRadius: '8px',\n marginBottom: '16px',\n }}\n >\n <div style={{ fontSize: '32px', marginBottom: '8px' }}>{'\\u2705'}</div>\n <div style={{ fontSize: '16px', fontWeight: 600, color: '#166534' }}>\n {labels?.proofSubmitted ?? 'Proof submitted successfully'}\n </div>\n <p style={{ fontSize: '13px', color: '#15803d', margin: '8px 0 0 0' }}>\n {labels?.proofPendingReview ??\n 'Your payment proof is under review. You will be notified once it is verified.'}\n </p>\n </div>\n ) : (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n {labels?.uploadProof ?? 'Upload proof of payment'}\n </div>\n\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={ACCEPTED_FILE_TYPES}\n style={{ display: 'none' }}\n onChange={handleFileSelect}\n />\n\n {/* Drop zone / file selector */}\n {!selectedFile ? (\n <button\n type=\"button\"\n style={{\n width: '100%',\n padding: '24px 16px',\n border: '2px dashed #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#fafafa',\n cursor: 'pointer',\n textAlign: 'center',\n fontFamily: 'inherit',\n }}\n onClick={() => fileInputRef.current?.click()}\n >\n <div style={{ fontSize: '28px', marginBottom: '8px' }}>{'\\uD83D\\uDCC4'}</div>\n <div style={{ fontSize: '14px', color: '#374151', fontWeight: 500 }}>\n {labels?.selectFile ?? 'Click to select file'}\n </div>\n <div style={{ fontSize: '12px', color: '#9ca3af', marginTop: '4px' }}>\n {labels?.acceptedFormats ?? 'PNG, JPG, WebP or PDF (max 10MB)'}\n </div>\n </button>\n ) : (\n <div\n style={{\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '12px',\n backgroundColor: '#fafafa',\n }}\n >\n {/* Image preview */}\n {previewUrl && (\n <img\n src={previewUrl}\n alt=\"Transfer proof preview\"\n style={{\n width: '100%',\n maxHeight: '200px',\n objectFit: 'contain',\n borderRadius: '6px',\n marginBottom: '8px',\n }}\n />\n )}\n\n {/* PDF indicator */}\n {selectedFile.type === 'application/pdf' && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px',\n backgroundColor: '#fef2f2',\n borderRadius: '6px',\n marginBottom: '8px',\n }}\n >\n <span style={{ fontSize: '24px' }}>{'\\uD83D\\uDCC4'}</span>\n <span\n style={{\n fontSize: '13px',\n color: '#991b1b',\n fontWeight: 500,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {selectedFile.name}\n </span>\n </div>\n )}\n\n {/* File info + change button */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span style={{ fontSize: '12px', color: '#6b7280' }}>\n {selectedFile.name} ({(selectedFile.size / 1024 / 1024).toFixed(2)} MB)\n </span>\n <button\n type=\"button\"\n style={{\n fontSize: '12px',\n color: '#3b82f6',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n padding: 0,\n }}\n onClick={() => {\n setSelectedFile(null)\n setPreviewUrl(null)\n if (fileInputRef.current) fileInputRef.current.value = ''\n }}\n disabled={isProcessing}\n >\n {labels?.changeFile ?? 'Change'}\n </button>\n </div>\n </div>\n )}\n\n {/* Error message */}\n {errorMessage && (\n <div\n style={{\n marginTop: '8px',\n padding: '8px 12px',\n backgroundColor: '#fef2f2',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#dc2626',\n }}\n >\n {errorMessage}\n </div>\n )}\n\n {/* Submit button */}\n <button\n type=\"button\"\n style={{\n display: 'block',\n width: '100%',\n marginTop: '12px',\n padding: '12px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor:\n !selectedFile || isProcessing ? '#d1d5db' : '#111827',\n color: '#fff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: !selectedFile || isProcessing ? 'not-allowed' : 'pointer',\n fontFamily: 'inherit',\n }}\n onClick={handleSubmit}\n disabled={!selectedFile || isProcessing}\n >\n {isUploading\n ? (labels?.uploading ?? 'Uploading...')\n : isSubmitting\n ? (labels?.submitting ?? 'Submitting...')\n : step === 'error'\n ? (labels?.retry ?? 'Retry')\n : (labels?.submitProof ?? 'Submit proof of payment')}\n </button>\n\n {step === 'error' && (\n <button\n type=\"button\"\n style={{\n ...modalStyles.cancelButton,\n marginTop: '8px',\n }}\n onClick={handleRetry}\n >\n {labels?.tryAgain ?? 'Try again'}\n </button>\n )}\n </div>\n )}\n\n <button\n type=\"button\"\n style={modalStyles.cancelButton}\n onClick={onClose}\n disabled={isProcessing}\n >\n {step === 'submitted' ? (labels?.done ?? 'Done') : (labels?.cancel ?? 'Cancel')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState, type CSSProperties, type ReactNode } from 'react'\nimport { usePayButton } from '../hooks/use-pay-button'\nimport { useMessages } from '../providers/access-provider'\nimport { PayphoneModal } from './payphone-modal'\nimport { ProviderModal, TransferModal } from './pay-button-modal'\nimport type { CheckoutResponse, PaymentProviderType, TransferProof } from '../types'\n\nexport interface PayButtonProps {\n planId?: string\n intentId?: string\n branchId?: string\n merchantAccountId?: string\n successUrl: string\n cancelUrl: string\n className?: string\n style?: CSSProperties\n children?: ReactNode\n disabled?: boolean\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n onProviderSelect?: (provider: PaymentProviderType) => void\n onProofSubmitted?: (proof: TransferProof) => void\n}\n\nexport function PayButton({\n planId,\n intentId,\n branchId,\n merchantAccountId,\n successUrl,\n cancelUrl,\n className,\n style,\n children,\n disabled,\n onSuccess,\n onError,\n onProviderSelect,\n onProofSubmitted,\n}: PayButtonProps) {\n const messages = useMessages()\n const billing = (messages as any)?.billing\n const [showProviderModal, setShowProviderModal] = useState(false)\n const [showTransferModal, setShowTransferModal] = useState(false)\n\n const {\n providers,\n checkout,\n checkoutData,\n PayphoneWidget,\n isPending,\n status,\n } = usePayButton({\n intentId,\n planId,\n branchId,\n merchantAccountId,\n onSuccess: (data) => {\n if (data.provider === 'MANUAL_TRANSFER') {\n setShowTransferModal(true)\n setShowProviderModal(false)\n return\n }\n if (data.provider === 'PAYPHONE') {\n setShowProviderModal(false)\n return\n }\n onSuccess?.(data)\n },\n onError,\n })\n\n const handleClick = () => {\n if (!providers || providers.length === 0) return\n\n if (providers.length === 1) {\n doCheckout(providers[0].provider)\n } else {\n setShowProviderModal(true)\n }\n }\n\n const doCheckout = (provider: PaymentProviderType) => {\n onProviderSelect?.(provider)\n checkout(provider)\n }\n\n const isDisabled = disabled || isPending || status === 'loading_providers' || (!planId && !intentId)\n\n return (\n <>\n <button\n type=\"button\"\n className={className}\n style={{\n padding: '10px 24px',\n fontSize: '14px',\n fontWeight: 600,\n color: '#fff',\n backgroundColor: isDisabled ? '#9ca3af' : '#111827',\n border: 'none',\n borderRadius: '8px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n ...style,\n }}\n onClick={handleClick}\n disabled={isDisabled}\n >\n {isPending ? (billing?.processing ?? 'Processing...') : (children ?? billing?.pay ?? 'Pay')}\n </button>\n\n {/* Provider Selection Modal */}\n {showProviderModal && providers && providers.length > 1 && (\n <ProviderModal\n providers={providers}\n isPending={isPending}\n onSelect={doCheckout}\n onClose={() => setShowProviderModal(false)}\n labels={billing}\n />\n )}\n\n {/* Transfer Details Modal */}\n {showTransferModal && checkoutData && checkoutData.provider === 'MANUAL_TRANSFER' && (\n <TransferModal\n data={checkoutData}\n onClose={() => {\n setShowTransferModal(false)\n onSuccess?.(checkoutData)\n }}\n onProofSubmitted={onProofSubmitted}\n labels={billing}\n />\n )}\n\n {/* Payphone Widget Modal */}\n {status === 'processing' && checkoutData?.provider === 'PAYPHONE' && checkoutData.widgetConfig && (\n <PayphoneModal\n config={checkoutData.widgetConfig}\n onClose={() => {\n onSuccess?.(checkoutData)\n }}\n />\n )}\n </>\n )\n}\n","import { useEffect, useRef, type CSSProperties } from 'react'\nimport { usePayphoneConfirm } from '../hooks/use-payphone-confirm'\nimport { useAzirid } from '../providers/access-provider'\n\nexport interface PayphoneCallbackProps {\n onSuccess?: (data: { status: string; intentId: string }) => void\n onError?: (error: Error) => void\n className?: string\n style?: CSSProperties\n}\n\nexport function PayphoneCallback({ onSuccess, onError, className, style }: PayphoneCallbackProps) {\n const { mutate, isPending, isSuccess, isError, error, data } = usePayphoneConfirm({\n onSuccess,\n onError,\n })\n\n const { isBootstrapping } = useAzirid()\n const called = useRef(false)\n\n useEffect(() => {\n if (called.current || isBootstrapping) return\n called.current = true\n\n const params = new URLSearchParams(window.location.search)\n const id = params.get('id')\n const clientTransactionId = params.get('clientTransactionId')\n\n if (!id || !clientTransactionId) return\n\n mutate({ id: Number(id), clientTransactionId })\n }, [mutate, isBootstrapping])\n\n return (\n <div className={className} style={{ textAlign: 'center', padding: '32px', ...style }}>\n {isPending && (\n <div>\n <p style={textStyle}>Confirming your payment...</p>\n <p style={subtextStyle}>Please do not close this page.</p>\n </div>\n )}\n\n {isSuccess && data && (\n <div>\n {data.status === 'confirmed' || data.status === 'already_confirmed' ? (\n <>\n <p style={{ ...textStyle, color: '#059669' }}>Payment confirmed!</p>\n <p style={subtextStyle}>Your payment has been processed successfully.</p>\n </>\n ) : (\n <>\n <p style={{ ...textStyle, color: '#d97706' }}>Payment was cancelled</p>\n <p style={subtextStyle}>The transaction was not completed.</p>\n </>\n )}\n </div>\n )}\n\n {isError && (\n <div>\n <p style={{ ...textStyle, color: '#dc2626' }}>Payment confirmation failed</p>\n <p style={subtextStyle}>{error?.message ?? 'An error occurred'}</p>\n </div>\n )}\n </div>\n )\n}\n\nconst textStyle: CSSProperties = {\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n margin: '0 0 8px 0',\n}\n\nconst subtextStyle: CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n margin: 0,\n}\n","import type { CSSProperties } from 'react'\nimport { useSubscription } from '../hooks/use-subscription'\nimport type { UserSubscription } from '../types'\n\nexport interface SubscriptionBadgeProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusConfig: Record<\n UserSubscription['status'],\n { bg: string; color: string; label: string }\n> = {\n ACTIVE: { bg: '#d1fae5', color: '#065f46', label: 'Active' },\n TRIALING: { bg: '#dbeafe', color: '#1e40af', label: 'Trial' },\n PAST_DUE: { bg: '#fef3c7', color: '#92400e', label: 'Past Due' },\n CANCELED: { bg: '#fee2e2', color: '#991b1b', label: 'Canceled' },\n UNPAID: { bg: '#fee2e2', color: '#991b1b', label: 'Unpaid' },\n INCOMPLETE: { bg: '#f3f4f6', color: '#6b7280', label: 'Incomplete' },\n}\n\nconst styles = {\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '9999px',\n fontSize: '13px',\n fontWeight: 500,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n dot: (color: string): CSSProperties => ({\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: color,\n flexShrink: 0,\n }),\n skeleton: {\n display: 'inline-block',\n width: '120px',\n height: '32px',\n borderRadius: '9999px',\n backgroundColor: '#f3f4f6',\n } satisfies CSSProperties,\n}\n\nexport function SubscriptionBadge({ className, style }: SubscriptionBadgeProps) {\n const { data: subscription, isLoading } = useSubscription()\n\n if (isLoading) {\n return <span className={className} style={{ ...styles.skeleton, ...style }} />\n }\n\n if (!subscription) {\n return (\n <span\n className={className}\n style={{\n ...styles.badge,\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n ...style,\n }}\n >\n No Plan\n </span>\n )\n }\n\n const config = statusConfig[subscription.status]\n\n return (\n <span\n className={className}\n style={{\n ...styles.badge,\n backgroundColor: config.bg,\n color: config.color,\n ...style,\n }}\n >\n <span style={styles.dot(config.color)} aria-hidden=\"true\" />\n {subscription.plan.name} &middot; {config.label}\n </span>\n )\n}\n\nSubscriptionBadge.displayName = 'SubscriptionBadge'\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BillingInvoice } from '../types'\n\nexport function useInvoices() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'invoices'],\n queryFn: () => client.get<BillingInvoice[]>(client.paths.invoices),\n enabled: !!client.getAccessToken(),\n })\n}\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { useInvoices } from '../hooks/use-invoices'\nimport type { BillingInvoice } from '../types'\n\nexport interface InvoiceListProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusColors: Record<BillingInvoice['status'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n PAID: { bg: '#d1fae5', color: '#065f46' },\n FAILED: { bg: '#fee2e2', color: '#991b1b' },\n REFUNDED: { bg: '#f3f4f6', color: '#6b7280' },\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nconst styles = {\n container: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n header: {\n padding: '16px 24px',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n title: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n fontSize: '14px',\n } satisfies CSSProperties,\n th: {\n padding: '12px 24px',\n textAlign: 'left' as const,\n fontSize: '12px',\n fontWeight: 500,\n color: '#6b7280',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: '#f9fafb',\n } satisfies CSSProperties,\n td: {\n padding: '12px 24px',\n borderBottom: '1px solid #f3f4f6',\n color: '#374151',\n } satisfies CSSProperties,\n badge: (bg: string, color: string): CSSProperties => ({\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: bg,\n color,\n }),\n link: {\n color: '#6366f1',\n textDecoration: 'none',\n fontWeight: 500,\n fontSize: '13px',\n } satisfies CSSProperties,\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n height: '14px',\n } satisfies CSSProperties,\n emptyRow: {\n padding: '24px',\n textAlign: 'center' as const,\n color: '#9ca3af',\n fontSize: '14px',\n } satisfies CSSProperties,\n}\n\nexport function InvoiceList({ className, style }: InvoiceListProps) {\n const { data: invoices, isLoading } = useInvoices()\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <div style={{ ...styles.skeleton, width: '100px', height: '18px' }} />\n </div>\n <div style={{ padding: '24px' }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{ ...styles.skeleton, width: '100%', height: '16px', marginBottom: '16px' }}\n />\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <h3 style={styles.title}>Invoices</h3>\n </div>\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>Date</th>\n <th style={styles.th}>Amount</th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Invoice</th>\n </tr>\n </thead>\n <tbody>\n {(!invoices || invoices.length === 0) && (\n <tr>\n <td colSpan={4} style={styles.emptyRow}>\n No invoices yet.\n </td>\n </tr>\n )}\n {invoices?.map((invoice) => {\n const sc = statusColors[invoice.status]\n return (\n <tr key={invoice.id}>\n <td style={styles.td}>{formatDate(invoice.createdAt)}</td>\n <td style={styles.td}>{formatAmount(invoice.amount, invoice.currency)}</td>\n <td style={styles.td}>\n <span style={styles.badge(sc.bg, sc.color)}>{invoice.status}</span>\n </td>\n <td style={styles.td}>\n {invoice.invoiceUrl ? (\n <a\n href={invoice.invoiceUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={styles.link}\n >\n View\n </a>\n ) : (\n <span style={{ color: '#d1d5db' }}>&mdash;</span>\n )}\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n\nInvoiceList.displayName = 'InvoiceList'\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface LoginData {\n email: string\n password: string\n}\n\nexport interface UseLoginOptions {\n /** Callback after successful login */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on login error */\n onError?: (error: Error) => void\n}\n\nexport type UseLoginReturn = UseMutationResult<AuthSuccessResponse, Error, LoginData> & {\n /** Convenience: call mutate() with consumer callbacks */\n login: (data: LoginData) => void\n}\n\n/**\n * Hook for login. Uses the **same mutation** as `<LoginForm>` and\n * `useAzirid().login()`, so the provider state (user, tokens, callbacks)\n * is always in sync.\n *\n * @example\n * ```tsx\n * const { login, isPending, error } = useLogin({\n * onSuccess: (res) => router.push(\"/dashboard\"),\n * onError: (err) => toast.error(err.message),\n * });\n *\n * login({ email: \"user@test.com\", password: \"secret\" });\n * ```\n */\nexport function useLogin(options?: UseLoginOptions): UseLoginReturn {\n const { loginMutation } = useAzirid()\n\n const login = useCallback(\n (data: LoginData) => {\n loginMutation.mutate(data, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n },\n [loginMutation, options?.onSuccess, options?.onError],\n )\n\n return useMemo(() => Object.assign({}, loginMutation, { login }), [loginMutation, login])\n}\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\nimport type { AuthSuccessResponse, SignupData } from '../types'\n\nexport interface UseSignupOptions {\n /** Callback after successful signup */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on signup error */\n onError?: (error: Error) => void\n}\n\nexport type UseSignupReturn = UseMutationResult<AuthSuccessResponse, Error, SignupData> & {\n /** Convenience: call mutate() with consumer callbacks */\n signup: (data: SignupData) => void\n}\n\n/**\n * Hook for signup. Uses the **same mutation** as `<SignupForm>` and\n * `useAzirid().signup()`, so the provider state (user, tokens, callbacks)\n * is always in sync.\n *\n * @example\n * ```tsx\n * const { signup, isPending, error } = useSignup({\n * onSuccess: (res) => router.push(\"/welcome\"),\n * });\n *\n * signup({ email: \"new@user.com\", password: \"SecurePass10\" });\n * ```\n */\nexport function useSignup(options?: UseSignupOptions): UseSignupReturn {\n const { signupMutation } = useAzirid()\n\n const signup = useCallback(\n (data: SignupData) => {\n signupMutation.mutate(data, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n },\n [signupMutation, options?.onSuccess, options?.onError],\n )\n\n return useMemo(() => Object.assign({}, signupMutation, { signup }), [signupMutation, signup])\n}\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\n\nexport interface UseLogoutOptions {\n /** Callback after successful logout */\n onSuccess?: () => void\n /** Callback on logout error */\n onError?: (error: Error) => void\n}\n\nexport type UseLogoutReturn = UseMutationResult<unknown, Error, void> & {\n /** Convenience: call mutate() with consumer callbacks */\n logout: () => void\n}\n\n/**\n * Hook for logout. Uses the **same mutation** as `useAzirid().logout()`,\n * so the provider state is always in sync.\n *\n * @example\n * ```tsx\n * const { logout, isPending } = useLogout({\n * onSuccess: () => router.push(\"/login\"),\n * });\n *\n * <button onClick={logout}>Cerrar sesión</button>\n * ```\n */\nexport function useLogout(options?: UseLogoutOptions): UseLogoutReturn {\n const { logoutMutation } = useAzirid()\n\n const logout = useCallback(() => {\n logoutMutation.mutate(undefined, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n }, [logoutMutation, options?.onSuccess, options?.onError])\n\n return useMemo(() => Object.assign({}, logoutMutation, { logout }), [logoutMutation, logout])\n}\n","import { useQuery, type UseQueryResult } from '@tanstack/react-query'\nimport { useAccessClient, useAzirid } from '../providers/access-provider'\nimport type { AuthUser } from '../types'\n\nexport interface UseSessionOptions {\n /** Enable/disable auto-fetching (default: true) */\n enabled?: boolean\n /** Refetch interval in ms (default: disabled) */\n refetchInterval?: number\n /** Refetch when window gets focus (default: false) */\n refetchOnWindowFocus?: boolean\n}\n\nexport type UseSessionReturn = UseQueryResult<AuthUser, Error> & {\n /** Shorthand: is the user authenticated? */\n isAuthenticated: boolean\n}\n\n/**\n * Standalone hook to fetch the current session (GET /me).\n * Requires `<AziridProvider>`.\n *\n * Useful for:\n * - Checking if the user is still logged in on mount\n * - Getting fresh user data from the server\n * - Bootstrapping auth state on page load\n *\n * @example\n * ```tsx\n * const session = useSession();\n *\n * if (session.isLoading) return <Spinner />;\n * if (!session.isAuthenticated) return <Redirect to=\"/login\" />;\n *\n * return <p>Hola, {session.data?.firstName}</p>;\n * ```\n */\nexport function useSession(options?: UseSessionOptions): UseSessionReturn {\n const client = useAccessClient()\n const { isBootstrapping } = useAzirid()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'session'],\n queryFn: () => client.get<AuthUser>(client.paths.me),\n retry: false,\n // Wait for bootstrap to complete before fetching /me\n enabled: (options?.enabled ?? true) && !isBootstrapping,\n refetchInterval: options?.refetchInterval,\n refetchOnWindowFocus: options?.refetchOnWindowFocus ?? false,\n })\n\n return {\n ...query,\n isAuthenticated: query.isSuccess && query.data !== null,\n }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface MagicLinkRequestData {\n email: string\n}\n\nexport interface MagicLinkVerifyData {\n token: string\n}\n\nexport interface UseMagicLinkOptions {\n /** Callback after magic link email sent */\n onRequestSuccess?: () => void\n /** Callback after magic link verified (user logged in) */\n onVerifySuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UseMagicLinkReturn {\n /** Request a magic link email */\n request: UseMutationResult<unknown, Error, MagicLinkRequestData>\n /** Verify the magic link token */\n verify: UseMutationResult<AuthSuccessResponse, Error, MagicLinkVerifyData>\n}\n\n/**\n * Standalone hook for magic link auth flow. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const magicLink = useMagicLink({\n * onRequestSuccess: () => toast.success(\"Revisa tu correo\"),\n * onVerifySuccess: (res) => router.push(\"/dashboard\"),\n * });\n *\n * // Step 1: request magic link\n * magicLink.request.mutate({ email: \"user@test.com\" });\n *\n * // Step 2: verify token (from URL params)\n * magicLink.verify.mutate({ token: searchParams.get(\"token\")! });\n * ```\n */\nexport function useMagicLink(options?: UseMagicLinkOptions): UseMagicLinkReturn {\n const client = useAccessClient()\n\n const request = useMutation({\n mutationKey: ['azirid-access', 'magic-link', 'request'],\n mutationFn: (data: MagicLinkRequestData) => client.post(client.paths.magicLinkRequest, data),\n onSuccess: () => options?.onRequestSuccess?.(),\n onError: options?.onError,\n })\n\n const verify = useMutation({\n mutationKey: ['azirid-access', 'magic-link', 'verify'],\n mutationFn: (data: MagicLinkVerifyData) =>\n client.post<AuthSuccessResponse>(client.paths.magicLinkVerify, data),\n onSuccess: options?.onVerifySuccess,\n onError: options?.onError,\n })\n\n return { request, verify }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse, SocialLoginData } from '../types'\n\nexport interface UseSocialLoginOptions {\n /** Callback after successful social login */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport type UseSocialLoginReturn = UseMutationResult<AuthSuccessResponse, Error, SocialLoginData>\n\n/**\n * Standalone hook for social login (Google, GitHub). Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const socialLogin = useSocialLogin({\n * onSuccess: (res) => router.push(\"/dashboard\"),\n * });\n *\n * socialLogin.mutate({\n * provider: \"google\",\n * providerAccountId: googleUser.id,\n * email: googleUser.email,\n * });\n * ```\n */\nexport function useSocialLogin(options?: UseSocialLoginOptions): UseSocialLoginReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'social-login'],\n mutationFn: async (data: SocialLoginData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.socialLogin, body)\n },\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ChangePasswordData } from '../types'\n\nexport interface UseChangePasswordOptions {\n /** Callback after password changed */\n onSuccess?: (response: { updated: boolean }) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport type UseChangePasswordReturn = UseMutationResult<\n { updated: boolean },\n Error,\n ChangePasswordData\n>\n\n/**\n * Standalone hook for changing password. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const changePassword = useChangePassword({\n * onSuccess: () => toast.success(\"Contraseña actualizada\"),\n * });\n *\n * changePassword.mutate({\n * currentPassword: \"OldPass123!\",\n * newPassword: \"NewSecure10!\",\n * });\n * ```\n */\nexport function useChangePassword(options?: UseChangePasswordOptions): UseChangePasswordReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'change-password'],\n mutationFn: (data: ChangePasswordData) =>\n client.post<{ updated: boolean }>(client.paths.changePassword, data),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface UseRefreshOptions {\n /** Callback after tokens refreshed */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error (e.g. session expired) */\n onError?: (error: Error) => void\n}\n\nexport type UseRefreshReturn = UseMutationResult<AuthSuccessResponse, Error, void>\n\n/**\n * Standalone hook for manually refreshing the access token.\n * Requires `<AziridProvider>`. Uses the refresh token cookie.\n *\n * Note: The AccessClient automatically handles 401 responses with token refresh.\n * This hook is for cases where you want to proactively refresh.\n *\n * @example\n * ```tsx\n * const refresh = useRefresh({\n * onSuccess: (res) => console.log(\"Token renovado\"),\n * onError: () => router.push(\"/login\"),\n * });\n *\n * refresh.mutate();\n * ```\n */\nexport function useRefresh(options?: UseRefreshOptions): UseRefreshReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'refresh'],\n mutationFn: async () => {\n await client.refreshSession()\n // refreshSession already updated internal tokens; return a\n // minimal response so onSuccess callers still get data.\n return { accessToken: client.getAccessToken() } as AuthSuccessResponse\n },\n onSuccess: (data) => {\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n}\n","import { useQuery, type UseQueryResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BootstrapResponse } from '../types'\n\nexport interface UseBootstrapOptions {\n /** Enable auto-fetching on mount (default: true) */\n enabled?: boolean\n /** Callback after bootstrap succeeds with an authenticated session */\n onAuthenticated?: (response: Extract<BootstrapResponse, { authenticated: true }>) => void\n /** Callback when no valid session exists */\n onUnauthenticated?: () => void\n}\n\nexport type UseBootstrapReturn = UseQueryResult<BootstrapResponse, Error> & {\n /** Whether the bootstrap resolved to an authenticated session */\n isAuthenticated: boolean\n}\n\n/**\n * Standalone hook for silent session bootstrap using refresh token cookie.\n * Requires `<AziridProvider>`. Posts to the bootstrap endpoint on mount.\n *\n * @example\n * ```tsx\n * const bootstrap = useBootstrap({\n * onAuthenticated: (res) => console.log(\"Sesión restaurada:\", res.user.email),\n * onUnauthenticated: () => router.push(\"/login\"),\n * });\n *\n * if (bootstrap.isLoading) return <Spinner />;\n * if (!bootstrap.isAuthenticated) return <LoginPage />;\n * ```\n */\nexport function useBootstrap(options?: UseBootstrapOptions): UseBootstrapReturn {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'bootstrap'],\n queryFn: async () => {\n const response = await client.post<BootstrapResponse>(client.paths.bootstrap)\n\n if (response.authenticated) {\n client.setAccessToken(response.accessToken)\n options?.onAuthenticated?.(response)\n } else {\n options?.onUnauthenticated?.()\n }\n\n return response\n },\n retry: false,\n enabled: options?.enabled ?? true,\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n })\n\n const isAuthenticated =\n query.isSuccess && query.data !== undefined && query.data.authenticated === true\n\n return {\n ...query,\n isAuthenticated,\n }\n}\n","import {\n useMutation,\n useQuery,\n useQueryClient,\n type UseMutationResult,\n type UseQueryResult,\n} from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type {\n AuthSuccessResponse,\n PasskeyItem,\n PasskeyLoginData,\n PasskeyLoginStartData,\n PasskeyLoginStartResponse,\n PasskeyLoginVerifyData,\n PasskeyRegisterStartData,\n PasskeyRegisterStartResponse,\n PasskeyRegisterVerifyData,\n RegisterPasskeyData,\n} from '../types'\n\nexport interface UsePasskeysOptions {\n /** Enable auto-fetching of passkey list (default: false) */\n listEnabled?: boolean\n /** Callback after passkey registered */\n onRegisterSuccess?: () => void\n /** Callback after passkey revoked */\n onRevokeSuccess?: (data: { revoked: boolean; passkeyId: string }) => void\n /** Callback after passkey login */\n onLoginSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UsePasskeysReturn {\n /** List registered passkeys (authenticated) */\n list: UseQueryResult<PasskeyItem[], Error>\n /** Start passkey registration challenge (authenticated) */\n registerStart: UseMutationResult<PasskeyRegisterStartResponse, Error, PasskeyRegisterStartData>\n /** Verify passkey registration (authenticated) */\n registerVerify: UseMutationResult<{ message: string }, Error, PasskeyRegisterVerifyData>\n /** Register a passkey directly (authenticated) */\n register: UseMutationResult<{ message: string }, Error, RegisterPasskeyData>\n /** Revoke a passkey (authenticated) */\n revoke: UseMutationResult<{ revoked: boolean; passkeyId: string }, Error, string>\n /** Simple passkey login by credentialId (public) */\n login: UseMutationResult<AuthSuccessResponse, Error, PasskeyLoginData>\n /** Start passkey login challenge (public) */\n loginStart: UseMutationResult<PasskeyLoginStartResponse, Error, PasskeyLoginStartData | void>\n /** Verify passkey login (public) */\n loginVerify: UseMutationResult<AuthSuccessResponse, Error, PasskeyLoginVerifyData>\n}\n\n/**\n * Standalone hook for passkey (WebAuthn) management. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const passkeys = usePasskeys({\n * listEnabled: true,\n * onLoginSuccess: (res) => router.push(\"/dashboard\"),\n * onRegisterSuccess: () => toast.success(\"Passkey registrada\"),\n * });\n *\n * // List passkeys\n * const { data: passkeyList } = passkeys.list;\n *\n * // Start registration flow\n * const challenge = await passkeys.registerStart.mutateAsync({ deviceName: \"Mi Mac\" });\n * // ... get credential from navigator.credentials.create() ...\n * await passkeys.registerVerify.mutateAsync({ challengeId: challenge.challengeId, credential });\n *\n * // Login with passkey\n * const loginChallenge = await passkeys.loginStart.mutateAsync();\n * // ... get assertion from navigator.credentials.get() ...\n * await passkeys.loginVerify.mutateAsync({ challengeId: loginChallenge.challengeId, credential: assertion });\n * ```\n */\nexport function usePasskeys(options?: UsePasskeysOptions): UsePasskeysReturn {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const list = useQuery({\n queryKey: ['azirid-access', 'passkeys'],\n queryFn: () => client.get<PasskeyItem[]>(client.paths.passkeys),\n enabled: options?.listEnabled ?? false,\n })\n\n const registerStart = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register-start'],\n mutationFn: (data: PasskeyRegisterStartData) =>\n client.post<PasskeyRegisterStartResponse>(client.paths.passkeyRegisterStart, data),\n onError: options?.onError,\n })\n\n const registerVerify = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register-verify'],\n mutationFn: (data: PasskeyRegisterVerifyData) =>\n client.post<{ message: string }>(client.paths.passkeyRegisterVerify, data),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRegisterSuccess?.()\n },\n onError: options?.onError,\n })\n\n const register = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register'],\n mutationFn: (data: RegisterPasskeyData) =>\n client.post<{ message: string }>(client.paths.passkeys, data),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRegisterSuccess?.()\n },\n onError: options?.onError,\n })\n\n const revoke = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'revoke'],\n mutationFn: (passkeyId: string) =>\n client.post<{ revoked: boolean; passkeyId: string }>(\n `${client.paths.passkeys}/${passkeyId}/revoke`,\n ),\n onSuccess: (data) => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRevokeSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const login = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login'],\n mutationFn: async (data: PasskeyLoginData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.passkeyLogin, body)\n },\n onSuccess: options?.onLoginSuccess,\n onError: options?.onError,\n })\n\n const loginStart = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login-start'],\n mutationFn: async (data?: PasskeyLoginStartData | void) => {\n const body: Record<string, unknown> = {}\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n if (data) {\n Object.assign(body, data)\n }\n\n return client.post<PasskeyLoginStartResponse>(client.paths.passkeyLoginStart, body)\n },\n onError: options?.onError,\n })\n\n const loginVerify = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login-verify'],\n mutationFn: async (data: PasskeyLoginVerifyData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.passkeyLoginVerify, body)\n },\n onSuccess: options?.onLoginSuccess,\n onError: options?.onError,\n })\n\n return {\n list,\n registerStart,\n registerVerify,\n register,\n revoke,\n login,\n loginStart,\n loginVerify,\n }\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { usePayphoneConfirm } from './use-payphone-confirm'\nimport type { PayphoneConfirmResult } from './use-payphone-confirm'\nimport { PayphoneWidgetRenderer } from '../components/payphone-checkout'\nimport { useAzirid } from '../providers/access-provider'\nimport type { PayphoneWidgetConfig } from '../types'\n\nexport type PayphoneCheckoutStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'confirming'\n | 'confirmed'\n | 'cancelled'\n | 'error'\n\nexport interface UsePayphoneCheckoutOptions {\n intentId: string\n onSuccess?: (data: PayphoneConfirmResult) => void\n onError?: (error: Error) => void\n}\n\nexport interface UsePayphoneCheckoutReturn {\n PayphoneWidget: () => ReactElement | null\n status: PayphoneCheckoutStatus\n intentId: string\n error: Error | null\n}\n\nconst CONTAINER_ID = 'pp-checkout-azirid'\n\nexport function usePayphoneCheckout({\n intentId,\n onSuccess,\n onError,\n}: UsePayphoneCheckoutOptions): UsePayphoneCheckoutReturn {\n const [status, setStatus] = useState<PayphoneCheckoutStatus>('idle')\n const [widgetConfig, setWidgetConfig] = useState<PayphoneWidgetConfig | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const checkoutTriggered = useRef(false)\n const confirmTriggered = useRef(false)\n const { isBootstrapping } = useAzirid()\n\n // Detect callback params from Payphone redirect\n const params =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams()\n const callbackId = params.get('id')\n const callbackClientTxId = params.get('clientTransactionId')\n const isCallback = !!(callbackId && callbackClientTxId)\n\n // ── Checkout (Phase 1) ─────────────────────────────────────\n const { checkout } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setWidgetConfig(data.widgetConfig)\n setStatus('ready')\n }\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (isCallback || checkoutTriggered.current) return\n checkoutTriggered.current = true\n setStatus('loading')\n\n checkout({\n intentId,\n provider: 'PAYPHONE',\n successUrl: window.location.href,\n cancelUrl: window.location.href,\n })\n }, [checkout, intentId, isCallback])\n\n // ── Confirmation (Phase 2) ─────────────────────────────────\n const { mutate: confirm } = usePayphoneConfirm({\n onSuccess: (data) => {\n setStatus(data.status === 'confirmed' || data.status === 'already_confirmed'\n ? 'confirmed'\n : 'cancelled')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (!isCallback || confirmTriggered.current || isBootstrapping) return\n confirmTriggered.current = true\n setStatus('confirming')\n confirm({ id: Number(callbackId), clientTransactionId: callbackClientTxId! })\n }, [isCallback, isBootstrapping, callbackId, callbackClientTxId, confirm])\n\n // ── Widget component ───────────────────────────────────────\n const handleSdkError = useCallback(\n (err: Error) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n [onError],\n )\n\n const PayphoneWidget = useMemo(() => {\n return function PayphoneWidgetInner() {\n if (!widgetConfig || isCallback) return null\n\n return PayphoneWidgetRenderer({\n config: widgetConfig,\n containerId: CONTAINER_ID,\n onError: handleSdkError,\n })\n }\n }, [widgetConfig, isCallback, handleSdkError])\n\n return { PayphoneWidget, status, intentId, error: currentError }\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { useSubmitTransferProof } from './use-transfer-proof'\nimport { useUploadTransferProof } from './use-upload-transfer-proof'\nimport { formatAmount } from '@azirid/shared'\nimport type { CheckoutResponse, TransferProof } from '../types'\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type TransferPaymentStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'uploading'\n | 'submitting'\n | 'submitted'\n | 'error'\n\nexport interface SubmitProofData {\n fileUrl: string\n fileName?: string\n fileType?: string\n amount: number\n currency?: string\n notes?: string\n}\n\nexport interface UseTransferPaymentOptions {\n intentId: string\n onSuccess?: (data: CheckoutResponse) => void\n onProofSubmitted?: (proof: TransferProof) => void\n onError?: (error: Error) => void\n}\n\nexport interface UseTransferPaymentReturn {\n TransferDetails: () => ReactElement | null\n /** Upload a file to S3 and submit the proof in one step */\n uploadAndSubmitProof: (file: File, notes?: string) => Promise<void>\n /** Submit proof with an already-uploaded file URL */\n submitProof: (data: SubmitProofData) => void\n status: TransferPaymentStatus\n checkoutData: CheckoutResponse | null\n isSubmitting: boolean\n isUploading: boolean\n error: Error | null\n}\n\n// ─── Hook ───────────────────────────────────────────────────\n\nexport function useTransferPayment({\n intentId,\n onSuccess,\n onProofSubmitted,\n onError,\n}: UseTransferPaymentOptions): UseTransferPaymentReturn {\n const [status, setStatus] = useState<TransferPaymentStatus>('idle')\n const [checkoutData, setCheckoutData] = useState<CheckoutResponse | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const checkoutTriggered = useRef(false)\n\n const responseUrl =\n typeof window !== 'undefined' ? window.location.href.split('?')[0] : ''\n\n // ── Checkout ───────────────────────────────────────────────\n const { checkout } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n setCheckoutData(data)\n setStatus('ready')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (checkoutTriggered.current) return\n checkoutTriggered.current = true\n setStatus('loading')\n\n checkout({\n intentId,\n provider: 'MANUAL_TRANSFER',\n successUrl: responseUrl,\n cancelUrl: responseUrl,\n })\n }, [checkout, intentId, responseUrl])\n\n // ── Upload ────────────────────────────────────────────────\n const { upload, isUploading } = useUploadTransferProof({\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n // ── Submit proof ───────────────────────────────────────────\n const { submit, isPending: isSubmitting } = useSubmitTransferProof({\n onSuccess: (proof) => {\n setStatus('submitted')\n onProofSubmitted?.(proof)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n const submitProof = useCallback(\n (data: SubmitProofData) => {\n if (!checkoutData?.intent) return\n setStatus('submitting')\n setCurrentError(null)\n submit({\n intentId: (checkoutData.intent as any).id,\n fileUrl: data.fileUrl,\n fileName: data.fileName,\n fileType: data.fileType,\n amount: data.amount,\n currency: data.currency,\n notes: data.notes,\n })\n },\n [submit, checkoutData],\n )\n\n const uploadAndSubmitProof = useCallback(\n async (file: File, notes?: string) => {\n if (!checkoutData?.intent) return\n setCurrentError(null)\n\n try {\n setStatus('uploading')\n const result = await upload(file)\n\n setStatus('submitting')\n const intent = checkoutData.intent as any\n submit({\n intentId: intent.id,\n fileUrl: result.publicUrl,\n fileName: file.name,\n fileType: file.type,\n amount: intent.amount ?? checkoutData.plan?.amount ?? 0,\n currency: intent.currency ?? checkoutData.plan?.currency ?? 'USD',\n notes,\n })\n } catch {\n // Error handled by onError callbacks\n }\n },\n [upload, submit, checkoutData],\n )\n\n // ── TransferDetails component ──────────────────────────────\n const TransferDetails = useMemo(() => {\n return function TransferDetailsInner(): ReactElement | null {\n if (!checkoutData) return null\n\n const bankDetails = checkoutData.bankDetails as Record<string, string> | null\n const plan = checkoutData.plan\n const intent = checkoutData.intent as\n | { id: string; amount: number; currency: string; description?: string | null }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div>\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>\n )}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {checkoutData.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n }}\n >\n {checkoutData.transferInstructions}\n </div>\n )}\n </div>\n )\n }\n }, [checkoutData])\n\n return {\n TransferDetails,\n uploadAndSubmitProof,\n submitProof,\n status,\n checkoutData,\n isSubmitting,\n isUploading,\n error: currentError,\n }\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { Branch } from '../types'\n\nexport function useBranches() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'branches'],\n queryFn: () => client.get<Branch[]>(client.paths.branches),\n })\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { PaymentMethod } from '../types'\n\nexport function usePaymentMethods(branchId?: string) {\n const client = useAccessClient()\n\n const path = branchId\n ? `${client.paths.paymentMethods}?branchId=${encodeURIComponent(branchId)}`\n : client.paths.paymentMethods\n\n return useQuery({\n queryKey: ['azirid-access', 'payment-methods', branchId ?? null],\n queryFn: () => client.get<PaymentMethod[]>(path),\n })\n}\n","import { useQueryClient, useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { TenantWithRole, TenantMemberInfo } from '../types'\n\nexport function useTenants() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'tenants'],\n queryFn: () => client.get<TenantWithRole[]>(client.paths.userTenants),\n enabled: !!client.getAccessToken(),\n })\n}\n\nexport function useTenantMembers(tenantId: string) {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'tenants', tenantId, 'members'],\n queryFn: () =>\n client.get<TenantMemberInfo[]>(`${client.paths.userTenants}/${tenantId}/members`),\n enabled: !!client.getAccessToken() && !!tenantId,\n })\n}\n\nexport function useSwitchTenant() {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const switchTenant = async (tenantId: string) => {\n await client.refreshSession({ tenantId })\n await queryClient.invalidateQueries({ queryKey: ['azirid-access'] })\n }\n\n return { switchTenant }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AccessClient } from '../client'\n\n/**\n * Options common to all simple mutation hooks created via `createMutationHook`.\n */\nexport interface SimpleMutationOptions<TData> {\n onSuccess?: (data: TData) => void\n onError?: (error: Error) => void\n}\n\n/**\n * Configuration for `createMutationHook`.\n *\n * @template TData The response type from the API\n * @template TInput The input/variables type for the mutation\n */\nexport interface MutationHookConfig<TData, TInput> {\n /** Static mutation key for deduplication / devtools */\n mutationKey: string[]\n /**\n * Derive the mutation function from the AccessClient and input.\n * Most hooks simply call `client.post<TData>(client.paths.someEndpoint, data)`.\n */\n mutationFn: (client: AccessClient, input: TInput) => Promise<TData>\n}\n\n/**\n * Factory that creates a simple `useMutation`-based hook.\n *\n * Eliminates the boilerplate of:\n * 1. Calling `useAccessClient()`\n * 2. Creating a `useMutation` with `mutationKey`, `mutationFn`, `onSuccess`, `onError`\n *\n * The resulting hook has the same return type as `useMutation` (`UseMutationResult`),\n * preserving full compatibility with TanStack Query.\n *\n * @example\n * ```ts\n * export const useChangePassword = createMutationHook<\n * { updated: boolean },\n * ChangePasswordData\n * >({\n * mutationKey: ['azirid-access', 'change-password'],\n * mutationFn: (client, data) =>\n * client.post<{ updated: boolean }>(client.paths.changePassword, data),\n * })\n * ```\n */\nexport function createMutationHook<TData, TInput = void>(\n config: MutationHookConfig<TData, TInput>,\n): (options?: SimpleMutationOptions<TData>) => UseMutationResult<TData, Error, TInput> {\n return function useGeneratedMutation(\n options?: SimpleMutationOptions<TData>,\n ): UseMutationResult<TData, Error, TInput> {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: config.mutationKey,\n mutationFn: (input: TInput) => config.mutationFn(client, input),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n }\n}\n","import { useCallback, useRef, useState, type FormEvent } from 'react'\nimport type { z } from 'zod'\nimport type { FieldError, UseFormReturn } from '../types'\n\n/** Convert Zod issues to our FieldError format */\nfunction zodToFieldErrors(zodError: z.ZodError): FieldError[] {\n return zodError.issues.map((issue) => ({\n field: issue.path.join('.'),\n message: issue.message,\n }))\n}\n\nexport function useFormState<T extends Record<string, unknown>>(\n initialValues: T,\n schema: z.ZodType<unknown, z.ZodTypeDef, unknown>,\n onSubmit: (values: T) => void | Promise<void>,\n): UseFormReturn<T> {\n const [values, setValues] = useState<T>(initialValues)\n const [errors, setErrors] = useState<FieldError[]>([])\n const [isSubmitting, setIsSubmitting] = useState(false)\n const mountedRef = useRef(true)\n\n const handleChange = useCallback(\n (field: keyof T) => (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = { ...values, [field]: e.target.value } as T\n setValues(next)\n setErrors((prev) => prev.filter((err) => err.field !== field))\n },\n [values],\n )\n\n const setFieldValue = useCallback((field: keyof T, value: string) => {\n setValues((prev) => ({ ...prev, [field]: value }) as T)\n setErrors((prev) => prev.filter((err) => err.field !== field))\n }, [])\n\n const handleSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n const result = schema.safeParse(values)\n if (!result.success) {\n setErrors(zodToFieldErrors(result.error))\n return\n }\n setIsSubmitting(true)\n try {\n await onSubmit(values)\n } finally {\n if (mountedRef.current) {\n setIsSubmitting(false)\n }\n }\n },\n [values, schema, onSubmit],\n )\n\n const reset = useCallback(() => {\n setValues(initialValues)\n setErrors([])\n setIsSubmitting(false)\n }, [initialValues])\n\n return { values, errors, isSubmitting, handleChange, handleSubmit, setFieldValue, reset }\n}\n","import { useCallback, useState } from 'react'\n\nexport function usePasswordToggle() {\n const [visible, setVisible] = useState(false)\n const toggle = useCallback(() => setVisible((v) => !v), [])\n return { visible, toggle, type: visible ? ('text' as const) : ('password' as const) }\n}\n","// ─── Components ──────────────────────────────────────────────\nexport { LoginForm } from './components/login-form'\nexport { SignupForm } from './components/signup-form'\nexport { ForgotPasswordForm } from './components/forgot-password-form'\nexport { ResetPasswordForm } from './components/reset-password-form'\nexport { AuthForm } from './components/auth-form'\nexport { ReferralCard } from './components/referral-card'\nexport { ReferralStats } from './components/referral-stats'\nexport { PricingTable } from './components/pricing-table'\nexport { CheckoutButton } from './components/checkout-button'\nexport { PayButton } from './components/pay-button'\nexport { PayphoneCallback } from './components/payphone-callback'\nexport { PayphoneWidgetRenderer } from './components/payphone-checkout'\nexport { SubscriptionBadge } from './components/subscription-badge'\nexport { InvoiceList } from './components/invoice-list'\n\n// ─── Provider & Context Hook ────────────────────────────────\nexport {\n AziridProvider,\n useAzirid,\n useAccessClient,\n useBranding,\n useMessages,\n} from './providers/access-provider'\nexport { resolveMessages, es, en } from './i18n'\n\n// ─── Standalone Auth Hooks ──────────────────────────────────\n// These hooks can be used to build custom UI without the built-in components.\n// They require <AziridProvider> for the client context.\nexport { useLogin } from './hooks/use-login'\nexport { useSignup } from './hooks/use-signup'\nexport { useLogout } from './hooks/use-logout'\nexport { useSession } from './hooks/use-session'\nexport { useMagicLink } from './hooks/use-magic-link'\nexport { useSocialLogin } from './hooks/use-social-login'\nexport { useChangePassword } from './hooks/use-change-password'\nexport { useRefresh } from './hooks/use-refresh'\nexport { useBootstrap } from './hooks/use-bootstrap'\nexport { usePasskeys } from './hooks/use-passkeys'\nexport { useReferral } from './hooks/use-referral'\nexport { useReferralStats } from './hooks/use-referral-stats'\nexport { usePlans } from './hooks/use-plans'\nexport { useSubscription } from './hooks/use-subscription'\nexport { useCheckout } from './hooks/use-checkout'\nexport { useInvoices } from './hooks/use-invoices'\nexport { useSubmitTransferProof, useTransferProofs } from './hooks/use-transfer-proof'\nexport { useUploadTransferProof } from './hooks/use-upload-transfer-proof'\nexport { usePaymentProviders } from './hooks/use-payment-providers'\nexport { usePayphoneConfirm } from './hooks/use-payphone-confirm'\nexport { usePayphoneCheckout } from './hooks/use-payphone-checkout'\nexport { usePayButton } from './hooks/use-pay-button'\nexport { useTransferPayment } from './hooks/use-transfer-payment'\nexport { useBranches } from './hooks/use-branches'\nexport { usePaymentMethods } from './hooks/use-payment-methods'\nexport { useTenants, useTenantMembers, useSwitchTenant } from './hooks/use-tenants'\nexport { usePasswordReset } from './hooks/use-password-reset'\n\n// ─── Mutation Hook Factory ───────────────────────────────────\nexport { createMutationHook } from './hooks/create-mutation-hook'\n\n// ─── Form Utility Hooks ─────────────────────────────────────\nexport { useFormState } from './hooks/use-form-state'\nexport { usePasswordToggle } from './hooks/use-password-toggle'\n\n// ─── Zod Schemas ─────────────────────────────────────────────\nexport {\n loginSchema,\n signupSchema,\n changePasswordSchema,\n magicLinkRequestSchema,\n magicLinkVerifySchema,\n socialLoginSchema,\n passkeyRegisterStartSchema,\n createLoginSchema,\n createSignupSchema,\n forgotPasswordSchema,\n createForgotPasswordSchema,\n resetPasswordConfirmSchema,\n createResetPasswordConfirmSchema,\n} from './schemas'\n\n// ─── Client ──────────────────────────────────────────────────\nexport { createAccessClient, isAuthError, PATHS, BASE_PATHS, buildPaths } from './client'\n\n// ─── Utilities ───────────────────────────────────────────────\nexport { cn } from './utils/cn'\nexport { removeStyles } from './utils/inject-styles'\n\n// ─── Version ─────────────────────────────────────────────────\ndeclare const __SDK_VERSION__: string\nexport const SDK_VERSION: string = __SDK_VERSION__\n\n// ─── Types ───────────────────────────────────────────────────\nexport type {\n AuthUser,\n AuthSuccessResponse,\n AuthState,\n SignupData,\n SocialLoginData,\n ChangePasswordData,\n BootstrapResponse,\n PasskeyItem,\n PasskeyRegisterStartData,\n PasskeyRegisterStartResponse,\n PasskeyRegisterVerifyData,\n PasskeyLoginStartData,\n PasskeyLoginStartResponse,\n PasskeyLoginVerifyData,\n PasskeyLoginData,\n RegisterPasskeyData,\n AziridProviderProps,\n AziridContextValue,\n LoginFormProps,\n SignupFormProps,\n ForgotPasswordFormProps,\n ResetPasswordFormProps,\n AuthView,\n AuthFormProps,\n FieldError,\n UseFormReturn,\n AppBranding,\n SupportedLocale,\n AccessMessages,\n ReferralInfo,\n ReferralStatsData,\n ReferralItem,\n BillingPlan,\n UserSubscription,\n CheckoutResponse,\n BillingInvoice,\n SubmitTransferProofData,\n TransferProof,\n UploadTransferProofRequest,\n UploadTransferProofResponse,\n PaymentProviderType,\n AvailableProvider,\n PaymentIntent,\n PayphoneWidgetConfig,\n TenantWithRole,\n TenantMemberInfo,\n CreateTenantData,\n Branch,\n PaymentMethod,\n} from './types'\n\nexport type {\n LoginInput,\n SignupInput,\n ChangePasswordInput,\n MagicLinkRequestInput,\n MagicLinkVerifyInput,\n SocialLoginInput,\n PasskeyRegisterStartInput,\n ForgotPasswordInput,\n ResetPasswordConfirmInput,\n} from './schemas'\n\nexport type { AccessClient, AccessClientConfig, ApiError, AuthPaths } from './client'\n\n// ─── Standalone Hook Types ──────────────────────────────────\nexport type { LoginData, UseLoginOptions, UseLoginReturn } from './hooks/use-login'\nexport type { UseSignupOptions, UseSignupReturn } from './hooks/use-signup'\nexport type { UseLogoutOptions, UseLogoutReturn } from './hooks/use-logout'\nexport type { UseSessionOptions, UseSessionReturn } from './hooks/use-session'\nexport type {\n MagicLinkRequestData,\n MagicLinkVerifyData,\n UseMagicLinkOptions,\n UseMagicLinkReturn,\n} from './hooks/use-magic-link'\nexport type { UseSocialLoginOptions, UseSocialLoginReturn } from './hooks/use-social-login'\nexport type { UseChangePasswordOptions, UseChangePasswordReturn } from './hooks/use-change-password'\nexport type { UseRefreshOptions, UseRefreshReturn } from './hooks/use-refresh'\nexport type { UseBootstrapOptions, UseBootstrapReturn } from './hooks/use-bootstrap'\nexport type { UsePasskeysOptions, UsePasskeysReturn } from './hooks/use-passkeys'\nexport type { CheckoutParams, UseCheckoutOptions } from './hooks/use-checkout'\nexport type {\n PayphoneConfirmParams,\n PayphoneConfirmResult,\n UsePayphoneConfirmOptions,\n} from './hooks/use-payphone-confirm'\nexport type {\n PasswordResetRequestData,\n PasswordResetConfirmData,\n UsePasswordResetOptions,\n UsePasswordResetReturn,\n} from './hooks/use-password-reset'\nexport type { SimpleMutationOptions, MutationHookConfig } from './hooks/create-mutation-hook'\nexport type { PricingCardProps } from './components/pricing-card'\nexport type { PricingFeatureListProps } from './components/pricing-feature-list'\nexport type { ProviderModalProps, TransferModalProps } from './components/pay-button-modal'\nexport type { ReferralCardProps } from './components/referral-card'\nexport type { ReferralStatsProps } from './components/referral-stats'\nexport type { PricingTableProps } from './components/pricing-table'\nexport type { CheckoutButtonProps } from './components/checkout-button'\nexport type { PayButtonProps } from './components/pay-button'\nexport type { SubscriptionBadgeProps } from './components/subscription-badge'\nexport type { InvoiceListProps } from './components/invoice-list'\nexport type { PayphoneModalProps } from './components/payphone-modal'\nexport type { PayphoneCallbackProps } from './components/payphone-callback'\nexport type {\n UsePayphoneCheckoutOptions,\n UsePayphoneCheckoutReturn,\n PayphoneCheckoutStatus,\n} from './hooks/use-payphone-checkout'\nexport type {\n UsePayButtonOptions,\n UsePayButtonReturn,\n PayButtonStatus,\n} from './hooks/use-pay-button'\nexport type {\n UseTransferPaymentOptions,\n UseTransferPaymentReturn,\n TransferPaymentStatus,\n SubmitProofData,\n} from './hooks/use-transfer-payment'\n\n// ─── Server Types (re-exported for convenience) ─────────────\nexport type { SessionSyncOptions } from './server'\n"]}
1
+ {"version":3,"sources":["../src/schemas/index.ts","../src/utils/cn.ts","../src/client/index.ts","../src/i18n/es.ts","../src/i18n/en.ts","../src/i18n/index.ts","../src/styles/generated.ts","../src/utils/inject-styles.ts","../src/providers/mutations.ts","../src/providers/access-provider.tsx","../src/components/ui/button.tsx","../src/components/ui/card.tsx","../src/components/ui/field.tsx","../src/components/ui/input.tsx","../src/components/login-form.tsx","../src/components/signup-form.tsx","../src/hooks/use-password-reset.ts","../src/components/forgot-password-form.tsx","../src/components/reset-password-form.tsx","../src/components/auth-form.tsx","../src/hooks/use-referral.ts","../src/components/referral-card.tsx","../src/hooks/use-referral-stats.ts","../src/components/referral-stats.tsx","../../shared/src/utils/format-amount.ts","../src/hooks/use-plans.ts","../src/hooks/use-subscription.ts","../src/hooks/use-checkout.ts","../src/hooks/use-payment-providers.ts","../src/utils/payphone-loader.ts","../src/components/payphone-checkout.tsx","../src/components/payphone-modal.tsx","../src/components/pricing-feature-list.tsx","../src/components/pricing-card.tsx","../src/components/pricing-table.tsx","../src/components/checkout-button.tsx","../src/hooks/use-payphone-confirm.ts","../src/hooks/use-pay-button.tsx","../src/hooks/use-upload-transfer-proof.ts","../src/hooks/use-transfer-proof.ts","../src/components/pay-button-modal.tsx","../src/components/pay-button.tsx","../src/components/payphone-callback.tsx","../src/components/HandoffCallback.tsx","../src/components/subscription-badge.tsx","../src/hooks/use-invoices.ts","../src/components/invoice-list.tsx","../src/hooks/use-login.ts","../src/hooks/use-signup.ts","../src/hooks/use-logout.ts","../src/hooks/use-session.ts","../src/hooks/use-magic-link.ts","../src/hooks/use-social-login.ts","../src/hooks/use-change-password.ts","../src/hooks/use-refresh.ts","../src/hooks/use-bootstrap.ts","../src/hooks/use-passkeys.ts","../src/hooks/use-payphone-checkout.ts","../src/hooks/use-transfer-payment.tsx","../src/hooks/use-branches.ts","../src/hooks/use-payment-methods.ts","../src/hooks/use-tenants.ts","../src/hooks/create-mutation-hook.ts","../src/hooks/use-form-state.ts","../src/hooks/use-password-toggle.ts","../src/index.ts"],"names":["z","twMerge","clsx","json","useQueryClient","useMutation","useCallback","createContext","useContext","QueryClient","useState","useMemo","useEffect","jsx","QueryClientProvider","cva","Slot","forwardRef","useForm","zodResolver","wrapperStyle","jsxs","Fragment","useQuery","styles","useRef","intervalLabels","PROVIDER_LABELS","PROVIDER_ICONS","error","TransferModal","messageStyle","statusColors","formatDate"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod'\nimport type { AccessMessages } from '../types'\n\n// ─── Schema Factories (locale-aware) ─────────────────────────\n\nexport function createLoginSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n password: z.string({ required_error: v.passwordRequired }).min(1, v.passwordRequired),\n })\n}\n\nexport function createSignupSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n password: z.string({ required_error: v.passwordRequired }).min(10, v.passwordMinLength),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n })\n}\n\n// ─── Login ───────────────────────────────────────────────────\nexport const loginSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n password: z\n .string({ required_error: 'La contraseña es requerida' })\n .min(1, 'La contraseña es requerida'),\n})\n\nexport type LoginInput = z.infer<typeof loginSchema>\n\n// ─── Signup ──────────────────────────────────────────────────\nexport const signupSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n password: z\n .string({ required_error: 'La contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n})\n\nexport type SignupInput = z.infer<typeof signupSchema>\n\n// ─── Change Password ─────────────────────────────────────────\nexport const changePasswordSchema = z.object({\n currentPassword: z\n .string({ required_error: 'La contraseña actual es requerida' })\n .min(1, 'La contraseña actual es requerida'),\n newPassword: z\n .string({ required_error: 'La nueva contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n})\n\nexport type ChangePasswordInput = z.infer<typeof changePasswordSchema>\n\n// ─── Magic Link ──────────────────────────────────────────────\nexport const magicLinkRequestSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n})\n\nexport type MagicLinkRequestInput = z.infer<typeof magicLinkRequestSchema>\n\nexport const magicLinkVerifySchema = z.object({\n token: z.string({ required_error: 'El token es requerido' }).min(1, 'El token es requerido'),\n})\n\nexport type MagicLinkVerifyInput = z.infer<typeof magicLinkVerifySchema>\n\n// ─── Social Login ────────────────────────────────────────────\nexport const socialLoginSchema = z.object({\n provider: z.enum(['google', 'github'], {\n required_error: 'El proveedor es requerido',\n }),\n providerAccountId: z\n .string({ required_error: 'El ID de proveedor es requerido' })\n .min(1, 'El ID de proveedor es requerido'),\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n emailVerified: z.boolean().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n createUserIfNotExists: z.boolean().optional(),\n turnstileToken: z.string().optional(),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n})\n\nexport type SocialLoginInput = z.infer<typeof socialLoginSchema>\n\n// ─── Forgot Password (request reset) ────────────────────────\nexport function createForgotPasswordSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n })\n}\n\nexport const forgotPasswordSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n})\n\nexport type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>\n\n// ─── Reset Password (confirm reset) ─────────────────────────\nexport function createResetPasswordConfirmSchema(v: AccessMessages['validation']) {\n return z\n .object({\n token: z.string({ required_error: v.tokenRequired }).min(1, v.tokenRequired),\n newPassword: z.string({ required_error: v.newPasswordRequired }).min(10, v.passwordMinLength),\n confirmPassword: z\n .string({ required_error: v.confirmPasswordRequired })\n .min(1, v.confirmPasswordRequired),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: v.passwordsMismatch,\n path: ['confirmPassword'],\n })\n}\n\nexport const resetPasswordConfirmSchema = z\n .object({\n token: z.string({ required_error: 'El token es requerido' }).min(1, 'El token es requerido'),\n newPassword: z\n .string({ required_error: 'La nueva contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n confirmPassword: z\n .string({ required_error: 'Confirma tu contraseña' })\n .min(1, 'Confirma tu contraseña'),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: 'Las contraseñas no coinciden',\n path: ['confirmPassword'],\n })\n\nexport type ResetPasswordConfirmInput = z.infer<typeof resetPasswordConfirmSchema>\n\n// ─── Passkey Register Start ──────────────────────────────────\nexport const passkeyRegisterStartSchema = z.object({\n deviceName: z.string().optional(),\n})\n\nexport type PasskeyRegisterStartInput = z.infer<typeof passkeyRegisterStartSchema>\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","// ─── ApiError ────────────────────────────────────────────────\n/** Error thrown by the API client — carries the HTTP status code. */\nexport interface ApiError extends Error {\n status: number\n}\n\n/** Check if an error is an API auth error (401/403). */\nexport function isAuthError(err: unknown): boolean {\n return (\n err instanceof Error &&\n typeof (err as ApiError).status === 'number' &&\n ((err as ApiError).status === 401 || (err as ApiError).status === 403)\n )\n}\n\n// ─── Path suffixes (appended to basePath) ───────────────────\nconst SUFFIXES = {\n login: 'login',\n signup: 'signup',\n logout: 'logout',\n me: 'me',\n refresh: 'refresh',\n bootstrap: 'session/bootstrap',\n magicLinkRequest: 'magic-link/request',\n magicLinkVerify: 'magic-link/verify',\n socialLogin: 'social/login',\n changePassword: 'password/change',\n passkeyLogin: 'passkeys/login',\n passkeyLoginStart: 'passkeys/login/start',\n passkeyLoginVerify: 'passkeys/login/verify',\n passkeyRegisterStart: 'passkeys/register/start',\n passkeyRegisterVerify: 'passkeys/register/verify',\n passkeys: 'passkeys',\n providers: 'billing/providers',\n plans: 'billing/plans',\n subscription: 'billing/subscription',\n checkout: 'billing/checkout',\n billingPortal: 'billing/portal',\n invoices: 'billing/invoices',\n uploadTransferProof: 'billing/upload-proof',\n submitTransferProof: 'billing/transfer-proof',\n transferProofs: 'billing/transfer-proofs',\n payphoneConfirm: 'billing/payphone/confirm',\n passwordResetRequest: 'password/reset/request',\n passwordResetConfirm: 'password/reset/confirm',\n referralMe: 'referrals/me',\n referralStats: 'referrals/stats',\n userTenants: 'tenants',\n branches: 'branches',\n paymentMethods: 'payment-methods',\n} as const\n\n/** Base paths for each mode */\nexport const BASE_PATHS = {\n /** Proxy mode (Next.js): requests go to the same origin via route handler */\n proxy: '/api/auth',\n /** Direct mode: requests go straight to the Azirid API */\n direct: '/v1/users/auth',\n} as const\n\n/** Build full path map from a basePath */\nexport function buildPaths(basePath: string): AuthPaths {\n const bp = basePath.replace(/\\/$/, '')\n return Object.fromEntries(\n Object.entries(SUFFIXES).map(([key, suffix]) => [key, `${bp}/${suffix}`]),\n ) as unknown as AuthPaths\n}\n\n/** Default paths (direct mode — backward compatible) */\nconst PATHS = buildPaths(BASE_PATHS.direct)\n\nexport type AuthPaths = { [K in keyof typeof SUFFIXES]: string }\n\n// ─── Client config ───────────────────────────────────────────\nexport interface AccessClientConfig {\n /** Base URL of the Azirid API (empty string for proxy mode) */\n baseUrl: string\n /**\n * Base path for auth endpoints.\n * - Proxy mode: '/api/auth' (matches Next.js route handler)\n * - Direct mode: '/v1/users/auth' (matches API routes)\n * @default '/v1/users/auth'\n */\n basePath?: string\n /** Extra headers (e.g. Authorization) */\n headers?: Record<string, string>\n}\n\nexport interface AccessClient {\n /** HTTP methods */\n post: <T = unknown>(path: string, body?: unknown) => Promise<T>\n get: <T = unknown>(path: string) => Promise<T>\n patch: <T = unknown>(path: string, body?: unknown) => Promise<T>\n del: <T = unknown>(path: string) => Promise<T>\n /** Resolved paths */\n paths: AuthPaths\n /** Base URL */\n baseUrl: string\n /** App context */\n appContext?: {\n publishableKey: string\n tenantId?: string\n }\n /** Manually set the access token (used by refresh/bootstrap) */\n setAccessToken: (token: string | null) => void\n /** Get the current access token */\n getAccessToken: () => string | null\n /** Store refresh token received from the API body (cross-origin support) */\n setRefreshToken: (token: string | null) => void\n /** Get the current in-memory refresh token */\n getRefreshToken: () => string | null\n /** Store CSRF token received from the API body (cross-origin support) */\n setCsrfToken: (token: string | null) => void\n /** Get the current CSRF token (from memory or cookie) */\n getCsrfToken: () => string | null\n /** Deduplicated refresh — safe to call from multiple places concurrently */\n refreshSession: (opts?: { tenantId?: string }) => Promise<void>\n /** Deduplicated bootstrap — safe to call from Strict Mode double-mounts */\n bootstrapSession: <T = unknown>() => Promise<T>\n /** Exchange a one-time handoff code for session tokens (cross-domain impersonation) */\n exchangeHandoff: (code: string) => Promise<{ user: unknown }>\n}\n\nexport function createAccessClient(\n config: AccessClientConfig,\n appContext?: AccessClient['appContext'],\n): AccessClient {\n const baseUrl = config.baseUrl.replace(/\\/$/, '')\n const paths = config.basePath ? buildPaths(config.basePath) : PATHS\n\n // sessionStorage keys (per-tab, survives page refresh)\n const storageKeyRt = '__azrt'\n const storageKeyCsrf = '__azxc'\n\n // localStorage key for persistent device identity (survives tab/browser restarts)\n const storageKeyDeviceId = '__az_device_id'\n\n function getOrCreateDeviceId(): string | null {\n try {\n if (typeof localStorage === 'undefined') return null\n let id = localStorage.getItem(storageKeyDeviceId)\n if (!id) {\n id = crypto.randomUUID()\n localStorage.setItem(storageKeyDeviceId, id)\n }\n return id\n } catch {\n return null // SSR or private browsing\n }\n }\n\n function ssGet(key: string): string | null {\n try {\n return typeof sessionStorage !== 'undefined' ? sessionStorage.getItem(key) : null\n } catch {\n return null\n }\n }\n function ssSet(key: string, value: string | null) {\n try {\n if (typeof sessionStorage === 'undefined') return\n if (value) sessionStorage.setItem(key, value)\n else sessionStorage.removeItem(key)\n } catch {\n /* SSR or private browsing */\n }\n }\n\n let accessToken: string | null = null\n let refreshToken: string | null = ssGet(storageKeyRt)\n let csrfToken: string | null = ssGet(storageKeyCsrf)\n let isRefreshing = false\n let refreshPromise: Promise<void> | null = null\n let bootstrapPromise: Promise<unknown> | null = null\n\n // ── Cross-tab token sync via BroadcastChannel ──────────────\n type TokenMessage = {\n type: 'token-refreshed'\n accessToken: string | null\n refreshToken: string | null\n csrfToken: string | null\n }\n\n let channel: BroadcastChannel | null = null\n try {\n if (typeof BroadcastChannel !== 'undefined') {\n channel = new BroadcastChannel('azirid-auth')\n channel.onmessage = (event: MessageEvent<TokenMessage>) => {\n if (event.data?.type === 'token-refreshed') {\n accessToken = event.data.accessToken\n if (event.data.refreshToken) setRefreshToken(event.data.refreshToken)\n if (event.data.csrfToken) setCsrfToken(event.data.csrfToken)\n }\n }\n }\n } catch {\n // BroadcastChannel not available (SSR, old browsers)\n }\n\n function broadcastTokens() {\n try {\n channel?.postMessage({\n type: 'token-refreshed',\n accessToken,\n refreshToken,\n csrfToken,\n } satisfies TokenMessage)\n } catch {\n // ignore\n }\n }\n\n function setAccessToken(token: string | null) {\n accessToken = token\n }\n\n function getAccessToken() {\n return accessToken\n }\n\n function setRefreshToken(token: string | null) {\n refreshToken = token\n ssSet(storageKeyRt, token)\n }\n\n function getRefreshToken() {\n return refreshToken\n }\n\n function setCsrfToken(token: string | null) {\n csrfToken = token\n ssSet(storageKeyCsrf, token)\n }\n\n const csrfCookieName = '_axc'\n\n /** Read CSRF token: prefer in-memory (cross-origin), fallback to cookie (same-origin) */\n function getCsrfToken(): string | null {\n if (csrfToken) return csrfToken\n if (typeof document === 'undefined') return null\n const match = document.cookie.match(new RegExp(`(?:^|;\\\\s*)${csrfCookieName}=([^;]*)`))\n return match ? decodeURIComponent(match[1]) : null\n }\n\n // Paths that rely on refresh token (not Bearer JWT)\n const sessionPaths: readonly string[] = [paths.refresh, paths.bootstrap, paths.logout]\n\n async function refreshTokensInternal(opts?: { tenantId?: string }): Promise<void> {\n const reqHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n reqHeaders['X-Publishable-Key'] = appContext.publishableKey\n }\n const csrf = getCsrfToken()\n if (csrf) reqHeaders['X-CSRF-Token'] = csrf\n const devId = getOrCreateDeviceId()\n if (devId) reqHeaders['X-Device-Id'] = devId\n\n // Send refresh token in body for cross-origin support\n const bodyPayload: Record<string, string> = {}\n if (refreshToken) {\n bodyPayload['rt'] = refreshToken\n }\n if (opts?.tenantId) {\n bodyPayload['tenantId'] = opts.tenantId\n }\n\n const res = await fetch(`${baseUrl}${paths.refresh}`, {\n method: 'POST',\n headers: reqHeaders,\n credentials: 'include',\n body: JSON.stringify(bodyPayload),\n })\n\n if (!res.ok) {\n accessToken = null\n setRefreshToken(null)\n setCsrfToken(null)\n throw new Error('Session expired')\n }\n\n const raw = await res.json()\n // Unwrap API envelope { data, meta } → extract data payload\n const json = raw && typeof raw === 'object' && 'data' in raw && 'meta' in raw ? raw.data : raw\n accessToken = json.at ?? json.accessToken ?? null\n // Update tokens from body (dual delivery) — persisted to sessionStorage\n const rt = json.rt ?? json.refreshToken\n const xc = json.xc ?? json.csrfToken\n if (rt) setRefreshToken(rt)\n if (xc) setCsrfToken(xc)\n\n // Notify other tabs about the new tokens\n broadcastTokens()\n }\n\n /**\n * Deduplicated refresh: if a refresh is already in flight, all callers\n * await the same promise instead of firing a second request with the\n * same (soon-to-be-revoked) token.\n */\n function refreshTokens(opts?: { tenantId?: string }): Promise<void> {\n // If switching tenant, bypass deduplication cache to force a new request\n if (opts?.tenantId) {\n isRefreshing = true\n return refreshTokensInternal(opts).finally(() => {\n isRefreshing = false\n })\n }\n\n if (refreshPromise) return refreshPromise\n\n isRefreshing = true\n refreshPromise = refreshTokensInternal().finally(() => {\n isRefreshing = false\n refreshPromise = null\n })\n\n return refreshPromise\n }\n\n /**\n * Deduplicated bootstrap: if a bootstrap is already in flight (e.g. React 18\n * Strict Mode double-mount), all callers await the same promise instead of\n * firing a second request that would rotate the token and invalidate the first.\n */\n function deduplicatedBootstrap<T>(): Promise<T> {\n if (bootstrapPromise) return bootstrapPromise as Promise<T>\n\n bootstrapPromise = request<T>('POST', paths.bootstrap).finally(() => {\n bootstrapPromise = null\n })\n\n return bootstrapPromise as Promise<T>\n }\n\n async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n\n // Publishable key header for public endpoints\n if (appContext?.publishableKey) {\n headers['X-Publishable-Key'] = appContext.publishableKey\n }\n\n // Only send Bearer token on endpoints that use JWT guard (not session-based)\n const isSessionPath = sessionPaths.includes(path)\n if (accessToken && !isSessionPath) {\n headers['Authorization'] = `Bearer ${accessToken}`\n }\n\n // CSRF token (from memory or cookie)\n const csrf = getCsrfToken()\n if (csrf) {\n headers['X-CSRF-Token'] = csrf\n }\n\n // Device ID for device tracking\n const devId = getOrCreateDeviceId()\n if (devId) {\n headers['X-Device-Id'] = devId\n }\n\n // For session paths (refresh/bootstrap/logout), inject refresh token into body\n let requestBody = body\n if (isSessionPath && refreshToken) {\n const existing =\n typeof body === 'object' && body !== null ? (body as Record<string, unknown>) : {}\n if (!existing['rt']) {\n requestBody = { ...existing, rt: refreshToken }\n }\n }\n\n let res = await fetch(`${baseUrl}${path}`, {\n method,\n headers,\n credentials: 'include',\n ...(requestBody !== undefined ? { body: JSON.stringify(requestBody) } : {}),\n })\n\n // Auto-refresh on 401 (skip for auth endpoints that don't use JWT)\n const skipRefreshPaths = [\n paths.refresh,\n paths.login,\n paths.signup,\n paths.bootstrap,\n paths.logout,\n ]\n if (res.status === 401 && !skipRefreshPaths.includes(path as typeof paths.refresh)) {\n try {\n await refreshTokens()\n } catch {\n let msg = 'Session expired'\n try {\n const json = await res.json()\n msg =\n json.message ||\n json.error?.message ||\n (typeof json.error === 'string' ? json.error : null) ||\n msg\n } catch {\n // ignore parse errors\n }\n throw new Error(msg)\n }\n\n // Retry the original request with the new token\n const retryHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n retryHeaders['X-Publishable-Key'] = appContext.publishableKey\n }\n if (accessToken && !isSessionPath) {\n retryHeaders['Authorization'] = `Bearer ${accessToken}`\n }\n const retryCsrf = getCsrfToken()\n if (retryCsrf) {\n retryHeaders['X-CSRF-Token'] = retryCsrf\n }\n const retryDevId = getOrCreateDeviceId()\n if (retryDevId) {\n retryHeaders['X-Device-Id'] = retryDevId\n }\n\n res = await fetch(`${baseUrl}${path}`, {\n method,\n headers: retryHeaders,\n credentials: 'include',\n ...(requestBody !== undefined ? { body: JSON.stringify(requestBody) } : {}),\n })\n }\n\n if (!res.ok) {\n let msg = `Error ${res.status}`\n try {\n const json = await res.json()\n msg =\n json.message ||\n json.error?.message ||\n (typeof json.error === 'string' ? json.error : null) ||\n msg\n } catch {\n // ignore parse errors\n }\n const err = new Error(msg)\n ;(err as ApiError).status = res.status\n throw err\n }\n\n // Handle 204 No Content\n if (res.status === 204) return undefined as T\n\n // Unwrap API envelope { data, meta } → return inner data\n const json = await res.json()\n if (json && typeof json === 'object' && 'data' in json && 'meta' in json) {\n return json.data as T\n }\n return json as T\n }\n\n async function exchangeHandoff(code: string): Promise<{ user: unknown }> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n headers['X-Publishable-Key'] = appContext.publishableKey\n }\n const devId = getOrCreateDeviceId()\n if (devId) headers['X-Device-Id'] = devId\n\n const res = await fetch(`${baseUrl}/v1/users/auth/handoff/exchange`, {\n method: 'POST',\n headers,\n credentials: 'include',\n body: JSON.stringify({ code }),\n })\n\n if (!res.ok) {\n throw new Error('Invalid or expired handoff code')\n }\n\n const raw = await res.json()\n const json =\n raw && typeof raw === 'object' && 'data' in raw && 'meta' in raw ? raw.data : raw\n\n accessToken = json.at ?? json.accessToken ?? null\n const rt = json.rt ?? json.refreshToken\n const xc = json.xc ?? json.csrfToken\n if (rt) setRefreshToken(rt)\n if (xc) setCsrfToken(xc)\n\n broadcastTokens()\n\n return { user: json.user }\n }\n\n return {\n post: <T = unknown>(path: string, body?: unknown) => request<T>('POST', path, body),\n get: <T = unknown>(path: string) => request<T>('GET', path),\n patch: <T = unknown>(path: string, body?: unknown) => request<T>('PATCH', path, body),\n del: <T = unknown>(path: string) => request<T>('DELETE', path),\n paths,\n baseUrl,\n appContext,\n setAccessToken,\n getAccessToken,\n setRefreshToken,\n getRefreshToken,\n setCsrfToken,\n getCsrfToken,\n refreshSession: (opts?: { tenantId?: string }) => refreshTokens(opts),\n bootstrapSession: <T = unknown>() => deduplicatedBootstrap<T>(),\n exchangeHandoff,\n }\n}\n\nexport { PATHS }\n","import type { AccessMessages } from '../types'\n\nexport const es: AccessMessages = {\n login: {\n title: 'Inicia sesión en tu cuenta',\n description: 'Ingresa tus credenciales para acceder al dashboard.',\n submit: 'Iniciar sesión',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: '••••••••',\n },\n signup: {\n title: 'Crea tu cuenta',\n description: 'Ingresa tus datos para registrarte.',\n submit: 'Crear cuenta',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: 'Mín. 10 caracteres',\n confirmPasswordLabel: 'Confirmar contraseña',\n confirmPasswordPlaceholder: 'Repite tu contraseña',\n },\n forgotPassword: {\n title: 'Recuperar contraseña',\n description:\n 'Ingresa tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.',\n submit: 'Enviar enlace',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n successMessage: 'Revisa tu correo electrónico para restablecer tu contraseña.',\n },\n resetPassword: {\n title: 'Restablecer contraseña',\n description: 'Ingresa tu nueva contraseña.',\n submit: 'Restablecer contraseña',\n newPasswordLabel: 'Nueva contraseña',\n newPasswordPlaceholder: 'Mín. 10 caracteres',\n confirmPasswordLabel: 'Confirmar contraseña',\n confirmPasswordPlaceholder: 'Repite tu contraseña',\n },\n social: {\n google: 'Continuar con Google',\n apple: 'Continuar con Apple',\n separator: 'o continuar con correo',\n comingSoon: 'Próximamente',\n },\n passwordToggle: {\n show: 'Ver',\n hide: 'Ocultar',\n },\n securedBy: 'Protegido por',\n billing: {\n pay: 'Pagar',\n selectPaymentMethod: 'Selecciona método de pago',\n creditCard: 'Tarjeta de crédito/débito',\n paypal: 'PayPal',\n payphone: 'Payphone',\n bankTransfer: 'Transferencia bancaria',\n cancel: 'Cancelar',\n processing: 'Procesando...',\n },\n navigation: {\n noAccountText: '¿No tienes cuenta?',\n signUpLink: 'Regístrate',\n hasAccountText: '¿Ya tienes cuenta?',\n signInLink: 'Inicia sesión',\n forgotPassword: '¿Olvidaste tu contraseña?',\n backToLogin: 'Volver a iniciar sesión',\n },\n validation: {\n emailRequired: 'El correo es requerido',\n emailInvalid: 'Correo electrónico inválido',\n passwordRequired: 'La contraseña es requerida',\n passwordMinLength: 'La contraseña debe tener al menos 10 caracteres',\n confirmPasswordRequired: 'Confirma tu contraseña',\n passwordsMismatch: 'Las contraseñas no coinciden',\n tokenRequired: 'El token es requerido',\n newPasswordRequired: 'La nueva contraseña es requerida',\n currentPasswordRequired: 'La contraseña actual es requerida',\n mfaCodeRequired: 'El código es requerido',\n mfaCodeLength: 'El código debe tener 6 dígitos',\n providerRequired: 'El proveedor es requerido',\n providerIdRequired: 'El ID de proveedor es requerido',\n urlInvalid: 'URL inválida',\n },\n}\n","import type { AccessMessages } from '../types'\n\nexport const en: AccessMessages = {\n login: {\n title: 'Sign in to your account',\n description: 'Enter your credentials to access the dashboard.',\n submit: 'Sign in',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: '••••••••',\n },\n signup: {\n title: 'Create your account',\n description: 'Enter your details to sign up.',\n submit: 'Create account',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: 'Min. 10 characters',\n confirmPasswordLabel: 'Confirm password',\n confirmPasswordPlaceholder: 'Repeat your password',\n },\n forgotPassword: {\n title: 'Reset password',\n description: \"Enter your email and we'll send you a link to reset your password.\",\n submit: 'Send link',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n successMessage: 'Check your email to reset your password.',\n },\n resetPassword: {\n title: 'Reset password',\n description: 'Enter your new password.',\n submit: 'Reset password',\n newPasswordLabel: 'New password',\n newPasswordPlaceholder: 'Min. 10 characters',\n confirmPasswordLabel: 'Confirm password',\n confirmPasswordPlaceholder: 'Repeat your password',\n },\n social: {\n google: 'Continue with Google',\n apple: 'Continue with Apple',\n separator: 'or continue with email',\n comingSoon: 'Coming soon',\n },\n passwordToggle: {\n show: 'Show',\n hide: 'Hide',\n },\n securedBy: 'Secured by',\n billing: {\n pay: 'Pay',\n selectPaymentMethod: 'Select payment method',\n creditCard: 'Credit/Debit Card',\n paypal: 'PayPal',\n payphone: 'Payphone',\n bankTransfer: 'Bank Transfer',\n cancel: 'Cancel',\n processing: 'Processing...',\n },\n navigation: {\n noAccountText: \"Don't have an account?\",\n signUpLink: 'Sign up',\n hasAccountText: 'Already have an account?',\n signInLink: 'Sign in',\n forgotPassword: 'Forgot your password?',\n backToLogin: 'Back to sign in',\n },\n validation: {\n emailRequired: 'Email is required',\n emailInvalid: 'Invalid email address',\n passwordRequired: 'Password is required',\n passwordMinLength: 'Password must be at least 10 characters',\n confirmPasswordRequired: 'Please confirm your password',\n passwordsMismatch: 'Passwords do not match',\n tokenRequired: 'Token is required',\n newPasswordRequired: 'New password is required',\n currentPasswordRequired: 'Current password is required',\n mfaCodeRequired: 'Code is required',\n mfaCodeLength: 'Code must be 6 digits',\n providerRequired: 'Provider is required',\n providerIdRequired: 'Provider ID is required',\n urlInvalid: 'Invalid URL',\n },\n}\n","import type { AccessMessages, SupportedLocale } from '../types'\nimport { es } from './es'\nimport { en } from './en'\n\nconst dictionaries: Record<SupportedLocale, AccessMessages> = { es, en }\n\n/**\n * Resolve the messages dictionary for a given locale.\n * Optional overrides are shallow-merged per section.\n */\nexport function resolveMessages(\n locale: SupportedLocale = 'es',\n overrides?: Partial<AccessMessages>,\n): AccessMessages {\n const base = dictionaries[locale] ?? dictionaries.es\n if (!overrides) return base\n\n return {\n login: { ...base.login, ...overrides.login },\n signup: { ...base.signup, ...overrides.signup },\n forgotPassword: { ...base.forgotPassword, ...overrides.forgotPassword },\n resetPassword: { ...base.resetPassword, ...overrides.resetPassword },\n navigation: { ...base.navigation, ...overrides.navigation },\n social: { ...base.social, ...overrides.social },\n passwordToggle: { ...base.passwordToggle, ...overrides.passwordToggle },\n securedBy: overrides.securedBy ?? base.securedBy,\n billing: { ...base.billing, ...overrides.billing },\n validation: { ...base.validation, ...overrides.validation },\n }\n}\n\nexport { es, en }\n","// Auto-generated — do not edit.\nexport const css = \"/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-azirid] *,[data-azirid] :before,[data-azirid] :after,[data-azirid] ::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-content:\\\"\\\"}}[data-azirid]{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-blue-500:oklch(62.3% .214 259.815);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-medium:500;--leading-snug:1.375;--radius-md:calc(var(--aa-radius) - 2px);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--aa-font-sans,ui-sans-serif, system-ui, sans-serif);--default-mono-font-family:var(--font-mono)}.\\\\@container\\\\/card-header{container:card-header/inline-size}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-10{z-index:10}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mr-2{margin-right:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.w-4{width:calc(var(--spacing) * 4)}.w-auto{width:auto}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.auto-rows-min{grid-auto-rows:min-content}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.rounded-\\\\[min\\\\(var\\\\(--radius-md\\\\)\\\\,10px\\\\)\\\\]{border-radius:min(var(--radius-md), 10px)}.rounded-\\\\[min\\\\(var\\\\(--radius-md\\\\)\\\\,12px\\\\)\\\\]{border-radius:min(var(--radius-md), 12px)}.rounded-lg{border-radius:var(--aa-radius)}.rounded-md{border-radius:calc(var(--aa-radius) - 2px)}.rounded-xl{border-radius:calc(var(--aa-radius) + 4px)}.rounded-t-xl{border-top-left-radius:calc(var(--aa-radius) + 4px);border-top-right-radius:calc(var(--aa-radius) + 4px)}.rounded-b-xl{border-bottom-right-radius:calc(var(--aa-radius) + 4px);border-bottom-left-radius:calc(var(--aa-radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--aa-border)}.border-destructive,.border-destructive\\\\/50{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\\\/50{border-color:color-mix(in oklab, var(--aa-destructive) 50%, transparent)}}.border-green-200{border-color:var(--color-green-200)}.border-input{border-color:var(--aa-input)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--aa-background)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--aa-border)}.bg-card{background-color:var(--aa-card)}.bg-destructive,.bg-destructive\\\\/10{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\\\/10{background-color:color-mix(in oklab, var(--aa-destructive) 10%, transparent)}}.bg-green-50{background-color:var(--color-green-50)}.bg-muted,.bg-muted\\\\/50{background-color:var(--aa-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\\\/50{background-color:color-mix(in oklab, var(--aa-muted) 50%, transparent)}}.bg-primary{background-color:var(--aa-primary)}.bg-secondary{background-color:var(--aa-secondary)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-clip-padding{background-clip:padding-box}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\\\[0\\\\.8rem\\\\]{font-size:.8rem}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.whitespace-nowrap{white-space:nowrap}.text-card-foreground{color:var(--aa-card-foreground)}.text-destructive{color:var(--aa-destructive)}.text-green-800{color:var(--color-green-800)}.text-muted-foreground{color:var(--aa-muted-foreground)}.text-primary{color:var(--aa-primary)}.text-primary-foreground{color:var(--aa-primary-foreground)}.text-secondary-foreground{color:var(--aa-secondary-foreground)}.uppercase{text-transform:uppercase}.underline-offset-4{text-underline-offset:4px}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-foreground,.ring-foreground\\\\/10{--tw-ring-color:var(--aa-foreground)}@supports (color:color-mix(in lab, red, red)){.ring-foreground\\\\/10{--tw-ring-color:color-mix(in oklab, var(--aa-foreground) 10%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-\\\\[disabled\\\\=true\\\\]\\\\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\\\\[disabled\\\\=true\\\\]\\\\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:p-3:is(:where(.group\\\\/card)[data-size=sm] *){padding:calc(var(--spacing) * 3)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:px-3:is(:where(.group\\\\/card)[data-size=sm] *){padding-inline:calc(var(--spacing) * 3)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:text-sm:is(:where(.group\\\\/card)[data-size=sm] *){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.peer-disabled\\\\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\\\\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.file\\\\:inline-flex::file-selector-button{display:inline-flex}.file\\\\:h-6::file-selector-button{height:calc(var(--spacing) * 6)}.file\\\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\\\:bg-transparent::file-selector-button{background-color:#0000}.file\\\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\\\:text-foreground::file-selector-button{color:var(--aa-foreground)}.placeholder\\\\:text-muted-foreground::placeholder{color:var(--aa-muted-foreground)}.after\\\\:absolute:after{content:var(--tw-content);position:absolute}.after\\\\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing) * 0)}.after\\\\:top-1\\\\/2:after{content:var(--tw-content);top:50%}.after\\\\:z-0:after{content:var(--tw-content);z-index:0}.after\\\\:flex:after{content:var(--tw-content);display:flex}.after\\\\:items-center:after{content:var(--tw-content);align-items:center}.after\\\\:border-t:after{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.after\\\\:border-border:after{content:var(--tw-content);border-color:var(--aa-border)}@media (hover:hover){.hover\\\\:bg-destructive\\\\/20:hover{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-destructive\\\\/20:hover{background-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.hover\\\\:bg-muted:hover{background-color:var(--aa-muted)}.hover\\\\:bg-secondary\\\\/80:hover{background-color:var(--aa-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-secondary\\\\/80:hover{background-color:color-mix(in oklab, var(--aa-secondary) 80%, transparent)}}.hover\\\\:text-foreground:hover{color:var(--aa-foreground)}.hover\\\\:underline:hover{text-decoration-line:underline}}.focus-visible\\\\:border-destructive\\\\/40:focus-visible{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:border-destructive\\\\/40:focus-visible{border-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.focus-visible\\\\:border-ring:focus-visible{border-color:var(--aa-ring)}.focus-visible\\\\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:var(--aa-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-ring) 50%, transparent)}}.disabled\\\\:pointer-events-none:disabled{pointer-events:none}.disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:bg-input\\\\/50:disabled{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.disabled\\\\:bg-input\\\\/50:disabled{background-color:color-mix(in oklab, var(--aa-input) 50%, transparent)}}.disabled\\\\:opacity-50:disabled{opacity:.5}:where([data-slot=button-group]) .in-data-\\\\[slot\\\\=button-group\\\\]\\\\:rounded-lg{border-radius:var(--aa-radius)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-1\\\\.5:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 1.5)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-2:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 2)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-3:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 3)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-1\\\\.5:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 1.5)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-2:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 2)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-3:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 3)}.has-data-\\\\[slot\\\\=card-action\\\\]\\\\:grid-cols-\\\\[1fr_auto\\\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\\\\[slot\\\\=card-description\\\\]\\\\:grid-rows-\\\\[auto_auto\\\\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-data-\\\\[slot\\\\=card-footer\\\\]\\\\:pb-0:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}.has-\\\\[\\\\>img\\\\:first-child\\\\]\\\\:pt-0:has(>img:first-child){padding-top:calc(var(--spacing) * 0)}.aria-expanded\\\\:bg-muted[aria-expanded=true]{background-color:var(--aa-muted)}.aria-expanded\\\\:bg-secondary[aria-expanded=true]{background-color:var(--aa-secondary)}.aria-expanded\\\\:text-foreground[aria-expanded=true]{color:var(--aa-foreground)}.aria-expanded\\\\:text-secondary-foreground[aria-expanded=true]{color:var(--aa-secondary-foreground)}.aria-invalid\\\\:border-destructive[aria-invalid=true]{border-color:var(--aa-destructive)}.aria-invalid\\\\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.data-horizontal\\\\:h-px[data-horizontal]{height:1px}.data-horizontal\\\\:w-full[data-horizontal]{width:100%}.data-vertical\\\\:w-px[data-vertical]{width:1px}.data-vertical\\\\:self-stretch[data-vertical]{align-self:stretch}.data-\\\\[size\\\\=sm\\\\]\\\\:gap-3[data-size=sm]{gap:calc(var(--spacing) * 3)}.data-\\\\[size\\\\=sm\\\\]\\\\:py-3[data-size=sm]{padding-block:calc(var(--spacing) * 3)}.data-\\\\[size\\\\=sm\\\\]\\\\:has-data-\\\\[slot\\\\=card-footer\\\\]\\\\:pb-0[data-size=sm]:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}@media (min-width:48rem){.md\\\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\\\\:border-green-800:is(.dark *){border-color:var(--color-green-800)}.dark\\\\:border-input:is(.dark *){border-color:var(--aa-input)}.dark\\\\:bg-destructive\\\\/20:is(.dark *){background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-destructive\\\\/20:is(.dark *){background-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.dark\\\\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\\\\:bg-input\\\\/30:is(.dark *){background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-input\\\\/30:is(.dark *){background-color:color-mix(in oklab, var(--aa-input) 30%, transparent)}}.dark\\\\:text-green-200:is(.dark *){color:var(--color-green-200)}@media (hover:hover){.dark\\\\:hover\\\\:bg-destructive\\\\/30:is(.dark *):hover{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-destructive\\\\/30:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-destructive) 30%, transparent)}}.dark\\\\:hover\\\\:bg-input\\\\/50:is(.dark *):hover{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-input\\\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-input) 50%, transparent)}}.dark\\\\:hover\\\\:bg-muted\\\\/50:is(.dark *):hover{background-color:var(--aa-muted)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-muted\\\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-muted) 50%, transparent)}}}.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.dark\\\\:disabled\\\\:bg-input\\\\/80:is(.dark *):disabled{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:disabled\\\\:bg-input\\\\/80:is(.dark *):disabled{background-color:color-mix(in oklab, var(--aa-input) 80%, transparent)}}.dark\\\\:aria-invalid\\\\:border-destructive\\\\/50:is(.dark *)[aria-invalid=true]{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:border-destructive\\\\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--aa-destructive) 50%, transparent)}}.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.\\\\[\\\\&_a\\\\]\\\\:underline a{text-decoration-line:underline}.\\\\[\\\\&_a\\\\]\\\\:underline-offset-4 a{text-underline-offset:4px}@media (hover:hover){.\\\\[\\\\&_a\\\\]\\\\:hover\\\\:text-primary a:hover{color:var(--aa-primary)}}.\\\\[\\\\&_svg\\\\]\\\\:pointer-events-none svg{pointer-events:none}.\\\\[\\\\&_svg\\\\]\\\\:shrink-0 svg{flex-shrink:0}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3\\\\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\\\[\\\\.border-b\\\\]\\\\:pb-4.border-b{padding-bottom:calc(var(--spacing) * 4)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:\\\\[\\\\.border-b\\\\]\\\\:pb-3:is(:where(.group\\\\/card)[data-size=sm] *).border-b{padding-bottom:calc(var(--spacing) * 3)}@media (hover:hover){.\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80:is(a):hover{background-color:var(--aa-primary)}@supports (color:color-mix(in lab, red, red)){.\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80:is(a):hover{background-color:color-mix(in oklab, var(--aa-primary) 80%, transparent)}}}:is(.\\\\*\\\\:\\\\[img\\\\:first-child\\\\]\\\\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:calc(var(--aa-radius) + 4px);border-top-right-radius:calc(var(--aa-radius) + 4px)}:is(.\\\\*\\\\:\\\\[img\\\\:last-child\\\\]\\\\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:calc(var(--aa-radius) + 4px);border-bottom-left-radius:calc(var(--aa-radius) + 4px)}[data-azirid]{--aa-radius:.625rem;--aa-background:oklch(100% 0 0);--aa-foreground:oklch(14.5% 0 0);--aa-card:oklch(100% 0 0);--aa-card-foreground:oklch(14.5% 0 0);--aa-popover:oklch(100% 0 0);--aa-popover-foreground:oklch(14.5% 0 0);--aa-primary:oklch(20.5% 0 0);--aa-primary-foreground:oklch(98.5% 0 0);--aa-secondary:oklch(97% 0 0);--aa-secondary-foreground:oklch(20.5% 0 0);--aa-muted:oklch(97% 0 0);--aa-muted-foreground:oklch(55.6% 0 0);--aa-accent:oklch(97% 0 0);--aa-accent-foreground:oklch(20.5% 0 0);--aa-destructive:oklch(57.7% .245 27.325);--aa-border:oklch(92.2% 0 0);--aa-input:oklch(92.2% 0 0);--aa-ring:oklch(70.8% 0 0);--aa-font-sans:ui-sans-serif, system-ui, sans-serif}@layer base{[data-azirid]{font-family:var(--aa-font-sans);color:var(--aa-foreground);background-color:var(--aa-background);-webkit-text-size-adjust:100%;tab-size:4;-webkit-font-smoothing:antialiased;line-height:1.5}[data-azirid] *,[data-azirid] :before,[data-azirid] :after{box-sizing:border-box;border:0 solid;border-color:var(--aa-border);margin:0;padding:0}[data-azirid] hr{height:0;color:inherit;border-top-width:1px}[data-azirid] h1,[data-azirid] h2,[data-azirid] h3,[data-azirid] h4,[data-azirid] h5,[data-azirid] h6{font-size:inherit;font-weight:inherit}[data-azirid] a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}[data-azirid] b,[data-azirid] strong{font-weight:bolder}[data-azirid] code,[data-azirid] kbd,[data-azirid] samp,[data-azirid] pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}[data-azirid] small{font-size:80%}[data-azirid] table{text-indent:0;border-color:inherit;border-collapse:collapse}[data-azirid] button,[data-azirid] input,[data-azirid] optgroup,[data-azirid] select,[data-azirid] textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}[data-azirid] button,[data-azirid] select{text-transform:none}[data-azirid] button,[data-azirid] input[type=button],[data-azirid] input[type=reset],[data-azirid] input[type=submit]{-webkit-appearance:button;background-color:#0000;background-image:none}[data-azirid] :-moz-focusring{outline:auto}[data-azirid] ::-moz-focus-inner{border-style:none;padding:0}[data-azirid] :-moz-ui-invalid{box-shadow:none}[data-azirid] progress{vertical-align:baseline}[data-azirid] ::-webkit-inner-spin-button{height:auto}[data-azirid] ::-webkit-outer-spin-button{height:auto}[data-azirid] [type=search]{-webkit-appearance:textfield;outline-offset:-2px}[data-azirid] ::-webkit-search-decoration{-webkit-appearance:none}[data-azirid] ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[data-azirid] summary{display:list-item}[data-azirid] ol,[data-azirid] ul,[data-azirid] menu{margin:0;padding:0;list-style:none}[data-azirid] textarea{resize:vertical}[data-azirid] ::placeholder{opacity:1;color:currentColor}@supports (color:color-mix(in lab, red, red)){[data-azirid] ::placeholder{color:color-mix(in oklch, currentColor 50%, transparent)}}[data-azirid] img,[data-azirid] svg,[data-azirid] video,[data-azirid] canvas,[data-azirid] audio,[data-azirid] iframe,[data-azirid] embed,[data-azirid] object{vertical-align:middle;display:block}[data-azirid] img,[data-azirid] video{max-width:100%;height:auto}[data-azirid] [hidden]:not([hidden=until-found]){display:none}}@property --tw-rotate-x{syntax:\\\"*\\\";inherits:false}@property --tw-rotate-y{syntax:\\\"*\\\";inherits:false}@property --tw-rotate-z{syntax:\\\"*\\\";inherits:false}@property --tw-skew-x{syntax:\\\"*\\\";inherits:false}@property --tw-skew-y{syntax:\\\"*\\\";inherits:false}@property --tw-border-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\\\"*\\\";inherits:false}@property --tw-font-weight{syntax:\\\"*\\\";inherits:false}@property --tw-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\\\"*\\\";inherits:false}@property --tw-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\\\"*\\\";inherits:false}@property --tw-inset-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\\\"*\\\";inherits:false}@property --tw-ring-offset-width{syntax:\\\"<length>\\\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\\\"*\\\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-content{syntax:\\\"*\\\";inherits:false;initial-value:\\\"\\\"}@keyframes spin{to{transform:rotate(360deg)}}\"\n","import { css } from '../styles/generated'\n\nconst STYLE_ID = 'azirid-access-styles'\nlet injected = false\n\nexport function injectStyles() {\n if (injected || typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) {\n injected = true\n return\n }\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = css\n document.head.appendChild(style)\n injected = true\n}\n\n/** Remove injected styles from the DOM (useful when embedding in host apps). */\nexport function removeStyles() {\n if (typeof document === 'undefined') return\n document.getElementById(STYLE_ID)?.remove()\n injected = false\n}\n","import { useCallback } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport type { AccessClient } from '../client'\nimport type { AuthSuccessResponse, AziridProviderProps, SignupData } from '../types'\n\nexport interface MutationDeps {\n client: AccessClient\n props: AziridProviderProps\n setUser: (user: AuthSuccessResponse['user'] | null) => void\n setError: (error: string | null) => void\n updateAccessToken: (token: string | null) => void\n saveSessionTokens: (data: Record<string, unknown>) => void\n normalizeToken: (data: Record<string, unknown>) => string\n withAppContext: (body: Record<string, unknown>) => Record<string, unknown>\n clearSession: () => void\n}\n\nexport function useAuthMutations(deps: MutationDeps) {\n const {\n client,\n props,\n setUser,\n setError,\n updateAccessToken,\n saveSessionTokens,\n normalizeToken,\n withAppContext,\n clearSession,\n } = deps\n\n const queryClient = useQueryClient()\n\n // ─── Login ─────────────────────────────────────────────────\n const loginMutation = useMutation({\n mutationFn: (data: { email: string; password: string }) =>\n client.post<AuthSuccessResponse>(client.paths.login, withAppContext(data)),\n onSuccess: (data) => {\n setUser(data.user)\n updateAccessToken(normalizeToken(data as unknown as Record<string, unknown>))\n saveSessionTokens(data as unknown as Record<string, unknown>)\n setError(null)\n props.onAuthStateChange?.()\n props.onLoginSuccess?.(data)\n },\n onError: (err: Error) => {\n setError(err.message)\n props.onError?.(err.message)\n },\n })\n\n // ─── Signup ────────────────────────────────────────────────\n const signupMutation = useMutation({\n mutationFn: (data: SignupData) => {\n const { confirmPassword: _, ...payload } = data as SignupData & { confirmPassword?: string }\n return client.post<AuthSuccessResponse>(client.paths.signup, withAppContext({ ...payload }))\n },\n onSuccess: (data) => {\n setUser(data.user)\n updateAccessToken(normalizeToken(data as unknown as Record<string, unknown>))\n saveSessionTokens(data as unknown as Record<string, unknown>)\n setError(null)\n props.onAuthStateChange?.()\n props.onSignupSuccess?.(data)\n },\n onError: (err: Error) => {\n setError(err.message)\n props.onError?.(err.message)\n },\n })\n\n // ─── Logout ────────────────────────────────────────────────\n const logoutMutation = useMutation({\n mutationFn: () => client.post(client.paths.logout),\n onSettled: () => {\n clearSession()\n setError(null)\n queryClient.clear()\n props.onAuthStateChange?.()\n props.onLogoutSuccess?.()\n },\n })\n\n // ─── Refresh ───────────────────────────────────────────────\n const refreshFn = useCallback(async () => {\n try {\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n } catch (err) {\n clearSession()\n queryClient.clear()\n props.onSessionExpired?.()\n throw err\n }\n }, [client, queryClient, props, updateAccessToken, clearSession])\n\n // ─── Switch Tenant ─────────────────────────────────────────\n const switchTenantFn = useCallback(\n async (tenantId: string) => {\n await client.refreshSession({ tenantId })\n updateAccessToken(client.getAccessToken())\n await queryClient.invalidateQueries({ queryKey: ['azirid-access'] })\n },\n [client, queryClient, updateAccessToken],\n )\n\n return {\n loginMutation,\n signupMutation,\n logoutMutation,\n refreshFn,\n switchTenantFn,\n }\n}\n","import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { createAccessClient, isAuthError, BASE_PATHS, type AccessClient } from '../client'\nimport type {\n AziridContextValue,\n AccessMessages,\n AziridProviderProps,\n AppBranding,\n AuthUser,\n BootstrapResponse,\n SignupData,\n} from '../types'\nimport { resolveMessages } from '../i18n'\nimport { injectStyles, removeStyles } from '../utils/inject-styles'\nimport { useAuthMutations } from './mutations'\n\n// ─── Contexts ────────────────────────────────────────────────\nconst AziridContext = createContext<AziridContextValue | null>(null)\nAziridContext.displayName = 'AziridContext'\n\nconst ClientContext = createContext<AccessClient | null>(null)\nClientContext.displayName = 'AccessClientContext'\n\ninterface BrandingContextValue {\n branding: AppBranding | null\n messages: AccessMessages\n}\n\nconst BrandingContext = createContext<BrandingContextValue | null>(null)\nBrandingContext.displayName = 'BrandingContext'\n\n/** Access the raw API client for custom calls */\nexport function useAccessClient(): AccessClient {\n const ctx = useContext(ClientContext)\n if (!ctx) {\n throw new Error('useAccessClient must be used within an <AziridProvider>.')\n }\n return ctx\n}\n\n/**\n * Get the current app branding from bootstrap.\n * Returns null when no branding is configured.\n */\nexport function useBranding(): AppBranding | null {\n const ctx = useContext(BrandingContext)\n return ctx?.branding ?? null\n}\n\n/**\n * Get resolved i18n messages for the current locale.\n * Falls back to Spanish (es) if no provider is found.\n */\nexport function useMessages(): AccessMessages {\n const ctx = useContext(BrandingContext)\n if (ctx) return ctx.messages\n return resolveMessages('es')\n}\n\n// Default query client\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false, refetchOnWindowFocus: false },\n },\n})\n\n// ─── Inner Provider ──────────────────────────────────────────\nfunction AziridProviderInner({\n children,\n client,\n props,\n}: {\n children: React.ReactNode\n client: AccessClient\n props: AziridProviderProps\n}) {\n const [user, setUser] = useState<AuthUser | null>(null)\n const [accessToken, setAccessToken] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [branding, setBranding] = useState<AppBranding | null>(null)\n // Start as true when autoBootstrap is enabled — prevents flash of login form on F5.\n const [isBootstrapping, setIsBootstrapping] = useState(props.autoBootstrap ?? true)\n\n // ─── Branding & i18n ────────────────────────────────────────\n const messages = useMemo(\n () => resolveMessages(props.locale ?? 'es', props.messages),\n [props.locale, props.messages],\n )\n\n const brandingValue = useMemo(() => ({ branding, messages }), [branding, messages])\n\n // ─── Proxy mode detection ───────────────────────────────────\n // Proxy mode when no apiUrl is provided (requests go to same-origin route handler)\n const isProxyMode = !props.apiUrl\n\n // ─── Session Sync (cookie for server components/actions) ────\n const syncUrl = useMemo(() => {\n if (props.sessionSyncUrl === false) return null\n if (props.sessionSyncUrl) return props.sessionSyncUrl\n // In proxy mode: cookies flow through the proxy as first-party — no sync needed.\n if (isProxyMode) return null\n // Cross-origin direct (dev or legacy): sync to local cookie\n if (client.appContext?.publishableKey?.startsWith('pk_dev')) {\n return '/api/auth/session'\n }\n return null\n }, [props.sessionSyncUrl, client.appContext?.publishableKey, isProxyMode])\n\n const syncSession = useCallback(\n (token: string | null) => {\n if (!syncUrl) return\n if (token) {\n fetch(syncUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ token }),\n }).catch(() => {})\n } else {\n fetch(syncUrl, { method: 'DELETE' }).catch(() => {})\n }\n },\n [syncUrl],\n )\n\n /** Sync access token with the client and local cookie */\n const updateAccessToken = useCallback(\n (token: string | null) => {\n setAccessToken(token)\n client.setAccessToken(token)\n syncSession(token)\n },\n [client, syncSession],\n )\n\n /**\n * Save session tokens from API response body.\n * Handles both obfuscated (rt/xc) and explicit (refreshToken/csrfToken) keys.\n */\n const saveSessionTokens = useCallback(\n (data: Record<string, unknown>) => {\n const rt = (data.rt ?? data.refreshToken) as string | undefined\n const xc = (data.xc ?? data.csrfToken) as string | undefined\n if (rt) client.setRefreshToken(rt)\n if (xc) client.setCsrfToken(xc)\n },\n [client],\n )\n\n /** Clear all session state */\n const clearSession = useCallback(() => {\n setUser(null)\n updateAccessToken(null)\n client.setRefreshToken(null)\n client.setCsrfToken(null)\n }, [client, updateAccessToken])\n\n /** Inject tenantId (appId/environment resolved by PublishableKeyGuard via header) */\n const withAppContext = useCallback(\n (body: Record<string, unknown>) => {\n if (client.appContext?.tenantId) {\n return { ...body, tenantId: client.appContext.tenantId }\n }\n return body\n },\n [client],\n )\n\n // ─── Bootstrap ──────────────────────────────────────────────\n // Uses client.bootstrapSession() which deduplicates concurrent calls.\n // In React 18 Strict Mode (dev), the effect runs twice but both calls\n // await the SAME promise — only one HTTP request is made.\n useEffect(() => {\n const autoBootstrap = props.autoBootstrap ?? true\n if (!autoBootstrap) return\n\n let cancelled = false\n\n async function bootstrap() {\n setIsBootstrapping(true)\n try {\n const response = await client.bootstrapSession<BootstrapResponse>()\n\n if (cancelled) return\n\n if (response.branding) {\n setBranding(response.branding)\n }\n\n if (response.authenticated) {\n const r = response as unknown as Record<string, unknown>\n setUser(response.user)\n updateAccessToken((r.at ?? r.accessToken) as string)\n saveSessionTokens(r)\n }\n } catch (err) {\n if (typeof console !== 'undefined') {\n const msg = err instanceof Error ? err.message : JSON.stringify(err)\n console.warn('[azirid-access] bootstrap failed:', msg)\n }\n } finally {\n if (!cancelled) {\n setIsBootstrapping(false)\n }\n }\n }\n\n bootstrap()\n\n return () => {\n cancelled = true\n }\n }, [client, props.autoBootstrap, updateAccessToken, saveSessionTokens])\n\n // ─── Silent Token Refresh (shared logic) ───────────────────\n // Uses client.refreshSession() which deduplicates concurrent calls.\n // If two triggers fire at the same time (e.g. timer + visibilitychange),\n // only ONE request is sent; the second caller awaits the same promise.\n const silentRefresh = useCallback(async () => {\n if (!client.getAccessToken()) return\n\n // Use Web Locks API to prevent multiple tabs from refreshing simultaneously.\n // If another tab is already refreshing, this tab skips and waits for the\n // BroadcastChannel message with updated tokens.\n if (typeof navigator !== 'undefined' && 'locks' in navigator) {\n let acquired = false\n try {\n await navigator.locks.request(\n 'azirid-token-refresh',\n { ifAvailable: true },\n async (lock) => {\n if (!lock) return // Another tab holds the lock — skip refresh\n acquired = true\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n },\n )\n } catch (err) {\n if (acquired && isAuthError(err)) {\n clearSession()\n props.onSessionExpired?.()\n }\n }\n return\n }\n\n // Fallback for browsers without Web Locks\n try {\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n } catch (err) {\n if (isAuthError(err)) {\n clearSession()\n props.onSessionExpired?.()\n }\n }\n }, [client, updateAccessToken, clearSession, props])\n\n // ─── Cross-tab Token Sync ─────────────────────────────────\n // When another tab refreshes tokens, sync the React state here.\n useEffect(() => {\n let channel: BroadcastChannel | null = null\n try {\n if (typeof BroadcastChannel !== 'undefined') {\n channel = new BroadcastChannel('azirid-auth')\n channel.onmessage = (event: MessageEvent) => {\n if (event.data?.type === 'token-refreshed' && event.data.accessToken) {\n client.setAccessToken(event.data.accessToken)\n updateAccessToken(event.data.accessToken)\n }\n }\n }\n } catch {\n // BroadcastChannel not available\n }\n return () => {\n try {\n channel?.close()\n } catch {\n // ignore\n }\n }\n }, [client, updateAccessToken])\n\n // ─── Periodic Token Refresh ────────────────────────────────\n useEffect(() => {\n const intervalMs = props.refreshInterval ?? 50_000\n if (intervalMs <= 0) return\n\n const id = setInterval(silentRefresh, intervalMs)\n return () => clearInterval(id)\n }, [props.refreshInterval, silentRefresh])\n\n // ─── Refresh on Tab Visibility ─────────────────────────────\n useEffect(() => {\n function handleVisibilityChange() {\n if (document.visibilityState === 'visible') {\n silentRefresh()\n }\n }\n\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => document.removeEventListener('visibilitychange', handleVisibilityChange)\n }, [silentRefresh])\n\n /** Normalize accessToken from API response (obfuscated \"at\" or \"accessToken\") */\n const normalizeToken = useCallback(\n (data: Record<string, unknown>): string => (data.at ?? data.accessToken) as string,\n [],\n )\n\n // ─── Mutations (extracted) ─────────────────────────────────\n const { loginMutation, signupMutation, logoutMutation, refreshFn, switchTenantFn } =\n useAuthMutations({\n client,\n props,\n setUser,\n setError,\n updateAccessToken,\n saveSessionTokens,\n normalizeToken,\n withAppContext,\n clearSession,\n })\n\n // ─── Actions ───────────────────────────────────────────────\n const login = useCallback(\n (data: { email: string; password: string }) => loginMutation.mutate(data),\n [loginMutation],\n )\n\n const signup = useCallback((data: SignupData) => signupMutation.mutate(data), [signupMutation])\n\n const logout = useCallback(() => logoutMutation.mutate(), [logoutMutation])\n const clearError = useCallback(() => setError(null), [])\n\n const setUserFn = useCallback((u: AuthUser | null) => {\n setUser(u)\n }, [])\n\n const value = useMemo<AziridContextValue>(\n () => ({\n user,\n accessToken,\n isAuthenticated: user !== null,\n isLoading: isBootstrapping || loginMutation.isPending || signupMutation.isPending,\n error,\n login,\n signup,\n logout,\n clearError,\n refresh: refreshFn,\n switchTenant: switchTenantFn,\n setUser: setUserFn,\n isLoginPending: loginMutation.isPending,\n isSignupPending: signupMutation.isPending,\n isBootstrapping,\n loginMutation,\n signupMutation,\n logoutMutation,\n }),\n [\n user,\n accessToken,\n error,\n login,\n signup,\n logout,\n clearError,\n refreshFn,\n switchTenantFn,\n setUserFn,\n loginMutation,\n signupMutation,\n logoutMutation,\n isBootstrapping,\n ],\n )\n\n return (\n <ClientContext.Provider value={client}>\n <AziridContext.Provider value={value}>\n <BrandingContext.Provider value={brandingValue}>{children}</BrandingContext.Provider>\n </AziridContext.Provider>\n </ClientContext.Provider>\n )\n}\n\n// ─── Public Provider ─────────────────────────────────────────\nexport function AziridProvider(props: AziridProviderProps) {\n useEffect(() => {\n injectStyles()\n return () => removeStyles()\n }, [])\n\n const client = useMemo(() => {\n const appContext = props.publishableKey\n ? {\n publishableKey: props.publishableKey,\n tenantId: props.tenantId,\n }\n : undefined\n\n // Proxy mode (no apiUrl): requests go to same-origin /api/auth/*\n // Direct mode (apiUrl set): requests go straight to the Azirid API\n const isProxy = !props.apiUrl\n const baseUrl = isProxy ? '' : props.apiUrl!.replace(/\\/$/, '')\n const basePath = isProxy ? BASE_PATHS.proxy : BASE_PATHS.direct\n\n return createAccessClient(\n { baseUrl, basePath, headers: props.fetchOptions as Record<string, string> },\n appContext,\n )\n }, [props.publishableKey, props.tenantId, props.fetchOptions, props.apiUrl])\n\n return (\n <QueryClientProvider client={defaultQueryClient}>\n <AziridProviderInner client={client} props={props}>\n {props.children}\n </AziridProviderInner>\n </QueryClientProvider>\n )\n}\n\n// ─── Hook ────────────────────────────────────────────────────\nexport function useAzirid(): AziridContextValue {\n const ctx = useContext(AziridContext)\n if (!ctx) {\n throw new Error(\n 'useAzirid must be used within an <AziridProvider>. ' +\n 'Wrap your app (or the relevant subtree) with <AziridProvider>.',\n )\n }\n return ctx\n}\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Slot } from 'radix-ui'\n\nimport { cn } from '../../utils/cn'\n\nconst buttonVariants = cva(\n \"cursor-pointer focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost:\n 'hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground',\n destructive:\n 'bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default:\n 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-8',\n 'icon-xs':\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm':\n 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',\n 'icon-lg': 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : 'button'\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction Card({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<'div'> & { size?: 'default' | 'sm' }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n 'ring-foreground/10 bg-card text-card-foreground group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n 'text-base leading-snug font-medium group-data-[size=sm]/card:text-sm',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn('px-4 group-data-[size=sm]/card:px-3', className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n 'bg-muted/50 flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"field-group\" className={cn('flex flex-col gap-6', className)} {...props} />\n}\n\nfunction Field({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"field\" className={cn('grid gap-3', className)} {...props} />\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<'label'>) {\n return (\n <label\n data-slot=\"field-label\"\n className={cn('text-sm leading-none font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-description\"\n className={cn(\n 'text-muted-foreground [&_a]:hover:text-primary text-sm [&_a]:underline [&_a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({ className, children, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-separator\"\n className={cn(\n 'after:border-border relative text-center text-sm after:absolute after:inset-0 after:top-1/2 after:z-0 after:flex after:items-center after:border-t',\n className,\n )}\n {...props}\n >\n <span\n data-slot=\"field-separator-content\"\n className=\"bg-card text-muted-foreground relative z-10 px-2\"\n >\n {children}\n </span>\n </div>\n )\n}\n\nexport { FieldGroup, Field, FieldLabel, FieldDescription, FieldSeparator }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 file:text-foreground placeholder:text-muted-foreground h-8 w-full min-w-0 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import { forwardRef, useCallback, useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { LoginFormProps } from '../types'\nimport { createLoginSchema, type LoginInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useAzirid, useBranding, useMessages } from '../providers/access-provider'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel, FieldSeparator } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const LoginForm = forwardRef<HTMLFormElement, LoginFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n forgotPassword,\n showSocialButtons = false,\n labels,\n defaultValues,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n\n const title = titleProp ?? (branding?.displayName || msg.login.title)\n const description = descriptionProp ?? msg.login.description\n const submitText = submitTextProp ?? msg.login.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createLoginSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let ctxLogin: ((data: LoginInput) => void) | undefined\n let ctxError: string | null = null\n let ctxLoading = false\n\n try {\n const ctx = useAzirid()\n ctxLogin = ctx.login\n ctxError = ctx.error\n ctxLoading = ctx.isLoginPending\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<LoginInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', password: '', ...defaultValues },\n })\n\n const onSubmit = useCallback(\n async (values: LoginInput) => {\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (ctxLogin) {\n ctxLogin(values)\n }\n },\n [onSubmitProp, ctxLogin],\n )\n\n const loading = externalLoading ?? ctxLoading ?? isSubmitting\n const error = externalError ?? ctxError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n {showSocialButtons && (\n <>\n <Field>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.apple}\n </Button>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.google}\n </Button>\n </Field>\n <FieldSeparator>{msg.social.separator}</FieldSeparator>\n </>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-login-email\">\n {labels?.email ?? msg.login.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-login-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={labels?.emailPlaceholder ?? msg.login.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-login-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-login-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <div className=\"flex items-center\">\n <FieldLabel htmlFor=\"aa-login-password\">\n {labels?.password ?? msg.login.passwordLabel}\n </FieldLabel>\n {forgotPassword && (\n <span className=\"ml-auto text-sm underline-offset-4 hover:underline\">\n {forgotPassword}\n </span>\n )}\n </div>\n <Input\n id=\"aa-login-password\"\n type=\"password\"\n autoComplete=\"current-password\"\n placeholder={labels?.passwordPlaceholder ?? msg.login.passwordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.password}\n aria-describedby={errors.password ? 'aa-login-pass-err' : undefined}\n {...register('password')}\n />\n {errors.password && (\n <p id=\"aa-login-pass-err\" className=\"text-destructive text-xs\">\n {errors.password.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nLoginForm.displayName = 'LoginForm'\n","import { forwardRef, useCallback, useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { SignupFormProps } from '../types'\nimport { createSignupSchema, type SignupInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useAzirid, useBranding, useMessages } from '../providers/access-provider'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel, FieldSeparator } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const SignupForm = forwardRef<HTMLFormElement, SignupFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n showSocialButtons = false,\n labels,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n\n const title = titleProp ?? (branding?.displayName || msg.signup.title)\n const description = descriptionProp ?? msg.signup.description\n const submitText = submitTextProp ?? msg.signup.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createSignupSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let ctxSignup: ((data: SignupInput) => void) | undefined\n let ctxError: string | null = null\n let ctxLoading = false\n\n try {\n const ctx = useAzirid()\n ctxSignup = ctx.signup as (data: SignupInput) => void\n ctxError = ctx.error\n ctxLoading = ctx.isSignupPending\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<SignupInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', password: '' },\n })\n\n const onSubmit = useCallback(\n async (values: SignupInput) => {\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (ctxSignup) {\n ctxSignup(values)\n }\n },\n [onSubmitProp, ctxSignup],\n )\n\n const loading = externalLoading ?? ctxLoading ?? isSubmitting\n const error = externalError ?? ctxError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n {showSocialButtons && (\n <>\n <Field>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.apple}\n </Button>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.google}\n </Button>\n </Field>\n <FieldSeparator>{msg.social.separator}</FieldSeparator>\n </>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-signup-email\">\n {labels?.email ?? msg.signup.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-signup-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={labels?.emailPlaceholder ?? msg.signup.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-signup-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-signup-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <FieldLabel htmlFor=\"aa-signup-password\">\n {labels?.password ?? msg.signup.passwordLabel}\n </FieldLabel>\n <Input\n id=\"aa-signup-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={labels?.passwordPlaceholder ?? msg.signup.passwordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.password}\n aria-describedby={errors.password ? 'aa-signup-pass-err' : undefined}\n {...register('password')}\n />\n {errors.password && (\n <p id=\"aa-signup-pass-err\" className=\"text-destructive text-xs\">\n {errors.password.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nSignupForm.displayName = 'SignupForm'\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface PasswordResetRequestData {\n email: string\n}\n\nexport interface PasswordResetConfirmData {\n token: string\n newPassword: string\n}\n\nexport interface UsePasswordResetOptions {\n /** Callback after reset email sent */\n onRequestSuccess?: () => void\n /** Callback after password successfully reset */\n onConfirmSuccess?: () => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UsePasswordResetReturn {\n /** Request a password reset email */\n request: UseMutationResult<unknown, Error, PasswordResetRequestData>\n /** Confirm the password reset with token + new password */\n confirm: UseMutationResult<unknown, Error, PasswordResetConfirmData>\n}\n\n/**\n * Standalone hook for password reset flow. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const passwordReset = usePasswordReset({\n * onRequestSuccess: () => toast.success(\"Check your email\"),\n * onConfirmSuccess: () => router.push(\"/login\"),\n * });\n *\n * // Step 1: request reset\n * passwordReset.request.mutate({ email: \"user@test.com\" });\n *\n * // Step 2: confirm with token from URL\n * passwordReset.confirm.mutate({ token: \"abc\", newPassword: \"newPass123!\" });\n * ```\n */\nexport function usePasswordReset(options?: UsePasswordResetOptions): UsePasswordResetReturn {\n const client = useAccessClient()\n\n const request = useMutation({\n mutationKey: ['azirid-access', 'password-reset', 'request'],\n mutationFn: (data: PasswordResetRequestData) =>\n client.post(client.paths.passwordResetRequest, data),\n onSuccess: () => options?.onRequestSuccess?.(),\n onError: options?.onError,\n })\n\n const confirm = useMutation({\n mutationKey: ['azirid-access', 'password-reset', 'confirm'],\n mutationFn: (data: PasswordResetConfirmData) =>\n client.post(client.paths.passwordResetConfirm, data),\n onSuccess: () => options?.onConfirmSuccess?.(),\n onError: options?.onError,\n })\n\n return { request, confirm }\n}\n","import { forwardRef, useCallback, useMemo, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { ForgotPasswordFormProps } from '../types'\nimport { createForgotPasswordSchema, type ForgotPasswordInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useBranding, useMessages } from '../providers/access-provider'\nimport { usePasswordReset } from '../hooks/use-password-reset'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const ForgotPasswordForm = forwardRef<HTMLFormElement, ForgotPasswordFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n defaultValues,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n const [success, setSuccess] = useState(false)\n const [hookError, setHookError] = useState<string | null>(null)\n\n const title = titleProp ?? msg.forgotPassword.title\n const description = descriptionProp ?? msg.forgotPassword.description\n const submitText = submitTextProp ?? msg.forgotPassword.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createForgotPasswordSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let passwordReset: ReturnType<typeof usePasswordReset> | null = null\n try {\n passwordReset = usePasswordReset({\n onRequestSuccess: () => setSuccess(true),\n onError: (err) => setHookError(err.message),\n })\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<ForgotPasswordInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', ...defaultValues },\n })\n\n const onSubmit = useCallback(\n async (values: ForgotPasswordInput) => {\n setHookError(null)\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (passwordReset) {\n passwordReset.request.mutate(values)\n }\n },\n [onSubmitProp, passwordReset],\n )\n\n const loading = externalLoading ?? passwordReset?.request.isPending ?? isSubmitting\n const error = externalError ?? hookError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n {success ? (\n <div className=\"rounded-md border border-green-200 bg-green-50 px-4 py-3 text-center text-sm text-green-800 dark:border-green-800 dark:bg-green-950 dark:text-green-200\">\n {msg.forgotPassword.successMessage}\n </div>\n ) : (\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-forgot-email\">\n {msg.forgotPassword.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-forgot-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={msg.forgotPassword.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-forgot-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-forgot-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && (\n <FieldDescription className=\"text-center\">{footer}</FieldDescription>\n )}\n </Field>\n </FieldGroup>\n </form>\n )}\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nForgotPasswordForm.displayName = 'ForgotPasswordForm'\n","import { forwardRef, useCallback, useMemo, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { ResetPasswordFormProps } from '../types'\nimport { createResetPasswordConfirmSchema, type ResetPasswordConfirmInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useBranding, useMessages } from '../providers/access-provider'\nimport { usePasswordReset } from '../hooks/use-password-reset'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldGroup, FieldLabel, FieldDescription } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const ResetPasswordForm = forwardRef<HTMLFormElement, ResetPasswordFormProps>(\n (\n {\n token,\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n onSuccess,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n const [hookError, setHookError] = useState<string | null>(null)\n\n const title = titleProp ?? msg.resetPassword.title\n const description = descriptionProp ?? msg.resetPassword.description\n const submitText = submitTextProp ?? msg.resetPassword.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createResetPasswordConfirmSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let passwordReset: ReturnType<typeof usePasswordReset> | null = null\n try {\n passwordReset = usePasswordReset({\n onConfirmSuccess: () => onSuccess?.(),\n onError: (err) => setHookError(err.message),\n })\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<ResetPasswordConfirmInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { token, newPassword: '', confirmPassword: '' },\n })\n\n const onSubmit = useCallback(\n async (values: ResetPasswordConfirmInput) => {\n setHookError(null)\n if (onSubmitProp) {\n await onSubmitProp({ token: values.token, newPassword: values.newPassword })\n } else if (passwordReset) {\n passwordReset.confirm.mutate({\n token: values.token,\n newPassword: values.newPassword,\n })\n }\n },\n [onSubmitProp, passwordReset],\n )\n\n const loading = externalLoading ?? passwordReset?.confirm.isPending ?? isSubmitting\n const error = externalError ?? hookError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <input type=\"hidden\" {...register('token')} />\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-reset-new-password\">\n {msg.resetPassword.newPasswordLabel}\n </FieldLabel>\n <Input\n id=\"aa-reset-new-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={msg.resetPassword.newPasswordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.newPassword}\n aria-describedby={errors.newPassword ? 'aa-reset-newpass-err' : undefined}\n {...register('newPassword')}\n />\n {errors.newPassword && (\n <p id=\"aa-reset-newpass-err\" className=\"text-destructive text-xs\">\n {errors.newPassword.message}\n </p>\n )}\n </Field>\n\n <Field>\n <FieldLabel htmlFor=\"aa-reset-confirm-password\">\n {msg.resetPassword.confirmPasswordLabel}\n </FieldLabel>\n <Input\n id=\"aa-reset-confirm-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={msg.resetPassword.confirmPasswordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.confirmPassword}\n aria-describedby={\n errors.confirmPassword ? 'aa-reset-confirmpass-err' : undefined\n }\n {...register('confirmPassword')}\n />\n {errors.confirmPassword && (\n <p id=\"aa-reset-confirmpass-err\" className=\"text-destructive text-xs\">\n {errors.confirmPassword.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nResetPasswordForm.displayName = 'ResetPasswordForm'\n","import { useState, useCallback } from 'react'\nimport type { AuthView, AuthFormProps } from '../types'\nimport { useMessages } from '../providers/access-provider'\nimport { LoginForm } from './login-form'\nimport { SignupForm } from './signup-form'\nimport { ForgotPasswordForm } from './forgot-password-form'\nimport { ResetPasswordForm } from './reset-password-form'\n\nexport function AuthForm({\n view: controlledView,\n onViewChange,\n defaultView = 'login',\n className,\n style,\n logo,\n showSocialButtons,\n hideNavigation,\n resetToken,\n defaultValues,\n loginProps,\n signupProps,\n forgotPasswordProps,\n resetPasswordProps,\n}: AuthFormProps) {\n const [internalView, setInternalView] = useState<AuthView>(defaultView)\n const msg = useMessages()\n\n const currentView = controlledView ?? internalView\n\n const navigate = useCallback(\n (target: AuthView) => {\n if (onViewChange) {\n onViewChange(target)\n } else {\n setInternalView(target)\n }\n },\n [onViewChange],\n )\n\n const navLink = (text: string, target: AuthView) => (\n <button\n type=\"button\"\n onClick={() => navigate(target)}\n className=\"text-primary font-medium underline-offset-4 hover:underline\"\n >\n {text}\n </button>\n )\n\n const sharedProps = { className, style, logo }\n\n switch (currentView) {\n case 'login':\n return (\n <LoginForm\n {...sharedProps}\n showSocialButtons={showSocialButtons}\n defaultValues={defaultValues}\n {...loginProps}\n forgotPassword={\n hideNavigation ? undefined : navLink(msg.navigation.forgotPassword, 'forgot-password')\n }\n footer={\n hideNavigation ? undefined : (\n <span>\n {msg.navigation.noAccountText} {navLink(msg.navigation.signUpLink, 'signup')}\n </span>\n )\n }\n />\n )\n\n case 'signup':\n return (\n <SignupForm\n {...sharedProps}\n showSocialButtons={showSocialButtons}\n {...signupProps}\n footer={\n hideNavigation ? undefined : (\n <span>\n {msg.navigation.hasAccountText} {navLink(msg.navigation.signInLink, 'login')}\n </span>\n )\n }\n />\n )\n\n case 'forgot-password':\n return (\n <ForgotPasswordForm\n {...sharedProps}\n defaultValues={defaultValues ? { email: defaultValues.email } : undefined}\n {...forgotPasswordProps}\n footer={\n hideNavigation ? undefined : <span>{navLink(msg.navigation.backToLogin, 'login')}</span>\n }\n />\n )\n\n case 'reset-password':\n return (\n <ResetPasswordForm\n {...sharedProps}\n token={resetToken ?? ''}\n {...resetPasswordProps}\n footer={\n hideNavigation ? undefined : <span>{navLink(msg.navigation.backToLogin, 'login')}</span>\n }\n />\n )\n }\n}\n\nAuthForm.displayName = 'AuthForm'\n","import { useCallback, useMemo } from 'react'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ReferralInfo } from '../types'\n\nexport function useReferral() {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'referral', 'me'],\n queryFn: () => client.get<ReferralInfo>(client.paths.referralMe),\n enabled: !!client.getAccessToken(),\n })\n\n const copyToClipboard = useCallback(async () => {\n if (query.data?.referralUrl) {\n await navigator.clipboard.writeText(query.data.referralUrl)\n return true\n }\n return false\n }, [query.data?.referralUrl])\n\n return useMemo(() => ({ ...query, copyToClipboard }), [query, copyToClipboard])\n}\n","import { useCallback, useState } from 'react'\nimport type { CSSProperties } from 'react'\nimport { useReferral } from '../hooks/use-referral'\n\nexport interface ReferralCardProps {\n className?: string\n style?: CSSProperties\n title?: string\n description?: string\n}\n\nconst styles = {\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n title: {\n margin: '0 0 4px 0',\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n description: {\n margin: '0 0 16px 0',\n fontSize: '14px',\n color: '#6b7280',\n } satisfies CSSProperties,\n codeContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '16px',\n } satisfies CSSProperties,\n codeInput: {\n flex: 1,\n padding: '10px 12px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#f9fafb',\n fontSize: '14px',\n fontFamily: 'monospace',\n color: '#374151',\n outline: 'none',\n } satisfies CSSProperties,\n copyButton: {\n padding: '10px 16px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n color: '#374151',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n transition: 'background-color 0.15s',\n } satisfies CSSProperties,\n copyButtonCopied: {\n backgroundColor: '#ecfdf5',\n borderColor: '#a7f3d0',\n color: '#065f46',\n } satisfies CSSProperties,\n statsRow: {\n display: 'flex',\n gap: '24px',\n } satisfies CSSProperties,\n stat: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '2px',\n } satisfies CSSProperties,\n statValue: {\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n statLabel: {\n fontSize: '12px',\n color: '#6b7280',\n } satisfies CSSProperties,\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '8px',\n animation: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',\n } satisfies CSSProperties,\n emptyMessage: {\n fontSize: '14px',\n color: '#9ca3af',\n textAlign: 'center' as const,\n padding: '12px 0',\n } satisfies CSSProperties,\n}\n\nexport function ReferralCard({\n className,\n style,\n title = 'Refer a Friend',\n description = 'Share your referral link and earn rewards for every friend who signs up.',\n}: ReferralCardProps) {\n const { data, isLoading } = useReferral()\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(async () => {\n if (!data?.referralUrl) return\n try {\n await navigator.clipboard.writeText(data.referralUrl)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // Clipboard API not available\n }\n }, [data?.referralUrl])\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <div style={{ ...styles.skeleton, height: '20px', width: '140px', marginBottom: '8px' }} />\n <div style={{ ...styles.skeleton, height: '14px', width: '260px', marginBottom: '16px' }} />\n <div style={{ ...styles.skeleton, height: '42px', width: '100%', marginBottom: '16px' }} />\n <div style={{ display: 'flex', gap: '24px' }}>\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n </div>\n </div>\n )\n }\n\n if (!data?.referralCode) {\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <h3 style={styles.title}>{title}</h3>\n <p style={styles.emptyMessage}>Referral program is not available at this time.</p>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <h3 style={styles.title}>{title}</h3>\n <p style={styles.description}>{description}</p>\n\n <div style={styles.codeContainer}>\n <input\n type=\"text\"\n readOnly\n value={data.referralUrl}\n style={styles.codeInput}\n onClick={(e) => (e.target as HTMLInputElement).select()}\n />\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...styles.copyButton,\n ...(copied ? styles.copyButtonCopied : {}),\n }}\n >\n {copied ? 'Copied!' : 'Copy'}\n </button>\n </div>\n\n <div style={styles.statsRow}>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.totalReferred}</span>\n <span style={styles.statLabel}>Total Referred</span>\n </div>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.completedReferrals}</span>\n <span style={styles.statLabel}>Completed</span>\n </div>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.pendingReferrals}</span>\n <span style={styles.statLabel}>Pending</span>\n </div>\n </div>\n </div>\n )\n}\n\nReferralCard.displayName = 'ReferralCard'\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ReferralStatsData } from '../types'\n\nexport function useReferralStats() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'referral', 'stats'],\n queryFn: () => client.get<ReferralStatsData>(client.paths.referralStats),\n enabled: !!client.getAccessToken(),\n })\n}\n","import type { CSSProperties } from 'react'\nimport { useReferralStats } from '../hooks/use-referral-stats'\nimport type { ReferralItem } from '../types'\n\nexport interface ReferralStatsProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusColors: Record<ReferralItem['status'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n COMPLETED: { bg: '#d1fae5', color: '#065f46' },\n EXPIRED: { bg: '#fee2e2', color: '#991b1b' },\n}\n\nconst rewardStatusColors: Record<ReferralItem['rewardStatus'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n GRANTED: { bg: '#d1fae5', color: '#065f46' },\n EXPIRED: { bg: '#fee2e2', color: '#991b1b' },\n FAILED: { bg: '#fee2e2', color: '#991b1b' },\n}\n\nconst styles = {\n container: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n header: {\n padding: '16px 24px',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n title: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n summaryRow: {\n display: 'flex',\n gap: '24px',\n padding: '12px 24px',\n backgroundColor: '#f9fafb',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n summaryItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: '#6b7280',\n } satisfies CSSProperties,\n summaryValue: {\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n fontSize: '14px',\n } satisfies CSSProperties,\n th: {\n padding: '12px 24px',\n textAlign: 'left' as const,\n fontSize: '12px',\n fontWeight: 500,\n color: '#6b7280',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: '#f9fafb',\n } satisfies CSSProperties,\n td: {\n padding: '12px 24px',\n borderBottom: '1px solid #f3f4f6',\n color: '#374151',\n } satisfies CSSProperties,\n badge: (bg: string, color: string): CSSProperties => ({\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: bg,\n color,\n }),\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n height: '14px',\n } satisfies CSSProperties,\n emptyRow: {\n padding: '24px',\n textAlign: 'center' as const,\n color: '#9ca3af',\n fontSize: '14px',\n } satisfies CSSProperties,\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nexport function ReferralStats({ className, style }: ReferralStatsProps) {\n const { data, isLoading } = useReferralStats()\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <div style={{ ...styles.skeleton, width: '140px', height: '18px' }} />\n </div>\n <div style={{ padding: '24px' }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{ ...styles.skeleton, width: '100%', height: '16px', marginBottom: '16px' }}\n />\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <h3 style={styles.title}>Referral History</h3>\n </div>\n\n {data && (\n <div style={styles.summaryRow}>\n <span style={styles.summaryItem}>\n Total: <span style={styles.summaryValue}>{data.totalReferred}</span>\n </span>\n <span style={styles.summaryItem}>\n Completed: <span style={styles.summaryValue}>{data.completedReferrals}</span>\n </span>\n <span style={styles.summaryItem}>\n Pending: <span style={styles.summaryValue}>{data.pendingReferrals}</span>\n </span>\n <span style={styles.summaryItem}>\n Rewards: <span style={styles.summaryValue}>{data.totalRewards}</span>\n </span>\n </div>\n )}\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>Email</th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Reward</th>\n <th style={styles.th}>Date</th>\n </tr>\n </thead>\n <tbody>\n {(!data?.referrals || data.referrals.length === 0) && (\n <tr>\n <td colSpan={4} style={styles.emptyRow}>\n No referrals yet.\n </td>\n </tr>\n )}\n {data?.referrals.map((item) => {\n const sc = statusColors[item.status]\n const rc = rewardStatusColors[item.rewardStatus]\n return (\n <tr key={item.id}>\n <td style={styles.td}>{item.referredEmail}</td>\n <td style={styles.td}>\n <span style={styles.badge(sc.bg, sc.color)}>{item.status}</span>\n </td>\n <td style={styles.td}>\n <span style={styles.badge(rc.bg, rc.color)}>\n {item.rewardStatus}\n {item.rewardAmount != null && ` ($${item.rewardAmount})`}\n </span>\n </td>\n <td style={styles.td}>{formatDate(item.createdAt)}</td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n\nReferralStats.displayName = 'ReferralStats'\n","/**\n * Format a minor-unit amount (e.g. cents) into a locale-aware currency string.\n *\n * @param amount - The amount in minor units (e.g. 1500 = $15.00)\n * @param currency - ISO 4217 currency code (e.g. \"USD\", \"EUR\")\n */\nexport function formatAmount(amount: number, currency: string): string {\n try {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }).format(amount / 100)\n } catch {\n return `${currency} ${(amount / 100).toFixed(2)}`\n }\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BillingPlan } from '../types'\n\nexport function usePlans() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'plans'],\n queryFn: () => client.get<BillingPlan[]>(client.paths.plans),\n })\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { UserSubscription } from '../types'\n\nexport function useSubscription() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'subscription'],\n queryFn: () => client.get<UserSubscription>(client.paths.subscription),\n enabled: !!client.getAccessToken(),\n })\n}\n","import { useCallback, useMemo } from 'react'\nimport { useMutation } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { CheckoutResponse, PaymentProviderType } from '../types'\n\nexport interface CheckoutParams {\n planId?: string\n intentId?: string\n branchId?: string\n merchantAccountId?: string\n successUrl: string\n cancelUrl: string\n provider?: PaymentProviderType\n}\n\nexport interface UseCheckoutOptions {\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n redirectOnSuccess?: boolean\n}\n\nexport function useCheckout(options?: UseCheckoutOptions) {\n const client = useAccessClient()\n\n const mutation = useMutation({\n mutationFn: (params: CheckoutParams) =>\n client.post<CheckoutResponse>(client.paths.checkout, params),\n onSuccess: (data) => {\n // Only redirect for card providers (not MANUAL_TRANSFER or PAYPHONE)\n if (\n options?.redirectOnSuccess !== false &&\n data.url &&\n data.provider !== 'MANUAL_TRANSFER' &&\n data.provider !== 'PAYPHONE'\n ) {\n window.location.href = data.url\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const checkout = useCallback(\n (params: CheckoutParams) => {\n mutation.mutate(params)\n },\n [mutation],\n )\n\n return useMemo(() => ({ ...mutation, checkout }), [mutation, checkout])\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AvailableProvider } from '../types'\n\nexport function usePaymentProviders() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'providers'],\n queryFn: () => client.get<AvailableProvider[]>(client.paths.providers),\n })\n}\n","const PAYPHONE_CDN = 'https://cdn.payphonetodoesposible.com'\nconst PAYPHONE_CSS_URL = `${PAYPHONE_CDN}/box/v1.1/payphone-payment-box.css`\nconst PAYPHONE_JS_URL = `${PAYPHONE_CDN}/box/v1.1/payphone-payment-box.js`\n\nlet loadPromise: Promise<void> | null = null\n\nfunction loadCss(href: string): void {\n if (document.querySelector(`link[href=\"${href}\"]`)) return\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n document.head.appendChild(link)\n}\n\nfunction loadScript(src: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve()\n return\n }\n const script = document.createElement('script')\n script.src = src\n script.onload = () => resolve()\n script.onerror = () =>\n reject(\n new Error(\n `Failed to load Payphone SDK from ${src}. ` +\n `If your app uses a Content-Security-Policy, add \"${PAYPHONE_CDN}\" ` +\n `to both script-src and style-src directives.`,\n ),\n )\n document.head.appendChild(script)\n })\n}\n\nexport function loadPayphoneSdk(): Promise<void> {\n if (loadPromise) return loadPromise\n\n loadPromise = (async () => {\n loadCss(PAYPHONE_CSS_URL)\n await loadScript(PAYPHONE_JS_URL)\n })().catch((err) => {\n // Reset so the next call retries instead of returning the cached rejection\n loadPromise = null\n throw err\n })\n\n return loadPromise\n}\n","import { useEffect, useRef } from 'react'\nimport { loadPayphoneSdk } from '../utils/payphone-loader'\nimport type { PayphoneWidgetConfig } from '../types'\n\ndeclare global {\n interface Window {\n PPaymentButtonBox: new (config: Record<string, unknown>) => {\n render: (containerId: string) => void\n }\n }\n}\n\n/**\n * Internal widget renderer — loads Payphone SDK and mounts PPaymentButtonBox.\n * Used by usePayphoneCheckout, usePayButton hooks and PayphoneModal component.\n */\nexport function PayphoneWidgetRenderer({\n config,\n containerId,\n onReady,\n onError,\n}: {\n config: PayphoneWidgetConfig\n containerId: string\n onReady?: () => void\n onError?: (error: Error) => void\n}) {\n const initialized = useRef(false)\n\n useEffect(() => {\n if (initialized.current) return\n initialized.current = true\n\n loadPayphoneSdk()\n .then(() => {\n requestAnimationFrame(() => {\n if (typeof window.PPaymentButtonBox === 'undefined') {\n onError?.(new Error('Payphone SDK failed to initialize'))\n return\n }\n\n new window.PPaymentButtonBox({\n token: config.token,\n clientTransactionId: config.clientTransactionId,\n amount: config.amount,\n amountWithoutTax: config.amountWithoutTax,\n currency: config.currency,\n storeId: config.storeId,\n reference: config.reference,\n }).render(containerId)\n\n onReady?.()\n })\n })\n .catch((err) => {\n onError?.(new Error(err instanceof Error ? err.message : 'Failed to load Payphone SDK'))\n })\n }, [config, containerId, onReady, onError])\n\n return <div id={containerId} />\n}\n","import { useState, type CSSProperties } from 'react'\nimport { PayphoneWidgetRenderer } from './payphone-checkout'\nimport type { PayphoneWidgetConfig } from '../types'\n\nexport interface PayphoneModalProps {\n config: PayphoneWidgetConfig\n onClose: () => void\n}\n\nexport function PayphoneModal({ config, onClose }: PayphoneModalProps) {\n const [error, setError] = useState<string | null>(null)\n\n return (\n <div style={overlayStyle} onClick={onClose}>\n <div style={cardStyle} onClick={(e) => e.stopPropagation()}>\n <h2 style={titleStyle}>Payphone</h2>\n\n {error && <p style={{ ...messageStyle, color: '#ef4444' }}>{error}</p>}\n\n <PayphoneWidgetRenderer\n config={config}\n containerId=\"pp-button-azirid\"\n onError={(err) => setError(err.message)}\n />\n\n <p style={warningStyle}>Do not close this window until the payment is complete.</p>\n\n <button type=\"button\" style={cancelStyle} onClick={onClose}>\n Cancel\n </button>\n </div>\n </div>\n )\n}\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n}\n\nconst cardStyle: CSSProperties = {\n backgroundColor: '#fff',\n borderRadius: '12px',\n padding: '24px',\n maxWidth: '480px',\n width: '90%',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n}\n\nconst titleStyle: CSSProperties = {\n fontSize: '18px',\n fontWeight: 700,\n color: '#111827',\n margin: '0 0 16px 0',\n textAlign: 'center',\n}\n\nconst messageStyle: CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n textAlign: 'center',\n margin: '12px 0',\n}\n\nconst warningStyle: CSSProperties = {\n fontSize: '12px',\n color: '#d97706',\n textAlign: 'center',\n margin: '16px 0 0 0',\n}\n\nconst cancelStyle: CSSProperties = {\n display: 'block',\n width: '100%',\n marginTop: '12px',\n padding: '10px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n fontFamily: 'inherit',\n}\n","import type { CSSProperties } from 'react'\n\nexport interface PricingFeatureListProps {\n features: string[]\n}\n\nconst styles = {\n featuresList: {\n listStyle: 'none',\n padding: 0,\n margin: '0 0 24px 0',\n flex: 1,\n } satisfies CSSProperties,\n featureItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '14px',\n color: '#374151',\n } satisfies CSSProperties,\n checkmark: {\n color: '#10b981',\n fontSize: '16px',\n fontWeight: 700,\n flexShrink: 0,\n } satisfies CSSProperties,\n}\n\nexport function PricingFeatureList({ features }: PricingFeatureListProps) {\n if (!features || features.length === 0) return null\n\n return (\n <ul style={styles.featuresList}>\n {features.map((feature, i) => (\n <li key={i} style={styles.featureItem}>\n <span style={styles.checkmark} aria-hidden=\"true\">\n &#10003;\n </span>\n {feature}\n </li>\n ))}\n </ul>\n )\n}\n\nPricingFeatureList.displayName = 'PricingFeatureList'\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { PricingFeatureList } from './pricing-feature-list'\nimport type { BillingPlan } from '../types'\n\nexport interface PricingCardProps {\n plan: BillingPlan\n isCurrentPlan: boolean\n isCheckoutPending: boolean\n onSelect: (plan: BillingPlan) => void\n}\n\nconst intervalLabels: Record<BillingPlan['interval'], string> = {\n MONTHLY: '/mo',\n YEARLY: '/yr',\n ONE_TIME: '',\n}\n\nconst styles = {\n card: (isCurrentPlan: boolean): CSSProperties => ({\n border: isCurrentPlan ? '2px solid #6366f1' : '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }),\n currentBadge: {\n position: 'absolute' as const,\n top: '-12px',\n left: '50%',\n transform: 'translateX(-50%)',\n backgroundColor: '#6366f1',\n color: '#ffffff',\n fontSize: '12px',\n fontWeight: 600,\n padding: '2px 12px',\n borderRadius: '9999px',\n whiteSpace: 'nowrap' as const,\n } satisfies CSSProperties,\n planName: {\n margin: '0 0 4px 0',\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n planDescription: {\n margin: '0 0 16px 0',\n fontSize: '14px',\n color: '#6b7280',\n lineHeight: '1.5',\n } satisfies CSSProperties,\n priceRow: {\n display: 'flex',\n alignItems: 'baseline',\n gap: '4px',\n marginBottom: '20px',\n } satisfies CSSProperties,\n priceAmount: {\n fontSize: '36px',\n fontWeight: 700,\n color: '#111827',\n lineHeight: 1,\n } satisfies CSSProperties,\n priceInterval: {\n fontSize: '16px',\n color: '#6b7280',\n } satisfies CSSProperties,\n selectButton: (isCurrentPlan: boolean): CSSProperties => ({\n width: '100%',\n padding: '12px 24px',\n borderRadius: '8px',\n border: isCurrentPlan ? '1px solid #d1d5db' : 'none',\n backgroundColor: isCurrentPlan ? '#ffffff' : '#111827',\n color: isCurrentPlan ? '#6b7280' : '#ffffff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: isCurrentPlan ? 'default' : 'pointer',\n transition: 'background-color 0.15s',\n }),\n}\n\nexport function PricingCard({\n plan,\n isCurrentPlan,\n isCheckoutPending,\n onSelect,\n}: PricingCardProps) {\n return (\n <div style={styles.card(isCurrentPlan)}>\n {isCurrentPlan && <span style={styles.currentBadge}>Current Plan</span>}\n\n <h3 style={styles.planName}>{plan.name}</h3>\n {plan.description && <p style={styles.planDescription}>{plan.description}</p>}\n\n <div style={styles.priceRow}>\n <span style={styles.priceAmount}>{formatAmount(plan.amount, plan.currency)}</span>\n <span style={styles.priceInterval}>{intervalLabels[plan.interval]}</span>\n </div>\n\n {plan.features && plan.features.length > 0 && <PricingFeatureList features={plan.features} />}\n\n <button\n type=\"button\"\n onClick={() => onSelect(plan)}\n disabled={isCurrentPlan || isCheckoutPending}\n style={{\n ...styles.selectButton(isCurrentPlan),\n ...(isCheckoutPending && !isCurrentPlan ? { opacity: 0.6 } : {}),\n }}\n >\n {isCurrentPlan ? 'Current Plan' : 'Subscribe'}\n </button>\n </div>\n )\n}\n\nPricingCard.displayName = 'PricingCard'\n","import { useState, type CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { usePlans } from '../hooks/use-plans'\nimport { useSubscription } from '../hooks/use-subscription'\nimport { useCheckout } from '../hooks/use-checkout'\nimport { usePaymentProviders } from '../hooks/use-payment-providers'\nimport { PayphoneModal } from './payphone-modal'\nimport { PricingCard } from './pricing-card'\nimport type {\n AvailableProvider,\n BillingPlan,\n CheckoutResponse,\n PaymentProviderType,\n} from '../types'\n\nexport interface PricingTableProps {\n className?: string\n style?: CSSProperties\n successUrl: string\n cancelUrl: string\n columns?: number\n onPlanSelect?: (plan: BillingPlan) => void\n}\n\nconst styles = {\n grid: (columns: number): CSSProperties => ({\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: '24px',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n }),\n skeletonCard: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n } satisfies CSSProperties,\n skeletonLine: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n marginBottom: '12px',\n } satisfies CSSProperties,\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n } satisfies CSSProperties,\n modal: {\n backgroundColor: '#ffffff',\n borderRadius: '16px',\n padding: '32px',\n maxWidth: '480px',\n width: '90%',\n maxHeight: '80vh',\n overflow: 'auto',\n } satisfies CSSProperties,\n modalTitle: {\n margin: '0 0 8px 0',\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n modalSubtitle: {\n margin: '0 0 24px 0',\n fontSize: '14px',\n color: '#6b7280',\n } satisfies CSSProperties,\n bankDetailRow: {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '8px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '14px',\n } satisfies CSSProperties,\n bankDetailLabel: {\n color: '#6b7280',\n fontWeight: 500,\n } satisfies CSSProperties,\n bankDetailValue: {\n color: '#111827',\n fontWeight: 600,\n fontFamily: 'monospace',\n } satisfies CSSProperties,\n instructions: {\n margin: '16px 0',\n padding: '12px 16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n fontSize: '14px',\n color: '#374151',\n lineHeight: '1.5',\n } satisfies CSSProperties,\n closeButton: {\n width: '100%',\n padding: '12px 24px',\n borderRadius: '8px',\n border: '1px solid #d1d5db',\n backgroundColor: '#ffffff',\n color: '#374151',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n marginTop: '16px',\n } satisfies CSSProperties,\n}\n\n/* ------------------------------------------------------------------ */\n/* Provider Selection Modal */\n/* ------------------------------------------------------------------ */\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, string> = {\n STRIPE: 'Credit/Debit Card',\n PAYPAL: 'PayPal',\n PAYPHONE: 'Payphone',\n NUVEI: 'Nuvei',\n MANUAL_TRANSFER: 'Bank Transfer',\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\nfunction ProviderSelectModal({\n providers,\n isPending,\n onSelect,\n onClose,\n}: {\n providers: AvailableProvider[]\n isPending: boolean\n onSelect: (provider: PaymentProviderType) => void\n onClose: () => void\n}) {\n return (\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <h2 style={styles.modalTitle}>Select payment method</h2>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => (\n <button\n key={p.provider}\n type=\"button\"\n onClick={() => onSelect(p.provider)}\n disabled={isPending}\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#fff',\n cursor: isPending ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n fontFamily: 'inherit',\n }}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{PROVIDER_LABELS[p.provider] ?? p.provider}</span>\n </button>\n ))}\n </div>\n <button type=\"button\" style={styles.closeButton} onClick={onClose}>\n Cancel\n </button>\n </div>\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* Manual Transfer Modal */\n/* ------------------------------------------------------------------ */\n\nconst intervalLabels: Record<BillingPlan['interval'], string> = {\n MONTHLY: '/mo',\n YEARLY: '/yr',\n ONE_TIME: '',\n}\n\nfunction TransferModal({ data, onClose }: { data: CheckoutResponse; onClose: () => void }) {\n const bankDetails = data.bankDetails as Record<string, string> | null\n\n return (\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <h2 style={styles.modalTitle}>Manual Transfer</h2>\n <p style={styles.modalSubtitle}>\n Transfer the amount below to subscribe to <strong>{data.plan?.name}</strong>\n </p>\n\n {/* Amount */}\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {data.plan ? formatAmount(data.plan.amount, data.plan.currency) : ''}\n </div>\n <div style={{ fontSize: '14px', color: '#6b7280' }}>\n {data.plan?.interval\n ? (intervalLabels[data.plan.interval as keyof typeof intervalLabels] ?? '')\n : ''}\n </div>\n </div>\n\n {/* Bank Details */}\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div key={key} style={styles.bankDetailRow}>\n <span style={styles.bankDetailLabel}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={styles.bankDetailValue}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Instructions */}\n {data.transferInstructions && (\n <div style={styles.instructions}>{data.transferInstructions}</div>\n )}\n\n <p\n style={{\n fontSize: '13px',\n color: '#9ca3af',\n margin: '12px 0 0 0',\n }}\n >\n After completing the transfer, submit your proof of payment. Your subscription will be\n activated once the transfer is verified.\n </p>\n\n <button type=\"button\" style={styles.closeButton} onClick={onClose}>\n Close\n </button>\n </div>\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* PricingTable */\n/* ------------------------------------------------------------------ */\n\nexport function PricingTable({\n className,\n style,\n successUrl,\n cancelUrl,\n columns = 3,\n onPlanSelect,\n}: PricingTableProps) {\n const { data: plans, isLoading: plansLoading } = usePlans()\n const { data: subscription } = useSubscription()\n const { data: providers } = usePaymentProviders()\n const [transferData, setTransferData] = useState<CheckoutResponse | null>(null)\n const [payphoneData, setPayphoneData] = useState<CheckoutResponse | null>(null)\n const [pendingPlan, setPendingPlan] = useState<BillingPlan | null>(null)\n const [showProviderModal, setShowProviderModal] = useState(false)\n\n const { checkout, isPending: checkoutPending } = useCheckout({\n redirectOnSuccess: true,\n onSuccess: (data) => {\n setShowProviderModal(false)\n setPendingPlan(null)\n if (data.provider === 'MANUAL_TRANSFER') {\n setTransferData(data)\n } else if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setPayphoneData(data)\n }\n },\n })\n\n const doCheckout = (planId: string, provider: PaymentProviderType) => {\n checkout({ planId, provider, successUrl, cancelUrl })\n }\n\n const handleSelect = (plan: BillingPlan) => {\n if (subscription?.planId === plan.id && subscription.status === 'ACTIVE') return\n\n if (onPlanSelect) {\n onPlanSelect(plan)\n return\n }\n\n // If multiple providers, show selection modal\n if (providers && providers.length > 1) {\n setPendingPlan(plan)\n setShowProviderModal(true)\n return\n }\n\n // Single provider — checkout directly\n const provider = providers?.[0]?.provider\n checkout({ planId: plan.id, provider, successUrl, cancelUrl })\n }\n\n if (plansLoading) {\n return (\n <div className={className} style={{ ...styles.grid(columns), ...style }}>\n {Array.from({ length: columns }).map((_, i) => (\n <div key={i} style={styles.skeletonCard}>\n <div\n style={{\n ...styles.skeletonLine,\n width: '60%',\n height: '20px',\n }}\n />\n <div\n style={{\n ...styles.skeletonLine,\n width: '80%',\n height: '14px',\n }}\n />\n <div\n style={{\n ...styles.skeletonLine,\n width: '40%',\n height: '36px',\n marginTop: '8px',\n }}\n />\n <div style={{ marginTop: '16px' }}>\n {[1, 2, 3].map((j) => (\n <div\n key={j}\n style={{\n ...styles.skeletonLine,\n width: '90%',\n height: '14px',\n }}\n />\n ))}\n </div>\n <div\n style={{\n ...styles.skeletonLine,\n width: '100%',\n height: '44px',\n marginTop: '16px',\n }}\n />\n </div>\n ))}\n </div>\n )\n }\n\n const sortedPlans = plans ? [...plans].sort((a, b) => a.sortOrder - b.sortOrder) : []\n\n return (\n <>\n <div className={className} style={{ ...styles.grid(columns), ...style }}>\n {sortedPlans.map((plan) => {\n const isCurrentPlan = subscription?.planId === plan.id && subscription.status === 'ACTIVE'\n\n return (\n <PricingCard\n key={plan.id}\n plan={plan}\n isCurrentPlan={isCurrentPlan}\n isCheckoutPending={checkoutPending}\n onSelect={handleSelect}\n />\n )\n })}\n </div>\n\n {showProviderModal && pendingPlan && providers && providers.length > 1 && (\n <ProviderSelectModal\n providers={providers}\n isPending={checkoutPending}\n onSelect={(provider) => doCheckout(pendingPlan.id, provider)}\n onClose={() => {\n setShowProviderModal(false)\n setPendingPlan(null)\n }}\n />\n )}\n\n {transferData && <TransferModal data={transferData} onClose={() => setTransferData(null)} />}\n\n {payphoneData?.widgetConfig && (\n <PayphoneModal\n config={payphoneData.widgetConfig}\n onClose={() => setPayphoneData(null)}\n />\n )}\n </>\n )\n}\n\nPricingTable.displayName = 'PricingTable'\n","import type { CSSProperties, ReactNode } from 'react'\nimport { useCheckout } from '../hooks/use-checkout'\n\nexport interface CheckoutButtonProps {\n planId: string\n successUrl: string\n cancelUrl: string\n className?: string\n style?: CSSProperties\n children?: ReactNode\n}\n\nconst defaultStyle: CSSProperties = {\n padding: '12px 24px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n}\n\nexport function CheckoutButton({\n planId,\n successUrl,\n cancelUrl,\n className,\n style,\n children,\n}: CheckoutButtonProps) {\n const { checkout, isPending } = useCheckout({ redirectOnSuccess: true })\n\n return (\n <button\n type=\"button\"\n className={className}\n style={{\n ...defaultStyle,\n ...style,\n ...(isPending ? { opacity: 0.6, cursor: 'not-allowed' } : {}),\n }}\n disabled={isPending}\n onClick={() => checkout({ planId, successUrl, cancelUrl })}\n >\n {isPending ? 'Loading...' : (children ?? 'Subscribe')}\n </button>\n )\n}\n\nCheckoutButton.displayName = 'CheckoutButton'\n","import { useMutation } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface PayphoneConfirmParams {\n id: number\n clientTransactionId: string\n}\n\nexport interface PayphoneConfirmResult {\n status: 'confirmed' | 'cancelled' | 'already_confirmed'\n intentId: string\n}\n\nexport interface UsePayphoneConfirmOptions {\n onSuccess?: (data: PayphoneConfirmResult) => void\n onError?: (error: Error) => void\n}\n\nexport function usePayphoneConfirm(options?: UsePayphoneConfirmOptions) {\n const client = useAccessClient()\n\n return useMutation({\n mutationFn: (params: PayphoneConfirmParams) =>\n client.post<PayphoneConfirmResult>(client.paths.payphoneConfirm, params),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { usePaymentProviders } from './use-payment-providers'\nimport { usePayphoneConfirm } from './use-payphone-confirm'\nimport type { PayphoneConfirmResult } from './use-payphone-confirm'\nimport { PayphoneWidgetRenderer } from '../components/payphone-checkout'\nimport { useAzirid } from '../providers/access-provider'\nimport { formatAmount } from '@azirid/shared'\nimport type {\n AvailableProvider,\n CheckoutResponse,\n PaymentProviderType,\n PayphoneWidgetConfig,\n} from '../types'\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type PayButtonStatus =\n | 'idle'\n | 'loading_providers'\n | 'ready'\n | 'processing'\n | 'redirecting'\n | 'success'\n | 'error'\n\nexport interface UsePayButtonOptions {\n intentId?: string\n planId?: string\n branchId?: string\n merchantAccountId?: string\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n}\n\nexport interface UsePayButtonReturn {\n providers: AvailableProvider[]\n checkout: (provider: PaymentProviderType) => void\n ProviderSelector: () => ReactElement | null\n TransferDetails: () => ReactElement | null\n PayphoneWidget: () => ReactElement | null\n status: PayButtonStatus\n selectedProvider: PaymentProviderType | null\n checkoutData: CheckoutResponse | null\n isPending: boolean\n error: Error | null\n}\n\n// ─── Provider display config ────────────────────────────────\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, string> = {\n STRIPE: 'Credit/Debit Card',\n PAYPAL: 'PayPal',\n PAYPHONE: 'Payphone',\n NUVEI: 'Nuvei',\n MANUAL_TRANSFER: 'Bank Transfer',\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\nconst PP_CONTAINER_ID = 'pp-paybtn-azirid'\n\n// ─── Hook ───────────────────────────────────────────────────\n\nexport function usePayButton({\n intentId,\n planId,\n branchId,\n merchantAccountId,\n onSuccess,\n onError,\n}: UsePayButtonOptions): UsePayButtonReturn {\n const [status, setStatus] = useState<PayButtonStatus>('idle')\n const [selectedProvider, setSelectedProvider] = useState<PaymentProviderType | null>(null)\n const [checkoutData, setCheckoutData] = useState<CheckoutResponse | null>(null)\n const [payphoneConfig, setPayphoneConfig] = useState<PayphoneWidgetConfig | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const payphoneConfirmTriggered = useRef(false)\n const { isBootstrapping } = useAzirid()\n\n // Detect Payphone callback params\n const params =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams()\n const callbackId = params.get('id')\n const callbackClientTxId = params.get('clientTransactionId')\n const isPayphoneCallback = !!(callbackId && callbackClientTxId)\n\n // ── Load providers ─────────────────────────────────────────\n const {\n data: providerList,\n isLoading: providersLoading,\n } = usePaymentProviders()\n\n const providers = providerList ?? []\n\n useEffect(() => {\n if (isPayphoneCallback) return\n if (providersLoading) {\n setStatus('loading_providers')\n } else if (providers.length > 0 && status === 'loading_providers') {\n setStatus('ready')\n }\n }, [providersLoading, providers.length, status, isPayphoneCallback])\n\n // ── Checkout ───────────────────────────────────────────────\n const { checkout: doCheckout, isPending } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n setCheckoutData(data)\n\n if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setPayphoneConfig(data.widgetConfig)\n setStatus('processing')\n return\n }\n\n if (data.provider === 'MANUAL_TRANSFER') {\n setStatus('success')\n onSuccess?.(data)\n return\n }\n\n // Redirect-based providers (Stripe, PayPal, Nuvei)\n if (data.url) {\n setStatus('redirecting')\n window.location.href = data.url\n return\n }\n\n setStatus('success')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n const checkout = useCallback(\n (provider: PaymentProviderType) => {\n setSelectedProvider(provider)\n setStatus('processing')\n setCurrentError(null)\n\n const currentUrl =\n typeof window !== 'undefined' ? window.location.href.split('?')[0] : ''\n\n doCheckout({\n intentId,\n planId,\n branchId,\n merchantAccountId,\n provider,\n successUrl: currentUrl,\n cancelUrl: currentUrl,\n })\n },\n [doCheckout, intentId, planId, branchId, merchantAccountId],\n )\n\n // ── Payphone confirmation ──────────────────────────────────\n const { mutate: confirmPayphone } = usePayphoneConfirm({\n onSuccess: (data: PayphoneConfirmResult) => {\n const isConfirmed = data.status === 'confirmed' || data.status === 'already_confirmed'\n setStatus(isConfirmed ? 'success' : 'error')\n\n const response: CheckoutResponse = {\n provider: 'PAYPHONE',\n ...(checkoutData ?? {}),\n }\n if (isConfirmed) {\n onSuccess?.(response)\n } else {\n onError?.(new Error('Payment was cancelled'))\n }\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (!isPayphoneCallback || payphoneConfirmTriggered.current || isBootstrapping) return\n payphoneConfirmTriggered.current = true\n setSelectedProvider('PAYPHONE')\n setStatus('processing')\n confirmPayphone({ id: Number(callbackId), clientTransactionId: callbackClientTxId! })\n }, [isPayphoneCallback, isBootstrapping, callbackId, callbackClientTxId, confirmPayphone])\n\n // ── SDK error handler ──────────────────────────────────────\n const handleSdkError = useCallback(\n (err: Error) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n [onError],\n )\n\n // ── ProviderSelector component ─────────────────────────────\n const ProviderSelector = useMemo(() => {\n return function ProviderSelectorInner() {\n if (providers.length === 0 || isPayphoneCallback) return null\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => (\n <button\n key={p.provider}\n type=\"button\"\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: selectedProvider === p.provider ? '#f3f4f6' : '#fff',\n cursor: isPending ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n fontFamily: 'inherit',\n }}\n onClick={() => checkout(p.provider)}\n disabled={isPending}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{PROVIDER_LABELS[p.provider]}</span>\n </button>\n ))}\n </div>\n )\n }\n }, [providers, selectedProvider, isPending, checkout, isPayphoneCallback])\n\n // ── TransferDetails component ──────────────────────────────\n const TransferDetails = useMemo(() => {\n return function TransferDetailsInner() {\n if (!checkoutData || checkoutData.provider !== 'MANUAL_TRANSFER') return null\n\n const bankDetails = checkoutData.bankDetails as Record<string, string> | null\n const plan = checkoutData.plan\n const intent = (checkoutData as any).intent as\n | { id: string; amount: number; currency: string; description?: string }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div>\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>\n )}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {checkoutData.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n }}\n >\n {checkoutData.transferInstructions}\n </div>\n )}\n </div>\n )\n }\n }, [checkoutData])\n\n // ── PayphoneWidget component ───────────────────────────────\n const PayphoneWidget = useMemo(() => {\n return function PayphoneWidgetInner() {\n if (!payphoneConfig || isPayphoneCallback) return null\n\n return PayphoneWidgetRenderer({\n config: payphoneConfig,\n containerId: PP_CONTAINER_ID,\n onError: handleSdkError,\n })\n }\n }, [payphoneConfig, isPayphoneCallback, handleSdkError])\n\n return {\n providers,\n checkout,\n ProviderSelector,\n TransferDetails,\n PayphoneWidget,\n status,\n selectedProvider,\n checkoutData,\n isPending,\n error: currentError,\n }\n}\n","import { useCallback, useMemo, useState } from 'react'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { UploadTransferProofResponse } from '../types'\n\nexport interface UseUploadTransferProofOptions {\n onSuccess?: (result: UploadTransferProofResponse) => void\n onError?: (error: Error) => void\n}\n\nexport interface UseUploadTransferProofReturn {\n upload: (file: File) => Promise<UploadTransferProofResponse>\n isUploading: boolean\n publicUrl: string | null\n error: Error | null\n reset: () => void\n}\n\nexport function useUploadTransferProof(\n options?: UseUploadTransferProofOptions,\n): UseUploadTransferProofReturn {\n const client = useAccessClient()\n const [isUploading, setIsUploading] = useState(false)\n const [publicUrl, setPublicUrl] = useState<string | null>(null)\n const [error, setError] = useState<Error | null>(null)\n\n const upload = useCallback(\n async (file: File): Promise<UploadTransferProofResponse> => {\n setIsUploading(true)\n setError(null)\n\n try {\n // 1. Request presigned URL from API\n const presigned = await client.post<UploadTransferProofResponse>(\n client.paths.uploadTransferProof,\n {\n contentType: file.type,\n fileSize: file.size,\n },\n )\n\n // 2. Upload file directly to S3\n const uploadRes = await fetch(presigned.uploadUrl, {\n method: 'PUT',\n headers: { 'Content-Type': file.type },\n body: file,\n })\n\n if (!uploadRes.ok) {\n throw new Error(`Upload failed: ${uploadRes.status}`)\n }\n\n setPublicUrl(presigned.publicUrl)\n options?.onSuccess?.(presigned)\n return presigned\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Upload failed')\n setError(error)\n options?.onError?.(error)\n throw error\n } finally {\n setIsUploading(false)\n }\n },\n [client, options],\n )\n\n const reset = useCallback(() => {\n setPublicUrl(null)\n setError(null)\n setIsUploading(false)\n }, [])\n\n return useMemo(\n () => ({ upload, isUploading, publicUrl, error, reset }),\n [upload, isUploading, publicUrl, error, reset],\n )\n}\n","import { useCallback, useMemo } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { SubmitTransferProofData, TransferProof } from '../types'\n\nexport interface UseTransferProofOptions {\n onSuccess?: (data: TransferProof) => void\n onError?: (error: Error) => void\n}\n\nexport function useSubmitTransferProof(options?: UseTransferProofOptions) {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const mutation = useMutation({\n mutationFn: (data: SubmitTransferProofData) =>\n client.post<TransferProof>(client.paths.submitTransferProof, data),\n onSuccess: (data) => {\n void queryClient.invalidateQueries({ queryKey: ['transferProofs'] })\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const submit = useCallback(\n (data: SubmitTransferProofData) => {\n mutation.mutate(data)\n },\n [mutation],\n )\n\n return useMemo(() => ({ ...mutation, submit }), [mutation, submit])\n}\n\nexport function useTransferProofs() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['transferProofs'],\n queryFn: () => client.get<TransferProof[]>(client.paths.transferProofs),\n })\n}\n","import { useRef, useState, type CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { useUploadTransferProof } from '../hooks/use-upload-transfer-proof'\nimport { useSubmitTransferProof } from '../hooks/use-transfer-proof'\nimport type {\n AvailableProvider,\n CheckoutResponse,\n PaymentProviderType,\n TransferProof,\n} from '../types'\n\n// ─── Constants ───────────────────────────────────────────────\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, { en: string; es: string }> = {\n STRIPE: { en: 'Credit/Debit Card', es: 'Tarjeta de crédito/débito' },\n PAYPAL: { en: 'PayPal', es: 'PayPal' },\n PAYPHONE: { en: 'Payphone', es: 'Payphone' },\n NUVEI: { en: 'Nuvei', es: 'Nuvei' },\n MANUAL_TRANSFER: { en: 'Bank Transfer', es: 'Transferencia bancaria' },\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\n// ─── Styles ──────────────────────────────────────────────────\n\nconst modalStyles: Record<string, CSSProperties> = {\n overlay: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n card: {\n backgroundColor: '#fff',\n borderRadius: '12px',\n padding: '24px',\n maxWidth: '420px',\n width: '90%',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n },\n title: {\n fontSize: '18px',\n fontWeight: 700,\n color: '#111827',\n margin: '0 0 20px 0',\n textAlign: 'center',\n },\n providerButton: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#fff',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n transition: 'background-color 0.15s',\n fontFamily: 'inherit',\n },\n cancelButton: {\n display: 'block',\n width: '100%',\n marginTop: '16px',\n padding: '10px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n fontFamily: 'inherit',\n },\n}\n\n// ─── ProviderModal ───────────────────────────────────────────\n\nexport interface ProviderModalProps {\n providers: AvailableProvider[]\n isPending: boolean\n onSelect: (provider: PaymentProviderType) => void\n onClose: () => void\n labels?: Record<string, string>\n}\n\nexport function ProviderModal({\n providers,\n isPending,\n onSelect,\n onClose,\n labels,\n}: ProviderModalProps) {\n return (\n <div style={modalStyles.overlay} onClick={onClose}>\n <div style={modalStyles.card} onClick={(e) => e.stopPropagation()}>\n <h2 style={modalStyles.title}>{labels?.selectPaymentMethod ?? 'Select payment method'}</h2>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => {\n const label = PROVIDER_LABELS[p.provider]\n return (\n <button\n key={p.provider}\n type=\"button\"\n style={modalStyles.providerButton}\n onClick={() => onSelect(p.provider)}\n disabled={isPending}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{label?.en ?? p.provider}</span>\n </button>\n )\n })}\n </div>\n\n <button type=\"button\" style={modalStyles.cancelButton} onClick={onClose}>\n {labels?.cancel ?? 'Cancel'}\n </button>\n </div>\n </div>\n )\n}\n\n// ─── TransferModal ───────────────────────────────────────────\n\nexport interface TransferModalProps {\n data: CheckoutResponse\n onClose: () => void\n onProofSubmitted?: (proof: TransferProof) => void\n labels?: Record<string, string>\n}\n\ntype TransferStep = 'details' | 'uploading' | 'submitting' | 'submitted' | 'error'\n\nconst ACCEPTED_FILE_TYPES = 'image/png,image/jpeg,image/webp,application/pdf'\nconst MAX_FILE_SIZE_MB = 10\n\nexport function TransferModal({ data, onClose, onProofSubmitted, labels }: TransferModalProps) {\n const bankDetails = data.bankDetails as Record<string, string> | null\n const plan = data.plan\n const intent = (data as any).intent as\n | { id: string; amount: number; currency: string; description?: string }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n const amount = plan?.amount ?? intent?.amount ?? 0\n const currency = plan?.currency ?? intent?.currency ?? 'USD'\n const intentId = intent?.id\n\n const [step, setStep] = useState<TransferStep>('details')\n const [selectedFile, setSelectedFile] = useState<File | null>(null)\n const [previewUrl, setPreviewUrl] = useState<string | null>(null)\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const { upload, isUploading } = useUploadTransferProof({\n onError: (err) => {\n setErrorMessage(err.message)\n setStep('error')\n },\n })\n\n const { submit, isPending: isSubmitting } = useSubmitTransferProof({\n onSuccess: (proof) => {\n setStep('submitted')\n onProofSubmitted?.(proof)\n },\n onError: (err) => {\n setErrorMessage(err.message)\n setStep('error')\n },\n })\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (!file) return\n\n if (file.size > MAX_FILE_SIZE_MB * 1024 * 1024) {\n setErrorMessage(`File size exceeds ${MAX_FILE_SIZE_MB}MB limit`)\n return\n }\n\n setSelectedFile(file)\n setErrorMessage(null)\n\n if (file.type.startsWith('image/')) {\n const url = URL.createObjectURL(file)\n setPreviewUrl(url)\n } else {\n setPreviewUrl(null)\n }\n }\n\n const handleSubmit = async () => {\n if (!selectedFile) return\n\n try {\n setStep('uploading')\n const result = await upload(selectedFile)\n\n setStep('submitting')\n submit({\n intentId,\n fileUrl: result.publicUrl,\n fileName: selectedFile.name,\n fileType: selectedFile.type,\n amount,\n currency,\n })\n } catch {\n // Error already handled by onError callbacks\n }\n }\n\n const handleRetry = () => {\n setStep('details')\n setErrorMessage(null)\n }\n\n const isProcessing = isUploading || isSubmitting\n\n return (\n <div style={modalStyles.overlay} onClick={isProcessing ? undefined : onClose}>\n <div\n style={{ ...modalStyles.card, maxHeight: '90vh', overflowY: 'auto' }}\n onClick={(e) => e.stopPropagation()}\n >\n <h2 style={modalStyles.title}>{labels?.bankTransfer ?? 'Bank Transfer'}</h2>\n\n {/* Amount display */}\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {/* Bank details */}\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n {labels?.bankDetails ?? 'Bank Details'}\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Transfer instructions */}\n {data.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n marginBottom: '16px',\n }}\n >\n {data.transferInstructions}\n </div>\n )}\n\n {/* ── Upload section ────────────────────────────────────── */}\n {step === 'submitted' ? (\n <div\n style={{\n textAlign: 'center',\n padding: '20px',\n backgroundColor: '#f0fdf4',\n borderRadius: '8px',\n marginBottom: '16px',\n }}\n >\n <div style={{ fontSize: '32px', marginBottom: '8px' }}>{'\\u2705'}</div>\n <div style={{ fontSize: '16px', fontWeight: 600, color: '#166534' }}>\n {labels?.proofSubmitted ?? 'Proof submitted successfully'}\n </div>\n <p style={{ fontSize: '13px', color: '#15803d', margin: '8px 0 0 0' }}>\n {labels?.proofPendingReview ??\n 'Your payment proof is under review. You will be notified once it is verified.'}\n </p>\n </div>\n ) : (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n {labels?.uploadProof ?? 'Upload proof of payment'}\n </div>\n\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={ACCEPTED_FILE_TYPES}\n style={{ display: 'none' }}\n onChange={handleFileSelect}\n />\n\n {/* Drop zone / file selector */}\n {!selectedFile ? (\n <button\n type=\"button\"\n style={{\n width: '100%',\n padding: '24px 16px',\n border: '2px dashed #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#fafafa',\n cursor: 'pointer',\n textAlign: 'center',\n fontFamily: 'inherit',\n }}\n onClick={() => fileInputRef.current?.click()}\n >\n <div style={{ fontSize: '28px', marginBottom: '8px' }}>{'\\uD83D\\uDCC4'}</div>\n <div style={{ fontSize: '14px', color: '#374151', fontWeight: 500 }}>\n {labels?.selectFile ?? 'Click to select file'}\n </div>\n <div style={{ fontSize: '12px', color: '#9ca3af', marginTop: '4px' }}>\n {labels?.acceptedFormats ?? 'PNG, JPG, WebP or PDF (max 10MB)'}\n </div>\n </button>\n ) : (\n <div\n style={{\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '12px',\n backgroundColor: '#fafafa',\n }}\n >\n {/* Image preview */}\n {previewUrl && (\n <img\n src={previewUrl}\n alt=\"Transfer proof preview\"\n style={{\n width: '100%',\n maxHeight: '200px',\n objectFit: 'contain',\n borderRadius: '6px',\n marginBottom: '8px',\n }}\n />\n )}\n\n {/* PDF indicator */}\n {selectedFile.type === 'application/pdf' && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px',\n backgroundColor: '#fef2f2',\n borderRadius: '6px',\n marginBottom: '8px',\n }}\n >\n <span style={{ fontSize: '24px' }}>{'\\uD83D\\uDCC4'}</span>\n <span\n style={{\n fontSize: '13px',\n color: '#991b1b',\n fontWeight: 500,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {selectedFile.name}\n </span>\n </div>\n )}\n\n {/* File info + change button */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span style={{ fontSize: '12px', color: '#6b7280' }}>\n {selectedFile.name} ({(selectedFile.size / 1024 / 1024).toFixed(2)} MB)\n </span>\n <button\n type=\"button\"\n style={{\n fontSize: '12px',\n color: '#3b82f6',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n padding: 0,\n }}\n onClick={() => {\n setSelectedFile(null)\n setPreviewUrl(null)\n if (fileInputRef.current) fileInputRef.current.value = ''\n }}\n disabled={isProcessing}\n >\n {labels?.changeFile ?? 'Change'}\n </button>\n </div>\n </div>\n )}\n\n {/* Error message */}\n {errorMessage && (\n <div\n style={{\n marginTop: '8px',\n padding: '8px 12px',\n backgroundColor: '#fef2f2',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#dc2626',\n }}\n >\n {errorMessage}\n </div>\n )}\n\n {/* Submit button */}\n <button\n type=\"button\"\n style={{\n display: 'block',\n width: '100%',\n marginTop: '12px',\n padding: '12px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor:\n !selectedFile || isProcessing ? '#d1d5db' : '#111827',\n color: '#fff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: !selectedFile || isProcessing ? 'not-allowed' : 'pointer',\n fontFamily: 'inherit',\n }}\n onClick={handleSubmit}\n disabled={!selectedFile || isProcessing}\n >\n {isUploading\n ? (labels?.uploading ?? 'Uploading...')\n : isSubmitting\n ? (labels?.submitting ?? 'Submitting...')\n : step === 'error'\n ? (labels?.retry ?? 'Retry')\n : (labels?.submitProof ?? 'Submit proof of payment')}\n </button>\n\n {step === 'error' && (\n <button\n type=\"button\"\n style={{\n ...modalStyles.cancelButton,\n marginTop: '8px',\n }}\n onClick={handleRetry}\n >\n {labels?.tryAgain ?? 'Try again'}\n </button>\n )}\n </div>\n )}\n\n <button\n type=\"button\"\n style={modalStyles.cancelButton}\n onClick={onClose}\n disabled={isProcessing}\n >\n {step === 'submitted' ? (labels?.done ?? 'Done') : (labels?.cancel ?? 'Cancel')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState, type CSSProperties, type ReactNode } from 'react'\nimport { usePayButton } from '../hooks/use-pay-button'\nimport { useMessages } from '../providers/access-provider'\nimport { PayphoneModal } from './payphone-modal'\nimport { ProviderModal, TransferModal } from './pay-button-modal'\nimport type { CheckoutResponse, PaymentProviderType, TransferProof } from '../types'\n\nexport interface PayButtonProps {\n planId?: string\n intentId?: string\n branchId?: string\n merchantAccountId?: string\n successUrl: string\n cancelUrl: string\n className?: string\n style?: CSSProperties\n children?: ReactNode\n disabled?: boolean\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n onProviderSelect?: (provider: PaymentProviderType) => void\n onProofSubmitted?: (proof: TransferProof) => void\n}\n\nexport function PayButton({\n planId,\n intentId,\n branchId,\n merchantAccountId,\n successUrl,\n cancelUrl,\n className,\n style,\n children,\n disabled,\n onSuccess,\n onError,\n onProviderSelect,\n onProofSubmitted,\n}: PayButtonProps) {\n const messages = useMessages()\n const billing = (messages as any)?.billing\n const [showProviderModal, setShowProviderModal] = useState(false)\n const [showTransferModal, setShowTransferModal] = useState(false)\n\n const {\n providers,\n checkout,\n checkoutData,\n PayphoneWidget,\n isPending,\n status,\n } = usePayButton({\n intentId,\n planId,\n branchId,\n merchantAccountId,\n onSuccess: (data) => {\n if (data.provider === 'MANUAL_TRANSFER') {\n setShowTransferModal(true)\n setShowProviderModal(false)\n return\n }\n if (data.provider === 'PAYPHONE') {\n setShowProviderModal(false)\n return\n }\n onSuccess?.(data)\n },\n onError,\n })\n\n const handleClick = () => {\n if (!providers || providers.length === 0) return\n\n if (providers.length === 1) {\n doCheckout(providers[0].provider)\n } else {\n setShowProviderModal(true)\n }\n }\n\n const doCheckout = (provider: PaymentProviderType) => {\n onProviderSelect?.(provider)\n checkout(provider)\n }\n\n const isDisabled = disabled || isPending || status === 'loading_providers' || (!planId && !intentId)\n\n return (\n <>\n <button\n type=\"button\"\n className={className}\n style={{\n padding: '10px 24px',\n fontSize: '14px',\n fontWeight: 600,\n color: '#fff',\n backgroundColor: isDisabled ? '#9ca3af' : '#111827',\n border: 'none',\n borderRadius: '8px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n ...style,\n }}\n onClick={handleClick}\n disabled={isDisabled}\n >\n {isPending ? (billing?.processing ?? 'Processing...') : (children ?? billing?.pay ?? 'Pay')}\n </button>\n\n {/* Provider Selection Modal */}\n {showProviderModal && providers && providers.length > 1 && (\n <ProviderModal\n providers={providers}\n isPending={isPending}\n onSelect={doCheckout}\n onClose={() => setShowProviderModal(false)}\n labels={billing}\n />\n )}\n\n {/* Transfer Details Modal */}\n {showTransferModal && checkoutData && checkoutData.provider === 'MANUAL_TRANSFER' && (\n <TransferModal\n data={checkoutData}\n onClose={() => {\n setShowTransferModal(false)\n onSuccess?.(checkoutData)\n }}\n onProofSubmitted={onProofSubmitted}\n labels={billing}\n />\n )}\n\n {/* Payphone Widget Modal */}\n {status === 'processing' && checkoutData?.provider === 'PAYPHONE' && checkoutData.widgetConfig && (\n <PayphoneModal\n config={checkoutData.widgetConfig}\n onClose={() => {\n onSuccess?.(checkoutData)\n }}\n />\n )}\n </>\n )\n}\n","import { useEffect, useRef, type CSSProperties } from 'react'\nimport { usePayphoneConfirm } from '../hooks/use-payphone-confirm'\nimport { useAzirid } from '../providers/access-provider'\n\nexport interface PayphoneCallbackProps {\n onSuccess?: (data: { status: string; intentId: string }) => void\n onError?: (error: Error) => void\n className?: string\n style?: CSSProperties\n}\n\nexport function PayphoneCallback({ onSuccess, onError, className, style }: PayphoneCallbackProps) {\n const { mutate, isPending, isSuccess, isError, error, data } = usePayphoneConfirm({\n onSuccess,\n onError,\n })\n\n const { isBootstrapping } = useAzirid()\n const called = useRef(false)\n\n useEffect(() => {\n if (called.current || isBootstrapping) return\n called.current = true\n\n const params = new URLSearchParams(window.location.search)\n const id = params.get('id')\n const clientTransactionId = params.get('clientTransactionId')\n\n if (!id || !clientTransactionId) return\n\n mutate({ id: Number(id), clientTransactionId })\n }, [mutate, isBootstrapping])\n\n return (\n <div className={className} style={{ textAlign: 'center', padding: '32px', ...style }}>\n {isPending && (\n <div>\n <p style={textStyle}>Confirming your payment...</p>\n <p style={subtextStyle}>Please do not close this page.</p>\n </div>\n )}\n\n {isSuccess && data && (\n <div>\n {data.status === 'confirmed' || data.status === 'already_confirmed' ? (\n <>\n <p style={{ ...textStyle, color: '#059669' }}>Payment confirmed!</p>\n <p style={subtextStyle}>Your payment has been processed successfully.</p>\n </>\n ) : (\n <>\n <p style={{ ...textStyle, color: '#d97706' }}>Payment was cancelled</p>\n <p style={subtextStyle}>The transaction was not completed.</p>\n </>\n )}\n </div>\n )}\n\n {isError && (\n <div>\n <p style={{ ...textStyle, color: '#dc2626' }}>Payment confirmation failed</p>\n <p style={subtextStyle}>{error?.message ?? 'An error occurred'}</p>\n </div>\n )}\n </div>\n )\n}\n\nconst textStyle: CSSProperties = {\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n margin: '0 0 8px 0',\n}\n\nconst subtextStyle: CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n margin: 0,\n}\n","'use client'\n\nimport { useEffect, useRef, useState, type CSSProperties } from 'react'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface HandoffCallbackProps {\n onSuccess?: (user: unknown) => void\n onError?: (error: Error) => void\n loadingText?: string\n errorText?: string\n}\n\nexport function HandoffCallback({\n onSuccess,\n onError,\n loadingText = 'Signing you in...',\n errorText = 'Failed to complete sign-in. The link may have expired.',\n}: HandoffCallbackProps) {\n const client = useAccessClient()\n const [status, setStatus] = useState<'loading' | 'error'>('loading')\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const attempted = useRef(false)\n\n useEffect(() => {\n if (attempted.current) return\n attempted.current = true\n\n const params = new URLSearchParams(window.location.search)\n const code = params.get('code')\n\n if (!code) {\n setStatus('error')\n setErrorMessage('No handoff code provided')\n onError?.(new Error('No handoff code provided'))\n return\n }\n\n client\n .exchangeHandoff(code)\n .then((result) => {\n onSuccess?.(result.user)\n })\n .catch((err: unknown) => {\n setStatus('error')\n const error = err instanceof Error ? err : new Error('Handoff exchange failed')\n setErrorMessage(error.message)\n onError?.(error)\n })\n }, [client, onSuccess, onError])\n\n if (status === 'error') {\n return (\n <div style={wrapperStyle}>\n <p style={{ ...messageStyle, color: '#ef4444' }}>{errorMessage || errorText}</p>\n </div>\n )\n }\n\n return (\n <div style={wrapperStyle}>\n <p style={messageStyle}>{loadingText}</p>\n </div>\n )\n}\n\nconst wrapperStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '50vh',\n gap: '8px',\n}\n\nconst messageStyle: CSSProperties = {\n color: '#888',\n fontSize: '14px',\n}\n","import type { CSSProperties } from 'react'\nimport { useSubscription } from '../hooks/use-subscription'\nimport type { UserSubscription } from '../types'\n\nexport interface SubscriptionBadgeProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusConfig: Record<\n UserSubscription['status'],\n { bg: string; color: string; label: string }\n> = {\n ACTIVE: { bg: '#d1fae5', color: '#065f46', label: 'Active' },\n TRIALING: { bg: '#dbeafe', color: '#1e40af', label: 'Trial' },\n PAST_DUE: { bg: '#fef3c7', color: '#92400e', label: 'Past Due' },\n CANCELED: { bg: '#fee2e2', color: '#991b1b', label: 'Canceled' },\n UNPAID: { bg: '#fee2e2', color: '#991b1b', label: 'Unpaid' },\n INCOMPLETE: { bg: '#f3f4f6', color: '#6b7280', label: 'Incomplete' },\n}\n\nconst styles = {\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '9999px',\n fontSize: '13px',\n fontWeight: 500,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n dot: (color: string): CSSProperties => ({\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: color,\n flexShrink: 0,\n }),\n skeleton: {\n display: 'inline-block',\n width: '120px',\n height: '32px',\n borderRadius: '9999px',\n backgroundColor: '#f3f4f6',\n } satisfies CSSProperties,\n}\n\nexport function SubscriptionBadge({ className, style }: SubscriptionBadgeProps) {\n const { data: subscription, isLoading } = useSubscription()\n\n if (isLoading) {\n return <span className={className} style={{ ...styles.skeleton, ...style }} />\n }\n\n if (!subscription) {\n return (\n <span\n className={className}\n style={{\n ...styles.badge,\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n ...style,\n }}\n >\n No Plan\n </span>\n )\n }\n\n const config = statusConfig[subscription.status]\n\n return (\n <span\n className={className}\n style={{\n ...styles.badge,\n backgroundColor: config.bg,\n color: config.color,\n ...style,\n }}\n >\n <span style={styles.dot(config.color)} aria-hidden=\"true\" />\n {subscription.plan.name} &middot; {config.label}\n </span>\n )\n}\n\nSubscriptionBadge.displayName = 'SubscriptionBadge'\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BillingInvoice } from '../types'\n\nexport function useInvoices() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'invoices'],\n queryFn: () => client.get<BillingInvoice[]>(client.paths.invoices),\n enabled: !!client.getAccessToken(),\n })\n}\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { useInvoices } from '../hooks/use-invoices'\nimport type { BillingInvoice } from '../types'\n\nexport interface InvoiceListProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusColors: Record<BillingInvoice['status'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n PAID: { bg: '#d1fae5', color: '#065f46' },\n FAILED: { bg: '#fee2e2', color: '#991b1b' },\n REFUNDED: { bg: '#f3f4f6', color: '#6b7280' },\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nconst styles = {\n container: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n header: {\n padding: '16px 24px',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n title: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n fontSize: '14px',\n } satisfies CSSProperties,\n th: {\n padding: '12px 24px',\n textAlign: 'left' as const,\n fontSize: '12px',\n fontWeight: 500,\n color: '#6b7280',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: '#f9fafb',\n } satisfies CSSProperties,\n td: {\n padding: '12px 24px',\n borderBottom: '1px solid #f3f4f6',\n color: '#374151',\n } satisfies CSSProperties,\n badge: (bg: string, color: string): CSSProperties => ({\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: bg,\n color,\n }),\n link: {\n color: '#6366f1',\n textDecoration: 'none',\n fontWeight: 500,\n fontSize: '13px',\n } satisfies CSSProperties,\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n height: '14px',\n } satisfies CSSProperties,\n emptyRow: {\n padding: '24px',\n textAlign: 'center' as const,\n color: '#9ca3af',\n fontSize: '14px',\n } satisfies CSSProperties,\n}\n\nexport function InvoiceList({ className, style }: InvoiceListProps) {\n const { data: invoices, isLoading } = useInvoices()\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <div style={{ ...styles.skeleton, width: '100px', height: '18px' }} />\n </div>\n <div style={{ padding: '24px' }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{ ...styles.skeleton, width: '100%', height: '16px', marginBottom: '16px' }}\n />\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <h3 style={styles.title}>Invoices</h3>\n </div>\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>Date</th>\n <th style={styles.th}>Amount</th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Invoice</th>\n </tr>\n </thead>\n <tbody>\n {(!invoices || invoices.length === 0) && (\n <tr>\n <td colSpan={4} style={styles.emptyRow}>\n No invoices yet.\n </td>\n </tr>\n )}\n {invoices?.map((invoice) => {\n const sc = statusColors[invoice.status]\n return (\n <tr key={invoice.id}>\n <td style={styles.td}>{formatDate(invoice.createdAt)}</td>\n <td style={styles.td}>{formatAmount(invoice.amount, invoice.currency)}</td>\n <td style={styles.td}>\n <span style={styles.badge(sc.bg, sc.color)}>{invoice.status}</span>\n </td>\n <td style={styles.td}>\n {invoice.invoiceUrl ? (\n <a\n href={invoice.invoiceUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={styles.link}\n >\n View\n </a>\n ) : (\n <span style={{ color: '#d1d5db' }}>&mdash;</span>\n )}\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n\nInvoiceList.displayName = 'InvoiceList'\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface LoginData {\n email: string\n password: string\n}\n\nexport interface UseLoginOptions {\n /** Callback after successful login */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on login error */\n onError?: (error: Error) => void\n}\n\nexport type UseLoginReturn = UseMutationResult<AuthSuccessResponse, Error, LoginData> & {\n /** Convenience: call mutate() with consumer callbacks */\n login: (data: LoginData) => void\n}\n\n/**\n * Hook for login. Uses the **same mutation** as `<LoginForm>` and\n * `useAzirid().login()`, so the provider state (user, tokens, callbacks)\n * is always in sync.\n *\n * @example\n * ```tsx\n * const { login, isPending, error } = useLogin({\n * onSuccess: (res) => router.push(\"/dashboard\"),\n * onError: (err) => toast.error(err.message),\n * });\n *\n * login({ email: \"user@test.com\", password: \"secret\" });\n * ```\n */\nexport function useLogin(options?: UseLoginOptions): UseLoginReturn {\n const { loginMutation } = useAzirid()\n\n const login = useCallback(\n (data: LoginData) => {\n loginMutation.mutate(data, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n },\n [loginMutation, options?.onSuccess, options?.onError],\n )\n\n return useMemo(() => Object.assign({}, loginMutation, { login }), [loginMutation, login])\n}\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\nimport type { AuthSuccessResponse, SignupData } from '../types'\n\nexport interface UseSignupOptions {\n /** Callback after successful signup */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on signup error */\n onError?: (error: Error) => void\n}\n\nexport type UseSignupReturn = UseMutationResult<AuthSuccessResponse, Error, SignupData> & {\n /** Convenience: call mutate() with consumer callbacks */\n signup: (data: SignupData) => void\n}\n\n/**\n * Hook for signup. Uses the **same mutation** as `<SignupForm>` and\n * `useAzirid().signup()`, so the provider state (user, tokens, callbacks)\n * is always in sync.\n *\n * @example\n * ```tsx\n * const { signup, isPending, error } = useSignup({\n * onSuccess: (res) => router.push(\"/welcome\"),\n * });\n *\n * signup({ email: \"new@user.com\", password: \"SecurePass10\" });\n * ```\n */\nexport function useSignup(options?: UseSignupOptions): UseSignupReturn {\n const { signupMutation } = useAzirid()\n\n const signup = useCallback(\n (data: SignupData) => {\n signupMutation.mutate(data, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n },\n [signupMutation, options?.onSuccess, options?.onError],\n )\n\n return useMemo(() => Object.assign({}, signupMutation, { signup }), [signupMutation, signup])\n}\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\n\nexport interface UseLogoutOptions {\n /** Callback after successful logout */\n onSuccess?: () => void\n /** Callback on logout error */\n onError?: (error: Error) => void\n}\n\nexport type UseLogoutReturn = UseMutationResult<unknown, Error, void> & {\n /** Convenience: call mutate() with consumer callbacks */\n logout: () => void\n}\n\n/**\n * Hook for logout. Uses the **same mutation** as `useAzirid().logout()`,\n * so the provider state is always in sync.\n *\n * @example\n * ```tsx\n * const { logout, isPending } = useLogout({\n * onSuccess: () => router.push(\"/login\"),\n * });\n *\n * <button onClick={logout}>Cerrar sesión</button>\n * ```\n */\nexport function useLogout(options?: UseLogoutOptions): UseLogoutReturn {\n const { logoutMutation } = useAzirid()\n\n const logout = useCallback(() => {\n logoutMutation.mutate(undefined, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n }, [logoutMutation, options?.onSuccess, options?.onError])\n\n return useMemo(() => Object.assign({}, logoutMutation, { logout }), [logoutMutation, logout])\n}\n","import { useQuery, type UseQueryResult } from '@tanstack/react-query'\nimport { useAccessClient, useAzirid } from '../providers/access-provider'\nimport type { AuthUser } from '../types'\n\nexport interface UseSessionOptions {\n /** Enable/disable auto-fetching (default: true) */\n enabled?: boolean\n /** Refetch interval in ms (default: disabled) */\n refetchInterval?: number\n /** Refetch when window gets focus (default: false) */\n refetchOnWindowFocus?: boolean\n}\n\nexport type UseSessionReturn = UseQueryResult<AuthUser, Error> & {\n /** Shorthand: is the user authenticated? */\n isAuthenticated: boolean\n}\n\n/**\n * Standalone hook to fetch the current session (GET /me).\n * Requires `<AziridProvider>`.\n *\n * Useful for:\n * - Checking if the user is still logged in on mount\n * - Getting fresh user data from the server\n * - Bootstrapping auth state on page load\n *\n * @example\n * ```tsx\n * const session = useSession();\n *\n * if (session.isLoading) return <Spinner />;\n * if (!session.isAuthenticated) return <Redirect to=\"/login\" />;\n *\n * return <p>Hola, {session.data?.firstName}</p>;\n * ```\n */\nexport function useSession(options?: UseSessionOptions): UseSessionReturn {\n const client = useAccessClient()\n const { isBootstrapping } = useAzirid()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'session'],\n queryFn: () => client.get<AuthUser>(client.paths.me),\n retry: false,\n // Wait for bootstrap to complete before fetching /me\n enabled: (options?.enabled ?? true) && !isBootstrapping,\n refetchInterval: options?.refetchInterval,\n refetchOnWindowFocus: options?.refetchOnWindowFocus ?? false,\n })\n\n return {\n ...query,\n isAuthenticated: query.isSuccess && query.data !== null,\n }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface MagicLinkRequestData {\n email: string\n}\n\nexport interface MagicLinkVerifyData {\n token: string\n}\n\nexport interface UseMagicLinkOptions {\n /** Callback after magic link email sent */\n onRequestSuccess?: () => void\n /** Callback after magic link verified (user logged in) */\n onVerifySuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UseMagicLinkReturn {\n /** Request a magic link email */\n request: UseMutationResult<unknown, Error, MagicLinkRequestData>\n /** Verify the magic link token */\n verify: UseMutationResult<AuthSuccessResponse, Error, MagicLinkVerifyData>\n}\n\n/**\n * Standalone hook for magic link auth flow. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const magicLink = useMagicLink({\n * onRequestSuccess: () => toast.success(\"Revisa tu correo\"),\n * onVerifySuccess: (res) => router.push(\"/dashboard\"),\n * });\n *\n * // Step 1: request magic link\n * magicLink.request.mutate({ email: \"user@test.com\" });\n *\n * // Step 2: verify token (from URL params)\n * magicLink.verify.mutate({ token: searchParams.get(\"token\")! });\n * ```\n */\nexport function useMagicLink(options?: UseMagicLinkOptions): UseMagicLinkReturn {\n const client = useAccessClient()\n\n const request = useMutation({\n mutationKey: ['azirid-access', 'magic-link', 'request'],\n mutationFn: (data: MagicLinkRequestData) => client.post(client.paths.magicLinkRequest, data),\n onSuccess: () => options?.onRequestSuccess?.(),\n onError: options?.onError,\n })\n\n const verify = useMutation({\n mutationKey: ['azirid-access', 'magic-link', 'verify'],\n mutationFn: (data: MagicLinkVerifyData) =>\n client.post<AuthSuccessResponse>(client.paths.magicLinkVerify, data),\n onSuccess: options?.onVerifySuccess,\n onError: options?.onError,\n })\n\n return { request, verify }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse, SocialLoginData } from '../types'\n\nexport interface UseSocialLoginOptions {\n /** Callback after successful social login */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport type UseSocialLoginReturn = UseMutationResult<AuthSuccessResponse, Error, SocialLoginData>\n\n/**\n * Standalone hook for social login (Google, GitHub). Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const socialLogin = useSocialLogin({\n * onSuccess: (res) => router.push(\"/dashboard\"),\n * });\n *\n * socialLogin.mutate({\n * provider: \"google\",\n * providerAccountId: googleUser.id,\n * email: googleUser.email,\n * });\n * ```\n */\nexport function useSocialLogin(options?: UseSocialLoginOptions): UseSocialLoginReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'social-login'],\n mutationFn: async (data: SocialLoginData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.socialLogin, body)\n },\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ChangePasswordData } from '../types'\n\nexport interface UseChangePasswordOptions {\n /** Callback after password changed */\n onSuccess?: (response: { updated: boolean }) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport type UseChangePasswordReturn = UseMutationResult<\n { updated: boolean },\n Error,\n ChangePasswordData\n>\n\n/**\n * Standalone hook for changing password. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const changePassword = useChangePassword({\n * onSuccess: () => toast.success(\"Contraseña actualizada\"),\n * });\n *\n * changePassword.mutate({\n * currentPassword: \"OldPass123!\",\n * newPassword: \"NewSecure10!\",\n * });\n * ```\n */\nexport function useChangePassword(options?: UseChangePasswordOptions): UseChangePasswordReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'change-password'],\n mutationFn: (data: ChangePasswordData) =>\n client.post<{ updated: boolean }>(client.paths.changePassword, data),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface UseRefreshOptions {\n /** Callback after tokens refreshed */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error (e.g. session expired) */\n onError?: (error: Error) => void\n}\n\nexport type UseRefreshReturn = UseMutationResult<AuthSuccessResponse, Error, void>\n\n/**\n * Standalone hook for manually refreshing the access token.\n * Requires `<AziridProvider>`. Uses the refresh token cookie.\n *\n * Note: The AccessClient automatically handles 401 responses with token refresh.\n * This hook is for cases where you want to proactively refresh.\n *\n * @example\n * ```tsx\n * const refresh = useRefresh({\n * onSuccess: (res) => console.log(\"Token renovado\"),\n * onError: () => router.push(\"/login\"),\n * });\n *\n * refresh.mutate();\n * ```\n */\nexport function useRefresh(options?: UseRefreshOptions): UseRefreshReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'refresh'],\n mutationFn: async () => {\n await client.refreshSession()\n // refreshSession already updated internal tokens; return a\n // minimal response so onSuccess callers still get data.\n return { accessToken: client.getAccessToken() } as AuthSuccessResponse\n },\n onSuccess: (data) => {\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n}\n","import { useQuery, type UseQueryResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BootstrapResponse } from '../types'\n\nexport interface UseBootstrapOptions {\n /** Enable auto-fetching on mount (default: true) */\n enabled?: boolean\n /** Callback after bootstrap succeeds with an authenticated session */\n onAuthenticated?: (response: Extract<BootstrapResponse, { authenticated: true }>) => void\n /** Callback when no valid session exists */\n onUnauthenticated?: () => void\n}\n\nexport type UseBootstrapReturn = UseQueryResult<BootstrapResponse, Error> & {\n /** Whether the bootstrap resolved to an authenticated session */\n isAuthenticated: boolean\n}\n\n/**\n * Standalone hook for silent session bootstrap using refresh token cookie.\n * Requires `<AziridProvider>`. Posts to the bootstrap endpoint on mount.\n *\n * @example\n * ```tsx\n * const bootstrap = useBootstrap({\n * onAuthenticated: (res) => console.log(\"Sesión restaurada:\", res.user.email),\n * onUnauthenticated: () => router.push(\"/login\"),\n * });\n *\n * if (bootstrap.isLoading) return <Spinner />;\n * if (!bootstrap.isAuthenticated) return <LoginPage />;\n * ```\n */\nexport function useBootstrap(options?: UseBootstrapOptions): UseBootstrapReturn {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'bootstrap'],\n queryFn: async () => {\n const response = await client.post<BootstrapResponse>(client.paths.bootstrap)\n\n if (response.authenticated) {\n client.setAccessToken(response.accessToken)\n options?.onAuthenticated?.(response)\n } else {\n options?.onUnauthenticated?.()\n }\n\n return response\n },\n retry: false,\n enabled: options?.enabled ?? true,\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n })\n\n const isAuthenticated =\n query.isSuccess && query.data !== undefined && query.data.authenticated === true\n\n return {\n ...query,\n isAuthenticated,\n }\n}\n","import {\n useMutation,\n useQuery,\n useQueryClient,\n type UseMutationResult,\n type UseQueryResult,\n} from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type {\n AuthSuccessResponse,\n PasskeyItem,\n PasskeyLoginData,\n PasskeyLoginStartData,\n PasskeyLoginStartResponse,\n PasskeyLoginVerifyData,\n PasskeyRegisterStartData,\n PasskeyRegisterStartResponse,\n PasskeyRegisterVerifyData,\n RegisterPasskeyData,\n} from '../types'\n\nexport interface UsePasskeysOptions {\n /** Enable auto-fetching of passkey list (default: false) */\n listEnabled?: boolean\n /** Callback after passkey registered */\n onRegisterSuccess?: () => void\n /** Callback after passkey revoked */\n onRevokeSuccess?: (data: { revoked: boolean; passkeyId: string }) => void\n /** Callback after passkey login */\n onLoginSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UsePasskeysReturn {\n /** List registered passkeys (authenticated) */\n list: UseQueryResult<PasskeyItem[], Error>\n /** Start passkey registration challenge (authenticated) */\n registerStart: UseMutationResult<PasskeyRegisterStartResponse, Error, PasskeyRegisterStartData>\n /** Verify passkey registration (authenticated) */\n registerVerify: UseMutationResult<{ message: string }, Error, PasskeyRegisterVerifyData>\n /** Register a passkey directly (authenticated) */\n register: UseMutationResult<{ message: string }, Error, RegisterPasskeyData>\n /** Revoke a passkey (authenticated) */\n revoke: UseMutationResult<{ revoked: boolean; passkeyId: string }, Error, string>\n /** Simple passkey login by credentialId (public) */\n login: UseMutationResult<AuthSuccessResponse, Error, PasskeyLoginData>\n /** Start passkey login challenge (public) */\n loginStart: UseMutationResult<PasskeyLoginStartResponse, Error, PasskeyLoginStartData | void>\n /** Verify passkey login (public) */\n loginVerify: UseMutationResult<AuthSuccessResponse, Error, PasskeyLoginVerifyData>\n}\n\n/**\n * Standalone hook for passkey (WebAuthn) management. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const passkeys = usePasskeys({\n * listEnabled: true,\n * onLoginSuccess: (res) => router.push(\"/dashboard\"),\n * onRegisterSuccess: () => toast.success(\"Passkey registrada\"),\n * });\n *\n * // List passkeys\n * const { data: passkeyList } = passkeys.list;\n *\n * // Start registration flow\n * const challenge = await passkeys.registerStart.mutateAsync({ deviceName: \"Mi Mac\" });\n * // ... get credential from navigator.credentials.create() ...\n * await passkeys.registerVerify.mutateAsync({ challengeId: challenge.challengeId, credential });\n *\n * // Login with passkey\n * const loginChallenge = await passkeys.loginStart.mutateAsync();\n * // ... get assertion from navigator.credentials.get() ...\n * await passkeys.loginVerify.mutateAsync({ challengeId: loginChallenge.challengeId, credential: assertion });\n * ```\n */\nexport function usePasskeys(options?: UsePasskeysOptions): UsePasskeysReturn {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const list = useQuery({\n queryKey: ['azirid-access', 'passkeys'],\n queryFn: () => client.get<PasskeyItem[]>(client.paths.passkeys),\n enabled: options?.listEnabled ?? false,\n })\n\n const registerStart = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register-start'],\n mutationFn: (data: PasskeyRegisterStartData) =>\n client.post<PasskeyRegisterStartResponse>(client.paths.passkeyRegisterStart, data),\n onError: options?.onError,\n })\n\n const registerVerify = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register-verify'],\n mutationFn: (data: PasskeyRegisterVerifyData) =>\n client.post<{ message: string }>(client.paths.passkeyRegisterVerify, data),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRegisterSuccess?.()\n },\n onError: options?.onError,\n })\n\n const register = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register'],\n mutationFn: (data: RegisterPasskeyData) =>\n client.post<{ message: string }>(client.paths.passkeys, data),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRegisterSuccess?.()\n },\n onError: options?.onError,\n })\n\n const revoke = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'revoke'],\n mutationFn: (passkeyId: string) =>\n client.post<{ revoked: boolean; passkeyId: string }>(\n `${client.paths.passkeys}/${passkeyId}/revoke`,\n ),\n onSuccess: (data) => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRevokeSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const login = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login'],\n mutationFn: async (data: PasskeyLoginData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.passkeyLogin, body)\n },\n onSuccess: options?.onLoginSuccess,\n onError: options?.onError,\n })\n\n const loginStart = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login-start'],\n mutationFn: async (data?: PasskeyLoginStartData | void) => {\n const body: Record<string, unknown> = {}\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n if (data) {\n Object.assign(body, data)\n }\n\n return client.post<PasskeyLoginStartResponse>(client.paths.passkeyLoginStart, body)\n },\n onError: options?.onError,\n })\n\n const loginVerify = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login-verify'],\n mutationFn: async (data: PasskeyLoginVerifyData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.passkeyLoginVerify, body)\n },\n onSuccess: options?.onLoginSuccess,\n onError: options?.onError,\n })\n\n return {\n list,\n registerStart,\n registerVerify,\n register,\n revoke,\n login,\n loginStart,\n loginVerify,\n }\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { usePayphoneConfirm } from './use-payphone-confirm'\nimport type { PayphoneConfirmResult } from './use-payphone-confirm'\nimport { PayphoneWidgetRenderer } from '../components/payphone-checkout'\nimport { useAzirid } from '../providers/access-provider'\nimport type { PayphoneWidgetConfig } from '../types'\n\nexport type PayphoneCheckoutStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'confirming'\n | 'confirmed'\n | 'cancelled'\n | 'error'\n\nexport interface UsePayphoneCheckoutOptions {\n intentId: string\n onSuccess?: (data: PayphoneConfirmResult) => void\n onError?: (error: Error) => void\n}\n\nexport interface UsePayphoneCheckoutReturn {\n PayphoneWidget: () => ReactElement | null\n status: PayphoneCheckoutStatus\n intentId: string\n error: Error | null\n}\n\nconst CONTAINER_ID = 'pp-checkout-azirid'\n\nexport function usePayphoneCheckout({\n intentId,\n onSuccess,\n onError,\n}: UsePayphoneCheckoutOptions): UsePayphoneCheckoutReturn {\n const [status, setStatus] = useState<PayphoneCheckoutStatus>('idle')\n const [widgetConfig, setWidgetConfig] = useState<PayphoneWidgetConfig | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const checkoutTriggered = useRef(false)\n const confirmTriggered = useRef(false)\n const { isBootstrapping } = useAzirid()\n\n // Detect callback params from Payphone redirect\n const params =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams()\n const callbackId = params.get('id')\n const callbackClientTxId = params.get('clientTransactionId')\n const isCallback = !!(callbackId && callbackClientTxId)\n\n // ── Checkout (Phase 1) ─────────────────────────────────────\n const { checkout } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setWidgetConfig(data.widgetConfig)\n setStatus('ready')\n }\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (isCallback || checkoutTriggered.current) return\n checkoutTriggered.current = true\n setStatus('loading')\n\n checkout({\n intentId,\n provider: 'PAYPHONE',\n successUrl: window.location.href,\n cancelUrl: window.location.href,\n })\n }, [checkout, intentId, isCallback])\n\n // ── Confirmation (Phase 2) ─────────────────────────────────\n const { mutate: confirm } = usePayphoneConfirm({\n onSuccess: (data) => {\n setStatus(data.status === 'confirmed' || data.status === 'already_confirmed'\n ? 'confirmed'\n : 'cancelled')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (!isCallback || confirmTriggered.current || isBootstrapping) return\n confirmTriggered.current = true\n setStatus('confirming')\n confirm({ id: Number(callbackId), clientTransactionId: callbackClientTxId! })\n }, [isCallback, isBootstrapping, callbackId, callbackClientTxId, confirm])\n\n // ── Widget component ───────────────────────────────────────\n const handleSdkError = useCallback(\n (err: Error) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n [onError],\n )\n\n const PayphoneWidget = useMemo(() => {\n return function PayphoneWidgetInner() {\n if (!widgetConfig || isCallback) return null\n\n return PayphoneWidgetRenderer({\n config: widgetConfig,\n containerId: CONTAINER_ID,\n onError: handleSdkError,\n })\n }\n }, [widgetConfig, isCallback, handleSdkError])\n\n return { PayphoneWidget, status, intentId, error: currentError }\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { useSubmitTransferProof } from './use-transfer-proof'\nimport { useUploadTransferProof } from './use-upload-transfer-proof'\nimport { formatAmount } from '@azirid/shared'\nimport type { CheckoutResponse, TransferProof } from '../types'\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type TransferPaymentStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'uploading'\n | 'submitting'\n | 'submitted'\n | 'error'\n\nexport interface SubmitProofData {\n fileUrl: string\n fileName?: string\n fileType?: string\n amount: number\n currency?: string\n notes?: string\n}\n\nexport interface UseTransferPaymentOptions {\n intentId: string\n onSuccess?: (data: CheckoutResponse) => void\n onProofSubmitted?: (proof: TransferProof) => void\n onError?: (error: Error) => void\n}\n\nexport interface UseTransferPaymentReturn {\n TransferDetails: () => ReactElement | null\n /** Upload a file to S3 and submit the proof in one step */\n uploadAndSubmitProof: (file: File, notes?: string) => Promise<void>\n /** Submit proof with an already-uploaded file URL */\n submitProof: (data: SubmitProofData) => void\n status: TransferPaymentStatus\n checkoutData: CheckoutResponse | null\n isSubmitting: boolean\n isUploading: boolean\n error: Error | null\n}\n\n// ─── Hook ───────────────────────────────────────────────────\n\nexport function useTransferPayment({\n intentId,\n onSuccess,\n onProofSubmitted,\n onError,\n}: UseTransferPaymentOptions): UseTransferPaymentReturn {\n const [status, setStatus] = useState<TransferPaymentStatus>('idle')\n const [checkoutData, setCheckoutData] = useState<CheckoutResponse | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const checkoutTriggered = useRef(false)\n\n const responseUrl =\n typeof window !== 'undefined' ? window.location.href.split('?')[0] : ''\n\n // ── Checkout ───────────────────────────────────────────────\n const { checkout } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n setCheckoutData(data)\n setStatus('ready')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (checkoutTriggered.current) return\n checkoutTriggered.current = true\n setStatus('loading')\n\n checkout({\n intentId,\n provider: 'MANUAL_TRANSFER',\n successUrl: responseUrl,\n cancelUrl: responseUrl,\n })\n }, [checkout, intentId, responseUrl])\n\n // ── Upload ────────────────────────────────────────────────\n const { upload, isUploading } = useUploadTransferProof({\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n // ── Submit proof ───────────────────────────────────────────\n const { submit, isPending: isSubmitting } = useSubmitTransferProof({\n onSuccess: (proof) => {\n setStatus('submitted')\n onProofSubmitted?.(proof)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n const submitProof = useCallback(\n (data: SubmitProofData) => {\n if (!checkoutData?.intent) return\n setStatus('submitting')\n setCurrentError(null)\n submit({\n intentId: (checkoutData.intent as any).id,\n fileUrl: data.fileUrl,\n fileName: data.fileName,\n fileType: data.fileType,\n amount: data.amount,\n currency: data.currency,\n notes: data.notes,\n })\n },\n [submit, checkoutData],\n )\n\n const uploadAndSubmitProof = useCallback(\n async (file: File, notes?: string) => {\n if (!checkoutData?.intent) return\n setCurrentError(null)\n\n try {\n setStatus('uploading')\n const result = await upload(file)\n\n setStatus('submitting')\n const intent = checkoutData.intent as any\n submit({\n intentId: intent.id,\n fileUrl: result.publicUrl,\n fileName: file.name,\n fileType: file.type,\n amount: intent.amount ?? checkoutData.plan?.amount ?? 0,\n currency: intent.currency ?? checkoutData.plan?.currency ?? 'USD',\n notes,\n })\n } catch {\n // Error handled by onError callbacks\n }\n },\n [upload, submit, checkoutData],\n )\n\n // ── TransferDetails component ──────────────────────────────\n const TransferDetails = useMemo(() => {\n return function TransferDetailsInner(): ReactElement | null {\n if (!checkoutData) return null\n\n const bankDetails = checkoutData.bankDetails as Record<string, string> | null\n const plan = checkoutData.plan\n const intent = checkoutData.intent as\n | { id: string; amount: number; currency: string; description?: string | null }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div>\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>\n )}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {checkoutData.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n }}\n >\n {checkoutData.transferInstructions}\n </div>\n )}\n </div>\n )\n }\n }, [checkoutData])\n\n return {\n TransferDetails,\n uploadAndSubmitProof,\n submitProof,\n status,\n checkoutData,\n isSubmitting,\n isUploading,\n error: currentError,\n }\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { Branch } from '../types'\n\nexport function useBranches() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'branches'],\n queryFn: () => client.get<Branch[]>(client.paths.branches),\n })\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { PaymentMethod } from '../types'\n\nexport function usePaymentMethods(branchId?: string) {\n const client = useAccessClient()\n\n const path = branchId\n ? `${client.paths.paymentMethods}?branchId=${encodeURIComponent(branchId)}`\n : client.paths.paymentMethods\n\n return useQuery({\n queryKey: ['azirid-access', 'payment-methods', branchId ?? null],\n queryFn: () => client.get<PaymentMethod[]>(path),\n })\n}\n","import { useQueryClient, useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { TenantWithRole, TenantMemberInfo } from '../types'\n\nexport function useTenants() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'tenants'],\n queryFn: () => client.get<TenantWithRole[]>(client.paths.userTenants),\n enabled: !!client.getAccessToken(),\n })\n}\n\nexport function useTenantMembers(tenantId: string) {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'tenants', tenantId, 'members'],\n queryFn: () =>\n client.get<TenantMemberInfo[]>(`${client.paths.userTenants}/${tenantId}/members`),\n enabled: !!client.getAccessToken() && !!tenantId,\n })\n}\n\nexport function useSwitchTenant() {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const switchTenant = async (tenantId: string) => {\n await client.refreshSession({ tenantId })\n await queryClient.invalidateQueries({ queryKey: ['azirid-access'] })\n }\n\n return { switchTenant }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AccessClient } from '../client'\n\n/**\n * Options common to all simple mutation hooks created via `createMutationHook`.\n */\nexport interface SimpleMutationOptions<TData> {\n onSuccess?: (data: TData) => void\n onError?: (error: Error) => void\n}\n\n/**\n * Configuration for `createMutationHook`.\n *\n * @template TData The response type from the API\n * @template TInput The input/variables type for the mutation\n */\nexport interface MutationHookConfig<TData, TInput> {\n /** Static mutation key for deduplication / devtools */\n mutationKey: string[]\n /**\n * Derive the mutation function from the AccessClient and input.\n * Most hooks simply call `client.post<TData>(client.paths.someEndpoint, data)`.\n */\n mutationFn: (client: AccessClient, input: TInput) => Promise<TData>\n}\n\n/**\n * Factory that creates a simple `useMutation`-based hook.\n *\n * Eliminates the boilerplate of:\n * 1. Calling `useAccessClient()`\n * 2. Creating a `useMutation` with `mutationKey`, `mutationFn`, `onSuccess`, `onError`\n *\n * The resulting hook has the same return type as `useMutation` (`UseMutationResult`),\n * preserving full compatibility with TanStack Query.\n *\n * @example\n * ```ts\n * export const useChangePassword = createMutationHook<\n * { updated: boolean },\n * ChangePasswordData\n * >({\n * mutationKey: ['azirid-access', 'change-password'],\n * mutationFn: (client, data) =>\n * client.post<{ updated: boolean }>(client.paths.changePassword, data),\n * })\n * ```\n */\nexport function createMutationHook<TData, TInput = void>(\n config: MutationHookConfig<TData, TInput>,\n): (options?: SimpleMutationOptions<TData>) => UseMutationResult<TData, Error, TInput> {\n return function useGeneratedMutation(\n options?: SimpleMutationOptions<TData>,\n ): UseMutationResult<TData, Error, TInput> {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: config.mutationKey,\n mutationFn: (input: TInput) => config.mutationFn(client, input),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n }\n}\n","import { useCallback, useRef, useState, type FormEvent } from 'react'\nimport type { z } from 'zod'\nimport type { FieldError, UseFormReturn } from '../types'\n\n/** Convert Zod issues to our FieldError format */\nfunction zodToFieldErrors(zodError: z.ZodError): FieldError[] {\n return zodError.issues.map((issue) => ({\n field: issue.path.join('.'),\n message: issue.message,\n }))\n}\n\nexport function useFormState<T extends Record<string, unknown>>(\n initialValues: T,\n schema: z.ZodType<unknown, z.ZodTypeDef, unknown>,\n onSubmit: (values: T) => void | Promise<void>,\n): UseFormReturn<T> {\n const [values, setValues] = useState<T>(initialValues)\n const [errors, setErrors] = useState<FieldError[]>([])\n const [isSubmitting, setIsSubmitting] = useState(false)\n const mountedRef = useRef(true)\n\n const handleChange = useCallback(\n (field: keyof T) => (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = { ...values, [field]: e.target.value } as T\n setValues(next)\n setErrors((prev) => prev.filter((err) => err.field !== field))\n },\n [values],\n )\n\n const setFieldValue = useCallback((field: keyof T, value: string) => {\n setValues((prev) => ({ ...prev, [field]: value }) as T)\n setErrors((prev) => prev.filter((err) => err.field !== field))\n }, [])\n\n const handleSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n const result = schema.safeParse(values)\n if (!result.success) {\n setErrors(zodToFieldErrors(result.error))\n return\n }\n setIsSubmitting(true)\n try {\n await onSubmit(values)\n } finally {\n if (mountedRef.current) {\n setIsSubmitting(false)\n }\n }\n },\n [values, schema, onSubmit],\n )\n\n const reset = useCallback(() => {\n setValues(initialValues)\n setErrors([])\n setIsSubmitting(false)\n }, [initialValues])\n\n return { values, errors, isSubmitting, handleChange, handleSubmit, setFieldValue, reset }\n}\n","import { useCallback, useState } from 'react'\n\nexport function usePasswordToggle() {\n const [visible, setVisible] = useState(false)\n const toggle = useCallback(() => setVisible((v) => !v), [])\n return { visible, toggle, type: visible ? ('text' as const) : ('password' as const) }\n}\n","// ─── Components ──────────────────────────────────────────────\nexport { LoginForm } from './components/login-form'\nexport { SignupForm } from './components/signup-form'\nexport { ForgotPasswordForm } from './components/forgot-password-form'\nexport { ResetPasswordForm } from './components/reset-password-form'\nexport { AuthForm } from './components/auth-form'\nexport { ReferralCard } from './components/referral-card'\nexport { ReferralStats } from './components/referral-stats'\nexport { PricingTable } from './components/pricing-table'\nexport { CheckoutButton } from './components/checkout-button'\nexport { PayButton } from './components/pay-button'\nexport { PayphoneCallback } from './components/payphone-callback'\nexport { HandoffCallback } from './components/HandoffCallback'\nexport type { HandoffCallbackProps } from './components/HandoffCallback'\nexport { PayphoneWidgetRenderer } from './components/payphone-checkout'\nexport { SubscriptionBadge } from './components/subscription-badge'\nexport { InvoiceList } from './components/invoice-list'\n\n// ─── Provider & Context Hook ────────────────────────────────\nexport {\n AziridProvider,\n useAzirid,\n useAccessClient,\n useBranding,\n useMessages,\n} from './providers/access-provider'\nexport { resolveMessages, es, en } from './i18n'\n\n// ─── Standalone Auth Hooks ──────────────────────────────────\n// These hooks can be used to build custom UI without the built-in components.\n// They require <AziridProvider> for the client context.\nexport { useLogin } from './hooks/use-login'\nexport { useSignup } from './hooks/use-signup'\nexport { useLogout } from './hooks/use-logout'\nexport { useSession } from './hooks/use-session'\nexport { useMagicLink } from './hooks/use-magic-link'\nexport { useSocialLogin } from './hooks/use-social-login'\nexport { useChangePassword } from './hooks/use-change-password'\nexport { useRefresh } from './hooks/use-refresh'\nexport { useBootstrap } from './hooks/use-bootstrap'\nexport { usePasskeys } from './hooks/use-passkeys'\nexport { useReferral } from './hooks/use-referral'\nexport { useReferralStats } from './hooks/use-referral-stats'\nexport { usePlans } from './hooks/use-plans'\nexport { useSubscription } from './hooks/use-subscription'\nexport { useCheckout } from './hooks/use-checkout'\nexport { useInvoices } from './hooks/use-invoices'\nexport { useSubmitTransferProof, useTransferProofs } from './hooks/use-transfer-proof'\nexport { useUploadTransferProof } from './hooks/use-upload-transfer-proof'\nexport { usePaymentProviders } from './hooks/use-payment-providers'\nexport { usePayphoneConfirm } from './hooks/use-payphone-confirm'\nexport { usePayphoneCheckout } from './hooks/use-payphone-checkout'\nexport { usePayButton } from './hooks/use-pay-button'\nexport { useTransferPayment } from './hooks/use-transfer-payment'\nexport { useBranches } from './hooks/use-branches'\nexport { usePaymentMethods } from './hooks/use-payment-methods'\nexport { useTenants, useTenantMembers, useSwitchTenant } from './hooks/use-tenants'\nexport { usePasswordReset } from './hooks/use-password-reset'\n\n// ─── Mutation Hook Factory ───────────────────────────────────\nexport { createMutationHook } from './hooks/create-mutation-hook'\n\n// ─── Form Utility Hooks ─────────────────────────────────────\nexport { useFormState } from './hooks/use-form-state'\nexport { usePasswordToggle } from './hooks/use-password-toggle'\n\n// ─── Zod Schemas ─────────────────────────────────────────────\nexport {\n loginSchema,\n signupSchema,\n changePasswordSchema,\n magicLinkRequestSchema,\n magicLinkVerifySchema,\n socialLoginSchema,\n passkeyRegisterStartSchema,\n createLoginSchema,\n createSignupSchema,\n forgotPasswordSchema,\n createForgotPasswordSchema,\n resetPasswordConfirmSchema,\n createResetPasswordConfirmSchema,\n} from './schemas'\n\n// ─── Client ──────────────────────────────────────────────────\nexport { createAccessClient, isAuthError, PATHS, BASE_PATHS, buildPaths } from './client'\n\n// ─── Utilities ───────────────────────────────────────────────\nexport { cn } from './utils/cn'\nexport { removeStyles } from './utils/inject-styles'\n\n// ─── Version ─────────────────────────────────────────────────\ndeclare const __SDK_VERSION__: string\nexport const SDK_VERSION: string = __SDK_VERSION__\n\n// ─── Types ───────────────────────────────────────────────────\nexport type {\n AuthUser,\n AuthSuccessResponse,\n AuthState,\n SignupData,\n SocialLoginData,\n ChangePasswordData,\n BootstrapResponse,\n PasskeyItem,\n PasskeyRegisterStartData,\n PasskeyRegisterStartResponse,\n PasskeyRegisterVerifyData,\n PasskeyLoginStartData,\n PasskeyLoginStartResponse,\n PasskeyLoginVerifyData,\n PasskeyLoginData,\n RegisterPasskeyData,\n AziridProviderProps,\n AziridContextValue,\n LoginFormProps,\n SignupFormProps,\n ForgotPasswordFormProps,\n ResetPasswordFormProps,\n AuthView,\n AuthFormProps,\n FieldError,\n UseFormReturn,\n AppBranding,\n SupportedLocale,\n AccessMessages,\n ReferralInfo,\n ReferralStatsData,\n ReferralItem,\n BillingPlan,\n UserSubscription,\n CheckoutResponse,\n BillingInvoice,\n SubmitTransferProofData,\n TransferProof,\n UploadTransferProofRequest,\n UploadTransferProofResponse,\n PaymentProviderType,\n AvailableProvider,\n PaymentIntent,\n PayphoneWidgetConfig,\n TenantWithRole,\n TenantMemberInfo,\n CreateTenantData,\n Branch,\n PaymentMethod,\n} from './types'\n\nexport type {\n LoginInput,\n SignupInput,\n ChangePasswordInput,\n MagicLinkRequestInput,\n MagicLinkVerifyInput,\n SocialLoginInput,\n PasskeyRegisterStartInput,\n ForgotPasswordInput,\n ResetPasswordConfirmInput,\n} from './schemas'\n\nexport type { AccessClient, AccessClientConfig, ApiError, AuthPaths } from './client'\n\n// ─── Standalone Hook Types ──────────────────────────────────\nexport type { LoginData, UseLoginOptions, UseLoginReturn } from './hooks/use-login'\nexport type { UseSignupOptions, UseSignupReturn } from './hooks/use-signup'\nexport type { UseLogoutOptions, UseLogoutReturn } from './hooks/use-logout'\nexport type { UseSessionOptions, UseSessionReturn } from './hooks/use-session'\nexport type {\n MagicLinkRequestData,\n MagicLinkVerifyData,\n UseMagicLinkOptions,\n UseMagicLinkReturn,\n} from './hooks/use-magic-link'\nexport type { UseSocialLoginOptions, UseSocialLoginReturn } from './hooks/use-social-login'\nexport type { UseChangePasswordOptions, UseChangePasswordReturn } from './hooks/use-change-password'\nexport type { UseRefreshOptions, UseRefreshReturn } from './hooks/use-refresh'\nexport type { UseBootstrapOptions, UseBootstrapReturn } from './hooks/use-bootstrap'\nexport type { UsePasskeysOptions, UsePasskeysReturn } from './hooks/use-passkeys'\nexport type { CheckoutParams, UseCheckoutOptions } from './hooks/use-checkout'\nexport type {\n PayphoneConfirmParams,\n PayphoneConfirmResult,\n UsePayphoneConfirmOptions,\n} from './hooks/use-payphone-confirm'\nexport type {\n PasswordResetRequestData,\n PasswordResetConfirmData,\n UsePasswordResetOptions,\n UsePasswordResetReturn,\n} from './hooks/use-password-reset'\nexport type { SimpleMutationOptions, MutationHookConfig } from './hooks/create-mutation-hook'\nexport type { PricingCardProps } from './components/pricing-card'\nexport type { PricingFeatureListProps } from './components/pricing-feature-list'\nexport type { ProviderModalProps, TransferModalProps } from './components/pay-button-modal'\nexport type { ReferralCardProps } from './components/referral-card'\nexport type { ReferralStatsProps } from './components/referral-stats'\nexport type { PricingTableProps } from './components/pricing-table'\nexport type { CheckoutButtonProps } from './components/checkout-button'\nexport type { PayButtonProps } from './components/pay-button'\nexport type { SubscriptionBadgeProps } from './components/subscription-badge'\nexport type { InvoiceListProps } from './components/invoice-list'\nexport type { PayphoneModalProps } from './components/payphone-modal'\nexport type { PayphoneCallbackProps } from './components/payphone-callback'\nexport type {\n UsePayphoneCheckoutOptions,\n UsePayphoneCheckoutReturn,\n PayphoneCheckoutStatus,\n} from './hooks/use-payphone-checkout'\nexport type {\n UsePayButtonOptions,\n UsePayButtonReturn,\n PayButtonStatus,\n} from './hooks/use-pay-button'\nexport type {\n UseTransferPaymentOptions,\n UseTransferPaymentReturn,\n TransferPaymentStatus,\n SubmitProofData,\n} from './hooks/use-transfer-payment'\n\n// ─── Server Types (re-exported for convenience) ─────────────\nexport type { SessionSyncOptions } from './server'\n"]}