@loafmarkets/ui 0.0.4 → 0.0.5

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/cn.ts","../src/components/button.tsx","../src/components/badge.tsx","../src/components/card.tsx","../src/components/portfolio-summary.tsx","../src/components/house-position-slider.tsx","../src/components/orderbook.tsx","../src/components/property-tour.tsx","../src/components/property-news-updates.tsx","../src/components/your-orders.tsx","../src/components/price-chart.tsx","../src/components/property-hero-header.tsx","../src/components/property-subheader.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","React3","React4","jsxs","React5","clamp","React6","Fragment","React7","Building2","LineChart","Sparkles","Newspaper","React8","CalendarDays","ArrowUpRight","React9","React10","createChart","formatPrice","React11","BedDouble","Bath","CarFront","React12"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACCO,IAAM,cAAA,GAAiBC,0BAAA;AAAA,EAC5B,sMAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,0EAAA;AAAA,QACT,MAAA,EACE,2IAAA;AAAA,QACF,aAAA,EACE,kLAAA;AAAA,QACF,KAAA,EACE,2MAAA;AAAA,QACF,OAAA,EACE,2GAAA;AAAA,QACF,KAAA,EACE,iFAAA;AAAA,QACF,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,cAAA;AAAA,QACN,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAQ;AAAA;AACV;AAEJ;AAQO,IAAM,MAAA,GAAeC,iBAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,OAAA,GAAU,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACxE,IAAA,MAAM,IAAA,GAAO,UAAUC,cAAA,GAAO,QAAA;AAC9B,IAAA,uBACEC,cAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA;AAAA,QACjE,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;ACzDd,IAAM,aAAA,GAAgBH,0BAAAA;AAAA,EAC3B,4LAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,yEAAA;AAAA,QACT,KAAA,EACE,6EAAA;AAAA,QACF,OAAA,EAAS,uEAAA;AAAA,QACT,OAAA,EACE,6EAAA;AAAA,QACF,MAAA,EACE,yGAAA;AAAA,QACF,OAAA,EACE,0EAAA;AAAA,QACF,QAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,2BAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAMO,IAAM,KAAA,GAAcI,iBAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBACvCD,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAU,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE3F;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;ACvCb,IAAM,IAAA,GAAaE,6BAAsC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxFF,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,mFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,IAAA,CAAK,WAAA,GAAc,MAAA;AAGZ,IAAM,UAAA,GAAmBE,iBAAA,CAAA,UAAA;AAAA,EAC9B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,iCAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEzF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAGlB,IAAM,SAAA,GAAkBE,iBAAA,CAAA,UAAA;AAAA,EAC7B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBF,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,qDAAA,EAAuD,SAAS,CAAA;AAAA,MAC7E,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAGjB,IAAM,eAAA,GAAwBE,iBAAA,CAAA,UAAA;AAAA,EACnC,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBF,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAU,SAAA,EAAW,EAAA,CAAG,0BAA0B,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEhF;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAGvB,IAAM,WAAA,GAAoBE,iBAAA,CAAA,UAAA;AAAA,EAC/B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,yCAAyC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEjG;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAGnB,IAAM,UAAA,GAAmBE,iBAAA,CAAA,UAAA;AAAA,EAC9B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBF,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,yDAAyD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEjH;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;ACtDzB,IAAM,wBAAwB,CAAC,KAAA,KAC7B,IAAI,IAAA,CAAK,aAAa,OAAA,EAAS;AAAA,EAC7B,KAAA,EAAO,UAAA;AAAA,EACP,QAAA,EAAU,KAAA;AAAA,EACV,qBAAA,EAAuB,CAAA;AAAA,EACvB,qBAAA,EAAuB;AACzB,CAAC,CAAA,CAAE,OAAO,KAAK,CAAA;AAEjB,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAAkB;AAC9C,EAAA,MAAM,IAAA,GAAO,KAAA,IAAS,CAAA,GAAI,GAAA,GAAM,GAAA;AAChC,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAC7C,CAAA;AAEA,IAAM,2BAAA,GAA8B,CAAC,KAAA,KAAkB;AACrD,EAAA,MAAM,IAAA,GAAO,KAAA,IAAS,CAAA,GAAI,GAAA,GAAM,GAAA;AAChC,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,qBAAA,CAAsB,KAAK,GAAA,CAAI,KAAK,CAAC,CAAC,CAAA,CAAA;AACzD,CAAA;AAgBO,IAAM,gBAAA,GAAyBG,iBAAA,CAAA,UAAA;AAAA,EACpC,CACE;AAAA,IACE,aAAA;AAAA,IACA,cAAA;AAAA,IACA,kBAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA,GAAmB,mBAAA;AAAA,IACnB,kBAAA,GAAqB,0DAAA;AAAA,IACrB,cAAA,GAAiB,qBAAA;AAAA,IACjB,aAAA,GAAgB,oBAAA;AAAA,IAChB,oBAAA,GAAuB,2BAAA;AAAA,IACvB,SAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,oBAAA,GAAuB,kBAAA,IAAsB,CAAA,GAAI,gBAAA,GAAmB,gBAAA;AAE1E,IAAA,MAAM,YAAA,GAAe,aAAA,IAAiB,CAAA,GAAI,gBAAA,GAAmB,gBAAA;AAE7D,IAAA,uBACEC,eAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,wGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAAC,UAAA,EAAA,EAAW,WAAU,UAAA,EACpB,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,4CAAA,EAA6C,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAAA,cAClF,iCACCA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,cAAA;AAAA,kBACT,SAAA,EAAU,uMAAA;AAAA,kBACX,QAAA,EAAA;AAAA;AAAA,eAED,GACE;AAAA,aAAA,EACN,CAAA;AAAA,4BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAA+B;AAAA,WAAA,EAChD,CAAA;AAAA,0BAEAI,eAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,UAAA,EACrB,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAJ,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,gCAC9EA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,8CAAA,EAAgD,QAAA,EAAA,cAAA,CAAe,aAAa,CAAA,EAAE;AAAA,eAAA,EAC7F,CAAA;AAAA,8CACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,gCAC/EA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,8CAAA,EAAgD,QAAA,EAAA,cAAA,CAAe,cAAc,CAAA,EAAE;AAAA,eAAA,EAC9F,CAAA;AAAA,8CACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,gCAC5EA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,qCAAqC,oBAAoB,CAAA,EACvE,QAAA,EAAA,aAAA,CAAc,kBAAkB,CAAA,EACnC;AAAA,eAAA,EACF,CAAA;AAAA,8CACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,gCAC9EA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,qCAAqC,YAAY,CAAA,EAC/D,QAAA,EAAA,oBAAA,CAAqB,aAAa,CAAA,EACrC;AAAA,eAAA,EACF;AAAA,aAAA,EACF,CAAA;AAAA,4BAEAI,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EAA+C,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,8BAC7EA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACZ,QAAA,EAAA,QAAA,GACC,QAAA,mBAEAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+CAAA,EAAiD,8BAAmB,CAAA,EAErF;AAAA,aAAA,EACF;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;ACnF/B,IAAM,KAAA,GAAQ,CAAC,CAAA,EAAW,GAAA,EAAa,GAAA,KAAgB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAC,CAAC,CAAA;AACrF,IAAM,IAAA,GAAO,CAAC,CAAA,KAAc,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,cAAA,CAAe,MAAA,EAAW,EAAE,qBAAA,EAAuB,CAAA,EAAG,CAAA;AAQ9F,IAAM,eAAA,GAAkB,CAAC,MAAA,GAA2B,EAAC,KACnD,OAAO,MAAA,CAAO,CAAC,KAAA,KAAU,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,IAAK,KAAA,CAAM,KAAA,GAAQ,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,MAAM,MAAM,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAE/H,IAAM,wBAAA,GAA2B,CAAC,MAAA,GAA2B,IAAI,SAAA,KAAwC;AACvG,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,SAAS,KAAK,SAAA,IAAa,CAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,UAAU,IAAA,EAAK;AAChG,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AACrE,EAAA,IAAI,YAAA,GAAe,SAAA;AACnB,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,IAAA,IAAI,gBAAgB,CAAA,EAAG;AACvB,IAAA,MAAM,kBAAA,GAAqB,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,KAAA;AAChD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,kBAAkB,CAAA;AAC5D,IAAA,MAAM,eAAA,GAAkB,aAAa,KAAA,CAAM,KAAA;AAC3C,IAAA,YAAA,IAAgB,eAAA;AAChB,IAAA,KAAA,IAAS,UAAA;AACT,IAAA,YAAA,IAAgB,UAAA;AAAA,EAClB;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,YAAA;AAAA,IACR,KAAA,EAAO,KAAA;AAAA,IACP,QAAA,EAAU,YAAA,GAAe,CAAA,GAAI,KAAA,GAAQ,YAAA,GAAe;AAAA,GACtD;AACF,CAAA;AAEA,IAAM,2BAAA,GAA8B,CAAC,MAAA,GAA2B,IAAI,WAAA,KAA0C;AAC5G,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,WAAW,KAAK,WAAA,IAAe,CAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,UAAU,IAAA,EAAK;AACpG,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AACrE,EAAA,IAAI,eAAA,GAAkB,WAAA;AACtB,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,IAAA,IAAI,mBAAmB,CAAA,EAAG;AAC1B,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,MAAM,MAAM,CAAA;AAC9D,IAAA,KAAA,IAAS,kBAAkB,KAAA,CAAM,KAAA;AACjC,IAAA,YAAA,IAAgB,eAAA;AAChB,IAAA,eAAA,IAAmB,eAAA;AAAA,EACrB;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,YAAA;AAAA,IACR,KAAA,EAAO,KAAA;AAAA,IACP,QAAA,EAAU,YAAA,GAAe,CAAA,GAAI,KAAA,GAAQ,YAAA,GAAe;AAAA,GACtD;AACF,CAAA;AAEA,IAAM,4BAAA,GAA+B,CAAC,MAAA,GAA2B,IAAI,WAAA,KAA0C;AAC7G,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,WAAW,KAAK,WAAA,IAAe,CAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,UAAU,IAAA,EAAK;AACpG,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AACrE,EAAA,IAAI,eAAA,GAAkB,WAAA;AACtB,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,IAAA,IAAI,mBAAmB,CAAA,EAAG;AAC1B,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,MAAM,MAAM,CAAA;AAC9D,IAAA,QAAA,IAAY,kBAAkB,KAAA,CAAM,KAAA;AACpC,IAAA,YAAA,IAAgB,eAAA;AAChB,IAAA,eAAA,IAAmB,eAAA;AAAA,EACrB;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,YAAA;AAAA,IACR,KAAA,EAAO,QAAA;AAAA,IACP,QAAA,EAAU,YAAA,GAAe,CAAA,GAAI,QAAA,GAAW,YAAA,GAAe;AAAA,GACzD;AACF,CAAA;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,OAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAgB,EAAC;AAAA,EACjB,gBAAA,GAAmB,QAAA;AAAA,EACnB,SAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6B;AAC3B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUK,2BAAkC,MAAM,CAAA;AAChF,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,2BAA+B,SAAS,CAAA;AAC5F,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,2BAAS,CAAC,CAAA;AACxD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAUA,2BAAS,CAAC,CAAA;AAC5D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,2BAAS,CAAC,CAAA;AAC9D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,2BAAS,KAAK,CAAA;AAExD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,2BAA6B,gBAAgB,CAAA;AACrF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,2BAAS,YAAY,CAAA;AAC/D,EAAA,MAAM,CAAC,iBAAiB,kBAAkB,CAAA,GAAUA,2BAAS,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAC,CAAA;AACpF,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,2BAAS,KAAK,CAAA;AAElE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAUA,2BAAS,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,2BAAS,EAAE,CAAA;AAEjE,EAAA,MAAM,QAAA,GAAiBA,yBAA8B,IAAI,CAAA;AAEzD,EAAA,MAAM,IAAA,GAAO,SAAA,EAAW,IAAA,IAAQ,EAAC;AACjC,EAAA,MAAM,IAAA,GAAO,SAAA,EAAW,IAAA,IAAQ,EAAC;AAEjC,EAAMA,4BAAU,MAAM;AACpB,IAAA,IAAI,cAAc,OAAA,EAAS;AAC3B,IAAA,IAAI,eAAA,EAAiB;AACrB,IAAA,aAAA,CAAc,YAAY,CAAA;AAC1B,IAAA,kBAAA,CAAmB,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,YAAA,EAAc,eAAA,EAAiB,SAAS,CAAC,CAAA;AAE7C,EAAA,MAAM,cAAA,GAAiB,SAAA,KAAc,OAAA,GAAU,UAAA,GAAa,YAAA;AAC5D,EAAA,MAAM,kBAAkB,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,OAAO,CAAC,CAAA;AACrG,EAAA,MAAM,oBAAoB,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA,CAAE,OAAO,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,GAAG,CAAC,CAAA;AAEnH,EAAA,MAAM,sBAAA,GAAyB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,gBAAgB,eAAe,CAAA;AAC1E,EAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,aAAa,iBAAiB,CAAA;AAEtE,EAAA,MAAM,gBAAgB,UAAA,GAAa,cAAA;AACnC,EAAA,MAAM,sBAAsB,mBAAA,GAAsB,cAAA;AAClD,EAAA,MAAM,sBAAsB,mBAAA,GAAsB,sBAAA;AAElD,EAAA,MAAM,WAAA,GAAc,mBAAA,IAAuB,CAAA,GAAI,CAAA,GAAK,sBAAsB,mBAAA,GAAuB,GAAA;AAEjG,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,cAAA,GAAgC,IAAA;AACpC,EAAA,IAAI,YAAA,GAAe,UAAA;AACnB,EAAA,IAAI,WAAA,GAAc,aAAA;AAElB,EAAA,MAAM,cAAA,GAAiB,UAAA,GAAa,CAAA,GAAI,UAAA,GAAa,YAAA,IAAgB,CAAA;AAErE,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,IAAI,oBAAoB,QAAA,EAAU;AAChC,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,cAAc,CAAA;AAChD,QAAA,MAAM,MAAA,GAAS,2BAAA,CAA4B,IAAA,EAAM,aAAa,CAAA;AAC9D,QAAA,WAAA,GAAc,MAAA,CAAO,MAAA;AACrB,QAAA,UAAA,GAAa,MAAA,CAAO,KAAA;AACpB,QAAA,cAAA,GAAiB,MAAA,CAAO,QAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,YAAY,GAAG,sBAAsB,CAAA;AAC3E,QAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,IAAA,EAAM,QAAQ,CAAA;AACtD,QAAA,WAAA,GAAc,MAAA,CAAO,MAAA;AACrB,QAAA,UAAA,GAAa,MAAA,CAAO,KAAA;AACpB,QAAA,cAAA,GAAiB,MAAA,CAAO,QAAA;AAAA,MAC1B;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,oBAAoB,QAAA,EAAU;AAChC,QAAA,WAAA,GAAc,cAAA;AACd,QAAA,UAAA,GAAa,cAAA,GAAiB,cAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,YAAY,GAAG,sBAAsB,CAAA;AAC3E,QAAA,UAAA,GAAa,QAAA;AACb,QAAA,WAAA,GAAc,QAAA,GAAW,cAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,cAAc,MAAA,EAAQ;AAC/B,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,eAAe,CAAA;AAC7C,MAAA,MAAM,MAAA,GAAS,4BAAA,CAA6B,IAAA,EAAM,YAAY,CAAA;AAC9D,MAAA,WAAA,GAAc,CAAC,MAAA,CAAO,MAAA;AACtB,MAAA,UAAA,GAAa,CAAC,MAAA,CAAO,KAAA;AACrB,MAAA,cAAA,GAAiB,MAAA,CAAO,QAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,WAAA,GAAc,eAAA;AACd,MAAA,UAAA,GAAa,eAAA,GAAkB,cAAA;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,YAAA,GAAe,UAAA,GAAa,WAAA;AAC5B,EAAA,WAAA,GAAc,YAAA,GAAe,cAAA;AAE7B,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,IAAI,cAAc,KAAA,EAAO;AACvB,MAAA,IAAI,oBAAoB,SAAA,EAAW;AACjC,QAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,YAAY,GAAG,sBAAsB,CAAA;AAC3E,QAAA,OAAO,QAAA;AAAA,MACT;AACA,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,cAAc,CAAA;AAChD,MAAA,MAAM,cAAA,GAAiB,SAAA,KAAc,QAAA,GAAW,YAAA,IAAgB,cAAA,GAAiB,cAAA;AACjF,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,aAAA,GAAgB,cAAA,EAAgB,sBAAsB,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,MAAA,MAAM,eAAe,IAAA,CAAK,GAAA,CAAI,KAAK,GAAA,CAAI,CAAA,EAAG,eAAe,CAAC,CAAA;AAC1D,MAAA,MAAM,YAAY,YAAA,GAAe,cAAA;AACjC,MAAA,OAAO,CAAC,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,mBAAmB,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAA,GAAG;AAEH,EAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,mBAAA,GAAsB,iBAAA,EAAmB,GAAG,mBAAmB,CAAA;AAC/F,EAAA,MAAM,SAAA,GAAY,mBAAA,IAAuB,CAAA,GAAI,CAAA,GAAK,oBAAoB,mBAAA,GAAuB,GAAA;AAE7F,EAAA,MAAM,aAAa,SAAA,KAAc,KAAA;AACjC,EAAA,MAAM,SAAA,GAAY,SAAA,KAAc,MAAA,KAAW,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA,GAAI,IAAA,IAAS,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,GAAI,IAAA,CAAA;AAEnG,EAAA,MAAM,gBAAA,GAAmB,WAAA,IAAe,CAAA,GAAI,CAAA,GAAK,aAAa,WAAA,GAAe,GAAA;AAC7E,EAAA,MAAM,eAAA,GAAkB,WAAA,IAAe,CAAA,GAAI,CAAA,GAAK,eAAe,WAAA,GAAe,GAAA;AAE9E,EAAA,MAAM,eAAgB,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,GAAI,QAAU,cAAA,IAAkB,CAAA,CAAA;AAEzE,EAAA,MAAM,UAAA,GAAmBA,8BAAY,MAAM;AACzC,IAAA,YAAA,CAAa,MAAM,CAAA;AACnB,IAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,IAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,IAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,IAAA,kBAAA,CAAmB,CAAC,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,0BAAA,GAAmCA,iBAAA,CAAA,WAAA;AAAA,IACvC,CAAC,cAAA,KAA2B;AAC1B,MAAA,MAAM,gBAAgB,cAAA,GAAiB,aAAA;AAEvC,MAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,QAAA,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,sBAAsB,CAAC,CAAA;AAC/D,QAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,QAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,QAAA,MAAM,cAAA,GAAiB,cAAA,IAAkB,cAAA,IAAkB,CAAA,CAAA,GAAK,UAAA;AAChE,QAAA,YAAA,CAAa,MAAM,CAAA;AACnB,QAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,QAAA,kBAAA,CAAmB,IAAA,CAAK,GAAA,CAAI,cAAA,EAAgB,CAAC,mBAAmB,CAAC,CAAA;AACjE,QAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,QAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,UAAA,EAAW;AAAA,IACb,CAAA;AAAA,IACA,CAAC,sBAAA,EAAwB,cAAA,EAAgB,mBAAA,EAAqB,aAAA,EAAe,YAAY,UAAU;AAAA,GACrG;AAEA,EAAA,MAAM,wBAAA,GAAiCA,iBAAA,CAAA,WAAA;AAAA,IACrC,CAAC,mBAAA,KAAgC;AAC/B,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,mBAAA,EAAqB,CAAA,EAAG,GAAG,CAAA;AACvD,MAAA,MAAM,eAAA,GAAmB,gBAAgB,GAAA,GAAO,WAAA;AAChD,MAAA,0BAAA,CAA2B,kBAAkB,cAAc,CAAA;AAAA,IAC7D,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,WAAA,EAAa,0BAA0B;AAAA,GAC1D;AAEA,EAAA,MAAM,0BAAA,GAAmCA,iBAAA,CAAA,WAAA;AAAA,IACvC,CAAC,iBAAA,KAA8B;AAC7B,MAAA,IAAI,oBAAoB,CAAA,EAAG;AACzB,QAAA,MAAM,SAAA,GAAY,0BAA0B,cAAA,IAAkB,CAAA,CAAA;AAC9D,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,QAAA,iBAAA,CAAkB,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,SAAS,CAAC,CAAA;AACxD,QAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,QAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,oBAAoB,CAAA,EAAG;AACzB,QAAA,YAAA,CAAa,MAAM,CAAA;AACnB,QAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,QAAA,kBAAA,CAAmB,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,CAAC,mBAAmB,CAAC,CAAA;AACpE,QAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,QAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,UAAA,EAAW;AAAA,IACb,CAAA;AAAA,IACA,CAAC,sBAAA,EAAwB,cAAA,EAAgB,mBAAA,EAAqB,UAAU;AAAA,GAC1E;AAEA,EAAA,MAAM,qBAAA,GAA8BA,iBAAA,CAAA,WAAA;AAAA,IAClC,CAAC,GAAA,KAAgB;AACf,MAAA,MAAM,UAAA,GAAA,CAAc,MAAM,EAAA,IAAM,EAAA;AAChC,MAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,KAAK,GAAA,CAAI,UAAU,GAAG,CAAC,CAAA;AAClD,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,UAAA,EAAW;AACX,QAAA;AAAA,MACF;AACA,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,SAAA,GAAY,sBAAA,EAAwB,GAAG,sBAAsB,CAAA;AACpF,QAAA,IAAI,YAAY,CAAA,EAAG;AACjB,UAAA,UAAA,EAAW;AACX,UAAA;AAAA,QACF;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,QAAA,eAAA,CAAgB,QAAQ,CAAA;AACxB,QAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,QAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,MAAM,YAAA,GAAe,KAAA,CAAM,SAAA,GAAY,mBAAA,EAAqB,GAAG,mBAAmB,CAAA;AAClF,QAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,UAAA,UAAA,EAAW;AACX,UAAA;AAAA,QACF;AACA,QAAA,YAAA,CAAa,MAAM,CAAA;AACnB,QAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,QAAA,kBAAA,CAAmB,CAAC,YAAY,CAAA;AAChC,QAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,QAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,QAAA;AAAA,MACF;AACA,MAAA,UAAA,EAAW;AAAA,IACb,CAAA;AAAA,IACA,CAAC,sBAAA,EAAwB,mBAAA,EAAqB,UAAU;AAAA,GAC1D;AAEA,EAAA,MAAM,mBAAA,GAA4BA,iBAAA,CAAA,WAAA;AAAA,IAChC,CAAC,OAAA,KAAoB;AACnB,MAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,qBAAA,EAAsB;AACpD,MAAA,MAAM,CAAA,GAAI,UAAU,IAAA,CAAK,GAAA;AACzB,MAAA,MAAM,GAAA,GAAM,MAAM,GAAA,GAAO,CAAA,GAAI,KAAK,MAAA,GAAU,GAAA,EAAK,GAAG,GAAG,CAAA;AACvD,MAAA,qBAAA,CAAsB,GAAG,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAC,qBAAqB;AAAA,GACxB;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,aAAA,CAAc,IAAI,CAAA;AAElB,IAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAmB,mBAAA,CAAoB,GAAG,OAAO,CAAA;AACjE,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,MAAM,CAAA;AAChD,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,IAAI,CAAA;AAAA,IAC9C,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,MAAM,CAAA;AAC7C,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,IAAI,CAAA;AAAA,EAC3C,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,aAAA,CAAc,IAAI,CAAA;AAElB,IAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAmB;AACjC,MAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAA;AAC1B,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,mBAAA,CAAoB,MAAM,OAAO,CAAA;AAAA,IACnC,CAAA;AACA,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,MAAM,CAAA;AAChD,MAAA,QAAA,CAAS,mBAAA,CAAoB,YAAY,KAAK,CAAA;AAAA,IAChD,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,MAAM,CAAA;AAC7C,IAAA,QAAA,CAAS,gBAAA,CAAiB,YAAY,KAAK,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,UAAA,EAAW;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAAC,IAAA,KAA6B;AAC7D,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,MAAA,aAAA,CAAc,YAAY,CAAA;AAC1B,MAAA,kBAAA,CAAmB,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,IAC5C,CAAA,MAAO;AACL,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,UAAA,GAAa,SAAA,KAAc,QAAA,GAAW,cAAA,IAAkB,YAAA,GAAe,UAAA;AAC7E,IAAA,cAAA,GAAiB;AAAA,MACf,IAAA,EAAM,aAAa,KAAA,GAAQ,MAAA;AAAA,MAC3B,SAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MACP,WAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,YAAA,EAAa;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,EAAA;AAChB,EAAA,MAAM,UAAA,GAAa,GAAA;AACnB,EAAA,MAAM,sBAAsB,UAAA,GAAa,OAAA;AACzC,EAAA,MAAM,kBAAA,GAAsB,cAAc,GAAA,GAAO,mBAAA;AACjD,EAAA,MAAM,gBAAA,GAAoB,YAAY,GAAA,GAAO,mBAAA;AAC7C,EAAA,MAAM,gBAAgB,UAAA,GAAa,kBAAA;AACnC,EAAA,MAAM,cAAc,UAAA,GAAa,gBAAA;AAEjC,EAAA,MAAM,eAAe,SAAA,GAAY,WAAA;AACjC,EAAA,MAAM,eAAe,SAAA,GAAY,WAAA;AAEjC,EAAA,MAAM,aAAa,SAAA,KAAc,OAAA,GAAU,GAAG,WAAW,CAAA,eAAA,CAAA,GAAoB,GAAG,WAAW,CAAA,MAAA,CAAA;AAC3F,EAAA,MAAM,YAAY,UAAA,GAAa,CAAA,GAAI,GAAA,GAAM,UAAA,GAAa,IAAI,GAAA,GAAM,EAAA;AAChE,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,EAAK,EAAA,EAAI,IAAI,CAAC,CAAA;AAEtC,EAAA,uBACED,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,6FAAA,EAA+F,SAAS,CAAA,EAAI,GAAG,KAAA,EAChI,QAAA,EAAA;AAAA,oBAAAJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+EAAA,EAAgF,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,IAEzG,4BACCA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,YAAA;AAAA,QACT,SAAA,EAAU,0MAAA;AAAA,QACX,QAAA,EAAA;AAAA;AAAA,KAED,GACE,IAAA;AAAA,oBAEJI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAqD,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,sBAC/EI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,6BAAA;AAAA,cACA,UAAA,IAAc,IAAI,gBAAA,GAAmB;AAAA,aACvC;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,SAAA;AAAA,cAAU,GAAA;AAAA,cAAE,KAAK,UAAU;AAAA;AAAA;AAAA,SAC9B;AAAA,wBACAA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE,KAAK,WAAW;AAAA,SAAA,EAAE;AAAA,OAAA,EAC5E;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EACZ,QAAA,EAAA,cAAA,CAAe,IAAI,CAAC,MAAA,qBACnBI,eAAAA,CAAC,MAAA,EAAA,EAAmB,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,QAAO;AAAA,OAAA,EAAA,EAAhB,MAAiB,CAC7B,CAAA,EACH,CAAA;AAAA,sBACAJ,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,4CAAA;AAAA,UACV,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAA,EAAY;AAAA,UAC7B,WAAA;AAAA,UACA,YAAA;AAAA,UAEA,0BAAAI,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAA,EAAc,WAAU,gCAAA,EACnC,QAAA,EAAA;AAAA,4BAAAJ,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,IAAA,EAAK,GAAE,IAAA,EAAK,KAAA,EAAM,KAAA,EAAM,MAAA,EAAO,OAAM,EAAA,EAAG,GAAA,EAAI,IAAA,EAAK,wBAAA,EAAyB,QAAO,wBAAA,EAAyB,CAAA;AAAA,4BAClHA,cAAAA,CAAC,UAAA,EAAA,EAAS,IAAG,WAAA,EACX,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,IAAA,EAAK,CAAA,EAAE,MAAK,KAAA,EAAM,KAAA,EAAM,QAAO,KAAA,EAAM,EAAA,EAAG,KAAI,CAAA,EACtD,CAAA;AAAA,4BACAI,eAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAS,iBAAA,EACV,QAAA,EAAA;AAAA,8BAAAJ,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,IAAA,EAAK,GAAG,YAAA,GAAe,WAAA,GAAc,aAAA,EAAe,KAAA,EAAM,OAAM,MAAA,EAAQ,YAAA,GAAe,gBAAA,GAAmB,kBAAA,EAAoB,MAAK,uBAAA,EAAwB,CAAA;AAAA,cAClK,YAAA,mBACCA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAE,IAAA,EAAK,CAAA,EAAG,WAAA,EAAa,KAAA,EAAM,OAAM,MAAA,EAAQ,gBAAA,GAAmB,kBAAA,EAAoB,IAAA,EAAK,yBAAwB,CAAA,GACnH,IAAA;AAAA,cACH,YAAA,mBACCA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAE,IAAA,EAAK,CAAA,EAAG,aAAA,EAAe,KAAA,EAAM,OAAM,MAAA,EAAQ,kBAAA,GAAqB,gBAAA,EAAkB,IAAA,EAAK,wBAAuB,CAAA,GACpH,IAAA;AAAA,8BACJA,eAAC,MAAA,EAAA,EAAK,EAAA,EAAG,MAAK,EAAA,EAAI,WAAA,EAAa,IAAG,KAAA,EAAM,EAAA,EAAI,aAAa,MAAA,EAAQ,YAAA,GAAe,YAAY,YAAA,GAAe,SAAA,GAAY,uBAAuB,WAAA,EAAY,GAAA,EAAI,eAAc,OAAA,EAAQ;AAAA,aAAA,EACtL;AAAA,WAAA,EACF;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,oBAEAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,UAAU,CAAC,SAAA;AAAA,QACX,OAAA,EAAS,aAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,oEAAA;AAAA,UACA,CAAC,SAAA,GACG,8CAAA,GACA,UAAA,GACE,iGAAA,GACA;AAAA,SACR;AAAA,QAEC,QAAA,EAAA,CAAC,SAAA,GAAY,iBAAA,GAAoB,UAAA,GAAa,CAAA,KAAA,EAAQ,IAAA,CAAK,UAAU,CAAC,CAAA,CAAA,GAAK,CAAA,MAAA,EAAS,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA;AAAA,KACvG;AAAA,oBAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA;AAAA,UAAA,WAAA;AAAA,UAAY;AAAA,SAAA,EAAU,CAAA;AAAA,wBACvDA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,UAAA,gBAAA,CAAiB,QAAQ,CAAC,CAAA;AAAA,UAAE,GAAA;AAAA,0BAC7BJ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAuB,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,0BACxCA,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,cAAA,IAAkB,eAAA,CAAgB,OAAA,CAAQ,CAAC,CAAA;AAAA,cAClD,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,gBAAA,MAAM,GAAA,GAAM,EAAE,MAAA,CAAO,KAAA;AACrB,gBAAA,IAAI,QAAQ,EAAA,IAAM,mBAAA,CAAoB,KAAK,GAAG,CAAA,oBAAqB,GAAG,CAAA;AAAA,cACxE,CAAA;AAAA,cACA,SAAS,MAAM,iBAAA,CAAkB,eAAA,CAAgB,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,cAC3D,QAAQ,MAAM;AACZ,gBAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,cAAc,CAAA;AAC5C,gBAAA,IAAI,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,2BAA4B,GAAG,CAAA;AACtD,gBAAA,iBAAA,CAAkB,EAAE,CAAA;AAAA,cACtB,CAAA;AAAA,cACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,gBAAA,IAAI,EAAE,GAAA,KAAQ,OAAA,EAAU,CAAA,CAAE,OAA4B,IAAA,EAAK;AAAA,cAC7D,CAAA;AAAA,cACA,SAAA,EAAW,EAAA;AAAA,gBACT,2FAAA;AAAA,gBACA,eAAA,IAAmB,mBACf,qEAAA,GACA;AAAA;AACN;AAAA;AACF,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAEC,cAAc,QAAA,GAAW,IAAA,mBACxBI,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,UAAA,GAAa,WAAW,SAAA,EAAU,CAAA;AAAA,wBACnEI,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAA,EACb,QAAA,EAAA;AAAA,UAAA,SAAA,KAAc,KAAA,IAAS,oBAAoB,SAAA,mBAAYJ,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,GAAA,EAAC,CAAA,GAAU,IAAA;AAAA,0BACzGA,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,OAAO,gBAAA,IAAoB,IAAA,CAAK,IAAI,WAAW,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,cAC1D,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,gBAAA,MAAM,GAAA,GAAM,EAAE,MAAA,CAAO,KAAA;AACrB,gBAAA,IAAI,QAAQ,EAAA,IAAM,mBAAA,CAAoB,KAAK,GAAG,CAAA,sBAAuB,GAAG,CAAA;AAAA,cAC1E,CAAA;AAAA,cACA,OAAA,EAAS,MAAM,mBAAA,CAAoB,IAAA,CAAK,IAAI,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,cACnE,QAAQ,MAAM;AACZ,gBAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,gBAAgB,CAAA;AAC9C,gBAAA,IAAI,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,OAAO,CAAA,EAAG;AACpC,kBAAA,MAAM,MAAA,GAAS,UAAA,IAAc,SAAA,KAAc,MAAA,GAAS,MAAM,CAAC,GAAA;AAC3D,kBAAA,0BAAA,CAA2B,MAAM,CAAA;AAAA,gBACnC;AACA,gBAAA,mBAAA,CAAoB,EAAE,CAAA;AAAA,cACxB,CAAA;AAAA,cACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,gBAAA,IAAI,EAAE,GAAA,KAAQ,OAAA,EAAU,CAAA,CAAE,OAA4B,IAAA,EAAK;AAAA,cAC7D,CAAA;AAAA,cACA,SAAA,EAAW,EAAA;AAAA,gBACT,2FAAA;AAAA,gBACA,aACI,qEAAA,GACA;AAAA;AACN;AAAA,WACF;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,iBAAiB,UAAA,GAAa,gBAAA,GAAmB,gBAAgB,CAAA,EAAG,QAAA,EAAA,QAAA,EAAM;AAAA,SAAA,EAChG;AAAA,OAAA,EACF,CAAA;AAAA,sBAGFI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAgB,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBACxCI,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAA,EAAc,QAAA,EAAA;AAAA,UAAA,YAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE;AAAA,SAAA,EAAY;AAAA,OAAA,EACtE;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,wBAAA,CAAyB,QAAQ,CAAA;AAAA,YAChD,SAAA,EAAW,EAAA;AAAA,cACT,qEAAA;AAAA,cACA,SAAA,KAAc,WAAW,0CAAA,GAA6C;AAAA,aACxE;AAAA,YACD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,wBAAA,CAAyB,OAAO,CAAA;AAAA,YAC/C,SAAA,EAAW,EAAA;AAAA,cACT,qEAAA;AAAA,cACA,SAAA,KAAc,UAAU,0CAAA,GAA6C;AAAA,aACvE;AAAA,YACD,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF,CAAA;AAAA,MAEC,cAAc,OAAA,mBACbI,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,eAAA;AAAA,YACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,cAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,cAAA,IAAI,KAAA,KAAU,EAAA,IAAM,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,EAAG;AACnD,gBAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,gBAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,gBAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACnC,gBAAA,IAAI,OAAO,QAAA,CAAS,GAAG,KAAK,GAAA,GAAM,CAAA,gBAAiB,GAAG,CAAA;AAAA,cACxD;AAAA,YACF,CAAA;AAAA,YACA,QAAQ,MAAM;AACZ,cAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,eAAe,CAAA;AAC7C,cAAA,IAAI,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,MAAM,CAAA,EAAG;AACnC,gBAAA,kBAAA,CAAmB,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC,CAAA;AACjC,gBAAA,aAAA,CAAc,GAAG,CAAA;AAAA,cACnB,CAAA,MAAO;AACL,gBAAA,kBAAA,CAAmB,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,cAC1C;AAAA,YACF,CAAA;AAAA,YACA,WAAA,EAAY,OAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yEAAwE,QAAA,EAAA,KAAA,EAAG;AAAA,OAAA,EAC7F,CAAA,GACE,IAAA;AAAA,sBAEJI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,gBAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,UAAA,cAAA;AAAA,UAAa,cAAc,cAAA;AAAe,SAAA,EAAE,CAAA;AAAA,wBAClDJ,cAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,kCAAiC,QAAA,EAAA,WAAA,EAEjE;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC5nBA,IAAM,eAAe,CAAC,KAAA,EAAe,SAAA,KAAsB,KAAA,CAAM,QAAQ,SAAS,CAAA;AAElF,SAAS,QAAA,CAAS;AAAA,EAChB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,QAAQ,IAAA,KAAS,KAAA;AAEvB,EAAA,uBACEI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,4BAAA;AAAA,UACA,QAAQ,gBAAA,GAAmB;AAAA,SAC7B;AAAA,QACA,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAGM,OAAM,QAAA,EAAU,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,CAAA;AAAI;AAAA,KAChD;AAAA,oBAEAF,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAAI,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,KAAA,GAAQ,mBAAmB,gBAAgB,CAAA;AAAA,QAC5F,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UACG,YAAA,CAAa,OAAO,SAAS;AAAA;AAAA;AAAA,KACjC;AAAA,oBACAJ,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAwD,QAAA,EAAA,YAAA,CAAa,MAAA,EAAQ,eAAe,CAAA,EAAE;AAAA,GAAA,EAC/G,CAAA;AAEJ;AAEA,IAAMM,MAAAA,GAAQ,CAAC,KAAA,EAAe,GAAA,EAAa,GAAA,KAAgB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAEtF,IAAM,SAAA,GAAkBC,iBAAA,CAAA,UAAA;AAAA,EAC7B,CACE;AAAA,IACE,IAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAS,EAAC;AAAA,IACV,UAAA,GAAa,aAAA;AAAA,IACb,WAAA,GAAc,QAAA;AAAA,IACd,SAAA,GAAY,CAAA;AAAA,IACZ,eAAA,GAAkB,CAAA;AAAA,IAClB,UAAA,GAAa,WAAA;AAAA,IACb,WAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAUA,2BAAiC,UAAU,CAAA;AACvE,IAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUA,2BAAiC,KAAK,CAAA;AAElF,IAAMA,4BAAU,MAAM;AACpB,MAAA,MAAA,CAAO,UAAU,CAAA;AAAA,IACnB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KAAiC;AAClD,MAAA,MAAA,CAAO,IAAI,CAAA;AACX,MAAA,WAAA,GAAc,IAAI,CAAA;AAAA,IACpB,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,MAAM,CAAC,CAAA;AACvE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,MAAM,CAAC,CAAA;AAEvE,IAAA,MAAM,WACJ,gBAAA,IAAoB,IAAA,GAChB,YAAA,GACA,gBAAA,IAAoB,IAClB,gBAAA,GACA,gBAAA;AAER,IAAA,MAAM,aAAA,GAAgB,OAAO,MAAA,CAAO,CAAC,MAAM,WAAA,KAAgB,KAAA,IAAS,CAAA,CAAE,IAAA,KAAS,WAAW,CAAA;AAE1F,IAAA,uBACEH,eAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,6GAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,MAAM,SAAA,CAAU,WAAW,CAAA;AAAA,kBACpC,SAAA,EAAW,EAAA;AAAA,oBACT,qCAAA;AAAA,oBACA,GAAA,KAAQ,cAAc,YAAA,GAAe;AAAA,mBACvC;AAAA,kBACD,QAAA,EAAA;AAAA,oBAAA,WAAA;AAAA,oBAEE,QAAQ,WAAA,mBAAcJ,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0DAAyD,CAAA,GAAK;AAAA;AAAA;AAAA,eACvG;AAAA,8BACAI,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,MAAM,SAAA,CAAU,QAAQ,CAAA;AAAA,kBACjC,SAAA,EAAW,EAAA;AAAA,oBACT,mCAAA;AAAA,oBACA,GAAA,KAAQ,WAAW,YAAA,GAAe;AAAA,mBACpC;AAAA,kBACD,QAAA,EAAA;AAAA,oBAAA,QAAA;AAAA,oBAEE,QAAQ,QAAA,mBAAWJ,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0DAAyD,CAAA,GAAK;AAAA;AAAA;AAAA;AACpG,aAAA,EACF,CAAA;AAAA,YAEC,QAAQ,QAAA,mBACPI,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,kBACnC,SAAA,EAAW,EAAA;AAAA,oBACT,iCAAA;AAAA,oBACA,WAAA,KAAgB,QAAQ,wBAAA,GAA2B;AAAA,mBACrD;AAAA,kBACD,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BACAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,kBACnC,SAAA,EAAW,EAAA;AAAA,oBACT,iCAAA;AAAA,oBACA,WAAA,KAAgB,QAAQ,wBAAA,GAA2B;AAAA,mBACrD;AAAA,kBACD,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BACAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,MAAM,cAAA,CAAe,MAAM,CAAA;AAAA,kBACpC,SAAA,EAAW,EAAA;AAAA,oBACT,iCAAA;AAAA,oBACA,WAAA,KAAgB,SAAS,wBAAA,GAA2B;AAAA,mBACtD;AAAA,kBACD,QAAA,EAAA;AAAA;AAAA;AAED,aAAA,EACF,oBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAA2B,QAAA,EAAA,WAAA,EAAY;AAAA,WAAA,EAE1D,CAAA;AAAA,0BAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,cAAAA,CAAC,SAAK,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,8BACjBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY;AAAA,aAAA,EAC3C,CAAA;AAAA,YAEC,GAAA,KAAQ,2BACPA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,iDAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,QAAA,EAAS;AAAA,gBAElC,QAAA,EAAA,aAAA,CAAc,MAAA,KAAW,CAAA,mBACxBA,cAAAA,CAAC,SAAI,SAAA,EAAU,8CAAA,EAA+C,QAAA,EAAA,WAAA,EAAS,CAAA,mBAEvEA,cAAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,EAAO,sBACzBI,eAAAA,CAAC,KAAA,EAAA,EAA4E,SAAA,EAAU,iDAAA,EACrF,QAAA,EAAA;AAAA,kCAAAA,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,cAAA;AAAA,wBACA,KAAA,CAAM,IAAA,KAAS,KAAA,GAAQ,gBAAA,GAAmB;AAAA,uBAC5C;AAAA,sBACD,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,wBACG,YAAA,CAAa,KAAA,CAAM,KAAA,EAAO,SAAS;AAAA;AAAA;AAAA,mBACvC;AAAA,kCACAJ,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAyC,QAAA,EAAA,YAAA,CAAa,KAAA,CAAM,MAAA,EAAQ,eAAe,CAAA,EAAE;AAAA,iBAAA,EAAA,EAT5F,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,MAAM,KAAK,CAAA,CAAA,EAAI,KAAA,CAAM,MAAM,IAAI,KAAA,CAAM,IAAA,IAAQ,CAAC,CAAA,CAUzE,CACD,CAAA,EACH;AAAA;AAAA,aAEJ,mBAEAI,eAAAA,CAAAI,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAAR,cAAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EACZ,eAAK,GAAA,CAAI,CAAC,CAAA,EAAG,GAAA,qBACZA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,KAAA;AAAA,kBACL,OAAO,CAAA,CAAE,KAAA;AAAA,kBACT,QAAQ,CAAA,CAAE,MAAA;AAAA,kBACV,QAAA,EAAA,CAAY,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,UAAU,WAAA,GAAe,GAAA;AAAA,kBAClD,SAAA;AAAA,kBACA;AAAA,iBAAA;AAAA,gBANK,OAAO,GAAG,CAAA,CAAA,EAAI,EAAE,KAAK,CAAA,CAAA,EAAI,EAAE,MAAM,CAAA;AAAA,eAQzC,CAAA,EACH,CAAA;AAAA,8BAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,QAAQ,CAAA,EAAG,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBAChE,YAAA,CAAa,UAAU,SAAS,CAAA;AAAA,kBACjC,oBAAoB,IAAA,GAAO,IAAA,mBAC1BA,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,4BAAA,EAA8B,QAAA,EAAA;AAAA,oBAAA,gBAAA,IAAoB,IAAI,GAAA,GAAM,EAAA;AAAA,oBAAI,gBAAA,CAAiB,QAAQ,CAAC,CAAA;AAAA,oBAAE;AAAA,mBAAA,EAAC;AAAA,iBAAA,EAEjH,CAAA;AAAA,gCACAJ,eAAC,KAAA,EAAA,EAAI;AAAA,eAAA,EACP,CAAA;AAAA,8BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,eAAK,GAAA,CAAI,CAAC,CAAA,EAAG,GAAA,qBACZA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,KAAA;AAAA,kBACL,OAAO,CAAA,CAAE,KAAA;AAAA,kBACT,QAAQ,CAAA,CAAE,MAAA;AAAA,kBACV,QAAA,EAAA,CAAY,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,UAAU,WAAA,GAAe,GAAA;AAAA,kBAClD,SAAA;AAAA,kBACA;AAAA,iBAAA;AAAA,gBANK,OAAO,GAAG,CAAA,CAAA,EAAI,EAAE,KAAK,CAAA,CAAA,EAAI,EAAE,MAAM,CAAA;AAAA,eAQzC,CAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EAEJ;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;ACxPjB,IAAM,YAAA,GAAqBS,iBAAA,CAAA,UAAA;AAAA,EAChC,CACE;AAAA,IACE,SAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA,GAAW,IAAA;AAAA,IACX,KAAA,GAAQ,IAAA;AAAA,IACR,IAAA,GAAO,IAAA;AAAA,IACP,QAAA,GAAW,IAAA;AAAA,IACX,WAAA,GAAc,IAAA;AAAA,IACd,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,QAAA,GAAiBA,yBAAgC,IAAI,CAAA;AAE3D,IAAMA,4BAAU,MAAM;AACpB,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,MAAM,yBAAyB,MAAM;AACnC,QAAA,MAAM,CAAA,GAAI,QAAA;AACV,QAAA,MAAM,YAAA,GAAe,CAAC,EACpB,CAAA,CAAE,qBACF,CAAA,CAAE,uBAAA,IACF,CAAA,CAAE,oBAAA,IACF,CAAA,CAAE,mBAAA,CAAA;AAGJ,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,KAAA,CAAM,MAAM,SAAA,GAAY,SAAA;AACxB,UAAA,KAAA,CAAM,MAAM,KAAA,GAAQ,OAAA;AACpB,UAAA,KAAA,CAAM,MAAM,MAAA,GAAS,OAAA;AACrB,UAAA,KAAA,CAAM,MAAM,QAAA,GAAW,OAAA;AACvB,UAAA,KAAA,CAAM,MAAM,GAAA,GAAM,GAAA;AAClB,UAAA,KAAA,CAAM,MAAM,IAAA,GAAO,GAAA;AACnB,UAAA,KAAA,CAAM,MAAM,SAAA,GAAY,MAAA;AACxB,UAAA,KAAA,CAAM,MAAM,MAAA,GAAS,MAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,MAAM,SAAA,GAAY,OAAA;AACxB,UAAA,KAAA,CAAM,MAAM,KAAA,GAAQ,MAAA;AACpB,UAAA,KAAA,CAAM,MAAM,MAAA,GAAS,MAAA;AACrB,UAAA,KAAA,CAAM,MAAM,QAAA,GAAW,UAAA;AACvB,UAAA,KAAA,CAAM,MAAM,GAAA,GAAM,GAAA;AAClB,UAAA,KAAA,CAAM,MAAM,IAAA,GAAO,GAAA;AACnB,UAAA,KAAA,CAAM,MAAM,SAAA,GAAY,MAAA;AACxB,UAAA,KAAA,CAAM,MAAM,MAAA,GAAS,MAAA;AAAA,QACvB;AAAA,MACF,CAAA;AAEA,MAAA,KAAA,CAAM,gBAAA,CAAiB,oBAAoB,sBAAsB,CAAA;AACjE,MAAA,KAAA,CAAM,gBAAA,CAAiB,0BAA0B,sBAAsB,CAAA;AACvE,MAAA,KAAA,CAAM,gBAAA,CAAiB,uBAAuB,sBAAsB,CAAA;AACpE,MAAA,KAAA,CAAM,gBAAA,CAAiB,sBAAsB,sBAAsB,CAAA;AAEnE,MAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,sBAAsB,CAAA;AACpE,MAAA,QAAA,CAAS,gBAAA,CAAiB,0BAA0B,sBAAsB,CAAA;AAC1E,MAAA,QAAA,CAAS,gBAAA,CAAiB,uBAAuB,sBAAsB,CAAA;AACvE,MAAA,QAAA,CAAS,gBAAA,CAAiB,sBAAsB,sBAAsB,CAAA;AAEtE,MAAA,OAAO,MAAM;AACX,QAAA,KAAA,CAAM,mBAAA,CAAoB,oBAAoB,sBAAsB,CAAA;AACpE,QAAA,KAAA,CAAM,mBAAA,CAAoB,0BAA0B,sBAAsB,CAAA;AAC1E,QAAA,KAAA,CAAM,mBAAA,CAAoB,uBAAuB,sBAAsB,CAAA;AACvE,QAAA,KAAA,CAAM,mBAAA,CAAoB,sBAAsB,sBAAsB,CAAA;AAEtE,QAAA,QAAA,CAAS,mBAAA,CAAoB,oBAAoB,sBAAsB,CAAA;AACvE,QAAA,QAAA,CAAS,mBAAA,CAAoB,0BAA0B,sBAAsB,CAAA;AAC7E,QAAA,QAAA,CAAS,mBAAA,CAAoB,uBAAuB,sBAAsB,CAAA;AAC1E,QAAA,QAAA,CAAS,mBAAA,CAAoB,sBAAsB,sBAAsB,CAAA;AAAA,MAC3E,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,uBACEL,eAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,oGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAJ,cAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,gBAAA,EACpB,QAAA,kBAAAA,eAAC,SAAA,EAAA,EAAU,SAAA,EAAU,sCAAA,EAAwC,QAAA,EAAA,KAAA,EAAM,CAAA,EACrE,CAAA;AAAA,0BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEAAA,EACb,QAAA,kBAAAI,eAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,2DAAA;AAAA,cACV,QAAA;AAAA,cACA,IAAA;AAAA,cACA,QAAA;AAAA,cACA,KAAA;AAAA,cACA,WAAA;AAAA,cACA,MAAA;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAJ,cAAAA,CAAC,YAAO,GAAA,EAAU,CAAA;AAAA,gBAAE;AAAA;AAAA;AAAA,aAGxB,CAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;ACzF3B,IAAM,SAAA,GAAmE;AAAA,EACvE,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,iBAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,0BAAA;AAAA,IACR,UAAA,EAAY,0BAAA;AAAA,IACZ,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAMU;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,gBAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,0BAAA;AAAA,IACR,UAAA,EAAY,0BAAA;AAAA,IACZ,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAMC;AAAA,GACR;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,kBAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,2BAAA;AAAA,IACR,UAAA,EAAY,2BAAA;AAAA,IACZ,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAMC;AAAA;AAEV,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,IAAA,KAAsC;AACzD,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,SAAA,CAAU,QAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,IAAI,GAAA,IAAO,SAAA,EAAW,OAAO,SAAA,CAAU,GAAG,CAAA;AAC1C,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAK,QAAA,EAAS;AAAA,IACrB,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,wBAAA;AAAA,IACR,UAAA,EAAY,wBAAA;AAAA,IACZ,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAMC;AAAA,GACR;AACF,CAAA;AAEA,IAAM,UAAA,GAAa,CAAC,KAAA,KAAyB;AAC3C,EAAA,MAAM,OAAO,OAAO,KAAA,KAAU,WAAW,IAAI,IAAA,CAAK,KAAK,CAAA,GAAI,KAAA;AAC3D,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,GAAG,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAC7E,EAAA,OAAO,IAAA,CAAK,mBAAmB,MAAA,EAAW;AAAA,IACxC,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM;AAAA,GACP,CAAA;AACH,CAAA;AAEO,IAAM,mBAAA,GAA4BC,iBAAA,CAAA,UAAA;AAAA,EACvC,CAAC,EAAE,SAAA,EAAW,OAAA,GAAU,8BAAA,EAAgC,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzG,IAAA,MAAM,WAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,MAAM,MAAA,GAAS,CAAA;AAExD,IAAA,uBACEV,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,+LAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0DAAA,EAA4D,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,YAChF,6BAAaA,cAAAA,CAAC,OAAE,SAAA,EAAU,uBAAA,EAAyB,sBAAW,CAAA,GAAO;AAAA,WAAA,EACxE,CAAA;AAAA,0BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACZ,qBACG,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AACzB,YAAA,MAAM,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAClC,YAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,YAAA,MAAM,MAAM,IAAA,CAAK,EAAA,IAAM,GAAG,IAAA,CAAK,KAAK,IAAI,KAAK,CAAA,CAAA;AAE7C,YAAA,MAAM,0BACJI,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,yIAAA;AAAA,gBAGV,QAAA,EAAA;AAAA,kCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,oCAAAJ,cAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,2EAAA;AAAA,wBACV,KAAA,EAAO;AAAA,0BACL,YAAY,IAAA,CAAK,MAAA;AAAA,0BACjB,aAAa,IAAA,CAAK,UAAA;AAAA,0BAClB,OAAO,IAAA,CAAK;AAAA,yBACd;AAAA,wBAEA,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,qBAC5B;AAAA,oBACC,KAAA,KAAU,MAAM,MAAA,GAAS,CAAA,mBACxBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAAsC,CAAA,GACnD;AAAA,mBAAA,EACN,CAAA;AAAA,kCAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,oCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACb,QAAA,EAAA;AAAA,sCAAAJ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wDAAA,EAAyD,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,CAAK,MAAA,EAAO,EAClG,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA;AAAA,sCACAI,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACd,QAAA,EAAA;AAAA,wCAAAJ,cAAAA,CAACe,wBAAA,EAAA,EAAa,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,wBAC1C,UAAA,CAAW,KAAK,IAAI;AAAA,uBAAA,EACvB;AAAA,qBAAA,EACF,CAAA;AAAA,oCAEAf,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EAA6C,eAAK,KAAA,EAAM,CAAA;AAAA,oBACpE,IAAA,CAAK,8BACJA,cAAAA,CAAC,OAAE,SAAA,EAAU,4BAAA,EAA8B,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY,CAAA,GAC1D,IAAA;AAAA,oBAAA,CAEF,KAAK,IAAA,IAAQ,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,8BACpCI,eAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,QAAA;AAAA,wBACL,SAAA,EAAU,2GAAA;AAAA,wBACV,SAAS,MAAM;AACb,0BAAA,IAAI,KAAK,IAAA,EAAM;AACb,4BAAA,MAAA,EAAQ,IAAA,GAAO,IAAA,CAAK,IAAA,EAAM,QAAA,EAAU,qBAAqB,CAAA;AAAA,0BAC3D;AACA,0BAAA,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,wBACtB,CAAA;AAAA,wBAEC,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAK,WAAA;AAAA,0CACNJ,cAAAA,CAACgB,wBAAA,EAAA,EAAa,SAAA,EAAU,6EAAA,EAA8E;AAAA;AAAA;AAAA,qBACxG,GACE;AAAA,mBAAA,EACN;AAAA;AAAA,eAAA;AAAA,cAjDK;AAAA,aAkDP;AAGF,YAAA,OAAO,OAAA;AAAA,UACT,CAAC,CAAA,GACD,UAAA,oBACEZ,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yIAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,cAAAA,CAACa,qBAAA,EAAA,EAAU,SAAA,EAAU,4BAAA,EAA6B,CAAA;AAAA,YAAE;AAAA,WAAA,EAEtD,CAAA,EAER;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AClKlC,IAAM,QAAA,GAAW,CAAC,GAAA,KAAgB,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAEhE,IAAM,QAAA,GAAW,CAAC,EAAE,SAAA,uBAClBT,eAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IACN,SAAA;AAAA,IAEA,QAAA,EAAA;AAAA,sBAAAJ,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,WAAA;AAAA,UACF,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe;AAAA;AAAA,OACjB;AAAA,sBACAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,yDAAA;AAAA,UACF,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA;AACF,CAAA;AAGK,IAAM,UAAA,GAAmBiB,iBAAA,CAAA,UAAA;AAAA,EAC9B,CAAC;AAAA,IACC,SAAA;AAAA,IACA,KAAA,GAAQ,aAAA;AAAA,IACR,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KACF,GAAA,KAAQ;AACT,IAAA,uBACEb,eAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,4JAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAJ,cAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,gBAAA,EACpB,QAAA,kBAAAA,eAAC,SAAA,EAAA,EAAU,SAAA,EAAU,4CAAA,EAA8C,QAAA,EAAA,KAAA,EAAM,CAAA,EAC3E,CAAA;AAAA,0BAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iIAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAO,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,8BAC3BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAO,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,8BAC1BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAO,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,8BAC1BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAO,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,8BAC3BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAO,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,8BAC5BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAO,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,8BAC3BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAO,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,8BAC5BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAmB,QAAA,EAAA,SAAA,EAAO;AAAA,aAAA,EAC3C,CAAA;AAAA,YAEC,OAAO,MAAA,KAAW,CAAA,mBACjBA,cAAAA,CAAC,SAAI,SAAA,EAAU,yCAAA,EAA0C,QAAA,EAAA,WAAA,EAAS,CAAA,mBAElEA,cAAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACrB,cAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,KAAS,KAAA,GAAQ,gBAAA,GAAmB,gBAAA;AAC5D,cAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,aAAA,IAAiB,CAAC,CAAA;AAChD,cAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,EAAQ,WAAA,EAAY,KAAM,WAAA;AAEpD,cAAA,MAAM,YAAA,GAAe,QAAQ,WAAW,CAAA;AACxC,cAAA,MAAM,aAAA,GAAgB,QAAQ,YAAY,CAAA;AAC1C,cAAA,MAAM,SAAA,GAAY,QAAQ,QAAQ,CAAA;AAElC,cAAA,uBACEI,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAU,4JAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA6B,gBAAM,KAAA,EAAM,CAAA;AAAA,oCACxDA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,4BAAA,EAA8B,SAAS,CAAA,EAAI,QAAA,EAAA,KAAA,CAAM,IAAA,EAAK,CAAA;AAAA,oCACzEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAoB,gBAAM,IAAA,EAAK,CAAA;AAAA,oCAE9CI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,sCAAAA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,wBAAE,KAAA,CAAM,MAAM,cAAA;AAAe,uBAAA,EAAE,CAAA;AAAA,sCAC9DJ,cAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAK,QAAA;AAAA,0BACL,OAAA,EAAS,YAAA,GAAe,MAAM,WAAA,GAAc,KAAK,CAAA,GAAI,MAAA;AAAA,0BACrD,SAAA,EAAW,EAAA;AAAA,4BACT,8EAAA;AAAA,4BACA,eAAe,2DAAA,GAA8D;AAAA,2BAC/E;AAAA,0BACA,YAAA,EAAW,YAAA;AAAA,0BAEX,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA;AAAA;AAC1C,qBAAA,EACF,CAAA;AAAA,oCAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,sCAAAJ,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAgB,QAAA,EAAA,KAAA,CAAM,MAAA,CAAO,gBAAe,EAAE,CAAA;AAAA,sCAC9DA,cAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAK,QAAA;AAAA,0BACL,OAAA,EAAS,aAAA,GAAgB,MAAM,YAAA,GAAe,KAAK,CAAA,GAAI,MAAA;AAAA,0BACvD,SAAA,EAAW,EAAA;AAAA,4BACT,8EAAA;AAAA,4BACA,gBAAgB,2DAAA,GAA8D;AAAA,2BAChF;AAAA,0BACA,YAAA,EAAW,aAAA;AAAA,0BAEX,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA;AAAA;AAC1C,qBAAA,EACF,CAAA;AAAA,oCAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,sBAAE,KAAA,CAAM,MAAM,cAAA;AAAe,qBAAA,EAAE,CAAA;AAAA,oCAE9EA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,sCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EAA4C,QAAA,EAAA;AAAA,wBAAA,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,wBAAE;AAAA,uBAAA,EAAC,CAAA;AAAA,sCAC9EJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EAAiC,OAAO,EAAE,KAAA,EAAO,GAAG,MAAM,CAAA,CAAA,CAAA,IAAO,CAAA,EAClF;AAAA,qBAAA,EACF,CAAA;AAAA,oCAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA,WAAA,mBACCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wIAAA,EAAyI,QAAA,EAAA,WAAA,EAEzJ,oBAEAA,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,QAAA;AAAA,wBACL,OAAA,EAAS,SAAA,GAAY,MAAM,QAAA,GAAW,KAAK,CAAA,GAAI,MAAA;AAAA,wBAC/C,SAAA,EAAW,EAAA;AAAA,0BACT,wFAAA;AAAA,0BACA,YAAY,sGAAA,GAAyG;AAAA,yBACvH;AAAA,wBACD,QAAA,EAAA;AAAA;AAAA,qBAED,EAEJ;AAAA;AAAA,iBAAA;AAAA,gBA/DK,KAAA,CAAM;AAAA,eAgEb;AAAA,YAEJ,CAAC,CAAA,EACH;AAAA,WAAA,EAEJ;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AChJzB,IAAM,gBAAmC,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAEtE,IAAM,WAAA,GAAc,CAAC,KAAA,EAAe,cAAA,KAA2B;AAC7D,EAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,KAAA,CAAM,eAAe,MAAA,EAAW;AAAA,IACzD,qBAAA,EAAuB,CAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAC,CAAA,CAAA;AACJ,CAAA;AAEO,IAAM,UAAA,GAAmBkB,iBAAA,CAAA,UAAA;AAAA,EAC9B,CACE;AAAA,IACE,SAAA;AAAA,IACA,KAAA,GAAQ,aAAA;AAAA,IACR,MAAA,GAAS,aAAA;AAAA,IACT,aAAA;AAAA,IACA,aAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA,GAAiB,GAAA;AAAA,IACjB,MAAA,GAAS,MAAA;AAAA,IACT,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,YAAA,GAAqBA,yBAA8B,IAAI,CAAA;AAC7D,IAAA,MAAM,QAAA,GAAiBA,yBAAyB,IAAI,CAAA;AACpD,IAAA,MAAM,SAAA,GAAkBA,yBAAyC,IAAI,CAAA;AACrE,IAAA,MAAM,YAAA,GAAqBA,yBAA0B,IAAI,CAAA;AACzD,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,2BAAiC,IAAI,CAAA;AAEnF,IAAA,MAAM,aAAA,GAAsBA,0BAAQ,MAAM;AACxC,MAAA,IAAI,KAAA,IAAS,MAAM,OAAO,KAAA;AAC1B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA;AACvB,MAAA,OAAO,IAAA,EAAM,KAAA;AAAA,IACf,CAAA,EAAG,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA;AAEhB,IAAA,MAAM,qBAAA,GAA8BA,0BAAQ,MAAM;AAChD,MAAA,IAAI,aAAA,IAAiB,MAAM,OAAO,aAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA;AACvB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA,EAAG,KAAA;AAC1B,MAAA,IAAI,SAAS,IAAA,IAAQ,IAAA,IAAQ,IAAA,IAAQ,KAAA,KAAU,GAAG,OAAO,MAAA;AACzD,MAAA,OAAA,CAAS,IAAA,GAAO,SAAS,KAAA,GAAS,GAAA;AAAA,IACpC,CAAA,EAAG,CAAC,aAAA,EAAe,IAAI,CAAC,CAAA;AAExB,IAAMA,4BAAU,MAAM;AACpB,MAAA,MAAM,KAAK,YAAA,CAAa,OAAA;AACxB,MAAA,IAAI,CAAC,EAAA,EAAI;AAET,MAAA,MAAM,KAAA,GAAQC,8BAAY,EAAA,EAAI;AAAA,QAC5B,QAAA,EAAU,IAAA;AAAA,QACV,MAAA,EAAQ;AAAA,UACN,UAAA,EAAY,EAAE,KAAA,EAAO,aAAA,EAAc;AAAA,UACnC,SAAA,EAAW,wBAAA;AAAA,UACX,UAAA,EAAY;AAAA,SACd;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,SAAA,EAAW,EAAE,KAAA,EAAO,wBAAA,EAAyB;AAAA,UAC7C,SAAA,EAAW,EAAE,KAAA,EAAO,wBAAA;AAAyB,SAC/C;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,WAAA,EAAa,2BAAA;AAAA,UACb,SAAA,EAAW;AAAA,SACb;AAAA,QACA,SAAA,EAAW;AAAA,UACT,WAAA,EAAa,wBAAA;AAAA,UACb,WAAA,EAAa,IAAA;AAAA,UACb,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,SAAA,EAAW;AAAA,UACT,QAAA,EAAU,EAAE,KAAA,EAAO,wBAAA,EAAyB;AAAA,UAC5C,QAAA,EAAU,EAAE,KAAA,EAAO,wBAAA;AAAyB;AAC9C,OACD,CAAA;AAED,MAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB;AAAA,QACxC,OAAA,EAAS,SAAA;AAAA,QACT,SAAA,EAAW,SAAA;AAAA,QACX,aAAA,EAAe,KAAA;AAAA,QACf,WAAA,EAAa,SAAA;AAAA,QACb,aAAA,EAAe;AAAA,OAChB,CAAA;AAED,MAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,MAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAEpB,MAAA,OAAO,MAAM;AACX,QAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,QAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,QAAA,KAAA,CAAM,MAAA,EAAO;AAAA,MACf,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAMD,4BAAU,MAAM;AACpB,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAA,EAAQ;AAEvB,MAAA,MAAA,CAAO,QAAQ,IAAI,CAAA;AAEnB,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,MAAA,CAAO,eAAA,CAAgB,aAAa,OAAO,CAAA;AAC3C,QAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AAAA,MACzB;AAEA,MAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,QAAA,MAAM,cAAA,GAAiB,0BAAA;AAEvB,QAAA,YAAA,CAAa,OAAA,GAAU,OAAO,eAAA,CAAgB;AAAA,UAC5C,KAAA,EAAO,aAAA;AAAA,UACP,KAAA,EAAO,cAAA;AAAA,UACP,SAAA,EAAW,CAAA;AAAA,UACX,SAAA,EAAW,CAAA;AAAA,UACX,gBAAA,EAAkB,IAAA;AAAA,UAClB,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,CAAC;AAAA,SAC/B,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,CAAM,SAAA,GAAY,UAAA,EAAW;AAAA,IAC/B,CAAA,EAAG,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAExB,IAAA,MAAM,OAAO,qBAAA,IAAyB,IAAA,GAAO,IAAA,GAAO,qBAAA,IAAyB,IAAI,GAAA,GAAM,EAAA;AACvF,IAAA,MAAM,cACJ,qBAAA,IAAyB,IAAA,GAAO,EAAA,GAAK,qBAAA,IAAyB,IAAI,gBAAA,GAAmB,gBAAA;AACvF,IAAA,MAAM,aACJ,qBAAA,IAAyB,IAAA,GACrB,EAAA,GACA,qBAAA,IAAyB,IACvB,gCAAA,GACA,gCAAA;AAER,IAAA,MAAM,YAAA,GAAoC;AAAA,MACxC,eAAA,EAAiB,mDAAA;AAAA,MACjB,WAAA,EAAa,gDAAA;AAAA,MACb,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,MAAM,aAAA,GAAqC;AAAA,MACzC,eAAA,EAAiB,qDAAA;AAAA,MACjB,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,MAAM,cAAA,GAAsC;AAAA,MAC1C,eAAA,EAAiB,8BAAA;AAAA,MACjB,WAAA,EAAa,8BAAA;AAAA,MACb,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,uBACEd,eAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,gGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,gEAAA,EACpB,QAAA,EAAA;AAAA,4BAAAA,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,4CAAA,EAA8C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,8BACzEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM;AACjB,gBAAA,MAAM,SAAS,CAAA,KAAM,aAAA;AACrB,gBAAA,MAAM,UAAU,YAAA,KAAiB,CAAA;AACjC,gBAAA,MAAM,KAAA,GAA6B;AAAA,kBACjC,GAAG,YAAA;AAAA,kBACH,GAAI,UAAU,aAAA,GAAgB,IAAA;AAAA,kBAC9B,GAAI,SAAS,cAAA,GAAiB;AAAA,iBAChC;AACA,gBAAA,uBACEA,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBAEC,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,MAAM,aAAA,GAAgB,CAAC,CAAA;AAAA,oBAChC,YAAA,EAAc,MAAM,eAAA,CAAgB,CAAC,CAAA;AAAA,oBACrC,YAAA,EAAc,MAAM,eAAA,CAAgB,CAAC,SAAU,IAAA,KAAS,CAAA,GAAI,OAAO,IAAK,CAAA;AAAA,oBACxE,KAAA;AAAA,oBACA,SAAA,EAAW,EAAA;AAAA,sBACT;AAAA,qBACF;AAAA,oBAEC,QAAA,EAAA;AAAA,mBAAA;AAAA,kBAVI;AAAA,iBAWP;AAAA,cAEJ,CAAC,CAAA,EACH;AAAA,aAAA,EACF,CAAA;AAAA,4BAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,cAAA,aAAA,IAAiB,IAAA,GAAO,IAAA,mBACvBJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,WAAW,CAAA,EACjE,QAAA,EAAA,WAAA,CAAY,aAAA,EAAe,cAAc,CAAA,EAC5C,CAAA;AAAA,cAED,qBAAA,IAAyB,IAAA,GAAO,IAAA,mBAC/BI,eAAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,yDAAA,EAA2D,UAAU,CAAA,EACrF,QAAA,EAAA;AAAA,gBAAA,IAAA;AAAA,gBACA,qBAAA,EAAuB,QAAQ,CAAC,CAAA;AAAA,gBAAE;AAAA,eAAA,EACrC;AAAA,aAAA,EAEJ;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,YAAA;AAAA,cACL,SAAA,EAAU,mCAAA;AAAA,cACV,KAAA,EAAO,EAAE,MAAA;AAAO;AAAA,WAClB,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;ACpOzB,IAAMoB,YAAAA,GAAc,CAAC,KAAA,EAAe,cAAA,KAA2B;AAC7D,EAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,KAAA,CAAM,eAAe,MAAA,EAAW;AAAA,IACzD,qBAAA,EAAuB,CAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAC,CAAA,CAAA;AACJ,CAAA;AAEO,IAAM,kBAAA,GAA2BC,iBAAA,CAAA,UAAA;AAAA,EACtC,CACE;AAAA,IACE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA,GAAiB,GAAA;AAAA,IACjB,aAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,iBAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,aAAA,IAAiB,IAAA,GAAO,MAAA,GAAY,aAAA,IAAiB,CAAA;AAExE,IAAA,MAAM,eAAA,GAAkB,oCAAA;AAExB,IAAA,uBACEjB,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,6JAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAJ,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,QAAA;AAAA,cACL,KAAK,QAAA,IAAY,IAAA;AAAA,cACjB,SAAA,EAAU,qFAAA;AAAA,cACV,KAAA,EAAO,EAAE,SAAA,EAAW,YAAA,EAAc,iBAAiB,QAAA;AAAS;AAAA,WAC9D;AAAA,0BAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2KAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oPAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wLAAA,EACX,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,8BAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iKAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,cAAAA,CAAC,UAAM,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,gBACf,KAAA,IAAS,IAAA,GAAO,IAAA,mBACfI,eAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,oEAAA;AAAA,oBACV,KAAA,EAAO,EAAE,KAAA,EAAO,8BAAA,EAA+B;AAAA,oBAE9C,QAAA,EAAA;AAAA,sBAAAgB,YAAAA,CAAY,OAAO,cAAc,CAAA;AAAA,sBACjC,aAAA,IAAiB,IAAA,GAAO,IAAA,mBACvBhB,eAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,EAAA;AAAA,4BACT,oDAAA;AAAA,4BACA,aAAa,gBAAA,GAAmB;AAAA,2BAClC;AAAA,0BAEA,QAAA,EAAA;AAAA,4CAAAJ,cAAAA;AAAA,8BAAC,KAAA;AAAA,8BAAA;AAAA,gCACC,KAAA,EAAM,4BAAA;AAAA,gCACN,KAAA,EAAM,IAAA;AAAA,gCACN,MAAA,EAAO,IAAA;AAAA,gCACP,OAAA,EAAQ,WAAA;AAAA,gCACR,IAAA,EAAK,cAAA;AAAA,gCACL,SAAA,EAAU,cAAA;AAAA,gCAEV,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,UAAA,GAAa,qBAAqB,kBAAA,EAAoB;AAAA;AAAA,6BACjE;AAAA,4BACC,IAAA,CAAK,GAAA,CAAI,aAAa,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,4BAAE;AAAA;AAAA;AAAA;AACtC;AAAA;AAAA;AAEJ,eAAA,EAEJ,CAAA;AAAA,8BAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,IAAA,IAAQ,OAAO,IAAA,mBACdA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,kCAAAJ,cAAAA,CAACsB,qBAAA,EAAA,EAAU,SAAA,EAAU,wBAAA,EAAyB,CAAA;AAAA,kCAC9ClB,gBAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,oBAAK;AAAA,mBAAA,EAAK;AAAA,iBAAA,EACnB,CAAA;AAAA,gBAED,SAAS,IAAA,GAAO,IAAA,mBACfA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,kCAAAJ,cAAAA,CAACuB,gBAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAAyB,CAAA;AAAA,kCACzCnB,gBAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,oBAAA,KAAA;AAAA,oBAAM;AAAA,mBAAA,EAAM;AAAA,iBAAA,EACrB,CAAA;AAAA,gBAED,QAAQ,IAAA,GAAO,IAAA,mBACdA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,kCAAAJ,cAAAA,CAACwB,oBAAA,EAAA,EAAS,SAAA,EAAU,wBAAA,EAAyB,CAAA;AAAA,kCAC7CpB,gBAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,oBAAK;AAAA,mBAAA,EAAK;AAAA,iBAAA,EACnB,CAAA;AAAA,gBAED,qBAAqB,IAAA,GAAO,IAAA,mBAAOJ,cAAAA,CAAC,SAAK,QAAA,EAAA,iBAAA,EAAkB;AAAA,eAAA,EAC9D;AAAA,aAAA,EACF,CAAA;AAAA,4BAEAI,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6HAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,OAAA;AAAA,kBACT,SAAA,EAAU,uVAAA;AAAA,kBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,8BAAA,EAAgC,OAAO,OAAA,EAAQ;AAAA,kBACzE,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,oBAAA,CAAA,CAAE,aAAA,CAAc,MAAM,eAAA,GAAkB,eAAA;AAAA,kBAC1C,CAAA;AAAA,kBACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,oBAAA,CAAA,CAAE,aAAA,CAAc,MAAM,eAAA,GAAkB,8BAAA;AAAA,kBAC1C,CAAA;AAAA,kBACD,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BAEAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,WAAA;AAAA,kBACT,SAAA,EAAU,oUAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,eAAA,EAAiB,aAAA;AAAA,oBACjB,WAAA,EAAa,8BAAA;AAAA,oBACb,KAAA,EAAO;AAAA,mBACT;AAAA,kBACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,oBAAA,CAAA,CAAE,aAAA,CAAc,MAAM,eAAA,GAAkB,yBAAA;AAAA,kBAC1C,CAAA;AAAA,kBACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,oBAAA,CAAA,CAAE,aAAA,CAAc,MAAM,eAAA,GAAkB,aAAA;AAAA,kBAC1C,CAAA;AAAA,kBACD,QAAA,EAAA;AAAA;AAAA;AAED,aAAA,EACF;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;ACnJ1B,IAAM,iBAAA,GAA0ByB,iBAAA,CAAA,UAAA;AAAA,EACrC,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,aAAa,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzE,IAAA,uBACErB,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,oBAAA;AAAA,UACA,qBAAA;AAAA,UACA,gDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAJ,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,4CAAA;AAAA,gBACA,qCAAA;AAAA,gBACA,oCAAA;AAAA,gBACA,wBAAA;AAAA,gBACA,0BAAA;AAAA,gBACA,sBAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO,EAAE,uBAAA,EAAyB,aAAA,EAAc;AAAA,cAEhD,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,gBAAA,MAAM,MAAA,GAAS,IAAI,EAAA,KAAO,WAAA;AAE1B,gBAAA,uBACEI,eAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBAEC,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,MAAM,WAAA,GAAc,GAAA,CAAI,EAAE,CAAA;AAAA,oBACnC,SAAA,EAAW,EAAA;AAAA,sBACT,4BAAA;AAAA,sBACA,WAAA;AAAA,sBACA,aAAA;AAAA,sBACA,mBAAA;AAAA,sBACA,iDAAA;AAAA,sBACA,oEAAA;AAAA,sBACA,SACI,kDAAA,GACA;AAAA,qBACN;AAAA,oBACA,KAAA,EAAO;AAAA,sBACL,YAAA,EAAc,SAAS,wCAAA,GAA2C,uBAAA;AAAA,sBAClE,QAAA,EAAU,MAAA;AAAA,sBACV,WAAA,EAAa;AAAA,qBACf;AAAA,oBAEC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAI,KAAA;AAAA,sBAEJ,GAAA,CAAI,kCACHJ,cAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,qEAAA;AAAA,0BACV,KAAA,EAAO;AAAA,4BACL,eAAA,EAAiB,IAAI,iBAAA,IAAqB,SAAA;AAAA,4BAC1C,SAAA,EAAW;AAAA;AACb;AAAA,uBACF,GACE;AAAA;AAAA,mBAAA;AAAA,kBA9BC,GAAA,CAAI;AAAA,iBA+BX;AAAA,cAEJ,CAAC,CAAA,EACH;AAAA;AAAA,WACF;AAAA,UAEC,OAAA,IAAW,IAAA,IAAQ,OAAA,CAAQ,MAAA,GAAS,oBACnCA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,8BAAA;AAAA,gBACA,qCAAA;AAAA,gBACA,wBAAA;AAAA,gBACA,gBAAA;AAAA,gBACA;AAAA,eACF;AAAA,cAEC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZI,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAS,MAAA,CAAO,OAAA;AAAA,kBAChB,SAAA,EAAW,EAAA;AAAA,oBACT,wDAAA;AAAA,oBACA,SAAA;AAAA,oBACA,wBAAA;AAAA,oBACA,gBAAA;AAAA,oBACA,qCAAA;AAAA,oBACA,gBAAA;AAAA,oBACA,iEAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,MAAA,CAAO,IAAA;AAAA,oBACP,MAAA,CAAO;AAAA;AAAA,iBAAA;AAAA,gBAfH,MAAA,CAAO;AAAA,eAiBf;AAAA;AAAA,WACH,GACE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n primary: \"bg-teal-500 text-slate-950 hover:bg-teal-400 focus-visible:ring-teal-200\",\n accent:\n \"bg-[var(--color-accent,#e6c87e)] text-black hover:bg-[var(--color-accent-hover,#f8d12f)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n accentOutline:\n \"border border-[var(--color-accent,#e6c87e)] bg-transparent text-[var(--color-accent,#e6c87e)] hover:bg-[rgba(230,200,126,0.10)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n media:\n \"border border-white/10 bg-transparent text-white/90 hover:bg-white/5 hover:border-[var(--color-accent,#e6c87e)] hover:text-[var(--color-accent,#e6c87e)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n outline:\n \"border border-slate-800/20 bg-white text-slate-900 hover:border-slate-800/40 focus-visible:ring-slate-200\",\n ghost:\n \"bg-transparent text-slate-900 hover:bg-slate-900/5 focus-visible:ring-slate-200\",\n danger: \"bg-rose-500 text-white hover:bg-rose-400 focus-visible:ring-rose-200\",\n },\n size: {\n sm: \"h-9 px-4 text-sm\",\n md: \"h-11 px-6 text-base\",\n lg: \"h-12 px-7 text-lg\",\n icon: \"h-10 w-10\",\n },\n radius: {\n pill: \"rounded-full\",\n md: \"rounded\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n radius: \"pill\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, radius, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n ref={ref}\n className={cn(buttonVariants({ variant, size, radius }), className)}\n {...props}\n />\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nexport const badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-3 py-1 text-xs font-semibold uppercase tracking-wide transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-slate-900 text-white focus-visible:ring-slate-300\",\n muted:\n \"border-transparent bg-slate-100 text-slate-600 focus-visible:ring-slate-200\",\n outline: \"border-slate-200 bg-white text-slate-600 focus-visible:ring-slate-200\",\n success:\n \"border-transparent bg-teal-500/15 text-teal-600 focus-visible:ring-teal-200\",\n active:\n \"border-transparent bg-[rgba(14,203,129,0.25)] text-[#0ecb81] focus-visible:ring-[rgba(14,203,129,0.35)]\",\n pending:\n \"border-transparent bg-white/10 text-white/60 focus-visible:ring-white/20\",\n rejected:\n \"border-transparent bg-[rgba(246,70,93,0.20)] text-[#f6465d] focus-visible:ring-[rgba(246,70,93,0.30)]\",\n },\n size: {\n sm: \"px-2.5 py-0.5 text-[11px]\",\n md: \"px-3 py-1 text-xs\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, size, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props} />\n )\n);\n\nBadge.displayName = \"Badge\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-3xl border border-slate-200 bg-white shadow-sm transition hover:shadow-md\",\n className\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-xl font-semibold tracking-tight text-slate-900\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-slate-500\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-6 pb-6 pt-2 text-sm text-slate-600\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center border-t border-slate-100 px-6 py-4\", className)} {...props} />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"./card\";\n\nconst defaultFormatCurrency = (value: number) =>\n new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n\nconst defaultFormatPercent = (value: number) => {\n const sign = value >= 0 ? \"+\" : \"-\";\n return `${sign}${Math.abs(value).toFixed(2)}%`;\n};\n\nconst defaultFormatSignedCurrency = (value: number) => {\n const sign = value >= 0 ? \"+\" : \"-\";\n return `${sign}${defaultFormatCurrency(Math.abs(value))}`;\n};\n\nexport interface PortfolioSummaryProps extends React.HTMLAttributes<HTMLDivElement> {\n availableCash: number;\n portfolioValue: number;\n totalReturnPercent: number;\n unrealizedPnl: number;\n onResetAccount?: () => void;\n positionsHeading?: string;\n emptyPositionsText?: string;\n formatCurrency?: (value: number) => string;\n formatPercent?: (value: number) => string;\n formatSignedCurrency?: (value: number) => string;\n children?: React.ReactNode;\n}\n\nexport const PortfolioSummary = React.forwardRef<HTMLDivElement, PortfolioSummaryProps>(\n (\n {\n availableCash,\n portfolioValue,\n totalReturnPercent,\n unrealizedPnl,\n onResetAccount,\n positionsHeading = \"Current Positions\",\n emptyPositionsText = \"No positions yet. Start trading to build your portfolio!\",\n formatCurrency = defaultFormatCurrency,\n formatPercent = defaultFormatPercent,\n formatSignedCurrency = defaultFormatSignedCurrency,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const totalReturnClassName = totalReturnPercent >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n\n const pnlClassName = unrealizedPnl >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[560px] rounded-[12px] border border-white/10 bg-black/30 p-6 text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"p-0 pb-4\">\n <div className=\"flex items-center justify-between gap-4\">\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">Portfolio Summary</CardTitle>\n {onResetAccount ? (\n <button\n type=\"button\"\n onClick={onResetAccount}\n className=\"cursor-pointer rounded-[6px] border border-white/20 bg-white/10 px-[0.7rem] py-[0.35rem] text-xs text-[#888] transition-all duration-150 hover:border-white/30 hover:bg-white/[0.15] hover:text-white\"\n >\n Reset Account\n </button>\n ) : null}\n </div>\n <div className=\"mt-3 h-px w-full bg-white/10\" />\n </CardHeader>\n\n <CardContent className=\"p-0 pt-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Available Cash</p>\n <p className=\"mt-1 text-[1.25rem] font-semibold text-white\">{formatCurrency(availableCash)}</p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Portfolio Value</p>\n <p className=\"mt-1 text-[1.25rem] font-semibold text-white\">{formatCurrency(portfolioValue)}</p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Total Return</p>\n <p className={cn(\"mt-1 text-[1.25rem] font-semibold\", totalReturnClassName)}>\n {formatPercent(totalReturnPercent)}\n </p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Unrealized P&L</p>\n <p className={cn(\"mt-1 text-[1.25rem] font-semibold\", pnlClassName)}>\n {formatSignedCurrency(unrealizedPnl)}\n </p>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <p className=\"m-0 text-[0.9rem] font-medium text-white/70\">{positionsHeading}</p>\n <div className=\"mt-3\">\n {children ? (\n children\n ) : (\n <p className=\"py-4 text-center text-[0.85rem] text-white/40\">{emptyPositionsText}</p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n }\n);\n\nPortfolioSummary.displayName = \"PortfolioSummary\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { type OrderbookLevel } from \"./orderbook\";\n\nexport type HousePositionPendingOrder = {\n type: \"buy\" | \"sell\";\n tokens: number;\n value: number;\n price: number;\n};\n\nexport type HousePositionSliderOrderPayload = {\n side: \"buy\" | \"sell\";\n orderType: \"market\" | \"limit\";\n tokenId: string;\n tokenSymbol: string;\n price: number;\n deltaTokens: number;\n deltaValue: number;\n targetOwnership: number;\n targetTokens: number;\n targetValue: number;\n};\n\nexport type HousePositionOrderbook = {\n bids?: OrderbookLevel[];\n asks?: OrderbookLevel[];\n};\n\nexport interface HousePositionSliderProps extends React.HTMLAttributes<HTMLDivElement> {\n tokenId: string;\n tokenSymbol: string;\n totalTokens: number;\n currentPrice: number;\n availableCash: number;\n tokensHeld: number;\n pendingOrders?: HousePositionPendingOrder[];\n defaultOrderType?: \"market\" | \"limit\";\n orderbook?: HousePositionOrderbook;\n onConfirmOrder?: (payload: HousePositionSliderOrderPayload) => void;\n}\n\nconst clamp = (v: number, min: number, max: number) => Math.min(max, Math.max(min, v));\nconst fmt0 = (v: number) => Math.abs(v).toLocaleString(undefined, { maximumFractionDigits: 0 });\n\ntype MarketFillResult = {\n tokens: number;\n value: number;\n avgPrice: number | null;\n};\n\nconst normalizeLevels = (levels: OrderbookLevel[] = []) =>\n levels.filter((level) => Number.isFinite(level.price) && level.price > 0 && Number.isFinite(level.amount) && level.amount > 0);\n\nconst estimateMarketBuyFromUsd = (levels: OrderbookLevel[] = [], usdAmount: number): MarketFillResult => {\n if (!Number.isFinite(usdAmount) || usdAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const asks = normalizeLevels(levels).sort((a, b) => a.price - b.price);\n let remainingUsd = usdAmount;\n let tokensFilled = 0;\n let spent = 0;\n\n for (const level of asks) {\n if (remainingUsd <= 0) break;\n const levelValueCapacity = level.amount * level.price;\n const usdToSpend = Math.min(remainingUsd, levelValueCapacity);\n const tokensFromLevel = usdToSpend / level.price;\n tokensFilled += tokensFromLevel;\n spent += usdToSpend;\n remainingUsd -= usdToSpend;\n }\n\n return {\n tokens: tokensFilled,\n value: spent,\n avgPrice: tokensFilled > 0 ? spent / tokensFilled : null,\n };\n};\n\nconst estimateMarketBuyFromTokens = (levels: OrderbookLevel[] = [], tokenAmount: number): MarketFillResult => {\n if (!Number.isFinite(tokenAmount) || tokenAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const asks = normalizeLevels(levels).sort((a, b) => a.price - b.price);\n let remainingTokens = tokenAmount;\n let tokensFilled = 0;\n let spent = 0;\n\n for (const level of asks) {\n if (remainingTokens <= 0) break;\n const tokensFromLevel = Math.min(remainingTokens, level.amount);\n spent += tokensFromLevel * level.price;\n tokensFilled += tokensFromLevel;\n remainingTokens -= tokensFromLevel;\n }\n\n return {\n tokens: tokensFilled,\n value: spent,\n avgPrice: tokensFilled > 0 ? spent / tokensFilled : null,\n };\n};\n\nconst estimateMarketSellFromTokens = (levels: OrderbookLevel[] = [], tokenAmount: number): MarketFillResult => {\n if (!Number.isFinite(tokenAmount) || tokenAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const bids = normalizeLevels(levels).sort((a, b) => b.price - a.price);\n let remainingTokens = tokenAmount;\n let tokensFilled = 0;\n let received = 0;\n\n for (const level of bids) {\n if (remainingTokens <= 0) break;\n const tokensFromLevel = Math.min(remainingTokens, level.amount);\n received += tokensFromLevel * level.price;\n tokensFilled += tokensFromLevel;\n remainingTokens -= tokensFromLevel;\n }\n\n return {\n tokens: tokensFilled,\n value: received,\n avgPrice: tokensFilled > 0 ? received / tokensFilled : null,\n };\n};\n\nexport function HousePositionSlider({\n tokenId,\n tokenSymbol,\n totalTokens,\n currentPrice,\n availableCash,\n tokensHeld,\n pendingOrders = [],\n defaultOrderType = \"market\",\n orderbook,\n onConfirmOrder,\n className,\n ...props\n}: HousePositionSliderProps) {\n const [orderMode, setOrderMode] = React.useState<\"none\" | \"buy\" | \"sell\">(\"none\");\n const [buyTrackingMode, setBuyTrackingMode] = React.useState<\"dollars\" | \"tokens\">(\"dollars\");\n const [deltaDollars, setDeltaDollars] = React.useState(0);\n const [deltaTokensBuy, setDeltaTokensBuy] = React.useState(0);\n const [deltaTokensSell, setDeltaTokensSell] = React.useState(0);\n const [isDragging, setIsDragging] = React.useState(false);\n\n const [orderType, setOrderType] = React.useState<\"market\" | \"limit\">(defaultOrderType);\n const [limitPrice, setLimitPrice] = React.useState(currentPrice);\n const [limitPriceInput, setLimitPriceInput] = React.useState(currentPrice.toFixed(2));\n const [limitPriceDirty, setLimitPriceDirty] = React.useState(false);\n\n const [ownershipInput, setOwnershipInput] = React.useState(\"\");\n const [tokenAmountInput, setTokenAmountInput] = React.useState(\"\");\n\n const houseRef = React.useRef<HTMLDivElement | null>(null);\n\n const asks = orderbook?.asks ?? [];\n const bids = orderbook?.bids ?? [];\n\n React.useEffect(() => {\n if (orderType !== \"limit\") return;\n if (limitPriceDirty) return;\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n }, [currentPrice, limitPriceDirty, orderType]);\n\n const effectivePrice = orderType === \"limit\" ? limitPrice : currentPrice;\n const pendingBuyValue = pendingOrders.filter((o) => o.type === \"buy\").reduce((s, o) => s + o.value, 0);\n const pendingSellTokens = pendingOrders.filter((o) => o.type === \"sell\").reduce((s, o) => s + Math.abs(o.tokens), 0);\n\n const effectiveAvailableCash = Math.max(0, availableCash - pendingBuyValue);\n const effectiveTokensHeld = Math.max(0, tokensHeld - pendingSellTokens);\n\n const holdingsValue = tokensHeld * effectivePrice;\n const sliderHoldingsValue = effectiveTokensHeld * effectivePrice;\n const sliderTotalCapacity = sliderHoldingsValue + effectiveAvailableCash;\n\n const baselinePct = sliderTotalCapacity <= 0 ? 0 : (sliderHoldingsValue / sliderTotalCapacity) * 100;\n\n let deltaTokens = 0;\n let deltaValue = 0;\n let marketAvgPrice: number | null = null;\n let targetTokens = tokensHeld;\n let targetValue = holdingsValue;\n\n const limitPriceSafe = limitPrice > 0 ? limitPrice : currentPrice || 1;\n\n if (orderMode === \"buy\") {\n if (orderType === \"market\") {\n if (buyTrackingMode === \"tokens\") {\n const desiredTokens = Math.max(0, deltaTokensBuy);\n const result = estimateMarketBuyFromTokens(asks, desiredTokens);\n deltaTokens = result.tokens;\n deltaValue = result.value;\n marketAvgPrice = result.avgPrice;\n } else {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n const result = estimateMarketBuyFromUsd(asks, notional);\n deltaTokens = result.tokens;\n deltaValue = result.value;\n marketAvgPrice = result.avgPrice;\n }\n } else {\n if (buyTrackingMode === \"tokens\") {\n deltaTokens = deltaTokensBuy;\n deltaValue = deltaTokensBuy * limitPriceSafe;\n } else {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n deltaValue = notional;\n deltaTokens = notional / limitPriceSafe;\n }\n }\n } else if (orderMode === \"sell\") {\n if (orderType === \"market\") {\n const tokensToSell = Math.abs(deltaTokensSell);\n const result = estimateMarketSellFromTokens(bids, tokensToSell);\n deltaTokens = -result.tokens;\n deltaValue = -result.value;\n marketAvgPrice = result.avgPrice;\n } else {\n deltaTokens = deltaTokensSell;\n deltaValue = deltaTokensSell * limitPriceSafe;\n }\n }\n\n targetTokens = tokensHeld + deltaTokens;\n targetValue = targetTokens * effectivePrice;\n\n const plannedDeltaValue = (() => {\n if (orderMode === \"buy\") {\n if (buyTrackingMode === \"dollars\") {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n return notional;\n }\n const tokensPlanned = Math.max(0, deltaTokensBuy);\n const referencePrice = orderType === \"market\" ? currentPrice || limitPriceSafe : limitPriceSafe;\n return Math.min(tokensPlanned * referencePrice, effectiveAvailableCash);\n }\n if (orderMode === \"sell\") {\n const tokensToSell = Math.abs(Math.min(0, deltaTokensSell));\n const sellValue = tokensToSell * effectivePrice;\n return -Math.min(sellValue, sliderHoldingsValue);\n }\n return 0;\n })();\n\n const sliderTargetValue = clamp(sliderHoldingsValue + plannedDeltaValue, 0, sliderTotalCapacity);\n const targetPct = sliderTotalCapacity <= 0 ? 0 : (sliderTargetValue / sliderTotalCapacity) * 100;\n\n const isIncrease = orderMode === \"buy\";\n const hasChange = orderMode !== \"none\" && (Math.abs(deltaTokens) > 0.001 || Math.abs(deltaValue) > 0.01);\n\n const currentOwnership = totalTokens <= 0 ? 0 : (tokensHeld / totalTokens) * 100;\n const targetOwnership = totalTokens <= 0 ? 0 : (targetTokens / totalTokens) * 100;\n\n const estFeeTokens = (Math.abs(deltaValue) * 0.005) / (effectivePrice || 1);\n\n const resetOrder = React.useCallback(() => {\n setOrderMode(\"none\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n }, []);\n\n const updateOrderFromTargetValue = React.useCallback(\n (newTargetValue: number) => {\n const newDeltaValue = newTargetValue - holdingsValue;\n\n if (newDeltaValue > 0) {\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(Math.min(newDeltaValue, effectiveAvailableCash));\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n return;\n }\n\n if (newDeltaValue < 0) {\n const newDeltaTokens = newTargetValue / (effectivePrice || 1) - tokensHeld;\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(Math.max(newDeltaTokens, -effectiveTokensHeld));\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n\n resetOrder();\n },\n [effectiveAvailableCash, effectivePrice, effectiveTokensHeld, holdingsValue, resetOrder, tokensHeld]\n );\n\n const updateOrderFromOwnership = React.useCallback(\n (newOwnershipPercent: number) => {\n const nextOwnership = clamp(newOwnershipPercent, 0, 100);\n const newTargetTokens = (nextOwnership / 100) * totalTokens;\n updateOrderFromTargetValue(newTargetTokens * effectivePrice);\n },\n [effectivePrice, totalTokens, updateOrderFromTargetValue]\n );\n\n const updateOrderFromTokenAmount = React.useCallback(\n (tokenAmountSigned: number) => {\n if (tokenAmountSigned > 0) {\n const maxTokens = effectiveAvailableCash / (effectivePrice || 1);\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"tokens\");\n setDeltaTokensBuy(Math.min(tokenAmountSigned, maxTokens));\n setDeltaDollars(0);\n setDeltaTokensSell(0);\n return;\n }\n\n if (tokenAmountSigned < 0) {\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(Math.max(tokenAmountSigned, -effectiveTokensHeld));\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n\n resetOrder();\n },\n [effectiveAvailableCash, effectivePrice, effectiveTokensHeld, resetOrder]\n );\n\n const updateOrderFromSlider = React.useCallback(\n (pct: number) => {\n const normalized = (pct - 50) / 50;\n const magnitude = Math.min(Math.abs(normalized), 1);\n if (magnitude < 0.02) {\n resetOrder();\n return;\n }\n if (normalized > 0) {\n const notional = clamp(magnitude * effectiveAvailableCash, 0, effectiveAvailableCash);\n if (notional <= 0) {\n resetOrder();\n return;\n }\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(notional);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n return;\n }\n if (normalized < 0) {\n const tokensToSell = clamp(magnitude * effectiveTokensHeld, 0, effectiveTokensHeld);\n if (tokensToSell <= 0) {\n resetOrder();\n return;\n }\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(-tokensToSell);\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n resetOrder();\n },\n [effectiveAvailableCash, effectiveTokensHeld, resetOrder]\n );\n\n const handleDragAtClientY = React.useCallback(\n (clientY: number) => {\n if (!houseRef.current) return;\n const rect = houseRef.current.getBoundingClientRect();\n const y = clientY - rect.top;\n const pct = clamp(100 - (y / rect.height) * 100, 0, 100);\n updateOrderFromSlider(pct);\n },\n [updateOrderFromSlider]\n );\n\n const onMouseDown = (e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n\n const onMove = (ev: MouseEvent) => handleDragAtClientY(ev.clientY);\n const onUp = () => {\n setIsDragging(false);\n document.removeEventListener(\"mousemove\", onMove);\n document.removeEventListener(\"mouseup\", onUp);\n };\n\n document.addEventListener(\"mousemove\", onMove);\n document.addEventListener(\"mouseup\", onUp);\n };\n\n const onTouchStart = () => {\n setIsDragging(true);\n\n const onMove = (ev: TouchEvent) => {\n const touch = ev.touches[0];\n if (!touch) return;\n handleDragAtClientY(touch.clientY);\n };\n const onEnd = () => {\n setIsDragging(false);\n document.removeEventListener(\"touchmove\", onMove);\n document.removeEventListener(\"touchend\", onEnd);\n };\n\n document.addEventListener(\"touchmove\", onMove);\n document.addEventListener(\"touchend\", onEnd);\n };\n\n const handleCancel = () => {\n resetOrder();\n };\n\n const handleOrderTypeSelection = (next: \"market\" | \"limit\") => {\n setOrderType(next);\n if (next === \"limit\") {\n setLimitPriceDirty(false);\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n } else {\n setLimitPriceDirty(false);\n }\n };\n\n const handleConfirm = () => {\n if (!hasChange) return;\n const priceToUse = orderType === \"market\" ? marketAvgPrice ?? currentPrice : limitPrice;\n onConfirmOrder?.({\n side: isIncrease ? \"buy\" : \"sell\",\n orderType,\n tokenId,\n tokenSymbol,\n price: priceToUse,\n deltaTokens,\n deltaValue,\n targetOwnership,\n targetTokens,\n targetValue,\n });\n handleCancel();\n };\n\n const rectTop = 10;\n const rectBottom = 150;\n const totalFillableHeight = rectBottom - rectTop;\n const baselineFillHeight = (baselinePct / 100) * totalFillableHeight;\n const targetFillHeight = (targetPct / 100) * totalFillableHeight;\n const baselineFillY = rectBottom - baselineFillHeight;\n const targetFillY = rectBottom - targetFillHeight;\n\n const showIncrease = targetPct > baselinePct;\n const showDecrease = targetPct < baselinePct;\n\n const valueLabel = orderType === \"limit\" ? `${tokenSymbol} Owned at Limit` : `${tokenSymbol} Owned`;\n const deltaSign = deltaValue > 0 ? \"+\" : deltaValue < 0 ? \"-\" : \"\";\n const percentMarkers = [100, 50, 25, 0];\n\n return (\n <div className={cn(\"relative flex w-full flex-col items-center gap-6 rounded-[12px] bg-black/20 px-8 pb-6 pt-12\", className)} {...props}>\n <div className=\"absolute left-4 top-4 text-[1.1rem] font-semibold tracking-[0.5px] text-white\">Place Order</div>\n\n {hasChange ? (\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"absolute right-3 top-3 rounded-[6px] border border-white/20 bg-white/10 px-2.5 py-1.5 text-[0.7rem] text-[#888] transition-all duration-150 hover:border-white/30 hover:bg-white/[0.15] hover:text-white\"\n >\n ✕ Cancel\n </button>\n ) : null}\n\n <div className=\"text-center\">\n <div className=\"mb-2 text-xs uppercase tracking-[1px] text-[#888]\">{valueLabel}</div>\n <div className=\"flex items-baseline justify-center gap-3\">\n <span\n className={cn(\n \"text-[2.2rem] font-semibold\",\n deltaValue >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n {deltaSign}${fmt0(deltaValue)}\n </span>\n <span className=\"text-lg font-semibold text-white/60\">${fmt0(targetValue)}</span>\n </div>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-[200px] flex-col justify-between text-xs text-white/40\">\n {percentMarkers.map((marker) => (\n <span key={marker}>{marker}%</span>\n ))}\n </div>\n <div\n ref={houseRef}\n className=\"h-[200px] w-[160px] select-none touch-none\"\n style={{ cursor: \"ns-resize\" }}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n >\n <svg viewBox=\"0 0 120 160\" className=\"h-full w-full overflow-visible\">\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" fill=\"rgba(255,255,255,0.04)\" stroke=\"rgba(255,255,255,0.10)\" />\n <clipPath id=\"loaf-clip\">\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" />\n </clipPath>\n <g clipPath=\"url(#loaf-clip)\">\n <rect x=\"10\" y={showDecrease ? targetFillY : baselineFillY} width=\"100\" height={showDecrease ? targetFillHeight : baselineFillHeight} fill=\"rgba(220,175,120,0.7)\" />\n {showIncrease ? (\n <rect x=\"10\" y={targetFillY} width=\"100\" height={targetFillHeight - baselineFillHeight} fill=\"rgba(14,203,129,0.35)\" />\n ) : null}\n {showDecrease ? (\n <rect x=\"10\" y={baselineFillY} width=\"100\" height={baselineFillHeight - targetFillHeight} fill=\"rgba(246,70,93,0.35)\" />\n ) : null}\n <line x1=\"12\" y1={targetFillY} x2=\"108\" y2={targetFillY} stroke={showIncrease ? \"#0ecb81\" : showDecrease ? \"#f6465d\" : \"rgba(234,217,162,1)\"} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </g>\n </svg>\n </div>\n </div>\n\n <button\n type=\"button\"\n disabled={!hasChange}\n onClick={handleConfirm}\n className={cn(\n \"w-full rounded-[10px] px-4 py-4 text-base font-semibold transition\",\n !hasChange\n ? \"cursor-not-allowed bg-white/10 text-white/30\"\n : isIncrease\n ? \"bg-[#0ecb81] text-white hover:-translate-y-[1px] hover:shadow-[0_4px_12px_rgba(14,203,129,0.3)]\"\n : \"bg-[#f6465d] text-white hover:-translate-y-[1px] hover:shadow-[0_4px_12px_rgba(246,70,93,0.3)]\"\n )}\n >\n {!hasChange ? \"Adjust Position\" : isIncrease ? `Buy $${fmt0(deltaValue)}` : `Sell $${fmt0(deltaValue)}`}\n </button>\n\n <div className=\"w-full border-t border-white/10 py-4 text-[0.85rem]\">\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">{tokenSymbol} Ownership</span>\n <span className=\"text-white\">\n {currentOwnership.toFixed(2)}%\n <span className=\"mx-1.5 text-white/50\">→</span>\n <input\n type=\"text\"\n value={ownershipInput || targetOwnership.toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setOwnershipInput(val);\n }}\n onFocus={() => setOwnershipInput(targetOwnership.toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(ownershipInput);\n if (Number.isFinite(num)) updateOrderFromOwnership(num);\n setOwnershipInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n className={cn(\n \"w-[70px] rounded-[4px] border bg-white/10 px-2 py-1 text-right font-semibold outline-none\",\n targetOwnership >= currentOwnership\n ? \"border-[rgba(14,203,129,0.3)] text-[#0ecb81] focus:border-[#0ecb81]\"\n : \"border-[rgba(246,70,93,0.3)] text-[#f6465d] focus:border-[#f6465d]\"\n )}\n />\n </span>\n </div>\n\n {orderType === \"market\" ? null : (\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">{isIncrease ? \"Buying\" : \"Selling\"}</span>\n <span className=\"inline-flex items-center gap-1\">\n {orderMode === \"buy\" && buyTrackingMode === \"dollars\" ? <span className=\"mr-1 text-[#0ecb81]\">~</span> : null}\n <input\n type=\"text\"\n value={tokenAmountInput || Math.abs(deltaTokens).toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setTokenAmountInput(val);\n }}\n onFocus={() => setTokenAmountInput(Math.abs(deltaTokens).toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(tokenAmountInput);\n if (Number.isFinite(num) && num >= 0) {\n const signed = isIncrease || orderMode === \"none\" ? num : -num;\n updateOrderFromTokenAmount(signed);\n }\n setTokenAmountInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n className={cn(\n \"w-[90px] rounded-[4px] border bg-white/10 px-2 py-1 text-right font-semibold outline-none\",\n isIncrease\n ? \"border-[rgba(14,203,129,0.3)] text-[#0ecb81] focus:border-[#0ecb81]\"\n : \"border-[rgba(246,70,93,0.3)] text-[#f6465d] focus:border-[#f6465d]\"\n )}\n />\n <span className={cn(\"font-semibold\", isIncrease ? \"text-[#0ecb81]\" : \"text-[#f6465d]\")}>tokens</span>\n </span>\n </div>\n )}\n\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">Est. Fee</span>\n <span className=\"text-white\">{estFeeTokens.toFixed(6)} {tokenSymbol}</span>\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"mb-4 flex w-full rounded-[8px] bg-white/5 p-[3px]\">\n <button\n type=\"button\"\n onClick={() => handleOrderTypeSelection(\"market\")}\n className={cn(\n \"flex-1 rounded-[6px] px-3 py-2 text-[0.8rem] font-medium transition\",\n orderType === \"market\" ? \"bg-[rgba(201,162,39,0.2)] text-[#C9A227]\" : \"text-white/50 hover:bg-white/5\"\n )}\n >\n Market\n </button>\n <button\n type=\"button\"\n onClick={() => handleOrderTypeSelection(\"limit\")}\n className={cn(\n \"flex-1 rounded-[6px] px-3 py-2 text-[0.8rem] font-medium transition\",\n orderType === \"limit\" ? \"bg-[rgba(201,162,39,0.2)] text-[#C9A227]\" : \"text-white/50 hover:bg-white/5\"\n )}\n >\n Limit\n </button>\n </div>\n\n {orderType === \"limit\" ? (\n <div className=\"relative mb-4\">\n <input\n type=\"text\"\n value={limitPriceInput}\n onChange={(e) => {\n const input = e.target.value;\n if (input === \"\" || /^[0-9]*\\.?[0-9]*$/.test(input)) {\n setLimitPriceDirty(true);\n setLimitPriceInput(input);\n const num = Number.parseFloat(input);\n if (Number.isFinite(num) && num > 0) setLimitPrice(num);\n }\n }}\n onBlur={() => {\n const num = Number.parseFloat(limitPriceInput);\n if (Number.isFinite(num) && num > 0) {\n setLimitPriceInput(num.toFixed(2));\n setLimitPrice(num);\n } else {\n setLimitPriceInput(limitPrice.toFixed(2));\n }\n }}\n placeholder=\"Price\"\n className=\"w-full rounded-[8px] border border-white/10 bg-black/30 px-4 py-3 pr-14 text-[0.95rem] text-white outline-none focus:border-[#f0b90b]\"\n />\n <span className=\"absolute right-4 top-1/2 -translate-y-1/2 text-[0.8rem] text-white/50\">USD</span>\n </div>\n ) : null}\n\n <div className=\"flex items-center justify-between text-xs text-white/50\">\n <span>Available: ${availableCash.toLocaleString()}</span>\n <button type=\"button\" className=\"text-[#f0b90b] hover:underline\">\n Add Funds\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\n\nexport type OrderbookSide = \"ask\" | \"bid\";\n\nexport type OrderbookLevel = {\n price: number;\n amount: number;\n depth?: number;\n};\n\nexport type OrderbookTrade = {\n type: \"buy\" | \"sell\";\n price: number;\n amount: number;\n time?: string;\n};\n\nexport interface OrderbookProps extends React.HTMLAttributes<HTMLDivElement> {\n asks: OrderbookLevel[];\n bids: OrderbookLevel[];\n midPrice: number;\n midChangePercent?: number;\n trades?: OrderbookTrade[];\n priceLabel?: string;\n amountLabel?: string;\n precision?: number;\n amountPrecision?: number;\n defaultTab?: \"orderbook\" | \"trades\";\n onTabChange?: (tab: \"orderbook\" | \"trades\") => void;\n rightHeader?: React.ReactNode;\n}\n\nconst formatNumber = (value: number, precision: number) => value.toFixed(precision);\n\nfunction DepthRow({\n side,\n price,\n amount,\n depthPct,\n precision,\n amountPrecision,\n}: {\n side: OrderbookSide;\n price: number;\n amount: number;\n depthPct: number;\n precision: number;\n amountPrecision: number;\n}) {\n const isAsk = side === \"ask\";\n\n return (\n <div className=\"relative grid grid-cols-2 items-center gap-3 px-3 py-1.5\">\n <div\n className={cn(\n \"absolute inset-y-0 right-0\",\n isAsk ? \"bg-rose-900/30\" : \"bg-emerald-900/30\"\n )}\n style={{ width: `${clamp(depthPct, 0, 100)}%` }}\n />\n\n <div className={cn(\"relative z-[1] tabular-nums\", isAsk ? \"text-[#f6465d]\" : \"text-[#0ecb81]\")}\n >\n ${formatNumber(price, precision)}\n </div>\n <div className=\"relative z-[1] text-right tabular-nums text-white/90\">{formatNumber(amount, amountPrecision)}</div>\n </div>\n );\n}\n\nconst clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\n\nexport const Orderbook = React.forwardRef<HTMLDivElement, OrderbookProps>(\n (\n {\n asks,\n bids,\n midPrice,\n midChangePercent,\n trades = [],\n priceLabel = \"Price (USD)\",\n amountLabel = \"Amount\",\n precision = 2,\n amountPrecision = 2,\n defaultTab = \"orderbook\",\n onTabChange,\n rightHeader,\n className,\n ...props\n },\n ref\n ) => {\n const [tab, setTab] = React.useState<\"orderbook\" | \"trades\">(defaultTab);\n const [tradeFilter, setTradeFilter] = React.useState<\"all\" | \"buy\" | \"sell\">(\"all\");\n\n React.useEffect(() => {\n setTab(defaultTab);\n }, [defaultTab]);\n\n const handleTab = (next: \"orderbook\" | \"trades\") => {\n setTab(next);\n onTabChange?.(next);\n };\n\n const maxAskDepth = Math.max(1, ...asks.map((l) => l.depth ?? l.amount));\n const maxBidDepth = Math.max(1, ...bids.map((l) => l.depth ?? l.amount));\n\n const midClass =\n midChangePercent == null\n ? \"text-white\"\n : midChangePercent >= 0\n ? \"text-[#0ecb81]\"\n : \"text-[#f6465d]\";\n\n const tradeFiltered = trades.filter((t) => tradeFilter === \"all\" || t.type === tradeFilter);\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[520px] overflow-hidden rounded-[12px] border border-white/10 bg-black/30 text-white shadow-md\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between px-4 pt-4\">\n <div className=\"flex items-center gap-4\">\n <button\n type=\"button\"\n onClick={() => handleTab(\"orderbook\")}\n className={cn(\n \"relative pb-2 text-sm font-semibold\",\n tab === \"orderbook\" ? \"text-white\" : \"text-white/60\"\n )}\n >\n Orderbook\n {tab === \"orderbook\" ? <span className=\"absolute -bottom-px left-0 h-[2px] w-full bg-[#C9A227]\" /> : null}\n </button>\n <button\n type=\"button\"\n onClick={() => handleTab(\"trades\")}\n className={cn(\n \"relative pb-2 text-sm font-medium\",\n tab === \"trades\" ? \"text-white\" : \"text-white/60\"\n )}\n >\n Trades\n {tab === \"trades\" ? <span className=\"absolute -bottom-px left-0 h-[2px] w-full bg-[#C9A227]\" /> : null}\n </button>\n </div>\n\n {tab === \"trades\" ? (\n <div className=\"flex items-center gap-1 text-xs\">\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"all\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"all\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n All\n </button>\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"buy\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"buy\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n Buy\n </button>\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"sell\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"sell\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n Sell\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-3\">{rightHeader}</div>\n )}\n </div>\n\n <div className=\"px-4 pb-3 pt-2\">\n <div className=\"grid grid-cols-2 gap-3 px-3 py-2 text-xs text-white/60\">\n <div>{priceLabel}</div>\n <div className=\"text-right\">{amountLabel}</div>\n </div>\n\n {tab === \"trades\" ? (\n <div\n className=\"max-h-[380px] overflow-y-auto overflow-x-hidden\"\n style={{ scrollbarGutter: \"stable\" }}\n >\n {tradeFiltered.length === 0 ? (\n <div className=\"px-3 py-10 text-center text-sm text-white/50\">No trades</div>\n ) : (\n <div className=\"divide-y divide-white/5\">\n {tradeFiltered.map((trade, i) => (\n <div key={`${trade.type}-${trade.price}-${trade.amount}-${trade.time ?? i}`} className=\"grid grid-cols-2 items-center gap-3 px-3 py-1.5\">\n <div\n className={cn(\n \"tabular-nums\",\n trade.type === \"buy\" ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n ${formatNumber(trade.price, precision)}\n </div>\n <div className=\"text-right tabular-nums text-white/90\">{formatNumber(trade.amount, amountPrecision)}</div>\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n <>\n <div className=\"divide-y divide-white/5\">\n {asks.map((l, idx) => (\n <DepthRow\n key={`ask-${idx}-${l.price}-${l.amount}`}\n side=\"ask\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxAskDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n\n <div className=\"mt-2 grid grid-cols-2 items-center gap-3 bg-[#0b1a24] px-3 py-2\">\n <div className={cn(\"text-lg font-semibold tabular-nums\", midClass)}>\n ${formatNumber(midPrice, precision)}\n {midChangePercent == null ? null : (\n <span className=\"ml-2 text-sm font-semibold\">{midChangePercent >= 0 ? \"+\" : \"\"}{midChangePercent.toFixed(2)}%</span>\n )}\n </div>\n <div />\n </div>\n\n <div className=\"divide-y divide-white/5\">\n {bids.map((l, idx) => (\n <DepthRow\n key={`bid-${idx}-${l.price}-${l.amount}`}\n side=\"bid\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxBidDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n </>\n )}\n </div>\n </Card>\n );\n }\n);\n\nOrderbook.displayName = \"Orderbook\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type PropertyTourProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title: string;\n src: string;\n poster?: string;\n autoPlay?: boolean;\n muted?: boolean;\n loop?: boolean;\n controls?: boolean;\n playsInline?: boolean;\n};\n\ntype FullscreenDocument = Document & {\n webkitFullscreenElement?: Element | null;\n mozFullScreenElement?: Element | null;\n msFullscreenElement?: Element | null;\n};\n\nexport const PropertyTour = React.forwardRef<HTMLDivElement, PropertyTourProps>(\n (\n {\n className,\n title,\n src,\n poster,\n autoPlay = true,\n muted = true,\n loop = true,\n controls = true,\n playsInline = true,\n ...props\n },\n ref\n ) => {\n const videoRef = React.useRef<HTMLVideoElement | null>(null);\n\n React.useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleFullscreenChange = () => {\n const d = document as FullscreenDocument;\n const isFullscreen = !!(\n d.fullscreenElement ||\n d.webkitFullscreenElement ||\n d.mozFullScreenElement ||\n d.msFullscreenElement\n );\n\n if (isFullscreen) {\n video.style.objectFit = \"contain\";\n video.style.width = \"100vw\";\n video.style.height = \"100vh\";\n video.style.position = \"fixed\";\n video.style.top = \"0\";\n video.style.left = \"0\";\n video.style.transform = \"none\";\n video.style.zIndex = \"9999\";\n } else {\n video.style.objectFit = \"cover\";\n video.style.width = \"100%\";\n video.style.height = \"100%\";\n video.style.position = \"absolute\";\n video.style.top = \"0\";\n video.style.left = \"0\";\n video.style.transform = \"none\";\n video.style.zIndex = \"auto\";\n }\n };\n\n video.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n return () => {\n video.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n };\n }, []);\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[820px] rounded-[12px] border border-white/10 bg-black/30 text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"px-6 pb-0 pt-6\">\n <CardTitle className=\"m-0 text-lg font-semibold text-white\">{title}</CardTitle>\n </CardHeader>\n\n <div className=\"px-6 pb-6 pt-5\">\n <div className=\"relative aspect-video w-full overflow-hidden rounded-lg bg-black\">\n <video\n ref={videoRef}\n className=\"absolute inset-0 h-full w-full object-cover object-center\"\n controls={controls}\n loop={loop}\n autoPlay={autoPlay}\n muted={muted}\n playsInline={playsInline}\n poster={poster}\n >\n <source src={src} />\n Your browser does not support the video tag.\n </video>\n </div>\n </div>\n </Card>\n );\n }\n);\n\nPropertyTour.displayName = \"PropertyTour\";\n","import * as React from \"react\";\n\nimport {\n ArrowUpRight,\n Building2,\n CalendarDays,\n LineChart,\n Newspaper,\n Sparkles,\n type LucideIcon,\n} from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertyNewsType = \"property\" | \"market\" | \"portfolio\" | (string & {});\n\nexport type PropertyNewsItem = {\n id?: string;\n title: string;\n date: string | Date;\n type?: PropertyNewsType;\n description?: string;\n actionLabel?: string;\n href?: string;\n onAction?: (item: PropertyNewsItem) => void;\n};\n\nexport interface PropertyNewsUpdatesProps extends React.HTMLAttributes<HTMLDivElement> {\n items: PropertyNewsItem[];\n heading?: string;\n subheading?: string;\n emptyState?: React.ReactNode;\n}\n\ntype TypeMeta = {\n label: string;\n accent: string;\n pillBg: string;\n pillBorder: string;\n pillColor: string;\n icon: LucideIcon;\n};\n\nconst TYPE_META: Record<\"property\" | \"market\" | \"portfolio\", TypeMeta> = {\n property: {\n label: \"Property Update\",\n accent: \"#f8d12f\",\n pillBg: \"rgba(248, 209, 47, 0.12)\",\n pillBorder: \"rgba(248, 209, 47, 0.45)\",\n pillColor: \"#f8d12f\",\n icon: Building2,\n },\n market: {\n label: \"Market Insight\",\n accent: \"#0ecb81\",\n pillBg: \"rgba(14, 203, 129, 0.12)\",\n pillBorder: \"rgba(14, 203, 129, 0.45)\",\n pillColor: \"#0ecb81\",\n icon: LineChart,\n },\n portfolio: {\n label: \"Portfolio Signal\",\n accent: \"#6c8cff\",\n pillBg: \"rgba(108, 140, 255, 0.12)\",\n pillBorder: \"rgba(108, 140, 255, 0.45)\",\n pillColor: \"#c9d5ff\",\n icon: Sparkles,\n },\n};\n\nconst getTypeMeta = (type?: PropertyNewsType): TypeMeta => {\n if (!type) return TYPE_META.property;\n const key = type as keyof typeof TYPE_META;\n if (key in TYPE_META) return TYPE_META[key];\n return {\n label: type.toString(),\n accent: \"#f5f5f5\",\n pillBg: \"rgba(255,255,255,0.08)\",\n pillBorder: \"rgba(255,255,255,0.25)\",\n pillColor: \"#ffffff\",\n icon: Newspaper,\n };\n};\n\nconst formatDate = (value: string | Date) => {\n const date = typeof value === \"string\" ? new Date(value) : value;\n if (Number.isNaN(date.getTime())) return typeof value === \"string\" ? value : \"\";\n return date.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n};\n\nexport const PropertyNewsUpdates = React.forwardRef<HTMLDivElement, PropertyNewsUpdatesProps>(\n ({ className, heading = \"Latest property intelligence\", subheading, items, emptyState, ...props }, ref) => {\n const hasItems = Array.isArray(items) && items.length > 0;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full max-w-[480px] rounded-[20px] border border-white/10 bg-gradient-to-br from-[#06090f] via-[#0f1621] to-[#111b2a] p-6 text-white shadow-[0_30px_80px_rgba(3,7,18,0.65)] backdrop-blur-xl\",\n className\n )}\n {...props}\n >\n <div className=\"space-y-1\">\n <p className=\"text-[0.85rem] uppercase tracking-[0.25em] text-white/50\">{heading}</p>\n {subheading ? <p className=\"text-sm text-white/60\">{subheading}</p> : null}\n </div>\n\n <div className=\"mt-5 flex flex-col gap-4\">\n {hasItems\n ? items.map((item, index) => {\n const meta = getTypeMeta(item.type);\n const Icon = meta.icon;\n const key = item.id ?? `${item.title}-${index}`;\n\n const content = (\n <div\n className=\"relative flex w-full gap-4 rounded-2xl border border-white/5 bg-white/[0.04] p-4 transition hover:border-white/15 hover:bg-white/[0.06]\"\n key={key}\n >\n <div className=\"flex flex-col items-center\">\n <div\n className=\"flex h-12 w-12 items-center justify-center rounded-full border text-white\"\n style={{\n background: meta.pillBg,\n borderColor: meta.pillBorder,\n color: meta.pillColor,\n }}\n >\n <Icon className=\"h-5 w-5\" />\n </div>\n {index !== items.length - 1 ? (\n <div className=\"mt-2 h-full w-px flex-1 bg-white/10\" />\n ) : null}\n </div>\n\n <div className=\"flex flex-1 flex-col\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <span className=\"text-[0.7rem] font-semibold uppercase tracking-[0.3em]\" style={{ color: meta.accent }}>\n {meta.label}\n </span>\n <span className=\"flex items-center text-xs text-white/60\">\n <CalendarDays className=\"mr-1 h-3.5 w-3.5\" />\n {formatDate(item.date)}\n </span>\n </div>\n\n <p className=\"mt-2 text-base font-semibold leading-snug\">{item.title}</p>\n {item.description ? (\n <p className=\"mt-1 text-sm text-white/65\">{item.description}</p>\n ) : null}\n\n {(item.href || item.onAction) && item.actionLabel ? (\n <button\n type=\"button\"\n className=\"group mt-3 inline-flex items-center gap-1 text-sm font-semibold text-white transition hover:text-white/80\"\n onClick={() => {\n if (item.href) {\n window?.open?.(item.href, \"_blank\", \"noopener,noreferrer\");\n }\n item.onAction?.(item);\n }}\n >\n {item.actionLabel}\n <ArrowUpRight className=\"h-4 w-4 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5\" />\n </button>\n ) : null}\n </div>\n </div>\n );\n\n return content;\n })\n : emptyState ?? (\n <div className=\"flex flex-col items-center justify-center rounded-2xl border border-dashed border-white/20 px-6 py-10 text-center text-sm text-white/60\">\n <Newspaper className=\"mb-3 h-8 w-8 text-white/40\" />\n No property news yet. Updates will land here as soon as we receive new intelligence.\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nPropertyNewsUpdates.displayName = \"PropertyNewsUpdates\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type YourOrderSide = \"buy\" | \"sell\";\n\nexport type YourOrder = {\n id: string;\n asset: string;\n side: YourOrderSide;\n date: string;\n price: number;\n amount: number;\n total: number;\n filledPercent: number;\n status?: string;\n};\n\nexport type YourOrdersProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title?: string;\n orders: YourOrder[];\n onEditPrice?: (order: YourOrder) => void;\n onEditAmount?: (order: YourOrder) => void;\n onCancel?: (order: YourOrder) => void;\n};\n\nconst clampPct = (pct: number) => Math.min(100, Math.max(0, pct));\n\nconst EditIcon = ({ className }: { className?: string }) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M12 20H21\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nexport const YourOrders = React.forwardRef<HTMLDivElement, YourOrdersProps>(\n ({\n className,\n title = \"Your Orders\",\n orders,\n onEditPrice,\n onEditAmount,\n onCancel,\n ...props\n }, ref) => {\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full min-h-[301.52px] rounded-[12px] border border-white/10 bg-black/30 text-white backdrop-blur-md max-[1024px]:min-h-[250px] max-[480px]:min-h-[200px]\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"px-6 pb-2 pt-6\">\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">{title}</CardTitle>\n </CardHeader>\n\n <div className=\"px-6 pb-6 pt-2\">\n <div className=\"grid grid-cols-[1.2fr_0.8fr_1fr_1fr_1fr_1fr_1.2fr_0.8fr] border-b border-white/10 pb-2 text-[0.85rem] font-medium text-white/60\">\n <div className=\"px-2\">Asset</div>\n <div className=\"px-2\">Type</div>\n <div className=\"px-2\">Date</div>\n <div className=\"px-2\">Price</div>\n <div className=\"px-2\">Amount</div>\n <div className=\"px-2\">Total</div>\n <div className=\"px-2\">Filled</div>\n <div className=\"px-2 text-center\">Actions</div>\n </div>\n\n {orders.length === 0 ? (\n <div className=\"py-10 text-center text-sm text-white/50\">No orders</div>\n ) : (\n <div>\n {orders.map((order) => {\n const sideClass = order.side === \"buy\" ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n const filled = clampPct(order.filledPercent ?? 0);\n const isCancelled = order.status?.toUpperCase() === \"CANCELLED\";\n\n const canEditPrice = Boolean(onEditPrice);\n const canEditAmount = Boolean(onEditAmount);\n const canCancel = Boolean(onCancel);\n\n return (\n <div\n key={order.id}\n className=\"grid grid-cols-[1.5fr_0.8fr_0.8fr_1fr_0.8fr_1fr_1fr_0.8fr] items-center border-b border-white/5 py-2 text-[0.9rem] transition-colors hover:bg-white/[0.03]\"\n >\n <div className=\"truncate px-2 font-medium\">{order.asset}</div>\n <div className={cn(\"px-2 font-medium uppercase\", sideClass)}>{order.side}</div>\n <div className=\"px-2 font-medium\">{order.date}</div>\n\n <div className=\"px-2 font-medium\">\n <span className=\"tabular-nums\">${order.price.toLocaleString()}</span>\n <button\n type=\"button\"\n onClick={canEditPrice ? () => onEditPrice?.(order) : undefined}\n className={cn(\n \"ml-1 inline-flex items-center justify-center text-white/60 transition-colors\",\n canEditPrice ? \"cursor-pointer hover:text-[#C9A227] active:translate-y-px\" : \"cursor-default\"\n )}\n aria-label=\"Edit price\"\n >\n <EditIcon className=\"h-[14px] w-[14px]\" />\n </button>\n </div>\n\n <div className=\"px-2 font-medium\">\n <span className=\"tabular-nums\">{order.amount.toLocaleString()}</span>\n <button\n type=\"button\"\n onClick={canEditAmount ? () => onEditAmount?.(order) : undefined}\n className={cn(\n \"ml-1 inline-flex items-center justify-center text-white/60 transition-colors\",\n canEditAmount ? \"cursor-pointer hover:text-[#C9A227] active:translate-y-px\" : \"cursor-default\"\n )}\n aria-label=\"Edit amount\"\n >\n <EditIcon className=\"h-[14px] w-[14px]\" />\n </button>\n </div>\n\n <div className=\"px-2 font-medium tabular-nums\">${order.total.toLocaleString()}</div>\n\n <div className=\"px-2\">\n <div className=\"text-[0.875rem] font-medium tabular-nums\">{filled.toFixed(0)}%</div>\n <div className=\"mt-1 h-1 w-4/5 overflow-hidden rounded-sm bg-white/10\">\n <div className=\"h-full rounded-sm bg-[#C9A227]\" style={{ width: `${filled}%` }} />\n </div>\n </div>\n\n <div className=\"px-2 text-center\">\n {isCancelled ? (\n <span className=\"inline-flex items-center justify-center rounded border border-white/20 px-3 py-1 text-[0.78rem] uppercase tracking-wide text-[#f6465d]\">\n Cancelled\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={canCancel ? () => onCancel?.(order) : undefined}\n className={cn(\n \"rounded border border-white/40 px-3 py-1 text-[0.8rem] text-white/70 transition-colors\",\n canCancel ? \"cursor-pointer hover:bg-white/10 active:text-[#f6465d] active:border-[#f6465d] active:translate-y-px\" : \"cursor-default\"\n )}\n >\n Cancel\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </Card>\n );\n }\n);\n\nYourOrders.displayName = \"YourOrders\";\n","import * as React from \"react\";\nimport {\n createChart,\n type IChartApi,\n type IPriceLine,\n type ISeriesApi,\n type Time,\n} from \"lightweight-charts\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type PriceChartRange = \"1D\" | \"1W\" | \"1M\" | \"3M\" | \"1Y\";\n\nexport type PriceChartCandle = {\n time: Time;\n open: number;\n high: number;\n low: number;\n close: number;\n};\n\nexport type PriceChartProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title?: string;\n ranges?: PriceChartRange[];\n selectedRange?: PriceChartRange;\n onRangeChange?: (range: PriceChartRange) => void;\n data: PriceChartCandle[];\n price?: number;\n changePercent?: number;\n currencySymbol?: string;\n height?: number;\n};\n\nconst defaultRanges: PriceChartRange[] = [\"1D\", \"1W\", \"1M\", \"3M\", \"1Y\"];\n\nconst formatPrice = (value: number, currencySymbol: string) => {\n return `${currencySymbol}${value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n};\n\nexport const PriceChart = React.forwardRef<HTMLDivElement, PriceChartProps>(\n (\n {\n className,\n title = \"Price Chart\",\n ranges = defaultRanges,\n selectedRange,\n onRangeChange,\n data,\n price,\n changePercent,\n currencySymbol = \"$\",\n height = 301.52,\n ...props\n },\n ref\n ) => {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const chartRef = React.useRef<IChartApi | null>(null);\n const seriesRef = React.useRef<ISeriesApi<\"Candlestick\"> | null>(null);\n const priceLineRef = React.useRef<IPriceLine | null>(null);\n const [hoveredRange, setHoveredRange] = React.useState<PriceChartRange | null>(null);\n\n const resolvedPrice = React.useMemo(() => {\n if (price != null) return price;\n const last = data.at(-1);\n return last?.close;\n }, [data, price]);\n\n const inferredChangePercent = React.useMemo(() => {\n if (changePercent != null) return changePercent;\n const first = data[0]?.open;\n const last = data.at(-1)?.close;\n if (first == null || last == null || first === 0) return undefined;\n return ((last - first) / first) * 100;\n }, [changePercent, data]);\n\n React.useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const chart = createChart(el, {\n autoSize: true,\n layout: {\n background: { color: \"transparent\" },\n textColor: \"rgba(255,255,255,0.55)\",\n fontFamily: \"inherit\",\n },\n grid: {\n vertLines: { color: \"rgba(255,255,255,0.06)\" },\n horzLines: { color: \"rgba(255,255,255,0.06)\" },\n },\n rightPriceScale: {\n borderColor: \"rgba(230, 200, 126, 0.25)\",\n textColor: \"rgba(230, 200, 126, 0.7)\",\n },\n timeScale: {\n borderColor: \"rgba(255,255,255,0.06)\",\n timeVisible: true,\n secondsVisible: false,\n },\n crosshair: {\n vertLine: { color: \"rgba(255,255,255,0.12)\" },\n horzLine: { color: \"rgba(255,255,255,0.12)\" },\n },\n });\n\n const series = chart.addCandlestickSeries({\n upColor: \"#0ecb81\",\n downColor: \"#f6465d\",\n borderVisible: false,\n wickUpColor: \"#0ecb81\",\n wickDownColor: \"#f6465d\",\n });\n\n chartRef.current = chart;\n seriesRef.current = series;\n\n return () => {\n chartRef.current = null;\n seriesRef.current = null;\n chart.remove();\n };\n }, []);\n\n React.useEffect(() => {\n const chart = chartRef.current;\n const series = seriesRef.current;\n if (!chart || !series) return;\n\n series.setData(data);\n\n if (priceLineRef.current) {\n series.removePriceLine(priceLineRef.current);\n priceLineRef.current = null;\n }\n\n if (resolvedPrice != null) {\n const priceLineColor = \"rgba(230, 200, 126, 0.9)\";\n\n priceLineRef.current = series.createPriceLine({\n price: resolvedPrice,\n color: priceLineColor,\n lineWidth: 1,\n lineStyle: 2,\n axisLabelVisible: true,\n title: resolvedPrice.toFixed(2),\n });\n }\n\n chart.timeScale().fitContent();\n }, [data, resolvedPrice]);\n\n const sign = inferredChangePercent == null ? null : inferredChangePercent >= 0 ? \"+\" : \"\";\n const changeClass =\n inferredChangePercent == null ? \"\" : inferredChangePercent >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n const badgeClass =\n inferredChangePercent == null\n ? \"\"\n : inferredChangePercent >= 0\n ? \"bg-[#0ecb81]/15 text-[#0ecb81]\"\n : \"bg-[#f6465d]/15 text-[#f6465d]\";\n\n const btnBaseStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-card-dark, rgba(255, 255, 255, 0.05))\",\n borderColor: \"var(--color-border, rgba(255, 255, 255, 0.12))\",\n color: \"var(--color-text-secondary, rgba(255, 255, 255, 0.7))\",\n };\n\n const btnHoverStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-accent-dark, rgba(230, 200, 126, 0.15))\",\n color: \"var(--color-text, #ffffff)\",\n };\n\n const btnActiveStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-accent, #e6c87e)\",\n borderColor: \"var(--color-accent, #e6c87e)\",\n color: \"#000000\",\n };\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full min-h-[450px] rounded-lg border border-white/10 bg-black/30 text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"flex flex-row items-start justify-between gap-4 px-6 pb-2 pt-6\">\n <div>\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">{title}</CardTitle>\n <div className=\"mt-3 flex items-center gap-2\">\n {ranges.map((r) => {\n const active = r === selectedRange;\n const hovered = hoveredRange === r;\n const style: React.CSSProperties = {\n ...btnBaseStyle,\n ...(hovered ? btnHoverStyle : null),\n ...(active ? btnActiveStyle : null),\n };\n return (\n <button\n key={r}\n type=\"button\"\n onClick={() => onRangeChange?.(r)}\n onMouseEnter={() => setHoveredRange(r)}\n onMouseLeave={() => setHoveredRange((prev) => (prev === r ? null : prev))}\n style={style}\n className={cn(\n \"rounded border px-3 py-1 text-[0.85rem] font-medium transition-all duration-200\"\n )}\n >\n {r}\n </button>\n );\n })}\n </div>\n </div>\n\n <div className=\"flex items-center gap-3\">\n {resolvedPrice == null ? null : (\n <div className={cn(\"text-xl font-semibold tabular-nums\", changeClass)}>\n {formatPrice(resolvedPrice, currencySymbol)}\n </div>\n )}\n {inferredChangePercent == null ? null : (\n <div className={cn(\"rounded-md px-2 py-1 text-xs font-semibold tabular-nums\", badgeClass)}>\n {sign}\n {inferredChangePercent?.toFixed(2)}%\n </div>\n )}\n </div>\n </CardHeader>\n\n <div className=\"px-6 pb-6 pt-2\">\n <div\n ref={containerRef}\n className=\"w-full overflow-hidden rounded-lg\"\n style={{ height }}\n />\n </div>\n </Card>\n );\n }\n);\n\nPriceChart.displayName = \"PriceChart\";\n","import * as React from \"react\";\n\nimport { BedDouble, Bath, CarFront } from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertyHeroHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n imageUrl: string;\n imageAlt?: string;\n name: string;\n location: string;\n price?: number;\n currencySymbol?: string;\n changePercent?: number;\n beds?: number;\n baths?: number;\n cars?: number;\n propertyTypeLabel?: string;\n onTrade?: () => void;\n onMakeOffer?: () => void;\n};\n\nconst formatPrice = (value: number, currencySymbol: string) => {\n return `${currencySymbol}${value.toLocaleString(undefined, {\n minimumFractionDigits: 3,\n maximumFractionDigits: 3,\n })}`;\n};\n\nexport const PropertyHeroHeader = React.forwardRef<HTMLDivElement, PropertyHeroHeaderProps>(\n (\n {\n className,\n imageUrl,\n imageAlt,\n name,\n location,\n price,\n currencySymbol = \"$\",\n changePercent,\n beds,\n baths,\n cars,\n propertyTypeLabel,\n onTrade,\n onMakeOffer,\n ...props\n },\n ref\n ) => {\n const isPositive = changePercent == null ? undefined : changePercent >= 0;\n\n const tradeHoverColor = \"var(--color-accent-hover, #f8d12f)\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative w-full overflow-hidden bg-black h-[500px] rounded-[12px] max-[768px]:h-[400px] max-[768px]:rounded-lg max-[480px]:h-[350px] max-[480px]:rounded-md\",\n className\n )}\n {...props}\n >\n <img\n src={imageUrl}\n alt={imageAlt ?? name}\n className=\"h-full w-full object-cover object-center block max-w-none min-w-[120%] min-h-[120%]\"\n style={{ transform: \"scale(1.0)\", transformOrigin: \"center\" }}\n />\n\n <div className=\"absolute bottom-0 left-0 right-0 flex w-full items-end justify-between p-8 max-[768px]:flex-col max-[768px]:items-start max-[768px]:gap-4 max-[768px]:p-6 max-[480px]:p-4\">\n <div className=\"inline-block w-auto max-w-[70%] rounded-lg bg-black/15 px-4 py-3 text-white shadow-[0px_1px_1px_rgba(0,0,0,0.3)] backdrop-blur-[3px] max-[768px]:w-full max-[768px]:max-w-full max-[768px]:px-3 max-[768px]:py-3 max-[480px]:px-3 max-[480px]:py-2\">\n <h1 className=\"mb-2 text-[2.5rem] leading-tight text-white [text-shadow:0_2px_4px_rgba(0,0,0,0.3)] max-[768px]:mb-[0.4rem] max-[768px]:text-[2rem] max-[480px]:mb-[0.3rem] max-[480px]:text-[1.75rem]\">\n {name}\n </h1>\n\n <div className=\"mb-3 flex flex-wrap items-center text-[1.25rem] text-white/90 max-[768px]:mb-[0.6rem] max-[768px]:text-[1.1rem] max-[480px]:mb-[0.5rem] max-[480px]:text-[1rem]\">\n <span>{location}</span>\n {price == null ? null : (\n <span\n className=\"ml-4 flex items-center border-l border-white/30 pl-4 font-semibold\"\n style={{ color: \"var(--color-accent, #e6c87e)\" }}\n >\n {formatPrice(price, currencySymbol)}\n {changePercent == null ? null : (\n <span\n className={cn(\n \"ml-2 flex items-center text-[0.875rem] font-medium\",\n isPositive ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"mr-[0.15rem]\"\n >\n <path d={isPositive ? \"M7 14l5-5 5 5H7z\" : \"M7 10l5 5 5-5H7z\"} />\n </svg>\n {Math.abs(changePercent).toFixed(2)}%\n </span>\n )}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-6 text-[0.95rem] text-white/90 max-[768px]:hidden\">\n {beds == null ? null : (\n <div className=\"flex items-center\">\n <BedDouble className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{beds} Beds</span>\n </div>\n )}\n {baths == null ? null : (\n <div className=\"flex items-center\">\n <Bath className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{baths} Baths</span>\n </div>\n )}\n {cars == null ? null : (\n <div className=\"flex items-center\">\n <CarFront className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{cars} Cars</span>\n </div>\n )}\n {propertyTypeLabel == null ? null : <div>{propertyTypeLabel}</div>}\n </div>\n </div>\n\n <div className=\"flex flex-col gap-3 max-[768px]:w-full max-[768px]:flex-row max-[768px]:justify-between max-[768px]:gap-2 max-[480px]:gap-2\">\n <button\n type=\"button\"\n onClick={onTrade}\n className=\"rounded border border-transparent px-6 py-3 font-semibold transition-all hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] max-[768px]:flex-1 max-[768px]:px-5 max-[768px]:py-2.5 max-[768px]:text-[0.95rem] max-[480px]:px-4 max-[480px]:py-2 max-[480px]:text-[0.9rem]\"\n style={{ backgroundColor: \"var(--color-accent, #e6c87e)\", color: \"black\" }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = tradeHoverColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = \"var(--color-accent, #e6c87e)\";\n }}\n >\n Trade\n </button>\n\n <button\n type=\"button\"\n onClick={onMakeOffer}\n className=\"rounded border px-6 py-3 font-semibold transition-all hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] max-[768px]:flex-1 max-[768px]:px-5 max-[768px]:py-2.5 max-[768px]:text-[0.95rem] max-[480px]:px-4 max-[480px]:py-2 max-[480px]:text-[0.9rem]\"\n style={{\n backgroundColor: \"transparent\",\n borderColor: \"var(--color-accent, #e6c87e)\",\n color: \"var(--color-accent, #e6c87e)\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = \"rgba(240, 185, 11, 0.1)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n >\n Make Offer\n </button>\n </div>\n </div>\n </div>\n );\n }\n);\n\nPropertyHeroHeader.displayName = \"PropertyHeroHeader\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertySubheaderTab = {\n id: string;\n label: string;\n hasNotification?: boolean;\n notificationColor?: string;\n};\n\nexport type PropertySubheaderAction = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick?: () => void;\n};\n\nexport type PropertySubheaderProps = React.HTMLAttributes<HTMLDivElement> & {\n tabs: PropertySubheaderTab[];\n activeTabId: string;\n onTabChange?: (tabId: string) => void;\n actions?: PropertySubheaderAction[];\n};\n\nexport const PropertySubheader = React.forwardRef<HTMLDivElement, PropertySubheaderProps>(\n ({ className, tabs, activeTabId, onTabChange, actions, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full font-normal\",\n \"flex flex-col gap-3\",\n \"md:flex-row md:items-center md:justify-between\",\n className\n )}\n {...props}\n >\n <div\n className={cn(\n \"flex items-center border-b border-white/10\",\n \"overflow-x-auto md:overflow-visible\",\n \"[-webkit-overflow-scrolling:touch]\",\n \"[scrollbar-width:none]\",\n \"[scroll-behavior:smooth]\",\n \"[touch-action:pan-x]\",\n \"md:border-b-0\"\n )}\n style={{ WebkitTapHighlightColor: \"transparent\" }}\n >\n <div className=\"flex min-w-max\">\n {tabs.map((tab) => {\n const active = tab.id === activeTabId;\n\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange?.(tab.id)}\n className={cn(\n \"relative whitespace-nowrap\",\n \"px-6 py-4\",\n \"font-normal\",\n \"transition-colors\",\n \"max-[768px]:px-[1.2rem] max-[768px]:py-[0.8rem]\",\n \"max-[480px]:px-4 max-[480px]:py-[0.7rem] max-[480px]:text-[0.9rem]\",\n active\n ? \"font-semibold text-[var(--color-accent,#e6c87e)]\"\n : \"text-white/60 hover:text-white\"\n )}\n style={{\n borderBottom: active ? \"2px solid var(--color-accent, #e6c87e)\" : \"2px solid transparent\",\n minWidth: \"80px\",\n touchAction: \"manipulation\",\n }}\n >\n {tab.label}\n\n {tab.hasNotification ? (\n <span\n className=\"absolute right-[10px] top-[10px] h-2 w-2 rounded-full animate-pulse\"\n style={{\n backgroundColor: tab.notificationColor ?? \"#f6465d\",\n boxShadow: \"0 0 0 0 rgba(246, 70, 93, 0.7)\",\n }}\n />\n ) : null}\n </button>\n );\n })}\n </div>\n </div>\n\n {actions != null && actions.length > 0 ? (\n <div\n className={cn(\n \"flex items-center gap-[10px]\",\n \"overflow-x-auto md:overflow-visible\",\n \"[scrollbar-width:none]\",\n \"md:justify-end\",\n \"max-[768px]:w-full max-[768px]:justify-center max-[768px]:pb-2 max-[768px]:mb-4\"\n )}\n >\n {actions.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n onClick={action.onClick}\n className={cn(\n \"flex shrink-0 items-center gap-[5px] whitespace-nowrap\",\n \"rounded\",\n \"border border-white/10\",\n \"bg-transparent\",\n \"px-3 py-1.5 text-[14px] font-normal\",\n \"transition-all\",\n \"max-[768px]:px-2.5 max-[768px]:py-[5px] max-[768px]:text-[13px]\",\n \"hover:bg-white/5 hover:border-[var(--color-accent,#e6c87e)] hover:text-[var(--color-accent,#e6c87e)]\"\n )}\n >\n {action.icon}\n {action.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nPropertySubheader.displayName = \"PropertySubheader\";\n"]}
1
+ {"version":3,"sources":["../src/lib/cn.ts","../src/components/button.tsx","../src/components/badge.tsx","../src/components/card.tsx","../src/components/portfolio-summary.tsx","../src/components/house-position-slider.tsx","../src/components/orderbook.tsx","../src/components/property-tour.tsx","../src/components/property-news-updates.tsx","../src/components/property-compare-bar.tsx","../src/components/your-orders.tsx","../src/components/price-chart.tsx","../src/components/property-hero-header.tsx","../src/components/property-subheader.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","React3","React4","jsxs","React5","clamp","React6","Fragment","React7","Building2","LineChart","Sparkles","Newspaper","React8","CalendarDays","ArrowUpRight","React9","React10","React11","createChart","formatPrice","React12","BedDouble","Bath","CarFront","React13"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n primary: \"bg-teal-500 text-slate-950 hover:bg-teal-400 focus-visible:ring-teal-200\",\n accent:\n \"bg-[var(--color-accent,#e6c87e)] text-black hover:bg-[var(--color-accent-hover,#f8d12f)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n accentOutline:\n \"border border-[var(--color-accent,#e6c87e)] bg-transparent text-[var(--color-accent,#e6c87e)] hover:bg-[rgba(230,200,126,0.10)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n media:\n \"border border-white/10 bg-transparent text-white/90 hover:bg-white/5 hover:border-[var(--color-accent,#e6c87e)] hover:text-[var(--color-accent,#e6c87e)] focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n outline:\n \"border border-slate-800/20 bg-white text-slate-900 hover:border-slate-800/40 focus-visible:ring-slate-200\",\n ghost:\n \"bg-transparent text-slate-900 hover:bg-slate-900/5 focus-visible:ring-slate-200\",\n danger: \"bg-rose-500 text-white hover:bg-rose-400 focus-visible:ring-rose-200\",\n },\n size: {\n sm: \"h-9 px-4 text-sm\",\n md: \"h-11 px-6 text-base\",\n lg: \"h-12 px-7 text-lg\",\n icon: \"h-10 w-10\",\n },\n radius: {\n pill: \"rounded-full\",\n md: \"rounded\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n radius: \"pill\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, radius, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n ref={ref}\n className={cn(buttonVariants({ variant, size, radius }), className)}\n {...props}\n />\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nexport const badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-3 py-1 text-xs font-semibold uppercase tracking-wide transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-slate-900 text-white focus-visible:ring-slate-300\",\n muted:\n \"border-transparent bg-slate-100 text-slate-600 focus-visible:ring-slate-200\",\n outline: \"border-slate-200 bg-white text-slate-600 focus-visible:ring-slate-200\",\n success:\n \"border-transparent bg-teal-500/15 text-teal-600 focus-visible:ring-teal-200\",\n active:\n \"border-transparent bg-[rgba(14,203,129,0.25)] text-[#0ecb81] focus-visible:ring-[rgba(14,203,129,0.35)]\",\n pending:\n \"border-transparent bg-white/10 text-white/60 focus-visible:ring-white/20\",\n rejected:\n \"border-transparent bg-[rgba(246,70,93,0.20)] text-[#f6465d] focus-visible:ring-[rgba(246,70,93,0.30)]\",\n },\n size: {\n sm: \"px-2.5 py-0.5 text-[11px]\",\n md: \"px-3 py-1 text-xs\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, size, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props} />\n )\n);\n\nBadge.displayName = \"Badge\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-3xl border border-slate-200 bg-white shadow-sm transition hover:shadow-md\",\n className\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-xl font-semibold tracking-tight text-slate-900\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-slate-500\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-6 pb-6 pt-2 text-sm text-slate-600\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center border-t border-slate-100 px-6 py-4\", className)} {...props} />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"./card\";\n\nconst defaultFormatCurrency = (value: number) =>\n new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n\nconst defaultFormatPercent = (value: number) => {\n const sign = value >= 0 ? \"+\" : \"-\";\n return `${sign}${Math.abs(value).toFixed(2)}%`;\n};\n\nconst defaultFormatSignedCurrency = (value: number) => {\n const sign = value >= 0 ? \"+\" : \"-\";\n return `${sign}${defaultFormatCurrency(Math.abs(value))}`;\n};\n\nexport interface PortfolioSummaryProps extends React.HTMLAttributes<HTMLDivElement> {\n availableCash: number;\n portfolioValue: number;\n totalReturnPercent: number;\n unrealizedPnl: number;\n onResetAccount?: () => void;\n positionsHeading?: string;\n emptyPositionsText?: string;\n formatCurrency?: (value: number) => string;\n formatPercent?: (value: number) => string;\n formatSignedCurrency?: (value: number) => string;\n children?: React.ReactNode;\n}\n\nexport const PortfolioSummary = React.forwardRef<HTMLDivElement, PortfolioSummaryProps>(\n (\n {\n availableCash,\n portfolioValue,\n totalReturnPercent,\n unrealizedPnl,\n onResetAccount,\n positionsHeading = \"Current Positions\",\n emptyPositionsText = \"No positions yet. Start trading to build your portfolio!\",\n formatCurrency = defaultFormatCurrency,\n formatPercent = defaultFormatPercent,\n formatSignedCurrency = defaultFormatSignedCurrency,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const totalReturnClassName = totalReturnPercent >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n\n const pnlClassName = unrealizedPnl >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[560px] rounded-[12px] border border-white/10 bg-black/30 p-6 text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"p-0 pb-4\">\n <div className=\"flex items-center justify-between gap-4\">\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">Portfolio Summary</CardTitle>\n {onResetAccount ? (\n <button\n type=\"button\"\n onClick={onResetAccount}\n className=\"cursor-pointer rounded-[6px] border border-white/20 bg-white/10 px-[0.7rem] py-[0.35rem] text-xs text-[#888] transition-all duration-150 hover:border-white/30 hover:bg-white/[0.15] hover:text-white\"\n >\n Reset Account\n </button>\n ) : null}\n </div>\n <div className=\"mt-3 h-px w-full bg-white/10\" />\n </CardHeader>\n\n <CardContent className=\"p-0 pt-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Available Cash</p>\n <p className=\"mt-1 text-[1.25rem] font-semibold text-white\">{formatCurrency(availableCash)}</p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Portfolio Value</p>\n <p className=\"mt-1 text-[1.25rem] font-semibold text-white\">{formatCurrency(portfolioValue)}</p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Total Return</p>\n <p className={cn(\"mt-1 text-[1.25rem] font-semibold\", totalReturnClassName)}>\n {formatPercent(totalReturnPercent)}\n </p>\n </div>\n <div>\n <p className=\"text-xs uppercase tracking-[0.5px] text-white/50\">Unrealized P&L</p>\n <p className={cn(\"mt-1 text-[1.25rem] font-semibold\", pnlClassName)}>\n {formatSignedCurrency(unrealizedPnl)}\n </p>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <p className=\"m-0 text-[0.9rem] font-medium text-white/70\">{positionsHeading}</p>\n <div className=\"mt-3\">\n {children ? (\n children\n ) : (\n <p className=\"py-4 text-center text-[0.85rem] text-white/40\">{emptyPositionsText}</p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n }\n);\n\nPortfolioSummary.displayName = \"PortfolioSummary\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { type OrderbookLevel } from \"./orderbook\";\n\nexport type HousePositionPendingOrder = {\n type: \"buy\" | \"sell\";\n tokens: number;\n value: number;\n price: number;\n};\n\nexport type HousePositionSliderOrderPayload = {\n side: \"buy\" | \"sell\";\n orderType: \"market\" | \"limit\";\n tokenId: string;\n tokenSymbol: string;\n price: number;\n deltaTokens: number;\n deltaValue: number;\n targetOwnership: number;\n targetTokens: number;\n targetValue: number;\n};\n\nexport type HousePositionOrderbook = {\n bids?: OrderbookLevel[];\n asks?: OrderbookLevel[];\n};\n\nexport interface HousePositionSliderProps extends React.HTMLAttributes<HTMLDivElement> {\n tokenId: string;\n tokenSymbol: string;\n totalTokens: number;\n currentPrice: number;\n availableCash: number;\n tokensHeld: number;\n pendingOrders?: HousePositionPendingOrder[];\n defaultOrderType?: \"market\" | \"limit\";\n orderbook?: HousePositionOrderbook;\n onConfirmOrder?: (payload: HousePositionSliderOrderPayload) => void;\n}\n\nconst clamp = (v: number, min: number, max: number) => Math.min(max, Math.max(min, v));\nconst fmt0 = (v: number) => Math.abs(v).toLocaleString(undefined, { maximumFractionDigits: 0 });\n\ntype MarketFillResult = {\n tokens: number;\n value: number;\n avgPrice: number | null;\n};\n\nconst normalizeLevels = (levels: OrderbookLevel[] = []) =>\n levels.filter((level) => Number.isFinite(level.price) && level.price > 0 && Number.isFinite(level.amount) && level.amount > 0);\n\nconst estimateMarketBuyFromUsd = (levels: OrderbookLevel[] = [], usdAmount: number): MarketFillResult => {\n if (!Number.isFinite(usdAmount) || usdAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const asks = normalizeLevels(levels).sort((a, b) => a.price - b.price);\n let remainingUsd = usdAmount;\n let tokensFilled = 0;\n let spent = 0;\n\n for (const level of asks) {\n if (remainingUsd <= 0) break;\n const levelValueCapacity = level.amount * level.price;\n const usdToSpend = Math.min(remainingUsd, levelValueCapacity);\n const tokensFromLevel = usdToSpend / level.price;\n tokensFilled += tokensFromLevel;\n spent += usdToSpend;\n remainingUsd -= usdToSpend;\n }\n\n return {\n tokens: tokensFilled,\n value: spent,\n avgPrice: tokensFilled > 0 ? spent / tokensFilled : null,\n };\n};\n\nconst estimateMarketBuyFromTokens = (levels: OrderbookLevel[] = [], tokenAmount: number): MarketFillResult => {\n if (!Number.isFinite(tokenAmount) || tokenAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const asks = normalizeLevels(levels).sort((a, b) => a.price - b.price);\n let remainingTokens = tokenAmount;\n let tokensFilled = 0;\n let spent = 0;\n\n for (const level of asks) {\n if (remainingTokens <= 0) break;\n const tokensFromLevel = Math.min(remainingTokens, level.amount);\n spent += tokensFromLevel * level.price;\n tokensFilled += tokensFromLevel;\n remainingTokens -= tokensFromLevel;\n }\n\n return {\n tokens: tokensFilled,\n value: spent,\n avgPrice: tokensFilled > 0 ? spent / tokensFilled : null,\n };\n};\n\nconst estimateMarketSellFromTokens = (levels: OrderbookLevel[] = [], tokenAmount: number): MarketFillResult => {\n if (!Number.isFinite(tokenAmount) || tokenAmount <= 0) return { tokens: 0, value: 0, avgPrice: null };\n const bids = normalizeLevels(levels).sort((a, b) => b.price - a.price);\n let remainingTokens = tokenAmount;\n let tokensFilled = 0;\n let received = 0;\n\n for (const level of bids) {\n if (remainingTokens <= 0) break;\n const tokensFromLevel = Math.min(remainingTokens, level.amount);\n received += tokensFromLevel * level.price;\n tokensFilled += tokensFromLevel;\n remainingTokens -= tokensFromLevel;\n }\n\n return {\n tokens: tokensFilled,\n value: received,\n avgPrice: tokensFilled > 0 ? received / tokensFilled : null,\n };\n};\n\nexport function HousePositionSlider({\n tokenId,\n tokenSymbol,\n totalTokens,\n currentPrice,\n availableCash,\n tokensHeld,\n pendingOrders = [],\n defaultOrderType = \"market\",\n orderbook,\n onConfirmOrder,\n className,\n ...props\n}: HousePositionSliderProps) {\n const [orderMode, setOrderMode] = React.useState<\"none\" | \"buy\" | \"sell\">(\"none\");\n const [buyTrackingMode, setBuyTrackingMode] = React.useState<\"dollars\" | \"tokens\">(\"dollars\");\n const [deltaDollars, setDeltaDollars] = React.useState(0);\n const [deltaTokensBuy, setDeltaTokensBuy] = React.useState(0);\n const [deltaTokensSell, setDeltaTokensSell] = React.useState(0);\n const [isDragging, setIsDragging] = React.useState(false);\n\n const [orderType, setOrderType] = React.useState<\"market\" | \"limit\">(defaultOrderType);\n const [limitPrice, setLimitPrice] = React.useState(currentPrice);\n const [limitPriceInput, setLimitPriceInput] = React.useState(currentPrice.toFixed(2));\n const [limitPriceDirty, setLimitPriceDirty] = React.useState(false);\n\n const [ownershipInput, setOwnershipInput] = React.useState(\"\");\n const [tokenAmountInput, setTokenAmountInput] = React.useState(\"\");\n\n const houseRef = React.useRef<HTMLDivElement | null>(null);\n\n const asks = orderbook?.asks ?? [];\n const bids = orderbook?.bids ?? [];\n\n React.useEffect(() => {\n if (orderType !== \"limit\") return;\n if (limitPriceDirty) return;\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n }, [currentPrice, limitPriceDirty, orderType]);\n\n const effectivePrice = orderType === \"limit\" ? limitPrice : currentPrice;\n const pendingBuyValue = pendingOrders.filter((o) => o.type === \"buy\").reduce((s, o) => s + o.value, 0);\n const pendingSellTokens = pendingOrders.filter((o) => o.type === \"sell\").reduce((s, o) => s + Math.abs(o.tokens), 0);\n\n const effectiveAvailableCash = Math.max(0, availableCash - pendingBuyValue);\n const effectiveTokensHeld = Math.max(0, tokensHeld - pendingSellTokens);\n\n const holdingsValue = tokensHeld * effectivePrice;\n const sliderHoldingsValue = effectiveTokensHeld * effectivePrice;\n const sliderTotalCapacity = sliderHoldingsValue + effectiveAvailableCash;\n\n const baselinePct = sliderTotalCapacity <= 0 ? 0 : (sliderHoldingsValue / sliderTotalCapacity) * 100;\n\n let deltaTokens = 0;\n let deltaValue = 0;\n let marketAvgPrice: number | null = null;\n let targetTokens = tokensHeld;\n let targetValue = holdingsValue;\n\n const limitPriceSafe = limitPrice > 0 ? limitPrice : currentPrice || 1;\n\n if (orderMode === \"buy\") {\n if (orderType === \"market\") {\n if (buyTrackingMode === \"tokens\") {\n const desiredTokens = Math.max(0, deltaTokensBuy);\n const result = estimateMarketBuyFromTokens(asks, desiredTokens);\n deltaTokens = result.tokens;\n deltaValue = result.value;\n marketAvgPrice = result.avgPrice;\n } else {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n const result = estimateMarketBuyFromUsd(asks, notional);\n deltaTokens = result.tokens;\n deltaValue = result.value;\n marketAvgPrice = result.avgPrice;\n }\n } else {\n if (buyTrackingMode === \"tokens\") {\n deltaTokens = deltaTokensBuy;\n deltaValue = deltaTokensBuy * limitPriceSafe;\n } else {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n deltaValue = notional;\n deltaTokens = notional / limitPriceSafe;\n }\n }\n } else if (orderMode === \"sell\") {\n if (orderType === \"market\") {\n const tokensToSell = Math.abs(deltaTokensSell);\n const result = estimateMarketSellFromTokens(bids, tokensToSell);\n deltaTokens = -result.tokens;\n deltaValue = -result.value;\n marketAvgPrice = result.avgPrice;\n } else {\n deltaTokens = deltaTokensSell;\n deltaValue = deltaTokensSell * limitPriceSafe;\n }\n }\n\n targetTokens = tokensHeld + deltaTokens;\n targetValue = targetTokens * effectivePrice;\n\n const plannedDeltaValue = (() => {\n if (orderMode === \"buy\") {\n if (buyTrackingMode === \"dollars\") {\n const notional = Math.min(Math.max(0, deltaDollars), effectiveAvailableCash);\n return notional;\n }\n const tokensPlanned = Math.max(0, deltaTokensBuy);\n const referencePrice = orderType === \"market\" ? currentPrice || limitPriceSafe : limitPriceSafe;\n return Math.min(tokensPlanned * referencePrice, effectiveAvailableCash);\n }\n if (orderMode === \"sell\") {\n const tokensToSell = Math.abs(Math.min(0, deltaTokensSell));\n const sellValue = tokensToSell * effectivePrice;\n return -Math.min(sellValue, sliderHoldingsValue);\n }\n return 0;\n })();\n\n const sliderTargetValue = clamp(sliderHoldingsValue + plannedDeltaValue, 0, sliderTotalCapacity);\n const targetPct = sliderTotalCapacity <= 0 ? 0 : (sliderTargetValue / sliderTotalCapacity) * 100;\n\n const isIncrease = orderMode === \"buy\";\n const hasChange = orderMode !== \"none\" && (Math.abs(deltaTokens) > 0.001 || Math.abs(deltaValue) > 0.01);\n\n const currentOwnership = totalTokens <= 0 ? 0 : (tokensHeld / totalTokens) * 100;\n const targetOwnership = totalTokens <= 0 ? 0 : (targetTokens / totalTokens) * 100;\n\n const estFeeTokens = (Math.abs(deltaValue) * 0.005) / (effectivePrice || 1);\n\n const resetOrder = React.useCallback(() => {\n setOrderMode(\"none\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n }, []);\n\n const updateOrderFromTargetValue = React.useCallback(\n (newTargetValue: number) => {\n const newDeltaValue = newTargetValue - holdingsValue;\n\n if (newDeltaValue > 0) {\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(Math.min(newDeltaValue, effectiveAvailableCash));\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n return;\n }\n\n if (newDeltaValue < 0) {\n const newDeltaTokens = newTargetValue / (effectivePrice || 1) - tokensHeld;\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(Math.max(newDeltaTokens, -effectiveTokensHeld));\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n\n resetOrder();\n },\n [effectiveAvailableCash, effectivePrice, effectiveTokensHeld, holdingsValue, resetOrder, tokensHeld]\n );\n\n const updateOrderFromOwnership = React.useCallback(\n (newOwnershipPercent: number) => {\n const nextOwnership = clamp(newOwnershipPercent, 0, 100);\n const newTargetTokens = (nextOwnership / 100) * totalTokens;\n updateOrderFromTargetValue(newTargetTokens * effectivePrice);\n },\n [effectivePrice, totalTokens, updateOrderFromTargetValue]\n );\n\n const updateOrderFromTokenAmount = React.useCallback(\n (tokenAmountSigned: number) => {\n if (tokenAmountSigned > 0) {\n const maxTokens = effectiveAvailableCash / (effectivePrice || 1);\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"tokens\");\n setDeltaTokensBuy(Math.min(tokenAmountSigned, maxTokens));\n setDeltaDollars(0);\n setDeltaTokensSell(0);\n return;\n }\n\n if (tokenAmountSigned < 0) {\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(Math.max(tokenAmountSigned, -effectiveTokensHeld));\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n\n resetOrder();\n },\n [effectiveAvailableCash, effectivePrice, effectiveTokensHeld, resetOrder]\n );\n\n const updateOrderFromSlider = React.useCallback(\n (pct: number) => {\n const normalized = (pct - 50) / 50;\n const magnitude = Math.min(Math.abs(normalized), 1);\n if (magnitude < 0.02) {\n resetOrder();\n return;\n }\n if (normalized > 0) {\n const notional = clamp(magnitude * effectiveAvailableCash, 0, effectiveAvailableCash);\n if (notional <= 0) {\n resetOrder();\n return;\n }\n setOrderMode(\"buy\");\n setBuyTrackingMode(\"dollars\");\n setDeltaDollars(notional);\n setDeltaTokensBuy(0);\n setDeltaTokensSell(0);\n return;\n }\n if (normalized < 0) {\n const tokensToSell = clamp(magnitude * effectiveTokensHeld, 0, effectiveTokensHeld);\n if (tokensToSell <= 0) {\n resetOrder();\n return;\n }\n setOrderMode(\"sell\");\n setBuyTrackingMode(\"dollars\");\n setDeltaTokensSell(-tokensToSell);\n setDeltaDollars(0);\n setDeltaTokensBuy(0);\n return;\n }\n resetOrder();\n },\n [effectiveAvailableCash, effectiveTokensHeld, resetOrder]\n );\n\n const handleDragAtClientY = React.useCallback(\n (clientY: number) => {\n if (!houseRef.current) return;\n const rect = houseRef.current.getBoundingClientRect();\n const y = clientY - rect.top;\n const pct = clamp(100 - (y / rect.height) * 100, 0, 100);\n updateOrderFromSlider(pct);\n },\n [updateOrderFromSlider]\n );\n\n const onMouseDown = (e: React.MouseEvent) => {\n e.preventDefault();\n setIsDragging(true);\n\n const onMove = (ev: MouseEvent) => handleDragAtClientY(ev.clientY);\n const onUp = () => {\n setIsDragging(false);\n document.removeEventListener(\"mousemove\", onMove);\n document.removeEventListener(\"mouseup\", onUp);\n };\n\n document.addEventListener(\"mousemove\", onMove);\n document.addEventListener(\"mouseup\", onUp);\n };\n\n const onTouchStart = () => {\n setIsDragging(true);\n\n const onMove = (ev: TouchEvent) => {\n const touch = ev.touches[0];\n if (!touch) return;\n handleDragAtClientY(touch.clientY);\n };\n const onEnd = () => {\n setIsDragging(false);\n document.removeEventListener(\"touchmove\", onMove);\n document.removeEventListener(\"touchend\", onEnd);\n };\n\n document.addEventListener(\"touchmove\", onMove);\n document.addEventListener(\"touchend\", onEnd);\n };\n\n const handleCancel = () => {\n resetOrder();\n };\n\n const handleOrderTypeSelection = (next: \"market\" | \"limit\") => {\n setOrderType(next);\n if (next === \"limit\") {\n setLimitPriceDirty(false);\n setLimitPrice(currentPrice);\n setLimitPriceInput(currentPrice.toFixed(2));\n } else {\n setLimitPriceDirty(false);\n }\n };\n\n const handleConfirm = () => {\n if (!hasChange) return;\n const priceToUse = orderType === \"market\" ? marketAvgPrice ?? currentPrice : limitPrice;\n onConfirmOrder?.({\n side: isIncrease ? \"buy\" : \"sell\",\n orderType,\n tokenId,\n tokenSymbol,\n price: priceToUse,\n deltaTokens,\n deltaValue,\n targetOwnership,\n targetTokens,\n targetValue,\n });\n handleCancel();\n };\n\n const rectTop = 10;\n const rectBottom = 150;\n const totalFillableHeight = rectBottom - rectTop;\n const baselineFillHeight = (baselinePct / 100) * totalFillableHeight;\n const targetFillHeight = (targetPct / 100) * totalFillableHeight;\n const baselineFillY = rectBottom - baselineFillHeight;\n const targetFillY = rectBottom - targetFillHeight;\n\n const showIncrease = targetPct > baselinePct;\n const showDecrease = targetPct < baselinePct;\n\n const valueLabel = orderType === \"limit\" ? `${tokenSymbol} Owned at Limit` : `${tokenSymbol} Owned`;\n const deltaSign = deltaValue > 0 ? \"+\" : deltaValue < 0 ? \"-\" : \"\";\n const percentMarkers = [100, 50, 25, 0];\n\n return (\n <div className={cn(\"relative flex w-full flex-col items-center gap-6 rounded-[12px] bg-black/20 px-8 pb-6 pt-12\", className)} {...props}>\n <div className=\"absolute left-4 top-4 text-[1.1rem] font-semibold tracking-[0.5px] text-white\">Place Order</div>\n\n {hasChange ? (\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"absolute right-3 top-3 rounded-[6px] border border-white/20 bg-white/10 px-2.5 py-1.5 text-[0.7rem] text-[#888] transition-all duration-150 hover:border-white/30 hover:bg-white/[0.15] hover:text-white\"\n >\n ✕ Cancel\n </button>\n ) : null}\n\n <div className=\"text-center\">\n <div className=\"mb-2 text-xs uppercase tracking-[1px] text-[#888]\">{valueLabel}</div>\n <div className=\"flex items-baseline justify-center gap-3\">\n <span\n className={cn(\n \"text-[2.2rem] font-semibold\",\n deltaValue >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n {deltaSign}${fmt0(deltaValue)}\n </span>\n <span className=\"text-lg font-semibold text-white/60\">${fmt0(targetValue)}</span>\n </div>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-[200px] flex-col justify-between text-xs text-white/40\">\n {percentMarkers.map((marker) => (\n <span key={marker}>{marker}%</span>\n ))}\n </div>\n <div\n ref={houseRef}\n className=\"h-[200px] w-[160px] select-none touch-none\"\n style={{ cursor: \"ns-resize\" }}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n >\n <svg viewBox=\"0 0 120 160\" className=\"h-full w-full overflow-visible\">\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" fill=\"rgba(255,255,255,0.04)\" stroke=\"rgba(255,255,255,0.10)\" />\n <clipPath id=\"loaf-clip\">\n <rect x=\"10\" y=\"10\" width=\"100\" height=\"140\" rx=\"8\" />\n </clipPath>\n <g clipPath=\"url(#loaf-clip)\">\n <rect x=\"10\" y={showDecrease ? targetFillY : baselineFillY} width=\"100\" height={showDecrease ? targetFillHeight : baselineFillHeight} fill=\"rgba(220,175,120,0.7)\" />\n {showIncrease ? (\n <rect x=\"10\" y={targetFillY} width=\"100\" height={targetFillHeight - baselineFillHeight} fill=\"rgba(14,203,129,0.35)\" />\n ) : null}\n {showDecrease ? (\n <rect x=\"10\" y={baselineFillY} width=\"100\" height={baselineFillHeight - targetFillHeight} fill=\"rgba(246,70,93,0.35)\" />\n ) : null}\n <line x1=\"12\" y1={targetFillY} x2=\"108\" y2={targetFillY} stroke={showIncrease ? \"#0ecb81\" : showDecrease ? \"#f6465d\" : \"rgba(234,217,162,1)\"} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </g>\n </svg>\n </div>\n </div>\n\n <button\n type=\"button\"\n disabled={!hasChange}\n onClick={handleConfirm}\n className={cn(\n \"w-full rounded-[10px] px-4 py-4 text-base font-semibold transition\",\n !hasChange\n ? \"cursor-not-allowed bg-white/10 text-white/30\"\n : isIncrease\n ? \"bg-[#0ecb81] text-white hover:-translate-y-[1px] hover:shadow-[0_4px_12px_rgba(14,203,129,0.3)]\"\n : \"bg-[#f6465d] text-white hover:-translate-y-[1px] hover:shadow-[0_4px_12px_rgba(246,70,93,0.3)]\"\n )}\n >\n {!hasChange ? \"Adjust Position\" : isIncrease ? `Buy $${fmt0(deltaValue)}` : `Sell $${fmt0(deltaValue)}`}\n </button>\n\n <div className=\"w-full border-t border-white/10 py-4 text-[0.85rem]\">\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">{tokenSymbol} Ownership</span>\n <span className=\"text-white\">\n {currentOwnership.toFixed(2)}%\n <span className=\"mx-1.5 text-white/50\">→</span>\n <input\n type=\"text\"\n value={ownershipInput || targetOwnership.toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setOwnershipInput(val);\n }}\n onFocus={() => setOwnershipInput(targetOwnership.toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(ownershipInput);\n if (Number.isFinite(num)) updateOrderFromOwnership(num);\n setOwnershipInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n className={cn(\n \"w-[70px] rounded-[4px] border bg-white/10 px-2 py-1 text-right font-semibold outline-none\",\n targetOwnership >= currentOwnership\n ? \"border-[rgba(14,203,129,0.3)] text-[#0ecb81] focus:border-[#0ecb81]\"\n : \"border-[rgba(246,70,93,0.3)] text-[#f6465d] focus:border-[#f6465d]\"\n )}\n />\n </span>\n </div>\n\n {orderType === \"market\" ? null : (\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">{isIncrease ? \"Buying\" : \"Selling\"}</span>\n <span className=\"inline-flex items-center gap-1\">\n {orderMode === \"buy\" && buyTrackingMode === \"dollars\" ? <span className=\"mr-1 text-[#0ecb81]\">~</span> : null}\n <input\n type=\"text\"\n value={tokenAmountInput || Math.abs(deltaTokens).toFixed(2)}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\" || /^[0-9]*\\.?[0-9]*$/.test(val)) setTokenAmountInput(val);\n }}\n onFocus={() => setTokenAmountInput(Math.abs(deltaTokens).toFixed(2))}\n onBlur={() => {\n const num = Number.parseFloat(tokenAmountInput);\n if (Number.isFinite(num) && num >= 0) {\n const signed = isIncrease || orderMode === \"none\" ? num : -num;\n updateOrderFromTokenAmount(signed);\n }\n setTokenAmountInput(\"\");\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") (e.target as HTMLInputElement).blur();\n }}\n className={cn(\n \"w-[90px] rounded-[4px] border bg-white/10 px-2 py-1 text-right font-semibold outline-none\",\n isIncrease\n ? \"border-[rgba(14,203,129,0.3)] text-[#0ecb81] focus:border-[#0ecb81]\"\n : \"border-[rgba(246,70,93,0.3)] text-[#f6465d] focus:border-[#f6465d]\"\n )}\n />\n <span className={cn(\"font-semibold\", isIncrease ? \"text-[#0ecb81]\" : \"text-[#f6465d]\")}>tokens</span>\n </span>\n </div>\n )}\n\n <div className=\"flex items-center justify-between py-2\">\n <span className=\"text-white/50\">Est. Fee</span>\n <span className=\"text-white\">{estFeeTokens.toFixed(6)} {tokenSymbol}</span>\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"mb-4 flex w-full rounded-[8px] bg-white/5 p-[3px]\">\n <button\n type=\"button\"\n onClick={() => handleOrderTypeSelection(\"market\")}\n className={cn(\n \"flex-1 rounded-[6px] px-3 py-2 text-[0.8rem] font-medium transition\",\n orderType === \"market\" ? \"bg-[rgba(201,162,39,0.2)] text-[#C9A227]\" : \"text-white/50 hover:bg-white/5\"\n )}\n >\n Market\n </button>\n <button\n type=\"button\"\n onClick={() => handleOrderTypeSelection(\"limit\")}\n className={cn(\n \"flex-1 rounded-[6px] px-3 py-2 text-[0.8rem] font-medium transition\",\n orderType === \"limit\" ? \"bg-[rgba(201,162,39,0.2)] text-[#C9A227]\" : \"text-white/50 hover:bg-white/5\"\n )}\n >\n Limit\n </button>\n </div>\n\n {orderType === \"limit\" ? (\n <div className=\"relative mb-4\">\n <input\n type=\"text\"\n value={limitPriceInput}\n onChange={(e) => {\n const input = e.target.value;\n if (input === \"\" || /^[0-9]*\\.?[0-9]*$/.test(input)) {\n setLimitPriceDirty(true);\n setLimitPriceInput(input);\n const num = Number.parseFloat(input);\n if (Number.isFinite(num) && num > 0) setLimitPrice(num);\n }\n }}\n onBlur={() => {\n const num = Number.parseFloat(limitPriceInput);\n if (Number.isFinite(num) && num > 0) {\n setLimitPriceInput(num.toFixed(2));\n setLimitPrice(num);\n } else {\n setLimitPriceInput(limitPrice.toFixed(2));\n }\n }}\n placeholder=\"Price\"\n className=\"w-full rounded-[8px] border border-white/10 bg-black/30 px-4 py-3 pr-14 text-[0.95rem] text-white outline-none focus:border-[#f0b90b]\"\n />\n <span className=\"absolute right-4 top-1/2 -translate-y-1/2 text-[0.8rem] text-white/50\">USD</span>\n </div>\n ) : null}\n\n <div className=\"flex items-center justify-between text-xs text-white/50\">\n <span>Available: ${availableCash.toLocaleString()}</span>\n <button type=\"button\" className=\"text-[#f0b90b] hover:underline\">\n Add Funds\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\n\nexport type OrderbookSide = \"ask\" | \"bid\";\n\nexport type OrderbookLevel = {\n price: number;\n amount: number;\n depth?: number;\n};\n\nexport type OrderbookTrade = {\n type: \"buy\" | \"sell\";\n price: number;\n amount: number;\n time?: string;\n};\n\nexport interface OrderbookProps extends React.HTMLAttributes<HTMLDivElement> {\n asks: OrderbookLevel[];\n bids: OrderbookLevel[];\n midPrice: number;\n midChangePercent?: number;\n trades?: OrderbookTrade[];\n priceLabel?: string;\n amountLabel?: string;\n precision?: number;\n amountPrecision?: number;\n defaultTab?: \"orderbook\" | \"trades\";\n onTabChange?: (tab: \"orderbook\" | \"trades\") => void;\n rightHeader?: React.ReactNode;\n}\n\nconst formatNumber = (value: number, precision: number) => value.toFixed(precision);\n\nfunction DepthRow({\n side,\n price,\n amount,\n depthPct,\n precision,\n amountPrecision,\n}: {\n side: OrderbookSide;\n price: number;\n amount: number;\n depthPct: number;\n precision: number;\n amountPrecision: number;\n}) {\n const isAsk = side === \"ask\";\n\n return (\n <div className=\"relative grid grid-cols-2 items-center gap-3 px-3 py-1.5\">\n <div\n className={cn(\n \"absolute inset-y-0 right-0\",\n isAsk ? \"bg-rose-900/30\" : \"bg-emerald-900/30\"\n )}\n style={{ width: `${clamp(depthPct, 0, 100)}%` }}\n />\n\n <div className={cn(\"relative z-[1] tabular-nums\", isAsk ? \"text-[#f6465d]\" : \"text-[#0ecb81]\")}\n >\n ${formatNumber(price, precision)}\n </div>\n <div className=\"relative z-[1] text-right tabular-nums text-white/90\">{formatNumber(amount, amountPrecision)}</div>\n </div>\n );\n}\n\nconst clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\n\nexport const Orderbook = React.forwardRef<HTMLDivElement, OrderbookProps>(\n (\n {\n asks,\n bids,\n midPrice,\n midChangePercent,\n trades = [],\n priceLabel = \"Price (USD)\",\n amountLabel = \"Amount\",\n precision = 2,\n amountPrecision = 2,\n defaultTab = \"orderbook\",\n onTabChange,\n rightHeader,\n className,\n ...props\n },\n ref\n ) => {\n const [tab, setTab] = React.useState<\"orderbook\" | \"trades\">(defaultTab);\n const [tradeFilter, setTradeFilter] = React.useState<\"all\" | \"buy\" | \"sell\">(\"all\");\n\n React.useEffect(() => {\n setTab(defaultTab);\n }, [defaultTab]);\n\n const handleTab = (next: \"orderbook\" | \"trades\") => {\n setTab(next);\n onTabChange?.(next);\n };\n\n const maxAskDepth = Math.max(1, ...asks.map((l) => l.depth ?? l.amount));\n const maxBidDepth = Math.max(1, ...bids.map((l) => l.depth ?? l.amount));\n\n const midClass =\n midChangePercent == null\n ? \"text-white\"\n : midChangePercent >= 0\n ? \"text-[#0ecb81]\"\n : \"text-[#f6465d]\";\n\n const tradeFiltered = trades.filter((t) => tradeFilter === \"all\" || t.type === tradeFilter);\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[520px] overflow-hidden rounded-[12px] border border-white/10 bg-black/30 text-white shadow-md\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between px-4 pt-4\">\n <div className=\"flex items-center gap-4\">\n <button\n type=\"button\"\n onClick={() => handleTab(\"orderbook\")}\n className={cn(\n \"relative pb-2 text-sm font-semibold\",\n tab === \"orderbook\" ? \"text-white\" : \"text-white/60\"\n )}\n >\n Orderbook\n {tab === \"orderbook\" ? <span className=\"absolute -bottom-px left-0 h-[2px] w-full bg-[#C9A227]\" /> : null}\n </button>\n <button\n type=\"button\"\n onClick={() => handleTab(\"trades\")}\n className={cn(\n \"relative pb-2 text-sm font-medium\",\n tab === \"trades\" ? \"text-white\" : \"text-white/60\"\n )}\n >\n Trades\n {tab === \"trades\" ? <span className=\"absolute -bottom-px left-0 h-[2px] w-full bg-[#C9A227]\" /> : null}\n </button>\n </div>\n\n {tab === \"trades\" ? (\n <div className=\"flex items-center gap-1 text-xs\">\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"all\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"all\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n All\n </button>\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"buy\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"buy\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n Buy\n </button>\n <button\n type=\"button\"\n onClick={() => setTradeFilter(\"sell\")}\n className={cn(\n \"rounded-md px-2 py-1 transition\",\n tradeFilter === \"sell\" ? \"bg-white/10 text-white\" : \"text-white/70 hover:bg-white/10\"\n )}\n >\n Sell\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-3\">{rightHeader}</div>\n )}\n </div>\n\n <div className=\"px-4 pb-3 pt-2\">\n <div className=\"grid grid-cols-2 gap-3 px-3 py-2 text-xs text-white/60\">\n <div>{priceLabel}</div>\n <div className=\"text-right\">{amountLabel}</div>\n </div>\n\n {tab === \"trades\" ? (\n <div\n className=\"max-h-[380px] overflow-y-auto overflow-x-hidden\"\n style={{ scrollbarGutter: \"stable\" }}\n >\n {tradeFiltered.length === 0 ? (\n <div className=\"px-3 py-10 text-center text-sm text-white/50\">No trades</div>\n ) : (\n <div className=\"divide-y divide-white/5\">\n {tradeFiltered.map((trade, i) => (\n <div key={`${trade.type}-${trade.price}-${trade.amount}-${trade.time ?? i}`} className=\"grid grid-cols-2 items-center gap-3 px-3 py-1.5\">\n <div\n className={cn(\n \"tabular-nums\",\n trade.type === \"buy\" ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n ${formatNumber(trade.price, precision)}\n </div>\n <div className=\"text-right tabular-nums text-white/90\">{formatNumber(trade.amount, amountPrecision)}</div>\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n <>\n <div className=\"divide-y divide-white/5\">\n {asks.map((l, idx) => (\n <DepthRow\n key={`ask-${idx}-${l.price}-${l.amount}`}\n side=\"ask\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxAskDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n\n <div className=\"mt-2 grid grid-cols-2 items-center gap-3 bg-[#0b1a24] px-3 py-2\">\n <div className={cn(\"text-lg font-semibold tabular-nums\", midClass)}>\n ${formatNumber(midPrice, precision)}\n {midChangePercent == null ? null : (\n <span className=\"ml-2 text-sm font-semibold\">{midChangePercent >= 0 ? \"+\" : \"\"}{midChangePercent.toFixed(2)}%</span>\n )}\n </div>\n <div />\n </div>\n\n <div className=\"divide-y divide-white/5\">\n {bids.map((l, idx) => (\n <DepthRow\n key={`bid-${idx}-${l.price}-${l.amount}`}\n side=\"bid\"\n price={l.price}\n amount={l.amount}\n depthPct={((l.depth ?? l.amount) / maxBidDepth) * 100}\n precision={precision}\n amountPrecision={amountPrecision}\n />\n ))}\n </div>\n </>\n )}\n </div>\n </Card>\n );\n }\n);\n\nOrderbook.displayName = \"Orderbook\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type PropertyTourProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title: string;\n src: string;\n poster?: string;\n autoPlay?: boolean;\n muted?: boolean;\n loop?: boolean;\n controls?: boolean;\n playsInline?: boolean;\n};\n\ntype FullscreenDocument = Document & {\n webkitFullscreenElement?: Element | null;\n mozFullScreenElement?: Element | null;\n msFullscreenElement?: Element | null;\n};\n\nexport const PropertyTour = React.forwardRef<HTMLDivElement, PropertyTourProps>(\n (\n {\n className,\n title,\n src,\n poster,\n autoPlay = true,\n muted = true,\n loop = true,\n controls = true,\n playsInline = true,\n ...props\n },\n ref\n ) => {\n const videoRef = React.useRef<HTMLVideoElement | null>(null);\n\n React.useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleFullscreenChange = () => {\n const d = document as FullscreenDocument;\n const isFullscreen = !!(\n d.fullscreenElement ||\n d.webkitFullscreenElement ||\n d.mozFullScreenElement ||\n d.msFullscreenElement\n );\n\n if (isFullscreen) {\n video.style.objectFit = \"contain\";\n video.style.width = \"100vw\";\n video.style.height = \"100vh\";\n video.style.position = \"fixed\";\n video.style.top = \"0\";\n video.style.left = \"0\";\n video.style.transform = \"none\";\n video.style.zIndex = \"9999\";\n } else {\n video.style.objectFit = \"cover\";\n video.style.width = \"100%\";\n video.style.height = \"100%\";\n video.style.position = \"absolute\";\n video.style.top = \"0\";\n video.style.left = \"0\";\n video.style.transform = \"none\";\n video.style.zIndex = \"auto\";\n }\n };\n\n video.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n video.addEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n document.addEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n return () => {\n video.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n video.removeEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n\n document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"webkitfullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"mozfullscreenchange\", handleFullscreenChange);\n document.removeEventListener(\"MSFullscreenChange\", handleFullscreenChange);\n };\n }, []);\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full max-w-[820px] rounded-[12px] border border-white/10 bg-black/30 text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"px-6 pb-0 pt-6\">\n <CardTitle className=\"m-0 text-lg font-semibold text-white\">{title}</CardTitle>\n </CardHeader>\n\n <div className=\"px-6 pb-6 pt-5\">\n <div className=\"relative aspect-video w-full overflow-hidden rounded-lg bg-black\">\n <video\n ref={videoRef}\n className=\"absolute inset-0 h-full w-full object-cover object-center\"\n controls={controls}\n loop={loop}\n autoPlay={autoPlay}\n muted={muted}\n playsInline={playsInline}\n poster={poster}\n >\n <source src={src} />\n Your browser does not support the video tag.\n </video>\n </div>\n </div>\n </Card>\n );\n }\n);\n\nPropertyTour.displayName = \"PropertyTour\";\n","import * as React from \"react\";\n\nimport {\n ArrowUpRight,\n Building2,\n CalendarDays,\n LineChart,\n Newspaper,\n Sparkles,\n type LucideIcon,\n} from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertyNewsType = \"property\" | \"market\" | \"portfolio\" | (string & {});\n\nexport type PropertyNewsItem = {\n id?: string;\n title: string;\n date: string | Date;\n type?: PropertyNewsType;\n description?: string;\n actionLabel?: string;\n href?: string;\n onAction?: (item: PropertyNewsItem) => void;\n};\n\nexport interface PropertyNewsUpdatesProps extends React.HTMLAttributes<HTMLDivElement> {\n items: PropertyNewsItem[];\n heading?: string;\n subheading?: string;\n emptyState?: React.ReactNode;\n}\n\ntype TypeMeta = {\n label: string;\n accent: string;\n pillBg: string;\n pillBorder: string;\n pillColor: string;\n icon: LucideIcon;\n};\n\nconst TYPE_META: Record<\"property\" | \"market\" | \"portfolio\", TypeMeta> = {\n property: {\n label: \"Property Update\",\n accent: \"#f8d12f\",\n pillBg: \"rgba(248, 209, 47, 0.12)\",\n pillBorder: \"rgba(248, 209, 47, 0.45)\",\n pillColor: \"#f8d12f\",\n icon: Building2,\n },\n market: {\n label: \"Market Insight\",\n accent: \"#0ecb81\",\n pillBg: \"rgba(14, 203, 129, 0.12)\",\n pillBorder: \"rgba(14, 203, 129, 0.45)\",\n pillColor: \"#0ecb81\",\n icon: LineChart,\n },\n portfolio: {\n label: \"Portfolio Signal\",\n accent: \"#6c8cff\",\n pillBg: \"rgba(108, 140, 255, 0.12)\",\n pillBorder: \"rgba(108, 140, 255, 0.45)\",\n pillColor: \"#c9d5ff\",\n icon: Sparkles,\n },\n};\n\nconst getTypeMeta = (type?: PropertyNewsType): TypeMeta => {\n if (!type) return TYPE_META.property;\n const key = type as keyof typeof TYPE_META;\n if (key in TYPE_META) return TYPE_META[key];\n return {\n label: type.toString(),\n accent: \"#f5f5f5\",\n pillBg: \"rgba(255,255,255,0.08)\",\n pillBorder: \"rgba(255,255,255,0.25)\",\n pillColor: \"#ffffff\",\n icon: Newspaper,\n };\n};\n\nconst formatDate = (value: string | Date) => {\n const date = typeof value === \"string\" ? new Date(value) : value;\n if (Number.isNaN(date.getTime())) return typeof value === \"string\" ? value : \"\";\n return date.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n};\n\nexport const PropertyNewsUpdates = React.forwardRef<HTMLDivElement, PropertyNewsUpdatesProps>(\n ({ className, heading = \"Latest property intelligence\", subheading, items, emptyState, ...props }, ref) => {\n const hasItems = Array.isArray(items) && items.length > 0;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full max-w-[480px] rounded-[20px] border border-white/10 bg-gradient-to-br from-[#06090f] via-[#0f1621] to-[#111b2a] p-6 text-white shadow-[0_30px_80px_rgba(3,7,18,0.65)] backdrop-blur-xl\",\n className\n )}\n {...props}\n >\n <div className=\"space-y-1\">\n <p className=\"text-[0.85rem] uppercase tracking-[0.25em] text-white/50\">{heading}</p>\n {subheading ? <p className=\"text-sm text-white/60\">{subheading}</p> : null}\n </div>\n\n <div className=\"mt-5 flex flex-col gap-4\">\n {hasItems\n ? items.map((item, index) => {\n const meta = getTypeMeta(item.type);\n const Icon = meta.icon;\n const key = item.id ?? `${item.title}-${index}`;\n\n const content = (\n <div\n className=\"relative flex w-full gap-4 rounded-2xl border border-white/5 bg-white/[0.04] p-4 transition hover:border-white/15 hover:bg-white/[0.06]\"\n key={key}\n >\n <div className=\"flex flex-col items-center\">\n <div\n className=\"flex h-12 w-12 items-center justify-center rounded-full border text-white\"\n style={{\n background: meta.pillBg,\n borderColor: meta.pillBorder,\n color: meta.pillColor,\n }}\n >\n <Icon className=\"h-5 w-5\" />\n </div>\n {index !== items.length - 1 ? (\n <div className=\"mt-2 h-full w-px flex-1 bg-white/10\" />\n ) : null}\n </div>\n\n <div className=\"flex flex-1 flex-col\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <span className=\"text-[0.7rem] font-semibold uppercase tracking-[0.3em]\" style={{ color: meta.accent }}>\n {meta.label}\n </span>\n <span className=\"flex items-center text-xs text-white/60\">\n <CalendarDays className=\"mr-1 h-3.5 w-3.5\" />\n {formatDate(item.date)}\n </span>\n </div>\n\n <p className=\"mt-2 text-base font-semibold leading-snug\">{item.title}</p>\n {item.description ? (\n <p className=\"mt-1 text-sm text-white/65\">{item.description}</p>\n ) : null}\n\n {(item.href || item.onAction) && item.actionLabel ? (\n <button\n type=\"button\"\n className=\"group mt-3 inline-flex items-center gap-1 text-sm font-semibold text-white transition hover:text-white/80\"\n onClick={() => {\n if (item.href) {\n window?.open?.(item.href, \"_blank\", \"noopener,noreferrer\");\n }\n item.onAction?.(item);\n }}\n >\n {item.actionLabel}\n <ArrowUpRight className=\"h-4 w-4 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5\" />\n </button>\n ) : null}\n </div>\n </div>\n );\n\n return content;\n })\n : emptyState ?? (\n <div className=\"flex flex-col items-center justify-center rounded-2xl border border-dashed border-white/20 px-6 py-10 text-center text-sm text-white/60\">\n <Newspaper className=\"mb-3 h-8 w-8 text-white/40\" />\n No property news yet. Updates will land here as soon as we receive new intelligence.\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nPropertyNewsUpdates.displayName = \"PropertyNewsUpdates\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nexport type PropertyAddressOption = {\n id: string;\n label: string;\n};\n\nexport type PropertyCompareBarProps = React.HTMLAttributes<HTMLDivElement> & {\n addresses: (PropertyAddressOption | string)[];\n selectedAddressId?: string;\n onSelectAddress?: (addressId: string) => void;\n compareLabel?: string;\n onCompareClick?: () => void;\n compareIcon?: React.ReactNode;\n};\n\nexport const PropertyCompareBar = React.forwardRef<HTMLDivElement, PropertyCompareBarProps>(\n (\n {\n className,\n addresses,\n selectedAddressId,\n onSelectAddress,\n compareLabel = \"Compare\",\n onCompareClick,\n compareIcon,\n ...props\n },\n ref\n ) => {\n const normalizedAddresses = React.useMemo<PropertyAddressOption[]>(() => {\n return addresses.map((option) =>\n typeof option === \"string\" ? { id: option, label: option } : option\n );\n }, [addresses]);\n\n const hasAddresses = normalizedAddresses.length > 0;\n const firstAddressId = normalizedAddresses[0]?.id;\n\n const isControlled = selectedAddressId !== undefined;\n\n const [internalSelectedId, setInternalSelectedId] = React.useState<string | undefined>(() =>\n isControlled ? undefined : firstAddressId\n );\n\n const resolvedSelectedId = isControlled ? selectedAddressId : internalSelectedId;\n\n React.useEffect(() => {\n if (!isControlled) {\n setInternalSelectedId((current) => {\n if (current != null && normalizedAddresses.some((option) => option.id === current)) {\n return current;\n }\n\n return firstAddressId;\n });\n }\n }, [firstAddressId, isControlled, normalizedAddresses]);\n\n const selectedOption =\n normalizedAddresses.find((option) => option.id === resolvedSelectedId) ?? normalizedAddresses[0];\n\n const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);\n\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!isDropdownOpen) return;\n\n const handleClick = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsDropdownOpen(false);\n }\n };\n\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsDropdownOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKey);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, [isDropdownOpen]);\n\n const defaultCompareIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M4 4h7v7H4V4zm0 9h7v7H4v-7zm9-9h7v7h-7V4zm0 9h7v7h-7v-7z\" />\n </svg>\n );\n\n const handleAddressSelect = (addressId: string) => {\n if (!isControlled) {\n setInternalSelectedId(addressId);\n }\n onSelectAddress?.(addressId);\n setIsDropdownOpen(false);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex w-full flex-col gap-3 rounded-[14px] border border-[#1a1f2b] bg-[#0f131c] px-4 py-3 text-white shadow-[0_18px_45px_rgba(0,0,0,0.55)] md:flex-row md:items-center md:gap-4\",\n className\n )}\n {...props}\n >\n <div className=\"relative flex-1\" ref={dropdownRef}>\n <button\n type=\"button\"\n disabled={!hasAddresses}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n className={cn(\n \"flex h-[42px] w-full items-center justify-between rounded-[10px] border border-[#202632] bg-[#181c27] px-4 text-left text-[15px] font-semibold text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.05)] transition hover:bg-[#1d222e] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-accent,#e6c87e)]\",\n !hasAddresses && \"text-white/40\"\n )}\n >\n <span className=\"truncate\">\n {selectedOption ? selectedOption.label : hasAddresses ? \"Select address\" : \"No addresses available\"}\n </span>\n <span className=\"ml-3 flex items-center text-white/60 transition-transform\" aria-hidden>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={cn(\"transition-transform\", isDropdownOpen && \"rotate-180\")}\n >\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>\n </span>\n </button>\n\n {isDropdownOpen && hasAddresses ? (\n <div className=\"absolute left-0 top-[calc(100%+8px)] z-20 w-full rounded-[12px] border border-[#1f2431] bg-[#161925] py-1 shadow-[0_25px_55px_rgba(0,0,0,0.65)] backdrop-blur-sm\">\n {normalizedAddresses.map((option) => {\n const active = option.id === resolvedSelectedId;\n return (\n <button\n key={option.id}\n type=\"button\"\n className={cn(\n \"flex w-full items-center px-4 py-2 text-left text-[14px] text-white/80 transition hover:bg-white/5 hover:text-white\",\n active && \"text-white\"\n )}\n onClick={() => handleAddressSelect(option.id)}\n >\n {option.label}\n </button>\n );\n })}\n </div>\n ) : null}\n </div>\n\n <Button\n variant=\"accentOutline\"\n size=\"sm\"\n className=\"flex w-full items-center justify-center gap-2 rounded-[10px] border-[var(--color-accent,#e6c87e)] bg-transparent px-4 py-2 text-[14px] font-semibold text-[var(--color-accent,#e6c87e)] shadow-[0_10px_25px_rgba(0,0,0,0.45)] transition hover:bg-[rgba(230,200,126,0.08)] md:w-max\"\n onClick={onCompareClick}\n disabled={!hasAddresses}\n >\n <span className=\"text-base\">{compareIcon ?? defaultCompareIcon}</span>\n {compareLabel}\n </Button>\n </div>\n );\n }\n);\n\nPropertyCompareBar.displayName = \"PropertyCompareBar\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type YourOrderSide = \"buy\" | \"sell\";\n\nexport type YourOrder = {\n id: string;\n asset: string;\n side: YourOrderSide;\n date: string;\n price: number;\n amount: number;\n total: number;\n filledPercent: number;\n status?: string;\n};\n\nexport type YourOrdersProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title?: string;\n orders: YourOrder[];\n onEditPrice?: (order: YourOrder) => void;\n onEditAmount?: (order: YourOrder) => void;\n onCancel?: (order: YourOrder) => void;\n};\n\nconst clampPct = (pct: number) => Math.min(100, Math.max(0, pct));\n\nconst EditIcon = ({ className }: { className?: string }) => (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M12 20H21\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nexport const YourOrders = React.forwardRef<HTMLDivElement, YourOrdersProps>(\n ({\n className,\n title = \"Your Orders\",\n orders,\n onEditPrice,\n onEditAmount,\n onCancel,\n ...props\n }, ref) => {\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full min-h-[301.52px] rounded-[12px] border border-white/10 bg-black/30 text-white backdrop-blur-md max-[1024px]:min-h-[250px] max-[480px]:min-h-[200px]\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"px-6 pb-2 pt-6\">\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">{title}</CardTitle>\n </CardHeader>\n\n <div className=\"px-6 pb-6 pt-2\">\n <div className=\"grid grid-cols-[1.2fr_0.8fr_1fr_1fr_1fr_1fr_1.2fr_0.8fr] border-b border-white/10 pb-2 text-[0.85rem] font-medium text-white/60\">\n <div className=\"px-2\">Asset</div>\n <div className=\"px-2\">Type</div>\n <div className=\"px-2\">Date</div>\n <div className=\"px-2\">Price</div>\n <div className=\"px-2\">Amount</div>\n <div className=\"px-2\">Total</div>\n <div className=\"px-2\">Filled</div>\n <div className=\"px-2 text-center\">Actions</div>\n </div>\n\n {orders.length === 0 ? (\n <div className=\"py-10 text-center text-sm text-white/50\">No orders</div>\n ) : (\n <div>\n {orders.map((order) => {\n const sideClass = order.side === \"buy\" ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n const filled = clampPct(order.filledPercent ?? 0);\n const isCancelled = order.status?.toUpperCase() === \"CANCELLED\";\n\n const canEditPrice = Boolean(onEditPrice);\n const canEditAmount = Boolean(onEditAmount);\n const canCancel = Boolean(onCancel);\n\n return (\n <div\n key={order.id}\n className=\"grid grid-cols-[1.5fr_0.8fr_0.8fr_1fr_0.8fr_1fr_1fr_0.8fr] items-center border-b border-white/5 py-2 text-[0.9rem] transition-colors hover:bg-white/[0.03]\"\n >\n <div className=\"truncate px-2 font-medium\">{order.asset}</div>\n <div className={cn(\"px-2 font-medium uppercase\", sideClass)}>{order.side}</div>\n <div className=\"px-2 font-medium\">{order.date}</div>\n\n <div className=\"px-2 font-medium\">\n <span className=\"tabular-nums\">${order.price.toLocaleString()}</span>\n <button\n type=\"button\"\n onClick={canEditPrice ? () => onEditPrice?.(order) : undefined}\n className={cn(\n \"ml-1 inline-flex items-center justify-center text-white/60 transition-colors\",\n canEditPrice ? \"cursor-pointer hover:text-[#C9A227] active:translate-y-px\" : \"cursor-default\"\n )}\n aria-label=\"Edit price\"\n >\n <EditIcon className=\"h-[14px] w-[14px]\" />\n </button>\n </div>\n\n <div className=\"px-2 font-medium\">\n <span className=\"tabular-nums\">{order.amount.toLocaleString()}</span>\n <button\n type=\"button\"\n onClick={canEditAmount ? () => onEditAmount?.(order) : undefined}\n className={cn(\n \"ml-1 inline-flex items-center justify-center text-white/60 transition-colors\",\n canEditAmount ? \"cursor-pointer hover:text-[#C9A227] active:translate-y-px\" : \"cursor-default\"\n )}\n aria-label=\"Edit amount\"\n >\n <EditIcon className=\"h-[14px] w-[14px]\" />\n </button>\n </div>\n\n <div className=\"px-2 font-medium tabular-nums\">${order.total.toLocaleString()}</div>\n\n <div className=\"px-2\">\n <div className=\"text-[0.875rem] font-medium tabular-nums\">{filled.toFixed(0)}%</div>\n <div className=\"mt-1 h-1 w-4/5 overflow-hidden rounded-sm bg-white/10\">\n <div className=\"h-full rounded-sm bg-[#C9A227]\" style={{ width: `${filled}%` }} />\n </div>\n </div>\n\n <div className=\"px-2 text-center\">\n {isCancelled ? (\n <span className=\"inline-flex items-center justify-center rounded border border-white/20 px-3 py-1 text-[0.78rem] uppercase tracking-wide text-[#f6465d]\">\n Cancelled\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={canCancel ? () => onCancel?.(order) : undefined}\n className={cn(\n \"rounded border border-white/40 px-3 py-1 text-[0.8rem] text-white/70 transition-colors\",\n canCancel ? \"cursor-pointer hover:bg-white/10 active:text-[#f6465d] active:border-[#f6465d] active:translate-y-px\" : \"cursor-default\"\n )}\n >\n Cancel\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </Card>\n );\n }\n);\n\nYourOrders.displayName = \"YourOrders\";\n","import * as React from \"react\";\nimport {\n createChart,\n type IChartApi,\n type IPriceLine,\n type ISeriesApi,\n type Time,\n} from \"lightweight-charts\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, CardHeader, CardTitle } from \"./card\";\n\nexport type PriceChartRange = \"1D\" | \"1W\" | \"1M\" | \"3M\" | \"1Y\";\n\nexport type PriceChartCandle = {\n time: Time;\n open: number;\n high: number;\n low: number;\n close: number;\n};\n\nexport type PriceChartProps = Omit<React.ComponentPropsWithoutRef<typeof Card>, \"title\"> & {\n title?: string;\n ranges?: PriceChartRange[];\n selectedRange?: PriceChartRange;\n onRangeChange?: (range: PriceChartRange) => void;\n data: PriceChartCandle[];\n price?: number;\n changePercent?: number;\n currencySymbol?: string;\n height?: number;\n};\n\nconst defaultRanges: PriceChartRange[] = [\"1D\", \"1W\", \"1M\", \"3M\", \"1Y\"];\n\nconst formatPrice = (value: number, currencySymbol: string) => {\n return `${currencySymbol}${value.toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n};\n\nexport const PriceChart = React.forwardRef<HTMLDivElement, PriceChartProps>(\n (\n {\n className,\n title = \"Price Chart\",\n ranges = defaultRanges,\n selectedRange,\n onRangeChange,\n data,\n price,\n changePercent,\n currencySymbol = \"$\",\n height = 301.52,\n ...props\n },\n ref\n ) => {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const chartRef = React.useRef<IChartApi | null>(null);\n const seriesRef = React.useRef<ISeriesApi<\"Candlestick\"> | null>(null);\n const priceLineRef = React.useRef<IPriceLine | null>(null);\n const [hoveredRange, setHoveredRange] = React.useState<PriceChartRange | null>(null);\n\n const resolvedPrice = React.useMemo(() => {\n if (price != null) return price;\n const last = data.at(-1);\n return last?.close;\n }, [data, price]);\n\n const inferredChangePercent = React.useMemo(() => {\n if (changePercent != null) return changePercent;\n const first = data[0]?.open;\n const last = data.at(-1)?.close;\n if (first == null || last == null || first === 0) return undefined;\n return ((last - first) / first) * 100;\n }, [changePercent, data]);\n\n React.useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const chart = createChart(el, {\n autoSize: true,\n layout: {\n background: { color: \"transparent\" },\n textColor: \"rgba(255,255,255,0.55)\",\n fontFamily: \"inherit\",\n },\n grid: {\n vertLines: { color: \"rgba(255,255,255,0.06)\" },\n horzLines: { color: \"rgba(255,255,255,0.06)\" },\n },\n rightPriceScale: {\n borderColor: \"rgba(230, 200, 126, 0.25)\",\n textColor: \"rgba(230, 200, 126, 0.7)\",\n },\n timeScale: {\n borderColor: \"rgba(255,255,255,0.06)\",\n timeVisible: true,\n secondsVisible: false,\n },\n crosshair: {\n vertLine: { color: \"rgba(255,255,255,0.12)\" },\n horzLine: { color: \"rgba(255,255,255,0.12)\" },\n },\n });\n\n const series = chart.addCandlestickSeries({\n upColor: \"#0ecb81\",\n downColor: \"#f6465d\",\n borderVisible: false,\n wickUpColor: \"#0ecb81\",\n wickDownColor: \"#f6465d\",\n });\n\n chartRef.current = chart;\n seriesRef.current = series;\n\n return () => {\n chartRef.current = null;\n seriesRef.current = null;\n chart.remove();\n };\n }, []);\n\n React.useEffect(() => {\n const chart = chartRef.current;\n const series = seriesRef.current;\n if (!chart || !series) return;\n\n series.setData(data);\n\n if (priceLineRef.current) {\n series.removePriceLine(priceLineRef.current);\n priceLineRef.current = null;\n }\n\n if (resolvedPrice != null) {\n const priceLineColor = \"rgba(230, 200, 126, 0.9)\";\n\n priceLineRef.current = series.createPriceLine({\n price: resolvedPrice,\n color: priceLineColor,\n lineWidth: 1,\n lineStyle: 2,\n axisLabelVisible: true,\n title: resolvedPrice.toFixed(2),\n });\n }\n\n chart.timeScale().fitContent();\n }, [data, resolvedPrice]);\n\n const sign = inferredChangePercent == null ? null : inferredChangePercent >= 0 ? \"+\" : \"\";\n const changeClass =\n inferredChangePercent == null ? \"\" : inferredChangePercent >= 0 ? \"text-[#0ecb81]\" : \"text-[#f6465d]\";\n const badgeClass =\n inferredChangePercent == null\n ? \"\"\n : inferredChangePercent >= 0\n ? \"bg-[#0ecb81]/15 text-[#0ecb81]\"\n : \"bg-[#f6465d]/15 text-[#f6465d]\";\n\n const btnBaseStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-card-dark, rgba(255, 255, 255, 0.05))\",\n borderColor: \"var(--color-border, rgba(255, 255, 255, 0.12))\",\n color: \"var(--color-text-secondary, rgba(255, 255, 255, 0.7))\",\n };\n\n const btnHoverStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-accent-dark, rgba(230, 200, 126, 0.15))\",\n color: \"var(--color-text, #ffffff)\",\n };\n\n const btnActiveStyle: React.CSSProperties = {\n backgroundColor: \"var(--color-accent, #e6c87e)\",\n borderColor: \"var(--color-accent, #e6c87e)\",\n color: \"#000000\",\n };\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"w-full min-h-[450px] rounded-lg border border-white/10 bg-black/30 text-white backdrop-blur-md\",\n className\n )}\n {...props}\n >\n <CardHeader className=\"flex flex-row items-start justify-between gap-4 px-6 pb-2 pt-6\">\n <div>\n <CardTitle className=\"m-0 text-[1.1rem] font-semibold text-white\">{title}</CardTitle>\n <div className=\"mt-3 flex items-center gap-2\">\n {ranges.map((r) => {\n const active = r === selectedRange;\n const hovered = hoveredRange === r;\n const style: React.CSSProperties = {\n ...btnBaseStyle,\n ...(hovered ? btnHoverStyle : null),\n ...(active ? btnActiveStyle : null),\n };\n return (\n <button\n key={r}\n type=\"button\"\n onClick={() => onRangeChange?.(r)}\n onMouseEnter={() => setHoveredRange(r)}\n onMouseLeave={() => setHoveredRange((prev) => (prev === r ? null : prev))}\n style={style}\n className={cn(\n \"rounded border px-3 py-1 text-[0.85rem] font-medium transition-all duration-200\"\n )}\n >\n {r}\n </button>\n );\n })}\n </div>\n </div>\n\n <div className=\"flex items-center gap-3\">\n {resolvedPrice == null ? null : (\n <div className={cn(\"text-xl font-semibold tabular-nums\", changeClass)}>\n {formatPrice(resolvedPrice, currencySymbol)}\n </div>\n )}\n {inferredChangePercent == null ? null : (\n <div className={cn(\"rounded-md px-2 py-1 text-xs font-semibold tabular-nums\", badgeClass)}>\n {sign}\n {inferredChangePercent?.toFixed(2)}%\n </div>\n )}\n </div>\n </CardHeader>\n\n <div className=\"px-6 pb-6 pt-2\">\n <div\n ref={containerRef}\n className=\"w-full overflow-hidden rounded-lg\"\n style={{ height }}\n />\n </div>\n </Card>\n );\n }\n);\n\nPriceChart.displayName = \"PriceChart\";\n","import * as React from \"react\";\n\nimport { BedDouble, Bath, CarFront } from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertyHeroHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n imageUrl: string;\n imageAlt?: string;\n name: string;\n location: string;\n price?: number;\n currencySymbol?: string;\n changePercent?: number;\n beds?: number;\n baths?: number;\n cars?: number;\n propertyTypeLabel?: string;\n onTrade?: () => void;\n onMakeOffer?: () => void;\n};\n\nconst formatPrice = (value: number, currencySymbol: string) => {\n return `${currencySymbol}${value.toLocaleString(undefined, {\n minimumFractionDigits: 3,\n maximumFractionDigits: 3,\n })}`;\n};\n\nexport const PropertyHeroHeader = React.forwardRef<HTMLDivElement, PropertyHeroHeaderProps>(\n (\n {\n className,\n imageUrl,\n imageAlt,\n name,\n location,\n price,\n currencySymbol = \"$\",\n changePercent,\n beds,\n baths,\n cars,\n propertyTypeLabel,\n onTrade,\n onMakeOffer,\n ...props\n },\n ref\n ) => {\n const isPositive = changePercent == null ? undefined : changePercent >= 0;\n\n const tradeHoverColor = \"var(--color-accent-hover, #f8d12f)\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative w-full overflow-hidden bg-black h-[500px] rounded-[12px] max-[768px]:h-[400px] max-[768px]:rounded-lg max-[480px]:h-[350px] max-[480px]:rounded-md\",\n className\n )}\n {...props}\n >\n <img\n src={imageUrl}\n alt={imageAlt ?? name}\n className=\"h-full w-full object-cover object-center block max-w-none min-w-[120%] min-h-[120%]\"\n style={{ transform: \"scale(1.0)\", transformOrigin: \"center\" }}\n />\n\n <div className=\"absolute bottom-0 left-0 right-0 flex w-full items-end justify-between p-8 max-[768px]:flex-col max-[768px]:items-start max-[768px]:gap-4 max-[768px]:p-6 max-[480px]:p-4\">\n <div className=\"inline-block w-auto max-w-[70%] rounded-lg bg-black/15 px-4 py-3 text-white shadow-[0px_1px_1px_rgba(0,0,0,0.3)] backdrop-blur-[3px] max-[768px]:w-full max-[768px]:max-w-full max-[768px]:px-3 max-[768px]:py-3 max-[480px]:px-3 max-[480px]:py-2\">\n <h1 className=\"mb-2 text-[2.5rem] leading-tight text-white [text-shadow:0_2px_4px_rgba(0,0,0,0.3)] max-[768px]:mb-[0.4rem] max-[768px]:text-[2rem] max-[480px]:mb-[0.3rem] max-[480px]:text-[1.75rem]\">\n {name}\n </h1>\n\n <div className=\"mb-3 flex flex-wrap items-center text-[1.25rem] text-white/90 max-[768px]:mb-[0.6rem] max-[768px]:text-[1.1rem] max-[480px]:mb-[0.5rem] max-[480px]:text-[1rem]\">\n <span>{location}</span>\n {price == null ? null : (\n <span\n className=\"ml-4 flex items-center border-l border-white/30 pl-4 font-semibold\"\n style={{ color: \"var(--color-accent, #e6c87e)\" }}\n >\n {formatPrice(price, currencySymbol)}\n {changePercent == null ? null : (\n <span\n className={cn(\n \"ml-2 flex items-center text-[0.875rem] font-medium\",\n isPositive ? \"text-[#0ecb81]\" : \"text-[#f6465d]\"\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"mr-[0.15rem]\"\n >\n <path d={isPositive ? \"M7 14l5-5 5 5H7z\" : \"M7 10l5 5 5-5H7z\"} />\n </svg>\n {Math.abs(changePercent).toFixed(2)}%\n </span>\n )}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-6 text-[0.95rem] text-white/90 max-[768px]:hidden\">\n {beds == null ? null : (\n <div className=\"flex items-center\">\n <BedDouble className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{beds} Beds</span>\n </div>\n )}\n {baths == null ? null : (\n <div className=\"flex items-center\">\n <Bath className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{baths} Baths</span>\n </div>\n )}\n {cars == null ? null : (\n <div className=\"flex items-center\">\n <CarFront className=\"mr-2 h-[18px] w-[18px]\" />\n <span>{cars} Cars</span>\n </div>\n )}\n {propertyTypeLabel == null ? null : <div>{propertyTypeLabel}</div>}\n </div>\n </div>\n\n <div className=\"flex flex-col gap-3 max-[768px]:w-full max-[768px]:flex-row max-[768px]:justify-between max-[768px]:gap-2 max-[480px]:gap-2\">\n <button\n type=\"button\"\n onClick={onTrade}\n className=\"rounded border border-transparent px-6 py-3 font-semibold transition-all hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] max-[768px]:flex-1 max-[768px]:px-5 max-[768px]:py-2.5 max-[768px]:text-[0.95rem] max-[480px]:px-4 max-[480px]:py-2 max-[480px]:text-[0.9rem]\"\n style={{ backgroundColor: \"var(--color-accent, #e6c87e)\", color: \"black\" }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = tradeHoverColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = \"var(--color-accent, #e6c87e)\";\n }}\n >\n Trade\n </button>\n\n <button\n type=\"button\"\n onClick={onMakeOffer}\n className=\"rounded border px-6 py-3 font-semibold transition-all hover:-translate-y-0.5 hover:shadow-[0_4px_8px_rgba(0,0,0,0.2)] active:translate-y-0 active:shadow-[0_2px_4px_rgba(0,0,0,0.1)] max-[768px]:flex-1 max-[768px]:px-5 max-[768px]:py-2.5 max-[768px]:text-[0.95rem] max-[480px]:px-4 max-[480px]:py-2 max-[480px]:text-[0.9rem]\"\n style={{\n backgroundColor: \"transparent\",\n borderColor: \"var(--color-accent, #e6c87e)\",\n color: \"var(--color-accent, #e6c87e)\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = \"rgba(240, 185, 11, 0.1)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n >\n Make Offer\n </button>\n </div>\n </div>\n </div>\n );\n }\n);\n\nPropertyHeroHeader.displayName = \"PropertyHeroHeader\";\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type PropertySubheaderTab = {\n id: string;\n label: string;\n hasNotification?: boolean;\n notificationColor?: string;\n};\n\nexport type PropertySubheaderAction = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick?: () => void;\n};\n\nexport type PropertySubheaderProps = React.HTMLAttributes<HTMLDivElement> & {\n tabs: PropertySubheaderTab[];\n activeTabId: string;\n onTabChange?: (tabId: string) => void;\n actions?: PropertySubheaderAction[];\n};\n\nexport const PropertySubheader = React.forwardRef<HTMLDivElement, PropertySubheaderProps>(\n ({ className, tabs, activeTabId, onTabChange, actions, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full font-normal\",\n \"flex flex-col gap-3\",\n \"md:flex-row md:items-center md:justify-between\",\n className\n )}\n {...props}\n >\n <div\n className={cn(\n \"flex items-center border-b border-white/10\",\n \"overflow-x-auto md:overflow-visible\",\n \"[-webkit-overflow-scrolling:touch]\",\n \"[scrollbar-width:none]\",\n \"[scroll-behavior:smooth]\",\n \"[touch-action:pan-x]\",\n \"md:border-b-0\"\n )}\n style={{ WebkitTapHighlightColor: \"transparent\" }}\n >\n <div className=\"flex min-w-max\">\n {tabs.map((tab) => {\n const active = tab.id === activeTabId;\n\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange?.(tab.id)}\n className={cn(\n \"relative whitespace-nowrap\",\n \"px-6 py-4\",\n \"font-normal\",\n \"transition-colors\",\n \"max-[768px]:px-[1.2rem] max-[768px]:py-[0.8rem]\",\n \"max-[480px]:px-4 max-[480px]:py-[0.7rem] max-[480px]:text-[0.9rem]\",\n active\n ? \"font-semibold text-[var(--color-accent,#e6c87e)]\"\n : \"text-white/60 hover:text-white\"\n )}\n style={{\n borderBottom: active ? \"2px solid var(--color-accent, #e6c87e)\" : \"2px solid transparent\",\n minWidth: \"80px\",\n touchAction: \"manipulation\",\n }}\n >\n {tab.label}\n\n {tab.hasNotification ? (\n <span\n className=\"absolute right-[10px] top-[10px] h-2 w-2 rounded-full animate-pulse\"\n style={{\n backgroundColor: tab.notificationColor ?? \"#f6465d\",\n boxShadow: \"0 0 0 0 rgba(246, 70, 93, 0.7)\",\n }}\n />\n ) : null}\n </button>\n );\n })}\n </div>\n </div>\n\n {actions != null && actions.length > 0 ? (\n <div\n className={cn(\n \"flex items-center gap-[10px]\",\n \"overflow-x-auto md:overflow-visible\",\n \"[scrollbar-width:none]\",\n \"md:justify-end\",\n \"max-[768px]:w-full max-[768px]:justify-center max-[768px]:pb-2 max-[768px]:mb-4\"\n )}\n >\n {actions.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n onClick={action.onClick}\n className={cn(\n \"flex shrink-0 items-center gap-[5px] whitespace-nowrap\",\n \"rounded\",\n \"border border-white/10\",\n \"bg-transparent\",\n \"px-3 py-1.5 text-[14px] font-normal\",\n \"transition-all\",\n \"max-[768px]:px-2.5 max-[768px]:py-[5px] max-[768px]:text-[13px]\",\n \"hover:bg-white/5 hover:border-[var(--color-accent,#e6c87e)] hover:text-[var(--color-accent,#e6c87e)]\"\n )}\n >\n {action.icon}\n {action.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nPropertySubheader.displayName = \"PropertySubheader\";\n"]}