@olwiba/ui 0.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +98 -0
- package/dist/index.d.ts +762 -0
- package/dist/index.js +2102 -0
- package/dist/index.js.map +1 -0
- package/package.json +88 -0
- package/src/app/AppShell.tsx +365 -0
- package/src/app/AuthSection.tsx +141 -0
- package/src/app/EmptyState.tsx +34 -0
- package/src/app/ErrorPage.tsx +78 -0
- package/src/app/UpgradePrompt.tsx +203 -0
- package/src/blog/PostCard.tsx +66 -0
- package/src/blog/PostList.tsx +27 -0
- package/src/components/ConfirmDialog.tsx +43 -0
- package/src/components/ContextMenu.tsx +86 -0
- package/src/components/DevBanner.tsx +22 -0
- package/src/components/Dock.tsx +94 -0
- package/src/components/FeatureCard.tsx +45 -0
- package/src/components/GlassCard.tsx +30 -0
- package/src/components/ImageCard.tsx +60 -0
- package/src/components/PageHeader.tsx +101 -0
- package/src/components/PricingCard.tsx +90 -0
- package/src/components/RegisterHotkeys.tsx +43 -0
- package/src/components/RootErrorFallback.tsx +29 -0
- package/src/components/Spinner.tsx +14 -0
- package/src/components/Spotlight.tsx +104 -0
- package/src/components/StatCard.tsx +44 -0
- package/src/components/Suspensed.tsx +17 -0
- package/src/components/TestimonialCard.tsx +64 -0
- package/src/components/ThemeColorUpdater.tsx +23 -0
- package/src/components/ThemeSwitchMinimal.tsx +28 -0
- package/src/components/VersionBanner.tsx +38 -0
- package/src/context/OlwibaUIContext.tsx +58 -0
- package/src/hooks/use-confirm.ts +64 -0
- package/src/hooks/use-controlled-open.ts +33 -0
- package/src/hooks/use-copy-to-clipboard.ts +20 -0
- package/src/hooks/use-debounce.ts +14 -0
- package/src/hooks/use-intersection-observer.ts +25 -0
- package/src/hooks/use-local-storage.ts +31 -0
- package/src/hooks/use-media-query.ts +21 -0
- package/src/hooks/use-mounted.ts +11 -0
- package/src/hooks/use-pagination.ts +31 -0
- package/src/hooks/use-scrolled-past.ts +27 -0
- package/src/index.ts +113 -0
- package/src/lib/utils.ts +6 -0
- package/src/marketing/ContactSection.tsx +110 -0
- package/src/marketing/CtaSection.tsx +74 -0
- package/src/marketing/FaqSection.tsx +44 -0
- package/src/marketing/FeaturesSection.tsx +42 -0
- package/src/marketing/Footer.tsx +87 -0
- package/src/marketing/HeroSection.tsx +112 -0
- package/src/marketing/LogoStrip.tsx +94 -0
- package/src/marketing/Navbar.tsx +142 -0
- package/src/marketing/NewsletterSection.tsx +64 -0
- package/src/marketing/PricingSection.tsx +120 -0
- package/src/marketing/SectionTitle.tsx +30 -0
- package/src/marketing/StatsSection.tsx +63 -0
- package/src/marketing/TeamSection.tsx +110 -0
- package/src/marketing/TestimonialsSection.tsx +56 -0
- package/src/motion/CountUp.tsx +64 -0
- package/src/motion/FadeIn.tsx +69 -0
- package/src/motion/PageTransition.tsx +49 -0
- package/src/motion/StaggerChildren.tsx +74 -0
- package/src/overlays/Overlay.tsx +88 -0
- package/src/overlays/Underlay.tsx +114 -0
- package/src/primitives/Badge.tsx +11 -0
- package/src/primitives/Button.tsx +16 -0
- package/src/primitives/Card.tsx +22 -0
- package/src/primitives/Checkbox.tsx +17 -0
- package/src/primitives/Input.tsx +16 -0
- package/src/primitives/Switch.tsx +16 -0
- package/src/primitives/Textarea.tsx +16 -0
- package/src/primitives/index.ts +7 -0
- package/src/types/external-packages.d.ts +79 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/context/OlwibaUIContext.tsx","../src/primitives/Button.tsx","../src/primitives/Card.tsx","../src/primitives/Badge.tsx","../src/primitives/Input.tsx","../src/primitives/Textarea.tsx","../src/primitives/Checkbox.tsx","../src/primitives/Switch.tsx","../src/app/AppShell.tsx","../src/app/AuthSection.tsx","../src/app/EmptyState.tsx","../src/app/ErrorPage.tsx","../src/app/UpgradePrompt.tsx","../src/motion/FadeIn.tsx","../src/marketing/SectionTitle.tsx","../src/marketing/HeroSection.tsx","../src/components/FeatureCard.tsx","../src/motion/StaggerChildren.tsx","../src/marketing/FeaturesSection.tsx","../src/marketing/CtaSection.tsx","../src/components/PricingCard.tsx","../src/marketing/PricingSection.tsx","../src/components/TestimonialCard.tsx","../src/marketing/TestimonialsSection.tsx","../src/marketing/TeamSection.tsx","../src/marketing/FaqSection.tsx","../src/motion/CountUp.tsx","../src/marketing/StatsSection.tsx","../src/marketing/NewsletterSection.tsx","../src/marketing/ContactSection.tsx","../src/components/ThemeSwitchMinimal.tsx","../src/marketing/Navbar.tsx","../src/marketing/Footer.tsx","../src/marketing/LogoStrip.tsx","../src/overlays/Underlay.tsx","../src/overlays/Overlay.tsx","../src/motion/PageTransition.tsx","../src/components/Spotlight.tsx","../src/components/Dock.tsx","../src/components/ContextMenu.tsx","../src/components/ConfirmDialog.tsx","../src/components/GlassCard.tsx","../src/components/StatCard.tsx","../src/components/ImageCard.tsx","../src/components/Spinner.tsx","../src/components/PageHeader.tsx","../src/components/Suspensed.tsx","../src/components/ThemeColorUpdater.tsx","../src/components/VersionBanner.tsx","../src/components/DevBanner.tsx","../src/components/RegisterHotkeys.tsx","../src/components/RootErrorFallback.tsx","../src/hooks/use-mounted.ts","../src/hooks/use-confirm.ts","../src/hooks/use-controlled-open.ts","../src/hooks/use-scrolled-past.ts","../src/hooks/use-copy-to-clipboard.ts","../src/hooks/use-debounce.ts","../src/hooks/use-intersection-observer.ts","../src/hooks/use-local-storage.ts","../src/hooks/use-media-query.ts","../src/hooks/use-pagination.ts"],"names":["React","React2","jsx","CNButton","React3","CNCard","CNBadge","React4","CNInput","React5","CNTextarea","React6","CNCheckbox","React7","CNSwitch","jsxs","Badge","Card","CardHeader","CardTitle","CardDescription","CardContent","Input","Button","cn","defaultRenderLink","React8","Avatar","AvatarImage","AvatarFallback","ArrowRight","translateMap","React9","Sparkles","Separator","Fragment","React10","React11","React12","Mail","React13","Label","Textarea","React14","React15","X","React16","React17","React18","React19","RadixContextMenu","blurClass","React20","React21","Spinner","React22","React23","React24","useState","useEffect","React26","React27","React28","React29","React30","React31","React32","React33"],"mappings":";;;;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACOA,IAAM,kBAAwBA,OAAA,CAAA,aAAA,CAAoC;AAAA,EAChE,QAAA,EAAU,KAAA;AAAA,EACV,IAAA,EAAM;AACR,CAAC,CAAA;AAoBM,SAAS,iBAAiB,EAAE,QAAA,EAAU,UAAU,YAAA,EAAc,IAAA,GAAO,WAAU,EAA0B;AAC9G,EAAA,MAAM,iBAAiB,WAAA,EAAY;AACnC,EAAA,MAAM,WAAW,YAAA,IAAgB,cAAA;AAEjC,EAAA,MAAM,OAAA,GAAU,IAAA,KAAS,SAAA,GAAa,IAAA,GAAqB,MAAA;AAE3D,EAAA,uBACE,GAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,OAAO,EAAE,QAAA,EAAU,IAAA,EAAK,EAChD,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,IAAA,EAAM,OAAA,EACtB,UACH,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,WAAA,GAAc;AAC5B,EAAA,OAAaA,mBAAW,eAAe,CAAA;AACzC;AAGO,SAAS,SAAA,GAAoB;AAClC,EAAA,OAAaA,OAAA,CAAA,UAAA,CAAW,eAAe,CAAA,CAAE,IAAA;AAC3C;ACjDO,IAAM,MAAA,GAAeC,OAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,IAAA,EAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC3B,IAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,IAAA,MAAM,YAAA,GAAe,IAAA,KAAS,OAAA,KAAY,SAAA,GAAa,OAAA,GAAmC,MAAA,CAAA;AAC1F,IAAA,uBAAOC,GAAAA,CAACC,QAAA,EAAA,EAAS,MAAM,YAAA,EAAe,GAAG,OAAO,GAAA,EAAU,CAAA;AAAA,EAC5D;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;ACJd,IAAM,IAAA,GAAaC,OAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,IAAA,EAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC3B,IAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,IAAA,MAAM,YAAA,GAAe,IAAA,KAAS,OAAA,KAAY,SAAA,GAAa,OAAA,GAAmC,MAAA,CAAA;AAC1F,IAAA,uBAAOF,GAAAA,CAACG,MAAA,EAAA,EAAO,MAAM,YAAA,EAAe,GAAG,OAAO,GAAA,EAAU,CAAA;AAAA,EAC1D;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;ACVZ,SAAS,MAAM,KAAA,EAAmB;AACvC,EAAA,uBAAOH,GAAAA,CAACI,OAAA,EAAA,EAAS,GAAG,KAAA,EAAO,CAAA;AAC7B;ACFO,IAAM,KAAA,GAAcC,OAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,IAAA,EAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC3B,IAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,IAAA,MAAM,YAAA,GAAe,IAAA,KAAS,OAAA,KAAY,SAAA,GAAa,OAAA,GAAmC,MAAA,CAAA;AAC1F,IAAA,uBAAOL,GAAAA,CAACM,OAAA,EAAA,EAAQ,MAAM,YAAA,EAAe,GAAG,OAAO,GAAA,EAAU,CAAA;AAAA,EAC3D;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;ACPb,IAAM,QAAA,GAAiBC,OAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,EAAE,IAAA,EAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC3B,IAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,IAAA,MAAM,YAAA,GAAe,IAAA,KAAS,OAAA,KAAY,SAAA,GAAa,OAAA,GAAmC,MAAA,CAAA;AAC1F,IAAA,uBAAOP,GAAAA,CAACQ,UAAA,EAAA,EAAW,MAAM,YAAA,EAAe,GAAG,OAAO,GAAA,EAAU,CAAA;AAAA,EAC9D;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;ACPhB,IAAM,QAAA,GAAiBC,mBAG5B,CAAC,EAAE,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC7B,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,YAAA,GAAe,IAAA,KAAS,OAAA,KAAY,SAAA,GAAa,OAAA,GAAmC,MAAA,CAAA;AAC1F,EAAA,uBAAOT,GAAAA,CAACU,UAAA,EAAA,EAAW,MAAM,YAAA,EAAe,GAAG,OAAO,GAAA,EAAU,CAAA;AAC9D,CAAC;AACD,QAAA,CAAS,WAAA,GAAc,UAAA;ACPhB,IAAM,MAAA,GAAeC,mBAG1B,CAAC,EAAE,MAAM,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACpC,EAAA,uBAAOX,GAAAA,CAACY,QAAA,EAAA,EAAU,GAAG,OAAO,GAAA,EAAU,CAAA;AACxC,CAAC;AACD,MAAA,CAAO,WAAA,GAAc,QAAA;ACgGrB,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAK,EAA2B;AACjD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,UAAA,EAAW;AAChC,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,UAAA,GAAa,MAAA,KAAW,SAAA,GAAa,MAAA,GAAkC,MAAA;AAC7E,EAAA,MAAM,QAAA,GAAA,CAAY,KAAK,IAAA,IAAQ,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAY;AAEnE,EAAA,uBACEZ,GAAAA,CAAC,WAAA,EAAA,EACC,0BAAAA,GAAAA,CAAC,eAAA,EAAA,EACC,+BAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAA,IAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,sFAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,UAAO,IAAA,EAAM,UAAA,EAAY,IAAA,EAAK,IAAA,EAAK,WAAU,WAAA,EAC3C,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,MAAA,oBAAUA,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAK,IAAA,CAAK,MAAA,EAAQ,GAAA,EAAK,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,4BAC/DA,GAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,QAAA,EAAS;AAAA,WAAA,EAC5B,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAwB,QAAA,EAAA,IAAA,CAAK,IAAA,IAAQ,KAAK,KAAA,EAAM,CAAA;AAAA,4BAChEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA,IAAA,CAAK,IAAA,GAAO,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,KAAA,CAAA,GAAU,IAAA,CAAK,KAAA,EAC1C;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,gBAAA,EAAiB;AAAA;AAAA;AAAA,KAC/C,EACF,CAAA;AAAA,oBACA,IAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,6DAAA;AAAA,QACV,IAAA,EAAM,WAAW,QAAA,GAAW,OAAA;AAAA,QAC5B,KAAA,EAAM,KAAA;AAAA,QACN,UAAA,EAAY,CAAA;AAAA,QAEZ,QAAA,EAAA;AAAA,0BAAAA,IAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,mBAC3B,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,UAAA,EAAY,IAAA,EAAK,IAAA,EAC5B,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,MAAA,oBAAUA,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAK,IAAA,CAAK,MAAA,EAAQ,GAAA,EAAK,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,8BAC/DA,GAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,QAAA,EAAS;AAAA,aAAA,EAC5B,CAAA;AAAA,4BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAwB,QAAA,EAAA,IAAA,CAAK,IAAA,IAAQ,KAAK,KAAA,EAAM,CAAA;AAAA,8BAChEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EAA0C,eAAK,KAAA,EAAM;AAAA,aAAA,EACvE;AAAA,WAAA,EACF,CAAA,EACF,CAAA;AAAA,0BACAA,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,+BACtB,iBAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,SAAA,oBACJ,IAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,KAAK,SAAA,EAC9B,QAAA,EAAA;AAAA,8BAAAA,IAAC,cAAA,EAAA,EAAe,CAAA;AAAA,cAAE;AAAA,aAAA,EAEpB,CAAA;AAAA,iCAED,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,IAAC,QAAA,EAAA,EAAS,CAAA;AAAA,cAAE;AAAA,aAAA,EAEd;AAAA,WAAA,EACF,CAAA;AAAA,UACC,IAAA,CAAK,6BACJ,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAA,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,4BACvB,IAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,IAAA,CAAK,SAAA,EAC9B,QAAA,EAAA;AAAA,8BAAAA,IAAC,UAAA,EAAA,EAAW,CAAA;AAAA,cAAE;AAAA,aAAA,EAEhB;AAAA,WAAA,EACF;AAAA;AAAA;AAAA;AAEJ,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EASG;AACD,EAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,WAAA,EAA0B,eAAA,EAC7C,QAAA,EAAA;AAAA,oBAAAA,GAAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,eACC,QAAA,kBAAAA,GAAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,iBAAA,EAAA,EAAkB,OAAA,EAAO,IAAA,EAAC,SAAA,EAAU,0CAClC,QAAA,EAAA,UAAA,CAAW;AAAA,MACV,IAAA,EAAM,MAAM,IAAA,IAAQ,GAAA;AAAA,MACpB,0BACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,IAAA;AAAA,wBACPA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,gBAAM,IAAA,EAAK;AAAA,OAAA,EACxD;AAAA,KAEH,CAAA,EACH,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAEAA,IAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,YAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,mBAAA,EAAA,EAAoB,SAAA,EAAU,qBAAA,EAC5B,QAAA,EAAA;AAAA,MAAA,MAAA,oBACCA,IAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,eAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,uBACNA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAO,IAAA;AAAA,UACP,SAAS,MAAA,CAAO,KAAA;AAAA,UAChB,SAAA,EAAU,2KAAA;AAAA,UAET,QAAA,EAAA,UAAA,CAAW;AAAA,YACV,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,0BACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,MAAA,CAAO,IAAA,oBAAQA,GAAAA,CAAC,MAAA,CAAO,MAAP,EAAY,CAAA;AAAA,8BAC7BA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA,aAAA,EACtB;AAAA,WAEH;AAAA;AAAA,OACH,mBAEA,IAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,SAAS,MAAA,CAAO,KAAA;AAAA,UAChB,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,SAAA,EAAU,2KAAA;AAAA,UAET,QAAA,EAAA;AAAA,YAAA,MAAA,CAAO,IAAA,oBAAQA,GAAAA,CAAC,MAAA,CAAO,MAAP,EAAY,CAAA;AAAA,4BAC7BA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA;AAAA;AAAA,SAG1B,CAAA,EACF,CAAA;AAAA,sBAGFA,IAAC,WAAA,EAAA,EACE,QAAA,EAAA,QAAA,CAAS,IAAI,CAAC,IAAA,qBACbA,GAAAA,CAAC,eAAA,EAAA,EACC,0BAAAA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAO,IAAA,EAAC,OAAA,EAAS,KAAK,KAAA,EAAO,QAAA,EAAU,IAAA,CAAK,QAAA,EAC5D,QAAA,EAAA,UAAA,CAAW;AAAA,QACV,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,0BACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,IAAA,CAAK,IAAA,EAAL,EAAU,CAAA;AAAA,0BACXA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA,SAAA,EACpB;AAAA,OAEH,CAAA,EACH,CAAA,EAAA,EAXoB,IAAA,CAAK,KAY3B,CACD,CAAA,EACH;AAAA,KAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,oBAEAA,GAAAA,CAAC,aAAA,EAAA,EACC,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,MAAY,CAAA,EACvB;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAU,EAA0B;AACzD,EAAA,uBACEA,IAAC,QAAA,EAAA,EAAO,SAAA,EAAU,+IAChB,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sDAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,OAAA,EAAQ,CAAA;AAAA,oBAClCA,GAAAA,CAAC,SAAA,EAAA,EAAU,WAAA,EAAY,UAAA,EAAW,WAAU,sCAAA,EAAuC,CAAA;AAAA,oBACnFA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAA,SAAA,EAAU;AAAA,GAAA,EACnD,CAAA,EACF,CAAA;AAEJ;AAIA,IAAM,YAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,WAAA,GAA4B;AAAA,EAChC,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,iBAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACzEA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAuB,QAAA,EAAS,CAAA;AAK1C,SAAS,QAAA,CAAS;AAAA,EACvB,KAAA,GAAQ,YAAA;AAAA,EACR,WAAW,EAAC;AAAA,EACZ,MAAA;AAAA,EACA,IAAA,GAAO,WAAA;AAAA,EACP,SAAA,GAAY,WAAA;AAAA,EACZ,UAAA,GAAa,iBAAA;AAAA,EACb,WAAA,GAAc,MAAA;AAAA,EACd,eAAA,GAAkB,UAAA;AAAA,EAClB,IAAA,GAAO,MAAA;AAAA,EACP;AACF,CAAA,GAAmB,EAAC,EAAG;AACrB,EAAA,MAAM,cAAc,eAAA,KAAoB,WAAA;AAExC,EAAA,MAAM,KAAA,mBACJ,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,cAAc,UAAA,GAAa,UAAA;AAAA,MACnC,SAAA,EAAW,cAAc,iBAAA,GAAoB,uBAAA;AAAA,MAE7C,QAAA,EAAA;AAAA,wBAAAA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,QAAA;AAAA,YACA,MAAA;AAAA,YACA,IAAA;AAAA,YACA,UAAA;AAAA,YACA,WAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACA,IAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAW,WAAA,GAAc,SAAY,iBAAA,EACjD,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,eAAY,SAAA,EAAsB,CAAA;AAAA,UAClC;AAAA,SAAA,EACH;AAAA;AAAA;AAAA,GACF;AAGF,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,KAAA;AACT;ACpWA,SAAS,YAAA,CAAa,EAAE,QAAA,EAAS,EAAkC;AACjE,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8GAAA,EACjB,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,QAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAIA,SAAS,SAAA,CAAU,EAAE,QAAA,EAAU,KAAA,EAAM,EAA2D;AAC9F,EAAA,MAAM,YAAA,mBACJa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,IAACc,OAAAA,EAAA,EAAM,SAAQ,WAAA,EAAY,SAAA,EAAU,SAAQ,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oBACpDD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA,2BAAA,EAAyB,CAAA;AAAA,sBAC/EA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAiC,QAAA,EAAA,sEAAA,EAE9C;AAAA,KAAA,EACF,CAAA;AAAA,oBACAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAAE;AAAA,OAAA,EAAqB,CAAA;AAAA,sBAChGa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAAE;AAAA,OAAA,EAAkB,CAAA;AAAA,sBAC1Fa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAAE;AAAA,OAAA,EAAqB;AAAA,KAAA,EAChG;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,uBACEa,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,qFAAA,EACjB,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EAA8E,CAAA;AAAA,sBAC7FA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAiB,mBAAS,YAAA,EAAa;AAAA,KAAA,EACxD,CAAA;AAAA,oBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDACZ,QAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAYA,SAAS,WAAA,CAAY,EAAE,QAAA,EAAU,KAAA,EAAO,aAAa,GAAA,EAAK,kBAAA,GAAqB,GAAA,EAAK,KAAA,EAAM,EAAkB;AAC1G,EAAA,uBACEa,IAAAA,CAACE,MAAAA,EAAA,EAAK,WAAU,iBAAA,EACd,QAAA,EAAA;AAAA,oBAAAF,IAAAA,CAACG,YAAA,EACE,QAAA,EAAA;AAAA,MAAA,KAAA,oBAAShB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACvCA,GAAAA,CAACiB,SAAAA,EAAA,EAAU,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBAClBjB,GAAAA,CAACkB,eAAAA,EAAA,EAAgB,QAAA,EAAA,4CAAA,EAA0C;AAAA,KAAA,EAC7D,CAAA;AAAA,oBACAL,IAAAA,CAACM,WAAAA,EAAA,EAAY,WAAU,WAAA,EACrB,QAAA,EAAA;AAAA,sBAAAN,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAoB,SAAA,EAAU,WAAA,EAClC,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,YAAA,EAAa,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,0BACjCA,IAACoB,OAAAA,EAAA,EAAM,IAAG,YAAA,EAAa,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,kBAAA,EAAmB;AAAA,SAAA,EACrE,CAAA;AAAA,wBACAP,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,eAAA,EAAgB,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,YACtC,kBAAA,oBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,kFAAA,EAAmF,IAAA,EAAM,oBAAoB,QAAA,EAAA,kBAAA,EAE1H;AAAA,WAAA,EAEJ,CAAA;AAAA,0BACAA,IAACoB,OAAAA,EAAA,EAAM,IAAG,eAAA,EAAgB,IAAA,EAAK,UAAA,EAAW,WAAA,EAAY,kDAAA,EAAW;AAAA,SAAA,EACnE,CAAA;AAAA,wBACAP,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,IAACqB,QAAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,UAAS,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,UAChD,KAAA,oBACCrB,GAAAA,CAACqB,QAAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,QAAA,EAAS,OAAA,EAAS,OAAO,QAAA,EAAA,SAAA,EAAO;AAAA,SAAA,EAEtF;AAAA,OAAA,EACF,CAAA;AAAA,MACC,UAAA,oBACCR,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,2CAAA,EAA4C,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,QAC7C,GAAA;AAAA,wBACVb,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,8CAAA,EAA+C,IAAA,EAAM,YAAY,QAAA,EAAA,mBAAA,EAE9E;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAcO,SAAS,WAAA,CAAY;AAAA,EAC1B,MAAA,GAAS,UAAA;AAAA,EACT,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,OAAO,QAAA,oBAAYA,GAAAA,CAAC,WAAA,EAAA,EAAa,GAAG,SAAA,EAAW,CAAA;AAErD,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWsB,IAAAA,CAAG,QAAA,EAAU,SAAS,CAAA,EACpC,QAAA,kBAAAtB,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAe,gBAAK,CAAA,EACjC,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWsB,IAAAA,CAAG,QAAA,EAAU,SAAS,CAAA,EACpC,QAAA,kBAAAtB,GAAAA,CAAC,YAAA,EAAA,EAAc,QAAA,EAAA,IAAA,EAAK,CAAA,EACtB,CAAA;AAEJ;AC/HO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,aAAa,MAAA,EAAQ,SAAA,EAAW,GAAG,KAAA,EAAM,EAAoB;AAC3G,EAAA,uBACEa,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWS,IAAAA,CAAG,mEAAA,EAAqE,SAAS,CAAA;AAAA,MAC3F,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,IAAA,oBACCtB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EACb,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAA+B,CAAA,EACjD,CAAA;AAAA,wBAEFa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACpC,+BACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAA0C,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAEvE,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;ACjBA,IAAMuB,kBAAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACzEvB,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAuB,QAAA,EAAS,CAAA;AAG1C,SAAS,SAAA,CAAU;AAAA,EACxB,UAAA,GAAa,KAAA;AAAA,EACb,KAAA,GAAQ,gBAAA;AAAA,EACR,WAAA,GAAc,+FAAA;AAAA,EACd,MAAA,GAAS,EAAE,KAAA,EAAO,cAAA,EAAgB,MAAM,GAAA,EAAI;AAAA,EAC5C,UAAA,GAAa,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,EAChC,UAAA,GAAauB;AACf,CAAA,EAAmB;AACjB,EAAA,uBACEvB,IAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yFAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+FAAA,EAAgG,CAAA;AAAA,oBAC/Ga,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EACb,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,8BAAA,EAA+B,GACpD,CAAA,EACF,CAAA;AAAA,sBAEAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EAA8D,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,wBACxFA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,+CAA+C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBACnEA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDACV,QAAA,EAAA,WAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACZ,QAAA,EAAA;AAAA,QAAA,UAAA,KACC,UAAA,CAAW,OACT,UAAA,CAAW;AAAA,UACT,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,QAAA,kBACEA,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,SAAA,EACd,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,YAClC,UAAA,CAAW;AAAA,WAAA,EACd;AAAA,SAEH,oBAEDa,IAAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,UAAA,CAAW,OAAA,EAC5C,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,UAClC,UAAA,CAAW;AAAA,SAAA,EACd,CAAA,CAAA;AAAA,QAGH,UACC,UAAA,CAAW;AAAA,UACT,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,QAAA,kBAAUA,GAAAA,CAAC,MAAA,EAAA,EAAQ,iBAAO,KAAA,EAAM;AAAA,SACjC;AAAA,OAAA,EAEL;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACvBO,SAAS,aAAA,CAAc;AAAA,EAC5B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,gBAAA,GAAmB,SAAA;AAAA,EACnB,iBAAA,GAAoB,SAAA;AAAA,EACpB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA,GAAa,OAAA;AAAA,EACb;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,oBAAA,IAAwB,iBAAiB,CAAA;AAE5E,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,uBACEA,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWsB,IAAAA;AAAA,UACT,uDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAT,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BAC7CA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yDACV,QAAA,EAAA,WAAA,EACH;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,kBAAA,mBACCb,GAAAA;AAAA,cAACqB,QAAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,OAAA;AAAA,gBACR,OAAA,EAAS,iBAAA;AAAA,gBACT,SAAA,EAAU,QAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA,aACH,GACE,IAAA;AAAA,4BACJrB,IAACqB,QAAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAS,iBAC5B,QAAA,EAAA,kBAAA,EACH;AAAA,WAAA,EACF;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACER,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWS,IAAAA;AAAA,QACT,kEAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAT,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,KAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,OAAA,mBACCb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACZ,mBACH,CAAA,GACE,IAAA;AAAA,4BACJA,GAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAWsB,IAAAA;AAAA,kBACT,0CAAA;AAAA,kBACA,UAAU,MAAA,GAAS;AAAA,iBACrB;AAAA,gBAEC,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,4BACAtB,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uEACV,QAAA,EAAA,WAAA,EACH;AAAA,WAAA,EACF,CAAA;AAAA,UAEC,0BACCA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,OAAA;AAAA,cACT,SAAA,EAAU,4GAAA;AAAA,cACV,YAAA,EAAY,UAAA;AAAA,cAEZ,QAAA,kBAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,WACxB,GACE;AAAA,SAAA,EACN,CAAA;AAAA,QAEC,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,mBACrBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAa,IAAAA,CAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAb,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,4BACXA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,oEAClB,QAAA,EAAA,gBAAA,EACH,CAAA;AAAA,4BACAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,2DAClB,QAAA,EAAA,iBAAA,EACH;AAAA,WAAA,EACF,CAAA,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,SAAA,EAAA,EACE,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,qBACda,IAAAA,CAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAe,cAAI,KAAA,EAAM,CAAA;AAAA,4BAC9CA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,iCAAA,EAClB,cAAI,YAAA,EACP,CAAA;AAAA,4BACAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAA,EAAa,cAAI,aAAA,EAAc;AAAA,WAAA,EAAA,EALvC,GAAA,CAAI,GAAA,IAAO,KAM1B,CACD,CAAA,EACH;AAAA,SAAA,EACF,GACF,CAAA,GACE,IAAA;AAAA,wBAEJa,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWS,IAAAA;AAAA,cACT,sDAAA;AAAA,cACA,MAAA,IAAU,qBAAqB,oBAAA,GAAuB;AAAA,aACxD;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,MAAA,mBAAStB,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAiC,kBAAO,CAAA,GAAO,IAAA;AAAA,8BACtEa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,kBAAA,mBACCb,GAAAA;AAAA,kBAACqB,QAAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAQ,OAAA;AAAA,oBACR,OAAA,EAAS,iBAAA;AAAA,oBACT,SAAA,EAAU,QAAA;AAAA,oBAET,QAAA,EAAA;AAAA;AAAA,iBACH,GACE,IAAA;AAAA,gCACJrB,IAACqB,QAAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAS,iBAC5B,QAAA,EAAA,kBAAA,EACH;AAAA,eAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AC7LA,IAAM,YAAA,GAAe;AAAA,EACnB,EAAA,EAAI,eAAA;AAAA,EACJ,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,eAAA;AAAA,EACN,KAAA,EAAO,gBAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAEO,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA,GAAQ,CAAA;AAAA,EACR,QAAA,GAAW,GAAA;AAAA,EACX,SAAA,GAAY,IAAA;AAAA,EACZ,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,MAAM,GAAA,GAAYG,eAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAElD,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AAET,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,CAAC,KAAK,CAAA,KAAM;AACX,QAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA,IAAI,IAAA,WAAe,UAAA,EAAW;AAAA,QAChC,CAAA,MAAA,IAAW,CAAC,IAAA,EAAM;AAChB,UAAA,UAAA,CAAW,KAAK,CAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAAA,MACA,EAAE,WAAW,GAAA;AAAI,KACnB;AAEA,IAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,uBACExB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAWsB,IAAAA;AAAA,QACT,gBAAA;AAAA,QACA,OAAA,GAAU,yCAAA,GAA4C,CAAA,UAAA,EAAa,YAAA,CAAa,SAAS,CAAC,CAAA,CAAA;AAAA,QAC1F;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,kBAAA,EAAoB,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAA,EAAM,eAAA,EAAiB,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,EAAM,GAAG,KAAA,EAAM;AAAA,MACrF,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;ACvDO,SAAS,aAAa,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAU,EAAsB;AACxF,EAAA,uBACEtB,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,IAAA,EAChB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWS,IAAAA,CAAG,aAAA,EAAe,SAAS,CAAA,EACxC,QAAA,EAAA;AAAA,IAAA,KAAA,oBAAStB,IAACc,OAAAA,EAAA,EAAM,SAAQ,WAAA,EAAY,SAAA,EAAU,QAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC7Dd,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kEACX,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,IACC,+BACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4DACV,QAAA,EAAA,WAAA,EACH;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;ACTA,IAAMuB,kBAAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACzEvB,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAuB,QAAA,EAAS,CAAA;AAG1C,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA,GAAauB;AACf,CAAA,EAAqB;AACnB,EAAA,uBACEvB,IAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,mBACjB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qEAAA,EAEb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,UAAO,SAAA,EAAU,MAAA,EAChB,0BAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCb,GAAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAACc,SAAA,EAAM,OAAA,EAAQ,WAAA,EAAa,QAAA,EAAA,KAAA,EAAM,CAAA,EACpC,CAAA;AAAA,wBAEFd,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8EACX,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sDACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,wBACAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,CAAW;AAAA,YACV,MAAM,UAAA,CAAW,IAAA;AAAA,YACjB,0BACEA,IAAAA,CAACQ,QAAAA,EAAA,EAAO,MAAK,IAAA,EACV,QAAA,EAAA;AAAA,cAAA,UAAA,CAAW,KAAA;AAAA,8BACZrB,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EAAc;AAAA,aAAA,EACtC;AAAA,WAEH,CAAA;AAAA,UACA,gBACC,UAAA,CAAW;AAAA,YACT,MAAM,YAAA,CAAa,IAAA;AAAA,YACnB,QAAA,kBACEA,GAAAA,CAACqB,QAAAA,EAAA,EAAO,MAAK,IAAA,EAAK,OAAA,EAAQ,SAAA,EACvB,QAAA,EAAA,YAAA,CAAa,KAAA,EAChB;AAAA,WAEH;AAAA,SAAA,EACL;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,sBAGArB,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,OAAA,EAAQ,KAAA,EAAO,GAAA,EAC/B,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACZ,qBACH,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAAA,CAGE,UAAA,EAAY,MAAA,IAAU,eAAA,qBACtBA,IAAC,MAAA,EAAA,EAAO,SAAA,EAAU,IAAA,EAAK,KAAA,EAAO,GAAA,EAC5B,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iDAAA,EACZ,QAAA,EAAA;AAAA,MAAA,UAAA,IAAc,WAAW,MAAA,GAAS,CAAA,oBACjCb,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACZ,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,KAAK,CAAA,qBACpBa,KAACY,MAAAA,EAAA,EAAe,WAAU,mCAAA,EACxB,QAAA,EAAA;AAAA,wBAAAzB,IAAC0B,WAAAA,EAAA,EAAY,GAAA,EAAK,GAAA,EAAK,KAAI,EAAA,EAAG,CAAA;AAAA,wBAC9B1B,GAAAA,CAAC2B,cAAAA,EAAA,EAAe,SAAA,EAAU,SAAA,EACvB,QAAA,EAAA,MAAA,CAAO,YAAA,CAAa,EAAA,GAAM,CAAA,GAAI,EAAG,CAAA,EACpC;AAAA,OAAA,EAAA,EAJW,CAKb,CACD,CAAA,EACH,CAAA;AAAA,MAED,mCACC3B,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CACV,QAAA,EAAA,eAAA,EACH;AAAA,KAAA,EAEJ,CAAA,EACF;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;ACjGO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,aAAa,IAAA,EAAM,SAAA,EAAW,GAAG,KAAA,EAAM,EAAqB;AAC3G,EAAA,MAAM,0BACJa,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWS,IAAAA;AAAA,QACT,sIAAA;AAAA,QACA,IAAA,IAAQ,gBAAA;AAAA,QACR;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAtB,GAAAA,CAAC,SAAI,SAAA,EAAU,+JAAA,EACb,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA,EAC3B,CAAA;AAAA,wBACAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,YAClD,wBACCA,GAAAA,CAAC4B,UAAAA,EAAA,EAAW,WAAU,oHAAA,EAAqH;AAAA,WAAA,EAE/I,CAAA;AAAA,0BACA5B,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iDAAiD,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAC5E;AAAA;AAAA;AAAA,GACF;AAGF,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,uBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAU,SAAS,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,OAAA;AACT;AC9BA,IAAM6B,aAAAA,GAAe;AAAA,EACnB,EAAA,EAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EACV,IAAA,EAAM,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,EACb,IAAA,EAAM,CAAC,EAAA,EAAI,CAAC,CAAA;AAAA,EACZ,KAAA,EAAO,CAAC,GAAA,EAAK,CAAC,CAAA;AAAA,EACd,IAAA,EAAM,CAAC,CAAA,EAAG,CAAC;AACb,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA,GAAU,EAAA;AAAA,EACV,KAAA,GAAQ,CAAA;AAAA,EACR,QAAA,GAAW,GAAA;AAAA,EACX,SAAA,GAAY,IAAA;AAAA,EACZ,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyB;AACvB,EAAA,MAAM,GAAA,GAAYC,eAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAElD,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AAET,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,CAAC,KAAK,CAAA,KAAM;AACX,QAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA,IAAI,IAAA,WAAe,UAAA,EAAW;AAAA,QAChC,CAAA,MAAA,IAAW,CAAC,IAAA,EAAM;AAChB,UAAA,UAAA,CAAW,KAAK,CAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAAA,MACA,EAAE,WAAW,GAAA;AAAI,KACnB;AAEA,IAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAID,cAAa,SAAS,CAAA;AAEvC,EAAA,uBACE7B,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAWsB,KAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAC1C,UAAMQ,OAAA,CAAA,QAAA,CAAS,GAAA,CAAI,UAAU,CAAC,KAAA,EAAO,sBACpC9B,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,CAAA,QAAA,EAAW,QAAQ,CAAA,mBAAA,EAAsB,QAAQ,CAAA,OAAA,CAAA;AAAA,QAC7D,eAAA,EAAiB,CAAA,EAAG,KAAA,GAAQ,CAAA,GAAI,OAAO,CAAA,EAAA,CAAA;AAAA,QACvC,OAAA,EAAS,UAAU,CAAA,GAAI,CAAA;AAAA,QACvB,WAAW,OAAA,GAAU,gBAAA,GAAmB,CAAA,UAAA,EAAa,EAAE,MAAM,EAAE,CAAA,GAAA;AAAA,OACjE;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GAEJ,CAAA,EACH,CAAA;AAEJ;AC3DO,SAAS,eAAA,CAAgB;AAAA,EAC9B,KAAA,GAAQ,kCAAA;AAAA,EACR,WAAA,GAAc,yGAAA;AAAA,EACd,KAAA,GAAQ,UAAA;AAAA,EACR;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,WAAA,EAA0B,KAAA,EAAc,CAAA;AAAA,oBAEpEA,IAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,kDACxB,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBACbA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QAEC,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,MAAM,OAAA,CAAQ;AAAA,OAAA;AAAA,MAJT,OAAA,CAAQ;AAAA,KAMhB,CAAA,EACH;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;ACzBA,IAAMuB,kBAAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACzEvB,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAuB,QAAA,EAAS,CAAA;AAG1C,SAAS,UAAA,CAAW;AAAA,EACzB,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAauB;AACf,CAAA,EAAoB;AAClB,EAAA,uBACEvB,IAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mGAAA,EAAoG,CAAA;AAAA,oBACnHA,IAAC,MAAA,EAAA,EAAO,SAAA,EAAU,MAChB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+FAAA,EACb,QAAA,kBAAAA,IAAC+B,QAAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,CAAA,EAC/B,CAAA;AAAA,sBACA/B,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kEACX,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,sBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2DACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBACAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACZ,QAAA,EAAA;AAAA,QAAA,UAAA,CAAW;AAAA,UACV,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,0BACEA,IAAAA,CAACQ,QAAAA,EAAA,EAAO,MAAK,IAAA,EACV,QAAA,EAAA;AAAA,YAAA,UAAA,CAAW,KAAA;AAAA,4BACZrB,GAAAA,CAAC4B,UAAAA,EAAA,EAAW,WAAU,aAAA,EAAc;AAAA,WAAA,EACtC;AAAA,SAEH,CAAA;AAAA,QACA,gBACC,UAAA,CAAW;AAAA,UACT,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,QAAA,kBACE5B,GAAAA,CAACqB,QAAAA,EAAA,EAAO,MAAK,IAAA,EAAK,OAAA,EAAQ,SAAA,EACvB,QAAA,EAAA,YAAA,CAAa,KAAA,EAChB;AAAA,SAEH;AAAA,OAAA,EACL,CAAA;AAAA,MACC,4BACCrB,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCACV,QAAA,EAAA,QAAA,EACH;AAAA,KAAA,EAEJ,CAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AClDO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA,GAAS,KAAA;AAAA,EACT,WAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,uBACEa,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWS,IAAAA;AAAA,QACT,+CAAA;AAAA,QACA,cAAc,uCAAA,GAA0C,SAAA;AAAA,QACxD;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCtB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,0BAAAA,GAAAA,CAACc,OAAAA,EAAA,EAAO,QAAA,EAAA,KAAA,EAAM,CAAA,EAChB,CAAA;AAAA,wBAGFD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EAA6C,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,0BACjEa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BAC3DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAsC,QAAA,EAAA,MAAA,EAAO;AAAA,WAAA,EAC/D,CAAA;AAAA,0BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAC5D,CAAA;AAAA,wBAEAA,GAAAA;AAAA,UAACqB,QAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,cAAc,SAAA,GAAY,SAAA;AAAA,YACnC,SAAA,EAAU,aAAA;AAAA,YACV,OAAA,EAAS,QAAA;AAAA,YAER,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,wBAEArB,GAAAA,CAACgC,SAAAA,EAAA,EAAU,WAAU,MAAA,EAAO,CAAA;AAAA,wBAE5BhC,GAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,mBAAA,EACX,QAAA,EAAA,QAAA,CAAS,IAAI,CAAC,IAAA,qBACbA,GAAAA,CAAC,IAAA,EAAA,EAAoB,WAAU,yBAAA,EAC5B,QAAA,EAAA,IAAA,CAAK,2BACJa,IAAAA,CAAAoB,UAAA,EACE,QAAA,EAAA;AAAA,0BAAAjC,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,0BAChDA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA,SAAA,EACpB,CAAA,mBAEAa,IAAAA,CAAAoB,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAjC,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,0CAAA,EAA2C,CAAA;AAAA,0BAC5DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA4B,eAAK,KAAA,EAAM;AAAA,SAAA,EACzD,CAAA,EAAA,EAVK,IAAA,CAAK,KAYd,CACD,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AC5DA,IAAMuB,kBAAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACzEvB,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAuB,QAAA,EAAS,CAAA;AAG1C,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA,GAAQ,6BAAA;AAAA,EACR,WAAA,GAAc,oDAAA;AAAA,EACd,KAAA,GAAQ,SAAA;AAAA,EACR,KAAA;AAAA,EACA,SAAA,GAAY,UAAA;AAAA,EACZ,eAAA;AAAA,EACA,UAAA,GAAauB,kBAAAA;AAAA,EACb;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUW,iBAAS,KAAK,CAAA;AAEhD,EAAA,uBACElC,GAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCb,IAACc,OAAAA,EAAA,EAAM,SAAQ,WAAA,EAAY,SAAA,EAAU,QAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAErDd,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kEACX,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MACC,+BACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2DACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBAIFa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,wBAAAb,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,YAC9B,SAAA,EAAWsB,IAAAA;AAAA,cACT,gEAAA;AAAA,cACA,CAAC,SAAS,yCAAA,GAA4C;AAAA,aACxD;AAAA,YACD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAT,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,YAC7B,SAAA,EAAWS,IAAAA;AAAA,cACT,wFAAA;AAAA,cACA,SAAS,yCAAA,GAA4C;AAAA,aACvD;AAAA,YACD,QAAA,EAAA;AAAA,cAAA,QAAA;AAAA,cAEE,SAAA,oBACCtB,GAAAA,CAACc,OAAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,SAAA,EAAU;AAAA;AAAA;AAAA;AAE9D,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAd,IAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,mCACxB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,MAAA,MAAM,KAAA,GAAQ,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,OAAA;AAC1C,MAAA,uBACEA,GAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UAEC,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,KAAA,EAAO,IAAI,KAAK,CAAA,CAAA;AAAA,UAChB,MAAA,EAAQ,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ,EAAA;AAAA,UAC5B,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,KAAA,EAAO,IAAA,CAAK,WAAA,GAAc,cAAA,GAAiB;AAAA,SAAA;AAAA,QARtC,IAAA,CAAK;AAAA,OASZ;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IAGC,4BACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDACV,QAAA,EAAA,QAAA,EACH;AAAA,GAAA,EAEJ,GACF,CAAA,EACF,CAAA;AAEJ;ACvGO,SAAS,eAAA,CAAgB;AAAA,EAC9B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyB;AACvB,EAAA,uBACEa,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWS,IAAAA,CAAG,oDAAA,EAAsD,SAAS,CAAA;AAAA,MAC5E,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAtB,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,iCAAA,EAAkC,CAAA;AAAA,QAClD,UAAU,IAAA,oBACTA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EACZ,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,sBAC7BA,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAWsB,IAAAA;AAAA,cACT,QAAA;AAAA,cACA,CAAA,GAAI,SACA,6BAAA,GACA;AAAA;AACN,WAAA;AAAA,UANK;AAAA,SAQR,CAAA,EACH,CAAA;AAAA,wBAEFtB,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAkC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBACrDa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAACY,MAAAA,EAAA,EAAO,SAAA,EAAU,mBAAA,EAChB,QAAA,EAAA;AAAA,4BAAAzB,IAAC0B,WAAAA,EAAA,EAAY,GAAA,EAAK,MAAA,EAAQ,KAAK,IAAA,EAAM,CAAA;AAAA,4BACrC1B,GAAAA,CAAC2B,cAAAA,EAAA,EAAe,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,aAAY,EAAE;AAAA,WAAA,EAC7F,CAAA;AAAA,0BACAd,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,4BACzDa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACZ,QAAA,EAAA;AAAA,cAAA,IAAA;AAAA,cAAM,OAAA,GAAU,CAAA,MAAA,EAAM,OAAO,CAAA,CAAA,GAAK;AAAA,aAAA,EACrC;AAAA,WAAA,EACF;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AC1CO,SAAS,mBAAA,CAAoB;AAAA,EAClC,KAAA,GAAQ,yCAAA;AAAA,EACR,WAAA,GAAc,+EAAA;AAAA,EACd,KAAA,GAAQ,cAAA;AAAA,EACR;AACF,CAAA,EAA6B;AAC3B,EAAA,uBACEb,GAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,WAAA,EAA0B,KAAA,EAAc,CAAA;AAAA,oBAEpEA,IAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,mDACxB,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,qBACjBA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAU,qEAAA;AAAA,QAEV,QAAA,kBAAAA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAO,CAAA,CAAE,KAAA;AAAA,YACT,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,SAAS,CAAA,CAAE,OAAA;AAAA,YACX,QAAQ,CAAA,CAAE,MAAA;AAAA,YACV,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,QAAQ,CAAA,CAAE;AAAA;AAAA;AACZ,OAAA;AAAA,MAXK,CAAA,CAAE;AAAA,KAaV,CAAA,EACH;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AClDA,IAAM,IAAA,GAAO;AAAA,EACX;AAAA,IACE,IAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAM,kBAAA;AAAA,IACN,GAAA,EAAK,oGAAA;AAAA,IACL,MAAA,EAAQ,sCAAA;AAAA,IACR,QAAA,EAAU,IAAA;AAAA,IACV,QAAQ,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,GAAA,EAAK,UAAU,GAAA;AAAI,GACrD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAM,kBAAA;AAAA,IACN,GAAA,EAAK,uFAAA;AAAA,IACL,MAAA,EAAQ,sCAAA;AAAA,IACR,QAAA,EAAU,IAAA;AAAA,IACV,QAAQ,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,GAAA,EAAK,UAAU,GAAA;AAAI,GACrD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAM,gBAAA;AAAA,IACN,GAAA,EAAK,oGAAA;AAAA,IACL,MAAA,EAAQ,sCAAA;AAAA,IACR,QAAA,EAAU,IAAA;AAAA,IACV,QAAQ,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,IAAA,EAAM,UAAU,GAAA;AAAI,GACtD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,iBAAA;AAAA,IACN,GAAA,EAAK,4FAAA;AAAA,IACL,MAAA,EAAQ,sCAAA;AAAA,IACR,QAAA,EAAU,IAAA;AAAA,IACV,QAAQ,EAAE,OAAA,EAAS,MAAM,MAAA,EAAQ,GAAA,EAAK,UAAU,GAAA;AAAI,GACtD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,qBAAA;AAAA,IACN,GAAA,EAAK,0GAAA;AAAA,IACL,MAAA,EAAQ,sCAAA;AAAA,IACR,QAAA,EAAU,IAAA;AAAA,IACV,QAAQ,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,GAAA,EAAK,UAAU,GAAA;AAAI,GACrD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,GAAA,EAAK,0FAAA;AAAA,IACL,MAAA,EAAQ,sCAAA;AAAA,IACR,QAAA,EAAU,IAAA;AAAA,IACV,QAAQ,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,IAAA,EAAM,UAAU,GAAA;AAAI;AAExD,CAAA;AAEO,SAAS,WAAA,GAAc;AAC5B,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,IAACc,OAAAA,EAAA,EAAM,SAAQ,WAAA,EAAY,SAAA,EAAU,QAAO,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBAChDd,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kEAAiE,QAAA,EAAA,0BAAA,EAE/E,CAAA;AAAA,sBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2DAA0D,QAAA,EAAA,0FAAA,EAEvE;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACZ,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,MAAA,qBACTa,IAAAA,CAAC,KAAA,EAAA,EAAsB,WAAU,oCAAA,EAC/B,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAACY,MAAAA,EAAA,EAAO,SAAA,EAAU,oBAAA,EAChB,QAAA,EAAA;AAAA,0BAAAzB,GAAAA,CAAC0B,aAAA,EAAY,GAAA,EAAK,OAAO,MAAA,EAAQ,GAAA,EAAK,OAAO,IAAA,EAAM,CAAA;AAAA,0BACnD1B,GAAAA,CAAC2B,cAAAA,EAAA,EAAe,SAAA,EAAU,YAAA,EAAc,iBAAO,QAAA,EAAS;AAAA,SAAA,EAC1D,CAAA;AAAA,wBACAd,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA+B,iBAAO,IAAA,EAAK,CAAA;AAAA,0BAC1DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAiC,iBAAO,IAAA,EAAK;AAAA,SAAA,EAC9D;AAAA,OAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oDAAA,EAAsD,iBAAO,GAAA,EAAI,CAAA;AAAA,sBAC9Ea,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACZ,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,OAAO,OAAA,oBACbb,IAAC,GAAA,EAAA,EAAE,IAAA,EAAM,OAAO,MAAA,CAAO,OAAA,EAAS,YAAA,EAAW,SAAA,EAAU,WAAU,0IAAA,EAC7D,QAAA,kBAAAA,IAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,YAAW,CAAA,EAChC,CAAA;AAAA,QAED,OAAO,MAAA,CAAO,MAAA,oBACbA,GAAAA,CAAC,GAAA,EAAA,EAAE,MAAM,MAAA,CAAO,MAAA,CAAO,QAAQ,YAAA,EAAW,QAAA,EAAS,WAAU,0IAAA,EAC3D,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAO,SAAA,EAAU,YAAW,CAAA,EAC/B,CAAA;AAAA,QAED,OAAO,MAAA,CAAO,QAAA,oBACbA,GAAAA,CAAC,GAAA,EAAA,EAAE,MAAM,MAAA,CAAO,MAAA,CAAO,UAAU,YAAA,EAAW,UAAA,EAAW,WAAU,0IAAA,EAC/D,QAAA,kBAAAA,IAAC,QAAA,EAAA,EAAS,SAAA,EAAU,YAAW,CAAA,EACjC;AAAA,OAAA,EAEJ;AAAA,KAAA,EAAA,EA5BQ,MAAA,CAAO,IA6BjB,CACD,CAAA,EACH;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AChGO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA,GAAQ,4BAAA;AAAA,EACR,WAAA,GAAc,qDAAA;AAAA,EACd,KAAA,GAAQ,KAAA;AAAA,EACR;AACF,CAAA,EAAoB;AAClB,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,WAAA,EAA0B,KAAA,EAAc,CAAA;AAAA,oBAEpEA,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,IAAA,EAChB,0BAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAK,QAAA,EAAS,WAAA,EAAW,IAAA,EAAC,WAAU,cAAA,EAC5C,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBa,IAAAA,CAAC,aAAA,EAAA,EAAsB,KAAA,EAAO,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,EACrC,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,+BAAA,EACzB,eAAK,QAAA,EACR,CAAA;AAAA,sBACAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,+BAAA,EACzB,eAAK,MAAA,EACR;AAAA,KAAA,EAAA,EANkB,CAOpB,CACD,CAAA,EACH,CAAA,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AC5BO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA,GAAO,CAAA;AAAA,EACP,EAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,QAAA,GAAW,CAAA;AAAA,EACX,MAAA,GAAS,EAAA;AAAA,EACT,MAAA,GAAS,EAAA;AAAA,EACT,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,MAAM,GAAA,GAAYmC,eAAwB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,iBAAS,IAAI,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAmBA,eAAO,KAAK,CAAA;AAErC,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AAET,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,CAAC,KAAK,CAAA,KAAM;AACX,QAAA,IAAI,MAAM,cAAA,KAAmB,CAAC,IAAA,IAAQ,CAAC,WAAW,OAAA,CAAA,EAAU;AAC1D,UAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,UAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAE9B,UAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAgB;AAC5B,YAAA,MAAM,UAAU,GAAA,GAAM,KAAA;AACtB,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,UAAU,CAAC,CAAA;AAC/C,YAAA,MAAM,QAAQ,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,UAAU,CAAC,CAAA;AAC1C,YAAA,QAAA,CAAS,IAAA,GAAA,CAAQ,EAAA,GAAK,IAAA,IAAQ,KAAK,CAAA;AACnC,YAAA,IAAI,QAAA,GAAW,CAAA,EAAG,qBAAA,CAAsB,IAAI,CAAA;AAAA,UAC9C,CAAA;AAEA,UAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,QAC5B;AAAA,MACF,CAAA;AAAA,MACA,EAAE,WAAW,GAAA;AAAI,KACnB;AAEA,IAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,GAAG,CAAC,IAAA,EAAM,EAAA,EAAI,QAAA,EAAU,IAAI,CAAC,CAAA;AAE7B,EAAA,uBACEtB,KAAC,MAAA,EAAA,EAAK,GAAA,EAAU,WAAWS,IAAAA,CAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAC3C,QAAA,EAAA;AAAA,IAAA,MAAA;AAAA,IAAQ,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,IAAG;AAAA,GAAA,EACpC,CAAA;AAEJ;ACjDA,SAAS,eAAe,KAAA,EAAe;AACrC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,sBAAsB,CAAA;AAChD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAC3B,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,CAAE,SAAS,GAAG,CAAA,GAAI,KAAA,CAAM,CAAC,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,EAAE,MAAA,GAAS,CAAA;AAC1E,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAS;AACjC;AAEA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAM,EAAsB;AAC/C,EAAA,MAAM,MAAA,GAAS,eAAe,KAAK,CAAA;AACnC,EAAA,IAAI,CAAC,MAAA,EAAQ,uBAAOtB,GAAAA,CAAAiC,QAAAA,EAAA,EAAG,QAAA,EAAA,KAAA,EAAM,CAAA;AAC7B,EAAA,uBAAOjC,GAAAA,CAAC,OAAA,EAAA,EAAQ,EAAA,EAAI,MAAA,CAAO,GAAA,EAAK,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,CAAA;AACpF;AAEO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA,GAAQ,qCAAA;AAAA,EACR,WAAA;AAAA,EACA,KAAA,GAAQ,gBAAA;AAAA,EACR;AACF,CAAA,EAAsB;AACpB,EAAA,uBACEA,IAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mGAAA,EAAoG,CAAA;AAAA,oBACnHa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,WAAA,EAA0B,KAAA,EAAc,CAAA;AAAA,sBAEpEA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,8FAAA,EACxB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVa,IAAAA,CAAC,KAAA,EAAA,EAAqB,WAAU,uCAAA,EAC9B,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,kBAAAA,IAAC,SAAA,EAAA,EAAU,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA,EAChC,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,eAAK,KAAA,EAAM,CAAA;AAAA,QACxC,IAAA,CAAK,WAAA,oBACJa,IAAAA,CAAAoB,UAAA,EACE,QAAA,EAAA;AAAA,0BAAAjC,GAAAA,CAACgC,WAAA,EAAU,CAAA;AAAA,0BACXhC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAiC,eAAK,WAAA,EAAY;AAAA,SAAA,EACjE;AAAA,OAAA,EAAA,EATM,IAAA,CAAK,KAWf,CACD,CAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACxDO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUoC,iBAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAEtD,EAAA,SAAS,aAAa,CAAA,EAAoB;AACxC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB;AAEA,EAAA,uBACEpC,IAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qGAAA,EAAsG,CAAA;AAAA,oBACrHa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,SAAI,SAAA,EAAU,+FAAA,EACb,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA,EAC3B,CAAA;AAAA,sBAEAA,IAACc,OAAAA,EAAA,EAAM,SAAQ,WAAA,EAAY,SAAA,EAAU,QAAO,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,sBACtDd,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kEAAiE,QAAA,EAAA,kBAAA,EAE/E,CAAA;AAAA,sBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2DAA0D,QAAA,EAAA,+GAAA,EAEvE,CAAA;AAAA,MAEC,SAAA,mBACCa,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACb,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,QAAQ,GAAA;AAAA,wBACzDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,yBAAA,EAAuB;AAAA,OAAA,EACjE,oBAEAa,IAAAA,CAAC,UAAK,QAAA,EAAU,YAAA,EAAc,WAAU,sCAAA,EACtC,QAAA,EAAA;AAAA,wBAAAb,GAAAA;AAAA,UAACoB,OAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,WAAA,EAAY,iBAAA;AAAA,YACZ,KAAA,EAAO,KAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,QAAA,EAAQ,IAAA;AAAA,YACR,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAP,IAAAA,CAACQ,QAAAA,EAAA,EAAO,MAAK,QAAA,EAAS,QAAA,EAAA;AAAA,UAAA,WAAA;AAAA,0BAEpBrB,GAAAA,CAAC4B,UAAAA,EAAA,EAAW,WAAU,aAAA,EAAc;AAAA,SAAA,EACtC;AAAA,OAAA,EACF,CAAA;AAAA,sBAGFf,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA;AAAA,QAAA,iCAAA;AAAA,QAChB,GAAA;AAAA,wBAChCb,GAAAA,CAAC,GAAA,EAAA,EAAE,MAAK,GAAA,EAAI,SAAA,EAAU,sDAAqD,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,QAAI;AAAA,OAAA,EAC/F;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACzDA,IAAM,WAAA,GAAc;AAAA,EAClB,EAAE,IAAA,EAAMqC,IAAAA,EAAM,KAAA,EAAO,OAAA,EAAS,OAAO,kBAAA,EAAmB;AAAA,EACxD,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,OAAO,mBAAA,EAAoB;AAAA,EAC1D,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,OAAO,mBAAA;AAC1C,CAAA;AAEO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUC,iBAAS,KAAK,CAAA;AAEtD,EAAA,SAAS,aAAa,CAAA,EAAoB;AACxC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB;AAEA,EAAA,uBACEtC,IAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+GAAA,EAAgH,CAAA;AAAA,sBAC/Ha,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAb,IAACc,OAAAA,EAAA,EAAM,SAAQ,WAAA,EAAY,SAAA,EAAU,wFAAuF,QAAA,EAAA,YAAA,EAE5H,CAAA;AAAA,0BACAd,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,0BAAyB,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BACjDA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAA0C,QAAA,EAAA,+GAAA,EAEvD;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAA,GAAAA,CAACgC,SAAAA,EAAA,EAAU,WAAU,0BAAA,EAA2B,CAAA;AAAA,wBAEhDhC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,sBAAY,GAAA,CAAI,CAAC,EAAE,IAAA,EAAM,OAAO,KAAA,EAAM,qBACrCa,IAAAA,CAAC,KAAA,EAAA,EAAgB,WAAU,yBAAA,EACzB,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,SAAI,SAAA,EAAU,uFAAA,EACb,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA,EAC3B,CAAA;AAAA,0BACAa,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EAAsC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BAC3DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAuB,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EAC9C;AAAA,SAAA,EAAA,EAPQ,KAQV,CACD,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACZ,sCACCa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kFAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,SAAI,SAAA,EAAU,mFAAA,EACb,0BAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,QAAA,EAAS,CAAA,EACpC,CAAA;AAAA,sBACAa,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAA,EAAgB,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,wBAC1CA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAqC,QAAA,EAAA,yEAAA,EAElD;AAAA,OAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAACqB,QAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,QAAA,EAAA,cAAA,EAAY;AAAA,KAAA,EAC5E,oBAEAR,IAAAA,CAAC,UAAK,QAAA,EAAU,YAAA,EAAc,WAAU,WAAA,EACtC,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAACuC,KAAAA,EAAA,EAAM,OAAA,EAAQ,iBAAgB,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BACzCvC,IAACoB,OAAAA,EAAA,EAAM,IAAG,eAAA,EAAgB,WAAA,EAAY,QAAA,EAAS,QAAA,EAAQ,IAAA,EAAC;AAAA,SAAA,EAC1D,CAAA;AAAA,wBACAP,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAACuC,KAAAA,EAAA,EAAM,OAAA,EAAQ,gBAAe,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,0BACvCvC,IAACoB,OAAAA,EAAA,EAAM,IAAG,cAAA,EAAe,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,IAAA,EAAC;AAAA,SAAA,EACvD;AAAA,OAAA,EACF,CAAA;AAAA,sBACAP,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAACuC,KAAAA,EAAA,EAAM,OAAA,EAAQ,iBAAgB,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBACpCvC,GAAAA,CAACoB,OAAAA,EAAA,EAAM,EAAA,EAAG,eAAA,EAAgB,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,oBAAA,EAAqB,QAAA,EAAQ,IAAA,EAAC;AAAA,OAAA,EACnF,CAAA;AAAA,sBACAP,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAACuC,KAAAA,EAAA,EAAM,OAAA,EAAQ,mBAAkB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,wBACxCvC,IAACoB,OAAAA,EAAA,EAAM,IAAG,iBAAA,EAAkB,WAAA,EAAY,kBAAA,EAAmB,QAAA,EAAQ,IAAA,EAAC;AAAA,OAAA,EACtE,CAAA;AAAA,sBACAP,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAACuC,KAAAA,EAAA,EAAM,OAAA,EAAQ,mBAAkB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,wBACxCvC,GAAAA;AAAA,UAACwC,UAAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,iBAAA;AAAA,YACH,WAAA,EAAY,mCAAA;AAAA,YACZ,SAAA,EAAU,sBAAA;AAAA,YACV,QAAA,EAAQ;AAAA;AAAA;AACV,OAAA,EACF,CAAA;AAAA,sBACA3B,IAAAA,CAACQ,QAAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAAS,QAAA,EAAA;AAAA,QAAA,cAAA;AAAA,wBAEvCrB,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc;AAAA,OAAA,EAChC;AAAA,KAAA,EACF,CAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACvGO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,CAAC,KAAA,EAAO,aAAa,CAAA,GAAUyC,iBAA2B,MAAM,CAAA;AAEtE,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,OAAO,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,WAAW,QAAA,CAAS,eAAA,CAAgB,UAAU,QAAA,CAAS,MAAM,IAAI,MAAA,GAAS,OAAA,CAAA;AAC3F,IAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,MAAM,IAAA,GAAO,KAAA,KAAU,MAAA,GAAS,OAAA,GAAU,MAAA;AAC1C,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,YAAA,CAAa,OAAA,CAAQ,SAAS,IAAI,CAAA;AAClC,IAAA,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,MAAA,CAAO,MAAA,EAAQ,SAAS,MAAM,CAAA;AAAA,EACnE,CAAA;AAEA,EAAA,uBACEzC,GAAAA,CAACqB,QAAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,MAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAU,QAAA,EAAS,YAAA,EAAW,cAAA,EAChF,QAAA,EAAA,KAAA,KAAU,MAAA,mBAASrB,GAAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EAAS,CAAA,mBAAKA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA,EAC5E,CAAA;AAEJ;ACRA,IAAMuB,kBAAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACzEvB,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAuB,QAAA,EAAS,CAAA;AAG1C,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,UAAA,GAAauB;AACf,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUmB,iBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAY,MAAM,IAAA,IAAQ,GAAA;AAEhC,EAAA,uBACE1C,IAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,8CACjB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAEZ,QAAA,EAAA;AAAA,IAAA,UAAA,CAAW;AAAA,MACV,IAAA,EAAM,SAAA;AAAA,MACN,QAAA,kBACEA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uCAAA,EACb,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,wBACLb,GAAAA,CAAC,UAAK,SAAA,EAAU,wFAAA,EACb,gBAAM,IAAA,EACT,CAAA;AAAA,wBAEFA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,CAAM,IAAA,EAAK;AAAA,OAAA,EACpB;AAAA,KAEH,CAAA;AAAA,oBAGDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,qBACbA,GAAAA,CAAC,MAAA,EAAA,EACE,QAAA,EAAA,UAAA,CAAW;AAAA,MACV,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAA,EAAW,qHAAA;AAAA,MACX,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA,EAAA,EALQ,IAAA,CAAK,KAMhB,CACD,CAAA,EACH,CAAA;AAAA,oBAGAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACZ,QAAA,EAAA;AAAA,MAAA,GAAA,EAAK,aACJ,UAAA,CAAW;AAAA,QACT,IAAA,EAAM,IAAI,SAAA,CAAU,IAAA;AAAA,QACpB,QAAA,kBAAUb,GAAAA,CAACqB,QAAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAM,QAAA,EAAA,GAAA,CAAI,SAAA,CAAU,KAAA,EAAM;AAAA,OAClE,CAAA;AAAA,MACF,GAAA,EAAK,WACJ,UAAA,CAAW;AAAA,QACT,IAAA,EAAM,IAAI,OAAA,CAAQ,IAAA;AAAA,QAClB,QAAA,kBAAUrB,GAAAA,CAACqB,QAAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAM,QAAA,EAAA,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAM;AAAA,OAChD,CAAA;AAAA,MACF,eAAA,oBAAmBrB,GAAAA,CAAC,kBAAA,EAAA,EAAmB;AAAA,KAAA,EAC1C,CAAA;AAAA,oBAGAa,IAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,cAAc,OAAA,EAC/B,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAa,IAAAA,CAACQ,QAAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,MAAA,EAAO,WAAU,4BAAA,EAC5C,QAAA,EAAA;AAAA,wBAAArB,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBACzBA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,WAAA,EAAS;AAAA,OAAA,EACrC,CAAA,EACF,CAAA;AAAA,sBACAa,IAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAK,OAAA,EAAQ,WAAU,MAAA,EACnC,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,UAAK,OAAA,EAAS,MAAM,QAAQ,KAAK,CAAA,EAAG,SAAA,EAAU,gBAAA,EAC5C,QAAA,EAAA,UAAA,CAAW;AAAA,YACV,IAAA,EAAM,SAAA;AAAA,YACN,QAAA,kBACEa,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uCAAA,EACb,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,wBACLb,GAAAA,CAAC,UAAK,SAAA,EAAU,wFAAA,EACb,gBAAM,IAAA,EACT,CAAA;AAAA,8BAEFA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,CAAM,IAAA,EAAK;AAAA,aAAA,EACpB;AAAA,WAEH,CAAA,EACH,CAAA;AAAA,0BACAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,eAAA,oBAAmBb,IAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,4BACxCa,IAAAA,CAACQ,QAAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,MAAA,EAAO,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAC9D,QAAA,EAAA;AAAA,8BAAArB,GAAAA,CAAC2C,CAAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,8BACtB3C,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,YAAA,EAAU;AAAA,aAAA,EACtC;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,GAAAA,CAACgC,SAAAA,EAAA,EAAU,CAAA;AAAA,wBACXhC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACZ,mBAAS,GAAA,CAAI,CAAC,IAAA,qBACbA,IAAC,MAAA,EAAA,EAAsB,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,GAChD,QAAA,EAAA,UAAA,CAAW;AAAA,UACV,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,SAAA,EAAW,yHAAA;AAAA,UACX,UAAU,IAAA,CAAK;AAAA,SAChB,CAAA,EAAA,EALQ,IAAA,CAAK,KAMhB,CACD,CAAA,EACH,CAAA;AAAA,wBACAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACZ,QAAA,EAAA;AAAA,UAAA,GAAA,EAAK,aACJ,UAAA,CAAW;AAAA,YACT,IAAA,EAAM,IAAI,SAAA,CAAU,IAAA;AAAA,YACpB,QAAA,kBAAUb,GAAAA,CAACqB,QAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,QAAA,EAAU,QAAA,EAAA,GAAA,CAAI,SAAA,CAAU,KAAA,EAAM;AAAA,WAC7E,CAAA;AAAA,UACF,GAAA,EAAK,WACJ,UAAA,CAAW;AAAA,YACT,IAAA,EAAM,IAAI,OAAA,CAAQ,IAAA;AAAA,YAClB,QAAA,kBAAUrB,GAAAA,CAACqB,QAAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAAU,QAAA,EAAA,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAM;AAAA,WACzD;AAAA,SAAA,EACL;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AChIA,IAAME,kBAAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACzEvB,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAuB,QAAA,EAAS,CAAA;AAG1C,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAauB;AACf,CAAA,EAAgB;AACd,EAAA,MAAM,SAAA,GAAY,MAAM,IAAA,IAAQ,GAAA;AAChC,EAAA,MAAM,aAAA,GAAgB,KAAA,IAAS,CAAA,KAAA,EAAA,iBAAU,IAAI,IAAA,IAAO,WAAA,EAAa,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,sBAAA,CAAA;AAE/E,EAAA,uBACEvB,IAAC,QAAA,EAAA,EAAO,SAAA,EAAU,eAChB,QAAA,kBAAAa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EAEb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACZ,QAAA,EAAA,UAAA,CAAW;AAAA,MACV,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW,yBAAA;AAAA,MACX,QAAA,kBACEa,IAAAA,CAAAoB,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,wBACLjC,GAAAA,CAAC,UAAK,SAAA,EAAU,4EAAA,EACb,gBAAM,IAAA,EACT,CAAA;AAAA,wBAEFA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAoC,gBAAM,IAAA,EAAK;AAAA,OAAA,EACjE;AAAA,KAEH,CAAA,EACH,CAAA;AAAA,IAGC,QAAA,IAAY,SAAS,MAAA,GAAS,CAAA,oBAC7BA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sDAAA,EAAuD,YAAA,EAAW,UAC9E,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,MAAK,qBAC3BA,GAAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA,UAAA,CAAW;AAAA,MACV,IAAA;AAAA,MACA,SAAA,EAAW,4DAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA,EAAA,EALO,KAMV,CACD,CAAA,EACH,CAAA;AAAA,IAID,eAAe,WAAA,CAAY,MAAA,GAAS,CAAA,oBACnCA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACZ,QAAA,EAAA,WAAA,CAAY,IAAI,CAAC,EAAE,OAAO,IAAA,EAAM,IAAA,uBAC/BA,GAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QAEC,IAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAU,qDAAA;AAAA,QAET,QAAA,EAAA;AAAA,OAAA;AAAA,MALI;AAAA,KAOR,CAAA,EACH,CAAA;AAAA,oBAIFA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CACV,QAAA,EAAA,aAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AC5EA,IAAM,aAAA,GAAgB;AAAA,EACpB,IAAA,EAAM,KAAA;AAAA,EACN,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAAmB;AACjB,EAAA,MAAM,QAAA,GAAW,cAAc,KAAK,CAAA;AAEpC,EAAA,uBACEa,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,IAAA,EAChB,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,sBAAA,EAChB,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCb,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAkD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAEvEA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,UAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,SAAA,EAAW,2EAAA;AAAA,YACX,eAAA,EAAiB;AAAA,WACnB;AAAA,UAEA,QAAA,kBAAAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,mBAAA;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW,qBAAqB,QAAQ,CAAA,gBAAA;AAAA,eAC1C;AAAA,cAGC,QAAA,EAAA,CAAC,GAAG,KAAA,EAAO,GAAG,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACrC,gBAAA,MAAM,MAAM,IAAA,CAAK,OAAA,mBACfa,IAAAA,CAAAoB,UAAA,EACE,QAAA,EAAA;AAAA,kCAAAjC,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,KAAK,IAAA,CAAK,GAAA;AAAA,sBACV,KAAK,IAAA,CAAK,GAAA;AAAA,sBACV,SAAA,EAAU;AAAA;AAAA,mBACZ;AAAA,kCACAA,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,KAAK,IAAA,CAAK,OAAA;AAAA,sBACV,KAAK,IAAA,CAAK,GAAA;AAAA,sBACV,SAAA,EAAU;AAAA;AAAA;AACZ,iBAAA,EACF,oBAEAA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,KAAK,IAAA,CAAK,GAAA;AAAA,oBACV,KAAK,IAAA,CAAK,GAAA;AAAA,oBACV,SAAA,EAAU;AAAA;AAAA,iBACZ;AAGF,gBAAA,OAAO,IAAA,CAAK,uBACVA,GAAAA;AAAA,kBAAC,GAAA;AAAA,kBAAA;AAAA,oBAEC,MAAM,IAAA,CAAK,IAAA;AAAA,oBACX,MAAA,EAAO,QAAA;AAAA,oBACP,GAAA,EAAI,qBAAA;AAAA,oBACJ,SAAA,EAAU,4BAAA;AAAA,oBAET,QAAA,EAAA;AAAA,mBAAA;AAAA,kBANI,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA;AAAA,iBAOvB,mBAEAA,GAAAA,CAAC,KAAA,EAAA,EAA6B,SAAA,EAAU,4BAAA,EACrC,QAAA,EAAA,GAAA,EAAA,EADO,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAE1B,CAAA;AAAA,cAEJ,CAAC;AAAA;AAAA;AACH;AAAA;AACF,KAAA,EACF,CAAA;AAAA,oBAEAA,IAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EAKN;AAAA,GAAA,EACJ,CAAA;AAEJ;AChFA,SAAS,YAAA,CAAa,EAAE,OAAA,EAAS,IAAA,GAAO,IAAI,SAAA,EAAW,GAAG,OAAM,EAAsB;AACpF,EAAA,MAAM,KAAW4C,OAAA,CAAA,KAAA,EAAM;AAEvB,EAAA,MAAM,UACJ,OAAA,KAAY,MAAA,mBACV5C,GAAAA,CAAC,YAAO,EAAA,EAAI,IAAA,GAAO,CAAA,EAAG,EAAA,EAAI,OAAO,CAAA,EAAG,CAAA,EAAG,GAAG,IAAA,EAAK,cAAA,EAAe,IAC5D,OAAA,KAAY,OAAA,mBACdA,GAAAA,CAAC,UAAK,CAAA,EAAG,CAAA,EAAA,EAAK,IAAI,CAAA,WAAA,EAAc,IAAI,CAAA,CAAA,EAAI,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAa,GAAA,EAAK,oBAE5Fa,IAAAA,CAAAoB,UAAA,EACE,QAAA,EAAA;AAAA,oBAAAjC,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAI,IAAA,GAAO,GAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,IAAA,GAAO,GAAG,EAAA,EAAI,IAAA,EAAM,MAAA,EAAO,cAAA,EAAe,aAAa,GAAA,EAAK,CAAA;AAAA,oBAC3FA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAI,CAAA,EAAG,IAAI,IAAA,GAAO,CAAA,EAAG,EAAA,EAAI,IAAA,EAAM,IAAI,IAAA,GAAO,CAAA,EAAG,MAAA,EAAO,cAAA,EAAe,aAAa,GAAA,EAAK;AAAA,GAAA,EAC7F,CAAA;AAGJ,EAAA,uBACEa,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAWS,IAAAA,CAAG,uEAAA,EAAyE,SAAS,CAAA;AAAA,MAC/F,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAtB,GAAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,SAAA,EAAA,EAAQ,EAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,YAAA,EAAa,gBAAA,EACtD,mBACH,CAAA,EACF,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,MAAA,EAAO,QAAO,MAAA,EAAO,IAAA,EAAM,CAAA,KAAA,EAAQ,EAAE,CAAA,CAAA,CAAA,EAAK;AAAA;AAAA;AAAA,GACxD;AAEJ;AAIA,IAAM,SAAA,GAAY,EAAE,EAAA,EAAI,SAAA,EAAW,IAAI,UAAA,EAAY,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,aAAA,EAAc;AASrF,SAAS,YAAA,CAAa;AAAA,EACpB,IAAA,GAAO,GAAA;AAAA,EACP,KAAA,GAAQ,sDAAA;AAAA,EACR,YAAA,GAAe,KAAA;AAAA,EACf,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAU4C,OAAA,CAAA,QAAA,CAAS,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA;AAC3D,EAAA,MAAM,YAAA,GAAqBA,eAAuB,IAAI,CAAA;AAEtD,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AACzC,MAAA,MAAM,KAAK,YAAA,CAAa,OAAA;AACxB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,IAAA,GAAO,GAAG,qBAAA,EAAsB;AACtC,MAAA,MAAA,CAAO,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,UAAU,IAAA,CAAK,IAAI,CAAA,EAAA,CAAA,EAAM,CAAA,EAAG,GAAG,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,IAC5E,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACpD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,WAAA,EAAa,eAAe,CAAA;AAAA,EACtE,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACE5C,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,SAAA,EAAWsB,IAAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA,EAAI,GAAG,KAAA,EAC5G,QAAA,kBAAAtB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAWsB,IAAAA,CAAG,uBAAA,EAAyB,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,MACtD,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,UAAA,EAAY,KAAA;AAAA,QACZ,MAAM,GAAA,CAAI,CAAA;AAAA,QACV,KAAK,GAAA,CAAI,CAAA;AAAA,QACT,SAAA,EAAW,uBAAA;AAAA,QACX,GAAG;AAAA;AACL;AAAA,GACF,EACF,CAAA;AAEJ;AAUO,SAAS,SAAS,KAAA,EAAsB;AAC7C,EAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAQ;AAC5B,IAAA,uBAAOtB,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAI,KAAA,EAA6B,CAAA;AAAA,EACzD;AACA,EAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAI,KAAA,EAA6B,CAAA;AACzD;ACnGA,SAAS,UAAA,CAAW,EAAE,OAAA,GAAU,GAAA,EAAK,WAAW,KAAA,EAAO,GAAG,OAAM,EAAoB;AAClF,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAWsB,IAAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACzD,KAAA,EAAO,EAAE,OAAA,EAAS,GAAG,KAAA,EAAM;AAAA,MAC1B,GAAG;AAAA;AAAA,GACN;AAEJ;AAWA,IAAM,cAAA,GAAiD;AAAA,EACrD,MAAA,EAAQ,WAAA;AAAA,EACR,GAAA,EAAK,QAAA;AAAA,EACL,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,GAAY,QAAA,EAAU,KAAA,GAAQ,qBAAqB,SAAA,EAAW,KAAA,EAAO,GAAG,KAAA,EAAM,EAAsB;AAC1H,EAAA,uBACEtB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAWsB,IAAAA,CAAG,uDAAA,EAAyD,SAAS,CAAA;AAAA,MAChF,KAAA,EAAO;AAAA,QACL,YAAY,CAAA,gBAAA,EAAmB,cAAA,CAAe,SAAS,CAAC,kBAAkB,KAAK,CAAA,CAAA,CAAA;AAAA,QAC/E,GAAG;AAAA,OACL;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAQA,SAAS,eAAe,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,OAAM,EAAwB;AAC3E,EAAA,uBACET,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAWS,IAAAA,CAAG,oGAAA,EAAsG,SAAS,CAAA;AAAA,MAC5H,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAtB,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,2CAAA,EAA4C,CAAA;AAAA,QAC9D,yBAASA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,GAChE;AAEJ;AAWO,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,IAAI,KAAA,CAAM,YAAY,KAAA,EAAO,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAY,GAAI,KAAA,EAA2B,CAAA;AAChF,EAAA,IAAI,KAAA,CAAM,YAAY,OAAA,EAAS,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAI,KAAA,EAA6B,CAAA;AACtF,EAAA,uBAAOA,GAAAA,CAAC,cAAA,EAAA,EAAgB,GAAI,KAAA,EAA+B,CAAA;AAC7D;AC1EO,SAAS,cAAA,CAAe;AAAA,EAC7B,OAAA,GAAU,MAAA;AAAA,EACV,QAAA,GAAW,GAAA;AAAA,EACX,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAU6C,iBAAS,KAAK,CAAA;AAElD,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,EAAA,GAAK,qBAAA,CAAsB,MAAM,UAAA,CAAW,IAAI,CAAC,CAAA;AACvD,IAAA,OAAO,MAAM,qBAAqB,EAAE,CAAA;AAAA,EACtC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UACJ,OAAA,KAAY,UAAA,GACR,EAAE,OAAA,EAAS,CAAA,EAAG,WAAW,kBAAA,EAAmB,GAC5C,YAAY,YAAA,GACV,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,qBAAoB,GAC7C,EAAE,SAAS,CAAA,EAAE;AAErB,EAAA,MAAM,OAAA,GAA+B,EAAE,OAAA,EAAS,CAAA,EAAG,WAAW,eAAA,EAAgB;AAE9E,EAAA,uBACE7C,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWsB,KAAG,SAAS,CAAA;AAAA,MACvB,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,CAAA,QAAA,EAAW,QAAQ,CAAA,mBAAA,EAAsB,QAAQ,CAAA,OAAA,CAAA;AAAA,QAC7D,GAAI,UAAU,OAAA,GAAU,OAAA;AAAA,QACxB,GAAG;AAAA,OACL;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;ACVO,SAAS,SAAA,CAAU;AAAA,EACxB,MAAA;AAAA,EACA,WAAA,GAAc,oBAAA;AAAA,EACd,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,EAAmB;AACjB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUwB,iBAAS,KAAK,CAAA;AAE5C,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAqB;AACjC,MAAA,IAAI,EAAE,GAAA,KAAQ,GAAA,KAAQ,CAAA,CAAE,OAAA,IAAW,EAAE,OAAA,CAAA,EAAU;AAC7C,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,IAAI,CAAA;AACzC,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,IAAI,CAAA;AAAA,EAC3D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEjC,IAAAA,CAAAoB,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,OAAA,mBACCjC,GAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAS,MAAM,QAAQ,IAAI,CAAA,EAAI,QAAA,EAAA,OAAA,EAAQ,CAAA,mBAE5Ca,IAAAA;AAAA,MAACQ,QAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC3B,SAAA,EAAWC,IAAAA,CAAG,4CAAA,EAA8C,gBAAgB,CAAA;AAAA,QAE5E,QAAA,EAAA;AAAA,0BAAAT,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACd,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,YAC1B;AAAA,WAAA,EACH,CAAA;AAAA,0BACAA,IAACc,OAAAA,EAAA,EAAM,SAAQ,WAAA,EAAY,SAAA,EAAU,qBAAqB,QAAA,EAAA,QAAA,EAAS;AAAA;AAAA;AAAA,KACrE;AAAA,oBAGFD,IAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAY,cAAc,OAAA,EACvC,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,gBAAa,WAAA,EAA0B,CAAA;AAAA,sBACxCa,KAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,gBAAa,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAAA,QAC9B,MAAA,CAAO,IAAI,CAAC,KAAA,EAAO,sBAClBa,IAAAA,CAAOiC,kBAAN,EACE,QAAA,EAAA;AAAA,UAAA,CAAA,GAAI,CAAA,oBAAK9C,GAAAA,CAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,0BAC5BA,GAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,KAAA,CAAM,OAAA,EAC1B,QAAA,EAAA,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBAChBa,IAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cAEC,UAAU,MAAM;AAAE,gBAAA,IAAA,CAAK,QAAA,EAAS;AAAG,gBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,cAAG,CAAA;AAAA,cAElD,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,wBAAQb,GAAAA,CAAC,UAAK,SAAA,EAAU,MAAA,EAAQ,eAAK,IAAA,EAAK,CAAA;AAAA,gCAChDA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,gBACjB,IAAA,CAAK,+BACJA,GAAAA,CAAC,UAAK,SAAA,EAAU,oCAAA,EAAsC,eAAK,WAAA,EAAY;AAAA;AAAA,aAAA;AAAA,YANpE,IAAA,CAAK;AAAA,WASb,CAAA,EACH;AAAA,SAAA,EAAA,EAfmB,KAAA,CAAM,OAgB3B,CACD;AAAA,OAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACpFA,IAAM,IAAA,GAAO,EAAA;AACb,IAAM,cAAA,GAAiB,EAAA;AAEhB,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,GAAW,IAAA,EAAM,gBAAgB,GAAA,EAAK,SAAA,EAAW,GAAG,KAAA,EAAM,EAAc;AACpG,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU+C,iBAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAqBA,eAAuB,IAAI,CAAA;AAEtD,EAAA,SAAS,SAAS,KAAA,EAAuB;AACvC,IAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,CAAC,YAAA,CAAa,SAAS,OAAO,CAAA;AACrD,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,gBAAA,CAA8B,kBAAkB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,QAAQ,KAAK,CAAA;AACzB,IAAA,IAAI,CAAC,KAAK,OAAO,CAAA;AACjB,IAAA,MAAM,IAAA,GAAO,IAAI,qBAAA,EAAsB;AACvC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,OAAO,CAAA;AAC1C,IAAA,IAAI,QAAA,GAAW,gBAAgB,OAAO,CAAA;AACtC,IAAA,MAAM,CAAA,GAAI,IAAI,QAAA,GAAW,cAAA;AACzB,IAAA,OAAO,CAAA,GAAA,CAAK,gBAAgB,CAAA,IAAK,CAAA;AAAA,EACnC;AAEA,EAAA,uBACE/C,GAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,GAC9B,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,WAAA,EAAa,CAAC,CAAA,KAAM,SAAA,CAAU,EAAE,OAAO,CAAA;AAAA,MACvC,YAAA,EAAc,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,MAClC,SAAA,EAAWsB,IAAAA;AAAA,QACT,sGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,QAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,QAAA,MAAM,OAAO,QAAA,GAAW,KAAA;AAExB,QAAA,MAAM,MAAA,mBACJT,IAAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,gBAAA,EAAc,IAAA;AAAA,cACd,SAAS,IAAA,CAAK,OAAA;AAAA,cACd,SAAA,EAAU,wGAAA;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,IAAA;AAAA,gBACP,MAAA,EAAQ,IAAA;AAAA,gBACR,UAAA,EAAY,qCAAA;AAAA,gBACZ,eAAA,EAAiB;AAAA,eACnB;AAAA,cACA,cAAY,IAAA,CAAK,KAAA;AAAA,cAEjB,QAAA,kBAAAA,GAAAA,CAAC,IAAA,CAAK,IAAA,EAAL,EAAU,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,GAAO,GAAA,EAAK,MAAA,EAAQ,IAAA,GAAO,KAAI,EAAG;AAAA;AAAA,WAC/D,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAK,KAAA,EAAM,UAAA,EAAY,CAAA,EACrC,QAAA,kBAAAA,GAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA,EACjB;AAAA,SAAA,EAAA,EAnBY,KAAK,KAoBnB,CAAA;AAGF,QAAA,IAAI,KAAK,IAAA,EAAM;AACb,UAAA,uBACEA,IAAC,GAAA,EAAA,EAAmB,IAAA,EAAM,KAAK,IAAA,EAC5B,QAAA,EAAA,MAAA,EAAA,EADK,KAAK,KAEb,CAAA;AAAA,QAEJ;AAEA,QAAA,OAAO,MAAA;AAAA,MACT,CAAC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AC5CA,SAAS,YAAY,KAAA,EAAyB;AAC5C,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AAC5B,IAAA,IAAI,KAAK,IAAA,KAAS,WAAA,yBAAoBA,GAAAA,CAAC,0BAA0B,CAAG,CAAA;AACpE,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAA0B,QAAA,EAAA,IAAA,CAAK,KAAA,EAAA,EAAT,CAAe,CAAA;AACxE,IAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,MAAA,uBACEa,KAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,qBAAA,EAAA,EAAuB,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,wBACnCA,GAAAA,CAAC,qBAAA,EAAA,EAAuB,QAAA,EAAA,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,EAAE;AAAA,OAAA,EAAA,EAF7B,CAGrB,CAAA;AAAA,IAEJ;AACA,IAAA,uBACEa,KAAC,eAAA,EAAA,EAAwB,QAAA,EAAU,KAAK,QAAA,EAAU,QAAA,EAAU,KAAK,QAAA,EAC9D,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,KAAA;AAAA,MACL,KAAK,QAAA,oBAAYb,GAAAA,CAAC,mBAAA,EAAA,EAAqB,eAAK,QAAA,EAAS;AAAA,KAAA,EAAA,EAFlC,CAGtB,CAAA;AAAA,EAEJ,CAAC,CAAA;AACH;AAEO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,QAAA,EAAS,EAAqB;AACjE,EAAA,uBACEa,KAACmC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAhD,GAAAA,CAAC,kBAAA,EAAA,EAAmB,OAAA,EAAO,IAAA,EAAE,QAAA,EAAS,CAAA;AAAA,oBACtCA,GAAAA,CAAC,kBAAA,EAAA,EACE,QAAA,EAAA,WAAA,CAAY,KAAK,CAAA,EACpB;AAAA,GAAA,EACF,CAAA;AAEJ;AC7DO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAQ,OAAA,EAAS,eAAe,YAAA,EAAc,WAAA,GAAc,OAAM,EAAuB;AACvH,EAAA,uBACEA,GAAAA,CAAC,WAAA,EAAA,EAAY,MAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS;AAAE,IAAA,IAAI,CAAC,MAAM,YAAA,EAAa;AAAA,EAAG,CAAA,EAC9E,QAAA,kBAAAa,IAAAA,CAAC,kBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,gBAAA,EAAA,EAAkB,QAAA,EAAA,OAAA,CAAQ,KAAA,IAAS,eAAA,EAAgB,CAAA;AAAA,MACnD,QAAQ,WAAA,oBACPA,GAAAA,CAAC,sBAAA,EAAA,EAAwB,kBAAQ,WAAA,EAAY;AAAA,KAAA,EAEjD,CAAA;AAAA,oBACAa,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAb,IAAC,iBAAA,EAAA,EAAkB,OAAA,EAAS,YAAA,EACzB,QAAA,EAAA,OAAA,CAAQ,eAAe,QAAA,EAC1B,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,aAAA;AAAA,UACT,SAAA,EAAW,cAAc,oEAAA,GAAuE,MAAA;AAAA,UAE/F,kBAAQ,YAAA,IAAgB;AAAA;AAAA;AAC3B,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AChCA,IAAMiD,UAAAA,GAAY;AAAA,EAChB,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,SAAS,SAAA,CAAU,EAAE,IAAA,GAAO,IAAA,EAAM,WAAW,QAAA,EAAU,GAAG,OAAM,EAAmB;AACxF,EAAA,uBACEjD,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWsB,IAAAA;AAAA,QACT,+DAAA;AAAA,QACA2B,WAAU,IAAI,CAAA;AAAA,QACd;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;ACfO,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,GAAQ,SAAA,EAAW,WAAA,EAAa,SAAA,EAAW,GAAG,KAAA,EAAM,EAAkB;AACpH,EAAA,uBACEpC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWS,IAAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACxD,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAtB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBACtDa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACzD,yBACCa,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWS,IAAAA;AAAA,gBACT,sEAAA;AAAA,gBACA,UAAU,IAAA,IAAQ,0DAAA;AAAA,gBAClB,UAAU,MAAA,IAAU,8CAAA;AAAA,gBACpB,UAAU,SAAA,IAAa;AAAA,eACzB;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,KAAA,KAAU,IAAA,oBAAQtB,GAAAA,CAAC,UAAA,EAAA,EAAW,WAAU,QAAA,EAAS,CAAA;AAAA,gBACjD,UAAU,MAAA,oBAAUA,GAAAA,CAAC,YAAA,EAAA,EAAa,WAAU,QAAA,EAAS,CAAA;AAAA,gBACrD;AAAA;AAAA;AAAA;AACH,SAAA,EAEJ,CAAA;AAAA,QACC,+BACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wCAAwC,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA;AAAA,GAErE;AAEJ;AC9BA,IAAM,YAAA,GAAe;AAAA,EACnB,IAAA,EAAM,EAAA;AAAA,EACN,MAAA,EAAQ,4DAAA;AAAA,EACR,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,WAAA,GAAc;AAAA,EAClB,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,eAAA;AAAA,EACR,QAAA,EAAU,cAAA;AAAA,EACV,IAAA,EAAM;AACR,CAAA;AAEO,SAAS,SAAA,CAAU;AAAA,EACxB,GAAA;AAAA,EACA,GAAA,GAAM,EAAA;AAAA,EACN,OAAA,GAAU,QAAA;AAAA,EACV,WAAA,GAAc,OAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmB;AACjB,EAAA,uBACEa,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWS,IAAAA;AAAA,QACT,qDAAA;AAAA,QACA,YAAY,WAAW,CAAA;AAAA,QACvB;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAtB,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,GAAA;AAAA,YACA,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QACC,OAAA,KAAY,MAAA,oBACXA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWsB,IAAAA,CAAG,kBAAA,EAAoB,YAAA,CAAa,OAAO,CAAC,CAAA,EAAG,CAAA;AAAA,QAEhE,4BACCtB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DACZ,QAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ;ACrDO,SAAS,eAAA,CAAgB,EAAE,OAAA,EAAQ,EAAyB;AACjE,EAAA,uBACEa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA;AAAA,oBAAAb,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,IAC3B,2BAAWA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACpE,CAAA;AAEJ;ACeA,IAAMuB,kBAAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,qBACzEvB,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,SAAA,EAAuB,QAAA,EAAS,CAAA;AAG1C,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,GAAauB,kBAAAA;AAAA,EACb,SAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACEV,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA,EACrD,QAAA,EAAA;AAAA,IAAA,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,oBACnCb,IAAC,KAAA,EAAA,EAAI,YAAA,EAAW,YAAA,EAAa,SAAA,EAAU,4DAAA,EACpC,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,OAAO,CAAA,KAAM;AAC7B,MAAA,MAAM,MAAA,GAAS,CAAA,KAAM,WAAA,CAAY,MAAA,GAAS,CAAA;AAC1C,MAAA,uBACEa,IAAAA,CAAOqC,OAAA,CAAA,QAAA,EAAN,EACE,QAAA,EAAA;AAAA,QAAA,CAAA,GAAI,CAAA,oBAAKlD,GAAAA,CAAC,YAAA,EAAA,EAAa,WAAU,mBAAA,EAAoB,CAAA;AAAA,QACrD,MAAA,IAAU,CAAC,KAAA,CAAM,IAAA,mBAChBA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,UAAU,6BAA6B,CAAA,EAAI,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,IAE3E,UAAA,CAAW;AAAA,UACT,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,UAAU,KAAA,CAAM,KAAA;AAAA,UAChB,SAAA,EAAW;AAAA,SACZ;AAAA,OAAA,EAAA,EATgB,CAWrB,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IAGD,UAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACZ,QAAA,EAAA,UAAA,CAAW,OACV,UAAA,CAAW;AAAA,MACT,MAAM,UAAA,CAAW,IAAA;AAAA,MACjB,QAAA,kBACEa,IAAAA,CAAAoB,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAjC,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBAChCA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,UAAA,CAAW,SAAS,MAAA,EAAO;AAAA,OAAA,EACpC,CAAA;AAAA,MAEF,SAAA,EAAW;AAAA,KACZ,oBAEDa,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,UAAA,CAAW,OAAA;AAAA,QACpB,SAAA,EAAU,sGAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAb,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,0BAChCA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,UAAA,CAAW,SAAS,MAAA,EAAO;AAAA;AAAA;AAAA,KACpC,EAEJ,CAAA;AAAA,oBAGFa,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC5D,4BAAYA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAoC,QAAA,EAAS;AAAA,KAAA,EAC3E,CAAA;AAAA,IACC,+BACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,WAAA,EAAY;AAAA,GAAA,EAE9D,CAAA;AAEJ;AC1FO,SAAS,SAAA,CAAU,EAAE,QAAA,EAAU,QAAA,EAAS,EAAmB;AAChE,EAAA,uBACEA,GAAAA,CAAOmD,OAAA,CAAA,QAAA,EAAN,EAAe,QAAA,EAAU,QAAA,oBAAYnD,GAAAA,CAACoD,OAAAA,EAAA,EAAQ,CAAA,EAC5C,QAAA,EACH,CAAA;AAEJ;ACJO,SAAS,iBAAA,CAAkB,EAAE,UAAA,EAAW,EAA2B;AACxE,EAAMC,kBAAU,MAAM;AACpB,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,QAAA,CAAS,eAAA,CAAgB,YAAA,CAAa,YAAA,EAAc,UAAU,CAAA;AAAA,IAChE,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,eAAA,CAAgB,gBAAgB,YAAY,CAAA;AAAA,IACvD;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,OAAO,IAAA;AACT;ACTO,SAAS,cAAc,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,WAAU,EAAuB;AAC5F,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUC,iBAAS,KAAK,CAAA;AAEtD,EAAA,IAAI,WAAW,OAAO,IAAA;AAEtB,EAAA,uBACEzC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,yEAAA,EAA2E,SAAS,CAAA,EACrG,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kFAAA,EAAmF,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAC/F;AAAA,OAAA,EACJ,CAAA;AAAA,MACC,2BAAWb,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAA,OAAA,EAAQ;AAAA,KAAA,EAC/D,CAAA;AAAA,IACC,6BACCA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AAAE,UAAA,YAAA,CAAa,IAAI,CAAA;AAAG,UAAA,SAAA,EAAU;AAAA,QAAG,CAAA;AAAA,QAClD,SAAA,EAAU,+DAAA;AAAA,QACV,YAAA,EAAW,SAAA;AAAA,QAEX,QAAA,kBAAAA,GAAAA,CAAC2C,CAAAA,EAAA,EAAE,WAAU,QAAA,EAAS;AAAA;AAAA;AACxB,GAAA,EAEJ,CAAA;AAEJ;AC5BO,SAAS,SAAA,CAAU,EAAE,WAAA,GAAc,aAAA,EAAe,WAAU,EAAmB;AACpF,EAAA,uBACE9B,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,yHAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,CAAA;AAAA,wBACrDA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA;AAAA,GACrB;AAEJ;ACHO,SAAS,eAAA,CAAgB,EAAE,OAAA,EAAQ,EAAyB;AACjE,EAAMuD,kBAAU,MAAM;AACpB,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyB;AAC9C,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,MAAM,UACJ,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY,KAAM,OAAO,GAAA,CAAI,WAAA,EAAY,IACnD,CAAC,CAAC,KAAA,CAAM,OAAA,KAAY,CAAC,CAAC,MAAA,CAAO,QAC7B,CAAC,CAAC,KAAA,CAAM,OAAA,KAAY,CAAC,CAAC,MAAA,CAAO,QAC7B,CAAC,CAAC,MAAM,QAAA,KAAa,CAAC,CAAC,MAAA,CAAO,SAC9B,CAAC,CAAC,MAAM,MAAA,KAAW,CAAC,CAAC,MAAA,CAAO,GAAA;AAE9B,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,MAAA,CAAO,OAAA,EAAQ;AACf,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAClD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,IAAA;AACT;AC/BO,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,kBAAA,EAAmB,EAA2B;AACvF,EAAA,uBACE1C,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,sBAAAb,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,0BAAA,EAA2B,CAAA;AAAA,sBACpDA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAwB,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,sBAC1DA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,wCAAA,EACV,QAAA,EAAA,KAAA,CAAM,WAAW,+BAAA,EACpB;AAAA,KAAA,EACF,CAAA;AAAA,IACC,kBAAA,oBACCA,GAAAA,CAACqB,QAAAA,EAAA,EAAO,OAAA,EAAS,kBAAA,EAAoB,OAAA,EAAQ,SAAA,EAAU,QAAA,EAAA,WAAA,EAEvD;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC1BO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAImC,SAAS,KAAK,CAAA;AAE5C,EAAAC,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,OAAA;AACT;AC6BO,SAAS,UAAA,GAA+B;AAC7C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,iBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAU,OAAA,CAAA,QAAA,CAAyB,EAAE,CAAA;AAC/D,EAAA,MAAM,UAAA,GAAmB,eAA0C,IAAI,CAAA;AAEvE,EAAA,MAAM,OAAA,GAAgB,OAAA,CAAA,WAAA,CAAY,CAAC,IAAA,GAAuB,EAAC,KAAwB;AACjF,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,OAAO,IAAI,OAAA,CAAiB,CAAC,OAAA,KAAY;AACvC,MAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AAAA,IACvB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAsB,oBAAY,MAAM;AAC5C,IAAA,UAAA,CAAW,UAAU,IAAI,CAAA;AACzB,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAqB,oBAAY,MAAM;AAC3C,IAAA,UAAA,CAAW,UAAU,KAAK,CAAA;AAC1B,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,eAAe,YAAA,EAAa;AACjE;ACvCO,SAAS,iBAAA,CAAkB,cAAc,KAAA,EAAgC;AAC9E,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUC,iBAAS,WAAW,CAAA;AAEtD,EAAA,MAAM,OAAaA,OAAA,CAAA,WAAA,CAAY,MAAM,UAAU,IAAI,CAAA,EAAG,EAAE,CAAA;AACxD,EAAA,MAAM,QAAcA,OAAA,CAAA,WAAA,CAAY,MAAM,UAAU,KAAK,CAAA,EAAG,EAAE,CAAA;AAC1D,EAAA,MAAM,MAAA,GAAeA,OAAA,CAAA,WAAA,CAAY,MAAM,SAAA,CAAU,CAAC,SAAS,CAAC,IAAI,CAAA,EAAG,EAAE,CAAA;AAErE,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,QAAQ,SAAA,EAAU;AAClD;ACpBO,SAAS,gBAAgB,SAAA,EAA4B;AAC1D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUC,iBAAS,KAAK,CAAA;AAE5D,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,eAAA,CAAgB,MAAA,CAAO,UAAU,SAAS,CAAA;AAAA,IAC5C,CAAA;AAEA,IAAA,YAAA,EAAa;AACb,IAAA,MAAA,CAAO,iBAAiB,QAAA,EAAU,YAAA,EAAc,EAAE,OAAA,EAAS,MAAM,CAAA;AACjE,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EAChE,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO,YAAA;AACT;ACtBO,SAAS,kBAAA,GAAwD;AACtE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUC,iBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,UAAA,GAAmBA,eAAsC,MAAS,CAAA;AAExE,EAAA,MAAM,IAAA,GAAaA,OAAA,CAAA,WAAA,CAAY,CAAC,IAAA,KAAiB;AAC/C,IAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA,CAAE,KAAK,MAAM;AAC7C,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,UAAA,CAAW,UAAU,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,GAAG,GAAI,CAAA;AAAA,IAC9D,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAMA,OAAA,CAAA,SAAA,CAAU,MAAM,MAAM,YAAA,CAAa,WAAW,OAAO,CAAA,EAAG,EAAE,CAAA;AAEhE,EAAA,OAAO,CAAC,QAAQ,IAAI,CAAA;AACtB;ACfO,SAAS,WAAA,CAAe,OAAU,KAAA,EAAkB;AACzD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUC,iBAAS,KAAK,CAAA;AAEtD,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,YAAA,CAAa,KAAK,GAAG,KAAK,CAAA;AACzD,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,SAAA;AACT;ACTO,SAAS,wBACd,OAAA,EAC4C;AAC5C,EAAA,MAAM,GAAA,GAAYC,eAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAEhE,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AAET,IAAA,MAAM,WAAW,IAAI,oBAAA,CAAqB,CAAC,CAAC,KAAK,CAAA,KAAM;AACrD,MAAA,iBAAA,CAAkB,MAAM,cAAc,CAAA;AAAA,IACxC,GAAG,OAAO,CAAA;AAEV,IAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EAEnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,CAAC,KAAK,cAAc,CAAA;AAC7B;ACpBO,SAAS,eAAA,CAAmB,KAAa,YAAA,EAA0C;AACxF,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUC,iBAAY,MAAM;AAC5D,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,YAAA;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAC5C,MAAA,OAAO,IAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAU,YAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAiBA,OAAA,CAAA,WAAA;AAAA,IACrB,CAAC,KAAA,KAAa;AACZ,MAAA,IAAI;AACF,QAAA,cAAA,CAAe,KAAK,CAAA;AACpB,QAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,UAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,QACxD;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAAA,IACA,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,OAAO,CAAC,aAAa,QAAQ,CAAA;AAC/B;AC1BO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUC,iBAAS,MAAM;AACjD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA;AAAA,EAClC,CAAC,CAAA;AAED,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACnC,IAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AACtB,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA2B,UAAA,CAAW,EAAE,OAAO,CAAA;AAChE,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACtC,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,OAAA;AACT;ACJO,SAAS,aAAA,CAAc,OAAe,QAAA,EAAuC;AAClF,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUC,iBAAS,CAAC,CAAA;AACxC,EAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,KAAA,GAAQ,QAAQ,CAAC,CAAA;AAC1D,EAAA,MAAM,MAAA,GAAA,CAAU,OAAO,CAAA,IAAK,QAAA;AAE5B,EAAA,MAAM,IAAA,GAAaA,OAAA,CAAA,WAAA;AAAA,IACjB,CAAC,CAAA,KAAc,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,IAC3D,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,IAAA,GAAaA,OAAA,CAAA,WAAA,CAAY,MAAM,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,EAAG,CAAC,IAAA,EAAM,IAAI,CAAC,CAAA;AACjE,EAAA,MAAM,IAAA,GAAaA,OAAA,CAAA,WAAA,CAAY,MAAM,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,EAAG,CAAC,IAAA,EAAM,IAAI,CAAC,CAAA;AAEjE,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,MAAA,EAAQ,OAAA,EAAS,IAAA,GAAO,CAAA,EAAG,OAAA,EAAS,IAAA,GAAO,UAAA,EAAY,IAAA,EAAM,MAAM,IAAA,EAAK;AAC/G","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","'use client';\n\nimport * as React from 'react';\nimport { useIsMobile, UIVariantProvider, type UIVariant } from '@olwiba/cn';\n\nexport type UIMode = 'default' | 'playful' | 'smooth';\n\ninterface OlwibaUIContextValue {\n isMobile: boolean;\n mode: UIMode;\n}\n\nconst OlwibaUIContext = React.createContext<OlwibaUIContextValue>({\n isMobile: false,\n mode: 'default',\n});\n\nexport interface OlwibaUIProviderProps {\n children: React.ReactNode;\n /**\n * Override the mobile detection. If omitted, uses useIsMobile() from @olwiba/cn\n * which detects based on a 768px viewport breakpoint.\n */\n isMobile?: boolean;\n /**\n * Global component mode. Primitives imported from @olwiba/ui will automatically\n * apply this mode unless overridden at the component level.\n *\n * - `'default'` — standard square shadcn/Radix appearance\n * - `'playful'` — slight rotation + offset drop shadow backdrop\n * - `'smooth'` — softer, larger border-radius across all components\n */\n mode?: UIMode;\n}\n\nexport function OlwibaUIProvider({ children, isMobile: isMobileProp, mode = 'default' }: OlwibaUIProviderProps) {\n const detectedMobile = useIsMobile();\n const isMobile = isMobileProp ?? detectedMobile;\n\n const variant = mode !== 'default' ? (mode as UIVariant) : undefined;\n\n return (\n <OlwibaUIContext.Provider value={{ isMobile, mode }}>\n <UIVariantProvider mode={variant}>\n {children}\n </UIVariantProvider>\n </OlwibaUIContext.Provider>\n );\n}\n\nexport function useOlwibaUI() {\n return React.useContext(OlwibaUIContext);\n}\n\n/** Returns just the current UI mode from context. */\nexport function useUIMode(): UIMode {\n return React.useContext(OlwibaUIContext).mode;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Button as CNButton, type ButtonProps as CNButtonProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type ButtonProps = CNButtonProps;\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNButton mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nButton.displayName = 'Button';\n","'use client';\n\nimport * as React from 'react';\nimport {\n Card as CNCard, type CardProps as CNCardProps,\n CardHeader, CardTitle, CardDescription, CardContent, CardFooter,\n} from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type CardProps = CNCardProps;\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNCard mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nCard.displayName = 'Card';\n\n// Sub-components are pass-throughs — no mode logic needed.\nexport { CardHeader, CardTitle, CardDescription, CardContent, CardFooter };\n","'use client';\n\nimport * as React from 'react';\nimport { Badge as CNBadge, type BadgeProps as CNBadgeProps } from '@olwiba/cn';\n\n// Badge no longer supports mode — variant/size/disabled only.\nexport type BadgeProps = CNBadgeProps;\n\nexport function Badge(props: BadgeProps) {\n return <CNBadge {...props} />;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Input as CNInput, type InputProps as CNInputProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type InputProps = CNInputProps;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNInput mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nInput.displayName = 'Input';\n","'use client';\n\nimport * as React from 'react';\nimport { Textarea as CNTextarea, type TextareaProps as CNTextareaProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type TextareaProps = CNTextareaProps;\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNTextarea mode={resolvedMode} {...props} ref={ref} />;\n }\n);\nTextarea.displayName = 'Textarea';\n","'use client';\n\nimport * as React from 'react';\nimport { Checkbox as CNCheckbox, type CheckboxProps as CNCheckboxProps } from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\nexport type CheckboxProps = CNCheckboxProps;\n\nexport const Checkbox = React.forwardRef<\n React.ElementRef<typeof CNCheckbox>,\n CheckboxProps\n>(({ mode, ...props }, ref) => {\n const ctxMode = useUIMode();\n const resolvedMode = mode ?? (ctxMode !== 'default' ? (ctxMode as \"playful\" | \"smooth\") : undefined);\n return <CNCheckbox mode={resolvedMode} {...props} ref={ref} />;\n});\nCheckbox.displayName = 'Checkbox';\n","'use client';\n\nimport * as React from 'react';\nimport { Switch as CNSwitch, type SwitchProps as CNSwitchProps } from '@olwiba/cn';\n\nexport type SwitchProps = CNSwitchProps & {\n mode?: 'default' | 'playful' | 'smooth';\n};\n\nexport const Switch = React.forwardRef<\n React.ElementRef<typeof CNSwitch>,\n SwitchProps\n>(({ mode: _mode, ...props }, ref) => {\n return <CNSwitch {...props} ref={ref} />;\n});\nSwitch.displayName = 'Switch';\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport {\n BellIcon,\n CreditCardIcon,\n LogOutIcon,\n MoreVerticalIcon,\n PlusCircleIcon,\n} from 'lucide-react';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Separator,\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n useSidebar,\n} from '@olwiba/cn';\nimport { useUIMode } from '../context/OlwibaUIContext';\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface AppNavItem {\n icon: LucideIcon;\n label: string;\n href: string;\n isActive?: boolean;\n}\n\nexport interface AppShellAction {\n icon?: LucideIcon;\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface AppShellUser {\n email: string;\n name?: string;\n avatar?: string;\n /** Displayed as a sub-label (e.g. plan tier). */\n plan?: string;\n onSignOut?: () => void;\n onBilling?: () => void;\n}\n\nexport interface AppShellBrand {\n name: ReactNode;\n logo?: ReactNode;\n href?: string;\n}\n\n/**\n * Render a navigation link. Override to integrate your router's Link component.\n * @example renderLink={({ href, children }) => <Link to={href}>{children}</Link>}\n */\nexport type AppShellRenderLink = (props: {\n href: string;\n children: ReactNode;\n className?: string;\n}) => ReactNode;\n\nexport interface AppShellProps {\n brand?: AppShellBrand;\n navItems?: AppNavItem[];\n /** Primary CTA rendered above nav (e.g. \"New project\", \"Quick create\") */\n action?: AppShellAction;\n user?: AppShellUser;\n /** Text shown in the top header bar */\n pageTitle?: string;\n /** Override link rendering for SPA navigation. Defaults to a native <a>. */\n renderLink?: AppShellRenderLink;\n children?: ReactNode;\n /**\n * Sidebar collapse behaviour.\n * - `\"icon\"` — collapses to a narrow icon rail (default, recommended for desktop)\n * - `\"offcanvas\"` — slides off-screen as a drawer overlay\n * - `\"none\"` — always fully visible\n */\n collapsible?: 'icon' | 'offcanvas' | 'none';\n /**\n * Layout scope.\n * - `\"viewport\"` (default) — fills the full browser viewport; use for top-level app shells.\n * - `\"contained\"` — fills its parent container; use in docs sandboxes, modals, or embedded previews.\n */\n sidebarPosition?: 'viewport' | 'contained';\n /** Which side the sidebar sits on. @default \"left\" */\n side?: 'left' | 'right';\n}\n\n// ─── Internal sub-components ──────────────────────────────────────────────────\n\nfunction NavUser({ user }: { user: AppShellUser }) {\n const { isMobile } = useSidebar();\n const uiMode = useUIMode();\n const avatarMode = uiMode !== 'default' ? (uiMode as 'playful' | 'smooth') : undefined;\n const initials = (user.name ?? user.email).slice(0, 2).toUpperCase();\n\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n className=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n >\n <Avatar mode={avatarMode} size=\"sm\" className=\"grayscale\">\n {user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">{user.name ?? user.email}</span>\n <span className=\"truncate text-xs text-muted-foreground\">\n {user.plan ? `${user.plan} plan` : user.email}\n </span>\n </div>\n <MoreVerticalIcon className=\"ml-auto size-4\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-lg\"\n side={isMobile ? 'bottom' : 'right'}\n align=\"end\"\n sideOffset={4}\n >\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <Avatar mode={avatarMode} size=\"sm\">\n {user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">{user.name ?? user.email}</span>\n <span className=\"truncate text-xs text-muted-foreground\">{user.email}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n {user.onBilling && (\n <DropdownMenuItem onClick={user.onBilling}>\n <CreditCardIcon />\n Billing\n </DropdownMenuItem>\n )}\n <DropdownMenuItem>\n <BellIcon />\n Notifications\n </DropdownMenuItem>\n </DropdownMenuGroup>\n {user.onSignOut && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={user.onSignOut}>\n <LogOutIcon />\n Sign out\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n );\n}\n\nfunction ShellSidebar({\n brand,\n navItems,\n action,\n user,\n renderLink,\n collapsible,\n side,\n sidebarPosition,\n}: {\n brand: AppShellBrand;\n navItems: AppNavItem[];\n action?: AppShellAction;\n user: AppShellUser;\n renderLink: AppShellRenderLink;\n collapsible: 'icon' | 'offcanvas' | 'none';\n side: 'left' | 'right';\n sidebarPosition: 'viewport' | 'contained';\n}) {\n return (\n <Sidebar side={side} collapsible={collapsible} sidebarPosition={sidebarPosition}>\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton asChild className=\"data-[slot=sidebar-menu-button]:!p-1.5\">\n {renderLink({\n href: brand.href ?? '#',\n children: (\n <>\n {brand.logo}\n <span className=\"text-base font-semibold\">{brand.name}</span>\n </>\n ),\n })}\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupContent className=\"flex flex-col gap-2\">\n {action && (\n <SidebarMenu>\n <SidebarMenuItem>\n {action.href ? (\n <SidebarMenuButton\n asChild\n tooltip={action.label}\n className=\"min-w-8 bg-primary text-primary-foreground duration-200 ease-linear hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground\"\n >\n {renderLink({\n href: action.href,\n children: (\n <>\n {action.icon && <action.icon />}\n <span>{action.label}</span>\n </>\n ),\n })}\n </SidebarMenuButton>\n ) : (\n <SidebarMenuButton\n tooltip={action.label}\n onClick={action.onClick}\n className=\"min-w-8 bg-primary text-primary-foreground duration-200 ease-linear hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground\"\n >\n {action.icon && <action.icon />}\n <span>{action.label}</span>\n </SidebarMenuButton>\n )}\n </SidebarMenuItem>\n </SidebarMenu>\n )}\n\n <SidebarMenu>\n {navItems.map((item) => (\n <SidebarMenuItem key={item.label}>\n <SidebarMenuButton asChild tooltip={item.label} isActive={item.isActive}>\n {renderLink({\n href: item.href,\n children: (\n <>\n <item.icon />\n <span>{item.label}</span>\n </>\n ),\n })}\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </SidebarContent>\n\n <SidebarFooter>\n <NavUser user={user} />\n </SidebarFooter>\n </Sidebar>\n );\n}\n\nfunction ShellHeader({ pageTitle }: { pageTitle: string }) {\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\">\n <div className=\"flex w-full items-center gap-1 px-4 lg:gap-2 lg:px-6\">\n <SidebarTrigger className=\"-ml-1\" />\n <Separator orientation=\"vertical\" className=\"mx-2 data-[orientation=vertical]:h-4\" />\n <h1 className=\"text-base font-medium\">{pageTitle}</h1>\n </div>\n </header>\n );\n}\n\n// ─── Default placeholder values (keeps the shell renderable without required props) ─\n\nconst defaultBrand: AppShellBrand = {\n name: 'App',\n href: '#',\n};\n\nconst defaultUser: AppShellUser = {\n name: 'User',\n email: 'user@example.com',\n};\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\n// ─── Main export ──────────────────────────────────────────────────────────────\n\nexport function AppShell({\n brand = defaultBrand,\n navItems = [],\n action,\n user = defaultUser,\n pageTitle = 'Dashboard',\n renderLink = defaultRenderLink,\n collapsible = 'icon',\n sidebarPosition = 'viewport',\n side = 'left',\n children,\n}: AppShellProps = {}) {\n const isContained = sidebarPosition === 'contained';\n\n const inner = (\n <SidebarProvider\n layout={isContained ? 'embedded' : 'viewport'}\n className={isContained ? 'overflow-hidden' : 'h-svh overflow-hidden'}\n >\n <ShellSidebar\n brand={brand}\n navItems={navItems}\n action={action}\n user={user}\n renderLink={renderLink}\n collapsible={collapsible}\n side={side}\n sidebarPosition={sidebarPosition}\n />\n <SidebarInset className={isContained ? undefined : 'overflow-y-auto'}>\n <ShellHeader pageTitle={pageTitle} />\n {children}\n </SidebarInset>\n </SidebarProvider>\n );\n\n if (isContained) {\n return (\n <div className=\"relative flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden\">\n {inner}\n </div>\n );\n }\n\n return inner;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { GalleryVerticalEnd, Building2, ShieldCheck, Sparkles } from 'lucide-react';\nimport { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, cn } from '@olwiba/cn';\n\n// ─── Centered layout ──────────────────────────────────────────────────────────\n\nfunction CenteredAuth({ children }: { children: React.ReactNode }) {\n return (\n <section className=\"flex h-full min-h-[720px] w-full flex-col items-center justify-center gap-6 rounded-2xl bg-muted p-6 md:p-10\">\n <div className=\"flex w-full max-w-sm flex-col gap-6\">\n {children}\n </div>\n </section>\n );\n}\n\n// ─── Split layout ─────────────────────────────────────────────────────────────\n\nfunction SplitAuth({ children, panel }: { children: React.ReactNode; panel?: React.ReactNode }) {\n const defaultPanel = (\n <div className=\"flex flex-col gap-6\">\n <Badge variant=\"secondary\" className=\"w-fit\">Welcome</Badge>\n <div className=\"space-y-3\">\n <h2 className=\"text-3xl font-semibold tracking-tight\">Build better, ship faster</h2>\n <p className=\"max-w-md text-muted-foreground\">\n Sign in to continue building with ready-made components and layouts.\n </p>\n </div>\n <div className=\"space-y-3 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-2\"><ShieldCheck className=\"size-4\" /> Type-safe components</div>\n <div className=\"flex items-center gap-2\"><Sparkles className=\"size-4\" /> Polished defaults</div>\n <div className=\"flex items-center gap-2\"><Building2 className=\"size-4\" /> Plug-and-play shells</div>\n </div>\n </div>\n );\n\n return (\n <section className=\"grid h-full min-h-[560px] overflow-hidden rounded-2xl border bg-card lg:grid-cols-2\">\n <div className=\"relative hidden p-8 pb-16 lg:flex lg:flex-col lg:justify-center\">\n <div className=\"absolute inset-0 bg-gradient-to-br from-primary/20 via-transparent to-muted\" />\n <div className=\"relative z-10\">{panel ?? defaultPanel}</div>\n </div>\n <div className=\"flex items-center justify-center p-6 lg:p-10\">\n {children}\n </div>\n </section>\n );\n}\n\n// ─── Shared form slot ─────────────────────────────────────────────────────────\n\nexport interface AuthFormProps {\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n onSso?: () => void;\n signUpHref?: string;\n forgotPasswordHref?: string;\n brand?: React.ReactNode;\n}\n\nfunction DefaultForm({ onSubmit, onSso, signUpHref = '#', forgotPasswordHref = '#', brand }: AuthFormProps) {\n return (\n <Card className=\"w-full max-w-md\">\n <CardHeader>\n {brand && <div className=\"mb-2\">{brand}</div>}\n <CardTitle>Sign in</CardTitle>\n <CardDescription>Enter your email and password to continue.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-email\">Email</Label>\n <Input id=\"auth-email\" type=\"email\" placeholder=\"name@company.com\" />\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"auth-password\">Password</Label>\n {forgotPasswordHref && (\n <a className=\"text-xs text-muted-foreground underline underline-offset-4 hover:text-foreground\" href={forgotPasswordHref}>\n Forgot password?\n </a>\n )}\n </div>\n <Input id=\"auth-password\" type=\"password\" placeholder=\"••••••••\" />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Button type=\"submit\" className=\"w-full\">Continue</Button>\n {onSso && (\n <Button type=\"button\" variant=\"outline\" className=\"w-full\" onClick={onSso}>Use SSO</Button>\n )}\n </div>\n </form>\n {signUpHref && (\n <p className=\"text-center text-xs text-muted-foreground\">\n New here?{' '}\n <a className=\"text-foreground underline underline-offset-4\" href={signUpHref}>\n Create an account\n </a>\n </p>\n )}\n </CardContent>\n </Card>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport interface AuthSectionProps extends AuthFormProps {\n /** Visual layout of the auth screen */\n layout?: 'centered' | 'split';\n /** Custom form/card content. Defaults to the built-in sign-in form. */\n children?: React.ReactNode;\n /** (split layout only) Custom content for the left decorative panel */\n panel?: React.ReactNode;\n className?: string;\n}\n\nexport function AuthSection({\n layout = 'centered',\n children,\n panel,\n className,\n ...formProps\n}: AuthSectionProps) {\n const form = children ?? <DefaultForm {...formProps} />;\n\n if (layout === 'split') {\n return (\n <div className={cn('h-full', className)}>\n <SplitAuth panel={panel}>{form}</SplitAuth>\n </div>\n );\n }\n\n return (\n <div className={cn('h-full', className)}>\n <CenteredAuth>{form}</CenteredAuth>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: LucideIcon;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nexport function EmptyState({ icon: Icon, title, description, action, className, ...props }: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center justify-center gap-3 py-12 text-center', className)}\n {...props}\n >\n {Icon && (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-2xl border bg-muted\">\n <Icon className=\"size-6 text-muted-foreground\" />\n </div>\n )}\n <div className=\"space-y-1\">\n <h3 className=\"font-semibold\">{title}</h3>\n {description && (\n <p className=\"max-w-xs text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n {action}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { ArrowLeft, Compass } from 'lucide-react';\nimport { Button } from '../primitives/Button';\nimport type { AppShellRenderLink } from './AppShell';\n\nexport interface ErrorPageProps {\n statusCode?: string;\n title?: string;\n description?: string;\n action?: { label: string; href: string };\n backAction?: { label: string; href?: string; onClick?: () => void };\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function ErrorPage({\n statusCode = '404',\n title = 'Page not found',\n description = \"The page you're looking for doesn't exist or has been moved. Check the URL or head back home.\",\n action = { label: 'Take me home', href: '/' },\n backAction = { label: 'Go back' },\n renderLink = defaultRenderLink,\n}: ErrorPageProps) {\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"relative flex min-h-[560px] flex-col items-center justify-center px-6 py-16 text-center\">\n <div className=\"absolute inset-0 bg-[radial-gradient(circle_at_center,hsl(var(--muted)/0.8),transparent_70%)]\" />\n <div className=\"relative space-y-6\">\n <div className=\"flex justify-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl border bg-muted\">\n <Compass className=\"size-8 text-muted-foreground\" />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-8xl font-bold tracking-tight text-muted-foreground/20\">{statusCode}</div>\n <h1 className=\"-mt-4 text-2xl font-semibold tracking-tight\">{title}</h1>\n <p className=\"mx-auto max-w-sm text-sm text-muted-foreground\">\n {description}\n </p>\n </div>\n\n <div className=\"flex flex-wrap items-center justify-center gap-3\">\n {backAction && (\n backAction.href ? (\n renderLink({\n href: backAction.href,\n children: (\n <Button variant=\"outline\">\n <ArrowLeft className=\"mr-2 size-4\" />\n {backAction.label}\n </Button>\n ),\n })\n ) : (\n <Button variant=\"outline\" onClick={backAction.onClick}>\n <ArrowLeft className=\"mr-2 size-4\" />\n {backAction.label}\n </Button>\n )\n )}\n {action && (\n renderLink({\n href: action.href,\n children: <Button>{action.label}</Button>,\n })\n )}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { X } from 'lucide-react';\nimport {\n Button,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n cn,\n} from '@olwiba/cn';\n\nexport interface UpgradeComparisonRow {\n key?: React.Key;\n label: React.ReactNode;\n currentValue: React.ReactNode;\n upgradedValue: React.ReactNode;\n}\n\nexport interface UpgradePromptProps {\n /** Layout variant. `banner` is an inline strip; `comparison` is a full feature-table block. */\n variant: 'banner' | 'comparison';\n /** Primary heading shown in both variants. */\n title: React.ReactNode;\n /** Supporting copy shown below the title. */\n description: React.ReactNode;\n /** Label for the primary upgrade CTA. Include pricing here if relevant. */\n primaryActionLabel: React.ReactNode;\n /** Called when the primary upgrade CTA is clicked. */\n onPrimaryAction: () => void;\n /** Optional secondary action label, typically for \"maybe later\" or dismiss behavior. */\n secondaryActionLabel?: React.ReactNode;\n /** Called when the optional secondary action is clicked. */\n onSecondaryAction?: () => void;\n /** Small eyebrow label shown above the title in the comparison variant. */\n eyebrow?: React.ReactNode;\n /** Feature comparison rows for the comparison variant. */\n rows?: UpgradeComparisonRow[];\n /** Column header for the current plan. Defaults to \"Current\". */\n currentPlanLabel?: React.ReactNode;\n /** Column header for the upgraded plan. Defaults to \"Upgrade\". */\n upgradedPlanLabel?: React.ReactNode;\n /** Small body text shown below the comparison table, before the action buttons. */\n footer?: React.ReactNode;\n /** Optional close icon action for the comparison variant. */\n onClose?: () => void;\n /** Accessible label for the comparison close icon. Defaults to \"Close\". */\n closeLabel?: string;\n className?: string;\n}\n\nexport function UpgradePrompt({\n variant,\n title,\n description,\n primaryActionLabel,\n onPrimaryAction,\n secondaryActionLabel,\n onSecondaryAction,\n eyebrow,\n rows,\n currentPlanLabel = 'Current',\n upgradedPlanLabel = 'Upgrade',\n footer,\n onClose,\n closeLabel = 'Close',\n className,\n}: UpgradePromptProps) {\n const hasSecondaryAction = Boolean(secondaryActionLabel && onSecondaryAction);\n\n if (variant === 'banner') {\n return (\n <section\n className={cn(\n 'rounded-xl border border-dashed bg-card/40 p-5 sm:p-6',\n className,\n )}\n >\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h3 className=\"text-xl font-semibold\">{title}</h3>\n <p className=\"mt-2 max-w-xl text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n </div>\n\n <div className=\"flex flex-wrap gap-2\">\n {hasSecondaryAction ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onSecondaryAction}\n className=\"border\"\n >\n {secondaryActionLabel}\n </Button>\n ) : null}\n <Button type=\"button\" onClick={onPrimaryAction}>\n {primaryActionLabel}\n </Button>\n </div>\n </div>\n </section>\n );\n }\n\n return (\n <section\n className={cn(\n 'w-full max-w-3xl rounded-2xl border bg-card p-6 shadow-sm sm:p-7',\n className,\n )}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div>\n {eyebrow ? (\n <div className=\"font-mono text-[11px] uppercase tracking-[0.08em] text-primary\">\n {eyebrow}\n </div>\n ) : null}\n <h3\n className={cn(\n 'text-2xl font-semibold sm:text-[1.75rem]',\n eyebrow ? 'mt-3' : '',\n )}\n >\n {title}\n </h3>\n <p className=\"mt-3 max-w-2xl text-sm leading-6 text-muted-foreground sm:text-base\">\n {description}\n </p>\n </div>\n\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"inline-flex size-9 shrink-0 items-center justify-center rounded-lg border transition-colors hover:bg-muted\"\n aria-label={closeLabel}\n >\n <X className=\"size-4\" />\n </button>\n ) : null}\n </div>\n\n {rows && rows.length > 0 ? (\n <div className=\"mt-6 overflow-hidden rounded-xl border bg-muted/30\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead />\n <TableHead className=\"font-mono text-xs uppercase tracking-wider text-muted-foreground\">\n {currentPlanLabel}\n </TableHead>\n <TableHead className=\"font-mono text-xs uppercase tracking-wider text-primary\">\n {upgradedPlanLabel}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={row.key ?? index}>\n <TableCell className=\"font-medium\">{row.label}</TableCell>\n <TableCell className=\"font-mono text-muted-foreground\">\n {row.currentValue}\n </TableCell>\n <TableCell className=\"font-mono\">{row.upgradedValue}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n ) : null}\n\n <div\n className={cn(\n 'mt-6 flex flex-col gap-3 sm:flex-row sm:items-center',\n footer || hasSecondaryAction ? 'sm:justify-between' : 'sm:justify-end',\n )}\n >\n {footer ? <p className=\"text-sm text-muted-foreground\">{footer}</p> : null}\n <div className=\"flex flex-wrap gap-2\">\n {hasSecondaryAction ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onSecondaryAction}\n className=\"border\"\n >\n {secondaryActionLabel}\n </Button>\n ) : null}\n <Button type=\"button\" onClick={onPrimaryAction}>\n {primaryActionLabel}\n </Button>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface FadeInProps extends React.HTMLAttributes<HTMLDivElement> {\n delay?: number;\n duration?: number;\n direction?: 'up' | 'down' | 'left' | 'right' | 'none';\n once?: boolean;\n children: React.ReactNode;\n}\n\nconst translateMap = {\n up: 'translate-y-6',\n down: '-translate-y-6',\n left: 'translate-x-6',\n right: '-translate-x-6',\n none: '',\n};\n\nexport function FadeIn({\n delay = 0,\n duration = 600,\n direction = 'up',\n once = true,\n children,\n className,\n style,\n ...props\n}: FadeInProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n if (once) observer.disconnect();\n } else if (!once) {\n setVisible(false);\n }\n },\n { threshold: 0.1 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [once]);\n\n return (\n <div\n ref={ref}\n className={cn(\n 'transition-all',\n visible ? 'opacity-100 translate-x-0 translate-y-0' : `opacity-0 ${translateMap[direction]}`,\n className,\n )}\n style={{ transitionDuration: `${duration}ms`, transitionDelay: `${delay}ms`, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Badge, cn } from '@olwiba/cn';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface SectionTitleProps {\n title: string;\n description?: string;\n badge?: string;\n className?: string;\n}\n\nexport function SectionTitle({ title, description, badge, className }: SectionTitleProps) {\n return (\n <FadeIn direction=\"up\">\n <div className={cn('text-center', className)}>\n {badge && <Badge variant=\"secondary\" className=\"mb-4\">{badge}</Badge>}\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {title}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-2xl text-pretty text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n </FadeIn>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, Badge, Button } from '@olwiba/cn';\nimport { FadeIn } from '../motion/FadeIn';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface HeroSectionProps {\n heading: string;\n badge?: string;\n description: string;\n primaryCta: { label: string; href: string };\n secondaryCta?: { label: string; href: string };\n heroImage: React.ReactNode;\n avatarUrls?: string[];\n socialProofText?: string;\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function HeroSection({\n heading,\n badge,\n description,\n primaryCta,\n secondaryCta,\n heroImage,\n avatarUrls,\n socialProofText,\n renderLink = defaultRenderLink,\n}: HeroSectionProps) {\n return (\n <section className=\"overflow-hidden\">\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto grid max-w-6xl items-center gap-10 lg:grid-cols-2 lg:gap-16\">\n {/* Left - text content */}\n <FadeIn direction=\"left\">\n <div className=\"flex flex-col gap-6\">\n {badge && (\n <div>\n <Badge variant=\"secondary\">{badge}</Badge>\n </div>\n )}\n <h1 className=\"text-balance text-4xl font-semibold tracking-tight sm:text-5xl lg:text-6xl\">\n {heading}\n </h1>\n <p className=\"max-w-lg text-pretty text-lg text-muted-foreground\">\n {description}\n </p>\n <div className=\"flex flex-wrap items-center gap-3\">\n {renderLink({\n href: primaryCta.href,\n children: (\n <Button size=\"lg\">\n {primaryCta.label}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n ),\n })}\n {secondaryCta &&\n renderLink({\n href: secondaryCta.href,\n children: (\n <Button size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n ),\n })}\n </div>\n </div>\n </FadeIn>\n\n {/* Right - hero image */}\n <FadeIn direction=\"right\" delay={200}>\n <div className=\"overflow-hidden rounded-2xl\">\n {heroImage}\n </div>\n </FadeIn>\n </div>\n\n {/* Avatar social proof row */}\n {(avatarUrls?.length || socialProofText) && (\n <FadeIn direction=\"up\" delay={400}>\n <div className=\"mx-auto mt-12 flex max-w-6xl items-center gap-4\">\n {avatarUrls && avatarUrls.length > 0 && (\n <div className=\"flex -space-x-3\">\n {avatarUrls.map((url, i) => (\n <Avatar key={i} className=\"size-9 border-2 border-background\">\n <AvatarImage src={url} alt=\"\" />\n <AvatarFallback className=\"text-xs\">\n {String.fromCharCode(65 + (i % 26))}\n </AvatarFallback>\n </Avatar>\n ))}\n </div>\n )}\n {socialProofText && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {socialProofText}\n </p>\n )}\n </div>\n </FadeIn>\n )}\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { ArrowRight } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\n\nexport interface FeatureCardProps extends React.HTMLAttributes<HTMLDivElement> {\n icon: LucideIcon;\n title: string;\n description: string;\n href?: string;\n}\n\nexport function FeatureCard({ icon: Icon, title, description, href, className, ...props }: FeatureCardProps) {\n const content = (\n <div\n className={cn(\n 'group relative flex flex-col gap-4 rounded-2xl border bg-card p-6 transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md',\n href && 'cursor-pointer',\n className,\n )}\n {...props}\n >\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-primary/10 text-primary transition-colors group-hover:bg-primary group-hover:text-primary-foreground\">\n <Icon className=\"size-5\" />\n </div>\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <h3 className=\"font-semibold leading-tight\">{title}</h3>\n {href && (\n <ArrowRight className=\"size-4 shrink-0 text-muted-foreground opacity-0 transition-all group-hover:translate-x-0.5 group-hover:opacity-100\" />\n )}\n </div>\n <p className=\"text-sm leading-relaxed text-muted-foreground\">{description}</p>\n </div>\n </div>\n );\n\n if (href) {\n return <a href={href} className=\"block\">{content}</a>;\n }\n\n return content;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface StaggerChildrenProps extends React.HTMLAttributes<HTMLDivElement> {\n stagger?: number;\n delay?: number;\n duration?: number;\n direction?: 'up' | 'down' | 'left' | 'right' | 'none';\n once?: boolean;\n children: React.ReactNode;\n}\n\nconst translateMap = {\n up: [0, 20],\n down: [0, -20],\n left: [20, 0],\n right: [-20, 0],\n none: [0, 0],\n};\n\nexport function StaggerChildren({\n stagger = 80,\n delay = 0,\n duration = 500,\n direction = 'up',\n once = true,\n children,\n className,\n ...props\n}: StaggerChildrenProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n if (once) observer.disconnect();\n } else if (!once) {\n setVisible(false);\n }\n },\n { threshold: 0.1 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [once]);\n\n const [tx, ty] = translateMap[direction];\n\n return (\n <div ref={ref} className={cn(className)} {...props}>\n {React.Children.map(children, (child, i) => (\n <div\n style={{\n transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,\n transitionDelay: `${delay + i * stagger}ms`,\n opacity: visible ? 1 : 0,\n transform: visible ? 'translate(0,0)' : `translate(${tx}px,${ty}px)`,\n }}\n >\n {child}\n </div>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport type { LucideIcon } from 'lucide-react';\nimport { FeatureCard } from '../components/FeatureCard';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\n\nexport interface FeaturesSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n features: Array<{ icon: LucideIcon; title: string; description: string; href?: string }>;\n}\n\nexport function FeaturesSection({\n title = 'Everything you need to ship fast',\n description = 'A complete system of components, blocks, and hooks designed to work together - and get out of your way.',\n badge = 'Features',\n features,\n}: FeaturesSectionProps) {\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-4xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <StaggerChildren className=\"mt-12 grid gap-8 sm:grid-cols-2 lg:grid-cols-3\">\n {features.map((feature) => (\n <FeatureCard\n key={feature.title}\n icon={feature.icon}\n title={feature.title}\n description={feature.description}\n href={feature.href}\n />\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { ArrowRight, Sparkles } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\nimport { FadeIn } from '../motion/FadeIn';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface CtaSectionProps {\n heading: string;\n description: string;\n primaryCta: { label: string; href: string };\n secondaryCta?: { label: string; href: string };\n footnote?: string;\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function CtaSection({\n heading,\n description,\n primaryCta,\n secondaryCta,\n footnote,\n renderLink = defaultRenderLink,\n}: CtaSectionProps) {\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"relative px-6 py-16 sm:px-10 sm:py-24\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_center,hsl(var(--primary)/0.15),transparent_70%)]\" />\n <FadeIn direction=\"up\">\n <div className=\"relative mx-auto max-w-2xl text-center\">\n <div className=\"mb-4 inline-flex h-10 w-10 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <Sparkles className=\"size-5\" />\n </div>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {heading}\n </h2>\n <p className=\"mx-auto mt-4 max-w-lg text-pretty text-muted-foreground\">\n {description}\n </p>\n <div className=\"mt-8 flex flex-wrap items-center justify-center gap-3\">\n {renderLink({\n href: primaryCta.href,\n children: (\n <Button size=\"lg\">\n {primaryCta.label}\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n ),\n })}\n {secondaryCta &&\n renderLink({\n href: secondaryCta.href,\n children: (\n <Button size=\"lg\" variant=\"outline\">\n {secondaryCta.label}\n </Button>\n ),\n })}\n </div>\n {footnote && (\n <p className=\"mt-4 text-sm text-muted-foreground\">\n {footnote}\n </p>\n )}\n </div>\n </FadeIn>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Check, Minus } from 'lucide-react';\nimport { Badge, Button, cn, Separator } from '@olwiba/cn';\n\nexport interface PricingFeature {\n label: string;\n included: boolean;\n}\n\nexport interface PricingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n price: string;\n period?: string;\n description: string;\n features: PricingFeature[];\n cta: string;\n highlighted?: boolean;\n badge?: string;\n onSelect?: () => void;\n}\n\nexport function PricingCard({\n name,\n price,\n period = '/mo',\n description,\n features,\n cta,\n highlighted = false,\n badge,\n onSelect,\n className,\n ...props\n}: PricingCardProps) {\n return (\n <div\n className={cn(\n 'relative flex flex-col rounded-2xl border p-6',\n highlighted ? 'border-primary bg-primary/5 shadow-sm' : 'bg-card',\n className,\n )}\n {...props}\n >\n {badge && (\n <div className=\"absolute -top-3 left-1/2 -translate-x-1/2\">\n <Badge>{badge}</Badge>\n </div>\n )}\n\n <div className=\"space-y-1\">\n <div className=\"text-sm font-medium text-muted-foreground\">{name}</div>\n <div className=\"flex items-end gap-1\">\n <span className=\"text-4xl font-bold tracking-tight\">{price}</span>\n <span className=\"mb-1 text-sm text-muted-foreground\">{period}</span>\n </div>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n\n <Button\n variant={highlighted ? 'default' : 'outline'}\n className=\"mt-6 w-full\"\n onClick={onSelect}\n >\n {cta}\n </Button>\n\n <Separator className=\"my-6\" />\n\n <ul className=\"space-y-3 text-sm\">\n {features.map((feat) => (\n <li key={feat.label} className=\"flex items-center gap-2\">\n {feat.included ? (\n <>\n <Check className=\"size-4 shrink-0 text-primary\" />\n <span>{feat.label}</span>\n </>\n ) : (\n <>\n <Minus className=\"size-4 shrink-0 text-muted-foreground/40\" />\n <span className=\"text-muted-foreground/40\">{feat.label}</span>\n </>\n )}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Badge, cn } from '@olwiba/cn';\nimport { PricingCard, type PricingFeature } from '../components/PricingCard';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface PricingPlan {\n name: string;\n monthly: number;\n annual: number;\n description: string;\n cta: string;\n highlighted?: boolean;\n features: PricingFeature[];\n}\n\nexport interface PricingSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n plans: PricingPlan[];\n saveBadge?: string;\n isAuthenticated?: boolean;\n renderLink?: AppShellRenderLink;\n footnote?: string;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function PricingSection({\n title = 'Simple, transparent pricing',\n description = 'Start for free. Scale as you grow. No hidden fees.',\n badge = 'Pricing',\n plans,\n saveBadge = 'Save 34%',\n isAuthenticated,\n renderLink = defaultRenderLink,\n footnote,\n}: PricingSectionProps) {\n const [annual, setAnnual] = React.useState(false);\n\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n {/* Header */}\n <div className=\"text-center\">\n {badge && (\n <Badge variant=\"secondary\" className=\"mb-4\">{badge}</Badge>\n )}\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n {title}\n </h2>\n {description && (\n <p className=\"mx-auto mt-4 max-w-xl text-pretty text-muted-foreground\">\n {description}\n </p>\n )}\n\n {/* Billing toggle */}\n <div className=\"mt-6 inline-flex items-center gap-3 rounded-full border bg-muted p-1\">\n <button\n onClick={() => setAnnual(false)}\n className={cn(\n 'rounded-full px-4 py-1.5 text-sm font-medium transition-colors',\n !annual ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground',\n )}\n >\n Monthly\n </button>\n <button\n onClick={() => setAnnual(true)}\n className={cn(\n 'flex items-center gap-2 rounded-full px-4 py-1.5 text-sm font-medium transition-colors',\n annual ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground',\n )}\n >\n Annual\n {saveBadge && (\n <Badge variant=\"secondary\" className=\"text-xs\">{saveBadge}</Badge>\n )}\n </button>\n </div>\n </div>\n\n {/* Plan cards */}\n <StaggerChildren className=\"mt-10 grid gap-4 lg:grid-cols-3\">\n {plans.map((plan) => {\n const price = annual ? plan.annual : plan.monthly;\n return (\n <PricingCard\n key={plan.name}\n name={plan.name}\n price={`$${price}`}\n period={price > 0 ? '/mo' : ''}\n description={plan.description}\n features={plan.features}\n cta={plan.cta}\n highlighted={plan.highlighted}\n badge={plan.highlighted ? 'Most popular' : undefined}\n />\n );\n })}\n </StaggerChildren>\n\n {/* Footnote */}\n {footnote && (\n <p className=\"mt-8 text-center text-sm text-muted-foreground\">\n {footnote}\n </p>\n )}\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Quote, Star } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, cn } from '@olwiba/cn';\n\nexport interface TestimonialCardProps extends React.HTMLAttributes<HTMLDivElement> {\n quote: string;\n name: string;\n role: string;\n company?: string;\n avatar?: string;\n initials?: string;\n rating?: number;\n}\n\nexport function TestimonialCard({\n quote,\n name,\n role,\n company,\n avatar,\n initials,\n rating,\n className,\n ...props\n}: TestimonialCardProps) {\n return (\n <div\n className={cn('flex flex-col gap-4 rounded-2xl border bg-card p-6', className)}\n {...props}\n >\n <Quote className=\"size-4 text-muted-foreground/40\" />\n {rating != null && (\n <div className=\"flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <Star\n key={i}\n className={cn(\n 'size-4',\n i < rating\n ? 'fill-current text-amber-400'\n : 'text-muted-foreground/30',\n )}\n />\n ))}\n </div>\n )}\n <p className=\"flex-1 text-sm leading-relaxed\">{quote}</p>\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-9 rounded-xl\">\n <AvatarImage src={avatar} alt={name} />\n <AvatarFallback className=\"rounded-xl text-xs\">{initials ?? name.slice(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n <div>\n <div className=\"text-sm font-medium leading-tight\">{name}</div>\n <div className=\"text-xs text-muted-foreground\">\n {role}{company ? ` · ${company}` : ''}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { TestimonialCard } from '../components/TestimonialCard';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\n\nexport interface TestimonialsSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n testimonials: Array<{\n quote: string;\n name: string;\n role: string;\n company?: string;\n avatar?: string;\n initials?: string;\n rating?: number;\n }>;\n}\n\nexport function TestimonialsSection({\n title = 'Trusted by teams shipping real products',\n description = \"Here's what engineers and product teams say after using Olwiba in production.\",\n badge = 'Testimonials',\n testimonials,\n}: TestimonialsSectionProps) {\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <StaggerChildren className=\"mt-12 columns-1 gap-4 sm:columns-2 lg:columns-3\">\n {testimonials.map((t) => (\n <div\n key={t.name}\n className=\"mb-4 break-inside-avoid transition-transform hover:-translate-y-0.5\"\n >\n <TestimonialCard\n quote={t.quote}\n name={t.name}\n role={t.role}\n company={t.company}\n avatar={t.avatar}\n initials={t.initials}\n rating={t.rating}\n />\n </div>\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { Github, Linkedin, Twitter } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage, Badge } from '@olwiba/cn';\n\nconst team = [\n {\n name: 'Olivia Reed',\n role: 'Co-Founder & CEO',\n bio: 'Previously led product at two YC companies. Obsessed with design systems and developer experience.',\n avatar: 'https://ui.shadcn.com/avatars/01.png',\n initials: 'OR',\n social: { twitter: '#', github: '#', linkedin: '#' },\n },\n {\n name: 'Marcus Webb',\n role: 'Co-Founder & CTO',\n bio: 'Full-stack engineer with 12 years building UI infrastructure. Open source maintainer.',\n avatar: 'https://ui.shadcn.com/avatars/02.png',\n initials: 'MW',\n social: { twitter: '#', github: '#', linkedin: '#' },\n },\n {\n name: 'Priya Nair',\n role: 'Head of Design',\n bio: 'Interaction designer turned design systems engineer. Bridges the gap between Figma and production.',\n avatar: 'https://ui.shadcn.com/avatars/03.png',\n initials: 'PN',\n social: { twitter: '#', github: null, linkedin: '#' },\n },\n {\n name: 'Daniel Frost',\n role: 'Senior Engineer',\n bio: 'Accessibility and performance specialist. If it doesn\\'t work with a keyboard, it\\'s broken.',\n avatar: 'https://ui.shadcn.com/avatars/04.png',\n initials: 'DF',\n social: { twitter: null, github: '#', linkedin: '#' },\n },\n {\n name: 'Aisha Okafor',\n role: 'Developer Relations',\n bio: 'Writes docs, builds examples, and makes sure every engineer can ship their first block in under an hour.',\n avatar: 'https://ui.shadcn.com/avatars/05.png',\n initials: 'AO',\n social: { twitter: '#', github: '#', linkedin: '#' },\n },\n {\n name: 'Tom Halvorsen',\n role: 'Growth',\n bio: 'Turns happy users into loud advocates. Runs the community and keeps the changelog sharp.',\n avatar: 'https://ui.shadcn.com/avatars/06.png',\n initials: 'TH',\n social: { twitter: '#', github: null, linkedin: '#' },\n },\n];\n\nexport function TeamSection() {\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-5xl\">\n <div className=\"text-center\">\n <Badge variant=\"secondary\" className=\"mb-4\">Team</Badge>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n The people behind Olwiba\n </h2>\n <p className=\"mx-auto mt-4 max-w-xl text-pretty text-muted-foreground\">\n A small team with deep experience in design systems, open source, and developer tooling.\n </p>\n </div>\n\n <div className=\"mt-12 grid gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n {team.map((member) => (\n <div key={member.name} className=\"rounded-2xl border bg-muted/40 p-5\">\n <div className=\"flex items-start gap-4\">\n <Avatar className=\"size-12 rounded-xl\">\n <AvatarImage src={member.avatar} alt={member.name} />\n <AvatarFallback className=\"rounded-xl\">{member.initials}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <div className=\"font-semibold leading-tight\">{member.name}</div>\n <div className=\"text-sm text-muted-foreground\">{member.role}</div>\n </div>\n </div>\n <p className=\"mt-3 text-sm leading-relaxed text-muted-foreground\">{member.bio}</p>\n <div className=\"mt-4 flex items-center gap-2\">\n {member.social.twitter && (\n <a href={member.social.twitter} aria-label=\"Twitter\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Twitter className=\"size-3.5\" />\n </a>\n )}\n {member.social.github && (\n <a href={member.social.github} aria-label=\"GitHub\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Github className=\"size-3.5\" />\n </a>\n )}\n {member.social.linkedin && (\n <a href={member.social.linkedin} aria-label=\"LinkedIn\" className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\">\n <Linkedin className=\"size-3.5\" />\n </a>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface FaqSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n items: Array<{ question: string; answer: string }>;\n}\n\nexport function FaqSection({\n title = 'Frequently asked questions',\n description = 'Everything you need to know before getting started.',\n badge = 'FAQ',\n items,\n}: FaqSectionProps) {\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"mx-auto max-w-3xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <FadeIn direction=\"up\">\n <Accordion type=\"single\" collapsible className=\"mt-10 w-full\">\n {items.map((item, i) => (\n <AccordionItem key={i} value={`item-${i}`}>\n <AccordionTrigger className=\"text-left text-sm font-medium\">\n {item.question}\n </AccordionTrigger>\n <AccordionContent className=\"text-sm text-muted-foreground\">\n {item.answer}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </FadeIn>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface CountUpProps extends React.HTMLAttributes<HTMLSpanElement> {\n from?: number;\n to: number;\n duration?: number;\n decimals?: number;\n prefix?: string;\n suffix?: string;\n once?: boolean;\n}\n\nexport function CountUp({\n from = 0,\n to,\n duration = 1500,\n decimals = 0,\n prefix = '',\n suffix = '',\n once = true,\n className,\n ...props\n}: CountUpProps) {\n const ref = React.useRef<HTMLSpanElement>(null);\n const [value, setValue] = React.useState(from);\n const hasStarted = React.useRef(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting && (!once || !hasStarted.current)) {\n hasStarted.current = true;\n const start = performance.now();\n\n const tick = (now: number) => {\n const elapsed = now - start;\n const progress = Math.min(elapsed / duration, 1);\n const eased = 1 - Math.pow(1 - progress, 3);\n setValue(from + (to - from) * eased);\n if (progress < 1) requestAnimationFrame(tick);\n };\n\n requestAnimationFrame(tick);\n }\n },\n { threshold: 0.5 },\n );\n\n observer.observe(el);\n return () => observer.disconnect();\n }, [from, to, duration, once]);\n\n return (\n <span ref={ref} className={cn(className)} {...props}>\n {prefix}{value.toFixed(decimals)}{suffix}\n </span>\n );\n}\n","'use client';\n\nimport { Separator } from '@olwiba/cn';\nimport { SectionTitle } from './SectionTitle';\nimport { StaggerChildren } from '../motion/StaggerChildren';\nimport { CountUp } from '../motion/CountUp';\n\nexport interface StatsSectionProps {\n title?: string;\n description?: string;\n badge?: string;\n stats: Array<{ value: string; label: string; description?: string }>;\n}\n\nfunction parseStatValue(value: string) {\n const match = value.match(/^(\\d+(?:\\.\\d+)?)(.*)/);\n if (!match) return null;\n const num = parseFloat(match[1]);\n const suffix = match[2] || '';\n const decimals = match[1].includes('.') ? match[1].split('.')[1].length : 0;\n return { num, suffix, decimals };\n}\n\nfunction StatValue({ value }: { value: string }) {\n const parsed = parseStatValue(value);\n if (!parsed) return <>{value}</>;\n return <CountUp to={parsed.num} decimals={parsed.decimals} suffix={parsed.suffix} />;\n}\n\nexport function StatsSection({\n title = 'Built for scale, used in production',\n description,\n badge = 'By the numbers',\n stats,\n}: StatsSectionProps) {\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"relative px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_bottom,hsl(var(--primary)/0.08),transparent_60%)]\" />\n <div className=\"relative mx-auto max-w-4xl\">\n <SectionTitle title={title} description={description} badge={badge} />\n\n <StaggerChildren className=\"mt-12 grid gap-px overflow-hidden rounded-2xl border bg-border sm:grid-cols-2 lg:grid-cols-4\">\n {stats.map((stat) => (\n <div key={stat.label} className=\"flex flex-col gap-2 bg-card px-6 py-8\">\n <div className=\"text-4xl font-bold tracking-tight\">\n <StatValue value={stat.value} />\n </div>\n <div className=\"font-medium\">{stat.label}</div>\n {stat.description && (\n <>\n <Separator />\n <p className=\"text-sm text-muted-foreground\">{stat.description}</p>\n </>\n )}\n </div>\n ))}\n </StaggerChildren>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ArrowRight, Mail } from 'lucide-react';\nimport { Badge, Button, Input } from '@olwiba/cn';\n\nexport function NewsletterSection() {\n const [email, setEmail] = React.useState('');\n const [submitted, setSubmitted] = React.useState(false);\n\n function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n if (!email) return;\n setSubmitted(true);\n }\n\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"relative px-6 py-14 sm:px-10 sm:py-20\">\n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,hsl(var(--primary)/0.1),transparent_60%)]\" />\n <div className=\"relative mx-auto max-w-xl text-center\">\n <div className=\"mb-4 inline-flex h-10 w-10 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <Mail className=\"size-5\" />\n </div>\n\n <Badge variant=\"secondary\" className=\"mb-3\">Newsletter</Badge>\n <h2 className=\"text-balance text-3xl font-semibold tracking-tight sm:text-4xl\">\n Stay in the loop\n </h2>\n <p className=\"mx-auto mt-4 max-w-sm text-pretty text-muted-foreground\">\n New components, release notes, and product tips — straight to your inbox. No spam, unsubscribe any time.\n </p>\n\n {submitted ? (\n <div className=\"mt-8 rounded-2xl border bg-muted/50 px-6 py-5 text-sm\">\n <span className=\"font-medium\">You're on the list.</span>{' '}\n <span className=\"text-muted-foreground\">We'll be in touch soon.</span>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"mt-8 flex flex-col gap-3 sm:flex-row\">\n <Input\n type=\"email\"\n placeholder=\"you@company.com\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n className=\"flex-1\"\n />\n <Button type=\"submit\">\n Subscribe\n <ArrowRight className=\"ml-2 size-4\" />\n </Button>\n </form>\n )}\n\n <p className=\"mt-4 text-xs text-muted-foreground\">\n By subscribing you agree to our{' '}\n <a href=\"#\" className=\"underline underline-offset-4 hover:text-foreground\">Privacy Policy</a>.\n </p>\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Mail, MapPin, MessageSquare, Phone, Send } from 'lucide-react';\nimport { Badge, Button, Input, Label, Separator, Textarea } from '@olwiba/cn';\n\nconst contactInfo = [\n { Icon: Mail, label: 'Email', value: 'hello@olwiba.com' },\n { Icon: Phone, label: 'Phone', value: '+1 (555) 000-0000' },\n { Icon: MapPin, label: 'Office', value: 'San Francisco, CA' },\n];\n\nexport function ContactSection() {\n const [submitted, setSubmitted] = React.useState(false);\n\n function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n setSubmitted(true);\n }\n\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <div className=\"grid lg:grid-cols-[1fr_1.4fr]\">\n {/* Left panel */}\n <div className=\"relative overflow-hidden bg-primary px-8 py-12 text-primary-foreground\">\n <div className=\"absolute inset-0 bg-[radial-gradient(circle_at_top_right,hsl(var(--primary-foreground)/0.1),transparent_60%)]\" />\n <div className=\"relative space-y-6\">\n <div>\n <Badge variant=\"secondary\" className=\"mb-3 bg-primary-foreground/15 text-primary-foreground hover:bg-primary-foreground/20\">\n Contact us\n </Badge>\n <h2 className=\"text-2xl font-semibold\">Let's talk</h2>\n <p className=\"mt-2 text-sm text-primary-foreground/70\">\n Have a question or want to work together? Fill in the form and we'll get back to you within one business day.\n </p>\n </div>\n\n <Separator className=\"bg-primary-foreground/20\" />\n\n <div className=\"space-y-4\">\n {contactInfo.map(({ Icon, label, value }) => (\n <div key={label} className=\"flex items-center gap-3\">\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary-foreground/10\">\n <Icon className=\"size-4\" />\n </div>\n <div>\n <div className=\"text-xs text-primary-foreground/60\">{label}</div>\n <div className=\"text-sm font-medium\">{value}</div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Form */}\n <div className=\"p-8\">\n {submitted ? (\n <div className=\"flex h-full min-h-[320px] flex-col items-center justify-center gap-4 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <MessageSquare className=\"size-6\" />\n </div>\n <div>\n <h3 className=\"font-semibold\">Message sent</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Thanks for reaching out. We'll get back to you within one business day.\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => setSubmitted(false)}>Send another</Button>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className=\"space-y-5\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"contact-first\">First name</Label>\n <Input id=\"contact-first\" placeholder=\"Olivia\" required />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"contact-last\">Last name</Label>\n <Input id=\"contact-last\" placeholder=\"Reed\" required />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"contact-email\">Email</Label>\n <Input id=\"contact-email\" type=\"email\" placeholder=\"olivia@company.com\" required />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"contact-subject\">Subject</Label>\n <Input id=\"contact-subject\" placeholder=\"How can we help?\" required />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"contact-message\">Message</Label>\n <Textarea\n id=\"contact-message\"\n placeholder=\"Tell us what you're working on...\"\n className=\"min-h-28 resize-none\"\n required\n />\n </div>\n <Button type=\"submit\" className=\"w-full\">\n Send message\n <Send className=\"ml-2 size-4\" />\n </Button>\n </form>\n )}\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Moon, Sun } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\n\nexport function ThemeSwitchMinimal() {\n const [theme, setThemeState] = React.useState<'light' | 'dark'>('dark');\n\n React.useEffect(() => {\n const stored = localStorage.getItem('theme') as 'light' | 'dark' | null;\n const resolved = stored ?? (document.documentElement.classList.contains('dark') ? 'dark' : 'light');\n setThemeState(resolved);\n }, []);\n\n const toggle = () => {\n const next = theme === 'dark' ? 'light' : 'dark';\n setThemeState(next);\n localStorage.setItem('theme', next);\n document.documentElement.classList.toggle('dark', next === 'dark');\n };\n\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={toggle} className=\"size-8\" aria-label=\"Toggle theme\">\n {theme === 'dark' ? <Sun className=\"size-4\" /> : <Moon className=\"size-4\" />}\n </Button>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Menu, X } from 'lucide-react';\nimport { Button, Separator, Sheet, SheetContent, SheetTrigger } from '@olwiba/cn';\nimport type { AppShellRenderLink } from '../app/AppShell';\nimport { ThemeSwitchMinimal } from '../components/ThemeSwitchMinimal';\n\nexport interface NavbarProps {\n brand: { name: string; logo?: React.ReactNode; href?: string };\n navLinks: Array<{ label: string; href: string }>;\n cta?: {\n primary?: { label: string; href: string };\n secondary?: { label: string; href: string };\n };\n showThemeToggle?: boolean;\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function Navbar({\n brand,\n navLinks,\n cta,\n showThemeToggle = false,\n renderLink = defaultRenderLink,\n}: NavbarProps) {\n const [open, setOpen] = React.useState(false);\n const brandHref = brand.href ?? '/';\n\n return (\n <section className=\"overflow-hidden rounded-2xl border bg-card\">\n <nav className=\"grid h-16 grid-cols-[1fr_auto_1fr] items-center px-6\">\n {/* Brand — left column */}\n {renderLink({\n href: brandHref,\n children: (\n <span className=\"flex items-center gap-2 font-semibold\">\n {brand.logo && (\n <span className=\"flex h-7 w-7 items-center justify-center rounded-lg bg-primary text-primary-foreground\">\n {brand.logo}\n </span>\n )}\n <span>{brand.name}</span>\n </span>\n ),\n })}\n\n {/* Desktop nav links — center column, truly centered */}\n <div className=\"hidden items-center gap-1 md:flex\">\n {navLinks.map((link) => (\n <span key={link.label}>\n {renderLink({\n href: link.href,\n className: 'rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground',\n children: link.label,\n })}\n </span>\n ))}\n </div>\n\n {/* Desktop CTAs — right column, right-aligned */}\n <div className=\"hidden items-center justify-end gap-3 md:flex\">\n {cta?.secondary &&\n renderLink({\n href: cta.secondary.href,\n children: <Button variant=\"ghost\" size=\"sm\">{cta.secondary.label}</Button>,\n })}\n {cta?.primary &&\n renderLink({\n href: cta.primary.href,\n children: <Button size=\"sm\">{cta.primary.label}</Button>,\n })}\n {showThemeToggle && <ThemeSwitchMinimal />}\n </div>\n\n {/* Mobile drawer — right column on small screens */}\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"justify-self-end md:hidden\">\n <Menu className=\"size-5\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"w-72\">\n <div className=\"flex items-center justify-between pb-4\">\n <span onClick={() => setOpen(false)} className=\"cursor-pointer\">\n {renderLink({\n href: brandHref,\n children: (\n <span className=\"flex items-center gap-2 font-semibold\">\n {brand.logo && (\n <span className=\"flex h-7 w-7 items-center justify-center rounded-lg bg-primary text-primary-foreground\">\n {brand.logo}\n </span>\n )}\n <span>{brand.name}</span>\n </span>\n ),\n })}\n </span>\n <div className=\"flex items-center gap-1\">\n {showThemeToggle && <ThemeSwitchMinimal />}\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setOpen(false)}>\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close menu</span>\n </Button>\n </div>\n </div>\n <Separator />\n <nav className=\"mt-4 flex flex-col gap-1\">\n {navLinks.map((link) => (\n <span key={link.label} onClick={() => setOpen(false)}>\n {renderLink({\n href: link.href,\n className: 'block rounded-md px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground',\n children: link.label,\n })}\n </span>\n ))}\n </nav>\n <div className=\"mt-6 flex flex-col gap-2\">\n {cta?.secondary &&\n renderLink({\n href: cta.secondary.href,\n children: <Button variant=\"outline\" className=\"w-full\">{cta.secondary.label}</Button>,\n })}\n {cta?.primary &&\n renderLink({\n href: cta.primary.href,\n children: <Button className=\"w-full\">{cta.primary.label}</Button>,\n })}\n </div>\n </SheetContent>\n </Sheet>\n </nav>\n </section>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface FooterProps {\n brand: { name: string; logo?: ReactNode; href?: string };\n navLinks?: Array<{ label: string; href: string }>;\n socialLinks?: Array<{ label: string; href: string; icon: ReactNode }>;\n legal?: string;\n renderLink?: AppShellRenderLink;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function Footer({\n brand,\n navLinks,\n socialLinks,\n legal,\n renderLink = defaultRenderLink,\n}: FooterProps) {\n const brandHref = brand.href ?? '/';\n const copyrightText = legal ?? `\\u00A9 ${new Date().getFullYear()} ${brand.name}. All rights reserved.`;\n\n return (\n <footer className=\"bg-gray-900\">\n <div className=\"mx-auto max-w-7xl overflow-hidden px-6 py-20 sm:py-24 lg:px-8\">\n {/* Brand */}\n <div className=\"flex justify-center\">\n {renderLink({\n href: brandHref,\n className: 'flex items-center gap-2',\n children: (\n <>\n {brand.logo && (\n <span className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-white/10 text-white\">\n {brand.logo}\n </span>\n )}\n <span className=\"text-lg font-semibold text-white\">{brand.name}</span>\n </>\n ),\n })}\n </div>\n\n {/* Nav links */}\n {navLinks && navLinks.length > 0 && (\n <nav className=\"mt-10 flex flex-wrap justify-center gap-x-12 gap-y-3\" aria-label=\"Footer\">\n {navLinks.map(({ label, href }) => (\n <div key={label}>\n {renderLink({\n href,\n className: 'text-sm/6 text-gray-400 hover:text-white transition-colors',\n children: label,\n })}\n </div>\n ))}\n </nav>\n )}\n\n {/* Social icons */}\n {socialLinks && socialLinks.length > 0 && (\n <div className=\"mt-10 flex justify-center gap-x-10\">\n {socialLinks.map(({ label, href, icon }) => (\n <a\n key={label}\n href={href}\n aria-label={label}\n className=\"text-gray-400 hover:text-gray-300 transition-colors\"\n >\n {icon}\n </a>\n ))}\n </div>\n )}\n\n {/* Copyright */}\n <p className=\"mt-10 text-center text-sm/6 text-gray-500\">\n {copyrightText}\n </p>\n </div>\n </footer>\n );\n}\n","'use client';\n\nimport { FadeIn } from '../motion/FadeIn';\n\nexport interface LogoStripProps {\n logos: Array<{ src: string; darkSrc?: string; alt: string; href?: string }>;\n label?: string;\n speed?: 'slow' | 'normal' | 'fast';\n}\n\nconst speedDuration = {\n slow: '60s',\n normal: '40s',\n fast: '25s',\n} as const;\n\nexport function LogoStrip({\n logos,\n label,\n speed = 'normal',\n}: LogoStripProps) {\n const duration = speedDuration[speed];\n\n return (\n <FadeIn direction=\"up\">\n <section className=\"overflow-hidden py-8\">\n {label && (\n <p className=\"mb-6 text-center text-sm text-muted-foreground\">{label}</p>\n )}\n <div\n className=\"relative\"\n style={{\n maskImage: 'linear-gradient(to right, transparent, black 10%, black 90%, transparent)',\n WebkitMaskImage: 'linear-gradient(to right, transparent, black 10%, black 90%, transparent)',\n }}\n >\n <div\n className=\"flex w-max gap-12\"\n style={{\n animation: `logo-strip-scroll ${duration} linear infinite`,\n }}\n >\n {/* Render logos twice for seamless loop */}\n {[...logos, ...logos].map((logo, i) => {\n const img = logo.darkSrc ? (\n <>\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0 dark:hidden\"\n />\n <img\n src={logo.darkSrc}\n alt={logo.alt}\n className=\"hidden h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0 dark:block\"\n />\n </>\n ) : (\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 w-auto object-contain opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0\"\n />\n );\n\n return logo.href ? (\n <a\n key={`${logo.alt}-${i}`}\n href={logo.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex shrink-0 items-center\"\n >\n {img}\n </a>\n ) : (\n <div key={`${logo.alt}-${i}`} className=\"flex shrink-0 items-center\">\n {img}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n\n <style>{`\n @keyframes logo-strip-scroll {\n from { transform: translateX(0); }\n to { transform: translateX(-50%); }\n }\n `}</style>\n </FadeIn>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\n// ─── Grid ─────────────────────────────────────────────────────────────────────\n\ninterface GridUnderlayProps extends React.SVGAttributes<SVGElement> {\n variant: 'dots' | 'lines' | 'cross';\n size?: number;\n className?: string;\n}\n\nfunction GridUnderlay({ variant, size = 24, className, ...props }: GridUnderlayProps) {\n const id = React.useId();\n\n const pattern =\n variant === 'dots' ? (\n <circle cx={size / 2} cy={size / 2} r={1} fill=\"currentColor\" />\n ) : variant === 'lines' ? (\n <path d={`M ${size} 0 L 0 0 0 ${size}`} fill=\"none\" stroke=\"currentColor\" strokeWidth={0.5} />\n ) : (\n <>\n <line x1={size / 2} y1={0} x2={size / 2} y2={size} stroke=\"currentColor\" strokeWidth={0.5} />\n <line x1={0} y1={size / 2} x2={size} y2={size / 2} stroke=\"currentColor\" strokeWidth={0.5} />\n </>\n );\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-0 h-full w-full text-foreground/15', className)}\n {...props}\n >\n <defs>\n <pattern id={id} width={size} height={size} patternUnits=\"userSpaceOnUse\">\n {pattern}\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill={`url(#${id})`} />\n </svg>\n );\n}\n\n// ─── Glow ─────────────────────────────────────────────────────────────────────\n\nconst blurClass = { sm: 'blur-xl', md: 'blur-2xl', lg: 'blur-3xl', xl: 'blur-[80px]' } as const;\n\ninterface GlowUnderlayProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: number;\n color?: string;\n followCursor?: boolean;\n blur?: keyof typeof blurClass;\n}\n\nfunction GlowUnderlay({\n size = 400,\n color = 'color-mix(in oklch, var(--primary) 45%, transparent)',\n followCursor = false,\n blur = 'lg',\n className,\n style,\n ...props\n}: GlowUnderlayProps) {\n const [pos, setPos] = React.useState({ x: '50%', y: '50%' });\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!followCursor) return;\n const handleMouseMove = (e: MouseEvent) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setPos({ x: `${e.clientX - rect.left}px`, y: `${e.clientY - rect.top}px` });\n };\n window.addEventListener('mousemove', handleMouseMove);\n return () => window.removeEventListener('mousemove', handleMouseMove);\n }, [followCursor]);\n\n return (\n <div ref={containerRef} className={cn('pointer-events-none absolute inset-0 overflow-hidden', className)} {...props}>\n <div\n aria-hidden=\"true\"\n className={cn('absolute rounded-full', blurClass[blur])}\n style={{\n width: size,\n height: size,\n background: color,\n left: pos.x,\n top: pos.y,\n transform: 'translate(-50%, -50%)',\n ...style,\n }}\n />\n </div>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\ntype UnderlayVariant = 'dots' | 'lines' | 'cross' | 'glow';\n\ntype UnderlayProps =\n | ({ variant: 'dots' | 'lines' | 'cross' } & Omit<GridUnderlayProps, 'variant'>)\n | ({ variant: 'glow' } & Omit<GlowUnderlayProps, 'variant'>);\n\nexport function Underlay(props: UnderlayProps) {\n if (props.variant === 'glow') {\n return <GlowUnderlay {...(props as GlowUnderlayProps)} />;\n }\n return <GridUnderlay {...(props as GridUnderlayProps)} />;\n}\n\nexport type { UnderlayProps, UnderlayVariant };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\nimport { Loader2 } from 'lucide-react';\n\n// ─── Dim ──────────────────────────────────────────────────────────────────────\n\ninterface DimOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n opacity?: number;\n}\n\nfunction DimOverlay({ opacity = 0.5, className, style, ...props }: DimOverlayProps) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn('absolute inset-0 bg-background', className)}\n style={{ opacity, ...style }}\n {...props}\n />\n );\n}\n\n// ─── Scrim ────────────────────────────────────────────────────────────────────\n\ntype ScrimDirection = 'top' | 'bottom' | 'left' | 'right';\n\ninterface ScrimOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: ScrimDirection;\n color?: string;\n}\n\nconst scrimGradients: Record<ScrimDirection, string> = {\n bottom: 'to bottom',\n top: 'to top',\n left: 'to left',\n right: 'to right',\n};\n\nfunction ScrimOverlay({ direction = 'bottom', color = 'var(--background)', className, style, ...props }: ScrimOverlayProps) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-x-0 bottom-0 h-1/2', className)}\n style={{\n background: `linear-gradient(${scrimGradients[direction]}, transparent, ${color})`,\n ...style,\n }}\n {...props}\n />\n );\n}\n\n// ─── Loading ──────────────────────────────────────────────────────────────────\n\ninterface LoadingOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string;\n}\n\nfunction LoadingOverlay({ label, className, ...props }: LoadingOverlayProps) {\n return (\n <div\n role=\"status\"\n className={cn('absolute inset-0 flex flex-col items-center justify-center gap-2 bg-background/80 backdrop-blur-sm', className)}\n {...props}\n >\n <Loader2 className=\"size-5 animate-spin text-muted-foreground\" />\n {label && <p className=\"text-xs text-muted-foreground\">{label}</p>}\n </div>\n );\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\ntype OverlayVariant = 'dim' | 'scrim' | 'loading';\n\ntype OverlayProps =\n | ({ variant: 'dim' } & DimOverlayProps)\n | ({ variant: 'scrim' } & ScrimOverlayProps)\n | ({ variant: 'loading' } & LoadingOverlayProps);\n\nexport function Overlay(props: OverlayProps) {\n if (props.variant === 'dim') return <DimOverlay {...(props as DimOverlayProps)} />;\n if (props.variant === 'scrim') return <ScrimOverlay {...(props as ScrimOverlayProps)} />;\n return <LoadingOverlay {...(props as LoadingOverlayProps)} />;\n}\n\nexport type { OverlayProps, OverlayVariant };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface PageTransitionProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'fade' | 'slide-up' | 'slide-down';\n duration?: number;\n children: React.ReactNode;\n}\n\nexport function PageTransition({\n variant = 'fade',\n duration = 300,\n children,\n className,\n style,\n ...props\n}: PageTransitionProps) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n const id = requestAnimationFrame(() => setMounted(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n const initial: React.CSSProperties =\n variant === 'slide-up'\n ? { opacity: 0, transform: 'translateY(16px)' }\n : variant === 'slide-down'\n ? { opacity: 0, transform: 'translateY(-16px)' }\n : { opacity: 0 };\n\n const entered: React.CSSProperties = { opacity: 1, transform: 'translateY(0)' };\n\n return (\n <div\n className={cn(className)}\n style={{\n transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,\n ...(mounted ? entered : initial),\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Search } from 'lucide-react';\nimport {\n Badge,\n Button,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n cn,\n} from '@olwiba/cn';\n\nexport interface SpotlightItem {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n onSelect: () => void;\n}\n\nexport interface SpotlightGroup {\n heading: string;\n items: SpotlightItem[];\n}\n\nexport interface SpotlightProps {\n groups: SpotlightGroup[];\n placeholder?: string;\n trigger?: React.ReactNode;\n triggerClassName?: string;\n shortcut?: string;\n}\n\nexport function Spotlight({\n groups,\n placeholder = 'Search anything...',\n trigger,\n triggerClassName,\n shortcut = '⌘K',\n}: SpotlightProps) {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen((v) => !v);\n }\n };\n document.addEventListener('keydown', down);\n return () => document.removeEventListener('keydown', down);\n }, []);\n\n return (\n <>\n {trigger ? (\n <div onClick={() => setOpen(true)}>{trigger}</div>\n ) : (\n <Button\n variant=\"outline\"\n onClick={() => setOpen(true)}\n className={cn('w-64 justify-between text-muted-foreground', triggerClassName)}\n >\n <span className=\"flex items-center gap-2\">\n <Search className=\"size-4\" />\n {placeholder}\n </span>\n <Badge variant=\"secondary\" className=\"font-mono text-xs\">{shortcut}</Badge>\n </Button>\n )}\n\n <CommandDialog open={open} onOpenChange={setOpen}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n {groups.map((group, i) => (\n <React.Fragment key={group.heading}>\n {i > 0 && <CommandSeparator />}\n <CommandGroup heading={group.heading}>\n {group.items.map((item) => (\n <CommandItem\n key={item.id}\n onSelect={() => { item.onSelect(); setOpen(false); }}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n <span>{item.label}</span>\n {item.description && (\n <span className=\"ml-2 text-xs text-muted-foreground\">{item.description}</span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n </React.Fragment>\n ))}\n </CommandList>\n </CommandDialog>\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, cn } from '@olwiba/cn';\n\nexport interface DockItem {\n icon: LucideIcon;\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface DockProps extends React.HTMLAttributes<HTMLDivElement> {\n items: DockItem[];\n iconSize?: number;\n magnification?: number;\n}\n\nconst BASE = 40;\nconst MAGNIFY_RADIUS = 80;\n\nexport function Dock({ items, iconSize = BASE, magnification = 1.7, className, ...props }: DockProps) {\n const [mouseX, setMouseX] = React.useState<number | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n function getScale(index: number): number {\n if (mouseX === null || !containerRef.current) return 1;\n const container = containerRef.current;\n const buttons = container.querySelectorAll<HTMLElement>('[data-dock-item]');\n const btn = buttons[index];\n if (!btn) return 1;\n const rect = btn.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const distance = Math.abs(mouseX - centerX);\n if (distance > MAGNIFY_RADIUS) return 1;\n const t = 1 - distance / MAGNIFY_RADIUS;\n return 1 + (magnification - 1) * t;\n }\n\n return (\n <TooltipProvider delayDuration={0}>\n <div\n ref={containerRef}\n onMouseMove={(e) => setMouseX(e.clientX)}\n onMouseLeave={() => setMouseX(null)}\n className={cn(\n 'inline-flex items-end gap-2 rounded-2xl border bg-background/80 px-4 py-3 shadow-lg backdrop-blur-md',\n className,\n )}\n {...props}\n >\n {items.map((item, i) => {\n const scale = getScale(i);\n const size = iconSize * scale;\n\n const button = (\n <Tooltip key={item.label}>\n <TooltipTrigger asChild>\n <button\n data-dock-item\n onClick={item.onClick}\n className=\"flex items-center justify-center rounded-xl bg-muted text-foreground transition-colors hover:bg-accent\"\n style={{\n width: size,\n height: size,\n transition: 'width 100ms ease, height 100ms ease',\n transformOrigin: 'bottom center',\n }}\n aria-label={item.label}\n >\n <item.icon style={{ width: size * 0.5, height: size * 0.5 }} />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\" sideOffset={8}>\n <p>{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n\n if (item.href) {\n return (\n <a key={item.label} href={item.href}>\n {button}\n </a>\n );\n }\n\n return button;\n })}\n </div>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n ContextMenu as RadixContextMenu,\n} from '@olwiba/cn';\n\nexport interface ContextMenuAction {\n type: 'item';\n label: string;\n shortcut?: string;\n disabled?: boolean;\n onSelect?: () => void;\n}\n\nexport interface ContextMenuSeparatorDef {\n type: 'separator';\n}\n\nexport interface ContextMenuLabelDef {\n type: 'label';\n label: string;\n}\n\nexport interface ContextMenuSubDef {\n type: 'sub';\n label: string;\n items: ContextMenuDef[];\n}\n\nexport type ContextMenuDef = ContextMenuAction | ContextMenuSeparatorDef | ContextMenuLabelDef | ContextMenuSubDef;\n\nexport interface ContextMenuProps {\n items: ContextMenuDef[];\n children: React.ReactNode;\n}\n\nfunction renderItems(items: ContextMenuDef[]) {\n return items.map((item, i) => {\n if (item.type === 'separator') return <ContextMenuSeparator key={i} />;\n if (item.type === 'label') return <ContextMenuLabel key={i}>{item.label}</ContextMenuLabel>;\n if (item.type === 'sub') {\n return (\n <ContextMenuSub key={i}>\n <ContextMenuSubTrigger>{item.label}</ContextMenuSubTrigger>\n <ContextMenuSubContent>{renderItems(item.items)}</ContextMenuSubContent>\n </ContextMenuSub>\n );\n }\n return (\n <ContextMenuItem key={i} disabled={item.disabled} onSelect={item.onSelect}>\n {item.label}\n {item.shortcut && <ContextMenuShortcut>{item.shortcut}</ContextMenuShortcut>}\n </ContextMenuItem>\n );\n });\n}\n\nexport function ContextMenu({ items, children }: ContextMenuProps) {\n return (\n <RadixContextMenu>\n <ContextMenuTrigger asChild>{children}</ContextMenuTrigger>\n <ContextMenuContent>\n {renderItems(items)}\n </ContextMenuContent>\n </RadixContextMenu>\n );\n}\n\nexport {\n ContextMenuCheckboxItem,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n};\n","'use client';\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@olwiba/cn';\nimport type { UseConfirmReturn } from '../hooks/use-confirm';\n\nexport interface ConfirmDialogProps extends Pick<UseConfirmReturn, 'isOpen' | 'options' | 'handleConfirm' | 'handleCancel'> {\n destructive?: boolean;\n}\n\nexport function ConfirmDialog({ isOpen, options, handleConfirm, handleCancel, destructive = false }: ConfirmDialogProps) {\n return (\n <AlertDialog open={isOpen} onOpenChange={(open) => { if (!open) handleCancel(); }}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{options.title ?? 'Are you sure?'}</AlertDialogTitle>\n {options.description && (\n <AlertDialogDescription>{options.description}</AlertDialogDescription>\n )}\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={handleCancel}>\n {options.cancelLabel ?? 'Cancel'}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleConfirm}\n className={destructive ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90' : undefined}\n >\n {options.confirmLabel ?? 'Confirm'}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface GlassCardProps extends React.HTMLAttributes<HTMLDivElement> {\n blur?: 'sm' | 'md' | 'lg';\n children: React.ReactNode;\n}\n\nconst blurClass = {\n sm: 'backdrop-blur-sm',\n md: 'backdrop-blur-md',\n lg: 'backdrop-blur-lg',\n};\n\nexport function GlassCard({ blur = 'md', className, children, ...props }: GlassCardProps) {\n return (\n <div\n className={cn(\n 'rounded-2xl border border-white/20 bg-background/50 shadow-sm',\n blurClass[blur],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { TrendingDown, TrendingUp } from 'lucide-react';\nimport { cn } from '@olwiba/cn';\n\nexport interface StatCardProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n label: string;\n delta?: string;\n trend?: 'up' | 'down' | 'neutral';\n description?: string;\n}\n\nexport function StatCard({ value, label, delta, trend = 'neutral', description, className, ...props }: StatCardProps) {\n return (\n <div\n className={cn('rounded-2xl border bg-card p-5', className)}\n {...props}\n >\n <div className=\"text-sm text-muted-foreground\">{label}</div>\n <div className=\"mt-2 flex items-end justify-between gap-3\">\n <div className=\"text-3xl font-bold tracking-tight\">{value}</div>\n {delta && (\n <div\n className={cn(\n 'flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n trend === 'up' && 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',\n trend === 'down' && 'bg-red-500/10 text-red-600 dark:text-red-400',\n trend === 'neutral' && 'bg-muted text-muted-foreground',\n )}\n >\n {trend === 'up' && <TrendingUp className=\"size-3\" />}\n {trend === 'down' && <TrendingDown className=\"size-3\" />}\n {delta}\n </div>\n )}\n </div>\n {description && (\n <p className=\"mt-1.5 text-xs text-muted-foreground\">{description}</p>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '@olwiba/cn';\n\nexport interface ImageCardProps extends React.HTMLAttributes<HTMLDivElement> {\n src: string;\n alt?: string;\n overlay?: 'none' | 'subtle' | 'strong';\n aspectRatio?: 'video' | 'square' | 'portrait' | 'auto';\n children?: React.ReactNode;\n}\n\nconst overlayClass = {\n none: '',\n subtle: 'bg-gradient-to-t from-black/60 via-black/10 to-transparent',\n strong: 'bg-gradient-to-t from-black/80 via-black/30 to-black/10',\n};\n\nconst aspectClass = {\n video: 'aspect-video',\n square: 'aspect-square',\n portrait: 'aspect-[3/4]',\n auto: '',\n};\n\nexport function ImageCard({\n src,\n alt = '',\n overlay = 'subtle',\n aspectRatio = 'video',\n children,\n className,\n ...props\n}: ImageCardProps) {\n return (\n <div\n className={cn(\n 'group relative overflow-hidden rounded-2xl bg-muted',\n aspectClass[aspectRatio],\n className,\n )}\n {...props}\n >\n <img\n src={src}\n alt={alt}\n className=\"h-full w-full object-cover transition-transform duration-500 group-hover:scale-105\"\n />\n {overlay !== 'none' && (\n <div className={cn('absolute inset-0', overlayClass[overlay])} />\n )}\n {children && (\n <div className=\"absolute inset-0 flex flex-col justify-end p-5 text-white\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","import { Spinner } from '@olwiba/cn';\n\ninterface FullPageSpinnerProps {\n message?: string;\n}\n\nexport function FullPageSpinner({ message }: FullPageSpinnerProps) {\n return (\n <div className=\"flex flex-1 flex-col items-center justify-center gap-4\">\n <Spinner className=\"size-8\" />\n {message && <p className=\"text-muted-foreground text-sm\">{message}</p>}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../lib/utils';\nimport type { AppShellRenderLink } from '../app/AppShell';\n\nexport interface PageHeaderBreadcrumb {\n label: string;\n href?: string;\n}\n\nexport interface PageHeaderBackButton {\n label?: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n breadcrumbs?: PageHeaderBreadcrumb[];\n backButton?: PageHeaderBackButton;\n renderLink?: AppShellRenderLink;\n className?: string;\n children?: React.ReactNode;\n}\n\nconst defaultRenderLink: AppShellRenderLink = ({ href, children, className }) => (\n <a href={href} className={className}>{children}</a>\n);\n\nexport function PageHeader({\n title,\n description,\n breadcrumbs,\n backButton,\n renderLink = defaultRenderLink,\n className,\n children,\n}: PageHeaderProps) {\n return (\n <div className={cn('flex flex-col gap-1 pb-6', className)}>\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav aria-label=\"Breadcrumb\" className=\"mb-2 flex items-center gap-1 text-sm text-muted-foreground\">\n {breadcrumbs.map((crumb, i) => {\n const isLast = i === breadcrumbs.length - 1;\n return (\n <React.Fragment key={i}>\n {i > 0 && <ChevronRight className=\"size-3.5 shrink-0\" />}\n {isLast || !crumb.href ? (\n <span className={cn(isLast && 'text-foreground font-medium')}>{crumb.label}</span>\n ) : (\n renderLink({\n href: crumb.href,\n children: crumb.label,\n className: 'hover:text-foreground transition-colors',\n })\n )}\n </React.Fragment>\n );\n })}\n </nav>\n )}\n\n {backButton && (\n <div className=\"mb-2\">\n {backButton.href ? (\n renderLink({\n href: backButton.href,\n children: (\n <>\n <ChevronLeft className=\"size-4\" />\n <span>{backButton.label ?? 'Back'}</span>\n </>\n ),\n className: 'inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors',\n })\n ) : (\n <button\n type=\"button\"\n onClick={backButton.onClick}\n className=\"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <ChevronLeft className=\"size-4\" />\n <span>{backButton.label ?? 'Back'}</span>\n </button>\n )}\n </div>\n )}\n\n <div className=\"flex items-start justify-between gap-4\">\n <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1>\n {children && <div className=\"flex shrink-0 items-center gap-2\">{children}</div>}\n </div>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Spinner } from '@olwiba/cn';\n\ninterface SuspensedProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n}\n\nexport function Suspensed({ children, fallback }: SuspensedProps) {\n return (\n <React.Suspense fallback={fallback ?? <Spinner />}>\n {children}\n </React.Suspense>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\ninterface ThemeColorUpdaterProps {\n colorTheme?: string;\n}\n\n/**\n * Applies a data-theme attribute to the document root when a color theme is selected.\n * Use CSS selectors like `[data-theme=\"blue\"] { --primary: ... }` to apply theme colors.\n */\nexport function ThemeColorUpdater({ colorTheme }: ThemeColorUpdaterProps) {\n React.useEffect(() => {\n if (colorTheme) {\n document.documentElement.setAttribute('data-theme', colorTheme);\n } else {\n document.documentElement.removeAttribute('data-theme');\n }\n }, [colorTheme]);\n\n return null;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\ninterface VersionBannerProps {\n version: string;\n message?: string;\n className?: string;\n onDismiss?: () => void;\n}\n\nexport function VersionBanner({ version, message, className, onDismiss }: VersionBannerProps) {\n const [dismissed, setDismissed] = React.useState(false);\n\n if (dismissed) return null;\n\n return (\n <div className={cn('flex items-center justify-between gap-4 bg-primary/10 px-4 py-2 text-sm', className)}>\n <div className=\"flex items-center gap-2\">\n <span className=\"rounded bg-primary/20 px-1.5 py-0.5 font-mono text-xs font-semibold text-primary\">\n v{version}\n </span>\n {message && <span className=\"text-muted-foreground\">{message}</span>}\n </div>\n {onDismiss && (\n <button\n onClick={() => { setDismissed(true); onDismiss(); }}\n className=\"text-muted-foreground transition-colors hover:text-foreground\"\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { cn } from '../lib/utils';\n\nexport interface DevBannerProps {\n environment?: string;\n className?: string;\n}\n\nexport function DevBanner({ environment = 'development', className }: DevBannerProps) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center gap-2 bg-amber-500/15 px-4 py-1 text-xs font-medium text-amber-700 dark:text-amber-400',\n className,\n )}\n >\n <span className=\"size-1.5 rounded-full bg-amber-500\" />\n <span>{environment}</span>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface Hotkey {\n key: string;\n ctrl?: boolean;\n meta?: boolean;\n shift?: boolean;\n alt?: boolean;\n handler: () => void;\n description?: string;\n}\n\ninterface RegisterHotkeysProps {\n hotkeys: Hotkey[];\n}\n\nexport function RegisterHotkeys({ hotkeys }: RegisterHotkeysProps) {\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n for (const hotkey of hotkeys) {\n const matches =\n event.key.toLowerCase() === hotkey.key.toLowerCase() &&\n !!event.ctrlKey === !!hotkey.ctrl &&\n !!event.metaKey === !!hotkey.meta &&\n !!event.shiftKey === !!hotkey.shift &&\n !!event.altKey === !!hotkey.alt;\n\n if (matches) {\n event.preventDefault();\n hotkey.handler();\n break;\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkeys]);\n\n return null;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { AlertTriangle } from 'lucide-react';\nimport { Button } from '@olwiba/cn';\n\ninterface RootErrorFallbackProps {\n error: Error;\n resetErrorBoundary?: () => void;\n}\n\nexport function RootErrorFallback({ error, resetErrorBoundary }: RootErrorFallbackProps) {\n return (\n <div className=\"flex min-h-svh flex-col items-center justify-center gap-6 p-8 text-center\">\n <div className=\"flex flex-col items-center gap-3\">\n <AlertTriangle className=\"size-12 text-destructive\" />\n <h2 className=\"text-xl font-semibold\">Something went wrong</h2>\n <p className=\"max-w-md text-sm text-muted-foreground\">\n {error.message || 'An unexpected error occurred.'}\n </p>\n </div>\n {resetErrorBoundary && (\n <Button onClick={resetErrorBoundary} variant=\"outline\">\n Try again\n </Button>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\n\nexport function useMounted() {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return mounted;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface ConfirmOptions {\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\nexport interface UseConfirmReturn {\n confirm: (options?: ConfirmOptions) => Promise<boolean>;\n isOpen: boolean;\n options: ConfirmOptions;\n handleConfirm: () => void;\n handleCancel: () => void;\n}\n\n/**\n * Headless confirmation hook. Returns state and handlers for building a confirm dialog.\n *\n * @example\n * const { confirm, isOpen, options, handleConfirm, handleCancel } = useConfirm();\n *\n * // Trigger confirmation\n * const ok = await confirm({ title: 'Delete item?', description: 'This cannot be undone.' });\n *\n * // Wire up your dialog\n * <AlertDialog open={isOpen}>\n * <AlertDialogContent>\n * <AlertDialogTitle>{options.title}</AlertDialogTitle>\n * <AlertDialogFooter>\n * <AlertDialogCancel onClick={handleCancel} />\n * <AlertDialogAction onClick={handleConfirm} />\n * </AlertDialogFooter>\n * </AlertDialogContent>\n * </AlertDialog>\n */\nexport function useConfirm(): UseConfirmReturn {\n const [isOpen, setIsOpen] = React.useState(false);\n const [options, setOptions] = React.useState<ConfirmOptions>({});\n const resolveRef = React.useRef<((value: boolean) => void) | null>(null);\n\n const confirm = React.useCallback((opts: ConfirmOptions = {}): Promise<boolean> => {\n setOptions(opts);\n setIsOpen(true);\n return new Promise<boolean>((resolve) => {\n resolveRef.current = resolve;\n });\n }, []);\n\n const handleConfirm = React.useCallback(() => {\n resolveRef.current?.(true);\n setIsOpen(false);\n }, []);\n\n const handleCancel = React.useCallback(() => {\n resolveRef.current?.(false);\n setIsOpen(false);\n }, []);\n\n return { confirm, isOpen, options, handleConfirm, handleCancel };\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface UseControlledOpenReturn {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\n/**\n * Simple open/close state hook for modals, drawers, dropdowns, and any toggleable UI.\n *\n * @example\n * const { isOpen, open, close } = useControlledOpen();\n * return (\n * <>\n * <Button onClick={open}>Open</Button>\n * <Dialog open={isOpen} onOpenChange={setIsOpen}>...</Dialog>\n * </>\n * );\n */\nexport function useControlledOpen(defaultOpen = false): UseControlledOpenReturn {\n const [isOpen, setIsOpen] = React.useState(defaultOpen);\n\n const open = React.useCallback(() => setIsOpen(true), []);\n const close = React.useCallback(() => setIsOpen(false), []);\n const toggle = React.useCallback(() => setIsOpen((prev) => !prev), []);\n\n return { isOpen, open, close, toggle, setIsOpen };\n}\n","'use client';\n\nimport * as React from 'react';\n\n/**\n * Returns true when the page has scrolled past a given Y threshold in pixels.\n * Useful for showing/hiding sticky headers, back-to-top buttons, etc.\n *\n * @example\n * const scrolledPast = useScrolledPast(100);\n * return <header className={scrolledPast ? 'shadow-md' : ''}>...</header>;\n */\nexport function useScrolledPast(threshold: number): boolean {\n const [scrolledPast, setScrolledPast] = React.useState(false);\n\n React.useEffect(() => {\n const handleScroll = () => {\n setScrolledPast(window.scrollY > threshold);\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [threshold]);\n\n return scrolledPast;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useCopyToClipboard(): [boolean, (text: string) => void] {\n const [copied, setCopied] = React.useState(false);\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const copy = React.useCallback((text: string) => {\n navigator.clipboard.writeText(text).then(() => {\n setCopied(true);\n clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setCopied(false), 2000);\n });\n }, []);\n\n React.useEffect(() => () => clearTimeout(timeoutRef.current), []);\n\n return [copied, copy];\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = React.useState(value);\n\n React.useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debounced;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useIntersectionObserver(\n options?: IntersectionObserverInit,\n): [React.RefObject<Element | null>, boolean] {\n const ref = React.useRef<Element | null>(null);\n const [isIntersecting, setIsIntersecting] = React.useState(false);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new IntersectionObserver(([entry]) => {\n setIsIntersecting(entry.isIntersecting);\n }, options);\n\n observer.observe(el);\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return [ref, isIntersecting];\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T) => void] {\n const [storedValue, setStoredValue] = React.useState<T>(() => {\n if (typeof window === 'undefined') return initialValue;\n try {\n const item = window.localStorage.getItem(key);\n return item ? (JSON.parse(item) as T) : initialValue;\n } catch {\n return initialValue;\n }\n });\n\n const setValue = React.useCallback(\n (value: T) => {\n try {\n setStoredValue(value);\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore — private browsing may block localStorage writes\n }\n },\n [key],\n );\n\n return [storedValue, setValue];\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = React.useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n","'use client';\n\nimport * as React from 'react';\n\nexport interface UsePaginationReturn {\n page: number;\n pageSize: number;\n totalPages: number;\n offset: number;\n hasPrev: boolean;\n hasNext: boolean;\n goTo: (page: number) => void;\n next: () => void;\n prev: () => void;\n}\n\nexport function usePagination(total: number, pageSize: number): UsePaginationReturn {\n const [page, setPage] = React.useState(1);\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const offset = (page - 1) * pageSize;\n\n const goTo = React.useCallback(\n (p: number) => setPage(Math.min(Math.max(1, p), totalPages)),\n [totalPages],\n );\n\n const next = React.useCallback(() => goTo(page + 1), [page, goTo]);\n const prev = React.useCallback(() => goTo(page - 1), [page, goTo]);\n\n return { page, pageSize, totalPages, offset, hasPrev: page > 1, hasNext: page < totalPages, goTo, next, prev };\n}\n"]}
|